[python] .corr을 사용하여 두 열 간의 상관 관계 얻기
다음 pandas 데이터 프레임이 있습니다 Top15
.
1 인당 인용 가능한 문서 수를 추정하는 열을 만듭니다.
Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energy Supply per Capita']
Top15['Citable docs per Capita'] = Top15['Citable documents'] / Top15['PopEst']
1 인당 인용 가능한 문서 수와 1 인당 에너지 공급 사이의 상관 관계를 알고 싶습니다. 그래서 나는 .corr()
방법을 사용합니다 (Pearson의 상관 관계) :
data = Top15[['Citable docs per Capita','Energy Supply per Capita']]
correlation = data.corr(method='pearson')
단일 숫자를 반환하고 싶지만 결과는 다음과 같습니다.
답변
실제 데이터가 없으면 질문에 답하기가 어렵지만 다음과 같은 것을 찾고있는 것 같습니다.
Top15['Citable docs per Capita'].corr(Top15['Energy Supply per Capita'])
그게 당신의 두 열 사이의 상관 관계 계산 'Citable docs per Capita'
과 'Energy Supply per Capita'
.
예를 들면 :
import pandas as pd
df = pd.DataFrame({'A': range(4), 'B': [2*i for i in range(4)]})
A B
0 0 0
1 1 2
2 2 4
3 3 6
그때
df['A'].corr(df['B'])
1
예상대로 제공합니다 .
이제 값을 변경하면
df.loc[2, 'B'] = 4.5
A B
0 0 0.0
1 1 2.0
2 2 4.5
3 3 6.0
명령
df['A'].corr(df['B'])
보고
0.99586
예상대로 여전히 1에 가깝습니다.
.corr
데이터 프레임에 직접 적용하면 열 간의 모든 쌍별 상관 관계가 반환됩니다 . 이것이 바로 1s
행렬의 대각선에서 관찰하는 이유입니다 (각 열은 자체와 완벽하게 상관 됨).
df.corr()
그러므로 돌아올 것이다
A B
A 1.000000 0.995862
B 0.995862 1.000000
표시되는 그래픽에서는 상관 행렬의 왼쪽 상단 모서리 만 표시됩니다 (내가 가정).
NaN
솔루션에서 s 를 얻는 경우가있을 수 있습니다 . 이 게시물 에서 예제를 확인하십시오 .
특정 임계 값 위 / 아래 항목을 필터링하려는 경우이 질문을 확인할 수 있습니다 . 상관 계수의 히트 맵을 그리려면 이 답변을 확인 하고 겹치는 축 레이블 문제가 발생 하면 다음 게시물을 확인 하십시오 .
답변
나는 같은 문제에 부딪쳤다. 그것은 Citable Documents per Person
float로 보였고 파이썬은 기본적으로 그것을 건너 뜁니다. 내 데이터 프레임의 다른 모든 열은 numpy-formats이므로 columnt를 다음과 같이 변환하여 해결했습니다.np.float64
Top15['Citable Documents per Person']=np.float64(Top15['Citable Documents per Person'])
직접 계산 한 열임을 기억하십시오.
답변
내 솔루션은 데이터를 숫자 유형으로 변환 한 후입니다.
Top15[['Citable docs per Capita','Energy Supply per Capita']].corr()
답변
모든 열 쌍 간의 상관 관계를 원하는 경우 다음과 같이 할 수 있습니다.
import pandas as pd
import numpy as np
def get_corrs(df):
col_correlations = df.corr()
col_correlations.loc[:, :] = np.tril(col_correlations, k=-1)
cor_pairs = col_correlations.stack()
return cor_pairs.to_dict()
my_corrs = get_corrs(df)
# and the following line to retrieve the single correlation
print(my_corrs[('Citable docs per Capita','Energy Supply per Capita')])
답변
이것을 호출 할 때 :
data = Top15[['Citable docs per Capita','Energy Supply per Capita']]
correlation = data.corr(method='pearson')
DataFrame.corr () 함수는 쌍별 상관 관계를 수행하므로 두 변수에서 네 쌍이 있습니다. 따라서 기본적으로 대각선 값은 자동 상관 (자체와의 상관, 두 개의 변수가 있기 때문에 두 값)으로, 다른 두 값은 서로의 상호 상관으로, 그 반대의 경우도 마찬가지입니다.
단일 값을 얻으려면 두 계열 간의 상관 관계를 수행하십시오.
from scipy.stats.stats import pearsonr
docs_col = Top15['Citable docs per Capita'].values
energy_col = Top15['Energy Supply per Capita'].values
corr , _ = pearsonr(docs_col, energy_col)
또는 동일한 함수 (DataFrame의 corr)에서 단일 값을 원하는 경우 :
single_value = correlation[0][1]
도움이 되었기를 바랍니다.
답변
다음과 같이 작동합니다.
Top15['Citable docs per Capita']=np.float64(Top15['Citable docs per Capita'])
Top15['Energy Supply per Capita']=np.float64(Top15['Energy Supply per Capita'])
Top15['Energy Supply per Capita'].corr(Top15['Citable docs per Capita'])
답변
데이터 유형을 변경하여이 문제를 해결했습니다. ‘1 인당 에너지 공급’은 숫자 유형이고 ‘인당 시민 문서’는 개체 유형입니다. astype을 사용하여 열을 float로 변환했습니다. 좀 순이익 기능과 같은 문제가 있었다 : count_nonzero
및 sum
동안 일을 mean
하고 std
하지 않았다.