长沙物流运行态势分析与降本增效策略研究:从模拟数据到交互式仪表盘的完整数据科学项目
作者:OVIANNN
关键词:Python、数据分析、DEA、时间序列预测、NetworkX、Streamlit、物流
项目地址:https://github.com/OVIANNN/changsha_logistics_project
📌 一、项目简介
本项目基于多源物流数据,对长沙物流运行态势进行系统分析,量化降本增效策略,是一套从数据生成、清洗、建模、可视化到报告产出的端到端数据科学项目。
项目覆盖六大核心分析模块,最终产出五大可视化组件 + 交互式仪表盘(Streamlit)+ 静态 HTML 报告 + 完整分析报告(Markdown/Word)。
核心结论速览:
- 长沙快递业务量 2020—2025 年由约 8.2 亿件增至 28.29 亿件,SARIMAX 预测 2026 年延续上升态势;
- 中欧班列开行量由 329 列增至约 1046 列,货值由 8.46 亿美元增至 26.62 亿美元;
- DEA 测算长沙物流效率值为 1.0(有效前沿面),Malmquist 全要素生产率指数 1.028;
- 回归显示"公路货运占比"弹性系数 +0.485,是降本第一杠杆;
- 铁水联运"每吨降 50 元"测算年节省超 3000 万元。
⚠️数据说明:项目数据为基于公开真实统计特征(2025 年快递 28.29 亿件、班列 1037 列、成本/GDP≈12.8% 等)生成的模拟数据,仅用于方法演示。
🛠 二、技术栈
| 类别 | 技术 |
|---|---|
| 语言 | Python 3.14 |
| 数据处理 | pandas、numpy |
| 可视化 | matplotlib、seaborn、plotly |
| 统计建模 | statsmodels(STL / SARIMAX / OLS) |
| 优化 | scipy(DEA-CCR 线性规划) |
| 网络分析 | networkx |
| 机器学习 | scikit-learn(备用) |
| 交互式仪表盘 | streamlit |
📁 三、项目结构
changsha_logistics_project/ ├── data/ # 原始数据 + 数据字典 + 清洗后数据 │ ├── *.csv # 8 张模拟数据表 │ ├── data_dictionary.md # 数据字典 │ └── cleaned/ # 清洗后数据 ├── src/ # 源代码 │ ├── data_generator.py # 模拟数据生成 │ ├── 01_data_cleaning.py # 数据清洗 │ ├── 02_eda.py # 探索性分析 │ ├── 03_dea_malmquist.py # DEA-Malmquist 效率测算 │ ├── 04_express_forecast.py # 快递业务量预测 │ ├── 05_multimodal_efficiency.py # 多式联运效能 │ ├── 06_spatial_network.py # 空间网络分析 │ ├── 07_cost_regression.py # 成本回归 │ ├── dashboard_components.py# 五大可视化组件 │ ├── dashboard.py # Streamlit 仪表盘 │ └── generate_static_dashboard.py # 静态 HTML ├── outputs/ # 图表与中间结果 │ ├── figures/ # 14 张 PNG 图表 │ └── dashboard.html # 静态仪表盘 ├── reports/ # 最终报告(Markdown / Word) └── requirements.txt📊 四、数据说明
由于公开接口不可直接访问,项目通过data_generator.py生成符合真实统计特征的模拟数据(固定随机种子保证可复现),共 8 张表:
- 月度快递业务量(2020-2025)
- 中欧班列月度开行数据
- 公路货运量月度数据
- 多式联运节点数据
- 多式联运线路数据(12 班列 + 26 航线)
- 区域(区县)物流数据
- 物流效率投入产出面板(6 城市 × 5 年)
- 风险预警记录
每张表字段说明详见data/data_dictionary.md。
🔬 五、核心分析模块详解
5.1 数据生成与清洗
data_generator.py基于真实锚点生成模拟数据,01_data_cleaning.py完成缺失值填充、IQR 异常值截尾、时间格式统一。
# 缺失值填充(数值列用中位数,分类列用众数)defhandle_missing(df):num_cols=df.select_dtypes(include=[np.number]).columnsforcinnum_cols:ifdf[c].isna().any():df[c]=df[c].fillna(df[c].median())...5.2 探索性数据分析(EDA)
生成描述性统计、月度趋势、STL 时序分解、快递结构堆叠面积图、班列柱状图等。
fromstatsmodels.tsa.seasonalimportSTL stl=STL(series,period=12,robust=True).fit()# 得到 trend / seasonal / resid 三项分解STL 分解结果:趋势项几乎直线上升(增长动能稳定),季节项呈规律的 12 个月周期("双十一—春节"节律),残差平稳无异常。
5.3 DEA-Malmquist 物流效率测算
核心:不依赖 pyDEA,自行实现投入导向 CCR 模型,用scipy.optimize.linprog求解线性规划:
fromscipy.optimizeimportlinprogdefdea_ccr(X_ref,Y_ref,x0,y0):"""投入导向 CCR:返回决策单元 (x0,y0) 的效率值 theta"""n,m=X_ref.shape s=Y_ref.shape[1]c=np.zeros(n+1);c[0]=1.0# 目标:min thetaA_ub=np.zeros((m+s,n+1));b_ub=np.zeros(m+s)foriinrange(m):# 投入约束A_ub[i,0]=-x0[i];A_ub[i,1:]=X_ref[:,i]forrinrange(s):# 产出约束A_ub[m+r,1:]=-Y_ref[:,r];b_ub[m+r]=-y0[r]bounds=[(0,None)]*(n+1)returnlinprog(c,A_ub=A_ub,b_ub=b_ub,bounds=bounds,method="highs").x[0]再基于四个距离函数计算Malmquist 指数并分解:
TEC = D^{t+1}(x^{t+1},y^{t+1}) / D^t(x^t,y^t) # 技术效率变化 TC = sqrt[ (D^t(x^{t+1})/D^{t+1}(x^{t+1})) * (D^t(x^t)/D^{t+1}(x^t)) ] # 技术变化 Malmquist TFP = TEC * TC结果:长沙 2024 年效率值 1.0(前沿面第 1),Malmquist TFP = 1.028,效率进步主要由技术变化(前沿外移)驱动。
5.4 快递业务量预测(SARIMAX)
由于 TensorFlow/Torch 环境不可用,改用 statsmodels 的SARIMAX 季节模型预测未来 12 个月:
fromstatsmodels.tsa.statespace.sarimaximportSARIMAX model=SARIMAX(series,order=(1,1,1),seasonal_order=(1,1,1,12),trend="c",enforce_stationarity=False,enforce_invertibility=False)fit=model.fit(disp=False,maxiter=200)fc=fit.get_forecast(12)# 未来 12 个月pred,ci=fc.predicted_mean,fc.conf_int(alpha=0.05)# 预测值 + 95% 置信区间预测 2026 年各月业务量介于 1.98—3.95 亿件之间,延续上升趋势与季节性高峰。
5.5 多式联运效能分析
分析中欧班列量价变化、铁水联运降本效益、航空货运航线与本地货量占比关系。
- 班列 2025 年货值 26.62 亿美元,货值增速高于开行量增速(向高附加值优化);
- 铁水联运"每吨降 50 元"测算,2025 年节省 3092 万元,突破 3000 万目标线;
- 航线由 8 条增至 26 条,本地货量占比由 0.32 升至 0.56(正相关)。
5.6 区域物流空间网络(引力模型 + NetworkX)
使用修正引力模型计算长沙各区县与周边城市的物流联系强度,再用 NetworkX 构建网络、计算中心性与凝聚子群:
importnetworkxasnx# 修正引力模型defhaversine(lon1,lat1,lon2,lat2):"""球面距离(公里)"""...F_ij=G_i*G_j/d_ij**gamma# gamma 为距离衰减系数(=1.5)# 构建网络 + 中心性G=nx.Graph()G.add_edge(i,j,weight=F_ij)degree_c=nx.degree_centrality(G)between_c=nx.betweenness_centrality(G,weight="weight")communities=nx.algorithms.community.greedy_modularity_communities(G,weight="weight")结果:核心枢纽为株洲、长沙县、湘潭、武汉、岳麓区,识别到 3 个凝聚子群,呈"主城枢纽 + 组团辐射"格局。
5.7 物流成本影响因素回归
用 OLS + 双对数模型分析运输结构、枢纽能级、信息化、政策支持对"社会物流总费用与 GDP 比率"的影响:
importstatsmodels.apiassm X=sm.add_constant(panel[FEATURES])linear=sm.OLS(y,X).fit()# 线性回归loglog=sm.OLS(np.log(y),np.log(X)).fit()# 双对数(弹性)关键结论:公路货运占比弹性系数+0.485(p=0.0019,显著),是解释力最强的降本变量;枢纽能级(-0.077)、信息化(-0.047)、政策支持(-0.075)均为负向作用。
🎨 六、五大可视化组件 + 交互式仪表盘
所有组件实现于dashboard_components.py,同时被 Streamlit 仪表盘与静态 HTML 复用:
- 物流运行态势仪表盘—— 核心指标卡(同比)+ 多子图折线,支持时间范围筛选;
- 多式联运网络地图—— Plotly Scattergeo 展示 12 条班列线路、26 条航线、联运节点;
- 快递业务结构堆叠面积图—— 同城/异地/国际港澳台结构变迁;
- 区域物流效率热力图—— 区县 × 年份效率矩阵;
- 风险预警看板—— 阈值线 + 红色超阈值标记 + 预警等级饼图。
Streamlit 仪表盘代码骨架:
importstreamlitasstfromdashboard_componentsimportcomponent1_operation_dashboard,...st.set_page_config(page_title="长沙物流运行态势分析",layout="wide")kpi,trend_fig=component1_operation_dashboard()st.plotly_chart(component2_multimodal_map(),width="stretch")...💡 静态 HTML 版通过
plotly.io.to_html()生成outputs/dashboard.html,无需 Python 环境即可双击打开分享。
🚀 七、运行指南
# 1. 安装依赖pipinstall-rrequirements.txt# 2. 依次运行分析脚本python src/data_generator.py# 生成模拟数据python src/01_data_cleaning.py# 清洗python src/02_eda.py# EDApython src/03_dea_malmquist.py# DEA 效率python src/04_express_forecast.py# 业务量预测python src/05_multimodal_efficiency.py# 多式联运python src/06_spatial_network.py# 空间网络python src/07_cost_regression.py# 成本回归# 3. 启动交互式仪表盘streamlit run src/dashboard.py# 或双击 run_dashboard.bat;静态版打开 outputs/dashboard.html依赖降级说明:TensorFlow/Torch → SARIMAX;geopandas/folium → Plotly Scattergeo;pyDEA → scipy 自行实现;dash → Streamlit。
📝 八、总结与展望
本项目完整走通了数据生成 → 清洗 → 建模 → 可视化 → 报告的数据科学闭环,几个值得复用的技术点:
- 手写 DEA-CCR:用线性规划实现数据包络分析,理解"投入导向"效率测算原理;
- SARIMAX 季节建模:处理强季节性时间序列的预测,含置信区间;
- 修正引力模型 + NetworkX:把"经济地理"抽象成网络,做中心性与凝聚子群分析;
- Plotly 组件化:一套组件同时支撑交互式仪表盘与静态 HTML,最大化复用。
展望:后续可接入真实数据源、增加 LSTM/Prophet 对比预测、引入 GIS 真实地理边界做 choropleth 地图、将风险预警升级为实时流式看板。