我是一名環境工程師。因為工作上有很多數據彙整業務,半路出家學了 Python,想把那些重複性的 Excel 作業自動化。
一開始,我嘗試把線上課程學到的 Pandas 技巧,套用到政府公開資料(Open data)跟實驗室的檢測報告上。結果,我卻迎來了嚴重的撞牆期。
我發現,不是我的程式碼寫錯了,而是環境科學領域的數據,根本不符合主流資料科學課程裡那種「完美、隨機、常態分佈」的假設。在反覆踩雷後,我慢慢體悟到:我們在做的其實不是純粹的數據分析,而是「領域知識驅動的數據工程」。
總結這段時間,我在處理環境數據時觀察到的 4 個底層的認知差異:
1. 缺失值(Missing Values)本身就是一種物理資訊
在學資料清理時,遇到缺失值,我直覺的想法就是「補值」(平均值或0)。
但後來我才意識到,在環境檢測中,缺失值往往有明確的物理原因:暴雨導致感測器通訊中斷、溫度過低導致設備失效,或是檢測儀器正在進行定期的標準氣體校正。如果在暴雨期間的空白處,硬是補上前幾個小時的平均雨量或是0,會直接導致後續的評估完全失真。
在環境數據中,缺失的原因本身就是關鍵資訊,不能隨便亂補。
2. 異常值(Outliers)不是雜訊,是評估與工程的核心
環境數據的異常值可能是極端天氣(颱風)、工廠突發性排放超標,或是土地使用改變。如圖,若單看PM2.5變化可能會認為10/3空氣品質良好,比對風速、降水量及中央氣象署的資料可以發現當時有颱風侵襲,才導致PM2.5偏低;若把PM2.5數值極低或甚至出現未檢出的數據與風速、降水量的峰值刪除或用平均值取代,會使分析結果失真。
在環境影響評估中,背景調查中的最大值往往代表著該區域對污染的「涵容能力」,或是判定開發強度的容許閾值;同時,在環境品質數據的呈現也對於「數據是否具代表性」格外重視。而在環境工程設計的角度,極端值代表的是工程設計或設備的邊界條件。
若把這些極端值當成雜訊洗掉,等於洗掉了真實的環境風險。
3. 時間序列的非平穩性與地球科學週期
環境數據的時間序列具有強烈的地球科學週期性,氣溫、水質、空氣品質不僅受一年四季影響,還有日夜週期,甚至受季風與豐枯水期的干擾。這使得我一開始嘗試套用一般商業預測的時間序列模型時,跑出來的結果簡直慘不忍睹。處理這類數據,如果不把環境的週期特性作為特徵放進去,根本無法建立有意義的關聯。
4. 左側設限資料(Left-censored Data):化學分析的型別地獄
這是我在寫 script 時最頭痛的環節。當你在資料庫看到 <0.05,它不是缺失值,更不能單純當成字串處理。
| 標記 | 全名 | 物理意義 |
|---|---|---|
| ND | Not Detected | 未檢出,但不代表濃度是 0。 |
| MDL | Method Detection Limit | 儀器能可靠量測的最低極限。真實值存在,但小於這個數字。 |
Excel 會把 <0.05 當成字串而忽略。我一開始為了讓 Matplotlib 順利畫出折線圖,甚至寫過直接把它們轉成 0 或刪除的粗暴程式碼。後來才知道,這會嚴重破壞污染物的真實統計分佈,必須依據具體的環境場景進行合理轉換(例如替換為 1/2 MDL)。
寫在最後的請益
我們做這些數據處理,最終的輸出通常需要提送機關審查,方法必須有科學根據、符合法規,且能被稽核追溯。目前我正在嘗試把這些領域知識邏輯封裝成自動化的 python 清理模組。
如果你是熟悉資料工程的前輩,對於這類數據的架構設計有任何建議,非常歡迎留言交流!

Top comments (0)