目录

1.数据预处理

1.1 数据基本信息探索

1.2 数据可视化

1.3 异常值处理

2. 数据特征值提取

2.1 数据标准化

2.2 PCA提取特征值

3. 数据聚类鉴别药材种类

3.1 肘部图确定K值

3.2 轮廓系数图确定K值

3.3 数据聚类

3.4 聚类结果可视化

4. 研究不同种类药材的特征和差异性

4.1 不同种类药材光谱数据均值曲线

4.2 不同种类药材光谱数据标准差曲线图

4.3 计算每类中药材光谱图的光谱信息散度SID


1.数据预处理

1.1 数据基本信息探索

根据附件 1 中几种药材的中红外光谱数据,研究不同种类药材的特征和差异性,并鉴别药材的种类。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('附件1.xlsx',index_col = 0) # index_col指定索引
data.head()data.shape # 数据维度# (425, 3348)data.info() # 数据基本信息data.isnull().any().any() # 空值判断# False

探索发现数据不存在缺失值情况

1.2 数据可视化

# 数据可视化
def func_1(x):plt.plot(#####)def func_2(data):fontsize = 5plt.figure(figsize=(8, 6), dpi = 300)########plt.yticks(fontsize = fontsize)plt.xlabel('波数(cm^-1)')plt.ylabel('吸光度(AU)')plt.grid(True) # 网格线设置data.agg(lambda x: func_1(x), axis = 1)plt.show()func_2(data)

可视化结果显示存在三条光谱数据明显为离群数据,可能为异常值也可能为单独类

1.3 异常值处理

引入三倍西格玛法则检查数据是否存在异常值,并输出异常值索引,并删除异常值为接下来鉴别药材的种类做准备

#异常值检验3σ
def func_3(x):lower = x.mean()-3*x.std() toplimit = x.mean()+3*x.std()return (x<lower)|(x>toplimit)ycz = data.agg(lambda x:func_3(x))
ycz_index = data[(*******)].index
ycz_index# Int64Index([64, 136, 201], dtype='int64', name='No')data.drop(****,axis=0,inplace = True)func_2(data)

data.to_excel('data_ycl.xlsx')

2. 数据特征值提取

对数据提取特征值为接下来鉴别药材的种类做准备

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
plt.rcParams['axes.unicode_minus'] = Falsedata = pd.read_excel('data_ycl.xlsx', index_col = 0)

2.1 数据标准化

# 0-1标准化
arr_max = np.max(data)
arr_min = np.min(data)
data_bzh = (data-arr_min)/(arr_max-arr_min)
data_bzh

2.2 PCA提取特征值

采用主成分分析法提取特征值

pca = PCA()
pca.fit(data_bzh)
pca.explained_####### # 贡献率lg = np.cumsum(#####) #累计贡献率a = [0.59843097, 0.88309499, 0.93970633, 0.97403493, 0.9853352 ,0.98891337, 0.99174341]
plt.figure(figsize=(8, 6), dpi = 300)
plt.plot(a)
plt.title('前七个主成分累计贡献率')
plt.xlabel('主成分')
plt.ylabel('累计贡献率')
plt.grid(True)
plt.savefig('前七个主成分累计贡献率.png')
plt.show()

根据碎石图确定主成分

pca = PCA(3) # 选取累计贡献率大于90%的主成分(3个主成分)
pca.fit(data_bzh)
data_jw = pca.transform(data_bzh)
data_jw

3. 数据聚类鉴别药材种类

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from collections import Counter
from sklearn import metrics
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
plt.rcParams['axes.unicode_minus'] = Falsedata = pd.read_excel('data_jw.xlsx',index_col = 0)

3.1 肘部图确定K值

SSE = []
for k in ####:############km.fit(####)SSE.append(#####)X = range(1, 11)
plt.figure(figsize=(8, 6), dpi = 300)
plt.xlabel('k')
plt.ylabel('SSE')
plt.title('肘部图')
plt.plot(X, SSE, 'o-')
plt.grid(True)
plt.savefig('肘部图.png')
plt.show()

利用肘部图,轮廓系数图确定k值

3.2 轮廓系数图确定K值

scores = []
for k in #####:######score = metrics.######scores.#######X = range(3, 11)
plt.figure(figsize=(8, 6), dpi = 300)
plt.xlabel('k')
plt.ylabel('轮廓系数')
plt.title('轮廓系数图')
plt.plot(X, scores, 'o-')
plt.grid(True)
plt.savefig('轮廓系数图.png')
plt.show()

根据 肘部图,轮廓系数图最后确定k值为3

3.3 数据聚类

km = KMeans(n_clusters = 3)
km.fit(data)
print(Counter(km.labels_))  # 打印每个类多少个
print(km.cluster_centers_)  # 中心点
data_1 = data.reset_index() # 把索引转为列
r = pd.concat([data_1['NO'], pd.Series(km.labels_)], axis = 1)
r.columns = ['NO', '聚类类别']
print(r)

3.4 聚类结果可视化

data_lei0 = data[data['类别']==0]
data_lei1 = data[data['类别']==1]
data_lei2 = data[data['类别']==2]x0 = data_lei0[0]
y0 = data_lei0[1]
z0 = data_lei0[2]
x1 = data_lei1[0]
y1 = data_lei1[1]
z1 = data_lei1[2]
x2 = data_lei2[0]
y2 = data_lei2[1]
z2 = data_lei2[2]
x3 = [-8.68761271, 10.22622717, -7.66566209]
y3 = [-6.26880974, -0.22269714, 7.70126935]
z3 = [0.04950984, 0.21554457, -0.43296869]
plt.figure(figsize=(8, 6), dpi = 300)
colors=['k', 'b', 'y', 'r']
ax = plt.subplot(111, projection='3d')
ax.plot(x0, y0, z0, 'o', color=colors[0], label='第一类')
ax.plot(x1, y1, z1, 'o', color=colors[1], label='第二类')
ax.plot(x2, y2, z2, 'o', color=colors[2], label='第三类')
ax.plot(x3, y3, z3, '*', color=colors[3], label='中心点')
plt.legend(loc='upper left', numpoints=1, ncol=3, fontsize=8, bbox_to_anchor=(0, 0))
plt.title('聚类效果图')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.savefig('聚类效果图.png')
plt.show()

到此鉴别药材的种类结束

4. 研究不同种类药材的特征和差异性

研究不同种类药材的特征和差异性
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
plt.rcParams['axes.unicode_minus'] = Falsedata = pd.read_excel('聚类.xlsx',index_col = 1)data_1 = data[data['类别']=='第一类']
data_2 = data[data['类别']=='第二类']
data_3 = data[data['类别']=='第三类']

根据 不同种类药材光谱数据均值曲线和不同种类药材光谱数据标准差曲线进行一个初步分析可以看出在峰度、峰数等特征上存在一些差异

4.1 不同种类药材光谱数据均值曲线

plt.figure(figsize=(8, 6), dpi = 300)
plt.xticks(range(652, 4000, 500))
plt.plot(np.mean(data_1), c = 'r', label = '第一类')
plt.plot(np.mean(data_2), c = 'b', label = '第二类')
plt.plot(np.mean(data_3), c = 'k', label = '第三类')
plt.grid(True)
plt.legend()
plt.xlabel('波数(cm^-1)')
plt.ylabel('吸光度(AU)')
plt.title('不同种类药材光谱数据均值曲线')
plt.savefig('不同种类药材光谱数据均值曲线.png')
plt.show()

4.2 不同种类药材光谱数据标准差曲线图

plt.figure(figsize=(8, 6), dpi = 300)
plt.xticks(range(652, 4000, 500))
plt.plot(np.std(data_1), c = 'r', label = '第一类')
plt.plot(np.std(data_2), c = 'b', label = '第二类')
plt.plot(np.std(data_3), c = 'k', label = '第三类')
plt.grid(True)
plt.legend()
plt.xlabel('波数(cm^-1)')
plt.ylabel('吸光度(AU)')
plt.title('不同种类药材光谱数据标准差曲线')
plt.savefig('不同种类药材光谱数据标准差曲线.png')
plt.show()

4.3 计算每类中药材光谱图的光谱信息散度SID

为进一步探讨不同种类药材的特征和差异性引入一个指标 ‘光谱信息散度SID’

光谱信息散度(SID)用来衡量高光谱图像中两个不同像元之间的相似性。欧氏距离考虑了光谱本身的变动性,能对光谱数据进行更好的评价。

df_1 = pd.DataFrame(np.mean(data_1))
df_2 = pd.DataFrame(np.mean(data_2))
df_3 = pd.DataFrame(np.mean(data_3))
index_0 = range(652, 4000)def SID(x, y):p = np.zeros_like(x, dtype=np.float)q = np.zeros_like(y, dtype=np.float)Sid = 0for i in range(len(x)):p[i] = x[i]/np.sum(x)##############for j in range(len(x)):#############return Sid# 第一类和第二类光谱信息散度(SID)
SID((pd.DataFrame(df_1.values.T, columns = index_0)).values, (pd.DataFrame(df_2.values.T, columns = index_0)).values)# 0.024393900155562476# 第一类和第三类光谱信息散度(SID)
SID((pd.DataFrame(df_1.values.T, columns = index_0)).values, (pd.DataFrame(df_3.values.T, columns = index_0)).values)# 0.06295196780155943# 第二类和第三类光谱信息散度(SID)
SID((pd.DataFrame(df_2.values.T, columns = index_0)).values, (pd.DataFrame(df_3.values.T, columns = index_0)).values)# 0.1474926576547535

2021 年高教社杯全国大学生数学建模竞赛 E 题 中药材的鉴别 第一题相关推荐

  1. 2021 年高教社杯全国大学生数学建模竞赛A题分析

    2021 年高教社杯全国大学生数学建模竞赛A题分析 题目 赛题分析 前言 问题一分析 问题二分析 问题三分析 题目 A 题 "FAST"主动反射面的形状调节 中国天眼--500 米 ...

  2. 2021年高教社杯全国大学生数学建模竞赛赛题C题 生产企业原材料的订购与运输 分析、思路与参考文献!!(关注持续更新!!)

    2021 年高教社杯全国大学生数学建模竞赛题目 C 题 生产企业原材料的订购与运输 某建筑和装饰板材的生产企业所用原材料主要是木质纤维和其他植物素纤维材料, 总体可分为 A,B,C 三种类型.该企业每 ...

  3. 尖峰法聚类:2021 年高教社杯全国大学生数学建模竞赛 E题 中药材的鉴别 问题1

    PeakCluster是Lu优化库中的一个函数,该函数利用数据曲线尖峰形状和位置进行聚类分析. 例子:2021 年高教社杯全国大学生数学建模竞赛 E题 中药材的鉴别 问题1:根据附件 1 中几种药材的 ...

  4. 2021 年高教社杯全国大学生数学建模竞赛 B题 乙醇偶合制备 C4 烯烃 求解思路1

    由附件1"性能数据表"中A1~A14(用装料方式I)整理得下表"sheet2": 表1 性能数据表 wt%Co/SiO2 Co/SiO2 和 HAP 的质量比 ...

  5. 2021 年高教社杯全国大学生数学建模竞赛题目(B 题 乙醇偶合制备 C4 烯烃)

    B 题 乙醇偶合制备 C4 烯烃 C4 烯烃广泛应用于化工产品及医药的生产,乙醇是生产制备 C4 烯烃的原料.在制备过程中,催化剂组合(即:Co 负载量.Co/SiO2 和 HAP 装料比.乙醇浓度的 ...

  6. 2021年高教社杯全国大学生数学建模竞赛赛题B题乙醇偶合制备 C4 烯烃 赛题 及 参考资料大集合!!

    B 题 乙醇偶合制备 C4 烯烃(参考资料见文末地址下载!!) C4 烯烃广泛应用于化工产品及医药的生产,乙醇是生产制备 C4 烯烃的原料.在制备过程中,催化剂组合(即:Co 负载量.Co/SiO2 ...

  7. 2021年高教社杯全国大学生数学建模竞赛

    呼呼呼,激动人心的国赛终于来啦!!!我们学校虽然因为疫情线上举办了,但是在校的同学依然可以线下和队友讨论嘻嘻嘻,这段时间暂时停更啦~(2021.9.9--2021.9.12)不要着急鸭,哈哈哈哈 比赛 ...

  8. 2021 年高教社杯全国大学生数学建模竞赛题目(E 题 中药材的鉴别)

    E 题 中药材的鉴别 不同中药材表现的光谱特征差异较大,即使来自不同产地的同一药材,因其无机元素的化学成分.有机物等存在的差异性,在近红外.中红外光谱的照射下也会表现出不同的光谱特征,因此可以利用这些 ...

  9. 2021 年高教社杯全国大学生数学建模竞赛题目(C 题 生产企业原材料的订购与运输)

    C 题 生产企业原材料的订购与运输 某建筑和装饰板材的生产企业所用原材料主要是木质纤维和其他植物素纤维材料,总体可分为 A,B,C 三种类型.该企业每年按 48 周安排生产,需要提前制定 24 周的原 ...

  10. 2021 年高教社杯全国大学生数学建模竞赛题目(A 题 “FAST”主动反射面的形状调节)

    A 题 "FAST"主动反射面的形状调节 中国天眼--500 米口径球面射电望远镜(Five-hundred-meter Aperture Spherical radio Tele ...

最新文章

  1. 【swjtu】数字电路实验7_8_电子琴设计
  2. 丘成桐教授,不必动怒
  3. 转: 利用SQL SERVER2005的XML字段类型实现类似商品扩展属性
  4. 2019.08.27BOM的六个子对象(2)
  5. 中低频量化交易策略研发03_注意事项与应对
  6. 史上速度最快!DNS 公共服务 1.1.1.1 正式发布
  7. liunx 常用操作
  8. Intel Optane P4800X评测(序):不用缓存和电容保护的SSD?
  9. 傅里叶变换和拉普拉斯变换公式总结
  10. 【单片机课程合集】摩尔吧魔鬼集训营,单片机尽情学!
  11. si4463如何读取RSSI
  12. MapGIS出现“存储服务错误,可能未启动”问题解决方案
  13. 【Endnote】如何在参考文献前加编号 (1.2.3.等 或 [1] [2] [3]等)
  14. 申请高德地图开发key
  15. 曾經的文字﹐曾經的歲月
  16. access to同义替换_雅思写作高频100必备词(附高级替换)
  17. 基于php的高校体育场地网上预约使用系统
  18. MODIS产品质量控制文件使用方法
  19. 路由器能赚钱 这事靠谱吗
  20. Effective C++ 条款14

热门文章

  1. react hook 造轮子
  2. Dell R720xd服务器装机暨改造过程
  3. oracle11g 企业管理器无法登陆
  4. SIP协议学习(3)
  5. Android使用Downloadmanager进行下载时,鉴别取消下载和下载完成的广播
  6. 七大基本排序算法(升序排列)
  7. JMeter源码学习- 5.0版本源码本地构建
  8. html把保留图片改为提交按钮,如何制作图片按钮,并为图片按钮添加提交表单和重置表单功能...
  9. 手撕永磁同步电机:foc(clark、park、ipark)变换、电机数学模型解耦过程推导
  10. Docker-常用基础命令整理