iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
AI & Data

氣象食材系列 第 18

[ Day 18] hdf5資料-使用向日葵八號衛星觀測資料-頻道13亮溫(10.4um)說明

  • 分享至 

  • xImage
  •  

今天說hdf5資料,hdf5與之前提到的hdf4資料(可參考這)是同樣的資料儲存格式,只不過hdf5簡化hdf4的資料結構,讓儲存的方式更有效率。

由於目前我手邊沒有hdf5的資料,故從氣象局開放資料下載hdf4的資料,然後轉成hdf5。
向日葵八號衛星觀測資料-頻道13亮溫(10.4um)的hdf4檔名為O-A0043-004.hdf,我利用工具將其轉換為O-A0043-004.h5。

接下來就要開始讀取了,我這邊用h5py套件解hdf5的資料,安裝方式如下
conda install -c conda-forge h5py

pip3 install h5py

安裝完成後,就可以開始讀取囉

import h5py
h5pydata = h5py.File("day18/O-A0043-004.h5","r")

#看資料屬性,主要是看有哪些資本資料,這邊的基本資料就是非格點資料。
#譬如這一份檔案是有哪個程式語言寫的或者本身的檔名等資訊
for qqkey,qqval in h5pydata.attrs.items():
    print(qqkey,qqval)

上面的結果截圖(部分)如下,可以看到黃色螢光筆的地方,就是我提到這份資料是用哪個程式語言撰寫及原本的檔名。
這一份資料原始檔案是由Fortran90撰寫,原始檔名為clavrx_H08_20221002_0700_asia.level2.hdf
這也證明這一份hdf5原本是hdf4格式。
https://ithelp.ithome.com.tw/upload/images/20221002/20150923x8tlJTPSWn.jpg

那格點資料要怎麼得到呢?

#格點資料被儲存成字典的方式
for varname, vargridvalue in h5pydata.items():
    print(varname,",,, ", vargridvalue)

會得到如下圖,總共有5個key,分別為latitude, longitude, pixel_elements_along_scan_direction, scan_lines_along_track_direction, temp_10_4um_nom。而value的部分,可以知道資料格點的格點數及資料型別,以latitude為例,<HDF5 dataset "latitude": shape (1478, 1928), type ">f4">,代表總共有1478*1928個格點,資料型別為">f4",代表1個格點的值為bigeddien搭配4bytes的浮點數。
https://ithelp.ithome.com.tw/upload/images/20221002/20150923bK3yxvu2VK.jpg

當知道key之後,就可以得到value,然後還記得之前讀hdf4的時候,每一個key對應的value都有scale_factor 跟add_offset,所以也必須要找出來。

tempfake = h5pydata["temp_10_4um_nom"][:]
scalfct = h5pydata["temp_10_4um_nom"].attrs["scale_factor"]
add_oft = h5pydata["temp_10_4um_nom"].attrs["add_offset"]
realtemp = tempfake * scalfct + add_oft

透過上面的轉換,就可得到正確數值囉

視覺化
https://ithelp.ithome.com.tw/upload/images/20221002/20150923d0lsN0fB4O.png

另外呢,也可以用之前提到的gdal套件讀取hdf5格式的資料。明天說一下為什麼不同套件可以解相同資料。


上一篇
[Day 17] 一些資料的存檔
下一篇
[ Day 19] 簡介相同資料格式可用不同套件讀取
系列文
氣象食材30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言