2023高教社杯全国大学生数学建模竞赛C题代码解析

因为一些不可抗力,下面仅展示部分代码(第一问的部分),其余代码看文末

首先导入需要的包:

复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import warnings
warnings.filterwarnings('ignore')
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
import matplotlib.font_manager as fm

读取数据:

复制代码
 Read the data
'''
# data_1: 6 个蔬菜品类的商品信息
# data_2: 销售流水明细数据
# data_3: 蔬菜类商品的批发价格
# data_4: 蔬菜类商品的近期损耗率
附件 1 中,部分单品名称包含的数字编号表示不同的供应来源。
附件 4 中的损耗率反映了近期商品的损耗情况,通过近期盘点周期的数据计算得到。

'''
data_1 = pd.read_excel('../data/附件1.xlsx')
data_2 = pd.read_excel('../data/附件2.xlsx')
data_3 = pd.read_excel('../data/附件3.xlsx')
data_4 = pd.read_excel('../data/附件4.xlsx')

中间我跳过一些数据处理的部分,来看看可视化结果:

复制代码
# 以季度为周期,可视化不同蔬菜品类销售量的变化趋势
# 将销售数据按照季度进行重采样
quarterly_sales = merged_data.resample('Q', on='销售日期')['销量(千克)'].sum()
# 将销售数据按照分类名称和季度进行分组,计算每个品类在每个季度的销售量
# sales_by_category = merged_data[merged_data['销售类型'] == '销售'].groupby(['分类名称', pd.Grouper(key='销售日期', freq='Q')])['销量(千克)'].sum() - merged_data[merged_data['销售类型'] == '退货'].groupby(['分类名称', pd.Grouper(key='销售日期', freq='Q')])['销量(千克)'].sum()
sales_by_category = merged_data[merged_data['销售类型'] == '销售'].groupby(['分类名称', pd.Grouper(key='销售日期', freq='Q')])['销量(千克)'].sum()
# 可视化销售量变化趋势
fig, ax = plt.subplots(figsize=(10, 6))
for category in sales_by_category.index.levels[0]:
    ax.plot(sales_by_category.loc[category].index, sales_by_category.loc[category].values, label=category)
ax.legend()
ax.set_xlabel('季度')
ax.set_ylabel('销售量(千克)')
ax.set_title('蔬菜各品类销售量变化趋势')
plt.savefig('../results/sales_num_trend.png', dpi=300, bbox_inches='tight')

热力图的部分代码:

复制代码
# 计算各品类销售量之间的相关系数
corr_matrix = sales_by_quarter.corr()

# 可视化相关系数矩阵
sns.set(style='white')
fig, ax = plt.subplots(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', ax=ax)
ax.set_title('蔬菜各品类销售量相关系数矩阵', fontproperties=font)
for tick in ax.get_xticklabels():
    tick.set_rotation(45)
    tick.set_fontproperties(font)
for tick in ax.get_yticklabels():
    tick.set_rotation(0)
    tick.set_fontproperties(font)
plt.xlabel('分类名称', fontproperties=font)
plt.ylabel('分类名称', fontproperties=font)
plt.savefig('../results/corr_matrix.png', dpi=300, bbox_inches='tight')
plt.show()
复制代码
# 可视化相关系数矩阵
sns.set(style='white')
fig, ax = plt.subplots(figsize=(16, 16))
sns.heatmap(corr_matrix_top_veggies, annot=True, cmap='coolwarm', ax=ax)
ax.set_title('销量前15的蔬菜单品销售量相关系数矩阵', fontproperties=font)
for tick in ax.get_xticklabels():
    tick.set_rotation(45)
    tick.set_fontproperties(font)
for tick in ax.get_yticklabels():
    tick.set_rotation(0)
    tick.set_fontproperties(font)
plt.xlabel('分类名称', fontproperties=font)
plt.ylabel('分类名称', fontproperties=font)
plt.savefig('../results/corr_matrix_top_veggies.png', dpi=300, bbox_inches='tight')
plt.show()

有关思路、相关代码、讲解视频、参考文献等相关内容可以点击下方群名片哦!

相关推荐
AI科技星9 分钟前
科幻艺术书本封面:《全域数学》第一部·数术本源 第三卷 代数原本(P95-141)完整五级目录【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
热心网友俣先生1 小时前
2026年第二十三届五一数学建模竞赛C题各问题参考答案
数学建模
AI科技星2 小时前
全域数学本源公理:0、1、∞ 三者核心关系 (典籍定稿版)
人工智能·算法·数学建模·数据挖掘·量子计算
AI科技星3 小时前
全域数学·第卷:场计算机卷(场空间计算机)【乖乖数学】
java·开发语言·人工智能·算法·机器学习·数学建模·数据挖掘
AI科技星3 小时前
《全域数学》第三卷:代数原本 · 全书详述【乖乖数学】
开发语言·人工智能·机器学习·数学建模
AI科技星3 小时前
《全域数学》第一部 数术本源 第三卷 代数原本第14篇 附录二 猜想证明【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
smppbzyc3 小时前
2026五一数学建模A题【煤矿巷道支护问题】原创论文分享
数学建模·数学建模竞赛·五一数学建模·2026五一数学建模·2026五一数学建模竞赛·2026五一数学建模a题
做cv的小昊4 小时前
【TJU】研究生应用统计学课程笔记(6)——第二章 参数估计(2.4 区间估计)
人工智能·笔记·线性代数·算法·机器学习·数学建模·概率论
热心网友俣先生5 小时前
2026年第二十三届五一数学建模竞赛B题四问参考答案+多算法对比
算法·数学建模
码农的神经元6 小时前
2026年五一杯数学建模B题:多工序协同作业问题
数学建模·五一杯