前言

SCI论文返修,审稿人质疑我用的CHIRPS数据集在中国的质量不行。由于之前下载的MSWEP数据不在手边,于是我开发了 sysumkit 包,可以直接下载 IMERG 和 GSMaP数据集。相信做地学或者环境研究的人,找不到高质量的降水数据集肯定都会很难受,相信这篇推文和 sysumkit 包一定能帮到有需要的朋友!
PS:本篇如果能帮到大家,希望各位给GitHub仓库点个Star,谢谢哈!
诞生由来
好消息,论文写的有机会出版;坏消息,CHIRPS数据集质量太差。
小问题,我换套数据集呗。相信咱的算法换种数据集照样效果好!

sysumkit 安装及使用
下载:https://github.com/Curallin/sysumkit/tree/main
安装
下载 .whl 文件,激活目标 Python 环境。
执行 pip install whl文件

使用conda激活环境安装whl包
IMERG数据环境配置
IMERG数据集下载需要进行必要的配置,请参阅官方文档https://urs.earthdata.nasa.gov/profile
如果不明白怎么配置,可以参考往期付费推文https://mp.weixin.qq.com/s/FNDrmp9tZiYWWcVpAahsjw ,一顿饭钱感谢各位老板!
from precipkit.download import configure_earthdataconfigure_earthdata()

调用ImergDownloader模块下载IMERG数据
前往IMERG官网,筛选数据、获取下载链接:https://disc.gsfc.nasa.gov/datasets/GPM_3IMERGDF_07/summary?keywords=IMERG

筛选数据、点击Get Data获取下载链接
from sysumkit.download.imerg import ImergDownloader# 1. 下载dl = ImergDownloader(links_txt=下载链接地址,output_folder=输出目标文件夹,organize_by_date=True,)dl.download()# 2. 删除不完整的文件 这里设置为小于5MB的文件【这一步要小心,先确认正常文件大小是多少】dl.check_incomplete_files(min_size_mb=5)# 3. 重试失败(可选)dl.retry_failed(max_retries=3)
如图,已经进入下载,支持断点继续下载,代码会自动跳过已经存在的文件。同时,可以使用check_incomplete_files 把下载不完整的文件删除,使用 retry_failed 可以下载没有成功下载下来的数据。

调用GsmapDownloader模块下载GSMaP数据
GSMaP 数据下载是用固定的FTP账户密码端口,我已经在代码中写死,无需配置。
base_dir 指的是下载的产品,当前支持的是 V8最新版本 日尺度数据下载,如果需要其他版本的,可以参考源码进行更改。
start_mon, end_mon:起止年月
target: 输出文件夹
variable: 输出数据的变量名
【关键】GsMaP数据提供的原始数据是.gz文件,并且读取后单个文件的数据只有一行,需要进行转换,这里我查了相关资料,直接把转换成nc数据的逻辑写好了,可以直接使用dl.gz_to_nc()就可以把下载的数据全部转换为xarray正常读取的nc文件。
from sysumkit.download.gsmap import GsmapDownloader# 1. 初始化下载器dl = GsmapDownloader(base_dir='/standard/v8/daily_G/00Z-23Z/',start_mon='202607',end_mon='202607',target=r'D:\GSMaP',variable='precip')# 2. 执行下载dl.download()# 3. 如果有失败,重试dl.retry_failed(max_retries=3)# 4. 转换为 NCdl.gz_to_nc()
合并数据集
由于日数据是按照: 根目录>年>月>YYYYMMDD.nc来组织文件夹和文件的,因此我们可以轻松实现合并任意时间范围、矩形区域内的数据
合并 IMERG 数据集
from sysumkit.download import IMERGAdapter, BasePrecipMerger# 数据适配器dataset = IMERGAdapter(root=r"D:/IMERG")# 数据合并器merger = BasePrecipMerger(adapter=dataset,start_date="20200101",end_date="20201231",lat_range=(20, 30),lon_range=(100, 120))# 合并并保存merger.merge(r"D:/IMERG/IMERG.nc")


合并 GsMaP 数据集
from sysumkit.download import GSMaPAdapter, BasePrecipMergerimport xarray as xr# 数据适配器dataset = GSMaPAdapter(root=r"D:/GSMaP")# 数据合并器merger = BasePrecipMerger(adapter=dataset,start_date="20260701",end_date="20260727",lat_range=(0, 60),lon_range=(70, 140))# 合并并保存merger.merge(r"D:/GSMaP/GSMaP.nc")ds = xr.open_dataset(r"D:/GSMaP/GSMaP.nc")ds.mean(dim='time').precip.plot()

未完待续
后续继续开发工具模块,目前自己有很多降水相关的统计算法、地理绘图代码,有时间会慢慢纳入~

欢迎加入 Python科研AI交流群:428657886
视频介绍

点个喜欢吧