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


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

    首先导入需要的包:

    1. import pandas as pd
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. import seaborn as sns
    5. import os
    6. import warnings
    7. warnings.filterwarnings('ignore')
    8. from sklearn.preprocessing import LabelEncoder
    9. from sklearn.model_selection import train_test_split
    10. from sklearn.metrics import accuracy_score,confusion_matrix,classification_report
    11. from sklearn.linear_model import LogisticRegression
    12. from sklearn.tree import DecisionTreeClassifier
    13. import matplotlib.font_manager as fm

    读取数据

    1. Read the data
    2. '''
    3. # data_1: 6 个蔬菜品类的商品信息
    4. # data_2: 销售流水明细数据
    5. # data_3: 蔬菜类商品的批发价格
    6. # data_4: 蔬菜类商品的近期损耗率
    7. 附件 1 中,部分单品名称包含的数字编号表示不同的供应来源。
    8. 附件 4 中的损耗率反映了近期商品的损耗情况,通过近期盘点周期的数据计算得到。
    9. '''
    10. data_1 = pd.read_excel('../data/附件1.xlsx')
    11. data_2 = pd.read_excel('../data/附件2.xlsx')
    12. data_3 = pd.read_excel('../data/附件3.xlsx')
    13. data_4 = pd.read_excel('../data/附件4.xlsx')

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

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

    热力图的部分代码:

    1. # 计算各品类销售量之间的相关系数
    2. corr_matrix = sales_by_quarter.corr()
    3. # 可视化相关系数矩阵
    4. sns.set(style='white')
    5. fig, ax = plt.subplots(figsize=(10, 8))
    6. sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', ax=ax)
    7. ax.set_title('蔬菜各品类销售量相关系数矩阵', fontproperties=font)
    8. for tick in ax.get_xticklabels():
    9. tick.set_rotation(45)
    10. tick.set_fontproperties(font)
    11. for tick in ax.get_yticklabels():
    12. tick.set_rotation(0)
    13. tick.set_fontproperties(font)
    14. plt.xlabel('分类名称', fontproperties=font)
    15. plt.ylabel('分类名称', fontproperties=font)
    16. plt.savefig('../results/corr_matrix.png', dpi=300, bbox_inches='tight')
    17. plt.show()

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

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

  • 相关阅读:
    【C++笔试强训】第二十四天
    chapter 01 字符串的那些事
    [GWCTF 2019]我有一个数据库
    ywtool network命令
    【从头构筑C#知识体系】0.3 值类型和引用类型
    锐捷端口安全实验配置
    Leetcode 易错题整理(三)73. 77. 78. 81. 90. 95.105. 130.
    【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库
    Eclipse 教程Ⅳ
    计算机毕业设计ssm+vue基本微信小程序的拼车自助服务小程序
  • 原文地址:https://blog.csdn.net/weixin_43345535/article/details/132746713