2024Mathorcup(妈妈杯)数学建模C题python代码+数据教学

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)

预测结果:

其中更详细的思路,各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方群名片哦!

版权声明:本文为博主作者:DS数模原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_43345535/article/details/137676293

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2024年4月16日
下一篇 2024年4月16日

相关推荐