泰坦尼克號倖存者特徵分析
摘要
泰坦尼克號(RMS Titanic)是一艘奧林匹克級郵輪,於1912年4月處女航時遇上冰山沉沒。泰坦尼克號由位於愛爾蘭島貝爾法斯特的哈蘭德與沃爾夫造船廠興建,是當時最大的客運輪船。在她的處女航中,泰坦尼克號從英國南安普敦出發,途經法國瑟堡-奧克特維爾以及愛爾蘭昆士敦,計劃中的目的地為美國紐約,途中沉沒。該沉船事故成為和平時期死傷人數最慘重的一次。全船載送有2208名旅客和船員,死亡1502人,僅有705人生還。
一、提出問題
通過以上背景信息得知,當事故發生後,全船人員僅有705人生還,生還率31.93%。那麼,有哪些因素會讓船上的人生還率更高,倖存者們又具備哪些共同特徵?
二、分析過程
(一)數據清理
1. 讀取數據
使用pd.read_csv(titanic-data.csv)讀取數據。
2. 檢查原始數據的狀態
(1)使用len()函數獲取原始數據的長度為:891條
(2)使用dtypes()函數獲取欄位名和類型:
(3)使用head()函數獲得各欄位的數據樣式:
3. 刪除分析不需要的欄位
通過觀察,結合分析的問題,決定刪除Name,Ticket,Cabin三個使用不上的欄位。刪除操作使用drop()函數。
4. 替換數據
為方便欄位話計算和分析,對Sex,Embarked欄位下的字元串值進行替換,使用replace()函數替換如下:
5. 空缺值處理
(1)使用isnull()函數檢查數據集中是否存在空缺值的情況。
(2)有缺失值的情況存在,處理缺失值有三種處理手段,一是刪除缺失值所在的數據行,二是插入制自定義數值,三是插入隨機數值。結果缺失值所在的欄位,以及分析的目的,決定採取第二種處理方式,插入自定義數值-1,即滿足分析的要求,又保留數值缺失的特徵,最關鍵是不影響分析結果。
(二)數據基本情況
數據包含891名乘客的信息。其中,生還人數為342人,死亡人數為549,存活率為38.38%,如下圖:
圖1:生還人數與死亡人數佔比
位於頭等艙的旅客有216位,位於二等艙的旅客有184位,位於三等艙的旅客有491位,如下圖:
圖2:各檔次艙位的人數佔比
女性旅客有314位,男性旅客有577位,如下圖:
圖3:男女人數佔比
有168位旅客在Cherbourg登船,77位旅客在Queenstown登船,644位旅客在Southampton登船,有2位旅客的登船位置不詳,如下圖:
圖4:各個港口登船人數佔比
該批旅客剔除年齡不詳的數據後,年齡分布如下圖:
圖5:人員年齡分布情況
多數旅客年齡分布於25歲左右。
該批旅客購票價格分布如下圖:
圖6:船票價格分布
絕大多數旅客購票價格沒有超過25英鎊。
(三)初步探索
在對數據有了初步了解之後,現在需要使用相關性演算法,快速找出可能具有關聯性的欄位數據。使用corr()函數,對加工後的數據進行計算,得到以下數據關聯表格:
通過上表,我們很快得出可能存在關聯的欄位數據,其中:
1. 存活率分別和旅客的性別、所在艙位有較高的負相關關係,存在女性旅客具有較高的存活率,且所在艙位等級越高存活率越高。
2. 艙位等級和票價、年齡有較高的負相關關係,說明艙位等級越高價格越貴,而且入住高等級艙位的旅客年齡偏大。
3. parch與性別有較高負相關關係,說明帶小孩乘船的女性旅客不在少數。
(四)進一步探索
綜合上述線索,發現存活率與年齡,性別,所在艙位,兒童,成人,老年人群體可能有關。那麼我們需要加入並分析這一線索,在開始分析之前,我們需要通過年齡信息對所有人員進行群體劃分。具體分析過程如下:
1. 增加一個新欄位generation,用於識別兒童、成人、老人;通過維基百科查詢得知,1912年時期的英國法律規定,年滿15歲則視為成人,年滿55歲則視為老年人。其中數據0:兒童,1:成人,2:老人,-1:年齡未知
2. 進行分組統計,分別觀察個欄位對生存率存在的影響:
圖7:艙位等級的存活率情況
圖8:性別的存活率情況
圖9:按年齡段統計存活率
圖10:死亡人員及倖存者的年齡分布情況
圖11:死亡人員和倖存者的票價分布情況
圖12:登船港口的存活率情況
3. 按照分類分析的方法,將旅客按照所在艙位劃分成三個數據集,分別進行數據統計,統計結果如下:
圖13:不同艙位,不同性別的整體存活率情況
圖14:不同艙位不同性別的存活人數
圖15:不同艙位的群體分布情況
圖16:不同艙位的男女存活情況
圖17:不同艙位的群體存活情況
通過以上數據,我們可以得出以下幾個結果:
(1)整體而言客艙等級越高,存活率越高
(2)在三個等級的客艙中,女性均比男性的存活率高
(五)T檢驗
1. 實驗設計
通過以上的數據,我們不難發現一個規律,凡是身處頭等艙的旅客,無論群體如何,存活率均高於二等艙和三等艙,也就是說,艙位的檔次決定了旅客的生死,為了驗證這個現象,決定對該現象進行T檢驗,從倖存者清單中隨機抽取10個人為一組,連續抽取10組,統計每組中頭等艙的佔比數是否明顯大於二等艙和三等艙的人員佔比。
2. 假設前提
(1)10組樣本均為隨機抽取,彼此間未有關聯,決定採取獨立樣本單尾t檢驗。
(2)如果艙位等級對存活率具有較大影響,那麼頭等艙的存活率一定大於二等艙和三等艙,數學表達式為:
其中,為頭等艙存活率的總體平均值,為二等艙存活率的總體平均值,為三等艙存活率的總體平均值。
3. 數據處理
(1)通過程序隨機抽取10組數據,整理得到:
(2)對數據進行初步統計得到:
樣本量:== =10
自由度: ===9
樣本均值(Sample
mean):=0.44,=0.28,=0.28標準偏差(Standard
deviation):=0.26, =0.19,=0.23(3)三組數據的分布情況:
圖18:Pclass_1數據直方圖
圖19:Pclass_2數據直方圖
圖20:Pclass_3數據直方圖
4. 檢驗結果
根據試驗假設及數據的特性,採用獨立樣本t檢驗的演算法,對統計數據進行單尾假設檢驗(One-tailed test)。結論如下:
(1)通過運算得知=1.55,=1.43
(2)通過查表可知,95%的置信水平T臨界值為1.734,結果不顯著,暫時不能排除成立的可能性。
(3)雖然艙位等級跟存活率具有較高的相關性,但從統計角度看,艙位等級與存活率並不直接有關。
5. 實驗設計
接下來我們對女性比男性的存活率高的情況進行t檢驗,抽樣的方式不變,統計每組數據中的女性人數。
6. 假設前提
(1)10組樣本均為隨機抽取,彼此間未有關聯,決定採取獨立樣本單尾t檢驗。
(2)如果性別對存活率具有較大影響,那麼女性存活率大於男性,數學表達式為:
其中,為存活女性的總體平均值,為存活男性的總體平均值。
7. 數據處理
(1)通過程序隨機抽取10組數據,整理得到:
(2)對數據進行初步統計得到:
樣本量:= =10
自由度:==9
樣本均值(Samplemean):=3,=2
標準偏差(Standard deviation):=0.82,=0.82
(3)三組數據的分布情況:
圖21:female數據直方圖
圖22:male數據直方圖
8. 檢驗結果
根據試驗假設及數據的特性,採用獨立樣本t檢驗的演算法,對統計數據進行單尾假設檢驗(One-tailed test)。結論如下:
(1)通過運算得知t=2.74
(2)通過查表可知,95%的置信水平T臨界值為1.734,結果顯著,女性較男性而言具有較高的存活率。
三、結論
泰坦尼克號事故已經過去了100多年,作為人類歷史上的重大災難之一,我們僅能通過有限的數據去回顧當時那一驚心動魄的場面。
數據集中包含了891個乘客的數據,雖然從統計學角度來看,超過30條的數據樣本就算一個大樣本。但不得不面對一個客觀的事實,數據的欄位太少。能夠提供給我們用於分析的維度就少,所能夠展現的細節也就少了很多,從這個層面來說,這個數據集並不大。
為盡量保留住更多的細節,我在數據清洗的過程中,對於缺失值的處理方式,採取了插入自定義的數值的方式,它的思想來源是以最適當的值來插補缺失值比全部刪除不完全樣本所產生的信息丟失要少。在數據分析中,面對樣本數據時,因為一個值的缺失而放棄大量的其他值,這種刪除是對信息的極大浪費,所以產生了以可能值對缺失值進行插補的思想與方法。雖然這會導致在對數據進行一維分析的時候,導致偏差的出現,但對於提供更多的細節信息卻有諸多的好處。
恰如我們最後的2個t檢驗,一個排除部分可能性,一個肯定一個現象,這兩個結論恰恰體現出了人類在對面災難時所展現出的人性光輝,通過以上第一個t檢測,我們不難推斷出,泰坦尼克號上並未出現頭等艙旅客擁有優先逃生的權利,至少,在t檢測結果上看,三個等級艙位的旅客在存活率上沒有明顯的差別,我們可以否定這一情況的存在。相反的,第二個t檢驗證明了泰坦尼克號上男性們所展現出來的優良品格,危難時刻讓女人這一弱勢群體獲得優先逃生權利,這是男性們的「個人選擇」,這也是一種集體意志的體現。
最後,對於本次數據分析的方法上的選擇,以及t檢驗的設計可能存在一些偏差和不確定性,主要原因如下:
(一)由於數據的限制,無法從其他多個角度對同一個問題進行對比和論證。
(二)在進行t檢驗得出的結果,無法從樣本外的數據中來進行驗證,可能存在過度擬合的情況。隨機抽樣的設計也僅僅是在限定好的範圍內盡量做到客觀,其效果有限。
(三)因為數據的量的不足,更多的關鍵因素我們無法得知,例如,全船配備的救生艇數量,以及每船能夠搭乘的人數等。
參考文獻:
維基百科
https://en.wikipedia.org/wiki/Ages_of_consent_in_Europe
推薦閱讀:
※開發項目「狗咬刺蝟」無從下手,問題出在哪兒?
※python 關於 for循環 命名空間和變數作用域的一個疑問?
※一步一步教你用Python畫出專業的K線圖
※黃哥Python 所寫三大操作系統Python 學習環境準備
※使用Python數據透視表挖掘幸福數據