본문 바로가기
파이썬(Python), 머신러닝, 딥러닝

(딥러닝 with 파이썬) 당뇨병 예측 (피마 인디언의 당뇨병 예측) - 1) 데이터 시각화

by 굳세라(goodsarah) 2022. 8. 2.
728x90
반응형

 "당뇨병(diabete) 데이터"로 유명한 데이터셋인, "피마 인디언의 당뇨병" 데이터를 통해서, 

 1. 탐색적 데이터 분석(시각화)

 2. 딥러닝을 통한 당뇨병 여부 예측

 

을 진행하겠습니다.

 

1. 탐색적 데이터 분석(EDA / Exploratory Data Analysis)

피마 인디언 당뇨병에 대한 데이터의 구조는 아래와 같다.

총 768명의 인디언에 대한 데이터가 수집되어있으며, 각 인디언들마다 8개의 변수에 대한 내용이 기록되어있다.

각 변수에 대한 설명은 아래와 같다.

 

변수1 : 과거 임신 횟수

변수2 : 포도당 부하 검사 2시간 후 공복혈당 농도(mm Hg)

변수3 : 확장기 혈압(mm Hg)

변수4 : 삼두근 피부 주름 두께(mm)

변수5 : 혈청 인슐린(2-hour, mu U/ml)

변수6 : 체질량 지수(BMI)

변수7 : 당뇨병 가족력(pedigree)

 

종속변수 : 당뇨(1) / 당뇨아님(0)  (Binary 데이터)

 

1) 먼저 데이터를 불러온 뒤, 해당 데이터의 구조를 확인

 
#데이터가 커질수록 직관적으로 데이터의 특징을 알아보기 힘듦
#그래서 데이터의 시각화(Data visualizaion)이 필요함
 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
 
!git clone https://github.com/taehojo/data.git #github "taehojo"님의 data의 폴더를 선택
 
df = pd.read_csv('./data/pima-indians-diabetes3.csv'#해당 폴더에서 "pima-indians-diabetes3.csv" 라는 파일을 로드
 
#데이터의 구조 확인
df.head(5#데이터를 5열까지만 출력하여 구조 확인
cs

 

 

2) 전반적인 데이터에 대한 정보 및 구조 확인

 

 

1
2
#info 기능을 활용하여 전체적인 데이터 구조 확인
df.info()
cs

모든 데이터들이 누락없이 잘 입력되어 있음을 확인할 수 있으며, 각 데이터별 타입을 확인할 수 있다.

 

1
2
#value_counts 기능을 활용하여 특정 데이터의 구성확인
df['diabetes'].value_counts()
cs

 768명 중 268명이 당뇨병을 가지고 있으며(1), 500명은 당뇨병을 가지고 있지 않음(0)을 확인할 수 있음.

 

 

1
2
#각 특성들의 수치에 대한 요약 정보를 확인
df.describe()
cs

 

3) 각 변수별 상관도(correlation) 확인

 

1
2
#각 변수별 상관도 확인
df.corr()
cs

 

 

1
2
3
4
5
6
#상관도 그래프 그리기
colormap = plt.cm.gist_heat # 그래프의 색상 구성 정하기
plt.figure(figsize=(12,12)) # 그래프의 크기를 정함
 
sns.heatmap(df.corr(), linewidths=0.1, vmax=0.5, cmap=colormap, linecolor = 'white', annot=True)
plt.show()
cs

숫자가 높을수록, 그리고 색깔이 더 밝을수록 더 높은 두 변수간의 상관관계가 높다고 볼 수 있다.

 

예측하고자 하는 종속변수인 "diabetes"와 상관관계가 가장 높은 변수는 plasma(0.47) 이며, 그 다음은 bmi(0.29) 이다.

 

 

4) 특정 변수와 종속변수와의 관계 시각화

 

4-1) diabetes ~ plasma

1
2
3
4
5
6
#히스토그램을 통한, diabetes와 plasma의 상관관계 시각화
plt.hist(x=[df.plasma[df.diabetes==0], df.plasma[df.diabetes==1]], bins=30, histtype='barstacked', label=['normal''diabetes'])
plt.xlabel('plasma')
plt.ylabel('# of samples')
 
plt.legend()
cs

plasma 수치가 높을 수록 diabetes 가진 비율이 높아지는 것을 확인할 수 있다.

 

4-2) diabetes ~ bmi

 

 

1
2
3
4
5
6
#히스토그램을 통한, diabetes와 bmi 상관관계 시각화
plt.hist(x=[df.bmi[df.diabetes==0], df.bmi[df.diabetes==1]], bins=30, histtype='barstacked', label=['normal''diabetes'])
plt.xlabel('bmi')
plt.ylabel('# of samples')
 
plt.legend()
cs

bmi가 높아질수록 당뇨병 환자의 비중이 높아지는 것을 확인할 수 있다.

 

 

  위와 같은 단편적인 결과들을 통해 의미있는 해석을 하기에는 제한이 있으나, 분석을 위한 모델을 선정하는 일종의 힌트로서 작용할 수 있다. 또한, 이를 통해서 outlier(이상치)를 발견하여 데이터 분석에 방해되지 않게 제거할 수 있는 전처리를 할 수 있게 해준다. 

 

 특히, 데이터 수가 적은 상태에서 사용하는 일반적인 머신러닝들은 이상치에 의해 영향을 많이 받기에 이러한 전처리 과정은 중요하다.  

728x90
반응형

댓글