🐍 파이썬 데이터 분석 프로젝트/🫀 심혈관질환 데이터 분석

🫀 심혈관질환 데이터 분석 05. 상관관계 분석

nyamin9 2023. 1. 31. 11:07

모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!

 

 


 

🩸 저번 글에서 데이터를 최종적으로 전처리하는 과정을 다뤘습니다. 이번 글에서는 이렇게 전처리된 데이터를 사용하여 상관관계 즉 correlation을 분석해볼 예정입니다.

 

🩸이 글을 시작으로 데이터의 각 attribute 간의 연관관계를 분석할 것입니다. 어쩌면 데이터마이닝 시간에 가장 비중있게 다룬 내용들인 만큼 많은 내용을 다룰 생각입니다.

 


🫀 1. Preprocessing 된 cardio 데이터 임포트

 

 

🩸 먼저 데이터를 불러오고 전처리한 코드를 정리해보았습니다. 간단하게 살펴봅시다.

 

# 데이터 임포트 및 전처리를 위한 pandas / numpy library 임포트
import pandas as pd
import numpy as np


# 시각화를 위한 seaborn, matplotlib 임포트
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
%matplotlib inline

cardio = pd.read_csv('C:\\Users\mingu\Desktop\\cardio_train.csv', sep=';')


# day기준 age를 year 기준으로 변환 : 365로 나누고 소수점 첫째자리에서 반올림
cardio['age'] = cardio['age'] / 365
cardio['age'] = round(cardio['age'], 0).astype('int64').copy()


# BMI attribute 생성
cardio['height'] = cardio['height'] / 100
cardio['BMI'] = cardio['weight'] / (cardio['height']**2)
cardio['BMI'] = round(cardio['BMI'], 2).copy()


# id, height, weight attribute 삭제
cardio = cardio.drop(['id','height','weight'], axis = 1)


# 수축기혈압이 이완기혈압보다 낮은 row 삭제
low_drop_index = cardio[(cardio['ap_hi'] < cardio['ap_lo'])].index
cardio = cardio.drop(low_drop_index).copy()


# 90mmHg 이하, 200mmHg 이상의 Ap_hi 혈압 제거
drop_index_sys = cardio[(cardio['ap_hi'] < 90) | (cardio['ap_hi'] > 170)].index
cardio = cardio.drop(drop_index_sys).copy()


# 60mmHg 이하, 140mmHg 이상의 Ap_lo 혈압 제거
drop_index_dias = cardio[(cardio['ap_lo'] < 65) | (cardio['ap_lo'] > 105)].index
cardio = cardio.drop(drop_index_dias).copy()


cardio

 


🫀 2. Correlation Analysis

 

 

🩸 상관관계분석을 위해서  .corr( )  함수를 사용할 것입니다. 시각화를 위해서는 seaborn  라이브러리가 필요합니다.

 

🩸 target이 cardio attribute이므로 다른 feature들과 cardio 사이의 상관관계를 분석합니다.

 

# 시각화를 위한 seaborn 임포트
import seaborn as sns 


# 상관관계 분석
plt.figure(figsize = (20,12))
ax = sns.heatmap(cardio.corr(), annot=True, annot_kws=dict(color='r'), cmap='Greens')
plt.show()

 

 

📌 .corr( )을 사용한 attribute 간의 상관관계 분석


📌 seaborn 모듈을 통해 시각화

 

 


 

🩸 상관관계 분석의 결과는 아래와 같습니다.

 

Attribute 상관계수 부호
age - cardio 0.23 +
gender - cardio -0.0022
ap_hi - cardio 0.43 +
ap_lo - cardio 0.34 +
cholesterol - cardio 0.22 +
gluc - cardio 0.086 +
smoke - cardio -0.019
alco - cardio -0.011
active - cardio -0.037
BMI - cardio 0.15 +

 

 

cholesterol과 glucose가 서로 높은 상관관계(0.45)를 가지고, ap_hi, ap_lo 역시 서로 상당히 높은 상관관계(0.71)를 보여줍니다. 일반적으로는 cholesterol과 glucose, 그리고 혈압이 심혈관질환과 서로 큰 상관관계가 있을 것이라 생각하지만, 이 데이터는 그렇게 큰 수치를 나타내지는 않는 것을 확인했습니다.

 

 

🩸 Correlation 결과 상관관계의 절댓값이 커서 무시하지 못할 만한 attribute는  age, ap_hi, ap_lo, cholesterol   입니다.

 

 


 

🚩 2022.09.08 추가 - correlation 은 수치형 변수와 수치형 변수 사이의 관계를 알아보기 위한 방법입니다. 저는 프로젝트 진행 시에 범주형 변수간의 관계에 대해서도 상관관계 분석을 진행했기 때문에, 혹시 이 글을 읽으신 분들은 저와 같은 실수를 저지르지 않았으면 합니다🤥.