由于PeMS(PeMS)下载交通数据集一次只能下载一周数据,并且要一次一次的点击,比较麻烦。
故写出了一个小的爬虫程序,自动下载PeMS路网上VDS的数据集(前提需要FQ,需要挂全局代理)
下载为5分钟时间间隔的流量数据,为了防止IP被封,每下载一周 Sleep 15秒,也可自己更改
具体使用只需要更改:
文件保存地址:save_path
需要下载的VDS列表:vds_list
下载数据的开始与结束时间: start_time, end_time
以及down_load_data函数中data中登陆PeMS系统的账号与密码
PEMS官网自动下载数据集代码(需FQ)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/11/14 21:23
# @Author : Chenchen Wei
# @Description: 下载PeMS流量数据,一次下载一周数据,并将下载的周数据进行合并
import time
import os
import numpy as np
import pandas as pd
import requests
def time_2_timestamp(input, lags=True):
"""默认True: 时间转化为时间戳, 包含时差计算"""
if lags:
timeArray = time.strptime(input, "%Y-%m-%d %H:%M")
# 转换成时间戳
return int(time.mktime(timeArray) + 8 * 60 * 60) # 时差计算
else:
time_local = time.localtime(input - 8 * 60 * 60)
return time.strftime("%Y-%m-%d %H:%M", time_local)
def download(save_path, vds, start_time, end_time):
"""时间转化为时间戳"""
start_stamp, end_stamp = time_2_timestamp(start_time), time_2_timestamp(end_time)
i = 1
for begin in range(start_stamp, end_stamp, 60 * 60 * 24 * 7):
url = get_url(vds, begin)
down_load_data(save_path, url, i)
i += 1
print('Sleeping...')
time.sleep(15) # 下载完成休息五秒
def down_load_data(save_path, url, i):
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
data = {"redirect": "", "username": "账号",
"password": "密码", "login": "Login"}
session = requests.session()
response = session.post(url, headers=headers, data=data)
response = session.get(url)
with open(save_path + '\\' + str(i) + '.xlsx', 'wb') as f:
f.write(response.content)
print('下载成功')
def get_url(vds, begin):
str_begin = time_2_timestamp(begin, False)
s_begin = str_begin[5:7] + '%2F' + str_begin[8:10] + '%2F' + str_begin[:4] + '+00%3A00',
end = begin + 60 * 60 * 24 * 7 - 60
str_end = time_2_timestamp(end, False)
s_end = str_end[5:7] + '%2F' + str_end[8:10] + '%2F' + str_end[:4] + '+23%3A59',
url = 'http://pems.dot.ca.gov/?report_form=1&dnode=VDS&content=loops&export=xls&station_id=' \
+ str(vds) + '&s_time_id=' + str(begin) + '&s_time_id_f=' + str(s_begin) + '&e_time_id=' + str(
end) + '&e_time_id_f=' + str(s_end) + '&tod=all&tod_from=0&tod_to=0&dow_0=on&dow_1=on&dow_2=on&dow_3=on&dow_4=on&dow_5=on&dow_6' \
'=on&holidays=on&q=flow&q2=&gn=5min&agg=on&lane1=on&lane2=on&lane3=on&lane4=on'
# print(url)
print('获取url: vds[%s] %s --- %s' % (str(vds), str_begin, str_end))
return url
def combine_download_data(vds, path):
num = len(os.listdir(path))
dfs = pd.read_excel(path + '\\1.xlsx', index_col=None).values
for i in range(2, num + 1):
df = pd.read_excel(path + '\\' + str(i) + '.xlsx', index_col=None).values
dfs = np.row_stack((dfs, df))
pd.DataFrame(dfs).to_csv(path + '\\' + str(vds) + '_combine.csv', index=None, header=None)
print('合并文件保存成功')
if __name__ == '__main__':
save_path = r'G:\文档\交通数据集\加州数据集\自动下载数据' # 文件保存路径
vds_list = [602467, 602468] # 需要下载的VDS列表
start_time, end_time = '2019-01-01 00:00', '2019-01-14 23:59' # 数据下载开始于结束时间,每次下载一周,无数据则下载为空文件
for vds in vds_list:
name = start_time[2:10] + '_' + end_time[2:10]
save_paths = save_path + '\\' + name + '\\' + str(vds) # 创建文件保存路径
if not os.path.exists(save_paths):
os.makedirs(save_paths)
print('开始下载:%s %s---%s' % (str(vds), start_time, end_time))
download(save_paths, vds, start_time, end_time) # 下载文件
combine_download_data(vds, save_paths) # 将单个VDS下载文件进行合并
2020年6月16日 更新(部分路网数据集)
由于许多同学联系私信寻求数据集,因此在此将本人做研究下载的部分数据集分享出来,希望对大家有帮助:提取密码:lwil
另提供一个自己Fork的Github,里面有部分交通数据集,可自行下载。
由于Github中西雅图数据也存储在谷歌网盘里面,需要FQ,因此在百度网盘中有原始数据集以及按照工作日与休息日划分后的西雅图数据集。
此外,截止目前评论区留邮箱的同学,本人已将数据链接及数据作为附件发送至邮箱,注意查收。
2020年7月18日 更新(论文以及部分数据集)
由于之前百度云失效,抽空更新了下最新的百度云链接:提取码:g8ce,
另附上本人最新发表的一篇论文:GE-GAN: A novel deep learning framework for road traffic state estimation(TRC),希望对大家有帮助,欢迎引用。
还有本人了解的其他论文中公开的交通数据集及代码,此部分数据集均可直接下载:
Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting(DCRNN),
该数据集包含Los Angeles (METR-LA) :207个检测器2012年四个月的数据
the Bay Area (PEMS-BAY):325个检测器2017年6个月的数据
另一个公布数据集与代码的文章为:
Attention Based Spatial-Temporal Graph Convolutional Networks for Traffic Flow Forecasting (ASTGCN)
该数据集包含:
同样,已将数据集发送至所有留邮箱的同学。如未收到,可自行下载。
点波关注不迷路,后续如发现新的交通数据集,会不定期更新。。。
2020年11月02日 更新(data中22个检测器的数据补充说明)
很多同学私信询问pems 22条路段的空间关系,在此说明一下,22个检测器是一条道路上的检测器,检测器顺序为文件第一行的检测器编号,即1与2相连,2与1,3相连,3与2,4相连。。。。具体空间关系可以进PEMS官网,搜VDS,会显示具体的经纬度以及检测器之间的空间关系。
关于代码,写的太乱,就不好意思放出来了。。。后续有时间整理在更新吧。
另外,博客中提到的所有数据集都已经在上面的百度网盘还有github上面分享出来了,大家可以按照需要自行下载的哈。
2020年11月13日 更新(代码公开)
今天抽空重新整理了下代码,目前代码与数据集已公开,详见Github: GE-GAN: A novel deep learning framework for road traffic state estimation(TRC)
同样,已将代码发送至要代码并留邮箱的同学。如未收到,可自行下载。
2020年11月26日 更新(PEMS四部分数据集)
更新高速路网数据集:出处:Spatial-Temporal Synchronous Graph Convolutional Networks: A New Framework for Spatial-Temporal Network Data Forecasting(STSGCN)
百度网盘下载地址:提取码:p40o