水质监测数据分析:缺失值处理、可视化和相关性分析
现在有一个记录水质监测点监测数据的 Excel 表格,共 17 列,126 行。第一行每一单元格分别记录着每一列的表头信息,他们分别是省份、流域、断面名称、监测时间、水质类别、水温(℃)、pH 值、溶解氧 (mg/L)、电导率(μS/cm)、浊度(NTU)、高猛酸盐指数、氨氮(mg/L)、总磷(mg/L)、总氮(mg/L)、叶绿素α(mg/L)、藻密度(cells/L)、站点情况。以上表头信息若存在括号,括号内为各个信息的计量单位;站点情况一列分别为站点目前实在正常运行还是维护。其他剩余的 125 行为各个监测点的信息,其中第四列的第 4、51、69、85、118 行的水质类别信息缺失,其他各行关于谁知类别的信息按照 1-5 级别划分。第 33 行除了 1、2、3、17 列信息外全部缺失。此外还有以下数据缺失:4 行 12 列缺失,51 行 6-10 列缺失,49 行 14 列缺失,69 行 13 列缺失,85 行 11 列缺失,118 行 13 列缺失,这些缺失的数据均属于数值数据。对于 15、16 两列仅有少量监测点存在两者的数据记录,不存在只记录一项数据的情况,其他行均缺失这两项数据。
为了完成这些任务,我们可以使用 Python 中的 pandas、Matplotlib 和 scikit-learn 等库来处理和分析数据。下面是完成任务的代码实现:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from scipy.stats import skew, kurtosis
# 读取 Excel 表格数据
data = pd.read_excel('水质监测数据.xlsx')
# 处理缺失值
mean_value = data.iloc[:, 7].mean()
data.iloc[:, 7].fillna(mean_value, inplace=True)
# 绘制箱线图
plt.boxplot(data.iloc[:, 7])
plt.xlabel('溶解氧(mg/L)')
plt.show()
# 计算偏度和峰度
skewness = skew(data.iloc[:, 7])
kurt = kurtosis(data.iloc[:, 7])
print('溶解氧数据的偏度为:', skewness)
print('溶解氧数据的峰度为:', kurt)
# 归一化电导率和高猛酸盐指数
min_max_scaler = MinMaxScaler()
data['电导率(μS/cm)_normalized'] = min_max_scaler.fit_transform(data['电导率(μS/cm)'].values.reshape(-1, 1))
data['高猛酸盐指数_normalized'] = min_max_scaler.fit_transform(data['高猛酸盐指数'].values.reshape(-1, 1))
# 标准化电导率和高猛酸盐指数
standard_scaler = StandardScaler()
data['电导率(μS/cm)_standardized'] = standard_scaler.fit_transform(data['电导率(μS/cm)'].values.reshape(-1, 1))
data['高猛酸盐指数_standardized'] = standard_scaler.fit_transform(data['高猛酸盐指数'].values.reshape(-1, 1))
# 分析溶解氧与电导率、高猛酸盐指数、氨氮的相关关系
correlation = data[['溶解氧(mg/L)', '电导率(μS/cm)', '高猛酸盐指数', '氨氮(mg/L)']].corr()
print('相关系数矩阵:')
print(correlation)
请注意,你需要将 Excel 文件的名称调整为实际的文件名,并确保文件与 Python 脚本在同一目录下。此外,你还需要安装所需的库,可以使用以下命令进行安装:
pip install pandas matplotlib scikit-learn
运行以上代码后,你将得到溶解氧数据的箱线图,并计算出溶解氧数据的偏度和峰度。同时,你还将得到电导率、高猛酸盐指数和氨氮与溶解氧之间的相关系数矩阵。
原文地址: https://www.cveoy.top/t/topic/bnvD 著作权归作者所有。请勿转载和采集!