LoginSignup
21
18

More than 5 years have passed since last update.

タイタニック号の生存者にどのような傾向があったかpythonで調べてみよう!①

Last updated at Posted at 2017-12-16

準備するもの

・python3系(Python 3.5.2 |Anaconda 4.2.0 (x86_64))
・anacondaで科学計算ライブラリをインストール
・dataset:seabornにあるtitanic号のデータ
・jupyternotebook(他の方法でも出来ますが、このやり方がインタラクティブでおすすめです!)

知れること

・データのインポートや、ライブラリの扱い方
・データの可視化(今回はhistgram(ヒストグラム)とcountplotについて)方法

まずはライブラリのインポートを始めます!


import numpy as np
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline

データのインポートを行います!


titanic_dataframe = sns.load_dataset('titanic')

kaggleのtitanic号に関するcsvを持っている方は、csvを同じディレクトリにおいて呼び出すことも出来ます!

#pandasをつかってcsvを呼び出す
titanic_df = pd.read_csv('csvの名前')

データセットの中身を調べてみます!

titainic_dataframe.info()

"""
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 15 columns):
survived       891 non-null int64
pclass         891 non-null int64
sex            891 non-null object
age            714 non-null float64
sibsp          891 non-null int64
parch          891 non-null int64
fare           891 non-null float64
embarked       889 non-null object
class          891 non-null category
who            891 non-null object
adult_male     891 non-null bool
deck           203 non-null category
embark_town    889 non-null object
alive          891 non-null object
alone          891 non-null bool
dtypes: bool(2), category(2), float64(2), int64(4), object(5)
memory usage: 80.2+ KB
"""

年齢(age)や事故当時どこのデッキ(deck)にいたか等の情報は完全に揃っていないようですね!

他にも調べる方法があるので記載します!

head関数を使う場合

titanic_dataframe.head()

image.png

shapeを使う場合

titainic_dataframe.shape
#(891, 15)

value_counts関数を使う場合


titanic_dataframe['deck'].value_counts()

"""
C    59
B    47
D    33
E    32
A    15
F    13
G     4
"""

Counterを使う場合

Counter


#collectionsからCounter(Cが大文字)をimport
from collections import Counter

#Counterの引数に、調べたい値のカラム名を入れる
Counter(titanic_dataframe['deck'])

"""

Counter({nan: 688,
         'B': 47,
         'F': 13,
         'E': 32,
         'G': 4,
         'C': 59,
         'A': 15,
         'D': 33})
"""

合計数が合わないときなどは、null値が関係している場合があるので、こちらを使ってみましょう!

また、カラムをメソッドのように使う方法でも同じことが出来ます!


titanic_dataframe.deck.value_counts()

"""
C    59
B    47
D    33
E    32
A    15
F    13
G     4
Name: deck, dtype: int64
"""

Counter(titanic_dataframe.deck)

"""
Counter({nan: 688,
         'B': 47,
         'F': 13,
         'E': 32,
         'G': 4,
         'C': 59,
         'A': 15,
         'D': 33})
"""

titanic号に乗った人たちがどのような人たちだったか調べてみる。

ここで主に使うのはcountplotという描画方法です!特定のカラムにどのような要素がどれだけあるかcountしてくれます。

countplotのポイント

・第一引数に特定のカラム名(sex,age,pclass,embark_townなど)を指定し、層別化する
・第二引数に、データセットを指定(この場合は、data=titanic_dataframe)
・第三引数からは、オプションを指定(hue,paletteなど)

男女比はどのような形だったか


#seabornのcountplotを呼ぶ
#パステルっぽい色がすきなので、rainbowを呼びましたw
sns.countplot('sex', data=titainic_dataframe, palette='rainbow')

image.png

女性より男性の方が多かったようです!

どの港から乗ってきたのか

#同じくcontplotで、第一引数にembark_town
sns.countplot('embark_town', data=titainic_dataframe, palette='rainbow')

image.png

いろいろ調べてみたのですが、

1912年4月10日に、タイタニックはイギリスのサウサンプトン港にある専用の埠頭であるオーシャンドックからニューヨークへとむけた処女航海に出航した。

という記事がwikipediaにあるため、イギリスのサウサンプトンという港から乗った方が多いのはこのためですね!

そのままフランスのシェルブールとアイルランドのクイーンズタウン(現コーヴ) に寄港し、アメリカのニューヨーク港に向かった。

という記事もあり、シェルブール=オクトヴィル(Cherbourg-Octeville)から、クイーンズタウンというところに寄ったことがわかりました。

Cobh (/ˈkoʊv/ KOHV, Irish: an Cóbh), known from 1849 until 1920 as Queenstown, is a tourist seaport town on the south coast of County Cork, Ireland.

ちなみにクイーンズタウンですが、現在はコーヴ(Cobh)という名前になっているそうです。

歴史を感じます。

どのクラスに乗った人が多かったか

#どのクラスで乗ったか調べたいので、第一引数にpclassを指定
sns.countplot('pclass', data=titainic_dataframe, palette='rainbow')

image.png

第三階級の船室に乗った方が多かったようです!

ディカプリオ氏がみんなと踊っていたシーンを思い出します!

hueを使って、2つの条件で同時に調べてみる

これまでの方法だと、各階級に乗った男女比などを知ることが出来ませんでした!

hueを第三引数に指定すれば、他のカラムを指定することで2つの条件を同時に知ることが出来ます。

さっそくやってみましょう!

乗船階級と男女比を同時に調べてみる

#第三引数のhueに性別を指定
sns.countplot('pclass', data=titainic_dataframe, hue='sex',palette='rainbow')

image.png

より詳しい分析ができるようになりました!

第三階級に乗った人は特に男性が多かったのですね!

乗船階級と乗船港を同時に調べてみる


#第三引数のhueに乗船港のカラムを指定!
sns.countplot('pclass',data=titainic_dataframe,hue='embark_town',palette='rainbow')

image.png

どの階級にしても、サウサンプトン港から乗った方が多いことがわかりました!

histgramの描画

色々なやり方(distplotなど)があるのですが、今回は簡単なhist関数を用いる方法をご紹介させていただきます!

hist関数を使う場合

#データのカラムを取り出し(この場合はage)hist関数を呼ぶ
titanic_df['age'].hist()

image.png

hist関数のポイント

・countplotとデータの渡し方が異なる
・値が多数の値に分散しているデータに用いる
・hist関数内に引数を取ることが出来る(red,binsなど)

違う使い方も何個か紹介させていただきます!

#メソッドのようにカラム名を渡しても、描画してくれます。
titanic_df.age.hist()

image.png

#引数にcolorを渡した場合
#最近黄色いロンTを買って、それがお気に入りなので黄色にしました笑

titanic_df.age.hist(color='yellow')

image.png

#引数にcolorを取った時、カラーコードを渡すことも出来ます!
titanic_df.age.hist(color='#ffff00')

image.png

#引数にcolorとbinsを渡すことで、より詳細なデータの内容を知ることが出来ます!

#bins=20の場合
titanic_df.age.hist(color='yellow',bins=20)

image.png

#引数にcolorとbinsを渡すことで、より詳細なデータの内容を知ることが出来ます!

#bins=50の場合
titanic_df.age.hist(color='yellow',bins=50)

image.png

データから、20-40代の方が多かったことがわかりますね!

おわりに

徐々にタイタニック号に乗った方々の全体像が見えてきました!

次は生還にどのような条件が関係していたのか、因果関係を調べてみようと思います!

21
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
18