使用pandas数据帧进行主成分分析

use*_*813 43 python scientific-computing pca pandas principal-components

如何根据pandas数据框中的数据计算主成分分析?

Aka*_*all 73

大多数sklearn对象都可以pandas很好地处理数据帧,这样的事情对你有用吗?

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA

df = pd.DataFrame(data=np.random.normal(0, 1, (20, 10)))

pca = PCA(n_components=5)
pca.fit(df)
Run Code Online (Sandbox Code Playgroud)

您可以使用自己访问组件

pca.components_ 
Run Code Online (Sandbox Code Playgroud)

  • 这非常有效.只是一个可能感兴趣的补充:与数组相反,最终使用DataFrame也很方便.要做到这一点,我会做类似的事情:pandas.DataFrame(pca.transform(df),columns = ['PCA%i'%i for i in range(n_components)],index = df.index),where I Ive设置n_components = 5.此外,您在代码上方的文本中有一个拼写错误,"panadas"应该是"pandas".:) (14认同)
  • 就我而言,我想要组件,而不是转换,因此采用 @Moot 的语法,我使用“df = pandas.DataFrame(pca.components_)”。最后还要注意的是,如果您打算尝试将这个新的“df”与点积一起使用,请务必查看此链接:[/sf/ask/1153091061/ in-pandas/16473007] (4认同)

NL2*_*des 8

import pandas
from sklearn.decomposition import PCA
import numpy
import matplotlib.pyplot as plot

df = pandas.DataFrame(data=numpy.random.normal(0, 1, (20, 10)))

# You must normalize the data before applying the fit method
df_normalized=(df - df.mean()) / df.std()
pca = PCA(n_components=df.shape[1])
pca.fit(df_normalized)

# Reformat and view results
loadings = pandas.DataFrame(pca.components_.T,
columns=['PC%s' % _ for _ in range(len(df_normalized.columns))],
index=df.columns)
print(loadings)

plot.plot(pca.explained_variance_ratio_)
plot.ylabel('Explained Variance')
plot.xlabel('Components')
plot.show()
Run Code Online (Sandbox Code Playgroud)