nc文件是大家常用的文件格式,对于nc文件的处理,大家都比较数据。而GPM卫星数据采用h5文件格式存储,许多卫星数据都采用HDF5文件格式存储,这对于海量的卫星数据存储非常方便。
通过几天摸索,现将GPM的h5数据转化为NC数据,以方便后续进行绘图处理
import matplotlib.pyplot as plt
import numpy as np
# 读取文件
import xarray as xr
filename=r"D:\lunwen\lunwenshuju\GPM\2017yujishuju\2A.GPM.DPR.V9-20211125.20170506-S060857-E074131.018103.V07A.SUB.h5"
# 将H5文件转化为netcdf4文件
prefix = '/FS/'
geo = xr.open_dataset(filename,group=prefix,engine='netcdf4',decode_cf=False)
csf = xr.open_dataset(filename,group=prefix+'CSF',engine='netcdf4',decode_cf=False)
pre = xr.open_dataset(filename,group=prefix+'PRE',engine='netcdf4',decode_cf=False)
slv = xr.open_dataset(filename,group=prefix+'SLV',engine='netcdf4',decode_cf=False)
tim = xr.open_dataset(filename,group=prefix+'ScanTime',engine='netcdf4',decode_cf=False)
ver = xr.open_dataset(filename,group=prefix+'VER',engine='netcdf4',decode_cf=False)
# 将文件维度命名
bad_dims = list(geo.dims)
geo = geo.rename_dims({bad_dims[0]:'nscan',
bad_dims[1]:'nrayNS'})
bad_dims = list(csf.dims)
csf = csf.rename_dims({bad_dims[0]:'nscan',
bad_dims[1]:'nrayNS',})
bad_dims = list(pre.dims)
pre = pre.rename_dims({bad_dims[0]:'nscan',
bad_dims[1]:'nrayNS',
bad_dims[2]:'nbin',
bad_dims[3]:'nfreq'})
bad_dims = list(slv.dims)
slv = slv.rename_dims({bad_dims[0]:'nscan',
bad_dims[1]:'nrayNS',
bad_dims[2]:'nbin',
bad_dims[3]:'nfreq',
})
bad_dims = list(ver.dims)
ver = ver.rename_dims({bad_dims[0]:'nscan',
bad_dims[1]:'nrayNS',})
bad_dims = list(tim.dims)
tim = tim.rename_dims({bad_dims[0]:'nscan'})
# 合并文件
nc_ds=xr.merge([geo, csf, pre, slv, tim, ver])
文中都有注释。首先是根据网站所下载的具体的大类,将每个大类先进行转化。
然后用print()打印转化后的geo,csf等:
可以看到每个大量所具有的的维度和对应个数:phony_dim_2:158等
然后打开上一节所要求下载的文件:filespec.GPM_.V7.pdf找到对应的位置:
可以看到每一个最小值对应的量,以及一个物理量所对应的数据组成。
转化后就变成了nc文件,按照正常的nc文件进行绘图即可。有些特殊的物理量需要另外处理,希望我尽快学会,今早分享给大家。