日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

R語言數(shù)據(jù)處理:飛機航行距離與到達(dá)延誤時間有什么關(guān)系??

 shiyiyuting 2017-05-24



數(shù)據(jù)挖掘入門與實戰(zhàn)  公眾號: datadw



數(shù)據(jù)分析有一半以上的時間會花在對原始數(shù)據(jù)的整理及變換上,包括選取特定的分析變量、匯總并篩選滿足條件的數(shù)據(jù)、排序、加工處理原始變量并生成新的變量、以及分組匯總數(shù)據(jù)等等。這一點,我想大部分使用EXCEL的童鞋都深有體會,寫論文時,這么多的數(shù)據(jù)進(jìn)行處理,手動匯總、篩選、變換,工作量實在是太大。而本文介紹的dplyr包簡直就是Hadley Wickham (ggplot2包的作者,被稱作“一個改變R的人”)大神為我們提供的“數(shù)據(jù)再加工”神器啊。


本文試圖通過一個案例,對神奇的dplyr包的一些常用功能做簡要介紹。在此拋磚引玉,歡迎廣大盆友拍磚。先放上實踐課的一個問題:航行距離與到達(dá)延誤時間有什么關(guān)系?? 帶著這個問題,我們將首先使用dplyr包對給出的航班數(shù)據(jù)進(jìn)行處理。


1.dplyr包的安裝加載與示例數(shù)據(jù)準(zhǔn)備

1.1 安裝dplyr包

腳本輸入代碼:

install.packages('dplyr') #加載dplyr包

library(dplyr)

1.2安裝 nycflights13包,該軟件包中的飛機航班數(shù)據(jù)將用于本文中dplyr包相關(guān)函數(shù)的演示。


腳本輸入代碼:

install.packages('nyclights13') #加載nyclights13

library(nyclights13)

flights #查看數(shù)據(jù)表

dim(flights) #查看變量的維數(shù)

輸出結(jié)果如下:



如圖可知,nycflights13是一個data.frame類型的對象,包含336776條數(shù)據(jù)記錄、19個變量。


在處理數(shù)據(jù)之前,讓我們再來回顧一下數(shù)據(jù)處理的一般步驟:


選擇子集、列名重命名、刪除缺失數(shù)據(jù)、處理日期、數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)排序

接下來,就可以進(jìn)行數(shù)據(jù)處理了:


2.數(shù)據(jù)處理

2.1 選擇子集

所謂選擇子集,就是選擇出能夠?qū)崿F(xiàn)分析目標(biāo)的變量,本次數(shù)據(jù)分析的目標(biāo)是得出航行距離與延誤時間的關(guān)系,因此,相應(yīng)的子集就是以下幾個字段:

year 航班日期-年

month 航班日期-月

day 航班日期-月

dep_delay 起飛延遲時間(分)

arr_delay 到達(dá)延遲時間(分)

distance 航行里程(英里)

dest 目的地


為此,我們首先使用dpylr包里的select函數(shù),進(jìn)行變量篩選:

腳本輸入代碼:

myFlights <- select(flights,="" year,month,="" day,dep_delay,arr_delay,distance,dest)="">

myFlights #查看數(shù)據(jù)表

如圖,子集選擇完畢。




2.2 列名重命名

為了讓列名簡單易懂,可以使用rename函數(shù),進(jìn)行列名重命名。

腳本輸入代碼:

myFlights <- rename(myflights,="" destination="">

myFlights

重命名完畢。



2.3 刪除缺失數(shù)據(jù)

我們采用dplyr包中的filter()函數(shù),進(jìn)行缺失數(shù)據(jù)的刪除。腳本輸入代碼:

myFlights <->

myFlights


由圖可知,我們首先采用is.na()函數(shù)找出缺失值,再采用邏輯運算符“!X”將限定有效數(shù)據(jù),最后用filter()函數(shù)“過濾”得到有效數(shù)據(jù),成功地刪除了缺失數(shù)據(jù)(由原先的336,776個數(shù)據(jù)變?yōu)?27,346個數(shù)據(jù))。



2.4 數(shù)據(jù)排序

為了數(shù)據(jù)的整齊性,我們可以選擇相應(yīng)的變量進(jìn)行排序。這里要穿插一個排序函數(shù)arrange(),默認(rèn)情況下,為升序排列,也可以對列名加desc()進(jìn)行降序排序。腳本輸入代碼:

myFlights <- arrange(myflights,="">

myFlights

如圖所示,數(shù)據(jù)按照變量arr_delay(到達(dá)延遲時間(分))進(jìn)行降序排列。




3.數(shù)據(jù)計算

數(shù)據(jù)處理之后,就進(jìn)入計算分析步驟啦。在這個環(huán)節(jié),主要歷經(jīng)三個過程:

數(shù)據(jù)分組(Split):可以指定目標(biāo)變量,將數(shù)據(jù)進(jìn)行分組。由于本次分析的目標(biāo)是找出航行距離與到達(dá)延誤時間的關(guān)系,所以我們得根據(jù)到達(dá)目的地對數(shù)據(jù)進(jìn)行分組,從而計算出不同目的地的平行航行距離以及平均延誤時間;


應(yīng)用函數(shù)(Apply):對不同組的數(shù)據(jù),應(yīng)用相應(yīng)函數(shù)獲取所需統(tǒng)計指標(biāo)。比如本次不同目的地的平行航行距離以及平均延誤時間;

組合結(jié)果(Combine):將計算后的統(tǒng)計指標(biāo)值與第一步當(dāng)中對應(yīng)的分組進(jìn)行組合。


3.1 數(shù)據(jù)分組

dplyr包里的分組是由group_by()函數(shù)實現(xiàn)的,腳本輸入代碼:

by_dest <- group_by(myflights,="">

class(by_dest)

by_dest

由圖可知,經(jīng)分組后,一共有104組數(shù)據(jù),即本次分析的目的地有104個。




3.2 應(yīng)用函數(shù)及組合結(jié)果

我們使用dplyr包中的summarize()函數(shù),進(jìn)行數(shù)據(jù)統(tǒng)計指標(biāo)的獲取及組合。計算出不同目的地的平行航行距離以及平均延誤時間。腳本輸入代碼:

delay_sum <- summarise(by_dest,="" count="">

dist = mean(distance, na.rm = TRUE),

delay = mean(arr_delay, na.rm = TRUE))

delay_sum <- arrange(delay_sum,="" desc(count))="">

delay_sum



從上圖可得知104個目的地的航班數(shù)排序。為了統(tǒng)計的科學(xué)合理性,需要對數(shù)據(jù)量太少的組別進(jìn)行剔除,即剔除噪音數(shù)據(jù),再次使用filter()函數(shù)剔除,剔除限度設(shè)為count>20。腳本輸入代碼:


delay_sum <- arrange(delay_sum,="">

delay_sum <- filter(delay_sum="" ,="" count=""> 20)

如上圖可知,剩余97組數(shù)據(jù),即本次參與統(tǒng)計的目的地有97個。




PS.這里穿插一個好用的工具,“管道”,即通過使用操作符把數(shù)據(jù)集名作為開頭, 然后依次對此數(shù)據(jù)進(jìn)行多步操作。這種運算符的編寫方式使得編程者可以按數(shù)據(jù)處理時的思路寫代碼, 一步一步操作不斷疊加,在程序上就可以非常清晰的體現(xiàn)數(shù)據(jù)處理的步驟與背后的邏輯。


通過管道的連接方式,讓數(shù)據(jù)或表達(dá)式的傳遞更高效,使用向右操作符%>%,可以直接把數(shù)據(jù)傳遞給下一個函數(shù)調(diào)用或表達(dá)式。(%>%是最常用的一個操作符,就是把左側(cè)準(zhǔn)備的數(shù)據(jù)或表達(dá)式,傳遞給右側(cè)的函數(shù)調(diào)用或表達(dá)式進(jìn)行運行,可以連續(xù)操作就像一個鏈條一樣。)拿上述的代碼進(jìn)行舉例,在沒用管道之前,代碼是這樣的:

by_dest <- group_by(myflights,="">


delay_sum <- summarise(by_dest,="" count="">

dist = mean(distance, na.rm = TRUE),#計算平均航行距離

delay = mean(arr_delay, na.rm = TRUE))#計算平均延誤時間

delay_sum <- arrange(delay_sum,="" desc(count))="">

delay_sum <- filter(delay_sum="" ,="" count=""> 20)#剔除噪音數(shù)據(jù)

delay_sum#顯示列表


用了管道“%>%”,代碼是這樣的:

delay_sum <- myflights="" %="">% #將右側(cè)航行數(shù)據(jù)賦值給左側(cè)delay_sum

group_by(destination) %>% #對delay_sum進(jìn)行分組

summarise( count = n(),

dist = mean(distance, na.rm = TRUE),

delay = mean(arr_delay, na.rm = TRUE)

) %>% #對分組后的delay_sum進(jìn)行計算統(tǒng)計

filter(count > 20)#對統(tǒng)計結(jié)果進(jìn)行噪音剔除

delay_sum#顯示列表

果然簡潔了很多!


4.數(shù)據(jù)顯示

所謂一圖勝千言啊,在大數(shù)據(jù)可視化普及的今天更是這樣。本次同樣使用Hadley Wickham 大神(ggplot2包的作者)貢獻(xiàn)的ggplot2包進(jìn)行繪圖。調(diào)用ggplot()函數(shù)進(jìn)行繪圖,腳本輸入代碼:

ggplot(data = delay_sum) +

geom_point(mapping = aes(x = dist, y = delay)) +#繪制平均航程(dist)和平均延誤時間(delay)的散點圖

geom_smooth(mapping = aes(x = dist, y = delay))#擬合一條平滑曲線(注意,連接符號+不可省略)


所得結(jié)果如下所示:



由上圖,我們就可以初步分析航程和延誤時間并非線性關(guān)系,至于這種非線性關(guān)系該怎么解釋,仍需進(jìn)一步統(tǒng)計調(diào)查分析。

           

數(shù)據(jù)挖掘入門與實戰(zhàn)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多