모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!!
🩸 저번 글에서 데이터를 최종적으로 전처리하는 과정을 다뤘습니다. 이번 글에서는 이렇게 전처리된 데이터를 사용하여 상관관계 즉 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 은 수치형 변수와 수치형 변수 사이의 관계를 알아보기 위한 방법입니다. 저는 프로젝트 진행 시에 범주형 변수간의 관계에 대해서도 상관관계 분석을 진행했기 때문에, 혹시 이 글을 읽으신 분들은 저와 같은 실수를 저지르지 않았으면 합니다🤥.
'🐍 파이썬 데이터 분석 프로젝트 > 🫀 심혈관질환 데이터 분석' 카테고리의 다른 글
🫀 심혈관질환 데이터 분석 07. 패턴분석 (0) | 2023.01.31 |
---|---|
🫀 심혈관질환 데이터 분석 06. 패턴분석 데이터 전처리 (0) | 2023.01.31 |
🫀 심혈관질환 데이터 분석 04. attribute 노이즈 확인 (0) | 2023.01.29 |
🫀 심혈관질환 데이터 분석 03. 데이터 전처리 (0) | 2023.01.29 |
🫀 심혈관질환 데이터 분석 02. 데이터 소개 (0) | 2023.01.29 |