水质分析2025年3月17日 | 阅读11分钟 获得饮用清洁水是每个人的基本需求之一。从法律上讲,获得清洁饮用水是一项基本人权。水质受多种因素影响,是机器学习研究的主要课题之一。因此,如果您想了解如何使用机器学习分析水质,本教程适合您。在本教程中,我们将引导您通过 Python 机器学习对水质进行分析。 导言:水质分析分析水质是机器学习研究的关键课题之一。为了训练一个能够确定特定水样是否安全可饮用的机器学习模型,我们首先必须了解影响水饮用性的所有参数。这个过程也称为水饮用性分析。 我们将利用 Kaggle 数据集,其中包括影响水饮用性的所有关键要素的信息,用于水质分析挑战。在使用机器学习构建模型来预测水样是否适合饮用之前,我们必须首先快速检查此数据集的每个特征,因为所有决定水质的要素都至关重要。 关于数据集内容 water_potability 数据集包含不同类型的水质指标。 - pH 值是确定水酸碱度的关键因素。此外,它还表明水是酸性还是碱性。根据世界卫生组织 (WHO) 的规定,允许的最高 pH 范围在 6.5 到 8.5 之间。本研究的 pH 范围在 6.52 到 6.83 之间,符合 WHO 标准。
- 硬度:钙和镁盐是硬度的主要贡献者。这些盐由水流经的地质构造释放。水暴露于产生硬度的物质的时间长短会影响水在原始状态下的硬度。水因钙和镁沉淀而形成肥皂的能力是硬度的原始定义。
- 固体:水可以溶解各种无机和某些有机矿物质或盐,例如钙、钾、钠、碳酸氢盐、氯化合物、镁、硫酸盐等。这些矿物质使水具有不愉快的味道并降低了颜色。这是用水时的关键变量。TDS 评级高的水是矿物质含量高的水。建议饮用水的 TDS 水平为 500 毫克/升,最大限制为 1000 毫克/升。
- 氯胺:氯和氯胺是城市供水系统中使用的两种主要消毒剂。当甲烷加入漂白剂以净化饮用水时,氯胺最常产生。在饮用水中,氯浓度高达 4 毫克/升被认为是安全的。
- 硫酸盐:硫酸盐是天然存在于岩石、土壤和矿物质中的有机化合物。它们存在于周围空气、地下水、植被和食物中。硫酸盐主要用于化工行业。在盐水中,每升约有 2,700 毫克硫酸盐。大多数淡水来源的浓度在 3 到 30 毫克/升之间,而某些地区的含量则高得多。
- 电导率:清洁的水是优良的绝缘体和不良的电流导体。离子浓度的增加提高了水的电阻。水的电导率通常由溶解颗粒的量决定。溶液传导电流的能力由其离子过程决定,通过电导率测量。根据 WHO 指南,EC 值不应超过 400 S/cm。
- 有机碳:人造和天然有机物 (NOM) 都促成了源水中的总有机碳。纯水中有机物质中的总碳量 (TOC) 是其测量值。美国环保署估计,处理过的饮用水的 TOC 为 2 毫克/升,用于处理的源水含有 4 毫克/升。
- 三卤甲烷 (THMs):三卤甲烷是氯化处理水中可能存在的物质。水中有机物的量、处理水所需的氯量以及处理水的温度都会影响饮用水中三卤甲烷的含量。三卤甲烷浓度高达 80 ppm 被认为是饮用水安全的。
- 浊度:水中悬浮的固体物质的量决定了其浊度。该测试用于确定排放废水的胶体颗粒质量,并测量水的发光能力。Wondo Genet 校区的平均浊度值 (0.98 NTU) 低于 WHO 建议的 5.00 NTU 阈值。
- 饮用性:介于 0 到 1 之间的分数,表示水是否适合人类饮用。
Python 水质分析我们将通过导入数据集和所需的 Python 库来开始水质分析工作 源代码片段 输出 | ph | 硬度 | 固体 | 氯胺 | 硫酸盐 | 电导率 |
---|
0 | NaN | 204.590455 | 20791.315951 | 7.300212 | 355.515441 | 554.305554 | 1 | 3.715050 | 129.422921 | 15530.057555 | 5.535245 | NaN | 592.555359 | 2 | 5.099124 | 224.235259 | 19909.541732 | 9.275554 | NaN | 415.505213 | 3 | 5.315755 | 214.373394 | 22015.417441 | 5.059332 | 355.555135 | 353.255515 | 4 | 9.092223 | 151.101509 | 17975.955339 | 5.545500 | 310.135735 | 395.410513 |
在继续之前,让我们删除所有包含空值的行,因为我在数据集的初始预览中看到了它们 源代码片段 输出 ph 0
Hardness 0
Solids 0
Chloramines 0
Sulfate 0
Conductivity 0
Organic_carbon 0
Trihalomethanes 0
Turbidity 0
Potability 0
dtype: int64
输入 输出 | ph | 硬度 | 固体 | 氯胺 | 硫酸盐 | 电导率 | 有机碳 | 三卤甲烷 | 浊度 | 饮用性 | count | 2785.000000 | 3276.000000 | 3276.000000 | 3276.000000 | 2495.000000 | 3276.000000 | 3276.000000 | 3114.000000 | 3276.000000 | 3276.000000 | 均值 | 7.080795 | 196.369496 | 22014.092526 | 7.122277 | 333.775777 | 426.205111 | 14.284970 | 66.396293 | 3.966786 | 0.390110 | std | 1.594320 | 32.879761 | 8768.570828 | 1.583085 | 41.416840 | 80.824064 | 3.308162 | 16.175008 | 0.780382 | 0.487849 | min | 0.000000 | 47.432000 | 320.942611 | 0.352000 | 129.000000 | 181.483754 | 2.200000 | 0.738000 | 1.450000 | 0.000000 | 25% | 6.093092 | 176.850538 | 15666.690297 | 6.127421 | 307.699498 | 365.734414 | 12.065801 | 55.844536 | 3.439711 | 0.000000 | 50% | 7.036752 | 196.967627 | 20927.833607 | 7.130299 | 333.073546 | 421.884968 | 14.218338 | 66.622485 | 3.955028 | 0.000000 | 75% | 8.062066 | 216.667456 | 27332.762127 | 8.114887 | 359.950170 | 481.792304 | 16.557652 | 77.337473 | 4.500320 | 1.000000 | max | 14.000000 | 323.124000 | 61227.196008 | 13.127000 | 481.030642 | 753.342620 | 28.300000 | 124.000000 | 6.739000 | 1.000000 |
输入 输出
RangeIndex: 3276 entries, 0 to 3275
Data columns ( total 10 columns ):
0 Column Non-Null Count Dtype
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0 ph 2785 non-null float64
1 Hardness 3276 non-null float64
2 Solids 3276 non-null float64
3 Chloramines 3276 non-null float64
4 Sulfate 2495 non-null float64
5 Conductivity 3276 non-null float64
6 Organic_carbon 3276 non-null float64
7 Trihalomethanes 3114 non-null float64
8 Turbidity 3276 non-null float64
9 Potability 3276 non-null int64
dtypes: float64( 9 ), int64( 1 )
memory usage: 256.1 KB
输入 输出 Hardness 3276
Solids 3276
Chloramines 3276
Sulfate 2495
Conductivity 3276
Organic_carbon 3276
Trihalomethanes 3114
Turbidity 3276
Potability 2
dtype: int64
输入 输出 Sum values
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hardness 0
Solids 0
Chloramines 0
Sulfate 781
Conductivity 0
Organic_carbon 0
Trihalomethanes 162
Turbidity 0
Potability 0
dtype: int64
输入 输出 ph float64
Hardness float64
Solids float64
Chloramines float64
Sulfate float64
Conductivity float64
Organic_carbon float64
Trihalomethanes float64
Turbidity float64
Potability int64
dtype: object
由于此数据集的“饮用性”列包含值 0 和 1,分别表示系统中的水是否适合饮用(0),因此我们必须预测此列。现在查看“饮用性”列中 0 和 1 的分布 源代码片段 输出  您应该知道此数据集存在不平衡,因为 0 的样本数量多于 1 的样本数量。 正如之前所说,我们不能忽略任何影响水质的元素,因此让我们单独查看每一列。让我们从检查 pH 列开始 源代码片段 输出  pH 列显示水的 pH 值,这对于确定水的酸碱平衡至关重要。饮用水的 pH 值应在 6.5 至 8.5 之间。现在让我们检查影响水质的第二个元素 源代码片段 输出  上图显示了数据集中液体硬度的分布。水的硬度通常因其来源而异,但介于 120 至 200 毫克之间的水是可饮用的。现在让我们检查影响水质的以下元素 源代码片段 输出  上图显示了数据集中水中所有溶解固体的分布。溶解固体是水中发现的任何有机或无机矿物质。高度矿化的水具有非常高的溶解固体含量。现在让我们检查影响水质的下一个元素 源代码片段 输出  上图显示了数据集中水中二氧化氯的分布。在公共供水系统中,使用氯和氯胺等消毒剂。现在让我们检查影响水质的以下元素 源代码片段 输出  上图显示了数据集中水中硫酸盐的分布。它们是天然存在于矿物质、土壤和岩石中的元素。可饮用水被定义为含有少于 500 毫克硫酸盐。接下来,让我们检查另一个元素 源代码片段 输出  上图显示了数据集中流体电导率的分布。最纯净的水不是有效的电导体,但水总体上是优良的电导体。可饮用水的电阻小于 500。接下来,让我们检查另一个元素 源代码片段 输出  上图显示了数据集中水中碳化合物的分布。天然和人工来源的有机物质分解产生有机碳。可饮用水被定义为含有少于 25 毫克有机碳。现在让我们检查影响饮用水质量的以下元素 源代码片段 输出  上图显示了水中三卤甲烷或三氯甲烷的分布。氯化水含有称为三卤甲烷的化合物。可饮用水被定义为含有少于 80 毫克三卤甲烷。现在让我们检查数据集中影响饮用水质量的以下变量 源代码片段 输出  上图显示了水中浊度的分布。悬浮颗粒的数量影响水的浊度。可饮用水被定义为含有少于 5 毫克浊度。 基于 Python 的水质预测模型上一节讨论了所有影响水质的元素。下一步是使用 Python 构建基于机器学习的水质分析模型。我将为此目的使用 Python PyCaret 包。如果您以前从未使用过此库包,可以使用 pip 命令快速将其安装到您的系统中 在构建机器学习模型之前,让我们看看所有特征与数据集的“饮用性”列之间的关联 源代码片段 输出 ph 1.000000
Hardness 0.108948
Organic_carbon 0.028375
Trihalomethanes 0.018278
Potability 0.014530
Conductivity 0.014128
Sulfate 0.010524
Chloramines -0.024768
Turbidity -0.035849
Solids -0.087615
Name: ph, dtype: float64
现在使用 PyCaret Python 模块来确定哪种机器学习方法适合此数据集 源代码片段 输出 | 模型 | 精度 | AUC | 召回率 | 精确度 | Fa | Kappa | McC | if | 随机森林分类器 | 0.6830 | 0.7005 | 0.4197 | 0.6744 | 0.5133 | 0.2976 | 0.3182 | qda | 二次判别分析 | 0.6823 | 0.7192 | 0.3985, | 0.6883 | 0.5013 | 0.2917 | 0.3174 | et | 额外树分类器 | 0.6816 | 0.6941 | 0.3861 | 0.6858 | 0.4916 | 0.2863 | 0.3123 | lightgbm | 轻量级梯度提升机 | 0.6652 | 0.6916 | 0.4762 | 0.6078 | 0.5324 | 0.2781 | 0.2840 | gbe | 梯度提升分类器 | 0.6602 | 0.6738 | 0.3718 | 0.6306 | 0.4667 | 0.2419 | 0.2603 | nb | 朴素贝叶斯 | 0.6184 | 0.6078 | 0.2478 | 0.5545, | 0.3412 | 0.1261 | 0.1462 | dt | 决策树分类器 | 0.6034 | 0.5895 | 0.5186 | 0.5049 | 0.5097 | 0.1775 | 0.1784 | Ir | 逻辑回归 | 0.5984 | 0.5199 | 0.0071 | 0.1900 | 0.0134 | 0.0028 | 0.0127 | ridge | 岭分类器 | 0.5984 | 0.0000 | 0.0089 | 0.1583. | 0.0168 | 0.0035 | 0.0056 | Ida | 线性判别分析 | 0.5977 | 0.4903 | 0.0089 | 0.1500 | 0.0167 | 0.0021 | 0.0024 | ada | Ada Boost 分类器 | 0.5956 | 0.5671 | 0.2919 | 0.4896 | 0.3644 | 0.0972 | 0.1034 | knn | K 近邻分类器 | 0.5743 | 0.5423 | 0.3644 | 0.4642 | 0.4070 | 0.0826 | 0.0846 | svm | SVM - 线性核 | 0.5194 | 0.0000 | 0.3982 | 0.1604 | 0.2287 | -0.0014 | -0.0104 |
上述结果表明,为了分析水质而训练基于机器学习的模型,最好使用随机预测分类技术。因此,让我们训练算法并评估其预测 源代码片段 输出 ph | 硬度 | 固体 | 氯胺 | 硫酸盐 |
---|
a.67e6 | 2473208 | 00000000 | 2.050332 358.006136 | 60286516 | 8.02223 | 00000000 | 00000000 | 6.546600 310.195738 | 308.410813, | 504067 | 186:313524 | 00000000 | 7544809 326.676303 | 00000000 | 00000000 | 00000000 | 2area 710546 | rst3408 3.602306 | 2aaest6a4 | e.635e49 | 00000000 | 00000000 | ( 4.563009 303300771 | 00000000 |
电导率 | 有机碳 | 三卤甲烷 | 浊度 | 饮用性标签 |
---|
18420524 | s00.341674 | oze77 | 1 | 1 | 11558279 | 00000000 | 4.075075 | 1 | 1 | 8300735 | sastre82 | 2559708 | 1 | 1 | +3.780605 | 00000000 | 2.672089 | 1 | 1 | 42:363817 | 62,798309 | 4401425, | 1 | 1 |
上面显示的结果看起来不错。我希望您喜欢我基于 Python 的水质分析机器学习实验。 总结因此,这就是您评估水质并训练机器学习模型以区分可饮用水和不可饮用水的方法。获得饮用清洁水是每个人的基本需求之一。从法律上讲,获得清洁饮用水是一项基本人权。水质受多种因素影响,是机器学习研究的主要课题之一。我希望您喜欢阅读这篇关于基于 Python 的水质分析机器学习教程。请随时通过邮件留下您的深刻见解。
|