본문 바로가기

Python/Projects

[Machine Learning][Titanic]- 타이타닉 데이터셋 분석 프로젝트- 1

반응형

프로젝트] : 타이타닉 데이터셋 분석

[목표] : 타이타닉 데이터셋을 분석하여, 생존/죽음과 상관관계가 있는 지표들을 찾기

- 다양한 시행착오들을 기록할 예정입니다.

1. Kaggle 에서 제공하는 Titanic Data 다운로드 받기

https://www.kaggle.com/c/titanic/data

Titanic: Machine Learning from Disaster

Start here! Predict survival on the Titanic and get familiar with ML basics

www.kaggle.com

2. 필요한 모듈, 데이터셋 import , isnull().sum() 을 이용하여 결측값 갯수 확인.

3. [Age] 열의 결측값 177개 확인.

- 결측값 처리할 방법을 고민하다가 평균값으로 채우는 것 외의 조금더 의미있는 분석을 통해서 채우고자 함

- "나이(Age)"와 "요금(Fare)" 사이의 상관관계가 있을 것이라고 생각. -> 보통 티켓은 학생/어른/우대로 구분이 되어 있기 때문에.

- 결측값이 없는 Fare 와 Age 의 데이터만 따로분류하고, 그 데이터를 선형회귀분석을 하여 나이를 예측하기로 함.

[과정] - 선형회귀분석을 통한 Age값 예측하기

 

- 우선 결측값에 fillna 를 이용해 NaN 값에 0을 채운다. (Masking으로 편하게 나누기 위해서)

- masking을 이용하여, Age 값이 0 인것과 0이 아닌것을 나누어 2개의 데이터프레임을 만든다.

- Python의 sklearn 모듈을 사용하여 선형회귀를 사용하여 결측값을 예측하고자 함.

- Linear Regression을 사용하기 위해서는 우선 x axis 와 y axis에 들어가는 값을 numpy array 로 바꾸어주어야한다.

( 이 과정이 다소 귀찮다. 더 편한 방법을 찾아보고 알게되면 추후에 포스팅 할 예정)

- 결측값이 없는 Fare 와 Age 로 선형회귀분석을 하고, 결측값을 갖는 Age를 Fare를 이용해 예측하였다.

4. 선형회귀분석으로 예측한 나이값(Age)을 요금(Fare)과 같이 볼 수 있도록 데이터프레임으로 합치기

 

- 크게 의미는 없는 과정이지만, Fare와 예측된 Age를 보면서 타당한 예측이 되었는지를 한눈에 보고싶었다.

- 다소 간단할 줄 알았지만, numpy -> DataFrame으로 오기위해선 1차원 Data 이어야 되므로 변환을 해줘야한다.

(이 과정에서 np.squeeze 를 이용하였고 , 1차원으로 만들때 굉장히 유용하다.)

- 추가로, numpy 배열의 차원을 확인하기 위해서는 .shape을 이용하면 된다.

- 2개의 DataFramedme을 합칠 때는 pd.concat 을 이용하면 된다.

5. 결과 및 분석

 

- 내가 얻어낸 Fare로 예측한 Age 값 이다. 타당한 값이 나오는지 확인을 위해 구한 DataFrame을 확인해보았다.

 

- 총 177개의 값이 있지만 공간 상 29개만 첨부하였다.

- 다소 충격적인 결과가 나왔다.

: 8.45 달러 지불 -> 29 살 / 13달러 지불 -> 29.12 살

: 의미가 없는 결과이다. 0.12살이 많은 것은 중요하지 않다.

- 선형회귀분석에서의 "기울기" 의 설정이 필요하다고 판단하였다. 다음 포스팅에서는 직접 함수를 정의하거나, 기울기를 조정하여 의미있는 예측값이 나오도록 해보겠다.

반응형