上一篇文章有提到鐵達尼生存使用ggolo2套件繪製長條圖,而ggpolt2有一定的基本語法其實掌握了,對於你在執行資料視覺化的過程會非常方便,當然語法也有精簡的方法,但我個人覺得先掌握基本語法基本原則,對於後續語法精簡的寫法只是水到渠成。
所以我們以上一篇鐵達尼存活長條圖的程式為例如下圖
上圖為正式要出圖表達的視覺化,但通常我們在探索資料的過程中不會加入那麼多函式,通常會以下列程式碼為主,如此會加快你對於資料的探索,而要正式出圖或加入報告時,才會以上圖的形式呈現,當然這會視你的需求而定,以我而言正式出圖我一定會加labs()標籤函式,theme_bw()函式我通常不會加,但是下列的程式為ggplot2常用的基礎表達式。
ggplot(data=titanic,mapping = aes(x=titanic$Survived))+
geom_bar()
另外,在撰寫ggplo2語法有一點很重要就是套件有很多函式來控制你的圖形,而要加入ggplot2其它函式我們會以**+號,來銜接你所需的函式,而+號的位置很重要,如下圖+號至於正確**位置
若是**+號至於下圖位置是無法執行**
而一個**+號位置為什麼要花一段的篇幅來說明,我們都知道寫程式最怕寫完了無法執行**,左右看語法上也沒有問題,那到底問題出現在甚麼地方,此時會有很深的挫折感,我相信寫過程式的人對於這句話一定是認同,最後就遠離程式了,我看我的同學都是如此,曾經有一段時間我也是怎麼認為,而小細節大關鍵。
對於上述原則都能掌握在R繪圖就可悠然自得,就算會有些小問題上網查一下也都能解決,接著我們繼續探索鐵達尼存活問題,在上一篇我們得知在這一個世紀災難經過計算死亡率62%,活下來的為38%,所有六成的人都死在這一個災難中,而在這生與死當中有藏著我們不知道的細節,讓我接著看下去....
一、男生和女生存活機率多少?我們都知道男生都會比較有力氣面對災難是否在這存活38%中
ggplot(data = titanic,mapping = aes(x=Sex,fill=Survived))+
geom_bar()
從圖中結果很令人驚訝!反而是女生的存活率比較高**,男生的死亡率比較高,跟我們的假設不同**。
二、船艙等級是否影響生存率,可以買得起一級船艙的票,此人都是非富即貴都是具備經濟實力。
ggplot(data = titanic,mapping = aes(x=Pclass,fill=Survived))+
geom_bar()
從圖中可以看到跟我們的假設是相同的,1級船艙存活率是比較高,2級存率一半一半,3級船艙死亡率偏高,ㄟ看起來....從古至今皆是如此....都是錢在做人還可以買到生存率....我們這些碼農該怎麼辦。
三、存活率跟船艙等級以及性別是否相關;嗯....有錢人是不是比較怕死所以男性的存活率較高,而之前的統計男性的死亡率較高,是不是都是3級船艙的男性。
ggplot(data=titanic,mapping = aes(x=Sex,fill=Survived))+
facet_wrap(~Pclass)+
geom_bar()
藉由三個變數的統計發現在1級船艙中女性的存活率幾乎是9成了(蠻意外),2級船艙和3級船艙跟之前的預測是一樣男性死亡率較高,女性的存活率較高。
四、乘坐鐵達尼年齡分佈,到底都是什麼年齡的人乘坐當時世界最大的輪船
ggplot(data=titanic,mapping = aes(x=Age))+
geom_histogram(binwidth = 5)
從直方圖可以看到乘坐年齡最多在18~35歲,不過有趣的是0歲約25人還有80歲,而這些年齡存活率是如何?會有敬老尊賢嗎?會有照顧小孩讓小孩先活嗎?年輕力壯的人是否充滿正感犧牲自我嗎?嗯......看到直方圖的年齡分佈,不禁讓我陷入沉思......
五、甚麼年齡存活率最高,這是一個直接的問題
ggplot(data = titanic,mapping = aes(x=Age,fill=Survived))+
geom_histogram(binwidth = 5)
從直方圖在死亡率的確在18~35存活率是比較高的,這跟年齡的人數數量是形成正比,但在5~8歲的存活率是超過六成,而0~5歲的還有也有5成的存活率,所以天下父母心在這生死關頭還是先讓小孩存活;而在78歲以後的年長者全部存活。
六、存活率跟年齡、船艙、性別是否有關係,這是一個尖銳問題,是否有錢的小因父母親權力及地位讓他們的小享有更高的存活率,記得當時在發覺這個問題時內心頗有感觸。
ggplot(data = titanic,mapping = aes(x=Age,fill=Survived))+
facet_wrap(Pclass~Sex)+
geom_density()
這張圖就不解釋了,讀者自行解讀了.......
七、人類在災難面前是否保有人性的光輝?
從上述的分析中可以看到人類在生死存的當下是保有人性的光輝,可以從以下幾點說明
在整體存活率來看女性的存活率較高,不僅在船艙的等級、年齡的分布都顯示男性在危急時會保護女性的統計數據,所以鐵達尼的電影劇情男主角為保護女主角而犧牲生命,這不是電影情節,在現實中是成立的。
天下父母心在危急的當下,天下的父母還是希望自己的兒女能存活下來。
對於尊敬長者在數據來看在78歲以後全部存活。
在數據上面也明確顯示有錢之人的確存活率較高,不僅是他們的小孩或配偶,所以存在著權力及地位明確的階級象徵,在哪個時候是如此...如今也是否如此....
八、本篇結論
這一篇文章有點長,並且我並沒有解釋相關程式碼,是因為每一段的碼都很簡短,相關的函式及參數網路上都可查的到,R的網路資源是很豐富的,若是我將每段程式做說明,光是鐵達尼這個系列可以寫個10篇以上,當然這對我參加鐵人是有幫助,不用每天在想內容,而我為什麼沒有如此做,因為有時藉由文字講解並不能完整的詮釋,反而藉由自身體會程式的內容會有所頓悟。
而為什麼一口氣將相關分析在這一篇文章呈現,本來我也想切成多篇文章,因為上述的程式碼若能理解大概就掌握R資料視覺化25%~30%對於資料的探索是有幫助,若是切成五篇也是可以,但有時在寫程式或學習有時是一氣呵成,切成多篇有時思緒會斷,想表達或領悟的成效就會不彰。
下一篇文章會深入ggplot2的相關語法,對於R的資料視覺化更能進一步的掌握,就會切多篇文章做表達,如此吸收較好。