"당뇨병(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
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(이상치)를 발견하여 데이터 분석에 방해되지 않게 제거할 수 있는 전처리를 할 수 있게 해준다.
특히, 데이터 수가 적은 상태에서 사용하는 일반적인 머신러닝들은 이상치에 의해 영향을 많이 받기에 이러한 전처리 과정은 중요하다.
'파이썬(Python), 머신러닝, 딥러닝' 카테고리의 다른 글
(딥러닝 with 파이썬) 아이리스(iris/분꽃) 데이터 다중분류 문제 (0) | 2022.08.05 |
---|---|
(딥러닝 with 파이썬) 당뇨병 예측(피마 인디언의 당뇨병 예측) - 2) 딥러닝 실행 (0) | 2022.08.03 |
(딥러닝 with 파이썬) 폐암 수술 환자의 생존율 예측 모델 (0) | 2022.08.02 |
(딥러닝 with 파이썬) 오차역전파 / 활성화 함수 (0) | 2022.08.02 |
딥러닝에서 중간층을 은닉층이라 부르는 이유? (0) | 2022.08.02 |
댓글