이번 포스팅에서는 Pandas를 이용해서 불러온 데이터프레임에서 각 속성간의 관계를 파악하기 위해서 상관행렬을 구하고 이를 이용해보는 과정을 정리해보겠습니다.
상관행렬에 대한 이론을 간단하게 정리하자면 아래와 같습니다.
먼저 각 속성에 대한 분산과 속성들간의 공분산을 구해서 분산 - 공분산 행렬을 만듭니다. 근데 여기서 공분산 값을 최솟값 = -1 , 최댓값 = 1 로 만듬으로써 표준화하는 것이 상관행렬이고 이를 이용하는 것이 피어슨 상관계수입니다.
이제 이를 파이썬을 이용해 구현해보겠습니다.
먼저 Pandas를 이용해서 데이터를 불러오고 데이터 구조를 확인해보겠습니다.
이제 이 데이터를 기반으로 상관행렬을 구해보겠습니다.
corr_Info = insurance.corr()
df.corr() 함수를 이용해서 쉽게 상관행렬을 구할 수 있습니다.
여기서 주의할 것은 이산적인 속성인 sex , smoker과 같은 속성은 제외되고 연속적인 속성에 대해서만 공분산이 구해져서 상관행렬이 구해진 것을 확인할 수 있습니다.
이제 이를 seaborn의 heatmap을 이용해서 시각화 해보겠습니다.
plt.figure(figsize=(10,5))
mask = np.zeros_like(corr_Info, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
plt.title('Data Correlation Information' , fontsize=20)
sns.heatmap(corr_Info , mask=mask , cmap= 'Reds' , annot = True)
plt.show()
어차피 상관행렬은 대칭적이기 때문에 아래 삼각형만을 시각화 하기 위해서
np.zeros_like 함수를 이용하였습니다.
구체적으로 만들어진 mask의 형태는 아래와 같습니다.
즉 true로 되어있는 항은 모두 제외되고 False 항목만 출력이 되어서 최종적인 위의 Heatmap이 그려진 것을 확인할 수 있습니다.
여기에 있는 것은 각 항목들간의 피어슨 상관계수가 저장이 되어 있기 때문에 최솟값 = -1 , 최댓값 = 1 입니다.
-1에 가까울수록 반비례한다는 의미이고 1에 가까울수록 정비례 한다는 의미입니다.
0에 가까울수록 각 속성들간의 연관성이 없다는 의미입니다.
즉 위에 heatmap에서 색이 짙을 수록 서로 연관성이 짙은 것을 간단히 파악할 수 있습니다.
구체적으로 charges 항목에 대한 다른 속성들간의 연관성을 파악하기 위해서 아래와 같은 코드를 입력하면 됩니다.
corr_Info['charges']
수치로 따지자면 age, bmi , children과 같은 순서로 charges 와 연관이 된다는 것을 확인할 수 있습니다.
'Python' 카테고리의 다른 글
Python - Matplotlib을 이용해서 데이터 시각화 하는 방법 (0) | 2020.11.05 |
---|---|
Python - 기존 그래프의 확대 부분 같이 그리기 (1) | 2020.11.01 |
Python - Seaborn 을 이용한 Boxplot , Violinplot 그리기 (0) | 2020.11.01 |
Python - Opencv 를 이용한 얼굴 검출하기 (0) | 2020.11.01 |
Python - 데이터프레임에서 바로 그래프 그리기 (0) | 2020.11.01 |