두 열의 상관 관계를 가져오려면 .corr 사용
나는 다음과 같은 판다 데이터 프레임을 가지고 있습니다.Top15
:
한 사람당 도시 가능한 문서 수를 추정하는 열을 작성합니다.
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
플로트였고, 파이썬은 기본적으로 어떻게든 건너뜁니다.형식이었기 에, 저는 를 numpy 형식으로 했습니다.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')])
다음과 같이 작동합니다.
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'])
다음은 저에게 도움이 됩니다.상관 행렬을 취한 다음 변수 이름을 기준으로 필터링:
cor_df = df.corr() # take the correlation from the data
cor_df.loc['Citable docs per Capita','Energy Supply per Capita'] # only single value
[]에 변수를 입력하면 변수 이름도 반환됩니다.
cor_df.loc[['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() 함수는 쌍별 상관 관계를 수행하므로 두 변수의 쌍이 4개입니다.따라서 기본적으로 대각 값은 자동 상관(자신과의 상관, 두 변수가 있으므로 두 값)으로 얻고 다른 두 값은 서로 교차 상관으로 얻습니다.
두 열 사이의 상관 관계를 수행하여 단일 값을 얻습니다.
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's Corr)에서 단일 값을 원하는 경우:
single_value = correlation[0][1]
이게 도움이 되길 바랍니다.
저는 데이터 유형을 변경하여 이 문제를 해결했습니다.'1인당 에너지 공급'은 수치 유형이고 '1인당 도시 문서'는 객체 유형입니다.저는 활자를 사용하여 기둥을 부동으로 변환했습니다.일부 np 함수에 대해서도 동일한 문제가 있었습니다.count_nonzero
그리고.sum
일하는 동안mean
그리고.std
하지 않았다.
상관 관계 이전에 '1인당 도시 문서'를 숫자로 변경하면 문제가 해결됩니다.
Top15['Citable docs per Capita'] = pd.to_numeric(Top15['Citable docs per Capita'])
data = Top15[['Citable docs per Capita','Energy Supply per Capita']]
correlation = data.corr(method='pearson')
단일 열과 관련하여 모든 열 간의 상관 관계를 신속하게 찾아 표시하려면 다음을 수행합니다(이 경우 '1인당 에너지 공급').
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
cor = []
plt.figure()
for i in data.columns:
try:
cor += [np.corrcoef(data[i], data['Energy Supply per Capita'])[0][1]]
plt.scatter(i, np.corrcoef(data[i], data['Energy Supply per Capita'])[0][1])
plt.axvline(x = i, color='k', linestyle='-',alpha=0.2)
except:
pass
plt.ylabel('correlation')
plt.xticks(rotation = 90)
언급URL : https://stackoverflow.com/questions/42579908/use-corr-to-get-the-correlation-between-two-columns
'programing' 카테고리의 다른 글
텍스트 파일에 다차원 배열을 쓰는 방법은 무엇입니까? (0) | 2023.07.18 |
---|---|
Python을 사용하여 gz 파일의 압축을 푸는 방법 (0) | 2023.07.18 |
Oracle SQL "SELECT DATTIME 필드" (0) | 2023.07.13 |
TypeScript와 Babel을 함께 사용할 수 있습니까? (0) | 2023.07.13 |
ASP.NET 사용자 지정 오류 페이지 - 서버.GetLastError()가 null입니다. (0) | 2023.07.13 |