• 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()

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

  • 相关阅读:
    从0开始学Java:Java基础语法
    按关键字搜索商品详情销量的步骤教学
    ubuntu20.04+vtd环境搭建
    HttpContext.TraceIdentifier那严谨的设计
    9、Docker 安装 Redis
    史上最全!Windows常见的几种权限维持
    zookeeper之leader选举源码分析
    如何有效进行回顾会议(上)?
    win11开机音效设置的方法
    【毕业设计】深度学习 YOLO 实现车牌识别算法
  • 原文地址:https://blog.csdn.net/weixin_43345535/article/details/132746713