文科生學Python系列18:泰坦尼克數據4(多因素影響)

第八課:案例分析 - 泰坦尼克數據

本節課將重點分析泰坦尼克號沉船事故,我們將探索是什么因素決定了最后是否生還。

我們將前面課程所學過的知識點融會貫通,舉一反三。

新增知識點:

? ? ? 缺失值處理:pandas中的fillna()方法

? ? ?數據透視表:pandas中的pivot_table函數

上篇文章的作業疑惑,其實用下圖是可以簡潔說明的,此圖截屏于 新生大學-解密大數據《Python編程&數據科學入門》線上課程(說明來處,應該沒侵權啊。。)。

對啦,我上的就是這個課,有讀者問到這課程講得那么詳細是什么課,這個介紹一下,就是 新生大學-解密大數據《Python編程&數據科學入門》,感興趣的讀者可以去了解一下。

此圖來自 新生大學-解密大數據《Python編程&數據科學入門》

為什么前面聽了那么久,我都不知道index是行索引,columns是列索引呢??!

好吧,接下來是正文內容:


3-4 年齡與生還情況

與上面的艙位、性別這些分類變量不同,年齡是一個連續的變量。

生還組和罹難組的年齡分布直方圖

分類變量可以繪制條形圖,連續變量可以繪制直方圖。將泰坦尼克號的數據映射到 hist 函數中,來繪制 Age 這一列的直方圖,并且把區間設成 20,輸出得到年齡分布的直方圖。

年齡分布直方圖

這張圖并沒能明顯顯示 FacetGrid 圖表的優勢,由于我們需要的是罹難和生還兩個組的年齡分布,所以這時候可以加一個語句:

生還組和罹難組的年齡分布直方圖

這個 col='Survived' 充滿了魔力?。。?!一變二!這里就能顯示生還組(Survived=1)和罹難組( Survived=0 )兩個圖表中年齡的分布了。col代表的是列的屬性,這時把0和1分布在兩個圖表中,為了一致起見,把兩個圖表歸一化,使用normed=True 這個參數,我們能夠看到縱坐標的值改變了,并不是頻數等統計,歸一化的意思就是下面陰影區域的面積為1。

在這個圖可以看到,相對來說,生還組中兒童占比比較大。

結論:兒童有更高的生還可能。

作業 8-3:

考慮艙位因素后,繪制生還組和罹難組的年齡分布直方圖提示:FacetGrid參數中同時設置col和row

年齡是一個連續的值,要是用直方圖來觀察,不是太方便。這里就需要將連續性的變量離散化了:


將連續型變量離散化

連續型變量離散化是建模中一種常用的方法

離散化指的是將某個變量的所在區間分割為幾個小區間,落在同一個區間的觀測值用同一個符號表示

以年齡為例,最小值是0.42(嬰兒),最大值是80,如果我們想產生一個五個級(levels),我們可使用cut或者qcut函數

cut函數將年齡的區間均勻分割為5分,而qcut則選取區間以至于每個區間里的觀察值個數都是一樣的(五等分), 這里演示中使用cut函數。

我們上面的圖中可以看到年齡是0-80歲,我們可以嘗試將它劃分為五等分,等于就是把一個連續的值變成離散的值了,將數值變量變成一個分類變量。

pd.cut(titanic_df.Age,5) (1)
pd.cut(titanic_df.Age,5) (2)

此處離散化的方法是使用 pandas 里面的 cut 函數,首先傳遞給這個函數將要離散化的數據:年齡,后面的5,表示將數據分割成五等分。這里將原本數據的每一行對應到一個區間數據。

新添加的AgeBand

然后把這個輸出添加到原來的數據中,通過添加一個新的列,賦值給 AgeBand,代表了年齡區間。


查看落在不同年齡區間里的人數

沒有sort=False的結果

sort=False 表示不需要將結果排序,上圖是沒有加上這句話的輸出,可以看到區間是按照區間數量的多少進行從大到小的排序的,要是想要把區間捋一捋,將區間從小到大無縫連接地排序,就可以加上 sort=False 這個語句了,下圖是輸出效果:

加上sort=False的結果

這里的結果輸出可以看到年齡最小的區間人數有100人,按年齡區間分布最多的是16-32歲之間,老年人最少。

同樣的,得出這樣結果的方法不止一個,我們用 pivot_table 方法進行操作:

查看落在不同年齡區間里的人數

因為這里統計的是頻數,values 對應的是非空數值就可以了。這里的主語是年齡區間,所以索引引導的是 AgeBand。也因為這里統計的是頻數,所以聚合函數 aggfunc 的值是 count。

方法一和方法二不同的是,方法一是Series格式,方法二是DataFrame格式。


查看各個年齡區間的生還率

各個年齡區間的生還率

上面表格可以看到不同年齡區間的生還率,年齡最小區間的生還率是最高的,有55.5%,中堅力量三個區間的生還率不相上下,老年人最低,只有9%,從上面看到老年人只有11人,應該就是只有個別老人成功逃離了。。。

按照套路,我們下面到了繪制圖表的時間啦!

各個年齡區間的生還率

這個圖標的橫坐標每個數據有點長,相互打架了。所以我們進行設置:

調整橫坐標

plt.xticks 這個函數我們之前提到過的,一般是用來調整坐標軸,可以通過旋轉角度,對圖表進行調整。這里 rotation=60,表示旋轉的度數為 60 度,然后可以看到輸出。

結論:兒童的生還率更高。

以上是單獨看年齡/性別/艙位和生還率的關系,下面我們綜合不止一個因素來看生還率。


3-5 年齡、性別 與生還概率

落在不同年齡區間男女的生還概率

這里設置行索引 index 是年齡區間 AgeBand ,列索引 columns 是性別 Sex,聚合函數 aggfunc 是 numpy 的平均值。

第八課講到挺多這樣結構的案例的,前面我搞得挺迷糊,昨天在地鐵上忍不住打開電腦敲代碼的時候,真的發現這東西因為太簡潔了,所以邏輯性特別強。比如這里需要看年齡性別兩個因素同時與生還概率的關系,所以是用了二重索引來作為分支,數字是生還率,所以 values 是等于生還率的,我的理解就是主語是這些數字,主要就是為了展示主語。然后有分支分類的從句,對句子進行補充,行索引 是年齡區間,列索引 是性別,我的理解就是 行索引 和 列索引 的關系是并列的,然后同時從屬于主句,為生還率這個主語服務。得出來的輸出就是 在某年齡區間,男性的生還率和女性的生還率分別是多少。這段話是文科生說給文科生聽的??

接下來是繪制圖表:

年齡區間與生還率

這里會自動幫你把Y軸 survived 這個數據求平均。不過這張圖只有一條折線,因為這里還沒有進行按性別來分組。折線圖的分組句型記得啊!是hue!加上要修改距離打架的X軸,下面兩處改動:

年齡區間,性別與生還率

這張折線圖可以看到,綠色代表的女性生還率無論在哪個年齡區間都是大于男性的,而且女性的生還率隨年齡的增加也在遞增。對于男性來說,也就是藍色那條線的代表值,幼者生還率最大,年長的生還率都低于20%。老師說,從這幅圖可以看出營救的策略應該是兒童優先,然后女性優先。


3-6 年齡、艙位、性別 與生還概率

年齡、艙位、性別 與生還概率

我覺得要是前面說給文科生的那段話理解清楚,或者知道那段話代表的內容能理解清楚,這里加多一個因素的時候,不會那么慌。這里加了一個艙位的分支。看到最后一行輸出,老年組女性的值是NaN,這一區間,無人生還。

看數據會有點懵,接下來繪制折線圖,直觀點吧!

艙位,性別與生還概率

上圖并沒有年齡區間的劃分,這個函數不合適有三重索引地表達吧。所以下面要引進另一個函數,正確表達年齡,艙位,性別和生還概率的關系。

年齡、艙位、性別 與生還概率折線圖1
年齡、艙位、性別 與生還概率折線圖2

把年齡區間放在row上,按照年齡區間來分圖,老師說到第二句代碼map的時候,說把sns.pointplot,也就是上面運行的結果,映射到新賦值的函數中,我就想,反正都把結果弄上去了,為什么后面還要加上橫縱坐標以及分類的參數呢,所以就試了一下不放其他參數的結果:

不設置參數

結果就是,五個空圖,有年齡區間,有頻數,就是沒有參數的內容。不能偷懶啊不能偷懶~~????

因為上面正確輸出的圖不是太完美,所以要進行調整:


美圖1
美圖2

aspect是長寬比等于1.5倍,還是胖一點好看??????

palette是調色板,用內置的色板進行調整,然后那條幾乎隱形的白線終于顯示出來了,變成綠色了。綠色代表女性數據,藍色代表男性數據。

然而。。。這還沒完,看上面五張圖,幾乎都是綠色在上面,也就是女性生還率高于男性,但是在第三個圖,也就是年齡區間在32到48歲之間的綠色線是在藍色線下面的?。。〔豢赡馨?,翻看前面的數據表格,也是女性生還率高啊!然后老師說,這里藍色和綠色代表的數值調換了,也就是這張圖中的藍色代表女性,綠色代表男性。為什么呢?老師沒說??

這里的設置是加一句 hue_order=[ 'male' , 'female' ] ,此處用的是列表形式擴住參數。然后就正常了:

hue_order=[ 'male' , 'female' ]

老師說,對上圖的色板配色感興趣的,可以去這個鏈接:palette 配色參考?https://seaborn.pydata.org/tutorial/color_palettes.html?highlight=palette

哈我就沒多大要求了,默認隱藏的夠用就行,你們拿去收藏吧!??


作業8-4:

綜合考慮性別,艙位和登船碼頭三個因素,計算其生還概率,并在一副圖中探索它們和生還概率的關系。


來來來總結一下第八課的內容,我們一開篇就提出一個問題:生還率和什么因素有關,然后拿到了原始數據,數據通過清洗填充了缺失值,然后看單個因素和生還率的關系,再看多個因素和生還率的關系,進行可視化圖表的繪制更容易得出結論,看下圖(我又侵權了嗎。。。??外框綠色蝴蝶是新生大學Logo,內框那只老虎是解密大數據團隊Logo)

案例總結

第八課終于結束了,老淚縱橫。。。寫不完的第八課??????今晚上第九課啦?。?!預習資料還沒看??抓緊時間

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容