數據分析入門必看案例:泰坦尼克號倖存率研究
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漫談