파이썬을 이용하여 자료 분석 및 검증하는 법을 진행하는 방법에 대해 정리해보도록 한다.
데이터 수집
우선 package는 seaborn을 사용한다.
* seaborn: matplotlib를 기반으로 하는 Python 데이타 시각화 라이브러리로 통계 그래픽을 그리기 위한 인터페이스를 제공한다.
데이터는 seaborn 패키지에서 제공하는 titanic 데이타를 사용해보겠다. 해당 데이타는 타이타닉에 승선한 승객들의 정보와 생존 유무에 대한 데이타이다.
이 데이터를 근거로 머신러닝 학습을 통해 새로운 승객 정보를 입력했을 때 생존 가능성에 대해 도출해보는 로직을 구현해보려고 한다.
import seaborn as sns
titanic = sns.load_dataset('titanic')
데이터 타입의 이해
실제 데이터가 어떻게 구성되어 있는 지 확인해 보자.
head() functon 은 object의 처음 n 개의 row를 출력하는 함수로 default 값은 5이다.
titanic.head()
추가적으로 DataFrame의 정보를 체크하기 위해 다음 함수도 실행해보자
titanic.info()
데이터 현황에 대한 이해
이를 통해 우리는 다음과 같은 가설을 정의하고 이를 검증해 보는 과정을 진행해보려한다.
1. 좌석 등급 (pclass)이 좋은 등급일수록 생존율이 높을 것이다.
2. 보호받아야 할 여성의 생존율이 더 높을 것이다.
3. 약자인 어린아이와 노인의 생존율이 더 높을 것이다.
데이타 품질 개선
1) pclass: 1등석, 2등석, 3등석으로 구성된다. ==> 역시 통계 분석에 용이한 object Type으로 변환한다.
2) sex: male과 female 로 구성된다. => 통계 분석을 위해 0,1로 구성된 object Type으로 변환한다.
3) age: 총 891 row 중 Non-Null 값이 714개 ==> 결측값이 177개로 이 값들은 제거할 것이다.
우선 이번 자료분석에 필요한 survived, pclass, sex, age만 다룰 것이므로 나머지 데이타는 모두 제거할 것이다.
그리고, pclass는 object Type으로 sex는 female=0, male=1 로 변환하여 object Type으로 변환한다.
names = titanic.columns
titanic = titanic.drop(names[4:], axis = 1)
titanic['pclass'] = titanic['pclass'].astype(object)
map_dict = {'female' : 0, 'male' : 1}
titanic['sex'] = titanic['sex'].map(map_dict).astype(object)
titanic = titanic.dropna(axis=0)
def function1(x):
return int(x // 10)*10
titanic['age'] = titanic['age'].apply(function1).astype(object)
titanic.info()
데이터 분류
데이타는 Train Data와 Test Data로 분류할 수 있다.
train_df = titanic[:500]
test_df = titanic[500:]
데이터 분석
1. 좌석 등급 (pclass)이 좋은 등급일수록 생존율이 높을 것이다.
train_df[['pclass', 'survived']].groupby(['pclass'],
as_index=False).mean().sort_values(by='survived', ascending=False)
1등석 64%, 2등석 49%, 3등석 23% 순으로 생존확률의 연관성을 확인할 수 있다.
2. 보호받아야 할 여성의 생존율이 더 높을 것이다.
train_df[["sex", "survived"]].groupby(['sex'], as_index=False
).mean().sort_values(by='survived', ascending=False)
여성의 생존률이 75%, 남성의 생존률이 20%이다.
3. 약자인 어린아이와 노인의 생존율이 더 높을 것이다.
train_df[["age", "survived"]].groupby(['age'],
as_index=False).mean().sort_values(by='survived', ascending=False)
가설을 뒷받침하기에는 부족하지만, 세대별로 어느 정도의 생존확률로 써먹어볼 의미는 있을 듯 하다.
다음번에 이를 바탕으로 다양한 머신러닝 모델 생성 및 학습에 대해 추가로 정리를 해볼 예정이다.
'IT 개발자의 창고' 카테고리의 다른 글
아나콘다 - 머신러닝 패키지 관리 및 배포 (0) | 2022.07.14 |
---|---|
Machine Learning 이란? (0) | 2022.07.04 |
인공지능, 머신러닝, 딥러닝 무엇이 다른가? (0) | 2022.06.01 |
구글 colab을 이용하여 Web에서 Python 실행하기 (0) | 2022.05.18 |
AWS client 설치 및 사용법 (0) | 2022.05.12 |