Python 仅包含np数组的一列上的关联
我使用的是一个数据帧,每行有一列包含一个np.array(在本例中,表示当时大脑记录的平均波形)。我想计算此列的皮尔逊相关性(逐数组) 这是我的密码Python 仅包含np数组的一列上的关联,python,pandas,numpy,correlation,Python,Pandas,Numpy,Correlation,我使用的是一个数据帧,每行有一列包含一个np.array(在本例中,表示当时大脑记录的平均波形)。我想计算此列的皮尔逊相关性(逐数组) 这是我的密码 lenght = len(df.Mean) Mean = [] for i in range(len(df.Mean)): Mean.append(df.Mean[i]) Correlation_p = np.zeros((lenght,lenght)) P_Value_p = np.zeros((lenght,lenght))
lenght = len(df.Mean)
Mean = []
for i in range(len(df.Mean)):
Mean.append(df.Mean[i])
Correlation_p = np.zeros((lenght,lenght))
P_Value_p = np.zeros((lenght,lenght))
for i in range(lenght):
for j in range(lenght):
Correlation_p[i][j],P_Value_p[i][j] = stats.pearsonr(df.Mean[i],df.Mean[j])
这是可行的,但我想知道是否有一种更具python风格的方法,也许可以使用df.corr()
。我试过了,但在如何做这件事上失败了
编辑:df.Mean.head()的输出
如果我没有弄错的话,您希望关联的数组似乎位于数据帧的单个单元格中。下面介绍了一种格式,其中每个数组占用一列。 我制作了一个类似于df.Mean.head()格式的数据示例: 可以使用以下方法将这些数组转换为列:
df = pd.DataFrame(np.array(df['x'].tolist()).transpose())
根据您自己的尺寸调整重塑参数。
从那以后,事情就相当简单了
相关矩阵可通过以下方式创建:
df.corr()
相关矩阵的可视化:
import matplotlib.pyplot as plt
plt.matshow(df.corr())
plt.show()
有几行的数据示例吗?有。我编辑了这篇文章。嗨,洛伦佐,我对我的答案做了一些更新。如果不让我知道的话,它现在应该可以工作了。是的,它工作得很好。显然比我当时的做法要好。谢谢一件小事:像你一样使用重塑来混合阵列。在您的示例中,它不是为了创建列而转置它们,而是以3的间隔剪切数组,然后将它们一个置于另一个之下。我使用
df=pd.DataFrame(np.array(df['x'].tolist()).transpose())
来替换数组。哎呀,你说得对,我将为未来的用户相应地更改它。
df.corr()
import matplotlib.pyplot as plt
plt.matshow(df.corr())
plt.show()