概要
気象データなどでよく用いられるNetCDF(拡張子.nc)。
Pythonでかなり簡単に扱えるので、使い方を説明。
- PythonでNetCDFを使いたい!
- NetCDFの形式を知りたい!
な方の参考になれば。
事前準備
netcdf4を入れておく必要がある。pipなら以下のコマンドで。
pip install netcdf4
書き込み方
今回は全球気温データ(lon, lat, temp)の格納を想定。
簡略版
import netCDF4 as nc4
nc = nc4.Dataset(ncPath, "w", format="NETCDF4")
"""
lonList(1d), latList(1d), tempList(2d)にデータを格納
"""
nc.createDimension("x", len(lonList))
nc.createDimension("y", len(latList))
lon = nc.createVariable("lon", "i2", "x")
lat = nc.createVariable("lat", "i2", "y")
temp = nc.createVariable("temp", "i2", ("y", "x"), fill_value=99999)
lon[:], lat[:], temp[:, :] = lonList, latList, tempList
nc.close()
netCDF4.Dataset()でファイルを開く。
Python3.9で可能なフォーマットは以下の通り(何が違うのかはよくわからない...)。
- NetCDF
- NetCDF4
- NetCDF4 Classic
- NetCDF3 Classic
- NetCDF3 64Bit Offset
- NetCDF3 64Bit Data
また、createDimensionで次元を設定後、**createVariable()**で変数を作成可能。
引数はデータ名称、型(i1=int8, i2=int16, etc.)、形状
。
fill_valueで欠損値の登録が可能なのも非常に便利。
各種情報追加
上記でデータとしては問題ないが、NetCDFファイルではデータ内の変数の単位などの登録が可能。
nc.history = "Create New"
temp.long_name = "Temperature"
temp.units = "Degree of Celsius"
historyでファイルの履歴を登録可能。データ作成日時などを入れたら良さそう。
変数についてはlong_nameで名称、unitsで単位を登録可能。
内容はprintすれば簡単にみれる。
print(temp)
"""
<class 'netCDF4._netCDF4.Variable'>
int8 t(lat, lon)
_FillValue: -97
long_name: Temperature
units: Degree of Celsius
unlimited dimensions:
current shape = (13, 36)
filling on
"""
ターミナル上での中身の確認
中身はターミナル上でncdumpコマンドを使って確認可能。
オプションは色々ありますが、ヘッダのみ良い方はhオプションを入れてください。
$ ncdump {ファイルパス}
読み込み
読み込むときも書き込み時とほぼ同じ。
nc.variblesで該当する変数名を入れたらデータが取り出せる。
import netCDF4
nc = netCDF4.Dataset('netcdf.nc', 'r')
temp = nc.variables['t'][:]
まとめ
NetCDF4で簡単にNetCDFのデータの扱いが可能。
ncdumpで確認しなくても、Pythonソース上で情報を見ることもできる。
その他
GitHubに今回実装したソースを置いています。