美文网首页
flight航班延误时间和距离的关系

flight航班延误时间和距离的关系

作者: 张伟松 | 来源:发表于2017-08-17 15:09 被阅读92次

这篇实践是跟着猴子的教程走了一遍,为的是是熟悉项目目录和dplyr包的使用。
代码在我的git上:项目地址

项目的目录结构:

.Rproj.user
output
data
db
service
util
view
.Rhistory
da.Rproj

在git上传项目时发现一个问题,git跟踪的是文件,所以不会对空文件夹进行同步本地的项目中data,db等空文件夹没有传至服务器

项目结构:

db是数据层,用来获取/操作数据,service是业务逻辑层,view是视图层。项目建好之后只需要source()运行视图层中的R脚本,即可运行整个项目,因为在view中同样使用source()调用了service中的业务逻辑模块,而在service中调用数据操作模块(如果有的话)。

获取数据

nycflights13包中的flights,是纽约2013年航班数据信息(On-time data for all flights that departed NYC (i.e. JFK, LGA or EWR) in 2013),共包含30多万条记录,19个变量涵盖了航班号,飞行时长,目的地,起飞时间,落地时间,延误时间。

str(flights)#On-time data for all flights that departed NYC (i.e. JFK, LGA or EWR) in 2013.
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   336776 obs. of  19 variables:
 $ year          : int  2013 2013 2013 2013 2013 2013 2013 2013 2013 2013 ...
 $ month         : int  1 1 1 1 1 1 1 1 1 1 ...
 $ day           : int  1 1 1 1 1 1 1 1 1 1 ...
 $ dep_time      : int  517 533 542 544 554 554 555 557 557 558 ...
 $ sched_dep_time: int  515 529 540 545 600 558 600 600 600 600 ...
 $ dep_delay     : num  2 4 2 -1 -6 -4 -5 -3 -3 -2 ...
 $ arr_time      : int  830 850 923 1004 812 740 913 709 838 753 ...
 $ sched_arr_time: int  819 830 850 1022 837 728 854 723 846 745 ...
 $ arr_delay     : num  11 20 33 -18 -25 12 19 -14 -8 8 ...
 $ carrier       : chr  "UA" "UA" "AA" "B6" ...
 $ flight        : int  1545 1714 1141 725 461 1696 507 5708 79 301 ...
 $ tailnum       : chr  "N14228" "N24211" "N619AA" "N804JB" ...
 $ origin        : chr  "EWR" "LGA" "JFK" "JFK" ...
 $ dest          : chr  "IAH" "IAH" "MIA" "BQN" ...
 $ air_time      : num  227 227 160 183 116 150 158 53 140 138 ...
 $ distance      : num  1400 1416 1089 1576 762 ...
 $ hour          : num  5 5 5 5 6 5 6 6 6 6 ...
 $ minute        : num  15 29 40 45 0 58 0 0 0 0 ...
 $ time_hour     : POSIXct, format: "2013-01-01 05:00:00" "2013-01-01 05:00:00" "2013-01-01 05:00:00" "2013-01-01 05:00:00" ...

service/flight.r中定义一个函数disDelay()该函数的目的是

  1. 获取数据
  2. 对数据进行操作,返回的数据框中应包含主要信息:延误时间和距离。
#引入包
library(dplyr)#数据操作
library(nycflights13)#包含数据
#定义函数
disDelay <- function(){
  myFlights <- select(flights,year,month,day,dep_delay,arr_delay,distance,dest) 
#由于本人对Mysql操作比较熟悉,将上面的命令改写为mysql的语言,便于自己理解
#SELECT year, month, day, dep_delay, arr_delay, distance, dest FROM flights
  #重命名列remane函数
  myFlights <- rename(myFlights, destination = dest)
#删除缺失值, 这里的空值代表航班取消。
myFlights <- filter(myFlights, !is.na(dep_delay), !is,na(arr_delay))
#表示留下的数据只包含没有缺失数据的记录
#对数据进行排序 
  myFlights <- arrange(myflithgs,desc(dep_delay))
#数据计算,起飞地都是纽约,所以如果目的地不同,表明距离不同, 根据目的地进行分组计算,距离和延误时间求均值
delay <- myFlights %>%
  group_by(destination) %>%
  summarise(
    count = n(),
    dist = mean(distance, na.rm=T),
    delay = mean(arr_delay, na.rm=R)
  ) %>%
  filter(count >20)
#SELECT destination, count(1) AS count,AVG(distance) AS dist,AVG(arr_delay) AS delay FROM myFlights GROUP BY destination WHERE count>20.
return(delay)
}

结果可视化

编写好service层之后,在view层中只需要source("service/flights.r")引入,进行结果展示。这里使用ggplot2包进行可视化。

library(ggplot2)
library(stringr)
source("service/flight.r")#相当于引入disDelay函数
delay <- disDelay()

view <- ggplot(data=delay) + #ggplot图层叠加
  geom_point(mapping = aes(x=dist, y=delay)) +
  geom_smooth(mapping = aes(x=dist, y=delay))

#保存为图片
filename <- str_r("output","delayFlight.jpg",sep="/")
ggsave(filename=filename,plot=view)

生成的结果:

delayFlight.jpg

用Mysql获取数据

刚才我们使用的是包自带的数据进行操作,大多数时候数据是存在于数据库中的,这就需要我们建立数据库链接,获取数据。git上的代码在这里

#查询航班数据
findFlights <- function(){
  #连接数据库
  #user:数据库用户名,password:数据库密码,
  #host数据库服务器地址(127.0.0.1是指本地数据库)
  #dbname数据库名
  con <- dbConnect(MySQL(), 
                   user='root',
                   password='root',
                   port=3307,
                   host='127.0.0.1',
                   dbname='flightinfo')
  #dbGetQuert执行一个sql语句
  flightsdata <- dbGetQuery(con, "select year,month,day,
                      dep_delay,arr_delay,
                            distance,dest
                            from flights")
  
  #关闭数据库连接
  dbDisconnect(con)
  
  return (flightsdata)
}

这时在service的文件中执行findFlights()就可以获得航班数据了。
其他的代码不变,因为数据从30w条减少到1000条,生成的图像有些不同。

相关文章

  • flight航班延误时间和距离的关系

    这篇实践是跟着猴子的教程走了一遍,为的是是熟悉项目目录和dplyr包的使用。代码在我的git上:项目地址 项目的目...

  • 1677单词,Day 3

    delay [dɪˈleɪ]v. 延期,延误,耽搁,推迟例:My flight is delayed. 我的航班...

  • 航行距离和延误时间到底有没有关系呢?

    今天想和大家讨论的问题是:飞机航行距离和延误时间有没有关系呢?我们的数据是R 中nycflights13包的航班数...

  • 航班延误

    受困机场, 因为雨, 航班准时延误。 飞机没来, 我的心已飞去。 周围的人, 安安静静, 与手机玩耍。 有的自拍,...

  • 航班延误

    我时间概念很差,除了赶飞机的时候。 滴滴司机打电话问我到底在哪,我说在外环路的。他大概有点纳闷。为什么你的出发点是...

  • 航班延误

    返京航班似乎没有正常过,刚听到说前序航班已经到达,还没来得及高兴,就听广播说由于首都限制入港,时间待定。 本来到京...

  • 航班延误

    为了赶一大早的航班,昨晚早早睡去。早上起来匆忙洗刷整装待发之际,看了下手机,一连串信息跳出来。航班延误!脑袋瞬间像...

  • 延误的航班

    第二次出差到上海,十分波折,周末领导让五地的小伙伴一起回家,我们一起定了周五的飞机票,因为只是提前一天,周五很多机...

  • T退订

    【去哪儿网】您机票中包含的延误免票已激活,在您实际乘坐航班之后,若航班延误,系统会根据您实际延误时间,为您判定赔付...

  • 「热词」6月新闻热词汇总

    中国将对入境航班实施奖励和熔断措施 入境航班 inbound flight 第一入境点 first point o...

网友评论

      本文标题:flight航班延误时间和距离的关系

      本文链接:https://www.haomeiwen.com/subject/znegrxtx.html