【问题标题】:Calculate pearson correlation in python在python中计算皮尔逊相关性
【发布时间】:2020-05-23 17:50:22
【问题描述】:

我有 4 列“国家、年份、GDP、二氧化碳排放量”

我想衡量每个国家/地区的 GDP 和二氧化碳排放量之间的皮尔逊相关性。

国家列包含世界上所有国家,年份的值为“1990, 1991, ...., 2018”。

【问题讨论】:

标签: python iteration correlation


【解决方案1】:

谢谢@Celius,它成功了,给了我想要的结果。

【讨论】:

    【解决方案2】:

    您应该使用与corr() 分组的groupby 作为您的聚合函数:

    country = ['India','India','India','India','India','China','China','China','China','China']
    Year = [2018,2017,2016,2015,2014,2018,2017,2016,2015,2014]
    GDP = [100,98,94,64,66,200,189,165,134,130]
    CO2 = [94,96,90,76,64,180,172,150,121,117]
    df = pd.DataFrame({'country':country,'Year':Year,'GDP':GDP,'CO2':CO2})
    print(df.groupby('country')[['GDP','CO2']].corr()
    

    如果我们稍微处理一下这个输出,我们可以做一些更有趣的事情:

    df_corr = (df.groupby('country')['GDP','CO2'].corr()).drop(columns='GDP').drop('CO2',level=1).rename(columns={'CO2':'Correlation'})
    df_corr = df_corr.reset_index().drop(columns='level_1').set_index('country',drop=True)
    print(df_corr)
    

    输出:

             Correlation
    country             
    China       0.999581
    India       0.932202
    

    【讨论】:

    • 非常感谢,我将应用相同的原理,但使用 pearson 相关来获得具有相关系数的 P 值
    • 是的,您可以使用来自scipy.statspearsonr 使用P-value 创建一个额外的列
    【解决方案3】:

    我的猜测是您希望为每个国家/地区设置 pearson coef。使用pearsonr,您可以循环并为每个国家/地区创建字典。

    from scipy.stats.stats import pearsonr
    df = pd.DataFrame({"column1":["value 1", "value 1","value 1","value 1","value 2", "value 2", "value 2", "value 2"], 
                  "column2":[1,2,3,4,5, 1,2,3],
                 "column3":[10,30,50, 60, 80, 10, 90, 20],
                 "column4":[1, 3, 5, 6, 8, 5, 2, 3]})
    
    
    results = {}
    for country in df.column1.unique():
        results[country] = {}
        pearsonr_value = pearsonr(df.loc[df["column1"]== country, "column3"],df.loc[df["column1"] == country, "column4"])
        results[country]["pearson"] = pearsonr_value[0]
        results[country]["pvalue"] = pearsonr_value[0]
    
    print(results["value 1"])
    #{'pearson': 1.0, 'pvalue': 1.0}
    
    print(results["value 2"])
    #{'pearson': 0.09258200997725514, 'pvalue': 0.09258200997725514}
    

    【讨论】:

    • 非常感谢这正是我想要的非常感谢
    • @MustafaAdel 如果它回答了您的问题,请您接受并投票赞成答案吗?谢谢。
    • 很抱歉我没有投票。非常感谢你的帮助。我会尝试一下,让你知道我是 Stackoverflow 的新手。
    猜你喜欢
    • 2012-11-18
    • 2022-01-25
    • 2018-07-23
    • 2014-11-13
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多