介绍
水质监测 Python 应用程序
该项目使用 LightningChart Python 可视化爱尔兰沿海地区的实时水质数据。监测水质对于评估水体的健康状况以及确保其对生态系统和人类使用安全至关重要。本文演示了如何有效监测水质,重点关注 pH、溶解氧和温度等关键参数,这些参数对于水监测工作至关重要。
为什么监测水质如此重要?
持续监测有助于及早发现污染物和环境压力源,从而能够及时采取干预措施,以保护水生生态系统并维持水质安全。
LightningChart Python
LightningChart Python 是一个高性能库,旨在高效处理大型数据集。它是该项目使用的核心可视化工具,之所以选择它,是因为它能够快速呈现数据并支持实时监控。LightningChart Python 提供各种图表类型,包括面积图、样条图、条形图、散点图和雷达图,所有这些图表类型都用于可视化随时间变化的水质参数。
设置Python环境
要为此项目设置 Python 环境,您需要安装 Python 和必要的库。这包括安装 LightningChart Python 和 Pandas。有关原始项目,请参阅 GitHub。
1. 安装 Python:从官方网站下载并安装最新版本的 Python。
2. 安装库:使用 pip 安装所需的库
pip install lightningchart pandas
3. 通过创建新项目目录并安装所需的库来设置您的开发环境。确保 LightningChart Python 已正确授权。
所用库的概述
• Pandas:用于数据操作和分析。(文档)
• LightningChart Python:用于创建高性能交互式数据可视化。(文档)
在 Visual Studio Code 中使用 Jupyter Notebook
如果您使用 Visual Studio Code (VSCode) 作为开发环境,则可以在其中直接运行 Jupyter Notebooks,从而获得无缝体验。
安装 VSCode 和 Python 扩展
1. 安装 Visual Studio Code:如果您尚未安装,可以从官方网站下载
2. 安装 Python 扩展:
1. 打开 VSCode。
2. 单击窗口侧面活动栏中的扩展图标,转到扩展视图。
3. 搜索 Microsoft 的“Python”扩展并安装它。
安装 Jupyter 插件
1. 在插件视图中,搜索“Jupyter”并安装 Microsoft 的插件。
2. 此插件允许您直接在 VSCode 中运行 Jupyter notebook(.ipynb 文件)。
加载和处理数据
该数据集包括从Cork Harbour、Moy Killala以及爱尔兰其他15个沿海地点收集的11个关键水质监测参数。原始数据集由数据源提供,包含超过120万行数据,数据提供者将其减少到29,159行后用于本项目。我们在预处理过程中检查了缺失值,并确保数据的一致性。
以下是数据集中关键参数的概述及其在水质监测中的重要性:
· 总碱度(以 CaCO3 表示):测量水中和酸的能力,保持稳定的 pH 值。
· 总氨(以 N 表示):高浓度时有毒,需要仔细监测以保护水生生物。
· 生化需氧量 (BOD) – 5天 (总量):测量生物分解有机物所需的氧气,表明污染水平。
· 氯化物:评估水的盐度和道路盐或工业排放的潜在污染。
· 25°C 时的电导率:评估水的导电能力,表明盐度。
· 溶解氧:对水生生物至关重要。低水平表明水质差。
· 正磷酸盐(以 P 表示):过量会导致富营养化,通常测量以监测营养水平。
· pH:表示水的酸度或碱度,影响生物过程。
· 温度:影响化学反应和水生生物的代谢率。
· 总硬度(以 CaCO3 计):反映钙和镁的含量,这对水生生物很重要。
· 真彩色 (True Colour):过滤后测量的水色,通常用于评估水的清澈度和潜在污染情况。
数据加载和预处理
下面的代码展示了如何加载数据并提取基本信息:
import pandas as pd
# Load the dataset
ireland_dataset_path = 'dataset/Water Quality Monitoring Dataset_ Ireland.csv'
ireland_water_data = pd.read_csv(ireland_dataset_path)
# Display basic information about the dataset and check for missing values
ireland_water_data_info = ireland_water_data.info()
ireland_null_values_summary = ireland_water_data.isnull().sum()
# Output basic info and missing values
print(ireland_water_data_info)
print(ireland_null_values_summary)
接下来,我们对数据进行清理和预处理。以下代码提取并清理水体名称:
# Extracting unique waterbodies
unique_waterbodies = ireland_water_data['WaterbodyName'].unique()
print(unique_waterbodies)
# Clean waterbody names for readability
import re
def clean_waterbody_name(name):
# Replace underscores with spaces and keep numbers that follow important identifiers
cleaned_name = re.sub(r'_+', ' ', name) # Replace underscores with spaces
cleaned_name = re.sub(r'(?<![a-zA-Z])(\d+)', r'\1', cleaned_name) # Retain numbers if attached to names
cleaned_name = cleaned_name.title() # Capitalize for readability
return cleaned_name.strip()
cleaned_names = [clean_waterbody_name(name) for name in unique_waterbodies]
print("Cleaned names:", cleaned_names)
使用 LightningChart Python 可视化数据
使用 LightningChart Python,我们创建了多个交互式图表来显示水质监测随时间的变化趋势。这些图表对于监测温度、溶解氧和生物需氧量 (BOD) 等参数至关重要。
面积图 – 多年间的平均pH值
面积图显示了多年间pH值的波动情况。pH是水质监测中的关键指标,因为它影响水体内的生物和化学过程。
# Group by Years and calculate the average pH value for each year
grouped_data = ireland_water_data.groupby('Years')['pH'].mean().reset_index()
# Extract x_values (Years) and y_values (average pH)
# Convert years to UNIX time for proper display on the x-axis
x_values = [
time.mktime(datetime.datetime(year, 1, 1).timetuple()) * 1000 for year in grouped_data['Years']
]
y_values = grouped_data['pH'].tolist()
# Create the chart
chart = lc.ChartXY(
theme=lc.Themes.Light,
title='Average pH Over Years'
)
# Configure the x-axis for proper time display
x_axis = chart.get_default_x_axis()
x_axis.set_title("Year")
x_axis.set_tick_strategy('DateTime')
# Add an area series
series = chart.add_area_series(data_pattern="ProgressiveX")
# Append the data to the area series
series.add(x_values, y_values)
# Open the chart
chart.open()
pH 值在一段时间内基本保持稳定,偶尔的下降表明特定年份酸度可能会增加。
样条图 - 多年间的物理参数
样条图突出显示了温度和总硬度等物理参数随时间的变化情况。物理参数在确定水是否适合各种用途方面起着重要作用。
# Define the physical parameters to be visualized
parameters = ['Dissolved Oxygen', 'Temperature', 'pH', 'Conductivity @25°C']
# Group by Years and calculate the mean for the selected physical parameters
grouped_data = ireland_water_data.groupby('Years')[parameters].mean().reset_index()
# Convert years to UNIX time for proper display on the x-axis
x_values = [
time.mktime(datetime.datetime(year, 1, 1).timetuple()) * 1000 for year in grouped_data['Years']
]
# Create the chart
chart = lc.ChartXY(
theme=lc.Themes.Light,
title='Mean Physical Parameters Over Years'
)
# Configure the x-axis to display dates
x_axis = chart.get_default_x_axis()
x_axis.set_title("Years")
x_axis.set_tick_strategy('DateTime')
# Add spline series for each parameter
for parameter in parameters:
y_values = grouped_data[parameter].tolist()
series = chart.add_spline_series(data_pattern="ProgressiveX").append_samples(
x_values=x_values,
y_values=y_values
)
series.set_name(parameter) # Set the series name for identification
series.set_line_thickness(2)
legend = chart.add_legend()
legend.add(chart) # Attach all elements within the chart to the legend
# Open the chart
chart.open()
温度略有变化,可能反映季节变化。总硬度保持稳定,表明水中矿物质含量稳定。
样条图 – 多年间的化学参数
此图表突出了关键的化学参数,如氯化物和溶解氧水平。请注意,两个参数的数值已放大了100倍,以便使其与图表中的其他参数更具可比性。通过这种缩放处理,可以更好地在视觉上比较那些自然数值较小的参数
相关资讯
渝公网安备50010702505508