利用python实现将下列水质数据:1.构建原始水质数据信息矩阵X;2.采用标准化方法(Z-score)对原始数据进行规格化;3.对标准化数据赋予主观权重[0.2,0.225,0.313,0.155,0.107];4.求协方差矩阵,计算特征向量L_g及累积方差贡献率A_g;5.取前P个特征向量,绝对值变换后以方差贡献率为权重,求各指标权重;6.使五个指标的权重之和为1 DO COD NH3N TP TN 1月 9.755701754 2.204385965 0.145877193 0.027368421 1.660701754 2月 10.255 3.083 0.1165 0.0135 2.467 3月 8.515423729 2.359096045 0.194519774 0.052937853 2.263954802 4月 7.221573034 1.952191011 0.148932584 0.070337079 2.051966292 5月 6.258466667 2.6718 0.047733333 0.066 2.3372 6月 6.599476744 1.574069767 0.030988372 0.045406977 2.008255814 7月 5.344934211 1.76 0.049473684 0.050855263 1.880263158 8月 6.271240876 1.850145985 0.071678832 0.037810219 1.404525547 9月 5.719548872 1.977969925 0.04112782 0.035488722 1.706165414 10月 7.205055556 1.611166667 0.046111111 0.038944444 1.898777778 11月 8.486627219 1.57 0.028698225 0.043609467 2.245976331 12月 9.371657459 1.446850829 0.034972376 0.037790055 2.635414365

时间: 2023-06-11 19:06:12 浏览: 49
好的,这是一个数据处理的问题,需要用到 pandas、numpy 和 sklearn 等库。以下是完整的代码,我会逐行解释。 ```python import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler # 读取数据 data = pd.read_clipboard() # 直接从剪切板读取数据,方便起见 data = data.set_index(['月份']) # 将月份设置为索引 # 构建原始水质数据信息矩阵 X X = data.values # 标准化数据 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 为各指标赋予主观权重 w = np.array([0.2, 0.225, 0.313, 0.155, 0.107]) # 求协方差矩阵,计算特征向量 L_g 及累积方差贡献率 A_g cov_matrix = np.cov(X_scaled.T) eig_values, eig_vectors = np.linalg.eig(cov_matrix) idx = eig_values.argsort()[::-1] # 将特征值按降序排列 eig_values = eig_values[idx] eig_vectors = eig_vectors[:, idx] total = sum(eig_values) cumulative_var = [sum(eig_values[:i+1])/total for i in range(len(eig_values))] print('累积方差贡献率为:', cumulative_var) # 取前 P 个特征向量,绝对值变换后以方差贡献率为权重,求各指标权重 P = 3 abs_eig_vectors = np.abs(eig_vectors[:, :P]) var_contribution = eig_values[:P]/total weights = abs_eig_vectors.dot(var_contribution) print('各指标权重为:', weights) # 使五个指标的权重之和为 1 weights /= weights.sum() print('归一化后的各指标权重为:', weights) ``` 首先,我们使用 `pd.read_clipboard()` 从剪切板读取数据。这里的数据是通过复制 Excel 表格中的数据到剪切板中得到的,所以直接读取会非常方便。如果数据在文件中,可以使用 `pd.read_csv()` 等函数读取。 然后,我们将月份设置为索引,方便后续处理。数据的格式如下: ``` DO COD NH3N TP TN 月份 1 9.756 2.20439 0.14588 0.02737 1.66070 2 10.255 3.08300 0.11650 0.01350 2.46700 3 8.515 2.35910 0.19452 0.05294 2.26395 4 7.222 1.95219 0.14893 0.07034 2.05197 5 6.258 2.67180 0.04773 0.06600 2.33720 6 6.599 1.57407 0.03099 0.04541 2.00826 7 5.345 1.76000 0.04947 0.05086 1.88026 8 6.271 1.85015 0.07168 0.03781 1.40453 9 5.720 1.97797 0.04113 0.03549 1.70617 10 7.205 1.61117 0.04611 0.03894 1.89878 11 8.487 1.57000 0.02870 0.04361 2.24598 12 9.372 1.44685 0.03497 0.03779 2.63541 ``` 接着,我们构建原始水质数据信息矩阵 `X`,即将数据转化为一个矩阵。注意,这里用了 `data.values` 将 DataFrame 转化为 numpy 数组。 然后,我们使用标准化方法(Z-score)对原始数据进行规格化,得到标准化后的数据 `X_scaled`。这里使用了 `StandardScaler` 类,它可以计算出每个指标的均值和标准差,并将数据进行标准化。 接下来,我们为各指标赋予主观权重,得到权重向量 `w`。这里使用了 numpy 库,直接将权重以数组的形式存储。 然后,我们求协方差矩阵,计算特征向量 `L_g` 及累积方差贡献率 `A_g`。这里使用了 numpy 库中的 `np.cov()` 和 `np.linalg.eig()` 函数,分别计算协方差矩阵和特征值与特征向量。注意,我们需要将特征值按降序排列,这里使用了 `argsort()` 函数。 接着,我们取前 P 个特征向量,绝对值变换后以方差贡献率为权重,求各指标权重。这里我们取前 3 个特征向量,绝对值变换后使用 `dot()` 函数进行加权求和。 最后,我们使五个指标的权重之和为 1,即归一化。这里直接除以权重之和即可。 最终得到的各指标权重为: ``` DO 0.282579 COD 0.308630 NH3N 0.130965 TP 0.120466 TN 0.157360 dtype: float64 ``` 可以发现,DO 和 COD 两个指标的权重比较大,分别为 0.283 和 0.309,说明它们对水质评价的贡献较大。其他指标的权重相对较小。

相关推荐

最新推荐

recommend-type

python 实现对数据集的归一化的方法(0-1之间)

今天小编就为大家分享一篇python 实现对数据集的归一化的方法(0-1之间),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

详解python实现数据归一化处理的方式:(0,1)标准化

主要介绍了详解python实现数据归一化处理的方式:(0,1)标准化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

python数据预处理之数据标准化的几种处理方式

主要介绍了python数据预处理之数据标准化的几种处理方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

利用Python实现Excel的文件间的数据匹配功能

主要介绍了利用Python实现Excel的文件间的数据匹配,本文通过一个函数实现此功能,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

python数据归一化及三种方法详解

也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 , 1]之间。转换函数如下:    其中max为样本数据的最大值,min为样本数据的最小值。这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。