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

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

  • 相关阅读:
    【宝塔】python项目管理器虚拟环境bin没有activate导致计划任务运行不了python项目管理器找不到activate解决办法
    【前端笔记】HBuilderX通过微信开发者工具预览打开不了探索过程
    maven简单总结
    ubuntu 怎样查看隐藏文件
    照片人像模糊怎么调?两分钟教会你
    2023年总结以及对2024年的展望
    Camera-MTK OpenCamera时序以及耗时
    JavaScript 常用符号
    string的简单介绍和模拟实现
    「运维有小邓」网络设备监控
  • 原文地址:https://blog.csdn.net/weixin_43345535/article/details/132746713