用Python+Excel搞定湖泊水质评价:手把手教你实现TSI指数自动计算(附完整代码)

📅 2026/6/30 17:28:02
用Python+Excel搞定湖泊水质评价:手把手教你实现TSI指数自动计算(附完整代码)
用PythonExcel实现湖泊水质TSI指数自动化分析全流程指南湖泊水质监测是环境科学领域的核心工作之一而TSITrophic State Index指数作为评估水体富营养化程度的重要指标其计算过程往往涉及大量重复性公式运算。传统手工计算不仅效率低下还容易因人为失误导致结果偏差。本文将带你用两种技术路线——Python编程和Excel公式构建一套完整的自动化分析工作流。1. 理解TSI指数计算的核心逻辑TSI指数通过总氮TN、总磷TP、叶绿素aChl-a、化学需氧量COD和透明度SD五个参数的综合计算反映水体的营养状态。其独特之处在于采用加权平均算法各参数的权重由它们与叶绿素a的相关系数决定。中国典型湖泊的参数相关系数经验值如下参数与Chl-a的相关系数(rj)rj²权重系数(Wj)Chl-a1.00001.00000.2663TP0.84000.70560.1879TN0.82000.67240.1790SD-0.83000.68890.1834COD0.83000.68890.1834注意当拥有本地湖泊的历史监测数据时建议重新计算相关系数以获得更准确的权重分配各参数TSI分项计算公式为# Python函数形式表达 import math def calculate_tsi_tn(tn): return 10 * (5.453 1.694 * math.log(tn)) def calculate_tsi_tp(tp): return 10 * (9.436 1.624 * math.log(tp)) def calculate_tsi_chla(chla): return 10 * (2.5 1.086 * math.log(chla)) def calculate_tsi_cod(cod): return 10 * (0.109 2.66 * math.log(cod)) def calculate_tsi_sd(sd): return 10 * (5.118 - 1.94 * math.log(sd))2. Excel自动化方案高级公式与条件格式对于不熟悉编程的用户Excel仍能实现高效的自动化计算。我们设计的工作表包含三个核心区域数据输入区、计算区和结果可视化区。2.1 数据输入表结构设计创建如下结构的输入表格示例为前5行采样点日期TN(mg/L)TP(mg/L)Chl-a(μg/L)COD(mg/L)SD(m)湖心2023-03-150.820.04812.54.81.2东岸2023-03-151.050.05315.85.20.92.2 关键计算公式实现在计算区设置以下公式以第2行为例TSI_TN: 10*(5.453 1.694*LN(D2)) TSI_TP: 10*(9.436 1.624*LN(E2)) TSI_Chla:10*(2.5 1.086*LN(F2)) TSI_COD: 10*(0.109 2.66*LN(G2)) TSI_SD: 10*(5.118 - 1.94*LN(H2)) 加权TSI: I2*0.2663 J2*0.1879 K2*0.179 L2*0.1834 M2*0.18342.3 智能结果可视化技巧利用条件格式实现自动颜色标注选择加权TSI结果列新建条件格式规则TSI30蓝色填充寡营养30≤TSI50绿色填充中营养50≤TSI60黄色填充轻度富营养60≤TSI70橙色填充中度富营养TSI≥70红色填充高度富营养添加数据条格式可以直观显示富营养化程度梯度变化。3. Python自动化方案Pandas全流程实现对于大批量数据处理Python方案展现出明显优势。我们构建的脚本包含数据清洗、计算、分析和可视化完整功能。3.1 数据预处理模块import pandas as pd import numpy as np def load_and_clean_data(filepath): 加载并清洗原始监测数据 df pd.read_excel(filepath) # 处理缺失值 for col in [TN, TP, Chla, COD, SD]: df[col] df[col].replace(0, np.nan).fillna(df[col].mean()) # 单位统一化 df[TN] df[TN] * 1000 # 转为μg/L return df3.2 核心计算引擎class TSI_Calculator: WEIGHTS { Chla: 0.2663, TP: 0.1879, TN: 0.1790, SD: 0.1834, COD: 0.1834 } staticmethod def calculate_tsi(df): 计算各分项TSI及加权综合TSI df[TSI_TN] 10 * (5.453 1.694 * np.log(df[TN])) df[TSI_TP] 10 * (9.436 1.624 * np.log(df[TP])) df[TSI_Chla] 10 * (2.5 1.086 * np.log(df[Chla])) df[TSI_COD] 10 * (0.109 2.66 * np.log(df[COD])) df[TSI_SD] 10 * (5.118 - 1.94 * np.log(df[SD])) df[TSI_Weighted] (df[TSI_Chla] * WEIGHTS[Chla] df[TSI_TP] * WEIGHTS[TP] df[TSI_TN] * WEIGHTS[TN] df[TSI_SD] * WEIGHTS[SD] df[TSI_COD] * WEIGHTS[COD]) return df3.3 智能分析与可视化输出import matplotlib.pyplot as plt def visualize_results(df): 生成专业级分析图表 plt.figure(figsize(12, 6)) # 各采样点TSI对比 plt.subplot(1, 2, 1) df.sort_values(TSI_Weighted).plot.bar( x采样点, yTSI_Weighted, colordf[TSI_Weighted].apply( lambda x: #1f77b4 if x30 else #2ca02c if x50 else #ffd700 if x60 else #ff7f0e if x70 else #d62728), axplt.gca() ) plt.title(各采样点TSI指数对比) # 参数贡献度分析 plt.subplot(1, 2, 2) contributions df[[TSI_TN,TSI_TP,TSI_Chla,TSI_COD,TSI_SD]].mean() contributions.plot.pie(autopct%1.1f%%) plt.title(各参数对富营养化的贡献比例) plt.tight_layout() return plt.gcf()4. 进阶应用构建自动化报告系统将上述技术整合为完整解决方案4.1 批处理脚本设计def generate_report(input_path, output_dir): 全自动报告生成流程 # 数据加载与计算 df load_and_clean_data(input_path) df TSI_Calculator.calculate_tsi(df) # 生成可视化图表 fig visualize_results(df) fig.savefig(f{output_dir}/tsi_analysis.png) # 输出Excel报告 with pd.ExcelWriter(f{output_dir}/TSI_Report.xlsx) as writer: df.to_excel(writer, sheet_name原始数据) # 添加分析结果页 summary df.describe().loc[[mean,min,max]] summary.to_excel(writer, sheet_name统计分析) print(f报告已生成至 {output_dir} 目录)4.2 典型应用场景示例# 实际调用示例 if __name__ __main__: # 处理单个湖泊数据 generate_report(input/东湖监测数据.xlsx, output) # 批量处理多个湖泊 for lake in [洞庭湖,鄱阳湖,太湖]: generate_report(finput/{lake}_data.xlsx, foutput/{lake})提示将此脚本部署为定期任务可实现监测数据的自动周报/月报生成5. 方案对比与选择建议两种技术路线的适用场景对比特性Excel方案Python方案学习曲线低适合基础用户中需要编程基础处理速度适用于1000条数据可轻松处理10万条数据灵活性公式修改直观算法调整更灵活可视化效果基础图表可定制专业级可视化自动化程度半自动全自动适用场景单次小规模分析定期大规模分析选择建议科研人员推荐Python方案便于方法迭代和复杂分析环保机构可开发基于Python的Web应用供非技术人员使用学生作业Excel方案更易上手适合课程小作业长期监测项目建议采用PythonAirflow构建自动化流水线