8 つの変数を含む netCDF ファイルがあります。(申し訳ありませんが、実際のファイルを共有することはできません) 各変数には、時間と駅の 2 つの次元があります。時間は約 14 ステップで、ステーションは現在 38000 の異なる ID です。したがって、38000 の異なる「場所」(実際には単なる ID) に対して、8 つの変数と 14 の異なる時間があります。
$ncdump -h stationdata.nc
netcdf stationdata {
dimensions:
station = 38000 ;
name_strlen = 40 ;
time = UNLIMITED ; // (14 currently)
variables:
int time(time) ;
time:long_name = "time" ;
time:units = "seconds since 1970-01-01" ;
char station_name(station, name_strlen) ;
station_name:long_name = "station_name" ;
station_name:cf_role = "timeseries_id" ;
float var1(time, station) ;
var1:long_name = "Variable 1" ;
var1:units = "m3/s" ;
float var2(time, station) ;
var2:long_name = "Variable 2" ;
var2:units = "m3/s" ;
...
このデータを PostGres データベースにロードして、後で視覚化するために station_name に一致するジオメトリにデータを結合できるようにする必要があります。
現在、netCDF4-module を使用して Python でこれを行っています。機能しますが、永遠にかかります!今、私はこのようにループしています:
times = rootgrp.variables['time']
stations = rootgrp.variables['station_name']
for timeindex, time in enumerate(times):
stations = rootgrp.variables['station_name']
for stationindex, stationnamearr in enumerate(stations):
var1val = var1[timeindex][stationindex]
print "INSERT INTO ncdata (validtime, stationname, var1) \
VALUES ('%s','%s', %s);" % \
( time, stationnamearr, var1val )
私のマシンではこれを実行するのに数分かかりますが、もっと賢い方法で実行できると感じています。
これをよりスマートな方法で行う方法について、誰にもアイデアがありますか? できればPythonで。