티스토리 뷰

타이타닉1

타이타닉 데이터에 대해서 분석을 해보고자 한다.
이 데이터는 데이터 사이언스나 머신러닝을 공부한 사람들은 많이 들어봤을만한 데이터분석 경연 사이트인 캐글(Kaggle)에서 입문자용으로 가장 많이 사용하는 예제이다.
가장 많이 사용되는 데이터이므로 다양한 사람들이 다양한 방법으로 다양한 관점에서 데이터를 분석 하고 있기 때문에 이 데이터를 가지고 공부를 해보면 데이터 분석의 전반적인 과정을 습득하는데 도움이 되겠다 싶어 다뤄본다.
데이터는 kaggle사이트에 들어가면 얻을 수 있다. https://www.kaggle.com/ 캐글 타이타닉 데이터 분석 - 1부터 3까지 3단계에 걸쳐 다룰것이다. 먼저 캐글 타이타닉 데이터 분석 - 1에서는 데이터를 불러오고 탐색적 자료 분석(EDA)을 적용해 시각화까지 해보자.

1. 데이터 수집

train 데이터셋과 test 데이터 셋을 케글에서 다운받아 로드하자.

In [1]:
import pandas as pd

train = pd.read_csv('titanic/train.csv')
test = pd.read_csv('titanic/test.csv')

2. 탐색적 자료 분석

In [2]:
train.head()
Out[2]:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

데이터 딕셔너리

  • survived : 생존=1, 죽음=0
  • pclass : 승객 등급. 1등급=1, 2등급=2, 3등급=3
  • sibsp : 함께 탑승한 형제 또는 배우자 수
  • parch : 함께 탑승한 부모 또는 자녀 수
  • ticket : 티켓 번호
  • cabin : 선실 번호
  • embarked : 탑승장소 S=Southhampton, C=Cherbourg, Q=Queenstown

퍼스트 클래스의 가격은 3등급의 10배로 매우 비싸다. NaN은 Not a number로 data가 없다는 뜻이다. 모델링을 하기 전에 이런 missing필드는 feature engineering을 통해서 빠진 값을 넣어준다거나 평균값을 넣어준다거나 삭제같은 preprocessing이 필요하다.

전체 행과 열을 보자.
우리는 train 데이터 셋에서 891개의 행과 12개의 열을 확인할 수 있다.

In [4]:
test.head()
Out[4]:
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 892 3 Kelly, Mr. James male 34.5 0 0 330911 7.8292 NaN Q
1 893 3 Wilkes, Mrs. James (Ellen Needs) female 47.0 1 0 363272 7.0000 NaN S
2 894 2 Myles, Mr. Thomas Francis male 62.0 0 0 240276 9.6875 NaN Q
3 895 3 Wirz, Mr. Albert male 27.0 0 0 315154 8.6625 NaN S
4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0 1 1 3101298 12.2875 NaN S

트레인 데이터 셋에서 정보를 받아서 머신러닝 모델을 만들고 그것을 통해서 테스트 데이터 셋에서 이 사람이 죽었는지 살았는지 분석해야 하므로 생존정보가 빠졌다.

In [6]:
train.shape
Out[6]:
(891, 12)
In [7]:
test.shape
Out[7]:
(418, 11)
In [8]:
train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

나이와 Cabin에 대한 정보가 많이 유실되었다. 이런 부분은 그냥 머신러닝에 넣으면 문제가 생기기 때문에 feature engineering을 이용해 바꿔줘야 한다.

In [9]:
test.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 418 entries, 0 to 417
Data columns (total 11 columns):
PassengerId    418 non-null int64
Pclass         418 non-null int64
Name           418 non-null object
Sex            418 non-null object
Age            332 non-null float64
SibSp          418 non-null int64
Parch          418 non-null int64
Ticket         418 non-null object
Fare           417 non-null float64
Cabin          91 non-null object
Embarked       418 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 36.0+ KB
In [10]:
train.isnull().sum()
Out[10]:
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

177개의 나이, 687개의 Cabin, 2개의 Embarked에 대한 정보 존재하지 않는다

In [12]:
test.isnull().sum()
Out[12]:
PassengerId      0
Pclass           0
Name             0
Sex              0
Age             86
SibSp            0
Parch            0
Ticket           0
Fare             1
Cabin          327
Embarked         0
dtype: int64

시각화를 위해 파이썬 라이브러리 가져오기

In [14]:
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set() # 플롯의 seaborn 기본값 설정

범주형 features에 대한 막대차트

  • pclass
  • sex
  • sibsp
  • parch
  • embarked
  • cabin

살았는지 죽었는지 두개의 막대차트로 표시하는 함수를 정의해보자.
파라미터로는 feature를 하나씩 넣어 보내겠다.

In [18]:
def bar_chart(feature):
    survived = train[train['Survived']==1][feature].value_counts()
    dead = train[train['Survived']==0][feature].value_counts()
    df = pd.DataFrame([survived,dead])
    df.index = ['Survived','Dead']
    df.plot(kind='bar',stacked=True, figsize=(10,5))
In [19]:
bar_chart('Sex')

차트는 여성이 남성보다 생존할 가능성이 더 높다는 것을 확인시켜 준다

In [21]:
bar_chart('Pclass')

차트는 1등급 클래스가 다른 클래스보다 생존할 가능성이 더 높다는 것을 확인시켜 준다
차트는 3등급 클래스가 다른 클래스보다 죽을 가능성이 더 높다는 것을 확인시켜 준다

In [23]:
bar_chart('SibSp')

차트는 혼자인 사람보다 형제나 배우자가 있는 사람들이 생존할 가능성이 더 높다는 것을 확인시켜 준다

In [24]:
bar_chart('Parch')

차트는 혼자인 사람보다 부모나 자식이 있는 사람들이 생존할 가능성이 더 높다는 것을 확인시켜 준다

In [25]:
bar_chart('Embarked')

C 선착장 탑승자의 경우 생존자가 더 많지만 다른 선착장 탑승자는 죽은 사람이 더 많을 가능성을 보여준다

여기 까지 우리는 탐색적 데이터 분석 과정에서 데이터 셋의 모양 확인, 타입을 확인하고 데이터의 Null값을 체크했다. 그리고 데이터 셋의 각 feature들이 생존(target)과 어떤 관계가 있는지 살펴보았다.
다음 과정은 feature engineering으로 머신러닝 알고리즘을 작동하기 위해 데이터에 대한 도메인 지식을 활용하여 특징(feature)를 만들어내는 과정이다.

출처: https://youtu.be/aqp_9HV58Ls 강의영상을 보면서 제작하였습니다.

'beginner > 파이썬 분석' 카테고리의 다른 글

맥주데이터 추천시스템_4/22  (0) 2019.04.22
캐글 타이타닉 데이터 분석 - 2  (1) 2019.04.12
Pandas를 이용한 지하철 데이터 분석  (0) 2019.03.12
분석 -1  (0) 2019.03.06
로지스틱 회귀분석 실습  (0) 2019.02.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함