当前位置:   article > 正文

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/165355?site
推荐阅读
相关标签
  

闽ICP备14008679号