새소식

인기 검색어

Project

타이타닉 생존자 예측 - 데이터분석 (토이프로젝트)

  • -
SW 개발에 대해 공부하면서 한 분야에 강점이 있는 사람이 되고싶다는 생각을 한다.

요즘 유망한 AI, DATA, Cloud 등을 살펴보면서 대학 수업때 머신러닝에 대해 배웠던 기억을 살려
Dacon에서 딥러닝 입문 프로젝트로 유명한 타이타닉 프로젝트를 진행했다.


Dacon - 타이타닉 생존자 예측

 

  • 예전에 공부했던 머신러닝도 기억나는게 거의 없어 '모두의 딥러닝'
    이라는 책과 유튜브로 배워가면서 프로젝트를 진행했다.
  • 타이타닉은 Dacon에서 주어진 데이터를 바탕으로 어떤 탑승객이
    생존할 것인지 예측하는 대회이다.

 

 주어진 데이터 (train.csv)

 

  • PassengerId : 탑승객의 고유 아이디
  • Survival : 생존여부(0:사망, 1:생존)
  • Pclass : 등실의 등급(1: 1등급, 2: 2등급, 3: 3등급)
  • Name : 이름
  • Sex : 성별
  • Age : 나이
  • Sibsp : 함께 탑승한 형제자매, 아내 남편의 수
  • Parch : 함께 탑승한 부모, 자식의 수
  • Ticket : 티켓번호
  • Fare : 티켓의 요금
  • Cabin : 객실번호
  • Embarked : 배에 탑승한 위치(C = Cherbourg, Q = Queenstown, S = Southampton)

 

Google Colab 환경에서 진행했다.

1. 라이브러리 및 데이터 불러오기

 

import pandas as pd  #판다스 패키지 불러오기
from sklearn.linear_model import LogisticRegression   # 로지스틱 회귀 모델 불러오기
from sklearn.tree import DecisionTreeClassifier   # 의사결정 나무 모델 불러오기

 

 

2. 데이터 불러오기

 

# 데이터 불러오기
train = pd.read_csv('/content/drive/MyDrive/데이터분석/타이타닉/data/train.csv') # 모델 학습 파일
test = pd.read_csv('/content/drive/MyDrive/데이터분석/타이타닉/data/test.csv') # 모델 시험지 파일
submission = pd.read_csv('/content/drive/MyDrive/데이터분석/타이타닉/data/submission.csv') # 답안지 파일

 

 

3. 자료 분석 - 아래의 함수들을 이용하여 자료를 분석한다.

 

- pd.DataFrame.head(), pd.DataFrame.tail()

 

  • 데이터 프레임의 (위,아래)에서 부터 n개의 행을 보여주는 함수
  • n의 기본값(default)은 5
tarin.head()	# 괄호 안에 숫자 입력시 원하는 만큼 행 확인가능
train.tail()

 

train.head() 실행결과

 

- pd.DataFrame.shape

 

  • 데이터 프레임의 행의 개수와 열의 개수가 저장되어 있는 속성(attribute)
  • 소괄호를 붙이지 않음

 

train.shape		# 실행시  (891, 12) 출력됨

 

 

- pd.DataFrame.info()

 

  • 데이터 셋의 column별 정보를알려주는 함수
  • 비어 있지 않은 값은 (non-null)은 몇개인지?
  • column의 type은 무엇인지?
    • type의 종류 : int(정수), float(실수), object(문자열), 등등(date, ...)

 

train.info() 실행결과

 5. Age 는 null 값이 177개, 10. Cabin은 null값이 687개 ....

 

 

 

 

- pd.DataFrame.describe()

 

  • 숫자형 (int, float) column들의 기술 통계량을 보여주는 함수
  • 기술통계량이란?
    • 해당 column을 대표할 수 있는 통계값들을 의미
  • 기술통계량 종류
    • count : 해당 column에서 비어있지 않은 값의 개수
    • mean : 평균
    • std : 표준편차
    • min : 최솟값 (이상치 포함)
    • 25% (Q1) : 전체 데이터를 순서대로 정렬했을 때, 아래에서 부터 1/4 지점에 있는 값
    • 50% (Q2) : 중앙값 (전체 데이터를 순서대로 정렬했을 때, 아래에서 부터 2/4 지점에 있는 값
    • 75% (Q3) : 전체 데이터를 순서대로 정렬했을 때, 아래에서 부터 3/4 지점에 있는 값
    • max : 최댓값 (이상치 포함)
  • 이상치 : 울타리 밖에 있는 부분을 이상치라고 정의함 
    • 아래쪽 울타리 : Q1 - 1.5 * IQR
    • 위쪽 울타리 : Q3 + 1.5 * IQR
    • IQR = Q3 - Q1

 

train.describe() 실행 결과

 

- pd.Series.value_counts(), pd.Series.unique()

 

Series : 하나의 열

  • counts()
  • series 내 고유값들 각각의 개수를 보여주는 함수
  • 가장 많이 나오는 고유값들 순서로 보여줍니다.
  • 비어있는 값은 고려하지 않습니다

 

 

 

  • unique()
  • 해당 series의 고유값들만 보여주는 함수
  • [1, 1, 1, 3] 이라는 시리즈가 있다면, unique() 함수 적용시
    [1, 3]이 출력됩니다.
  • nan 값이 있을시 nan값도 포함하여 출력한다. (Not a Number)
  • 출연하는 순서대로 나오기 때문에, 알파벳 순서 또는 오름차순으로 정렬되어 있지 않습니다.

 

 

이 외에도 pd.Series.plot(kind = "bar"), 
pd.Series.plot(kind = 'hist'), 
pd.DataFrame.plot(x,y,kind = 'scatter') 등의
데이터를 시각화 해주는 함수들도 다양히 있었습니다.

 

4. 데이터 전처리 (Data Cleansing & Pre-Processing)

 

◾ pd.Series.isna() - 데이터 결측치 여부 확인 

  • 결측치면 True, 아니면 False 반환
train.isna().sum()		# True 값을 전부 더한 값 반환


'''
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64
'''

 

◾ pd.DataFrame.fillna() - 결측치 채우기

  • 결측치가 있는 걸 확인했다면 결측치를 채워주어야 모델 학습에 에러가 발생하지 않습니다.
  • 결측치를 채우고자 하는 colum과 결측치를 대신하여 넣고자 하는 값을 명시해주어야 합니다.
  • 범주형 변수일 경우, 최빈값으로 대체할 수 있습니다.

 

train['Age'].median()				# train - Age 의 평균값 계산, 출력 값은 28 이었음
train['Age'] = train['Age'].fillna(28)		# train - Age 의 null값(결측치)를 평균값(28)으로 채움

# test파일도 똑같이 진행
test['Age'].median()
test['Age'] = test['Age'].fillna(27)

 

 

◾ pd.Series.map() - 시리즈 내 값을 변환

  • 모델 학습시 문자값을 받아들이지 못하므로 문자값을 INT값으로 변환해 줍니다.

 

# 성별을 남성은 0, 여성은 1 로 바꾸어줌
train['Sex'] = train['Sex'].map({'male':0, 'female':1})
# 배에 탑승한 위치값도 적절한 INT값으로 변경
train['Embarked'] = train['Embarked'].map({'S':0, 'C':1, 'Q':2})

 

5.  변수 선택 및 모델 구축

 

 

 

6. 모델 학습 및 검증

 

 

7. 실행 결과

 

 

 


 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.