SW
Kaggle [Titanic Data Analysis] 본문
In [1]:
from IPython.core.display import display, HTML
display(HTML("<style> .container{width:90% !important;}</style>"))
In [6]:
!pip install numpy
!pip install pandas
!pip install requests
!pip install beautifulsoup4
!pip install matplotlib
!pip install seaborn
In [8]:
# 불필요한 메시지 숨기기
import warnings
warnings.filterwarnings('ignore')
In [10]:
import numpy as np
import pandas as pd
import matplotlib, matplotlib.pyplot as plt
import seaborn as sns
In [11]:
# 1. 데이터 수집
# 2. 데이터 전처리
# 3. EDA
# 4. 모델링
# * 시각화, 대시보드 구축
# 5. 애플리케이션 화
In [20]:
# 타이타닉 탑승자 데이터 분석
raw_data = pd.read_csv('train.csv')
In [14]:
!pip3 install kaggle
In [17]:
"""
Passenger Id : 탑승객 번호
Survived : 결과
Pclass : 객실등급
Name : 이름
Sex : 성별
Age : 나이
SibSp : 형제 수
Parch : 부모 수
Ticket
Fare : 요금
Cabin : 객실번호
Embarked
"""
Out[17]:
In [21]:
raw_data.head()
Out[21]:
In [22]:
#특정 열만 보고 싶을 때
raw_data['Survived']
Out[22]:
In [23]:
raw_data.index
Out[23]:
In [ ]:
# 데이터프레임에서 인덱스를 별도로 지정할 수 있다.
# 1. 인덱스를 변경해도, 기존의 숫자인덱스는 살아있다.
# 2. df.loc -> 내가 지정한 인덱스로 찾기
# 3. df.iloc -> 기존의 숫자 인덱스
In [26]:
#raw_data.loc[800]
raw_data.iloc[800]
Out[26]:
In [27]:
raw_data.info()
In [29]:
# 데이터의 정보를 보고 무엇을 쓰면 좋을지 생각해 볼 수 있음
raw_data.describe()
Out[29]:
In [52]:
# figure - 도화지
# subplot - 그래프
fig = plt.figure(dpi=120)
graph1 = fig.add_subplot(1,2,1) # 1행 2열로 쪼갠것중 1번째
graph2 = fig.add_subplot(1,2,2) # 1행 2열로 쪼갠것중 2번째
raw_data['Survived'].value_counts().plot.pie(explode=[0, 0.1],
autopct="%1.2f%%",
ax=graph1)
graph1.set_title("Survived")
graph1.set_ylabel("")
sns.countplot('Survived',data=raw_data,ax=graph2)
graph2.set_title("Survived")
fig.show() # jupyter라서 이 명령어를 쓰지 않아도 그래프가 뜨지만 이 명령어를 보통 써줌
In [63]:
# histogram
raw_data['Age'].hist(bins=100, figsize=(12,9), grid=False)
Out[63]:
In [66]:
# 1이나 -1에 가까울수록 관계도가 높다.
raw_data.corr()
Out[66]:
In [75]:
# 상관관계표
sns.heatmap(raw_data.corr(), linewidths=0.01, square=True, annot=True, cmap=plt.cm.viridis)
Out[75]:
In [76]:
raw_data.columns
Out[76]:
In [78]:
# 객실 등급별 생존률
raw_data.groupby('Pclass').mean() # groupby는 안쪽에 index를 추가하는 것. 그래프로 볼때 유용
Out[78]:
In [84]:
# 연령대 구분해서 객실등급, 나이, 성별 등으로 구분지어 보기
raw_data['age_cat'] = pd.cut(raw_data['Age'],
bins=[0,10,20,50,100],
include_lowest=True,
labels=['baby','teenager','adult','old'])
In [83]:
raw_data.head(1)
Out[83]:
In [85]:
# 지금부터는 과장해서 사기의 영역
# 우한폐렴을 6명과 6000명의 그래프 차이를 매우 작게 하는 등 사기치는 경우가 있음
# 비슷해 보이는 시각적 효과를 나타냄
# 스토리텔링을 생각해서 사용
# 가장 많이 사용하는 것이 pie차트. 3D로 조금 돌리면 생존자가 엄청 많아보임. 시각화 잘하는 사람이 몸값이 높음.
# 설득하는 입장에서는 시각화를 생각해야하고 설득받는 입장에서는 그래프를 분석하는 것이 필요.
# 그래픽 차트 사이트에 참고자료 많음.
In [89]:
fig = plt.figure(figsize=(12,6))
graph1 = fig.add_subplot(1,3,1)
graph2 = fig.add_subplot(1,3,2)
graph3 = fig.add_subplot(1,3,3)
sns.barplot('Pclass','Survived',data=raw_data, ax=graph1)
sns.barplot('age_cat','Survived',data=raw_data, ax=graph2)
sns.barplot('Sex','Survived',data=raw_data, ax=graph3)
Out[89]:
In [99]:
fig = plt.figure(figsize=(12,6))
graph1 = fig.add_subplot(1,1,1)
# 사망자, 나이값이 있는 사람
# df[열][행] : 행을 선택할 때 조건
condition1 = (raw_data['Survived']==0) & (raw_data['Age'].notnull())
sns.kdeplot(raw_data['Age'][condition1],
ax=graph1,
color="Blue",
shade=True)
# 생존자, 나이값이 있는 사람
condition2 = (raw_data['Survived']==1) & (raw_data['Age'].notnull())
sns.kdeplot(raw_data['Age'][condition2],
ax=graph1,
color="Green",
shade=True)
graph1.set_xlabel("Age")
graph1.set_ylabel("Frequency")
graph1.legend(["Not Survived", "Survived"])
Out[99]:
In [118]:
fig = plt.figure(figsize=(12,6))
graph1 = fig.add_subplot(1,3,1)
graph2 = fig.add_subplot(1,3,2)
graph3 = fig.add_subplot(1,3,3)
sns.countplot('Sex', data=raw_data, ax=graph1)
graph1.set_title("승객 성별 분류")
sns.countplot('Sex', hue='Survived', data=raw_data, ax=graph2) # 스토리텔링을 이런식으로 이끌어나가자. 젊은 남성들이 어린아이들, 여자들을 먼저 보냈기 때문에 많이 죽었다. 이런식으로 스토리텔링을 이끌어 간다.
graph2.set_title("성별에 따른 생존 비율")
sns.countplot('Sex', hue='Pclass', data=raw_data, ax=graph3) # 이걸 기반으로 영화만듦. 선체 구조도까지 끌어들여와서 데이터 분석하는 경우도 있음. 더 정확해짐.
graph3.set_title("객실 등급에 따른 성비")
Out[118]:
In [115]:
plt.rc('font', family='AppleGothic')
In [36]:
raw_data['Survived'].value_counts()
Out[36]:
In [40]:
raw_data['Survived'].value_counts().plot.pie(explode=[0, 0.1],
autopct="%1.2f%%",
ax=graph1)
Out[40]:
In [42]:
fig
Out[42]:
In [47]:
sns.countplot('Survived',data=raw_data,ax=graph2)
Out[47]:
In [48]:
fig
Out[48]:
Comments