數據分析入門必看案例:泰坦尼克號倖存率研究

import pandas as pd

import numpy as np

import matplotlib

import matplotlib.pyplot as plt

%matplotlib inline#為能夠jupyter在線使用matplotlib

df=pd.read_csv(C:\Users\dell\Desktop\titanic_data.csv)

df.head(5)#先顯示出前5行,觀察有哪些數據

數據概況:

PassengerId:乘客序號;

Survived:最終是否存活(1表示存活,0表示未存活);

Pclass:艙位,1是頭等艙,3是最低等;

Name:乘客姓名;

Sex:性別;

Age:年齡;

SibSp:一同上船的兄弟姐妹或配偶;

Parch:一同上船的父母或子女;

Ticket:船票信息;

Fare:乘客票價,決定了Pclass的等級;

Cabin:客艙編號,不同的編號對應不同的位置;

Embarked:上船地點,主要是S(南安普頓)、C(瑟堡)、Q(皇后鎮)。

欲想探討的問題:

存活率與哪些因素有關? 猜想影響因素有:Pclass、Sex、Age、SibSp、Parch、Ticket、Cabin、Embarked。

01|泰坦尼克號整體情況:

通過下面代碼可以看出泰坦尼克號整體的倖存率約為39%。

代碼區域

survived_rate=float(df[Survived].sum())/df[Survived].count()#加float是為了讓小數結果顯示出來

survived_rate

out:0.38383838

02|倖存率與Pclass的關係:

可以看出兩者有強烈的相關關係,Pclass等級越高(1最高),倖存率越高。

代碼區域

Pclass_survived_rate=(df.groupby([Pclass]).sum()/df.groupby([Pclass]).count())[Survived]

Pclass_survived_rate.plot(kind=bar)#kind=bar表示垂直柱狀圖、kind=『barh』表示水平柱狀圖

03|倖存率與Sex的關係:

female的倖存率是male的3倍還要多。

代碼區域

Sex_survived_rate=(df.groupby([Sex]).sum()/df.groupby([Sex]).count())[Survived]

Sex_survived_rate.plot(kind=bar)

04|倖存率與Age的關係:

通過折線圖看出倖存率與Age沒有明確的關係。0-10歲的倖存率要明顯高於其他年齡段。

代碼區域

Sex_survived_rate=(df.groupby([Age]).sum()/df.groupby([Age]).count())[Survived]

Sex_survived_rate.plot()

代碼區域

age_train_p=df[~np.isnan(df[Age])] #去除年齡數據中的NaN

ages=np.arange(0,80,10) #0~80歲,每10歲一段(年齡最大80歲)

age_cut=pd.cut(age_train_p.Age,ages)

age_cut_grouped=age_train_p.groupby(age_cut)

age_Survival_Rate=(age_cut_grouped.sum()/age_cut_grouped.count())[Survived] #計算每年齡段的倖存率

age_Survival_Rate.plot(kind=bar)

05|倖存率與SibSp&Parch的關係:

通過柱狀圖可以看出,當同行1-2個親人朋友時的倖存率更高。(這裡將SibSp與Parch統一處理)

代碼區域

SibSp_Parch_survived_rate=((df.groupby([SibSp]).sum()+df.groupby([Parch]).sum())

/(df.groupby([SibSp]).count()+df.groupby([Parch]).count()))[Survived]

SibSp_Parch_survived_rate.plot(kind=bar)

06|倖存率與Cabin的關係:

根據折線圖看出沒有明確的相關關係,再加上缺失數據過多687/891,所以倖存率對Cabin可以暫且不計入考慮。

代碼區域

max_survived_rate=(df.groupby([Cabin]).sum()/df.groupby([Cabin]).count())[Survived]

max_survived_rate.plot()

print df[Cabin].count()#除缺失值以外的數據個數

df[Cabin].fillna(0).count()#所有數據個數

07|倖存率與Embarked的關係:

通過柱形圖可以看出C、Q、S三地的倖存率依次下降。

代碼區域

max_survived_rate=(df.groupby([Embarked]).sum()/df.groupby([Embarked]).count())[Survived]

max_survived_rate.plot(kind=bar)

綜上所述:

1、泰坦尼克號整體的倖存率約為39%。

2、存活率與Pclass的關係:Pclass等級越高(1最高),存活率越高。多掙錢,坐頭等艙可以提高倖存率。

3、存活率與Sex的關係:female的存活率是male的3倍還要多。女性的天生優勢。

4、存活率與Age的關係:沒有明確的關係,0-10歲的存活率明顯高於其他年齡段。

5、存活率與SibSp&Parch的關係:當同行1-2個親人朋友時的存活率更高。出去玩耍結1-2個伴可以提高倖存率。

6、存活率與Cabin的關係:沒有明確的相關關係,再加上缺失數據過多687/891,所以存活率對Cabin可以暫且不計入考慮。

7、存活率與Embarked的關係:C、Q、S三地的存活率依次下降,不過應該和登陸地本身是沒啥關係的,登陸地可能最終體現在性別、艙位等級等方面。

-----------------------------------

作者:張俊紅

博客專欄:張俊紅的博客專欄

公眾號:張俊紅

視頻推薦學習: Python機器學習kaggle案例 Python機器學習kaggle案例 配套學習!!


推薦閱讀:

深入淺出區塊鏈(1)介紹
基於TCP的python聊天程序
學會最簡單的資料庫|看完這7招就夠了
Python 高級編程:理解生成器
Python Generator漫談

TAG:Python | 数据分析 | 大数据分析 |