当前位置: 首页 > news >正文

10分钟掌握CNEnvAir环境空气质量数据读取:Python实用代码示例

10分钟掌握CNEnvAir环境空气质量数据读取:Python实用代码示例

【免费下载链接】CNEnvAir项目地址: https://ai.gitcode.com/GewisLab/CNEnvAir

想要快速上手中国环境空气质量数据读取吗?GewisLab/CNEnvAir数据集为您提供了完整的环境空气污染数据解决方案,包含高分辨率空气质量网格数据、城市监测数据和气象再分析数据。无论您是环境科学研究者、数据分析师还是GIS专业人士,这篇快速指南将帮助您在10分钟内掌握CNEnvAir数据读取的核心技巧!🚀

📊 CNEnvAir数据集概览

CNEnvAir是中国环境空气数据集,专门为少样本空气污染源解析研究设计。数据集包含四大核心模块:

数据集数据格式时间范围主要用途
CHAP高分辨率空气质量数据NetCDF (.nc)2019-2024全国范围污染物浓度网格分析
CN-air城市监测数据Parquet (.parquet)2019-2024城市级空气质量趋势分析
源成分谱数据Parquet (.parquet)-污染源解析模型输入
ERA5-GEE气象数据GeoTIFF (.tif)2019-2024气象条件与污染关联分析

🚀 环境准备与快速安装

一键克隆数据集仓库

git clone https://gitcode.com/GewisLab/CNEnvAir.git cd CNEnvAir

Python依赖库安装

pip install xarray pandas rasterio netCDF4 pyarrow

🔍 四种数据格式的读取方法

方法一:CHAP NetCDF数据读取

CHAP数据集提供0.01°高分辨率空气质量月均值数据,包含PM2.5、PM10、CO、SO₂、NO₂、O₃六种污染物。

import xarray as xr # 读取PM2.5数据 ds = xr.open_dataset("CHAP/CHAP_PM25_NC/CHAP_PM2.5_M1K_201901_V4.nc") pm25_data = ds["PM2.5"].values print(f"数据维度: {pm25_data.shape}") print(f"经度范围: {ds.lon.values.min():.2f} - {ds.lon.values.max():.2f}°E") print(f"纬度范围: {ds.lat.values.min():.2f} - {ds.lat.values.max():.2f}°N")

关键参数说明

  • lat: 3571个纬度点 (17.97°N - 53.67°N)
  • lon: 6148个经度点 (73.46°E - 134.93°E)
  • 数据单位: μg/m³

方法二:CN-air Parquet数据读取

城市空气质量监测数据采用Parquet列式存储,压缩率高,读取速度快。

import pandas as pd # 读取2019年城市空气质量数据 df = pd.read_parquet("CN-air/城市_20190101-20191231.parquet") print(f"数据行数: {len(df)}") print(f"数据列数: {len(df.columns)}") print("\n前5行数据预览:") print(df.head()) # 查看数据结构 print("\n数据列信息:") for col in df.columns: print(f" - {col}")

数据字段包含:城市、日期、AQI、PM2.5、PM10、SO₂、NO₂、CO、O₃等关键指标。

方法三:源成分谱数据读取

源成分谱数据用于PMF/CMB等源解析模型,包含工业燃烧、民用燃烧、移动源等多种污染源类型。

import pandas as pd # 读取工业锅炉PM源谱数据 profile_df = pd.read_parquet("source_profiles/PM_source_Industrial_boiler.parquet") print("源成分谱数据结构:") print(profile_df.info()) # 查看污染物组分 print("\n污染物组分示例:") print(profile_df["组分"].unique()[:10])

方法四:ERA5气象数据读取

气象再分析数据采用GeoTIFF格式,便于GIS分析和空间可视化。

import rasterio import numpy as np # 读取2019年1月气象数据 with rasterio.open("era5_gee/era5_201901.tif") as src: # 读取所有波段数据 data = src.read() # 获取元数据 print(f"数据形状: {data.shape}") print(f"坐标系: {src.crs}") print(f"空间范围: {src.bounds}") print(f"分辨率: {src.res}") # 获取各个波段信息(气温、露点温度、风速等) for i in range(1, src.count + 1): band_data = src.read(i) print(f"波段{i} - 最小值: {band_data.min():.2f}, 最大值: {band_data.max():.2f}")

📈 实用数据处理技巧

技巧一:批量读取多个月份数据

import glob import xarray as xr # 批量读取2020年所有月份的PM2.5数据 pm25_files = glob.glob("CHAP/CHAP_PM25_NC/CHAP_PM2.5_M1K_2020*.nc") datasets = [xr.open_dataset(f) for f in sorted(pm25_files)] combined_ds = xr.concat(datasets, dim="time") print(f"合并后数据时间维度: {len(combined_ds.time)}个月")

技巧二:数据筛选与子集提取

# 提取特定城市数据 beijing_data = df[df["城市"] == "北京市"] print(f"北京市数据记录数: {len(beijing_data)}") # 提取特定时间段数据 spring_2020 = df[(df["日期"] >= "2020-03-01") & (df["日期"] <= "2020-05-31")] print(f"2020年春季数据记录数: {len(spring_2020)}")

技巧三:空间区域数据提取

# 提取京津冀地区数据 jjj_cities = ["北京市", "天津市", "石家庄市", "唐山市", "秦皇岛市"] jjj_data = df[df["城市"].isin(jjj_cities)] print(f"京津冀地区数据记录数: {len(jjj_data)}") # 按城市分组统计 city_stats = jjj_data.groupby("城市")["PM2.5"].agg(["mean", "max", "min"]) print("\n京津冀城市PM2.5统计:") print(city_stats)

🎯 数据质量控制建议

1. 缺失值处理

# 检查数据完整性 missing_percent = df.isnull().sum() / len(df) * 100 print("各字段缺失值比例:") print(missing_percent[missing_percent > 0]) # 填充或删除缺失值 df_clean = df.dropna(subset=["PM2.5", "AQI"]) # 删除关键指标缺失的行

2. 异常值检测

# 检测PM2.5异常值(通常>500μg/m³为异常) pm25_outliers = df[df["PM2.5"] > 500] print(f"PM2.5异常值数量: {len(pm25_outliers)}") # 检测负值(物理上不可能) negative_values = df[df["PM2.5"] < 0] print(f"PM2.5负值数量: {len(negative_values)}")

3. 数据一致性验证

# 验证时间序列连续性 df["日期"] = pd.to_datetime(df["日期"]) date_range = pd.date_range(start=df["日期"].min(), end=df["日期"].max(), freq="D") missing_dates = date_range.difference(df["日期"]) print(f"缺失日期数量: {len(missing_dates)}")

💡 高级应用场景

场景一:污染源解析研究

# 结合源成分谱进行源解析 import pandas as pd # 读取多种源成分谱 industrial_sources = pd.read_parquet("source_profiles/工业燃烧源/*.parquet") vehicle_sources = pd.read_parquet("source_profiles/道路移动源/*.parquet") residential_sources = pd.read_parquet("source_profiles/民用燃烧源/*.parquet") print("可用于源解析的污染源类型:") print(f"- 工业燃烧源: {len(industrial_sources)}个样本") print(f"- 道路移动源: {len(vehicle_sources)}个样本") print(f"- 民用燃烧源: {len(residential_sources)}个样本")

场景二:气象-污染关联分析

# 结合气象数据与空气质量数据 import xarray as xr import pandas as pd # 读取同期气象数据 weather_ds = xr.open_dataset("era5_gee/era5_201901.tif") air_quality_ds = xr.open_dataset("CHAP/CHAP_PM25_NC/CHAP_PM2.5_M1K_201901_V4.nc") print("气象与空气质量数据空间对齐:") print(f"气象数据分辨率: {weather_ds.res}") print(f"空气质量数据分辨率: {air_quality_ds.res}")

📋 数据读取最佳实践

1. 内存优化技巧

# 使用分块读取大文件 chunk_size = 100000 # 每次读取10万行 chunks = pd.read_parquet("CN-air/城市_20190101-20191231.parquet", chunksize=chunk_size) for chunk in chunks: # 处理每个数据块 process_chunk(chunk)

2. 数据缓存策略

import joblib from functools import lru_cache @lru_cache(maxsize=10) def load_cached_data(file_path): """缓存最近加载的10个数据文件""" if file_path.endswith('.nc'): return xr.open_dataset(file_path) elif file_path.endswith('.parquet'): return pd.read_parquet(file_path) else: raise ValueError(f"不支持的文件格式: {file_path}")

3. 并行读取加速

from concurrent.futures import ThreadPoolExecutor import glob def read_single_file(file_path): if file_path.endswith('.nc'): return xr.open_dataset(file_path) elif file_path.endswith('.parquet'): return pd.read_parquet(file_path) # 并行读取多个文件 file_list = glob.glob("CHAP/CHAP_PM25_NC/CHAP_PM2.5_M1K_2020*.nc") with ThreadPoolExecutor(max_workers=4) as executor: results = list(executor.map(read_single_file, file_list))

🚨 常见问题与解决方案

Q1: 内存不足如何处理大型NetCDF文件?

解决方案: 使用xarray的分块读取功能

# 仅读取数据子集 ds = xr.open_dataset("large_file.nc", chunks={"lat": 100, "lon": 100}) subset = ds.sel(lat=slice(30, 40), lon=slice(110, 120))

Q2: Parquet文件读取速度慢怎么办?

解决方案: 指定需要的列,避免读取全部数据

# 只读取需要的列 columns = ["城市", "日期", "PM2.5", "AQI"] df = pd.read_parquet("CN-air/城市_20190101-20191231.parquet", columns=columns)

Q3: 如何验证数据完整性?

解决方案: 使用数据校验函数

def validate_data_quality(df): """验证数据质量""" checks = { "总行数": len(df), "缺失值比例": df.isnull().mean().mean(), "重复行数": df.duplicated().sum(), "日期范围": (df["日期"].min(), df["日期"].max()) } return checks

🎉 总结与下一步

通过本文的10分钟快速指南,您已经掌握了CNEnvAir环境空气质量数据集的四种核心数据读取方法。从NetCDF网格数据到Parquet表格数据,从GeoTIFF气象数据到源成分谱数据,您现在可以:

快速上手:掌握四种数据格式的基本读取方法
高效处理:学会批量读取、筛选和验证数据
实战应用:了解污染源解析和气象关联分析场景
优化性能:应用内存优化和并行读取技巧

下一步建议

  1. 探索数据可视化:将读取的数据转换为地图或时间序列图表
  2. 进行统计分析:计算污染物时空分布特征
  3. 构建预测模型:基于历史数据训练空气质量预测模型
  4. 参与开源贡献:向CNEnvAir项目提交数据质量改进建议

记住,数据读取只是环境数据分析的第一步。掌握了这些基础技能后,您可以进一步探索数据背后的环境科学故事!🌍

温馨提示: 使用CNEnvAir数据集时,请务必遵守数据使用协议,并在研究成果中正确引用数据来源。

【免费下载链接】CNEnvAir项目地址: https://ai.gitcode.com/GewisLab/CNEnvAir

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/956455/

相关文章:

  • Path of Building PoE2终极指南:从新手到构建大师的完整蜕变
  • 减肥糕点推荐:为什么越来越多人选择杨先生糕点? - 玖叁鹿
  • linux通过nvm安装node
  • macOS防火墙LuLu终极指南:三小时掌握开源防火墙的完整实战配置
  • 2026最新最全国内大厂Java面试高频题库!
  • 别再用PyCharm硬扛大图拼接了!实测IDLE内存占用减半,轻松搞定PIL的DecompressionBombWarning
  • 网传挖漏洞月入两万是陷阱?一文分清真副业和杀猪盘
  • VideoEnabledWebView:终极Android WebView HTML5视频解决方案完全指南
  • Illustrator脚本合集终极指南:如何用免费工具提升10倍设计效率
  • 5大核心功能解密:novelWriter如何成为小说创作的专业工具
  • 如何高效使用Akagi麻将AI助手:提升雀魂技巧的终极指南
  • AI Agent赋能达人建联自动化:从数据到精准合作的智能升级之路
  • 如何实现语言驱动的零样本目标检测:GroundingDINO架构深度解析
  • 2026山西晋城装修设计公司哪家好|晋城装修公司与家装设计服务商甄选参考 - 深度智识库
  • 企微二次开发:如何用实现外部群消息的主动推送与高效调度?
  • 终极部署指南:如何快速上手Qwen2.5-14B大语言模型
  • 5分钟快速上手:Kronos金融AI预测模型如何像预测语言一样预测市场走势
  • 5步实现小爱音箱智能音乐中心:Xiaomusic终极配置指南
  • 电子元器件分销商如何构建反脆弱业务体系:七条实战策略
  • 年会现场照片滚动抽奖工具(C# WinForms可执行源码,含音效与中奖管理)
  • 从TDS兼容到多模芯片:海思收购传闻背后的通信产业博弈
  • 惠普OMEN笔记本性能控制终极指南:3步掌握OmenSuperHub开源工具
  • OpenMV物品识别(以网球为例、模型训练)
  • 利用AI辅助生成符合UI设计规范的自动化设计稿流程
  • 深度解析STM32高精度温度控制系统:5种优化策略与3个关键技巧
  • SamLowe/roberta-base-go_emotions:终极情感分析模型,28种情绪精准识别指南
  • iPhone 5延期背后:一体化金属与In-Cell屏幕的供应链良率挑战
  • al-baka-llama3-8b-experimental:基于Llama3-8B的阿拉伯语AI模型完整指南 [特殊字符]
  • 打造高效美观的Obsidian主页:3步构建你的专属知识管理中心
  • CH32V208GBU6沁恒GPIO:中断一定要声明interrupt;动态开关管脚的中断功能