我的编程空间,编程开发者的网络收藏夹
学习永远不晚

2022高教社杯数学建模国赛C题思路代码实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

2022高教社杯数学建模国赛C题思路代码实现

1.比赛报名与思路解析(持续更新750967193)

2.比赛时间:2022年9月15日18点到2022年9月18日20点

如下为C题思路的配套代码:

首先导入表单:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsplt.rcParams['font.sans-serif']='SimHei'plt.rcParams['axes.unicode_minus']=Falsedf_表单1 = pd.read_excel('附件.xlsx', sheet_name='表单1')df_表单2 = pd.read_excel('附件.xlsx', sheet_name='表单2')df_表单3 = pd.read_excel('附件.xlsx', sheet_name='表单3')

画出各个属性占比图

fig=plt.figure(figsize=(10,10))i=1for column in df_表单1.columns[1:]:    data ={elem:np.sum(df_表单1[column]==elem) for elem in df_表单1[column].unique()}    ax=fig.add_subplot(2,2,i)    i+=1    ax.pie(data.values(), labels=data.keys(), autopct='%1.2lf%%', pctdistance=0.5)    ax.set_title(column+'占比图')plt.savefig('各属性数量占比图.png')plt.show()

可以对数据采用如下方式处理:

  1. 空白处表示未检测到该成分,即该成分的含量为0,所以对于表单2中所用的控制用0进行填充;
  2. 对于‘文物采样点’进行分开处理,分开为‘文物编号’,采样点;
  3. 将成分之和不在区间[85,105]范围内的删除;
  4. 各成分含量之和应为100%,但因检测手段等原因加和并非100%,所以对各成分进行归一化处理,使其成分含量和为100%
df_表单2 = pd.read_excel('附件.xlsx', sheet_name='表单2')df_表单2['采样点']=df_表单2['文物采样点'].apply(lambda x:x[2:])df_表单2['文物编号']=df_表单2['文物采样点'].apply(lambda x:x[:2])df_表单2=df_表单2.fillna(0)print(df_表单2.shape)df_表单2['总含量']=df_表单2[df_表单2.columns[1:15]].sum(axis=1)index = df_表单2[df_表单2['总含量']<85].indexdf_表单2=df_表单2.drop(index=index)print(df_表单2.shape)index = df_表单2[df_表单2['总含量']>105].indexdf_表单2=df_表单2.drop(index=index)print(df_表单2.shape)for column in df_表单2.columns[1:15]:    df_表单2[column]=df_表单2[column]/df_表单2['总含量']*100df_表单2.head()

然后合并1、2表单:

df_表单1['文物编号']=df_表单1['文物编号'].astype('str')df_表单1['文物编号']=df_表单1['文物编号'].apply(lambda x:'0'*(2-len(x))+x)df_表单1.index=df_表单1['文物编号']columns = ['纹饰', '类型', '颜色', '表面风化']df_表单2[columns]=''for i in df_表单2.index:    index = df_表单2['文物编号'][i]    for column in columns:        df_表单2.loc[i,column]=df_表单1[column][index]df_表单2['颜色'].unique()dic = {'风化':1,'无风化':0,       'A':1,'C':0,  # 这里未对B进行转换,不过在apriori的地方使用的是汉字不影响,后续也没有使用       '高钾':1,'铅钡':0,        '蓝绿':0, '浅蓝':1, '紫':2, '深绿':3, '深蓝':4, '浅绿':5, '黑':6, '绿':7}df_表单2['是否风化']=df_表单2['表面风化'].apply(lambda x:dic.get(x))df_表单2['类型是否高钾']=df_表单2['类型'].apply(lambda x:dic.get(x))df_表单2['纹饰A']=df_表单2['纹饰'].apply(lambda x:dic.get(x))df_表单2['颜色编号']=df_表单2['颜色'].apply(lambda x:dic.get(x))columns = ['文物编号','采样点','是否风化','类型是否高钾','纹饰A','颜色编号']columns.extend(df_表单2.columns[1:15])df = df_表单2[columns]df.to_excel('表单1-2合并.xlsx')df

得到完整的合并表单:

各成分占比:

plt.figure(figsize=(10,10))data = df[df.columns[5:]].mean()print(data[data<=1].index)value = list(data[data>1].values)+[sum(data[data<=1].values)]labels = list(data[data>1].index)+['其他']plt.pie(value, labels=labels, autopct='%1.2lf%%')plt.savefig('各成分平均占比图.png')plt.show()

df1 = df[df['类型是否高钾']==1]plt.figure(figsize=(10,10))data = df1[df1.columns[5:]].mean()print(data[data<=1].index)value = list(data[data>1].values)+[sum(data[data<=1].values)]labels = list(data[data>1].index)+['其他']plt.pie(value, labels=labels, autopct='%1.2lf%%')plt.savefig('类型为高钾的成分占比图.png')plt.show()

此图为:类型为高钾的成分占比图

画出热力图:

sns.heatmap(df[df.columns[1:5]].corr())plt.savefig('风化,纹饰,颜色,类型相关性热力图.png')plt.show()

所有属性热力图

以上仅为部分数据预处理内容,第二问小部分内容摘选:

df['亚类']=''高钾亚类 = ['高钾亚类'+str(i) for i in 高钾kmeans[1]]铅钡亚类 = ['铅钡亚类'+str(i) for i in 铅钡kmeans[1]]df.loc[高钾_df.index,'亚类']=高钾亚类df.loc[铅钡_df.index,'亚类']=铅钡亚类df.to_excel('所有文物分别按亚类分类表.xlsx')

以上仅为部分数据预处理内容和摘选的第二问的小部分内容

来源地址:https://blog.csdn.net/weixin_43345535/article/details/126900089

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

2022高教社杯数学建模国赛C题思路代码实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录