大数据社群第四课《复杂数据分析和处理》

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

航行距离到底和延误时间有没有关系?只要是乘坐过飞机的人都知道,航班延误是正常的事情,不延误就有点不正常了。本文通过学习猴子大数据课程,对学习内容进行一次回顾和总结。

一、数据预处理

文中的航班数据来自R中nycflights13包。

#安装数据处理包
install.packages("dplyr")
#安装数据包
install.packages("nycflights13")
#载入安装的包
library(dplyr)
library(nycflights13)#for data
> flights
航班数据截图
第一步从数据中选择需要分析的目标数据,也就是课程中说的选择子集。

分析目标:航班距离和到达延误时间。
航班数据集中相关的字段有:year,month、day航班日期,dep_delay起飞延迟时间(份),arr_delay到达延迟时间(分),diatance航行距离(英里),dest目的地。

其它:dep_time,完整的是departure time 即飞机起飞时间,sched_dep_time,完整的是schdeule departure time 即,按照飞行计划表起飞时间。可以上面表格中看到这个的差值就是dep_time,起飞延迟时间,这个时间有早一点的有晚一点的。

同理后面的arr_time 和schedule arrive time,就是到达时间和计划到达时间。carrier,flight,tailnum,即为客机类型以及相关型号编号等,rigin,dest(destnation)即为出发地和目的地。后面distance即为飞行距离。

利用函数选取子集如下:

#从flights中取子集
> myFlight<-select(flights,year,
+                  month,day,dep_delay,
+                  arr_delay,distance,dest)
> myFlight
 
取子集后的数据

尝试生成数据文件查看一下:

#指定myFlight数据保存的文件名
save(myFlight,file = "E:/R语言笔记/实践笔记/第四课实践笔记/myFlight.rData")
#写入到指定的文件中
write.csv(myFlight,file = "E:/R语言笔记/实践笔记/第四课实践笔记/myFlight.csv")
#生成了myFlight.csv文件
保存为.csv格式的情况

备注:讲解一下select()函数的使用方法。使用help查看。
01,select()函数只保留提到的变量元素。(而rename()函数则保留所有变量,注意区别)
02, select(.data, ...),select_(.data, ..., .dots)。其中.data应为目标数据集,...为不带引号的表达式,即需要保留的变量元素,正值表示保留变量,负值表示删除变量。猴子君课程中提到的:select(myFlight,year:day),select(myFlight,-(year:day))
03,详细情况请参考help(“select”)示例中关于鸢尾花(iris)数据的一系列操作。其中就有关于模糊查询的例子。

select(iris, -starts_with("Petal"))
select(iris, -ends_with("Width"))
select(iris, -contains("etal"))
select(iris, -matches(".t."))
select(iris, -Petal.Length, -Petal.Width)
第二步进行列名重命名
> #列名重命名
> myFlight<-rename(myFlight,destination=dest)
> myFlight
dest目的地重命名成功
第三步删除缺失数据

由于存在航班取消等情况,因此就不存在起飞和到达延迟时间,更可能为空或NA,在数据处理中,需要删除这些噪音,提升数据分析质量。

前期学习过na.omit()函数,可以用来删除所有含有缺失数据的行。上次的实践课程使用的是is.na()函数,并通过逻辑运算符!(非),!is.na的意思就是不是缺失数据,!is.na(excelData$购药时间)作用是保留购药时间不是缺失的数据。

本例使用dplyr包中filter()函数(表示过滤,筛选的意思),返回具有匹配条件的行。filter(.data, ...)其中.data和上面的select()函数、rename()函数一样,一个包含数据集的表,...,为逻辑判断条件,继续使用!is.na()。

> myFlight<-filter(myFlight,
+                  !is.na(dep_delay),
+                         !is.na(arr_delay))
> myFlight
未删除数据前
删除数据后

也可以这样用:

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(多个参数相当于并列关系)
filter(mtcars, cyl < 6, vs == 1)

猴子君讲课中的例子:

#查找日期为12月25日的数据情况
filter(myFlight,month==12,day==25)
#查找延误时间(包括起飞和到达两种情况)大于2小时的数据情况
filter(myFlight,arr_delay>120 | dep_delay>120)
课件
第四步,数据的排序(本例中对日期要求不高,不需要对日期进行处理)

以前是使用order函数进行排序。本例使用dplyr包中的arrange()函数进行排序。相比较而言后者更为简单易用。
arrange(.data, ...)函数用法:.data同上,...表示“用逗号分隔的,无引号变量名的列表,使用desc按降序排序变量。”

myFlight<-arrange(myFlight,dep_delay)#按照升序排序
myFlight<-arrange(myFlight,desc(dep_delay))#按照降序排序
按照降序排序后的数据

以上就完成了数据的预处理。下面进行数据的计算。

</br>

二、数据的计算

使用dplyr包中分组函数group_by()组合函数summarise()。
数据处理的模式是:数据拆分,函数应用,组合结果(Split-Apply-Combine)。

01.数据分组。

到达同一目的地为一组(因为航程距离基本一样)

> by_dest<-group_by(myFlight,destination)#按照目的地进行分组
> 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

**(问题:分组后是依据延迟时间降序输出数据,如何看出是分过组的?)
**

02函数应用和合并结果,移除数据量较小的样本,并使用%>%(管道)优化代码。
> delay<-summarise(by_dest,
+                  count=n(),#统计航班数
+                  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
若是出现警告信息,可以在函数中使用encoding = "UTF-8"。(具体原因应该是数据源代码在读取过程中,由于中文Windows用户的默认中文编码和源代码兼容问题,只有当源代码与编码同时存储UTF-8时,工作正常,非英语环境极易出现类似问题。具体请参考:In grepl("\n", lines, fixed = TRUE) : input string 1 is invalid in this locale #396What is Unicode, UTF-8, UTF-16?
#移除噪音数据
delay<-filter(delay,count > 20)#航班数量大于20为有效值

优化后的代码如下:(优化掉了7行数据)

> 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

三、数据显示

数据显示绘图包ggplot2()函数

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

飞行距离和延误时间关系
从最后可视化图形可以看出:
  • 1.延迟时间基本集中在15分钟左右;
  • 2.飞机延误情况在航程1000(相当于1600公里左右,北京到广州大概是2000公里左右)英里以内尤为明显,在航程距离500英里(相当于800公里左右,北京到西安的距离,北京到上海大概是1100公里左右)左右达到高峰,随后持续下降。
  • 3.飞行距离和延误时间存在一定的关系。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容