본문 바로가기

Data Scientist

피마 인디언 당뇨병 예측하기 - 1편: 데이터 불러오기

반응형

(모두의 딥러닝 & 강의[이동x 선생님]를 참고하여 작성하였습니다)

모두의 딥러닝(원리를 쉽게 이해하고 나만의 딥러닝 모델을 만들 수 있다 with 텐서플로(tensorflow) & 케라스(keras)) /사진 출처: 예스24

조태호  | 길벗 | 2017년 12월 27일 리뷰 총점9.6  (예스24기준) 정가 24,000원(현재 21,600)

 

안녕하세요.

처음으로 해볼 내용은 '피마 인디언 당뇨병 예측하기' 입니다. 

그런데 아직 공부중이기도 하고 잘모르기 때문에

내용이 상당히 빈약하고 결과치도 마찬가지입니다.

혹시 댓글로 많은 가르침 주시면 감사하겠습니다.

 

 

from keras.models import Sequential    #층을 담는 그릇
from keras.layers import Dense    #층을 만드는 것 
import numpy
import tensorflow as tf 


import warnings
warnings.filterwarnings("ignore")

 

먼저 사용할 각종 라이브러리(도구의 모음)들을 임포트 해줍니다. 

아래쪽에 import warnings의 경우 제 pc에 설치된

tensorflow 버전이 낮아서 경고가 계속해서 뜨기 때문에 

무시해주기 위해서 사용했습니다. 

 

Sequential은 keras에 포함되어 있는데 딥러닝

모델을 한층 한층 쌓기 쉽게 해주는 함수로

층을 담을 수 있게 그릇을 만들어주는 작업에 필요해요.

Dense는 층을 구축하는데 필요하죠. 각 층이 가질

특성을 각각 다르게 지정할 수 있게 해준답니다.

 

import tensorflow
tensorflow.__version__


'1.15.0'

업그레이드를 하고 싶어서 'conda install --upgrade tensorflow'를

사용했지만 계속해서 에러가 나고 실행이 되지 않아서

'conda uninstall keras', 'pip unistall keras'

'conda uninstall tensorflow', 'pip uninstall tensorflow'

로 모두 삭제 후에 'conda install keras' 하나만

설치해주니 실행이 되더라구요.

환경설정이 확실히 어려운일이더라구요...;;

혹시 이런 에러가 났는데 해결하신 분이 있다면 도움 부탁드립니다!

제 pc에 설치된 버전은 결국 1.15버전입니다.

# seed값 생성
seed = 0
numpy.random.seed(seed)
tf.set_random_seed(seed)
# 2.0이라면 tf.random.set_seed(seed)

seed = x

seed값을 설정해주면 랜덤하게

발생한 숫자라도 기억을 해준답니다.

seed를 지정해주지 않으면

실행할 때마다 결과값이 달라지기 때문에

0번이라는 방에 지정을 해주고 실행을 하면

임의로 수를 생성해주지만 해당하는 방에 있는

녀석들을 계속해서 불러올 수 있죠.

0번 방에 사는 친구들은 변하지 않으니까요(계약 기간 남았다..?)

# 데이터 로드
dataset = numpy.loadtxt('./dataset/pima-indians-diabetes.csv', delimiter = ',')
dataset


array([[  6.   , 148.   ,  72.   , ...,   0.627,  50.   ,   1.   ],
       [  1.   ,  85.   ,  66.   , ...,   0.351,  31.   ,   0.   ],
       [  8.   , 183.   ,  64.   , ...,   0.672,  32.   ,   1.   ],
       ...,
       [  5.   , 121.   ,  72.   , ...,   0.245,  30.   ,   0.   ],
       [  1.   , 126.   ,  60.   , ...,   0.349,  47.   ,   1.   ],
       [  1.   ,  93.   ,  70.   , ...,   0.315,  23.   ,   0.   ]])

먼저 데이터를 불러올 건데요. 

유명한 데이터들은 대부분 오픈되어 있어서

검색만 하면 받으실 수 있답니다. 

https://gist.github.com/ktisha/c21e73a1bd1700294ef790c56c8aec1f

 

pima-indians-diabetes.csv

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

그리고 불러올 때는 파일 경로를

알맞게 설정해주시면 된답니다. 

앞의 .(온점)의 경우는 동일한 폴더에 있단 뜻이에요.

뒤에 사용한 delimiter의 경우는 구분이 ' , '

쉼표로 되어있다고 알려주는거에요.

 

csv파일이기 때문에 엑셀로 열면 다음과 같이 깔끔하게 구분되어 있습니다.

엑셀에서 실행한 모습

하지만 메모장에서 실행해보면 쉼표로 구분되어 쭉 나열되어 있답니다.

그래서 구분 문자가 쉼표라고 알려주는 거에요.

사실 이게 정확히 맞는지는 모르겠지만 저는 그렇게 이해했습니다...

# feature 정의
X = dataset[:, 0:8] #컬럼 0부터 7까지를 feature
Y = dataset[:, 8] # 컬럼 여덟번째 class 로 한다 (우리가 예측하고 싶은 것)
# 1. Number of times pregnant
# 2. Plasma glucose concentration a 2 hours in an oral glucose tolerance test
# 3. Diastolic blood pressure (mm Hg)
# 4. Triceps skin fold thickness (mm)
# 5. 2-Hour serum insulin (mu U/ml)
# 6. Body mass index (weight in kg/(height in m)^2)
# 7. Diabetes pedigree function
# 8. Age (years)
# 9. Class variable (0 or 1)

이거는 컬럼별 이름인데요. 

(정확히 뭔 내용인지는 모르겠..)지만 조사할 때의 특징이었겠죠?

나이, 임신횟수, 혈압같은 것들이 보이니까요.

X = dataset의 처음부터 7번째까지(파이썬은 마지막 숫자 -1)

Y = 여덟번째 컬럼을 class로 합니다.

처음에 이게 이해가 안갔는데 dataset[x, x] 저게뭐지.. 했어요.

그런데 하나씩 쳐보니 왼쪽이 행이고 오른쪽이 열이더라구요! 

즉, X의 경우 모든행, 0번부터 7번까지의 8개의 열을 의미합니다.

 

print(X.shape)   # 768개의 인디언데이터, 
X #마지막 0과 1이 포함이 안되었음

(768, 8)
array([[  6.   , 148.   ,  72.   , ...,  33.6  ,   0.627,  50.   ],
       [  1.   ,  85.   ,  66.   , ...,  26.6  ,   0.351,  31.   ],
       [  8.   , 183.   ,  64.   , ...,  23.3  ,   0.672,  32.   ],
       ...,
       [  5.   , 121.   ,  72.   , ...,  26.2  ,   0.245,  30.   ],
       [  1.   , 126.   ,  60.   , ...,  30.1  ,   0.349,  47.   ],
       [  1.   ,  93.   ,  70.   , ...,  30.4  ,   0.315,  23.   ]])
       
       
       
     

X의 형태를 보면 768개의 인디언데이터가 있고

총 8개의 컬럼으로 구성되어 있습니다. 

print(Y.shape) ; Y 
#예측값 1과 0만( 당뇨병이 있는지 없는지 )

array([1., 0., 1., 0., 1., 0., 1., 0., 1., 1., 0., 1., 0., 1., 1., 1., 1.,
       1., 0., 1., 0., 0., 1., 1., 1., 1., 1., 0., 0., 0., 0., 1., 0., 0.,
       0., 0., 0., 1., 1., 1., 0., 0., 0., 1., 0., 1., 0., 0., 1., 0., 0.,
       0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 1., 0., 1., 0.,
       0., 0., 1., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1.,
       0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 1., 0.,
       0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 0., 0., 1., 1., 1., 0., 0.,
       0., 1., 0., 0., 0., 1., 1., 0., 0., 1., 1., 1., 1., 1., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
       0., 1., 1., 0., 0., 0., 1., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0.,
       1., 1., 0., 0., 0., 1., 0., 1., 0., 1., 0., 0., 0., 0., 0., 1., 1.,
       1., 1., 1., 0., 0., 1., 1., 0., 1., 0., 1., 1., 1., 0., 0., 0., 0.,
       0., 0., 1., 1., 0., 1., 0., 0., 0., 1., 1., 1., 1., 0., 1., 1., 1.,
       1., 0., 0., 0., 0., 0., 1., 0., 0., 1., 1., 0., 0., 0., 1., 1., 1.,
       1., 0., 0., 0., 1., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
       1., 0., 0., 0., 1., 0., 1., 0., 0., 1., 0., 1., 0., 0., 1., 1., 0.,
       0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 1., 1., 0., 0., 1., 0.,
       0., 0., 1., 1., 1., 0., 0., 1., 0., 1., 0., 1., 1., 0., 1., 0., 0.,
       1., 0., 1., 1., 0., 0., 1., 0., 1., 0., 0., 1., 0., 1., 0., 1., 1.,
       1., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 0., 0., 1., 1., 1.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 1.,
       1., 0., 1., 1., 0., 0., 1., 0., 0., 1., 0., 0., 1., 1., 0., 0., 0.,
       0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 0., 0.,
       1., 0., 0., 1., 0., 0., 1., 0., 1., 1., 0., 1., 0., 1., 0., 1., 0.,
       1., 1., 0., 0., 0., 0., 1., 1., 0., 1., 0., 1., 0., 0., 0., 0., 1.,
       1., 0., 1., 0., 1., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0.,
       0., 1., 1., 1., 0., 0., 1., 0., 0., 1., 0., 0., 0., 1., 0., 0., 1.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,
       1., 0., 0., 0., 1., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0.,
       1., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0.,
       1., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 1., 1., 1., 0.,
       0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.,
       1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1.,
       0., 1., 1., 0., 0., 0., 1., 0., 1., 0., 1., 0., 1., 0., 1., 0., 0.,
       1., 0., 0., 1., 0., 0., 0., 0., 1., 1., 0., 1., 0., 0., 0., 0., 1.,
       1., 0., 1., 0., 0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 1., 0., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0.,
       1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 1., 0., 1., 1.,
       1., 1., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 1., 0.,
       0., 1., 0., 1., 0., 0., 0., 0., 0., 1., 0., 1., 0., 1., 0., 1., 1.,
       0., 0., 0., 0., 1., 1., 0., 0., 0., 1., 0., 1., 1., 0., 0., 1., 0.,
       0., 1., 1., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1.,
       1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 1., 0., 0., 1., 0.,
       1., 1., 1., 0., 0., 1., 1., 1., 0., 1., 0., 1., 0., 1., 0., 0., 0.,
       0., 1., 0.])

Y의 경우 0또는 1로만 이루어진 마지막 컬럼(Class Variable)입니다. 

 

 

딥러닝 코드짜는 것부터는 2편에서 쓰겠습니다. 

 

감사합니다~~

 

😁

반응형