乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       shiyiyuting 2017-05-24



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



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


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


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

      1.1 安裝dplyr包

      腳本輸入代碼:

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

      library(dplyr)

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


      腳本輸入代碼:

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

      library(nyclights13)

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

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

      輸出結(jié)果如下:



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


      在處理數(shù)據(jù)之前,讓我們?cè)賮?lái)回顧一下數(shù)據(jù)處理的一般步驟:


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

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


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

      2.1 選擇子集

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

      year 航班日期-年

      month 航班日期-月

      day 航班日期-月

      dep_delay 起飛延遲時(shí)間(分)

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

      distance 航行里程(英里)

      dest 目的地


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

      腳本輸入代碼:

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

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

      如圖,子集選擇完畢。




      2.2 列名重命名

      為了讓列名簡(jiǎn)單易懂,可以使用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ù)找出缺失值,再采用邏輯運(yùn)算符“!X”將限定有效數(shù)據(jù),最后用filter()函數(shù)“過(guò)濾”得到有效數(shù)據(jù),成功地刪除了缺失數(shù)據(jù)(由原先的336,776個(gè)數(shù)據(jù)變?yōu)?27,346個(gè)數(shù)據(jù))。



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

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

      myFlights <- arrange(myflights,="">

      myFlights

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




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

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

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


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

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


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

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

      by_dest <- group_by(myflights,="">

      class(by_dest)

      by_dest

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




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

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

      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個(gè)目的地的航班數(shù)排序。為了統(tǒng)計(jì)的科學(xué)合理性,需要對(duì)數(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)計(jì)的目的地有97個(gè)。




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


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

      by_dest <- group_by(myflights,="">


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

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

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

      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) %>% #對(duì)delay_sum進(jìn)行分組

      summarise( count = n(),

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

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

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

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

      delay_sum#顯示列表

      果然簡(jiǎn)潔了很多!


      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)和平均延誤時(shí)間(delay)的散點(diǎn)圖

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


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



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

                 

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

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多