programing

두 열의 상관 관계를 가져오려면 .corr 사용

javajsp 2023. 7. 13. 20:40

두 열의 상관 관계를 가져오려면 .corr 사용

나는 다음과 같은 판다 데이터 프레임을 가지고 있습니다.Top15:enter image description here

한 사람당 도시 가능한 문서 수를 추정하는 열을 작성합니다.

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')

는 한의 번호를 는 다음과 같습니다.enter image description here

실제 데이터가 없으면 질문에 답하기가 어렵지만 다음과 같은 것을 찾고 있다고 생각합니다.

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