【R语言】沈阳地铁数据处理及站间流量统计——R语言第五次实训


title: “R语言第五次实训”
output: html_notebook

在这里插入图片描述
在这里插入图片描述

题目一:

1读数据

df <-read.csv("D:\\张志浩\\大数据班\\R语言实验-徐娇\\R第5次实训\\数据\\SY-20150401.csv")

2处理数据字段

修改数据的字段名
colnames(df)
colnames(df) <- c('card.id','date','time','station','vehicle','money','property')
colnames(df)

3取出数据中是地铁的刷卡数据

trade.metro<-df[df$vehicle=="地铁",]

4将station分成2个字段line和station,利用‘号线’来分割;处理每5分钟一段,并按M5排序

导入包
# install.packages("tidyr")
library(tidyr)
trade.metro<-separate(trade.metro ,station, c('line', 'station'), sep = '号线')
head(trade.metro)
library(dplyr)
library(lubridate)
按五分钟统计时间,向上取整
trade.metro <- trade.metro %>%mutate(M5=ceiling(period_to_seconds(hms(time))/300))
head(trade.metro)

5进站数据统计(进站时money==0)

trade.metro.in <- trade.metro %>%
  filter(money==0) %>%
  select(card.id,"time.in"=time,"line.in"=line,"station.in"=station,"M5.in"=M5)
head(trade.metro.in)

6出站数据统计(出站时money>0)

trade.metro.out <- trade.metro %>%
  filter(money>0)%>%
  select(card.id,"time.out"=time,"line.out"=line,"station.out"=station,money,"M5.out"=M5)
head(trade.metro.out)

7根据card.id将5和6合并;并计算乘车时长;将乘车时长大于0的取出来

trade.metro.in.out <-
  merge(trade.metro.in, trade.metro.out, by = "card.id") %>%
  mutate(duration = (period_to_seconds(hms(time.out)) - period_to_seconds(hms(time.in)))) %>%
  filter(duration > 0)
head(trade.metro.in.out)

8通过card.id, M5.in来统计出某个card.id的最短的乘车时长然后通过duration==duration_min,将最近出站时间,找出来再将中间的统计量去掉

trade.metro.in.out <- data.table(trade.metro.in.out)
trade.metro.in.out[, duration_min := min(duration), by=list(card.id, M5.in)]
trade.metro.in.out <- trade.metro.in.out %>%
  filter(duration==duration_min) %>%
  select(-duration_min)
head(trade.metro.in.out)

9按照card.id来排序,并展示前10条

trade.metro.in.out<-trade.metro.in.out[order(trade.metro.in.out$card.id),]
# trade.metro.in.out <- arrange(trade.metro.in.out,card.id)
head(trade.metro.in.out,10)

10将处理后的数据输出

write.csv(trade.metro.in.out,"shmetro_line_in_out.csv",row.names = F)

题目2:

1利用1中的处理结果,按照station.in,station.out来分组,统计各组的数量

trade.metro.in.out <- data.table(trade.metro.in.out)
a <- trade.metro.in.out[,.(passenger.flow=.N), keyby=.(station.in,station.out)]
# aggregate(trade.metro.in.out, by=list(in1=trade.metro.in.out$station.in,out=trade.metro.in.out$station.out), nrow)
head(a,10)

2按照进出站的流量排序,取出前10个

a<-a[order(a$passenger.flow,decreasing = TRUE),]
b<-a[1:10,] 

3展示前6个

head(b,6)
posted @ 2019-12-04 18:50  爱做梦的子浩  阅读(488)  评论(0编辑  收藏  举报