我的数据集有3列(state,death_rate,avg_speed)
我想找到avg_speed和death_rate之间关于状态
的相关性我尝试了这个,但它返回了一个空的数据框
import pandas as pd
import numpy as np
dataset = pd.read_csv('result.csv', header=None, usecols=[1,2]) #read
result = dataset.corr()
print result
以及如何表示结果?
编辑:
这里是样本数据
state death_rate avg_speed
AL 50 43.08966565
AK 42 12.16736296
AZ 52 43.33464079
AR 28 36.88461538
CA 30 48.74048562
CO 28 27.54417671
CT 26 23.10909091
FL 18 58.58169492
GA 86 43.55456453
HI 95 66.83672039
ID 99 30.63928113
IL 98 25.06262626
答案 0 :(得分:0)
header
不应设置为None
,因为您有标题; sep
或delimiter
。您提供的示例数据似乎不是标准格式。我尝试了空格和制表符(\t
)并且都没有工作。您可以尝试打印dataset
或致电dataset.columns
以检查您是否已正确阅读。
答案 1 :(得分:0)
这里有一些不同的问题......
您提供的数据样本不允许您计算每个州的相关性,因为每个州只有1行。因此,我稍微修改了您的数据示例,以便以下示例有效。我假设在您的实际数据文件中,每个州有多行。以下是我正在使用的内容:
state death_rate avg_speed
AL 50 43.08966565
AL 42 12.16736296
AL 52 43.33464079
CA 28 36.88461538
CA 30 48.74048562
CA 28 27.54417671
CA 26 23.10909091
FL 18 58.58169492
FL 86 43.55456453
AL 95 66.83672039
AL 99 30.63928113
FL 98 25.06262626
正如一些评论中所提到的,您不应该使用header=None
,因为您的数据文件确实包含标题行。此外,您需要导入所有列而不是将其限制为2,因此您应省略usecols=[1,2]
看起来您的输入数据是以空格分隔的,因此您需要使用delim_whitespace
正确导入它。这样您就可以将数据正确导入数据框
df = pd.read_csv("result.csv", delim_whitespace=True)
要为每个州分别计算death_rate
和avg_speed
之间的相关性,您需要在使用groupby
之前使用corr()
。此外,corr()
会给你一个相关矩阵,但我猜你只想要每个州的单一相关值。我们可以通过在计算相关矩阵后整理数据帧来实现这一点
首先我们分组state
并计算相关矩阵:
result = df.groupby('state').corr()
avg_speed death_rate
state
AL avg_speed 1.000000 0.482542
death_rate 0.482542 1.000000
CA avg_speed 1.000000 0.922646
death_rate 0.922646 1.000000
FL avg_speed 1.000000 -0.903176
death_rate -0.903176 1.000000
然后我们重置索引并拉出状态和其他列之一(另一列只包含重复信息,因为你只处理2个变量):
result = result.reset_index()[['state', 'avg_speed']]
state avg_speed
0 AL 1.000000
1 AL 0.482542
2 CA 1.000000
3 CA 0.922646
4 FL 1.000000
5 FL -0.903176
最后,删除相关性为1
的行,并可选择将列重命名为更合理的行:
result = result[~result['avg_speed'].eq(1)].rename(columns={'avg_speed': 'corr'})
哪个会给你:
state corr
1 AL 0.482542
3 CA 0.922646
5 FL -0.903176