LoginSignup
3
5

【Python】NetCDFの作成方法

Last updated at Posted at 2021-11-14

概要

気象データなどでよく用いられるNetCDF(拡張子.nc)。
Pythonでかなり簡単に扱えるので、使い方を説明。

  • PythonでNetCDFを使いたい!
  • NetCDFの形式を知りたい!

な方の参考になれば。

事前準備

netcdf4を入れておく必要がある。pipなら以下のコマンドで。

bash
pip install netcdf4

書き込み方

今回は全球気温データ(lon, lat, temp)の格納を想定。

簡略版

python
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ファイルではデータ内の変数の単位などの登録が可能。

python
nc.history = "Create New"
temp.long_name = "Temperature"
temp.units = "Degree of Celsius"

historyでファイルの履歴を登録可能。データ作成日時などを入れたら良さそう。
変数についてはlong_nameで名称、unitsで単位を登録可能。
内容はprintすれば簡単にみれる。

python
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オプションを入れてください。

bash
$ ncdump {ファイルパス}

読み込み

読み込むときも書き込み時とほぼ同じ。
nc.variblesで該当する変数名を入れたらデータが取り出せる。

python
import netCDF4

nc = netCDF4.Dataset('netcdf.nc', 'r')
temp = nc.variables['t'][:]

まとめ

NetCDF4で簡単にNetCDFのデータの扱いが可能。
ncdumpで確認しなくても、Pythonソース上で情報を見ることもできる。

その他

GitHubに今回実装したソースを置いています。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5