NetCDF形式は気候データを配信するために広く使われているフォーマットで、データサイズが多くなりがちな多次元データによく利用されています。netCDFには2つのバージョンがあります。以前はnetCDF3形式が広く利用されてきましたがデータサイズなどの制限があることから、現在ではファイル圧縮などの機能を備えたNetCDF4形式が利用される傾向にあります。Rの“ncdf4”パッケージは、NetCDF3とnetCDF4の両方の形式をサポートしています。NetCDF形式のデータの取り扱いの例として、GPCC Global Precipitation Climatology Centreが提供する陸域の月間降水量データ(GPCC: precip.mon.total.v7.nc)のnetCDF4形式のデータファイルを使い、特定の地点(名古屋市、136.9oE, 35.2 oN)の降水量の経年変化の折れ線グラフを描く方法について説明します。GPCCは、全球を0.5×0.5度の格子(720×360のメッシュ)データで、各格子の1901年から2013年(1356カ月間分)の月間降水量が収納されています。なお、以下の手順は、必要最低限のコマンドで記述しています。
ncdf4パッケージを読み込む
library(ncdf4) |
NetCDF4形式のmon.total.v7.ncを読み込む(ディレクトリの指定はデータの保存場所によって変更してください)。
ncin <- nc_open(“C:/Users/corewall/Desktop/GPCC/precip.mon.total.v7.nc”) |
NetCDF標準グレゴリオ暦以外のカレンダーを使用して出力を提供することが多いため、時間ユニットを必要に応じて変更する必要があります。
time<-ncvar_get(ncin,”time”)
tunits<-ncatt_get(ncin,”time”,attname=”units”) tustr<-strsplit(tunits$value, ” “) dates<-as.Date(time,origin=unlist(tustr)[3]) |
降水量データを読み込みます。precip_arrayは3次元配列で、経度、次に緯度、時間の順に並べられています。
dname <- “precip”
pr_array <- ncvar_get(ncin,dname) |
名古屋市の位置インデックスを求める。GPCCは720×360の格子データであります。最も近い格子の降水量を読み出すことにします。
lon <- ncvar_get(ncin, varid = “lon”)
lat <- ncvar_get(ncin, varid = “lat”) lon_index <- which.min(abs(lon – 136.9)) lat_index <- which.min(abs(lat – 35.2)) p<-pr_array[lon_index,lat_index,] |
折れ線グラフを描く
plot(d,p, type=”l”, xlab=”Year” , ylab=”monthly precipitation (mm)”) |