Py学习  »  Python

气象编程 | Python批量下载CMORPH降雨数据

气象学家 • 2 年前 • 1229 次点击  

CMORPH介绍

CMORPH是由美国气候预测中心(Climate Prediction Center, CPC)在多种微波降水数据和红外数据的基础上研制的全球高时空分辨率降水数据,适用于研究从中尺度到年际范围内的降水及其时空变化。

该数据的生成算法为:将多个卫星的红外观测资料生成降水事件发生的运动矢量,对低轨卫星被动微波反演而得的瞬时降水分布沿着该运动矢量推至目标时间以得到空间连续的降水分布。利用SSM/I算法、AMSU-B算法和TMI算法对微波降水算法的估计进行结合,这种方法较为灵活,任何微波来源的降水估计都可以被纳入其中。

CMORPH日数据下载地址:https://www.ncei.noaa.gov/data/cmorph-high-resolution-global-precipitation-estimates/access/daily/0.25deg

Image Name

导入模块

import re
from bs4 import BeautifulSoup
import urllib.request
import os

下载脚本

for year in range(2008,2009):
    os.mkdir('/home/mw/work/'+str(year))
    for month in range(1,2):
        url = 'https://www.ncei.noaa.gov/data/cmorph-high-resolution-global-precipitation-estimates/access/daily/0.25deg/'+str(year) + "/" + str(month).zfill(2) +"/"
        print(url)
        my_url = urllib.request.urlopen(url).read().decode('ascii')
        soup = BeautifulSoup(my_url,'html.parser')
        url_list = soup.find_all(href=re.compile(".nc")) #根据目标文件的格式更改后缀
        urls = []
        for i in url_list[0:]:
            urls.append(url+i.get('href'))  
        for i, url in enumerate(urls):
            file_name = str(year) + '/' + url.split('/')[-1#保存数据的路径
            if os.path.isfile(file_name):
                print('已存在', file_name)
            else:
                urllib.request.urlretrieve(url, '/home/mw/work/'+file_name)
                print('正下载', file_name)

数据下载结果

!ls /home/mw/work/2008
CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080101.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080102.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080103.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080104.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080105.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080106.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080107.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080108.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080109.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080110.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080111.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080112.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080113.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080114.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080115.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080116.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080117.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080118.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080119.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080120.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080121.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080122.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080123.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080124.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080125.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080126.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080127.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080128.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080129.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080130.nc

CMORPH_V1.0_ADJ_0.25deg-DLY_00Z_20080131.nc
import xarray as xr

ds = xr.open_mfdataset('/home/mw/work/2008/*.nc')
ds


Dimensions: (time: 31, nv: 2, lat: 480, lon: 1440)
Coordinates:
  • time (time) datetime64[ns] 2008-01-01 2008-01-02 ... 2008-01-31
  • lat (lat) float32 -59.88 -59.62 -59.38 -59.12 ... 59.38 59.62 59.88
  • lon (lon) float32 0.125 0.375 0.625 0.875 ... 359.4 359.6 359.9
    Dimensions without coordinates: nv
    Data variables:
    time_bounds (time, nv) datetime64[ns] dask.array
    lat_bounds (time, lat, nv) float32 dask.array
    lon_bounds (time, lon, nv) float32 dask.array
    cmorph (time, lat, lon) float32 dask.array
    Attributes: (12/57)
    ncei_template_version: NCEI_NetCDF_Grid_template_V2.0
    title: NOAA Climate Data Record (CDR) of CPC Morphin...
    keywords: Precipitation, Satellite, High-Resolution, Gl...
    summary: The CMORPH CDR is a reprocessed and bias-corr...
    references: Xie, P., et al. (2017), Reprocessed, Bias-Cor...
    Conventions: CF-1.6, ACDD-1.3
    ... ...
    geospatial_lat_resolution: 0.25
    geospatial_lat_units: degrees_north
    geospatial_lon_min: 0.0
    geospatial_lon_max: 360.0
    geospatial_lon_resolution: 0.25
    geospatial_lon_units: degrees_east
# 2008年1月平均降雨量
ds.cmorph.mean(dim='time').plot()

代码获取

1. 在好奇心Log公众号后台回复CMORPH

2. 本文已经在和鲸社区同步发布,欢迎大家直接Fork运行。https://www.heywhale.com/mw/project/64477933f0879b1b4a51ae0c?shareby=5f27fd9633e1be002cc65a1d#



-----广告赞助商-----







声明:欢迎转载、转发本号原创内容,可留言区留言或者后台联系小编(微信:gavin7675)进行授权。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及作品内容、版权和其他问题,请后台联系小编处理。


往期推荐

 获取ERA5-Land陆面高分辨率再分析数据(32TB)

 1942-2022年中国地面气象站观测数据免费分享

 获取全球GPM降水数据,半小时/逐日(4TB)

 获取1998-2019 TRMM 3B42逐日降水数据

★ 获取最新版本CMIP6降尺度数据集30TB

★ 获取ERA5常用变量再分析数据26TB

 EC数据商店推出Python在线处理工具箱

★  EC打造实用气象Python工具Metview

★ 机器学习简介及在短临天气预警中的应用

★ Nature-地球系统科学领域的深度学习及理解

★ 采用神经网络与深度学习来预报降水、温度

★ 灵魂拷问:ChatGPT对气象人的饭碗是福是祸?

★  气象局是做啥的?气象局的薪水多少?

★ 一位气象学家尝试ChatGPT复现Nature子刊的研究,他真的会面临失业吗?!


   欢迎加入气象学家交流群   

请备注:姓名/昵称-单位/学校-研究方向




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/154194