Python数据分析处理(二)——数据的标准化处理归一化(极差变换)以数学建模(CUMCM 2011 A)为实例(两表同名行列对应计算)

继续之前的数据和工作,进行数据的标准化处理,具体数据可从下方博客链接获取     

剔除异常值

放下表一和表二Excel的截图

  

大体思路:
实际问题中,不同数据可能有不同的性质和量纲,为进行模糊聚类,需进行标准化处理。这里采用极差变换:

放代码:

import numpy as np
import pandas as pd
path = "E:/Model_building/A/"
s2 = pd.read_excel(path+"sheet2.xlsx")
s1 = pd.read_excel(path+"sheet1.xlsx")    # 导入1、2表
s1 = pd.DataFrame(s1.values)             # dataframe
s2 = pd.DataFrame(s2.values)
s1 = s1.drop([s1.columns[0]], axis=1)    # 去掉0列
s2 = s2.drop([s2.columns[0]], axis=1)
 
s1.columns = ['a', 'b', 'c', 'd', 'e']         # 之前作死删掉了列名,感觉还是用列名更方便
s2.columns = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
 
s2['1'] = s2['1'].astype('int64')    # 输出发现表2的序号列为float,更改为int
看一下s1和s2的头部输出,其中a,1都为采样点的序号,b,c为xy坐标,d为海拔,e为地区类型,2到9为八种元素在每个采样点的浓度

s12 = pd.merge(s1, s2, how='inner', left_on='a', right_on='1')   # 将表1、2按照索引,合并为s12
del s12['1']
s12.head()
看一下s12的头部输出 ,这样就明了了

path = "E:/Model_building/A/"
ma = s12.groupby(s12['e']).max().iloc[:, 4:12]
mi = s12.groupby(s12['e']).min().iloc[:, 4:12]     # 按照地区列分组,得出每种元素最大最小值
s122 = s12.set_index(['a','e'])    # 双重索引   
print(mi,'\n')
print(s122.head())
s122.iloc[:, 3:12] = ( s122.iloc[:, 3:12] - mi )/(ma-mi)   # 极差变换
s122.to_excel(path+"sheet_standardized.xlsx")
在进行极差变换时,由于s122和mi相减时,由于s122每种e有多个,所以一直报错 ,如下:

不能有重复索引,所以设置一个双重索引(即地区和序号),这样在相减时,自动匹配对应的行(e)和列(元素)

pathx = "E:/Model_building/A/cumcm2011A附件_数据.xls"
p = s12.iloc[:,5:].groupby(s12['e']).mean()  # 每个地区每种元素的均值
print(p)
s122 = s122.reset_index()   # 取消索引,以便下一步引用‘e’
p1 = s122.groupby(s122['e']).mean().iloc[:, 5:]   # 每个地区每种元素,经过极差变换后的均值
print(p1)
p1.to_excel(path+"sheet1-6.xlsx")   # 保存
p.to_excel(path+"sheet1-7.xlsx")
放一下两个表的结果

发布了117 篇原创文章 · 获赞 41 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/pangzhaowen/article/details/103941940