[오늘의 일지]
파이썬 EDA 실시간 강의 - 타이타닉 데이터로 EDA 해보기, 데이터분석을 위한 선형대수학 강의
[상세 내용]
파이썬 EDA
타이타닉 데이터로 EDA 해보기
- 어제는 타이타닉 데이터를 이용해서 생존자와 상관관계가 높은 요소 찾기를 했었습니다. 근데 어제 일지의 앞부분에서 말했던 보통 데이터 분석을 하면 디폴트값처럼 이행해야 하는 3가지 전처리 과정이 있었지만 소개만 하고 할 필요성이 없어서 그냥 넘어갔는데 오늘은 그 전처리 과정 3가지를 자세하게 알아보겠습니다.
- 결측치가 존재하는지
- dtype이 object인 column이 있는지
- target value(예측 대상)의 distribution(분포)이 어떻게 되는지
그리고 이번 데이터를 EDA 하는 주제는 그냥 전처리 과정만 하고 넘어갈 수 없었기 때문에 강사님이 아직 배우지는 않았지만 간단한 머신러닝의 예시를 보여준다고 했습니다.
- EDA 주제 : 간단한 머신러닝 과정을 위한 전처리
- 기본적인 전처리 과정 3단계 : 첫 번째 단계는 isnull() 함수를 이용해서 결측치가 가장 많은 칼럼인 'cabin'을 확인합니다. 두 번째 단계는 info() 사용해서 확인이 가능합니다. 그리고 세 번째 단계인 예측값들의 분포 파악은 결측치가 있는 데이터와 없는 데이터로 나눠서 자료를 확인해 보았습니다.(두 개의 자료를 비교해 보면 캐비닛을 가지고 있는 사람들이 생존율이 높았던 것으로 분석할 수 있습니다.) 또 dtype이 object인 값들은 describe()를 사용하면 보이지 않기 때문에 추가적인 전처리가 필요합니다.
# 결측치에 대한 EDA
# titanic[titanic.isnull().any(axis=1)]
cabin = titanic.loc[titanic['Cabin'].isnull()]
cabin_nan = titanic.loc[titanic['Cabin'].notnull()]#cabin = titanic.loc[~titanic['Cabin'].isnull()]
display(cabin.describe())
cabin_nan.describe()
>>>
PassengerId Survived Pclass Age SibSp Parch Fare
count 687.000000 687.000000 687.000000 529.000000 687.000000 687.000000 687.000000
mean 443.208151 0.299854 2.639010 27.555293 0.547307 0.365357 19.157325
std 259.215905 0.458528 0.589602 13.472634 1.207492 0.827106 28.663343
min 1.000000 0.000000 1.000000 0.420000 0.000000 0.000000 0.000000
25% 214.500000 0.000000 2.000000 19.000000 0.000000 0.000000 7.877100
50% 441.000000 0.000000 3.000000 26.000000 0.000000 0.000000 10.500000
75% 664.500000 1.000000 3.000000 35.000000 1.000000 0.000000 23.000000
max 891.000000 1.000000 3.000000 74.000000 8.000000 6.000000 512.329200
PassengerId Survived Pclass Age SibSp Parch Fare
count 204.000000 204.000000 204.000000 185.000000 204.000000 204.000000 204.000000
mean 455.401961 0.666667 1.196078 35.829297 0.441176 0.436275 76.141504
std 251.379279 0.472564 0.525961 15.679356 0.628918 0.729976 74.391749
min 2.000000 0.000000 1.000000 0.920000 0.000000 0.000000 0.000000
25% 261.750000 0.000000 1.000000 24.000000 0.000000 0.000000 29.453125
50% 457.500000 1.000000 1.000000 36.000000 0.000000 0.000000 55.220850
75% 684.000000 1.000000 1.000000 48.000000 1.000000 1.000000 89.328150
max 890.000000 1.000000 3.000000 80.000000 3.000000 4.000000 512.329200
- 결측치를 대체값으로 대체 혹은 제거 : 결측치 확인 결과 'cabin'과 'age'에서 결측치가 많이 나왔습니다. 'cabin'의 경우에는 원래 캐비닛의 특정 번호값을 가지거나 결측치가 존재했는데 그냥 'is_cabin'이라는 칼럼을 만들어 줘서 캐비닛을 가지고 있다면 1을 결측치를 가지고 있다면 0으로 새로운 데이터를 첨가시켜 줬습니다. 그리고 'age'의 결측치는 나이의 평균값으로 대체했습니다. 그리고 중간에 2개 정도 결측치가 존재하는 행이 있었는데 2개 정도는 과감하게 drop 시켰습니다.
# 결측치에 댕한 전처리 :Cabin -> in_cabin // Age -> Age의 평균값으로 대체
titanic['is_cabin'] = ~titanic.Cabin.isnull()*1
titanic.Age = titanic.Age.fillna(titanic.Age.mean())
titanic
>>>
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked is_cabin
0 1 0 3 Braund, Mr. Owen Harris male 22.000000 1 0 A/5 21171 7.2500 NaN S 0
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.000000 1 0 PC 17599 71.2833 C85 C 1
2 3 1 3 Heikkinen, Miss. Laina female 26.000000 0 0 STON/O2. 3101282 7.9250 NaN S 0
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.000000 1 0 113803 53.1000 C123 S 1
4 5 0 3 Allen, Mr. William Henry male 35.000000 0 0 373450 8.0500 NaN S 0
... ... ... ... ... ... ... ... ... ... ... ... ... ...
886 887 0 2 Montvila, Rev. Juozas male 27.000000 0 0 211536 13.0000 NaN S 0
887 888 1 1 Graham, Miss. Margaret Edith female 19.000000 0 0 112053 30.0000 B42 S 1
888 889 0 3 Johnston, Miss. Catherine Helen "Carrie" female 29.699118 1 2 W./C. 6607 23.4500 NaN S 0
889 890 1 1 Behr, Mr. Karl Howell male 26.000000 0 0 111369 30.0000 C148 C 1
890 891 0 3 Dooley, Mr. Patrick male 32.000000 0 0 370376 7.7500 NaN Q 0
891 rows × 13 columns
- 추가적으로 dtype이 object인 column들에 대한 전처리 (Ordinal Enconding : 숫자로 변환) : object 값을 가지고 있는 'sex'와 'embarked' 칼럼들은 숫자로 대체하는 과정을 진행했습니다. object값들은 0부터 n의 값까지 대체되었습니다. 그리고 간단한 머신러닝에 필요 없는 칼럽들은 제거시켜 줬습니다.
titanic= titanic.drop(columns=['PassengerId','Name','Ticket','Cabin'])
titanic= titanic.dropna()
titanic.Sex = pd.factorize(titanic.Sex)[0]
titanic.Embarked = pd.factorize(titanic.Embarked)[0]
titanic
>>>
Survived Pclass Sex Age SibSp Parch Fare Embarked is_cabin
0 0 3 0 22.000000 1 0 7.2500 0 0
1 1 1 1 38.000000 1 0 71.2833 1 1
2 1 3 1 26.000000 0 0 7.9250 0 0
3 1 1 1 35.000000 1 0 53.1000 0 1
4 0 3 0 35.000000 0 0 8.0500 0 0
... ... ... ... ... ... ... ... ... ...
886 0 2 0 27.000000 0 0 13.0000 0 0
887 1 1 1 19.000000 0 0 30.0000 0 1
888 0 3 1 29.699118 1 2 23.4500 0 0
889 1 1 0 26.000000 0 0 30.0000 1 1
890 0 3 0 32.000000 0 0 7.7500 2 0
889 rows × 9 columns
- 간단한 머신러닝 돌리고 값 얻기(여긴 그냥 예시입니다.)
! pip install scikit-learn
# training
from sklearn.linear_model import LogisticRegression
x = titanic.drop(columns=['Survived'])
y = titanic.Survived
clf = LogisticRegression()
clf.fit(x,y)
clf.score(x,y)
>>>
0.8042744656917885
데이터분석을 위한 선형대수학
- 오늘은 시간 관계상 백터란 무엇인가에 대한 내용만 학습했습니다. 자세한 내용은 아래의 유튜브에 있는 강의 내용을 참고해서 진행되었습니다.
[마무리]
오늘은 전처리 과정을 자세하게 배웠습니다. 실제 데이터에서는 결측치가 차치하는 비율이 꽤 많다고 들었는데 그냥 생각 없이 버릴 수 없는 값이기 때문에 결측치를 대체하는 과정을 시간이 걸리더라도 진행하는 것 같았습니다. 내일이면 데이터분석을 위한 선형대수학 파트를 마무리하고 본격적으로 EDA 프로젝트가 진행될 것으로 보입니다. 부족한 부분이 많지만 프로젝트 과정에서 다른 사람들한테 피해가 가지 않게 최선을 다해야 될 거 같습니다.
'AI > 데이터 사이언스' 카테고리의 다른 글
[AI 부트캠프] DAY 29 - 파이썬 EDA 9 (0) | 2023.08.26 |
---|---|
[AI 부트캠프] DAY 27 - 파이썬 EDA 7 (0) | 2023.08.24 |
[AI 부트캠프] DAY 26 - 파이썬 EDA 6 (2) | 2023.08.23 |
[AI 부트캠프] DAY 25 - 파이썬 EDA 5 (0) | 2023.08.22 |
[AI 부트캠프] DAY 24 - 파이썬 EDA 4 (0) | 2023.08.19 |
댓글