標籤:

R語言分析告訴你應避開哪個國家以躲避空難

本文將對自1908年至2009年全世界的飛機失事數據進行探索分析,航空旅行已成為目前最常見的出行方式之一,研究數據背後隱藏的信息對個人出行、或對於我們審視克服空難的進程有一定的指導意義。

數據來源:全世界1908年以來空難數據,鏈接網址:dataju.cn/Dataju/web/da

數據說明:

數據集包括5268個觀測值和13個變數,它代表了全世界飛機失事事故的歷史:

  1. Date - 飛機墜毀的日期
  2. Time - 飛機墜毀的時間
  3. Location - 墜毀的位置
  4. Operator - 運營商(航空公司)
  5. Flight # - 失事飛機航班號
  6. Route - 飛行路線
  7. Type - 飛機機型
  8. Registration - 註冊。不可用。
  9. cn.In - 不可用。
  10. Aboard - 乘客人數
  11. Fatalities - 死亡人數
  12. Ground - 地面。不可用
  13. Summary - 概要

數據分析可視化目標:

** 自1908年以來,空難發生的趨勢如何

** 每年死於空難的人數佔比情況

** 在哪個國家發生空難的次數最多?應該避開哪些國家以躲避空難?

** 最差的航空公司有哪些?

** 哪種類型的飛機容易出事故?

數據分析流程:

一、載入所需要的包

library(stringr) library(plyr) library(dplyr) library(ggplot2)

二、數據導入

AirplaneCrash <- read.csv("E:/R/Workspace/data/AirplaneCrash.csv", stringsAsFactors = FALSE,header = TRUE)

三、數據預處理

1、選擇子集

AirplaneCrash <- select(AirplaneCrash,Date,Location,Operator,Type,Aboard, Fatalities,Summary)

2、刪除缺失數據

AirplaneCrash <- na.omit(AirplaneCrash) # 刪除後剩餘5246個觀測值

3、處理日期、位置信息

日期原格式為「月/日/年」 ,後續只按照年份進行分析,從日期格式中提取年份數據。

位置列包含有城市,州和國家的混合值。有的三個值都有,有的包含了州和國家名,很少有隻有國家名字的,還有的包含了像在山上,海洋里..這樣的說明。要了解哪個國家發生空難最多,執行字元串操作僅提取國家名稱。

# 處理日期,只選取年份數據DateSplit <- str_split_fixed(AirplaneCrash$Date,"/",n = 3)AirplaneCrash$Date <- DateSplit[,3]

# 將位置列轉換為只包含國家名稱或位置說明,運用正則表達式匹配,匹配後刪除前面的空白AirplaneCrash$Location <- gsub(".*,", "", AirplaneCrash$Location)AirplaneCrash$Location <- str_trim(AirplaneCrash$Location, side = "both")

4、列名重命名

AirplaneCrash <- rename(AirplaneCrash, c("Date" = "Year","Aboard" = "Passengers"))

四、數據計算、可視化目標顯示

!!可視化目標1:自1908年以來,空難發生的趨勢如何

## Crash Trend## 生成年份計數表,轉換為數據框Years <- table(AirplaneCrash$Year)Years <- as.data.frame(Years)Crash.Trend <- ggplot(data = Years, aes(x = Var1 , y = Freq)) + geom_point(size = 3,pch = 20) + geom_line(aes(group = 1)) + geom_smooth(aes(group = 1)) + xlab("年份") + ylab("空難次數") + ggtitle("空難年度發生次數") + scale_x_discrete(breaks = seq(from = 1908, to = 2009, by = 10)) Crash.Trend

上面的趨勢線顯示,自1968--1978這十年以後,事故發生的次數在逐漸減少。而1968--1978這十年之間,空難次數的發生值是最大的。

!!可視化目標2:每年死於空難的人數佔比情況

## Fatality PercentFatalities <- AirplaneCrash %>% group_by(Year) %>% summarise(total_fatalities = sum(Fatalities), total_passengers = sum(Passengers))Fatality.Percent <- ggplot(Fatalities, aes(y = (total_fatalities/total_passengers)*100, x = Year)) + geom_point(aes(color = factor(Year)),size = 3,alpha = 0.4) + geom_smooth(aes(group = "x")) + xlab("年份") + ylab("空難死亡人數百分比") + scale_x_discrete(breaks = seq(from = 1908, to = 2009, by = 10)) + ggtitle("空難死亡人數百分比/年")Fatality.Percent

這裡我們可以看到死亡人數百分比隨著時間的推移在慢慢下降,這可能意味著乘機人員的安全措施在逐漸增強。

!!可視化目標3:在哪個國家發生空難的次數最多?

## Crash LocationsLocation_Crash <- AirplaneCrash %>% group_by(Location) %>% summarise(total_fatalities = sum(Fatalities)) %>% arrange(desc(total_fatalities)) Crash.Locations <- ggplot(Location_Crash[1:10,], aes(x = reorder(Location, -total_fatalities), y = total_fatalities)) + geom_col(aes(fill = Location,alpha = total_fatalities), width = 0.5) + xlab("國家") + ylab("空難死亡人數") + ggtitle("空難死亡人數前十大國家")Crash.Locations

圖表顯示空難死亡人數前十大的國家分別為: 俄羅斯、巴西、哥倫比亞、蘇維埃、法國、印度、中國、印尼、日本、加拿大。中國排名第七,名列第一的是俄羅斯!!俄羅斯!!所以,你應該知道避開哪個國家以躲避空難了吧?!

!!可視化目標4:最差的航空公司有哪些?

## Aircraft OperatorsAirplaneCrash$Operator <- sapply(AirplaneCrash$Operator, as.factor)crash.operator <- table(AirplaneCrash$Operator)crash.operator <- as.data.frame(crash.operator)crash.operator <- arrange(crash.operator,-Freq)Aircraft.Operators <- ggplot(crash.operator[1:10,], aes(x = Freq,y = reorder(Var1,Freq))) + geom_point(aes(size = Freq),shape = 18,color = "maroon") + xlab("空難次數") + ylab("航空公司") + ggtitle("空難發生前十大航空公司") Aircraft.Operators

各家航空公司的安全係數有差異,從上圖可以看出,在過去100年間發生事故次數最多的是俄羅斯航空,安全係數最低(排名依次為:俄羅斯航空、美國空軍、法國航空、德國漢莎航空、??、美聯航、美國陸軍航空隊、美國泛美航空、中國航空、美國海軍)。另外從排名中發現美國佔了5個名額!一方面可能跟軍事有關,另一方面也說明了並不是發達國家的飛機就更安全。

!!可視化目標5:哪種類型的飛機容易出事故?

## Aircraft Typecrash_type <- AirplaneCrash %>% group_by(Type) %>% summarise(Freq = n()) %>% arrange(desc(Freq))Aircraft.Type <- ggplot(crash_type[1:10,], aes(x = Freq,y = reorder(Type,Freq))) + geom_point(aes(size = Freq),shape = 19,color = "blue") + xlab("空難次數") + ylab("飛機機型") + ggtitle("發生空難的前十大飛機機型") Aircraft.Type

到這裡可視化目標分析已完成,對於導致事故的原因分析可以對摘要列進行文本挖掘形成詞雲,後續學習一下。

??總結:我踩過的坑

1、列名重命名,就是很簡單的rename函數,「新列名 = 舊列名」,我確實是折騰了好久才找到解決方案。在同時載入了plyr和dplyr包的情況下,執行列名重命名要先去掉dplyr包載入。

2、table函數使用交叉分類因子來構建每個因子水平組合的計數表。生成計數表之前先檢查數據結構,非因子的要轉換成因子結構。

3、ggplot2繪圖,當X軸變數為因子時,需指定分組美學屬性,不然圖形畫不出來。個人的總結不確定理解得到不到位,不解釋那麼多,具體可參考stackoverflow上的問答:Plotting lines and the group aesthetic in ggplot2、R - ggplot geom_bar: meaning of aes(group = 1)、R stat_smooth all points


推薦閱讀:

MySQL入門及其與R的交互
R 如何解決R在大樣本回歸中,內存不足問題?

TAG:R | 数据分析 |