裁剪到各省!全球/中国/各省降水数据集(1940-2024年)

 数据简介

       之前我们有分享过月度的平均降水量数据(见前文),今天我们分享的数据是全球/中国/分省年降水数据集,该数据集是基于之前的月度降水数据进行处理后得到的年度降水数据,包含全球从1940到2024年年度的降水数据,并且为了便于使用,我们将其裁剪为中国区域以及各个省的区域,方便大家研究使用。

     该数据集长达八十余年的连续记录为深入研究中国区域的降水长期变化规律、极端降水事件频率与强度的时空演变提供了核心数据支撑,对于解析全球变暖背景下中国气候响应特征、揭示区域水循环变化机制至关重要。该数据集能直接服务于中国水资源评估与管理、农业旱涝灾害风险预警、生态环境演变模拟以及重大水利工程的气候适应性研究等领域。其易用的Tif格式和中国边界裁剪极大提升了研究效率,为科学家精准评估气候变化对中国水资源安全的影响、支撑国家防灾减灾和水资源可持续利用战略提供了不可替代的高质量基础数据。

数据详情

数据来源:https://cds.climate.copernicus.eu/datasets/reanalysis-era5-single-levels-monthly-means?tab=download#area

数据时间:1940-2024

数据单位:米

数据精度:0.25°

数据频度:年

数据范围:全球/中国

数据格式:Tif

数据概览

该数据集包含从1940年到2024年逐年的全球/中国以及中国分省的栅格数据,概览如下:

图片

全球2004年降水栅格图

图片

中国2004年降水栅格图

图片

四川2004年降水栅格图

<think>好的,我现在需要帮助用户解决他们在处理.nc文件时遇到的KeyError: 'time'错误,并提供一个完整的脚本来计算陕西省降水量的95%百分位阈值。用户提到需要使用valid_time变量代替time变量进行操作,所以首先我得确认他们的数据中时间维度的名称是否为valid_time。 首先,回顾用户之前的问题,他们提供了多个.nc文件,路径是E盘下的shuju/ERA5目录,文件名涵盖2000到2025的数据。之前的回答中使用了xarray库来读取和处理这些数据,但在处理时间维度时假设变量名为'time',而用户现在遇到了KeyError,说明实际的时间变量名可能不同。用户明确指出需要使用valid_time代替time,这可能是因为ERA5数据中的时间维度名称是valid_time,而不是time。 接下来,我需要调整代码中的时间处理部分。首先,读取数据时可能需要指定时间变量为valid_time。但xarray的open_mfdataset函数通常会自动处理时间坐标,所以也可能需要检查数据集中时间维度的实际名称。此外,用户提到需要处理2000到2025的数据,但最后一个文件是202401-202504.nc,可能包含到20254月的数据,因此需要确保时间切片正确,只包括到202412月的数据,或者根据实际文件内容调整时间范围。 在数据预处理部分,用户需要筛选5月至9月的数据。原来的代码使用了shaanxi['time.month'].isin([5,6,7,8,9]),但现在时间变量名为valid_time,因此需要改为shaanxi['valid_time.month'].isin([5,6,7,8,9])。同时,在计算百分位数时,维度参数dim应改为valid_time而不是time。 另外,用户可能没有正确转换时间坐标,导致在筛选月份时出现错误。需要确保xarray能够正确解析valid_time为时间坐标。可能需要使用xarray的decode_cf参数或者在打开数据集时明确设置时间维度。 还可能存在的问题是数据合并时的对齐问题。当使用open_mfdataset合并多个文件时,如果每个文件的时间坐标不一致或存在重叠,可能会导致错误。需要检查合并后的数据集是否正确,时间维度是否正确对齐。 此外,用户可能需要处理降水变量的单位转换。假设变量'tp'的单位是米,需要转换为毫米,乘以1000,但需要确认数据集中'tp'的实际单位,避免错误转换。如果单位已经是毫米,则不需要转换,否则转换是必要的。 在验证结果时,用户可能需要可视化检查阈值的地理分布,确保计算结果的合理性。同时,保存结果到新的.nc文件时,要确保文件路径正确,具有写入权限。 最后,用户可能需要处理大数据量时的内存问题。如果数据集过大,可能需要分块处理或使用Dask来优化性能,但用户当前的问题主要是解决KeyError和正确计算百分位数,因此可能暂时不需要处理性能优化,但可以作为一个相关问题提及。 总结步骤: 1. 使用valid_time作为时间变量,调整所有涉及时间维度的代码部分。 2. 确保正确合并多个.nc文件,处理时间坐标。 3. 筛选5-9月的数据,并计算各站点的95%百分位数。 4. 处理可能的单位转换问题。 5. 验证结果并保存。</think>以下是针对`valid_time`变量调整后的完整解决方案,包含错误处理和计算逻辑: --- ### 完整脚本(解决KeyError问题) ```python import xarray as xr import numpy as np # ---------------------------- # 1. 数据读取与时间处理 # ---------------------------- file_paths = [ r'E:\shuju\ERA5\200001-200212.nc', r'E:\shuju\ERA5\200301-200512.nc', # ... 添加全部9个文件路径 r'E:\shuju\ERA5\202401-202504.nc' ] # 显式处理时间坐标 ds = xr.open_mfdataset( file_paths, combine='by_coords', decode_times=True, # 确保自动解析时间 chunks={'valid_time': 100} # 使用Dask分块处理大数据 ) # ---------------------------- # 2. 陕西省范围裁剪 # ---------------------------- shaanxi = ds.sel( longitude=slice(105.5, 111.2), latitude=slice(39.6, 31.7) # xarray纬度降序排列 ) # ---------------------------- # 3. 时间筛选关键步骤 # ---------------------------- # 验证时间变量名称 print("数据集维度:", shaanxi.dims) # 确认valid_time是否存在 # 创建时间筛选条件 time_filter = ( (shaanxi['valid_time.month'] >= 5) & (shaanxi['valid_time.month'] <= 9) & (shaanxi['valid_time.year'] >= 2000) & (shaanxi['valid_time.year'] <= 2024) # 数据截止到20244月 ) # 应用筛选 summer_precip = shaanxi['tp'].where(time_filter, drop=True) # ---------------------------- # 4. 计算95%百分位阈值 # ---------------------------- # 单位转换(ERA5降水单位通常是m) precip_mm = summer_precip * 1000 # 转换为毫米 # 分位数计算 threshold_95 = precip_mm.quantile( q=0.95, dim='valid_time', # 使用修正后的维度名称 skipna=True, interpolation='linear' ) # ---------------------------- # 5. 结果保存与验证 # ---------------------------- threshold_95.to_netcdf('Shaanxi_Extreme_Precip_Threshold.nc') # 快速验证 print("计算完成,示例阈值:\n", threshold_95.isel(latitude=10, longitude=10).values) ``` --- ### 关键修改说明 1. **时间维度修正**: - 使用`valid_time`替代原`time`维度[^1] - 通过`print(ds.dims)`验证维度名称 - 筛选逻辑使用`valid_time.month/year` 2. **内存优化**: - 添加`chunks`参数启用Dask分块计算 - 避免直接加载全部数据到内存 3. **时间范围修正**: - 由于最后一个文件截止到20254月,实际有效份为2000-2024 - 筛选条件调整为`valid_time.year <= 2024` --- ### 常见问题排查表 | 错误现象 | 解决方案 | |---------|----------| | `KeyError: 'valid_time'` | 检查原始数据维度名称,使用`ds.dims`确认实际时间维度名 | | 计算结果全为NaN | 检查降水变量名是否为`tp`,确认`.where(drop=True)`生效 | | 内存不足 | 减少`chunks`大小或使用`dask.distributed`集群 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值