Kaggle入門【Titanic】 可視化
データをグラフに
可視化することで何か得られることがあるかもしれないので,データを可視化して把握することはとても重要です.今回はTitanicのデータを可視化してみたいと思います.
もろもろインポート
# Imports # pandas import pandas as pd from pandas import Series,DataFrame # numpy, matplotlib, seaborn import numpy as np import matplotlib.pyplot as plt import seaborn as sns sns.set_style('whitegrid') %matplotlib inline
性別を可視化
sns.countplot('Sex',data=train)
# 乗客の性別をチケットクラスで層別化してみる sns.countplot('Sex',data=train,hue='Pclass')
# 乗客のチケットクラスを性別で層別化してみる sns.countplot('Pclass',data=train,hue='Sex')
以上から,Pclass=3の男性だけが非常に多いことがわかりますね.
年齢を可視化
# FacetGridを使うと、複数のカーネル密度推定のグラフを1つのプロットに描くことができる # 性別で層別化して、グラフを少し横長に設定します。 fig = sns.FacetGrid(train, hue="Sex",aspect=4) # mapを使って、性別ごとにkdeplotを描くようにする fig.map(sns.kdeplot,'Age',shade= True) # xの最大値を長老に合わせます。 oldest = train['Age'].max() # x軸の範囲を設定する fig.set(xlim=(0,oldest)) # 凡例を付け加える fig.add_legend()
# 年齢をチケットクラスで層別化してみる fig = sns.FacetGrid(train, hue="Pclass",aspect=4) fig.map(sns.kdeplot,'Age',shade= True) oldest = train['Age'].max() fig.set(xlim=(0,oldest)) fig.add_legend()
#年齢を生存の有無で層別化してみる facet = sns.FacetGrid(train, hue="Survived",aspect=4) facet.map(sns.kdeplot,'Age',shade= True) facet.set(xlim=(0, train['Age'].max())) facet.add_legend()
#年齢毎の生存率 fig, axis1 = plt.subplots(1,1,figsize=(18,4)) average_age = train[["Age", "Survived"]].groupby(['Age'],as_index=False).mean() sns.barplot(x='Age', y='Survived', data=average_age)
若い方が,チケットクラス2,3に多くいることが分かります.20代の生存率が低く,0~10代前半までの生存率は高いことが分かります.
20代の生存率の低さはチケットクラスのランクに関わっていそうです.
家族がいるかを可視化
'Family'カラムの追加
- SibSp – タイタニックに同乗している兄弟/配偶者の数
- Parch – タイタニックに同乗している親/子供の数
でした.ここから,SibSp+Parchが1以上ならば,家族がいる.0ならば家族がいないとするFamilyカラムを作ります.
# Family # Parch と SibSpをまとめる #Parch または SibSp がいるなら'Family'=1,いないならば,'Family'=0 train['Family'] = train["Parch"] + train["SibSp"] train['Family'].loc[train['Family'] > 0] = 1 train['Family'].loc[train['Family'] == 0] = 0 test['Family'] = test["Parch"] + test["SibSp"] test['Family'].loc[test['Family'] > 0] = 1 test['Family'].loc[test['Family'] == 0] = 0 # Parch と SibSp を削除 train = train.drop(['SibSp','Parch'], axis=1) test = test.drop(['SibSp','Parch'], axis=1)
'Family'の可視化
fig, (axis1,axis2) = plt.subplots(1,2,sharex=True,figsize=(10,5)) sns.countplot(x='Family', data=train, order=[1,0], ax=axis1) family_perc = train[["Family", "Survived"]].groupby(['Family'],as_index=False).mean() sns.barplot(x='Family', y='Survived', data=family_perc, order=[1,0], ax=axis2) axis1.set_xticklabels(["With Family","Alone"], rotation=0)
料金の可視化
fare_not_survived = train["Fare"][train["Survived"] == 0] fare_survived = train["Fare"][train["Survived"] == 1] avgerage_fare = DataFrame([fare_not_survived.mean(), fare_survived.mean()]) std_fare = DataFrame([fare_not_survived.std(), fare_survived.std()]) train['Fare'].plot(kind='hist', figsize=(15,3),bins=100, xlim=(0,50))
出港港の可視化
fig, (axis1,axis2,axis3) = plt.subplots(1,3,figsize=(15,5)) sns.countplot(x='Embarked', data=train, ax=axis1) sns.countplot(x='Survived', hue="Embarked", data=train, order=[1,0], ax=axis2) embark_perc = train[["Embarked", "Survived"]].groupby(['Embarked'],as_index=False).mean() sns.barplot(x='Embarked', y='Survived', data=embark_perc,order=['S','C','Q'],ax=axis3)
チケットクラスの可視化
sns.factorplot('Pclass','Survived',order=[1,2,3], data=train,size=5)
チケットクラスのランクが下がっていくと生存率も下がっています.