python典型相关分析,python多变量相关性分析

  python典型相关分析,python多变量相关性分析

  我有以下熊猫数据框Top15:

  我创建了一个列来估计每个人的可引用文档的数量:

  一个

  2Top15[PopEst]=Top15[能源供应]/Top15[人均能源供应]

  Top15[人均引用文件]=Top15[引用文件]/Top15[最受欢迎]

  想知道人均能引用的文献数量和人均能量供给之间的关系。所以我用了。corr()方法(皮尔逊相关法):

  一个

  2data=Top15[[人均引用文件,人均能源供应]]

  correlation=data . corr(method= Pearson )

  我想返回一个数字,但结果是:

  我认为你是对的。但是你能告诉我为什么‘data . corr(method= Pearson )’只返回能量供给和能量供给的关系吗?

  并没有。它应该返回一个2x2矩阵;在左上角显示条目。如果。corr直接应用于数据帧,它将返回所有成对相关;这就是为什么你会在矩阵的对角线上观察到1(每一列都与其自身完全相关)。见下面我的编辑。

  如果你认为答案已经回答了你的问题,请考虑接受。

  我接受你的回答,谢谢。

  我找不到你说的那个按钮。我只是按下你答案旁边的向上箭头。

  这个问题直接来自《Python数据科学导论》这门课。具体来说,作业3,问题9。当十足的御姐fzdyet鼓励学生把问题堆起来的时候,我觉得他的意思并不是让他们把问题一字不差地贴在作业里。

  没有实际数据很难回答这个问题,但我想你在寻找这样一个问题:

  1Top15[人均可引用文档]。corr(前15名[人均能源供应])

  它计算“人均引用文件”和“人均能源供应”两列之间的相关性。

  例如:

  一个

  2

  三

  四

  五

  六

  七

  八

  9进口熊猫作为pd

  df=pd。DataFrame({A: range(4), B: [2*i for i in range(4)]))

  有

  0 0 0

  1 1 2

  2 2 4

  3 3 6

  然后

  1df[A]。corr(df[B])

  如预期给出1。

  现在,如果你改变一个值,例如

  一个

  2

  三

  四

  五

  六

  7df.loc[2, B]=4.5

  有

  0 0 0.0

  1 1 2.0

  2 2 4.5

  3 3 6.0

  命令

  1df[A]。corr(df[B])

  收益率

  10.99586

  和预期一样,还是接近1。

  如果。corr直接应用于一个数据帧,它将返回列之间的所有成对关联;这就是为什么你会在矩阵的对角线上观察到1(每一列都完全与其自身相关联)。

  1df.corr()

  因此将返回。

  一个

  2

  3A B

  1.000000 0.995862

  B 0.995862 1.000000

  在您展示的图表中,只显示了相关矩阵的左上角(我假设)。

  在某些情况下,您的解决方案中可能有nan,请查看本文中的示例。

  如果您想要过滤高于/低于特定阈值的条目,您可以检查此问题。如果你想画一个相关系数的热图,可以查一下这个答案,然后如果你遇到轴标重叠的问题,可以查下面这篇文章。

  这可以通过线来应用吗?

  @末日博士:对,只需要一个系列。比如df.loc[1,]。corr(df.loc[2,]就可以了。对于整个数据帧,可以简单的转置:df。T.corr()。

  但是,我尝试了你的建议,即使用df.loc[2, b]=4.5改变了B列中A的值,计算仍然返回1。可能我只是对计算有点困惑。

  @末日博士:因为不知道你的密码所以很难帮忙。在你的例子中,我上面的例子返回1而不是0.99586,我理解对吗?

  是的,我用了你的密码。它总是返回1。

  尝试导入熊猫为pd导入numpy为np示例df=PD . data frame(NP . random . randn(5,5),np.orange (5))打印示例df.iloc[1,]打印示例df.iloc[2,]打印示例df.iloc[1,]corr(

  @末日博士:无法繁殖。在np.random.seed(0)上,我得到了0.580 . 00000000005可以试试这个种子吗?

  让我们在聊天中继续讨论。

  因为数据集是维度500*10,dataset.corr()应该给出矩阵10*10的输出,但是它的输出矩阵是1*1…为什么?

  @yqddp:不知道你的数据,不好说。也许你可以开一个新的问题,作为参考!确保包括一个可重复的例子。

  我也有同样的问题。似乎每人可引用的文档是一个浮点数,python默认跳过它。我的数据框中的所有其他列都是numpy格式,因此我通过将column转换为np.float64解决了这个问题

  1Top15[每人可引用的文档]=np.float64(Top15[每人可引用的文档])

  记住,这正是你自己计算的列。

  工作原理如下:

  一个

  2

  三

  四

  5Top15[人均引用文档]=np.float64(Top15[人均引用文档])

  Top15[人均能源供应]=np.float64(Top15[人均能源供应])

  Top15[人均能源供应]。corr(前15名[人均引用文档])

  我的解决方案是将数据转换成数字类型:

  1Top15[[人均可引用文件,人均能源供应]]。更正()

  Xqdxn称之为:

  一个

  2data=Top15[[人均引用文件,人均能源供应]]

  correlation=data . corr(method= Pearson )

  因为dataframe.corr()函数执行逐对关联,所以有四对两个变量。所以,基本上,你得到的是对角值作为自相关(与自身相关,因为你有两个变量,有两个值),另外两个值作为一个与另一个的互相关,反之亦然。

  在两个序列之间执行相关以获得单个值:

  一个

  2

  三

  4从scipy.stats.stats导入pearsonr

  docs_col=Top15[人均可引用文档]。价值观念

  energy_col=Top15[人均能源供应]。价值观念

  corr,_=pearsonr(文档列,能源列)

  或者,如果您想从同一个函数(数据帧的corr)中获得单个值:

  1single_value=相关性[0][1]

  我希望这有所帮助。

  如果需要所有列对之间的关联,可以这样做:

  一个

  2

  三

  四

  五

  六

  七

  八

  九

  10

  11

  12进口熊猫作为pd

  将numpy作为np导入

  def get_corrs(df):

  col_correlations=df.corr()

  col_correlations.loc[:]=np.tril(col_correlations,k=-1)

  cor _ pairs=col _ correlations . stack()

  返回cor_pairs.to_dict()

  my_corrs=get_corrs(df)

  #和下面一行来检索单个相关性

  print(my_corrs[(人均引用文档,人均能源供应)])

  我通过改变数据类型解决了这个问题。如果你看到“人均能源供应”是一个数字类型,“人均参考文件”是一个对象类型。我使用astype将列转换为float。我对一些np函数也有同样的问题:count _非零和sum起作用,而mean和std不起作用。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: