当前位置: 首页 > article >正文

【数据可视化-21】水质安全数据可视化:探索化学物质与水质安全的关联

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【数据可视化-21】水质安全数据可视化:探索化学物质与水质安全的关联

    • 一、项目背景与目标
    • 二、数据集介绍
    • 三、完整代码实现
      • 1. 环境准备与数据加载
      • 2. 数据预处理
      • 3. 探索性分析(EDA)
        • 3.1 化学物质含量与水质安全性的关联
        • 3.2 安全与不安全水样的特性
        • 3.3 识别潜在的危险化学物质
      • 4. 分析结论与洞见
        • 关键发现
        • 业务建议
    • 五、优化方向与思考
      • 数据深化
      • 模型构建
    • 六、完整代码

一、项目背景与目标

  水质安全是一个全球性问题,影响着数十亿人的健康。通过分析水质数据中的化学物质含量,我们可以识别潜在的危险因素,为水质管理和政策制定提供科学依据。

二、数据集介绍

  本数据集包含7999条模拟水质记录,涵盖多种化学物质的浓度测量值,以及一个指示水样是否安全的分类变量。化学物质包括铝、氨、砷、钡、镉等,每种物质都有对应的安全阈值。

三、完整代码实现

1. 环境准备与数据加载

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 配置可视化样式
plt.style.use('ggplot')
%matplotlib inline# 加载数据
df = pd.read_csv('/path/to/water_quality.csv')

2. 数据预处理

# 查看数据基本信息
print(df.info())
print(df.describe())# 检查缺失值
print(df.isnull().sum())# 数据重命名,方便后续处理
df = df.rename(columns={'aluminium': 'Al','ammonia': 'NH3','arsenic': 'As','barium': 'Ba','cadmium': 'Cd','chloramine': 'ClNH2','chromium': 'Cr','copper': 'Cu','flouride': 'F','bacteria': 'Bacteria','viruses': 'Viruses','lead': 'Pb','nitrates': 'NO3','nitrites': 'NO2','mercury': 'Hg','perchlorate': 'ClO4','radium': 'Ra','selenium': 'Se','silver': 'Ag','uranium': 'U'
})

3. 探索性分析(EDA)

3.1 化学物质含量与水质安全性的关联
# 计算相关系数矩阵(皮尔逊相关系数)
corr_matrix = df.corr()# 绘制热力图
plt.figure(figsize=(15, 10))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('化学物质含量与水质安全性的相关性热力图')
plt.show()

# 绘制关键化学物质与安全性的散点图
key_substances = ['Al', 'NH3', 'As', 'Ba', 'Cd', 'ClNH2', 'Cr', 'Cu', 'F', 'Bacteria', 'Viruses', 'Pb', 'NO3', 'NO2', 'Hg', 'ClO4', 'Ra', 'Se', 'Ag', 'U']for substance in key_substances:plt.figure(figsize=(10, 6))sns.scatterplot(x=substance, y='is_safe', data=df, hue='is_safe', palette='viridis')plt.title(f'{substance} 含量与水质安全性关系')plt.xlabel(f'{substance} 浓度')plt.ylabel('是否安全')plt.grid(True)plt.show()

3.2 安全与不安全水样的特性
# 绘制关键化学物质在安全与不安全水样中的分布
fig, axes = plt.subplots(4, 5, figsize=(30, 18))  # 创建一个5行4列的画布
axes = axes.flatten()  # 将2D的axes数组转换为1Dfor idx, substance in enumerate(key_substances):# 在指定的子图上绘制散点图sns.boxplot(x='is_safe', y=substance, data=df, ax=axes[idx])#sns.scatterplot(x=substance, y='is_safe', data=df, hue='is_safe', palette='viridis', ax=axes[idx])axes[idx].set_title(f'{substance} 在安全与不安全水样中的分布')axes[idx].set_xlabel(f'{substance} 浓度')axes[idx].set_ylabel('是否安全')axes[idx].grid(True)plt.tight_layout()  # 自动调整子图参数,防止重叠
plt.show()

3.3 识别潜在的危险化学物质
# 绘制箱线图识别各化学物质中的异常值
fig, axes = plt.subplots(4, 5, figsize=(30, 18))  # 创建一个5行4列的画布
axes = axes.flatten()  # 将2D的axes数组转换为1D# 绘制箱线图识别各化学物质中的异常值
for idx, substance in enumerate(key_substances):# plt.figure(figsize=(10, 6))sns.boxplot(x=df[substance],ax=axes[idx])axes[idx].set_title(f'{substance} 含量的异常值分析')axes[idx].set_xlabel(f'{substance} 浓度')axes[idx].set_ylabel('是否安全')axes[idx].grid(True)plt.tight_layout()  # 自动调整子图参数,防止重叠
plt.show()

4. 分析结论与洞见

关键发现
  1. 砷 (As)铅 (Pb)镉 (Cd) 与水质安全性呈现显著负相关,浓度越高,水质越可能不安全。
  2. 细菌 (Bacteria)病毒 (Viruses) 的存在显著降低了水质安全性。
  3. 硝酸盐 (NO3)亚硝酸盐 (NO2) 的浓度升高与水质不安全存在关联。
业务建议
  1. 加强砷、铅和镉的监测:重点关注这些化学物质的排放源和处理过程。
  2. 改善微生物污染控制:加强对水体中细菌和病毒的处理,确保微生物指标达标。
  3. 综合水质管理:结合多种化学和生物指标,制定全面的水质安全标准。

五、优化方向与思考

数据深化

  1. 整合时空数据:结合水质数据的时空信息,分析污染源的扩散路径。
  2. 引入外部数据:如气象数据、工业活动数据等,探索更广泛的水质影响因素。

模型构建

  1. 构建预测模型:使用机器学习算法预测水质安全趋势。
  2. 开发预警系统:实时监控关键指标,及时发出水质安全预警。

  通过数据可视化,我们能够清晰地看到化学物质含量与水质安全性的关系,为水质管理和政策制定提供有力支持。希望本文能为相关领域的研究和实践提供有价值的参考。

六、完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 配置可视化样式
plt.style.use('ggplot')
%matplotlib inline# 加载数据
df = pd.read_csv('/path/to/water_quality.csv')# 查看数据基本信息
print(df.info())
print(df.describe())# 检查缺失值
print(df.isnull().sum())# 数据重命名,方便后续处理
df = df.rename(columns={'aluminium': 'Al','ammonia': 'NH3','arsenic': 'As','barium': 'Ba','cadmium': 'Cd','chloramine': 'ClNH2','chromium': 'Cr','copper': 'Cu','flouride': 'F','bacteria': 'Bacteria','viruses': 'Viruses','lead': 'Pb','nitrates': 'NO3','nitrites': 'NO2','mercury': 'Hg','perchlorate': 'ClO4','radium': 'Ra','selenium': 'Se','silver': 'Ag','uranium': 'U'
})# 计算相关系数矩阵(皮尔逊相关系数)
corr_matrix = df.corr()# 绘制热力图
plt.figure(figsize=(15, 10))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('化学物质含量与水质安全性的相关性热力图')
plt.show()# 绘制关键化学物质与安全性的散点图
key_substances = ['Al', 'NH3', 'As', 'Ba', 'Cd', 'ClNH2', 'Cr', 'Cu', 'F', 'Bacteria', 'Viruses', 'Pb', 'NO3', 'NO2', 'Hg', 'ClO4', 'Ra', 'Se', 'Ag', 'U']for substance in key_substances:plt.figure(figsize=(10, 6))sns.scatterplot(x=substance, y='is_safe', data=df, hue='is_safe', palette='viridis')plt.title(f'{substance} 含量与水质安全性关系')plt.xlabel(f'{substance} 浓度')plt.ylabel('是否安全')plt.grid(True)plt.show()# 绘制关键化学物质在安全与不安全水样中的分布
fig, axes = plt.subplots(4, 5, figsize=(30, 18))  # 创建一个5行4列的画布
axes = axes.flatten()  # 将2D的axes数组转换为1Dfor idx, substance in enumerate(key_substances):# 在指定的子图上绘制散点图sns.boxplot(x='is_safe', y=substance, data=df, ax=axes[idx])#sns.scatterplot(x=substance, y='is_safe', data=df, hue='is_safe', palette='viridis', ax=axes[idx])axes[idx].set_title(f'{substance} 在安全与不安全水样中的分布')axes[idx].set_xlabel(f'{substance} 浓度')axes[idx].set_ylabel('是否安全')axes[idx].grid(True)plt.tight_layout()  # 自动调整子图参数,防止重叠
plt.show()# 绘制箱线图识别各化学物质中的异常值
fig, axes = plt.subplots(4, 5, figsize=(30, 18))  # 创建一个5行4列的画布
axes = axes.flatten()  # 将2D的axes数组转换为1D# 绘制箱线图识别各化学物质中的异常值
for idx, substance in enumerate(key_substances):# plt.figure(figsize=(10, 6))sns.boxplot(x=df[substance],ax=axes[idx])axes[idx].set_title(f'{substance} 含量的异常值分析')axes[idx].set_xlabel(f'{substance} 浓度')axes[idx].set_ylabel('是否安全')axes[idx].grid(True)plt.tight_layout()  # 自动调整子图参数,防止重叠
plt.show()

相关文章:

【数据可视化-21】水质安全数据可视化:探索化学物质与水质安全的关联

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

CSS 选择器介绍

CSS 选择器介绍 1. 基本概念 CSS(层叠样式表)是一种用于描述 HTML 或 XML 文档外观的语言。通过 CSS,可以控制网页中元素的布局、颜色、字体等视觉效果。而 CSS 选择器则是用来指定哪些 HTML 元素应该应用这些样式的工具。 2. 基本选择器 …...

【prometheus+Grafana篇】从零开始:Linux 7.6 上二进制安装 Prometheus、Grafana 和 Node Exporter

💫《博主主页》:奈斯DB-CSDN博客 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了解 💖如果觉得文章对你有所帮…...

STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)

一:GPIO 1.1 了解时钟树(必懂的硬件基础) 在 STM32 开发中,时钟系统是一切外设工作的 “心脏”。理解时钟树的工作原理,是正确配置 GPIO、UART 等外设的核心前提。 1.1.1 为什么必须开启外设时钟? 1. 计…...

树莓派超全系列教程文档--(42)树莓派config.txt旧版配置HDMI和杂项选项

树莓派config.txt旧版配置HDMI和杂项选项 Raspberry Pi 4 HDMI遗留的杂项选项avoid_warningslogging_level 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 Raspberry Pi 4 HDMI IMPORTANT: 使用VC4 KMS图形驱动程序时,完整的显示管道…...

Linux419 三次握手四次挥手抓包 wireshark

还是Notfound 没连接 可能我在/home 准备配置静态IP vim ctrlr 撤销 u撤销 配置成功 准备关闭防火墙 准备配置 YUM源 df -h 未看到sr0文件 准备排查 准备挂载 还是没连接 计划重启 有了 不重启了 挂载准备 修改配置文件准备 准备清理缓存 ok 重新修改配…...

CSS-跟随图片变化的背景色

CSS-跟随图片变化的背景色 获取图片的主要颜色并用于背景渐变需要安装依赖 colorthief获取图片的主要颜色. 并丢给背景注意 getPalette并不是个异步方法 import styles from ./styles.less; import React, { useState } from react; import Colortheif from colorthief;cons…...

解决Docker 配置 daemon.json文件后无法生效

vim /etc/docker/daemon.json 在daemon中配置一下dns {"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","ht…...

虚幻基础:ue碰撞

文章目录 碰撞:碰撞体 运动后 产生碰撞的行为——碰撞响应由引擎负责,并向各自发送事件忽略重叠阻挡 碰撞响应关系有忽略必是忽略有重叠必是重叠有阻挡不一定阻挡(双方都为阻挡) 碰撞启用:纯查询:开启移动检…...

2025.04.23【探索工具】| STEMNET:高效数据排序与可视化的新利器

文章目录 1. STEMNET工具简介2. STEMNET的安装方法3. STEMNET常用命令 1. STEMNET工具简介 在生物信息学领域,分析和处理大规模数据集是研究者们面临的日常挑战。STEMNET工具应运而生,旨在提供一个强大的平台,用于探索和分析单细胞RNA测序&a…...

GitLab Runner配置并行执行多个任务

检查并修改方法: 打开 Runner 的配置文件(通常位于 /etc/gitlab-runner/config.toml 或 ~/.gitlab-runner/config.toml)。 确保 concurrent 值大于 1,例如: concurrent 4 # 允许最多 4 个任务同时运行重启 Runner…...

深入理解前端安全:CSRF与XSS攻击详解

引言 在Web开发的世界里,安全性就像是房子的门锁。你可能觉得它不显眼,但一旦没了它,麻烦可就大了!本文将深入探讨两大前端安全威胁:CSRF(跨站请求伪造)和XSS(跨站脚本攻击&#xf…...

Docker 中运行 JAR 文件

文章目录 步骤 1:准备文件结构步骤 2:编写 Dockerfile步骤 3:构建 Docker 镜像步骤 4:运行容器常见问题解决Q1:容器启动后立即退出Q2:时区不一致Q3:依赖外部服务(如MySQL&#xff09…...

数据治理体系的“三驾马车”:质量、安全与价值挖掘

1. 执行摘要 数据治理已从合规驱动的后台职能,演变为驱动业务成果的战略核心。本文将深入探讨现代数据治理体系的三大核心驱动力——数据质量、数据安全与价值挖掘——它们共同构成了企业在数字时代取得成功的基石。数据质量是信任的基石,确保决策所依据…...

leetcode 二分查找应用

34. Find First and Last Position of Element in Sorted Array 代码&#xff1a; class Solution { public:vector<int> searchRange(vector<int>& nums, int target) {int low lowwer_bound(nums,target);int high upper_bound(nums,target);if(low high…...

Ngrok 内网穿透实现Django+Vue部署

目录 Ngrok 配置 注册/登录 Ngrok账号 官网ngrok | API Gateway, Kubernetes Networking Secure Tunnels 直接cmd运行 使用随机生成网址&#xff1a;ngrok http 端口号 使用固定域名生成网址&#xff1a;ngrok http --domain你的固定域名 端口号 Django 配置 1.Youre a…...

利用OLED打印调试信息: 控制PC13指示灯点灯的实验

Do口暗的时候才是高电平,因为光敏电阻传感器的高电平是依靠LM393电压比较器上引脚进入高阻态再加上上拉电阻上拉产生的高电平DO口什么时候会输出高阻态?电压比较器的正极输入电压大于负极输入电压,而正极输入电压是光敏电阻分得的电压,光敏电阻的阻值越大,已分得的电压就越大,…...

240422 leetcode exercises

240422 leetcode exercises jarringslee 文章目录 240422 leetcode exercises[237. 删除链表中的节点](https://leetcode.cn/problems/delete-node-in-a-linked-list/)&#x1f501;节点覆盖法 [392. 判断子序列](https://leetcode.cn/problems/is-subsequence/)&#x1f501;…...

mybatis mapper.xml中使用枚举

重点&#xff1a;application.propertis配置类 #TypeEnumHandler 这个类的包名&#xff0c;不是全路径 mybatis.type-handlers-packagecom.fan.test.handler两个枚举类&#xff1a; public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…...

【初级】前端开发工程师面试100题(二)

本题库共计包含100题,考察html,css,js,以及react,vue,webpack等基础知识掌握情况。 TypeScript篇 TypeScript和JavaScript有什么区别? TS是JS的超集,添加了静态类型系统,编译时检查类型错误,适合大型项目。interface和type有什么区别? interface主要用于描述对象形…...

Appium安装 -- app笔记

调试环境&#xff1a;JDK&#xff08;java&#xff09; SDK&#xff08;android&#xff09; Node.js 雷神模拟器&#xff08;或 真机&#xff09; Appium&#xff08;Appium Server【内外件&#xff08;dos内件、界面化工具&#xff09;】、Appium Inspector&#xff09; p…...

2025.04.23华为机考第一题-100分

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 星空探索者 问题描述 LYA是一位天文学爱好者,她拍摄了一张星空照片并将其数字化为二维亮度图。在这张图像中,每个像素点的值代表该位置的亮度。现在,LYA想要寻找特定亮度的星…...

【OpenGL】OpenGL学习笔记-1:VS2019配置OpenGL开发环境

在Visual Studio 2019中可以通过手动配置库文件或NuGet包管理器快速安装的方法配置OpenGL环境&#xff0c;详细步骤如下&#xff1a; 一、打开VS2019&#xff0c;创建新的控制台项目 二、方法一&#xff1a;手动配置GLEW/GLFW/GLAD库 GLFW是窗口管理和输入事件的基础设施&…...

集结号海螺捕鱼游戏源码解析(第二篇):水浒传捕鱼模块逻辑与服务器帧同步详解

本篇将全面解构“水浒传”子游戏的服务端核心逻辑、帧同步机制、鱼群刷新规则、客户端命中表现与服务器计算之间的协同方式&#xff0c;聚焦于 C 与 Unity3D 跨端同步的真实实现过程。 一、水浒传捕鱼模块资源结构 该模块包含三部分核心目录&#xff1a; 子游戏/game_shuihuz…...

从零到一实现 .NET Core 项目 + JWT 认证

知识文档:从零到一实现 .NET Core 项目 + JWT 认证 1. 知识点概述 本项目通过实现 JWT 身份验证,完成以下功能: 用户登录并生成 JWT Token。使用 [Authorize] 属性保护受控资源。测试登录和受保护资源访问的完整流程。JWT(JSON Web Token)是一种轻量级的认证机制,广泛用…...

【音视频】FFmpeg内存模型

FFmpeg内存模型 从现有的Packet拷贝一个新Packet的时候&#xff0c;有两种情况&#xff1a; 两个Packet的buf引用的是同一数据缓存空间&#xff0c;这时候要注意数据缓存空间的释放问题&#xff1b;两个Packet的buf引用不同的数据缓存空间&#xff0c;每个Packet都有数据缓存…...

QML 样式库

在 QML 中&#xff0c;样式库&#xff08;或 UI 框架&#xff09;用于快速构建一致且美观的界面。Qt/QML 本身不提供内置的完整样式库&#xff0c;但可以通过以下方式实现样式管理或使用第三方库。 1. Qt Quick Controls 2 样式系统 Qt Quick Controls 2 是官方提供的 UI 组件…...

小白自学python第一天

学习python的第一天 一、常用的值类型&#xff08;先来粗略认识一下~&#xff09; 类型说明数字&#xff08;number&#xff09;包含整型&#xff08;int&#xff09;、浮点型&#xff08;float&#xff09;、复数&#xff08;complex&#xff09;、布尔&#xff08;boolean&…...

2022 年 9 月青少年软编等考 C 语言七级真题解析

目录 T1. 二叉树的深度T2. 迷宫思路分析T3. Sequence思路分析T4. Priority Queue 练习题思路分析T1. 二叉树的深度 题目链接:SOJ D1164 此题为 2022 年 3 月七级第三题原题,见 2022 年 3 月青少年软编等考 C 语言七级真题解析中的 T3。 T2. 迷宫 题目链接:SOJ D1213 一…...

手动实现LinkedList

前言 大家好&#xff0c;我是Maybe。最近在学习数据结构中的链表&#xff0c;自己手动实现了一个LinkedList。我想与大家分享一下。 思维导图 代码部分 package Constant;public class constant {public static final String INDEX_IS_WRONG"输入的下标不合法"; }p…...