【问题标题】:Calculating Pearson correlation using python loops使用 python 循环计算皮尔逊相关性
【发布时间】:2022-01-25 18:57:06
【问题描述】:

我正在尝试在“服务器”字段上使用 python 循环找出 Pearson 相关性。

逻辑如下- 第一个循环将针对每个主机进行迭代,第二个循环将针对该主机中的每个信号进行迭代并将该信号与所有其他主机的相同信号相关联,(第三个循环)如果相关性> 0.6,则需要将关系增加1 b/w 这些主机(第一个循环中的主机和第三个循环中的主机)。

我有如下 data.csv 文件

Server   Signal1    Signal2
Host1     83.73    56.87
Host1     55.32    74.24
Host1     76.52    85.20
Host2     7.02     10.25
Host2     52.52    74.25
Host2     44.52    15.20
Host3     45.26    12.85
Host3     25.65    74.20
Host3     49.36    89.20
import pandas as pd
df=pd.read_csv("data.csv")

Server = df['Server'].tolist()
Signal1= df['Signal1'].tolist()
Signal2= df['Signal2'].tolist()
for device in Device:
  for signal in Signal1:
    if Device in Signal1:
       corr, _ = pearsonr(device,signal)
       print('Pearsons correlation: %.3f' % corr)

我尝试构建逻辑,但该代码不起作用,因为我无法在 for 循环中计算 Pearson 相关性并验证 ">0.6" 的条件。

【问题讨论】:

    标签: python


    【解决方案1】:

    为什么不用groupby_corr

    # Setup
    data = {'Server': ['Host1', 'Host1', 'Host1', 'Host2', 'Host2',
                       'Host2', 'Host3', 'Host3', 'Host3'],
            'Signal1': [83.73, 55.32, 76.52, 7.02, 52.52, 44.52, 45.26, 25.65, 49.36], 
            'Signal2': [56.87, 74.24, 85.2, 10.25, 74.25, 15.2, 12.85, 74.2, 89.2]}
    df = pd.DataFrame(data)
    
    # Correlation
    out = df.groupby('Server').corr(method='pearson')
    print(out)
    
    # Output
                     Signal1   Signal2
    Server                            
    Host1  Signal1  1.000000 -0.367667
           Signal2 -0.367667  1.000000
    Host2  Signal1  1.000000  0.687893
           Signal2  0.687893  1.000000
    Host3  Signal1  1.000000 -0.173744
           Signal2 -0.173744  1.000000
    

    【讨论】:

      【解决方案2】:
      correlations={}
      hosts={'hostname':{'signal1':[values], 'signal2':[values]},....}
      arr=hosts.keys()
      for i in arr:
          correlations[i]={}
      for i in range(len(arr)):
          for j in range(i+1, len(arr)):
          x = arr[i]
          y = arr[j]
          corr = calculate_correlation(hosts[x]['signal1'],hosts[y]['signal1'])
          ##put extra conditions here..for now just saving the result in correlations dict..same can be done for signal2
          correlations[x][y] = corr
          correlations[y][x] = corr
      

      另外,numpy provides method for calculating PCC,以防您想避免自己编写。

      【讨论】:

        猜你喜欢
        • 2012-11-18
        • 2020-05-23
        • 2018-07-23
        • 1970-01-01
        • 2014-11-13
        • 2019-12-14
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        相关资源
        最近更新 更多