3、数据清洗与标准化:缺失值处理、异常值处理、物种名称标准化
数据清洗,说白了就是帮原始数据“排雷”。这一步做不好,后面多酷炫的模型都是白搭。我见过不少团队,分析报告写得天花乱坠,结果评审时被人指出数据有问题,只能灰溜溜回去返工。生态学的数据尤其麻烦——野外采样,不可控因素太多了。今天咱们就聚焦三个最让人头疼、但也最关键的环节:缺失值、异常值和物种名称标准化。
缺失值处理:先诊断,再下药
生态学野外数据,缺失值基本是常态。设备没电、天气突变、采样网格被动物破坏了……原因五花八门。
我的习惯是,拿到数据后不急着处理,先快速摸清缺失的底细。看看哪些变量缺失多,缺失有没有规律。
# R 语言快速诊断
library(skimr)
skim(data)
# 或者用 Python
# df.isnull().sum() / len(df)
处理策略呢,无非两大类:删除和插补。但什么时候删,什么时候补,这里头门道不少。
| 方法 | 适用场景 | 风险提示 |
|---|---|---|
| 行删除 | 缺失率低(<5%),且随机缺失 | 样本量骤减,破坏数据结构 |
| 均值/中位数填充 | 快速建模,对分布要求不高 | 人为压低方差,扭曲变量关系 |
| 多重插补 (MICE) | 缺失率较高,变量间有相关性 | 计算量大,需评估插补质量 |
| 模型预测值 | 变量间关系明确 | 容易过拟合,放大原有偏差 |
我个人比较偏爱 MICE,尤其在处理功能性状数据时。它能利用其他变量的信息来预测缺失值,最大程度保留性状之间的协变结构。不过要注意,不管用哪种方法,前提取決于你的数据是哪种缺失机制。
- 完全随机缺失 (MCAR): 比如仪器随机故障,这是最简单的。
- 随机缺失 (MAR): 比如浅层土壤的湿度数据更容易缺失,这跟观测值本身有关。
- 非随机缺失 (MNAR): 比如超出量程的数据,这最麻烦。
异常值检测:是错误,还是惊喜?
异常值,就是那些“格格不入”的观测值。但注意,它不等于错误值!
我之前处理一份鸟类体长数据,发现有几个数值特别大,远超正常范围。一开始差点直接删掉,后来一查原始记录,原来是不同观察者的测量习惯不同——有人喜欢拉直了量,有人顺着身体曲线量。这种情况,需要的是校正测量标准,而不是删除数据。
常用的检测方法,其实就那几样,但组合起来效果最好。
- Z-score: 超过 ±3 的通常视为异常。
- IQR(四分位距法): 低于 Q1-1.5IQR 或高于 Q3+1.5IQR 的。
- 可视化: 箱线图、散点图,一眼就能看出来。
# Python 用 IQR 方法检测
Q1 = df['trait_value'].quantile(0.25)
Q3 = df['trait_value'].quantile(0.75)
IQR = Q3 - Q1
outliers = df[(df['trait_value'] < Q1 - 1.5 * IQR) | (df['trait_value'] > Q3 + 1.5 * IQR)]
处理异常值,我一般走这个流程:先根据生态学知识初步判断,然后查看原始记录和采样日志,最后再决定是校正、转换还是保留并特殊标注。
物种名称标准化:生态学数据人的“噩梦”
这部分是生态学数据分析独有的麻烦。同一个物种,在不同年份、不同数据集、不同文献里,名字可能完全不同。
你想想看,Arabidopsis thaliana、Arabidopsis thaliana (L.) Heynh.,甚至有人拼错成 Arabidopsis thalania。系统眼里,这就是三个不同的东西。怎么合并?
我的标准流程分三步走:
- 字符串清洗: 去除空格、特殊字符,统一大小写。
- 模糊匹配: 用编辑距离(Levenshtein distance)归并拼写差异。
- 权威数据库解析: 调用 GBIF、ITIS 或 NCBI 的 API 进行匹配。
# R 语言调用 taxize 包解析物种名
library(taxize)
gnr_resolve(sci = "Arabidopsis thalania", data_source_ids = c(11, 12)) # 11=ITIS, 12=GBIF
# Python 调用 GBIF API
import requests
url = "https://api.gbif.org/v1/species/match"
params = {"name": "Arabidopsis thalania", "kingdom": "Plantae"}
response = requests.get(url, params=params)
print(response.json())
这里还有一个常见的坑:异名(Synonym)。比如某种植物被重新分类了,旧名字和新名字同时在用。这时候光靠模糊匹配不够,必须查权威数据库的同义词列表。我个人习惯定期从 IPNI(国际植物名称索引) 下载最新的名录进行比对。
嗯,说到这儿,这三板斧就介绍完了。数据清洗没有固定公式,但只要把握住“诊断 -> 处理 -> 验证”的闭环,就能让你的数据底子足够扎实,后续分析自然水到渠成。