当前位置: 首页 > news >正文

用Python+Matplotlib搞定地铁客流分析:从Excel数据到散点图、柱状图实战

Python+Matplotlib地铁客流分析实战:从数据清洗到可视化洞察

地铁作为城市交通的动脉,每天承载着数百万人的出行需求。对于运营管理者来说,理解客流规律是优化调度、提升服务的关键;对于商业开发者而言,掌握客流趋势意味着精准选址的可能。本文将带你用Python和Matplotlib,从一份真实的Excel客流数据出发,完成从基础图表到多维分析的全流程实战。

1. 数据准备与环境搭建

在开始分析前,我们需要确保工具链的完整性。推荐使用Anaconda发行版,它预装了数据分析三件套:Python、Jupyter Notebook和主要科学计算库。

conda create -n subway_analysis python=3.9 conda activate subway_analysis conda install pandas matplotlib openpyxl

假设我们获得的原始数据是"metro_flow_2023.xlsx",包含以下字段:

字段名类型说明
station_idint站点唯一标识
time_slotstr时段(如"07:00-08:00")
entry_flowint进站客流人次
exit_flowint出站客流人次
datestr观测日期(YYYY-MM-DD)

提示:实际数据中可能包含异常值或缺失值,建议先用pandas的describe()方法快速了解数据分布

import pandas as pd df = pd.read_excel('metro_flow_2023.xlsx') print(df.describe())

2. 单站点时序分析:散点图与折线图对比

选择人流量中等的155号站作为分析样本,先观察其24小时进站客流分布。散点图适合展示原始数据点分布,而折线图能更清晰呈现趋势变化。

import matplotlib.pyplot as plt station_155 = df[df['station_id'] == 155].sort_values('time_slot') plt.figure(figsize=(12, 6)) plt.scatter(station_155['time_slot'], station_155['entry_flow'], alpha=0.6, label='原始数据点') plt.plot(station_155['time_slot'], station_155['entry_flow'], 'r-', linewidth=2, label='趋势线') plt.xticks(rotation=45) plt.xlabel('时段') plt.ylabel('进站人次') plt.title('155号站24小时进站客流分布') plt.legend() plt.tight_layout() plt.show()

关键观察点:

  • 早高峰(07:00-09:00)呈现典型的脉冲式增长
  • 午间(11:00-13:00)出现小高峰
  • 晚高峰(17:00-19:00)持续时间比早高峰更长

3. 多站点对比分析:柱状图与箱线图应用

比较相邻站点(155、157、151、123)的日均客流,柱状图能直观展示总量差异,而箱线图则揭示数据分布特征。

# 计算各站日均客流 daily_avg = df.groupby('station_id')['entry_flow'].mean().loc[[155, 157, 151, 123]] plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) daily_avg.plot(kind='bar', color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']) plt.ylabel('日均进站人次') plt.title('四站点日均客流对比') plt.subplot(1, 2, 2) station_data = [df[df['station_id']==sid]['entry_flow'] for sid in [155,157,151,123]] plt.boxplot(station_data, labels=['155','157','151','123']) plt.ylabel('进站人次分布') plt.title('客流分布箱线图') plt.tight_layout()

分析发现:

  • 155站虽然日均客流不是最高,但存在更多极端高峰值
  • 123站客流稳定,适合设置常规商业设施
  • 157站早晚高峰差异最大,可能需要弹性调度

4. 客流时空矩阵:热力图与子图组合

要同时分析时间和空间维度,可以创建热力图展示各时段各站点的客流强度,并用子图组合多个视角。

from matplotlib.colors import LinearSegmentedColormap # 创建时段-站点客流矩阵 time_station = df.pivot_table(index='time_slot', columns='station_id', values='entry_flow', aggfunc='mean') plt.figure(figsize=(15, 8)) plt.subplot(2, 1, 1) custom_cmap = LinearSegmentedColormap.from_list('custom', ['#f7fbff','#4292c6','#08306b']) plt.imshow(time_station.T, aspect='auto', cmap=custom_cmap) plt.colorbar(label='客流强度') plt.yticks(range(len(time_station.columns)), time_station.columns) plt.title('各站点分时段客流热力图') plt.subplot(2, 2, 3) df['hour'] = pd.to_datetime(df['time_slot'].str[:5]).dt.hour hourly_avg = df.groupby('hour')['entry_flow'].mean() hourly_avg.plot(kind='area', alpha=0.5) plt.title('全路网小时级客流趋势') plt.subplot(2, 2, 4) top_stations = df.groupby('station_id')['entry_flow'].sum().nlargest(5) top_stations.plot(kind='pie', autopct='%1.1f%%') plt.ylabel('') plt.title('客流总量TOP5站点') plt.tight_layout()

5. 高级分析技巧:客流预测与异常检测

在基础可视化之上,我们可以结合统计学方法进行深度分析。例如使用移动平均平滑数据,或通过Z-score识别异常客流日。

from scipy import stats import numpy as np # 计算7天移动平均 station_155['7d_avg'] = station_155['entry_flow'].rolling(window=7).mean() # 异常值检测 z_scores = np.abs(stats.zscore(station_155['entry_flow'])) anomalies = station_155[z_scores > 3] plt.figure(figsize=(12, 6)) plt.plot(station_155['date'], station_155['entry_flow'], label='实际客流', alpha=0.5) plt.plot(station_155['date'], station_155['7d_avg'], 'r-', label='7日移动平均') plt.scatter(anomalies['date'], anomalies['entry_flow'], color='black', marker='x', s=100, label='异常值') plt.xticks(rotation=45) plt.legend() plt.title('155号站客流趋势与异常检测')

实际项目中,这种分析能帮助运营方快速发现设备故障、大型活动等特殊情况导致的客流异常,及时调整应急预案。

http://www.jsqmd.com/news/586406/

相关文章:

  • 深入解析STM32F103 Flash扇区重复擦除失败及FLASH_ERROR_PG错误的解决方案
  • 从单周期到多周期:深入对比MIPS CPU设计,看微程序控制器如何成为‘大脑’
  • tao-8k Embedding模型惊艳案例:工业设备维修手册语义检索实战
  • 免费音频转换器fre:ac:3步掌握跨平台音频格式转换完整指南
  • 多边形等距缩放算法:从原理到OpenCV实现
  • 系统优化与性能提升指南:RyTuneX全方位优化方案
  • 抢答器这玩意儿在各种竞赛里简直就是气氛组担当。今天咱们来扒拉一个用单片机搞的智能抢答系统,既有硬件电路又有软件代码,还能自己动手焊板子玩
  • GLM-4.1V-9B-Base模型轻量化探索:适用于移动端的部署策略
  • AgentCPM-Report参数详解:Pixel Epic中‘智力同步率’实时监控原理
  • 告别重复劳动:用Altium Designer脚本一键导入并关联立创EDA的封装与3D库
  • C++条件判断入门:if/else详解
  • 智能高效的定制化风扇控制方案:开源工具Fan Control全解析
  • 保姆级教程:用交大镜像源5分钟安装PyTorch 2.3.0(支持CUDA 12.6)
  • 告别重复劳动:用快马智能生成trea国际版多语言开发提效套件
  • 16. 比热容实验模拟
  • 如何在Linux桌面高效管理笔记:Sticky便签工具的完整指南
  • 亿点意外!龙虾 ClawHub 中国镜像上线,合作方竟然是字节。网友:我腾讯不要面子的吗
  • 实战应用:利用快马平台模拟鸿蒙pc版与手机的笔记跨设备同步功能
  • 结合知识图谱:StructBERT用于实体对齐与关系匹配
  • ControlNet-v1-1 FP16模型深度解析:SD1.5兼容性与性能优化实战指南
  • 如何解决游戏字体兼容性问题:魔兽世界字体合并工具完整指南
  • 告别黑苹果配置难题:OpCore-Simplify智能工具如何让复杂EFI制作变得零门槛
  • 告别Transformer和CNN?手把手教你用ChangeMamba搞定遥感图像变化检测
  • 告别网络依赖:实战指南——将Hugging Face Transformers模型预下载并本地化加载
  • AI辅助开发:借助快马智能模型为华网三百每年cn官网打造咨询聊天机器人
  • 2026年4月市面上钢结构直销厂家,高强度低自重的钢结构优势 - 品牌推荐师
  • AI地质绘图实战:从ChatGPT到Midjourney的流程优化与科学准确性提升
  • WPS-Zotero:跨平台科研写作的终极解决方案
  • 3个实用技巧快速实现Sketch设计稿到HTML代码的智能转换
  • RTX 4090D 24G显存适配方案:PyTorch 2.8镜像GPU利用率提升实测分析