宋盼盼,周 猛,肖 瑩
(湖北省孝感市水文水資源勘測局,湖北 孝感 432100)
水體營養(yǎng)狀態(tài)評價是地表水環(huán)境質(zhì)量評價的重要組成部分,是對水體富營養(yǎng)化發(fā)展過程中某一階段的營養(yǎng)狀況進行定量描述,通過對代表性指標(biāo)的監(jiān)測與調(diào)查,判定水體的營養(yǎng)狀態(tài),了解其富營養(yǎng)化進程及預(yù)測其發(fā)展趨勢,為水體水質(zhì)管理及富營養(yǎng)化防治提供科學(xué)依據(jù)[1]。其本質(zhì)是按照一定的標(biāo)準(zhǔn)和方法對水環(huán)境監(jiān)測數(shù)據(jù)進行加工處理,最終形成水體優(yōu)劣程度的評判結(jié)論。
長期以來,水體營養(yǎng)狀態(tài)評價主要借助于Microsoft Excel、WPS表格或SPSS等常規(guī)辦公軟件的數(shù)據(jù)處理功能。在具體執(zhí)行大批量運算時,對軟件運行環(huán)境、原始數(shù)據(jù)質(zhì)量和格式要求較高,尤其是處理大批量數(shù)據(jù)時效率較低且容易出錯,在實際使用中存在一定的局限性。
python是一種面向?qū)ο蟮慕忉屝缘挠嬎銠C程序設(shè)計語言,具有簡潔、易讀、易維護、免費開源、可移植性和可擴展性等特性。經(jīng)歷幾十年的發(fā)展,Python工具箱現(xiàn)已涵蓋數(shù)據(jù)爬蟲、數(shù)據(jù)分析、深度學(xué)習(xí)、人工智能和Web開發(fā)等技術(shù)的常用庫和外部工具,可廣泛應(yīng)用于各種交叉學(xué)科。近年來,python在水文分析計算、水資源水環(huán)境監(jiān)測與評價領(lǐng)域中應(yīng)用的案例不斷涌現(xiàn)[2-7],為水資源、水環(huán)境監(jiān)測與評價工作開辟了一條更加高效、便捷的途徑。筆者采用python語言設(shè)計一種可以應(yīng)用于水體營養(yǎng)狀態(tài)評價的數(shù)據(jù)處理系統(tǒng)具有一定的可行性和實用價值。
常用的水體營養(yǎng)狀態(tài)評價方法主要有營養(yǎng)狀態(tài)指數(shù)法(卡爾森營養(yǎng)狀態(tài)指數(shù)(TSI)[8]、修正的營養(yǎng)狀態(tài)指數(shù)(TSIM)[9]、綜合營養(yǎng)狀態(tài)指數(shù)(TLI)[10])、營養(yǎng)度指數(shù)法[11]、模糊聚類數(shù)學(xué)模型法[12]和評分法[13]等。筆者結(jié)合當(dāng)前水利系統(tǒng)水環(huán)境監(jiān)測與評價工作實際情況,水體營養(yǎng)狀態(tài)評價方案采用評分法。其主要依據(jù)為水利行業(yè)標(biāo)準(zhǔn)《地表水資源質(zhì)量評價技術(shù)規(guī)程》(SL 395—2007),其中湖泊營養(yǎng)狀態(tài)評價標(biāo)準(zhǔn)及分級方法源自中國科學(xué)院南京地理與湖泊研究所舒金華1990年提出的評分法[14]。
評分法是根據(jù)水體營養(yǎng)狀態(tài)相關(guān)評價因子和對應(yīng)的評價標(biāo)準(zhǔn),在0~100分的范圍內(nèi)分別賦予各評價參數(shù)相應(yīng)的分值,其分值與水體富營養(yǎng)化程度呈正相關(guān)。評價指標(biāo)為葉綠素a(chl-a)、總磷(TP)、總氮(TN)、透明度(SD)和高錳酸鹽指數(shù)(CODMn),其中葉綠素a(chl-a)為必評項目。依據(jù)水體營養(yǎng)狀態(tài)評價標(biāo)準(zhǔn),采用線性插值法將水質(zhì)項目濃度值轉(zhuǎn)換為賦分值,按公式(1)計算營養(yǎng)狀態(tài)指數(shù)EI,根據(jù)營養(yǎng)狀態(tài)指數(shù)確定營養(yǎng)狀態(tài)分級。水體營養(yǎng)狀態(tài)評價標(biāo)準(zhǔn)及分級方法見表1[15]。
表1 水體營養(yǎng)狀態(tài)評價標(biāo)準(zhǔn)及分級方法
(1)
式中,EI—營養(yǎng)狀態(tài)指數(shù);En—評價項目賦分值;N—評價項目個數(shù)。
利用python出色的數(shù)據(jù)處理能力可以完成對監(jiān)測數(shù)據(jù)的預(yù)處理,從原始監(jiān)測數(shù)據(jù)中提取出需要參評的數(shù)據(jù),然后依據(jù)水體營養(yǎng)狀態(tài)評價標(biāo)準(zhǔn)建立項目濃度值與賦分值的函數(shù)關(guān)系曲線方程,分別按照對應(yīng)的曲線方程進行賦值運算,再根據(jù)運算結(jié)果對樣品代表的水體進行分級評價,最后對必評項目“葉綠素a”是否參評進行自動復(fù)核,輸出營養(yǎng)狀態(tài)分級評價成果。本評價系統(tǒng)使用的所有數(shù)據(jù)文件均為.xlsx或.xls格式。水體營養(yǎng)狀態(tài)評價系統(tǒng)工作流程如圖1所示。
圖1 水體營養(yǎng)狀態(tài)評價系統(tǒng)工作流程
一般情況下,原始的水環(huán)境監(jiān)測數(shù)據(jù)包含的信息量較大,為方便后續(xù)數(shù)據(jù)處理,需篩選出水體營養(yǎng)狀態(tài)相關(guān)評價因子。使用pandas模塊提取文件“原始檢測數(shù)據(jù).xlsx”中的樣品信息(如“樣品編號”“樣品名稱”“采樣日期”等)和評價參數(shù)(“高錳酸鹽指數(shù)”“總磷”“總氮”“葉綠素a”“透明度”)等參評必要數(shù)據(jù),生成文件“水體營養(yǎng)狀態(tài)監(jiān)測成果.xlsx”。數(shù)據(jù)處理的主要代碼如下:
import pandas as pd
df=pd.read_excel('原始檢測數(shù)據(jù).xlsx')
df=df.reindex(columns=['樣品編號','樣品名稱',' 采樣日期','高錳酸鹽指數(shù)','總磷','總氮','葉綠素a','透明度'])
print(df)
df.to_excel('水體營養(yǎng)狀態(tài)監(jiān)測成果.xlsx',index=False)
根據(jù)水體營養(yǎng)狀態(tài)評價標(biāo)準(zhǔn)及分級方法表中“評價項目賦分值En”和各項指標(biāo)濃度值的對應(yīng)關(guān)系,可整理成五個獨立的分段函數(shù),分別表示葉綠素a(chl-a)、總磷(TP)、總氮(TN)、透明度(SD)、高錳酸鹽指數(shù)(CODMn)五項指標(biāo)的濃度值與賦分值En的函數(shù)關(guān)系。以葉綠素a(chl-a)和透明度(SD)2項為例,其關(guān)系曲線分別用python代碼表示如下:
#項目"葉綠素a"營養(yǎng)狀態(tài)指數(shù)分段函數(shù)
def Eutrophication_index_Chlorophyll_a(x):
if 0.000<=x<0.0005:
return 20000*x+0
elif 0.0005<=x<0.0010:
return 20000*x+0
elif 0.0010<=x<0.0020:
return 10000*x+10
elif 0.0020<=x<0.0040:
return 5000*x+20
elif 0.0040<=x<0.010:
return 5000/3*x+100/3
elif 0.010<=x<0.026:
return 625*x+175/4
elif 0.026<=x<0.064:
return 5000/19*x+1010/19
elif 0.064<=x<0.16:
return 625/6*x+190/3
elif 0.16<=x<0.40:
return 250/6*x+220/3
elif 0.40<=x<1.0:
return 50/3*x+250/3
elif x>=1.0:
return 100
else:
return ""
#項目"透明度"營養(yǎng)狀態(tài)指數(shù)分段函數(shù)
def Eutrophication_index_Transparency(x):
if x>=10:
return-2*x+30
elif 5.0<=x<10:
return-2*x+30
elif 3.0<=x<5.0:
return-5*x+45
elif 1.5<=x<3.0:
return-20/3*x+50
elif 1.0<=x<1.5:
return-20*x+70
elif 0.5<=x<1.0:
return-20*x+70
elif 0.4<=x<0.5:
return-100*x+110
elif 0.3<=x<0.4:
return-100*x+110
elif 0.2<=x<0.3:
return-100*x+110
elif 0.12<=x<0.2:
return-125*x+115
elif x<0.12:
return 100
else:
return ""
將3.1中提取的監(jiān)測數(shù)據(jù)分別帶入3.2中對應(yīng)的關(guān)系曲線,計算出各項指標(biāo)對應(yīng)的賦分值En和樣品所代表水體的營養(yǎng)狀態(tài)指數(shù)EI。主要代碼如下:
#分別計算各指標(biāo)富營養(yǎng)化指數(shù)En
d=pd.read_excel('水體營養(yǎng)狀態(tài)監(jiān)測成果.xlsx')
d['葉綠素a']=d['葉綠素a'].apply(lambda x:Eutrophication_index_Chlorophyll_a(x))
d['總磷']=d['總磷'].apply(lambda x:Eutrophication_index_TP_lake(x))
d['總氮']=d['總氮'].apply(lambda x:Eutrophication_index_TN_lake(x))
d['高錳酸鹽指數(shù)']=d['高錳酸鹽指數(shù)'].apply(lambda x:Eutrophication_index_CODmn(x))
d['透明度']=d['透明度'].apply(lambda x:Eutrophication_index_Transparency(x))
print(d)
d.to_excel('水體營養(yǎng)狀態(tài)評分.xlsx',index=False)
#計算參評項目賦分的平均值EI,結(jié)果保留2位小數(shù)
d=pd.read_excel('水體營養(yǎng)狀態(tài)評分.xlsx')
d['EI(營養(yǎng)狀態(tài)指數(shù))']=d.loc[:,['葉綠素a','總磷','總氮','高錳酸鹽指數(shù)','透明度']].mean(axis=1)
d=round(d,2)
print(d)
d.to_excel('水體營養(yǎng)狀態(tài)評分.xlsx',index=False)
按照水體營養(yǎng)狀態(tài)評價標(biāo)準(zhǔn)及分級方法,根據(jù)營養(yǎng)狀態(tài)指數(shù)EI確定水體營養(yǎng)狀態(tài)級別,生成“水體營養(yǎng)狀態(tài)評價結(jié)果.xlsx”。主要代碼如下:
def Eutrophication_index_grade(EI):
if 0<=EI<=20:
return "貧營養(yǎng)"
elif 20 return "中營養(yǎng)" elif 50 return "輕度富營養(yǎng)" elif 60 return "中度富營養(yǎng)" elif 80 return "重度富營養(yǎng)" else: return "" d=pd.read_excel('水體營養(yǎng)狀態(tài)評分.xlsx') d['營養(yǎng)狀態(tài)分級']=d[' EI(營養(yǎng)狀態(tài)指數(shù))'].apply(lambda x:Eutrophication_index_grade(x)) print(d) d.to_excel('水體營養(yǎng)狀態(tài)評價結(jié)果.xlsx',index=False) 根據(jù)SL 395—2007《地表水資源質(zhì)量評價技術(shù)規(guī)程》中5.1.2的規(guī)定,“葉綠素a”為必評項目,即“葉綠素a”是否參評直接決定評價結(jié)果是否有效。因此,須對項目“葉綠素a”的參評情況進行復(fù)核。如未參評,應(yīng)標(biāo)注提示信息“葉綠素a未參評!”。必評指標(biāo)復(fù)核的代碼如下: def check_Chlorophyll_a(x): if x>=0: return "" else: return "葉綠素a未參評!" d=pd.read_excel('水體營養(yǎng)狀態(tài)評價結(jié)果.xlsx') print(d) d['必評項目復(fù)核']=d['葉綠素a'].apply(lambda x:check_Chlorophyll_a(x)) print(d) d.to_excel('水體營養(yǎng)狀態(tài)評價結(jié)果.xlsx',index=False) 為實現(xiàn)評價功能可在任何其他未安裝python軟件的PC上正常運行,可使用auto-py-to-exe工具可將寫好的python代碼打包成可執(zhí)行文件“水體營養(yǎng)狀態(tài)評價系統(tǒng).exe”。將待測數(shù)據(jù)文件“原始檢測數(shù)據(jù).xlsx”(數(shù)據(jù)量為10000個樣本)置于可執(zhí)行程序所在的文件夾,運行“水體營養(yǎng)狀態(tài)評價系統(tǒng).exe”后,分別生成“水體營養(yǎng)狀態(tài)監(jiān)測成果.xlsx”“水體營養(yǎng)狀態(tài)評分.xlsx”和“水體營養(yǎng)狀態(tài)評價結(jié)果.xlsx”3個xlsx格式文件,軟件運行用時約25s。為驗證評價的有效性,同時采用傳統(tǒng)的excel、wps等軟件的函數(shù)功能按照線性插值法對案例中部分樣品進行營養(yǎng)狀態(tài)評分和分級評價。結(jié)果顯示:其評分和分級評價結(jié)果與python代碼運行結(jié)果完全一致,分級評價結(jié)果亦完全吻合。水體營養(yǎng)狀態(tài)評價系統(tǒng)測試結(jié)果見表2—4。 表2 水體營養(yǎng)狀態(tài)監(jiān)測成果 表3 水體營養(yǎng)狀態(tài)評分 表4 水體營養(yǎng)狀態(tài)評價結(jié)果 利用python語言將水體營養(yǎng)狀態(tài)評價方法設(shè)計成能在多種平臺上運行的水體營養(yǎng)狀態(tài)評價系統(tǒng),體現(xiàn)了水環(huán)境評價與計算機程序設(shè)計學(xué)科交叉融合的可行性?;趐ython語言設(shè)計的水體營養(yǎng)狀態(tài)評價系統(tǒng)可以在很大程度上彌補常規(guī)辦公軟件在數(shù)據(jù)處理方面的不足,尤其是在處理海量的水環(huán)境監(jiān)測數(shù)據(jù)時,python語言具有更加便捷、高效、準(zhǔn)確的優(yōu)點,在實際的水環(huán)境質(zhì)量評價工作中具有較高的應(yīng)用價值。3.5 必評指標(biāo)復(fù)核
4 典型案例的測試
5 結(jié)語