Python使用PEMS04数据集绘制交通流量折线图
本文介绍如何使用Python读取加州高速公路PEMS04数据集,提取交通流量特征,并利用matplotlib绘制旧金山2018年1月至2月的交通流量折线图。教程涵盖数据解压、维度解析及按周分布的可视化实现,帮助开发者掌握基础交通数据分析方法。
一、数据集下载
加州高速公路PEMS数据集
本例使用PEMS04数据集中的交通流量信息。该数据集记录了旧金山在2018年1月1日至2月28日期间,29条道路上307个探测器每五分钟采集一次的数据。
二、折线图绘制
1、解压npz文件
npz是NumPy库使用的压缩文件格式,需借助NumPy进行读取。
参数allow_pickle=True用于避免高版本NumPy加载时可能出现的错误。
通过data.files可查看压缩文件内包含的所有文件列表。
import numpy as np
data = np.load(数据集存放地址, allow_pickle=True)
print(data.files)查看结果显示,压缩文件内仅包含data一个文件:

使用data['data']即可读取该数据集内容,同时可以检查数据的维度结构。
print(data['data'].shape)数据维度如下:
总数据量为16992,计算方式为59天×24小时×12(每五分钟统计一次),307代表探测器数量,3为特征维度。

2、折线图绘制
数据包含三个特征:交通流量、平均速度和平均占用率。此处仅提取第一个特征(交通流量)进行绘图,且只展示单个探测器的数据。
flow = data['data'][:, 0, 0]
导入matplotlib库,通过pyplot模块绘制基础折线图。
import matplotlib.pyplot as plt为了观察工作日流量变化,将横坐标替换为周一至周日。已知旧金山2018年1月1日为周一。
完整的绘图代码如下:
import numpy as np
import matplotlib.pyplot as plt
data = np.load(文件路径, allow_pickle=True)
flow = data['data'][:, 0, 0]
print(len(flow))
week = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
x = []
for i in range(59):
x.append(week[(i + 1) % 7])
y = []
sum = 0
for i in range(len(flow)):
if i == 0 or (i + 1) % 288 != 0:
sum += flow[i]
else:
y.append(sum)
sum = 0
fig = plt.figure(figsize=(15, 5)) # 图片宽度设置的大一些
plt.title('traffic flow in San Francisco')
plt.xlabel('day')
plt.ylabel('flow')
plt.xticks(np.arange(59), x)
plt.plot(np.arange(59), y, linestyle='-')
fig.autofmt_xdate(rotation=45) # x轴的刻度标签逆时针旋转45度
plt.show()最终绘制结果如下:

文章大部分KPI遵循“Mary's Peak”模式,例如公共交通出行和外卖点餐情况。从上图可见,交通流量也符合这一模式。
至此,关于Python绘制交通流折线图的详细介绍结束。如需了解更多Python绘制折线图相关内容,可搜索本站往期文章或继续浏览后续文章,感谢支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









