1.数据格式

id  int  id编号
type  int   41表示站间数据,42中间站进出数据 43始末站进出数据
route_id int  线路ID号,10454,10069,120881
bus_id  varchar  车辆编号
station_id varchar  站点编号
lon  decimal  经度
lat  decimal   纬度
speed  decimal  速度
direction decimal  方向
gpsflag  int  gps状态  0有效,1无效
updownflag int  上下行,0上行,1下行
inoutflag int  进出站,0进站,1出站
runningflag int  运营状态,0正常运营,1停止运营
onlineflag int  在线状态,0正常状态,1不在线
create_time timestamp  gps时间

共十五个字段,如下截图所示:

2.简单数据清洗

首先,删除线路id编号,因为我们本次处理的是一条线路。根据运营状态、在线状态、gps是否有效,可删除无效数据。

利用上下行的标志位,将简单清理后的数据分成两部分,上行部分和下行部分:

然后,根据不同的公交汽车,把上下行数据按照不通公交车分类。生成两个List。每个List分别对应上行或者下行公共汽车的集合,List的元素就是该公共汽车在数据采集周期内的每个到达每个站点的不同位置

3.获取间隔时间

假设我们现在有了单辆bus的信息,那么计算相邻两站之间的时间,只需要根据type和inoutflag就可以了。只需要type为42(表示为在中间站)同事inoutflag为0.表示进站。提取符合这两条的记录便可以计算所有车站之间的行驶间隔了。最后我们把数据删除的只剩下站点和到站时间信息。

由于我们要获取的是时间间隔,而我们现在只有到站时间。利用python的时间处理模块,将这一时间字符串转化为时间戳,然后利用list计算出各站点之间的gap(时间差),然后保存为Series后插入到dataframe格式中。

最后,由于数据存在误差,gps传输的数据也容易受到干扰,所以需要删除一些明显诡异的值。

4.源代码

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 15 19:51:52 2015@author: Luyixiao
"""import pandas as pd
import numpy as np
import timedef disData(path):data = pd.read_table(path,header=None)#read the txt data as tabledaVal = data.drop(2,axis = 1)#delet the useless columns(the rout id)daVal = daVal[daVal[13]==0]#onlineflagdaVal = daVal[daVal[12]==0]#runningflag     daVal = daVal[daVal[9]==0]#gpsflag  daVal =daVal.drop([5,6,7,8,9,12,13], axis = 1)upRoad = daVal[daVal[10] == 0]#updownflag get the up flow datadownRoad = daVal[daVal[10]==1]groupedUp = upRoad.groupby(3)#bus_id  upList = []for bus in groupedUp:upList.append(bus)groupedDown = downRoad.groupby(3)#bus_id  downList = []for bus in groupedDown:downList.append(bus)return upList,downList#above return value is a list,elements in lists can be as the input
def  timeGet(da):inrec = da[da[11]==0]#inoutflag ,endure that the bus  enters stationinrec = inrec[inrec[1]==42]   clr = inrec.drop([0,1,3,10,11],axis = 1)gg = clr.groupby(4)#group by the stationtiml=[]#the list store the time stampfor cnt in range(0,len(clr)):timl.append(time.mktime(time.strptime(clr.iat[cnt,1],'%Y-%m-%d %H:%M:%S')))gap = []for cnt in range(0,len(timl)-1):gap.append(timl[cnt+1]-timl[cnt])gap.append(0)#the last one define as zero for the corresponding of lengthclr['gap'] = pd.Series(gap,index= clr.index)#add the row to the data frame   gd  =  clr.groupby(4)ll = []for si in gd:ll.append(si)#each station in each car as a group,we average themkk = {}#the dict for store the "station":"average_time_for_this_bus"for cnt in range(0,len(ll)):temp = ll[cnt][1][ll[cnt][1]['gap']<600]  temp = temp[temp['gap']>60]if len(temp)*2 < len(ll[cnt][1]):ave = 0else:ave = temp.sum()['gap']/len(temp)kk[ll[cnt][0]] = avereturn kk,gap

总之呢,groupby之后遍历,转成List是一种很好用的技巧。

利用Python数据处理进行公交车到站时间预测(一)相关推荐

  1. python例题求乘客等车时间_利用Python数据处理进行公交车到站时间预测(一)

    1.数据格式 id  int  id编号 type  int   41表示站间数据,42中间站进出数据 43始末站进出数据 route_id int  线路ID号,10454,10069,120881 ...

  2. 基于时空相关属性模型的公交到站时间预测算法

    基于时空相关属性模型的公交到站时间预测算法 人工智能技术与咨询 来源:<软件学报> ,作者赖永炫等 摘 要:公交车辆到站时间的预测是公交调度辅助决策系统的重要依据,可帮助调度员及时发现晚点 ...

  3. json字段顺序读取 python_如何利用Python批量读取视频文件的时间长度?

    本期的主题是利用Python来实现对视频文件时间长度的读取. 在学习编程语言时,相比较于通过书本来学习知识,我更喜欢通过观看学习视频的方式来进行学习,通过主讲老师的讲解,我能很直观且快速的了解一些知识 ...

  4. 零基础利用Python库you-get下载b站等视频网站的视频(会员视频需有账号并且设置cookie)

    文章目录 利用python下载视频 安装python 配置环境变量 下载you-get库 (需要下载会员视频)找到cookie 配置参数 写在开头: 之所以写这个教程是因为之前想要下载b站视频(PC端 ...

  5. python爬取b站搜索结果播放地址_如何利用Python快速爬取B站全站视频信息

    B 站我想大家都熟悉吧,其实 B 站的爬虫网上一搜一大堆.不过 纸上得来终觉浅,绝知此事要躬行,我码故我在.最终爬取到数据总量为 760万 条. 准备工作 首先打开 B 站,随便在首页找一个视频点击进 ...

  6. python数据处理——将横轴设为时间,两个纵轴为不同单位的图

    对现有数据有如下操作要求,第一:横坐标必须为时间,第二,纵坐标的表示单位不相同.本次要处理的数据,纵坐标是次数(10-1000次)和情感值(0-1). 如下图所示: 代码实现: import nump ...

  7. 利用Python对电商用户购买行为进行预测!这都能预测到?

    任务:依据电子商务平平台上真实的用户行为记录,利用机器学习相关技术,建立稳健的电商用户购买行为预测模型,预测用户下一个可能会购买的商品. 数据简介 数据整理自一家中等化妆品在线商店公布的网上公开数据集 ...

  8. 一种基于Gradient Boosting的公交车运行时长预测方法

    一种基于Gradient Boosting的公交车运行时长预测方法 赖永炫1,2, 杨旭3, 曹琦4, 曹辉彬1,2, 王田5, 杨帆6 1 厦门大学信息学院,福建 厦门 361005 2 厦门大学深 ...

  9. 公交车到站预测1----python处理csv文件

    之前处理csv一直用pandas,今天发现,pandas虽然强大,但是灵活度少了很多,有时候想实现一些简单的功能可能要花很大的代价.大道至简,返璞归真.就像这几天用excel一样,利用简单的规则就可以 ...

最新文章

  1. JDK相关版本特性浏览
  2. 探讨DHCP之一:了解DHCP
  3. R语言应用统计1 主成分分析
  4. 数字化转型里面的这些名词都是什么关系呢?
  5. reactjs render props向组件内部动态传入带内容的标签
  6. [python爬虫] 爬取图片无法打开或已损坏的简单探讨
  7. datagridview 绑定list 不能刷新界面_人人都可写代码-H5零基础编程-发布活动界面实操07...
  8. jquery添加事件
  9. [Android] [Java] Process 创建+控制+分析 经验浅谈
  10. java panel paint_java – 如何使用jpanel与paint(或重绘)
  11. 天锐绿盾加密软件支持什么操作系统?
  12. 神经网络算法开篇——逻辑回归
  13. 猜数字游戏程序,随机生成一个1~10之间的数,并让用户输入一个数字 猜测
  14. python的线程池_python线程池 ThreadPoolExecutor 的用法示例
  15. oracle数据的闪回——删库跑路?老铁别想了!
  16. c语言编程void什么意思,c语言中void啥意思?
  17. 灵活无成本的ITSM系统|ServiceHot ITSOM
  18. python写邮箱系统_Python django实现简单的邮件系统发送邮件功能
  19. LSK理论、系统及应用目标规划简介
  20. Rockland Immunochemicals丨GFP抗体-荧光素结合物

热门文章

  1. 虾皮店铺中后期如何经营-扬帆牧哲
  2. FFMPEG之RTSP获取H264/H265裸流保存文件
  3. 用单反相机拍摄VR全景时参数设置怎么调?
  4. 数据库备份的四种方法 软件功能需求分析
  5. 基于51单片机的直流电机调速测速正反转控制(仿真+源程序+原理图+PCB)
  6. Kurento nodejs 开发常用库
  7. 【转载】PC端微信设置操作快捷键方法
  8. 【工具使用篇】Sublime Text 3 全程详细图文使用教程
  9. Servlet文件上传
  10. 初级前端面试题最新汇总