1.Global Precipitation Climatology Project (GPCP) 数据介绍
GPCP:(Global Precipitation Climatology Project,全球降水气候计划), 是由Global Precipitation Climatology Center(全球降水气候研究项目)综合了数十颗静止卫星和极轨卫星的红外和微波资料并经过全球多个台站数据校正后的卫星降水产品。数据作为热带地区降水研究的“准资料”历经几十年不断的改进与完善,目前已是version 2.3。
1)时间分辨率:从1979/01到2021年10月;
2)空间分辨率:2.5°纬度x 2.5°经度全球网格;88.75N - 88.75S, 1.25E - 358.75E;
2.数据下载
下载链接:https://www.ncei.noaa.gov/access/metadata/landing-page/bin/iso?id=gov.noaa.ncdc:C00979
或https://psl.noaa.gov/data/gridded/data.gpcp.html
数据下载步骤:
1)打开链接:http://eagle1.umd.edu/GPCP_ICDR/
2)下载历史数据
3.数据处理
数据格式:netCDF-4
- NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。
- 从数学上来说,netcdf存储的数据就是一个多自变量的单值函数。用公式来说就是f(x,y,z,…)=value;
函数的自变量x,y,z等在netcdf中叫做维(dimension) 或坐标轴(axix);
函数值value在netcdf中叫做变量(Variables).
利用NetCDF可以对网络数据进行高效地存储、管理、获取和分发等操作。由于其灵活性,能够传输海量的面向阵列(array-oriented)数据,目前广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。
4.python读取数据与显示
Python读取NetCDF文件可以选择安装NetCDF4或者xarray工具包,这里安装NetCDF4。
(1)pip 安装NetCDF包pip install netCDF4
(2)读取nc文件
from netCDF4 import Dataset
nc_path = "D:/data/gpcp/2010/gpcp_v02r03_monthly_d201001_c20170616.nc"
nc=Dataset(nc_path)
print(nc.variables.keys())
# print(nc.variables['precip']) #查看某个变量的信息
# print(nc.variables['precip'].ncattrs()) #查看变量的属性信息
data = nc.variables['precip'][:] #读取变量的数据值
print(data)
GPCP关键字包括:dict_keys([‘latitude’, ‘longitude’, ‘time’, ‘lat_bounds’, ‘lon_bounds’, ‘time_bounds’, ‘precip’, ‘precip_error’])
(3)提取需要的字段,并可视化
1)可视化需要安装basemap:conda install basemap
报错:
python版本不满足条件,需要根据自己电脑配置下载对应版本的basemap,我的电脑配置win10,64位,python3.8.
去官网下载basemap安装包、pyproj:http://link.zhihu.com/?target=https%3A//www.lfd.uci.edu/~gohlke/pythonlibs/
下载完成后,重新安装(注意首先安装pyproj):
注意:先用cd定位到下载插件的位置,然后pip isntall + 完整的文件名(包括后缀),如pip install basemap-1.2.2-cp38-cp38-win_amd64.whl
安装成功后直接调用包。
2)可视化降雨数据
导入包:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
读取经纬度、降雨量信息:
nc_path = "D:/data/gpcp/2010/gpcp_v02r03_monthly_d201001_c20170616.nc"
fh=Dataset(nc_path,mode='r')
# 获取每个变量的值
lons = fh.variables['longitude'][:]
lats = fh.variables['latitude'][:]
precip = fh.variables['precip'][:]
precip_units = fh.variables['precip'].units
# 经纬度平均值
lon_0 = lons.mean()
lat_0 = lats.mean()
m = Basemap(lat_0=lat_0, lon_0=lon_0)
lon, lat = np.meshgrid(lons, lats)
xi, yi = m(lon, lat)
绘制图片:
precip = precip[0:1:, ::, ::]
cs = m.pcolor(xi, yi, np.squeeze(precip))
# Add Grid Lines
# 绘制经纬线
m.drawparallels(np.arange(-90., 91., 20.), labels=[1,0,0,0], fontsize=10)
m.drawmeridians(np.arange(-180., 181., 40.), labels=[0,0,0,1], fontsize=10)
# Add Coastlines, States, and Country Boundaries
m.drawcoastlines()
m.drawstates()
m.drawcountries()
# Add Colorbar
cbar = m.colorbar(cs, location='bottom', pad="10%")
cbar.set_label(precip_units)
# Add Title
plt.title('Precipitation')
plt.show()
fh.close()
报错:
报错原因:numpy版本低,需要更新版本。
pip uninstall numpy
conda install -y -c conda-forge numpy
如果还继续报错的话,再更新一下:pip install -U numpy
结果展示:
参考链接:
GPCP介绍、下载:https://climatedataguide.ucar.edu/climate-data/gpcp-monthly-global-precipitation-climatology-project
python数据可视化:https://blog.csdn.net/theonegis/article/details/50805408