大數(shù)據(jù)社群第四課《復(fù)雜數(shù)據(jù)分析和處理》

One question: what is the relationship between flight distance and delay time?

航行距離到底和延誤時間有沒有關(guān)系斥季?只要是乘坐過飛機(jī)的人都知道亭姥,航班延誤是正常的事情谨设,不延誤就有點(diǎn)不正常了割粮。本文通過學(xué)習(xí)猴子大數(shù)據(jù)課程蜒程,對學(xué)習(xí)內(nèi)容進(jìn)行一次回顧和總結(jié)纽什。

一绒极、數(shù)據(jù)預(yù)處理

文中的航班數(shù)據(jù)來自R中nycflights13包。

#安裝數(shù)據(jù)處理包
install.packages("dplyr")
#安裝數(shù)據(jù)包
install.packages("nycflights13")
#載入安裝的包
library(dplyr)
library(nycflights13)#for data
> flights
航班數(shù)據(jù)截圖
第一步從數(shù)據(jù)中選擇需要分析的目標(biāo)數(shù)據(jù)伦乔,也就是課程中說的選擇子集厉亏。

分析目標(biāo):航班距離和到達(dá)延誤時間。
航班數(shù)據(jù)集中相關(guān)的字段有:year烈和,month爱只、day航班日期,dep_delay起飛延遲時間(份)招刹,arr_delay到達(dá)延遲時間(分)恬试,diatance航行距離(英里),dest目的地疯暑。

其它:dep_time训柴,完整的是departure time 即飛機(jī)起飛時間,sched_dep_time妇拯,完整的是schdeule departure time 即幻馁,按照飛行計劃表起飛時間≡叫猓可以上面表格中看到這個的差值就是dep_time,起飛延遲時間仗嗦,這個時間有早一點(diǎn)的有晚一點(diǎn)的。

同理后面的arr_time 和schedule arrive time甘凭,就是到達(dá)時間和計劃到達(dá)時間稀拐。carrier,flight丹弱,tailnum德撬,即為客機(jī)類型以及相關(guān)型號編號等,rigin,dest(destnation)即為出發(fā)地和目的地蹈矮。后面distance即為飛行距離砰逻。

利用函數(shù)選取子集如下:

#從flights中取子集
> myFlight<-select(flights,year,
+                  month,day,dep_delay,
+                  arr_delay,distance,dest)
> myFlight
 
取子集后的數(shù)據(jù)

嘗試生成數(shù)據(jù)文件查看一下:

#指定myFlight數(shù)據(jù)保存的文件名
save(myFlight,file = "E:/R語言筆記/實(shí)踐筆記/第四課實(shí)踐筆記/myFlight.rData")
#寫入到指定的文件中
write.csv(myFlight,file = "E:/R語言筆記/實(shí)踐筆記/第四課實(shí)踐筆記/myFlight.csv")
#生成了myFlight.csv文件
保存為.csv格式的情況

備注:講解一下select()函數(shù)的使用方法。使用help查看泛鸟。
01,select()函數(shù)只保留提到的變量元素蝠咆。(而rename()函數(shù)則保留所有變量,注意區(qū)別)
02, select(.data, ...),select_(.data, ..., .dots)北滥。其中.data應(yīng)為目標(biāo)數(shù)據(jù)集刚操,...為不帶引號的表達(dá)式,即需要保留的變量元素再芋,正值表示保留變量菊霜,負(fù)值表示刪除變量。猴子君課程中提到的:select(myFlight,year:day),select(myFlight,-(year:day))济赎。
03,詳細(xì)情況請參考help(“select”)示例中關(guān)于鳶尾花(iris)數(shù)據(jù)的一系列操作鉴逞。其中就有關(guān)于模糊查詢的例子记某。

select(iris, -starts_with("Petal"))
select(iris, -ends_with("Width"))
select(iris, -contains("etal"))
select(iris, -matches(".t."))
select(iris, -Petal.Length, -Petal.Width)
第二步進(jìn)行列名重命名
> #列名重命名
> myFlight<-rename(myFlight,destination=dest)
> myFlight
dest目的地重命名成功
第三步刪除缺失數(shù)據(jù)

由于存在航班取消等情況,因此就不存在起飛和到達(dá)延遲時間构捡,更可能為空或NA液南,在數(shù)據(jù)處理中,需要刪除這些噪音勾徽,提升數(shù)據(jù)分析質(zhì)量滑凉。

前期學(xué)習(xí)過na.omit()函數(shù),可以用來刪除所有含有缺失數(shù)據(jù)的行喘帚。上次的實(shí)踐課程使用的是is.na()函數(shù)畅姊,并通過邏輯運(yùn)算符!(非)吹由,!is.na的意思就是不是缺失數(shù)據(jù)若未,!is.na(excelData$購藥時間)作用是保留購藥時間不是缺失的數(shù)據(jù)。

本例使用dplyr包中filter()函數(shù)(表示過濾溉知,篩選的意思)陨瘩,返回具有匹配條件的行腕够。filter(.data, ...)其中.data和上面的select()函數(shù)级乍、rename()函數(shù)一樣,一個包含數(shù)據(jù)集的表帚湘,...玫荣,為邏輯判斷條件,繼續(xù)使用!is.na()大诸。

> myFlight<-filter(myFlight,
+                  !is.na(dep_delay),
+                         !is.na(arr_delay))
> myFlight
未刪除數(shù)據(jù)前
刪除數(shù)據(jù)后

也可以這樣用:

filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)
# Multiple criteria(多重條件)
filter(mtcars, cyl < 6 & vs == 1)
filter(mtcars, cyl < 6 | vs == 1)
# Multiple arguments are equivalent to and(多個參數(shù)相當(dāng)于并列關(guān)系)
filter(mtcars, cyl < 6, vs == 1)

猴子君講課中的例子:

#查找日期為12月25日的數(shù)據(jù)情況
filter(myFlight,month==12,day==25)
#查找延誤時間(包括起飛和到達(dá)兩種情況)大于2小時的數(shù)據(jù)情況
filter(myFlight,arr_delay>120 | dep_delay>120)
課件
第四步捅厂,數(shù)據(jù)的排序(本例中對日期要求不高,不需要對日期進(jìn)行處理)

以前是使用order函數(shù)進(jìn)行排序资柔。本例使用dplyr包中的arrange()函數(shù)進(jìn)行排序焙贷。相比較而言后者更為簡單易用。
arrange(.data, ...)函數(shù)用法:.data同上贿堰,...表示“用逗號分隔的辙芍,無引號變量名的列表,使用desc按降序排序變量羹与」使瑁”

myFlight<-arrange(myFlight,dep_delay)#按照升序排序
myFlight<-arrange(myFlight,desc(dep_delay))#按照降序排序
按照降序排序后的數(shù)據(jù)

以上就完成了數(shù)據(jù)的預(yù)處理。下面進(jìn)行數(shù)據(jù)的計算纵搁。

</br>

二吃衅、數(shù)據(jù)的計算

使用dplyr包中分組函數(shù)group_by()組合函數(shù)summarise()。
數(shù)據(jù)處理的模式是:數(shù)據(jù)拆分腾誉,函數(shù)應(yīng)用徘层,組合結(jié)果(Split-Apply-Combine)峻呕。

01.數(shù)據(jù)分組。

到達(dá)同一目的地為一組(因為航程距離基本一樣)

> by_dest<-group_by(myFlight,destination)#按照目的地進(jìn)行分組
> by_dest
Source: local data frame [327,346 x 7]
Groups: destination [104]

    year month   day dep_delay arr_delay distance destination
   <int> <int> <int>     <dbl>     <dbl>    <dbl>       <chr>
1   2013     1     9      1301      1272     4983         HNL
2   2013     6    15      1137      1127      483         CMH
3   2013     1    10      1126      1109      719         ORD
4   2013     9    20      1014      1007     2586         SFO
5   2013     7    22      1005       989      589         CVG

**(問題:分組后是依據(jù)延遲時間降序輸出數(shù)據(jù)趣效,如何看出是分過組的山上?)
**

02函數(shù)應(yīng)用和合并結(jié)果,移除數(shù)據(jù)量較小的樣本英支,并使用%>%(管道)優(yōu)化代碼佩憾。
> delay<-summarise(by_dest,
+                  count=n(),#統(tǒng)計航班數(shù)
+                  dist=mean(distance,na.rm = TRUE),
+                  delay=mean(arr_delay,na.rm = TRUE))

> delay
# A tibble: 104 × 4
   destination count      dist     delay
         <chr> <int>     <dbl>     <dbl>
1          ABQ   254 1826.0000  4.381890
2          ACK   264  199.0000  4.852273
3          ALB   418  143.0000 14.397129
4          ANC     8 3370.0000 -2.500000
5          ATL  16837  757.1383 11.300113
6          AUS  2411 1514.2522  6.019909
# ... with 94 more rows
若是出現(xiàn)警告信息,可以在函數(shù)中使用encoding = "UTF-8"干花。(具體原因應(yīng)該是數(shù)據(jù)源代碼在讀取過程中妄帘,由于中文Windows用戶的默認(rèn)中文編碼和源代碼兼容問題,只有當(dāng)源代碼與編碼同時存儲UTF-8時池凄,工作正常抡驼,非英語環(huán)境極易出現(xiàn)類似問題。具體請參考:In grepl("\n", lines, fixed = TRUE) : input string 1 is invalid in this locale #396What is Unicode, UTF-8, UTF-16?
#移除噪音數(shù)據(jù)
delay<-filter(delay,count > 20)#航班數(shù)量大于20為有效值

優(yōu)化后的代碼如下:(優(yōu)化掉了7行數(shù)據(jù))

> delay<-myFlight %>%
+   group_by(destination) %>%
+   summarise(count=n(),
+             dist=mean(distance,na.rm=TRUE),
+             delay=mean(arr_delay,na.rm=TRUE)
+   ) %>%
+   filter(count>20)
> delay
# A tibble: 97 × 4
   destination count      dist     delay
         <chr> <int>     <dbl>     <dbl>
1          ABQ   254 1826.0000  4.381890
2          ACK   264  199.0000  4.852273
3          ALB   418  143.0000 14.397129
4          ATL 16837  757.1383 11.300113
5          AUS  2411 1514.2522  6.019909
6          AVL   261  583.6130  8.003831
# ... with 87 more rows

三肿仑、數(shù)據(jù)顯示

數(shù)據(jù)顯示繪圖包ggplot2()函數(shù)

> #繪制圖形
> ggplot(data = delay) +
+   geom_point(mapping = aes(x=dist,y=delay)) +
+   geom_smooth(mapping = aes(x=dist,y=delay))

飛行距離和延誤時間關(guān)系
從最后可視化圖形可以看出:
  • 1.延遲時間基本集中在15分鐘左右致盟;
  • 2.飛機(jī)延誤情況在航程1000(相當(dāng)于1600公里左右,北京到廣州大概是2000公里左右)英里以內(nèi)尤為明顯尤慰,在航程距離500英里(相當(dāng)于800公里左右馏锡,北京到西安的距離,北京到上海大概是1100公里左右)左右達(dá)到高峰伟端,隨后持續(xù)下降杯道。
  • 3.飛行距離和延誤時間存在一定的關(guān)系。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末责蝠,一起剝皮案震驚了整個濱河市党巾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霜医,老刑警劉巖齿拂,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肴敛,居然都是意外死亡署海,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門值朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叹侄,“玉大人,你說我怎么就攤上這事昨登≈捍” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵丰辣,是天一觀的道長撒强。 經(jīng)常有香客問我禽捆,道長,這世上最難降的妖魔是什么飘哨? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任胚想,我火速辦了婚禮,結(jié)果婚禮上芽隆,老公的妹妹穿的比我還像新娘浊服。我一直安慰自己,他們只是感情好胚吁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布牙躺。 她就那樣靜靜地躺著,像睡著了一般腕扶。 火紅的嫁衣襯著肌膚如雪孽拷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天半抱,我揣著相機(jī)與錄音脓恕,去河邊找鬼。 笑死窿侈,一個胖子當(dāng)著我的面吹牛炼幔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棉磨,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼江掩,長吁一口氣:“原來是場噩夢啊……” “哼学辱!你這毒婦竟也來了乘瓤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤策泣,失蹤者是張志新(化名)和其女友劉穎衙傀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萨咕,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡统抬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了危队。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聪建。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茫陆,靈堂內(nèi)的尸體忽然破棺而出金麸,到底是詐尸還是另有隱情,我是刑警寧澤簿盅,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布挥下,位于F島的核電站揍魂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棚瘟。R本人自食惡果不足惜现斋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偎蘸。 院中可真熱鬧庄蹋,春花似錦、人聲如沸迷雪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽振乏。三九已至蔗包,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慧邮,已是汗流浹背调限。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留误澳,地道東北人耻矮。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像忆谓,于是被迫代替她去往敵國和親裆装。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容