赞
踩
2024Mathorcup数学建模挑战赛(妈妈杯)C题保姆级分析完整思路+代码+数据教学
C题题目:物流网络分拣中心货量预测及人员排班
因为一些不可抗力,下面仅展示部分代码(很少部分部分)和部分分析过程,其余代码看文末
数据处理:
- import pandas as pd
- import matplotlib.pyplot as plt
- from matplotlib.font_manager import FontProperties
- from statsmodels.tsa.arima.model import ARIMA
- from statsmodels.tsa.stattools import adfuller
- from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
- import pmdarima as pm
- from itertools import product
- from sklearn.preprocessing import MinMaxScaler
- import torch
- import torch.nn as nn
- import torch.optim as optim
- import numpy as np
-
- try:
- # 尝试使用UTF-8编码读取文件
- day_df = pd.read_csv('./附件/附件1.csv', encoding='utf-8')
- except UnicodeDecodeError:
- # 如果出现编码错误,则尝试使用GBK编码读取
- day_df = pd.read_csv('./附件/附件1.csv', encoding='gbk')
- day_df
-
- # 将'日期'转换为datetime类型以便正确排序
- day_df['日期'] = pd.to_datetime(day_df['日期'])
-
- # 按'日期'升序排列DataFrame
- sorted_day_df = day_df.sort_values(by=['分拣中心', '日期'])
-
- sorted_day_df
可视化:
- # Set the font to support Chinese characters
- plt.rcParams['font.sans-serif'] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
-
- plt.figure(figsize=(10, 6))
- for center in sorted_day_df['分拣中心'].unique():
- center_df = sorted_day_df[sorted_day_df['分拣中心'] == center]
- plt.plot(center_df['日期'], center_df['货量'], marker='o', label=center)
-
- plt.title('日期随货量变化的折线图')
- plt.xlabel('日期')
- plt.ylabel('货量')
- # plt.legend()
- plt.grid(True)
- plt.tight_layout()
- plt.show()
- # 绘制ACF和PACF图
- fig, ax = plt.subplots(1, 2, figsize=(12, 4))
- plot_acf(center_df['货量'], ax=ax[0])
- plot_pacf(center_df['货量'], ax=ax[1])
- plt.tight_layout()
- plt.show()
- for center in centers:
- center_df = sorted_day_df[sorted_day_df['分拣中心'] == center]
- center_df.set_index('日期', inplace=True)
-
- # 使用SARIMAX而不是ARIMA来考虑外生变量
- model = SARIMAX(center_df['货量'], exog=center_df['活动'], order=(1, 1, 1))
- model_fit = model.fit()
-
- # 预测时也需要包括外生变量
- # 假设我们已经有了未来时间段的活动标记数据
- future_dates = pd.date_range(center_df.index[-1] + pd.Timedelta(days=1), periods=30, freq='D')
- future_exog = pd.DataFrame(0, index=future_dates, columns=['活动']) # 假设未来5天内没有活动
- forecast = model_fit.forecast(steps=30, exog=future_exog)
-
- print(f"{center} 的未来 30 天预测货量为:")
- print(forecast)
-
- # 将预测结果转换为DataFrame
- forecast_df = pd.DataFrame({
- '分拣中心': center,
- '日期': future_dates,
- '货量': forecast.values
- })
- all_forecasts.append(forecast_df)
-
- # 合并所有分拣中心的预测结果
- final_forecast_df = pd.concat(all_forecasts)
预测结果:
其中更详细的思路,各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方群名片哦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。