컴공생의 다이어리
[seaborn] heatmap과 pairplot으로 상관계수 시각화 본문
seaborn의 heatmap과 pairplot으로 상관계수 시각화
In [1]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
In [2]:
test_df = pd.DataFrame({"v1":[100,200,300,400], "v2":[400,200,100,250], "v3":[40,60,60,100]})
test_df
Out[2]:
v1 | v2 | v3 | |
---|---|---|---|
0 | 100 | 400 | 40 |
1 | 200 | 200 | 60 |
2 | 300 | 100 | 60 |
3 | 400 | 250 | 100 |
corr함수는 상관계수를 구하는 함수이며 pearson은 상관계수를 구하는 계산 방법 중 하나
In [3]:
corr = test_df.corr(method='pearson')
corr
Out[3]:
v1 | v2 | v3 | |
---|---|---|---|
v1 | 1.000000 | -0.568038 | 0.923381 |
v2 | -0.568038 | 1.000000 | -0.291397 |
v3 | 0.923381 | -0.291397 | 1.000000 |
v1과 v1, v2와 v2, v3와 v3가 모두 1인 것을 확인할 수 있는데, 이처럼 대각선에 있는 값은 자기 자신과의 상관계수를 구하는 것이기 때문에 1이다.
그렇기 때문에 대각선을 기준으로 위의 삼각존을 보던지 아니면 아래의 삼각존을 보면 된다.
In [4]:
corr_column_names = ['ver1', 'ver2', 'ver3']
heatmap
In [5]:
sns.set(font_scale=2.0) # 레이블의 폰트 사이즈를 조정
test_heatmap = sns.heatmap(corr.values,# 데이터
cbar = True, # 오른쪽 컬러 막대 출력 여부
annot = True, # 차트에 상관계수 값을 보여줄 것인지 여부
annot_kws={'size' : 20}, # 숫자 출력 시 숫자 크기 조절
fmt = '.3f', # 숫자의 출력 소수점자리 개수 조절
square = 'True', # 차트를 정사각형으로 할 것인지
yticklabels=corr_column_names, # y축에 컬럼명 출력
xticklabels=corr_column_names) # x축에 컬럼명 출력
plt.tight_layout()
plt.show()
- cbar : 오른쪽에 있는 막대(범주)를 표시
- annot : 상관계수를 표시
- square : 정사각형으로 지정하는 것이며, False로 설정 시 직사각형이 됨
- fmt : 상관계수의 소수점 자리수를 지정
- annot_kws : 상관계수의 글자 크기를 지정
- yticklabels : y축 레이블 값
- xticklabels : x축 레이블 값
pairplot
In [6]:
sns.set(style='whitegrid') # whitegrid = 배경에 하얀 선
sns.pairplot(test_df)
plt.show()
주류 데이터의 상관계수
In [7]:
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
In [8]:
drink_df.columns
Out[8]:
Index(['country', 'beer_servings', 'spirit_servings', 'wine_servings',
'total_litres_of_pure_alcohol', 'continent'],
dtype='object')
In [9]:
cols = ['beer_servings', 'spirit_servings', 'wine_servings', 'total_litres_of_pure_alcohol']
corr = drink_df[cols].corr(method='pearson')
corr
Out[9]:
beer_servings | spirit_servings | wine_servings | total_litres_of_pure_alcohol | |
---|---|---|---|---|
beer_servings | 1.000000 | 0.458819 | 0.527172 | 0.835839 |
spirit_servings | 0.458819 | 1.000000 | 0.194797 | 0.654968 |
wine_servings | 0.527172 | 0.194797 | 1.000000 | 0.667598 |
total_litres_of_pure_alcohol | 0.835839 | 0.654968 | 0.667598 | 1.000000 |
상관계수가 가장 높은 것은 beer_servings와 total_litres_of_pure_alcohol의 상관계수 값이다.
In [10]:
corr_column_names = ['beer', 'spirit', 'wine', 'alcohol']
In [11]:
sns.set(font_scale=1.5)
hm = sns.heatmap(corr.values,
cbar=True,
annot=True,
square=True,
fmt='.2f',
annot_kws={'size': 15},
yticklabels=corr_column_names,
xticklabels=corr_column_names)
plt.title('Drink Correlation Coefficient')
plt.tight_layout()
plt.show()
피어슨의 상관계수는 일반적으로,
- 값이 -1.0 ~ -0.7 이면, 강한 음적 상관관계
- 값이 -0.7 ~ -0.3 이면, 뚜렷한 음적 상관관계
- 값이 -0.3 ~ -0.1 이면, 약한 음적 상관관계
- 값이 -0.1 ~ +0.1 이면, 없다고 할 수 있는 상관관계
- 값이 +0.1 ~ +0.3 이면, 약한 양적 상관관계
- 값이 +0.3 ~ +0.7 이면, 뚜렷한 양적 상관관계
- 값이 +0.7 ~ +1.0 이면, 강한 양적 상관관계
로 해석
In [12]:
sns.set(style='whitegrid')
sns.pairplot(drink_df[['beer_servings', 'spirit_servings',
'wine_servings', 'total_litres_of_pure_alcohol']])
#plt.title('Drink Pair Plot')
plt.show()
출처 : 핀테크 Pre-인턴십 코스 - 금융 데이터 분석
728x90
'데이터 분석 & 머신러닝' 카테고리의 다른 글
Comments