2、环境数据类型与来源:气象数据、空气质量数据、水文数据、土壤数据、遥感数据
做环境数据可视化,第一步不是学工具,而是搞清楚——你手里拿到的数据到底是什么玩意儿?
我见过太多人,一上来就对着CSV文件猛画图,结果画出来的东西自己都解释不通。说白了,你不了解数据的脾气,工具再牛也白搭。
这一章,咱们就把环境数据的五大类型掰开揉碎讲清楚。每种数据长什么样、从哪来、有什么坑,我都会结合自己踩过的坑跟你聊。
核心观点:环境数据可视化不是「画图」,而是「翻译」。把物理世界的复杂现象,翻译成人眼能看懂的视觉语言。翻译的前提,是你得懂原文。
2.1 气象数据:最「老实」的数据类型
气象数据是我个人觉得最容易上手的环境数据。为什么?因为它规律性强,时间序列特征明显,而且公开数据源特别多。
常见指标:
- 温度:地表温度、近地面气温(2米高度)
- 湿度:相对湿度、绝对湿度
- 风速风向:平均风速、最大风速、主导风向
- 气压:海平面气压、站压
- 降水量:小时降水量、日累计降水量
我的经验:做气象数据可视化,最容易犯的错是「时间对齐」。不同站点的数据采样频率可能不一样——有的每小时一次,有的每三小时一次。我刚开始做全国气温分布图时,直接把不同频率的数据混在一起画,结果等温线图出现了诡异的「锯齿」。后来养成了习惯:先统一时间分辨率,再动手画图。
常见数据来源:
| 数据源 | 特点 | 获取方式 |
|---|---|---|
| 中国气象数据网 | 国内站点最全,历史数据可追溯 | API / 批量下载 |
| NOAA(美国海洋大气局) | 全球站点,格式标准 | FTP / API |
| ERA5 再分析数据 | 网格化数据,空间连续 | CDS API |
注意:再分析数据(如ERA5)是模型模拟出来的,不是实测值。做精度要求高的分析时,一定要用站点实测数据做验证。我曾经吃过这个亏——用ERA5数据做城市热岛分析,结果跟实测差了3度多。
2.2 空气质量数据:最「敏感」的数据类型
空气质量数据这几年特别火。为什么?因为它跟老百姓的生活直接相关。你想想看,每天打开手机看AQI指数的人,比看气温的人多多了。
核心指标:
- PM2.5 / PM10:颗粒物浓度,单位 μg/m³
- O₃:臭氧,夏季污染的主要元凶
- NO₂ / SO₂:气态污染物,主要来自工业排放
- CO:一氧化碳,交通排放的标志物
- AQI:空气质量指数,综合指标
我个人习惯把空气质量数据分成两类:「一次污染物」和「二次污染物」。一次污染物是直接排放的,比如汽车尾气里的NO₂。二次污染物是化学反应生成的,比如O₃。这个分类对可视化配色很有帮助——一次污染物用暖色,二次污染物用冷色,观众一眼就能区分。
避坑指南:我曾经做过一个全国AQI热力图,发现华北地区冬天一片红。乍一看以为是污染严重,后来才发现——是因为北方冬天供暖导致PM2.5飙升,但数据里没有区分「人为排放」和「自然背景」。所以做空气质量可视化时,一定要标注数据的时间背景和气象条件。
数据获取示例(Python):
import requests
import pandas as pd
# 从中国环境监测总站API获取实时数据
url = "https://air.cnemc.cn:18002/rest/api/v2/station/realTimeData"
params = {
"stationCode": "1001A", # 站点编码
"dataType": "hourly"
}
response = requests.get(url, params=params)
data = response.json()
# 转为DataFrame
df = pd.DataFrame(data['data'])
print(df[['time', 'pm25', 'pm10', 'o3', 'no2']].head())
2.3 水文数据:最「危险」的数据类型
水文数据,说白了就是跟水有关的一切数据。为什么说它「危险」?因为水文数据的变化往往意味着灾害——洪水、干旱、水质污染。做水文可视化,责任重大。
常见指标:
- 水位:河流、湖泊、水库的水面高度
- 流量:单位时间内通过断面的水量
- 水质参数:pH、溶解氧、氨氮、总磷
- 降水量:与气象数据重叠,但水文更关注径流响应
我的经验:水文数据最怕「断点」。河流水位数据经常因为传感器故障出现缺失。我建议拿到数据后,第一件事不是画图,而是做缺失值分析。如果缺失率超过20%,这个数据基本不能用。别问我怎么知道的——我有一整年的长江水位数据,因为传感器被船撞坏了,中间缺了三个月,最后只能重来。
数据来源对比:
| 数据源 | 覆盖范围 | 更新频率 | 数据质量 |
|---|---|---|---|
| 水利部水文局 | 全国主要河流 | 实时/每日 | 高(人工校核) |
| USGS(美国地质调查局) | 全球主要河流 | 15分钟/小时 | 高 |
| GRDC(全球径流数据中心) | 全球站点 | 月/年 | 中(历史数据) |
2.4 土壤数据:最「复杂」的数据类型
土壤数据是我觉得最难搞的。为什么?因为土壤是三维的——不仅有水平分布,还有垂直分层。而且土壤性质变化特别慢,一个地方的土壤数据可能十年都不变,但一旦变了就很难恢复。
核心参数:
- 物理性质:质地(砂/粉/黏)、容重、孔隙度
- 化学性质:pH、有机质、阳离子交换量
- 养分指标:氮、磷、钾含量
- 污染指标:重金属(镉、铅、砷等)
注意:土壤数据的空间分辨率差异巨大。全球尺度的土壤数据(如HWSD)分辨率只有1公里,而田间尺度的数据可以精确到米级。做可视化时,一定要在图上标注数据的分辨率,否则会误导观众。我记得有一次做全国土壤pH分布图,用了1公里分辨率的数据,结果被专家质疑「你这图连我们村那块地的酸碱度都看不出来」——嗯,确实看不出来。
2.5 遥感数据:最「大」的数据类型
遥感数据,说白了就是卫星拍的照片。但跟普通照片不一样,遥感影像有多个波段,每个波段记录不同的地表信息。
常见数据产品:
- Landsat:30米分辨率,16天重访周期,免费
- MODIS:250-1000米分辨率,每天覆盖,免费
- Sentinel-2:10米分辨率,5天重访周期,免费
- 高分系列:国产卫星,最高0.5米分辨率
常用遥感指数:
| 指数 | 公式 | 用途 |
|---|---|---|
| NDVI(归一化植被指数) | (NIR - Red) / (NIR + Red) | 植被覆盖度评估 |
| LST(地表温度) | 热红外波段反演 | 城市热岛监测 |
| NDWI(归一化水体指数) | (Green - NIR) / (Green + NIR) | 水体提取 |
核心建议:遥感数据最大的坑是「云覆盖」。一张卫星影像如果有超过30%的云,基本就是废片。我建议做时间序列分析时,先用云掩膜处理,再合成无云影像。Python里用rasterio或xarray都可以做,别偷懒。
2.6 数据获取的通用原则
讲了这么多数据类型,最后分享几个通用原则:
- 先看元数据:拿到数据后,第一件事是看说明文档。数据的时间范围、空间范围、采样方法、精度信息,全在元数据里。
- 做数据质量检查:缺失值、异常值、重复值,这些基础检查不能省。我一般用pandas的
describe()和info()快速过一遍。 - 保持数据溯源:每个数据文件都要记录来源和下载时间。别问我为什么强调这个——有一次我用了三个月前的数据做分析,结果发现数据源已经更新了,所有结论都得重来。
- 尊重数据版权:很多环境数据有使用限制,尤其是商业用途。用之前看清楚协议。
好了,这一章的内容就到这里。记住一句话:数据是可视化分析的基石。基石不稳,楼盖得再高也是危楼。下一章,咱们聊聊怎么把这些数据装进Python里,开始真正的可视化之旅。