python gribフォーマットデータの読み出し

10870 ワード

python grib/grib 2フォーマットデータの読み出し
NCL(NCAR Command Language)で読み取るのが一般的です.Python言語のpygribライブラリでもgrib/grib 2形式のデータを読み取ることができます
grib/grib 2フォーマットデータの紹介
1データダウンロード方法
データはNCAR/UCARの公式サイトFNLを通じて資料を再分析して登録アカウントをダウンロードすることができます–ダウンロードしたデータを探します–相応のダウンロードshellスクリプトをダウンロードします–サーバーの中でこのスクリプトを実行してダウンロードします
2データフォーマット
fnl再分析資料のデータフォーマットはnetcdfとgrib grib 2といういくつかのデータフォーマットがあり、WRF読み取りに使用されるのはgrib grib 2フォーマットであるため、gribフォーマットのデータをダウンロードするのが一般的である.このうちgrib 1のデータは1999年7月30日-2007年12月6日から.grib 2フォーマットのデータは2007年12月7日から現在まで
3データ変数
Panoply load対応するgrib 2フォーマットのデータを利用して変数を表示することができますwgribで変数を読み取ることができますpygrib関数で変数を読み取ることができます【以下で説明します】変数対応のTABLEはファイルの中で見ることができなくて、公式サイトの上で対応するTABLE grib 2フォーマットのデータ変数TABLEを探すことしかできません
pygrib関数の紹介
すべてのpygribバージョンはPythonpygribの公式サイトで紹介されており、そのバージョン、インストールパッケージ、インストール方法が含まれています.
1ヘッダファイル読み込み
ヘッダファイル関連情報読み出し
import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')#     
for grb in grbs:  
	print grb #         
	print grb.keys()  #      keys
	print grb.values  #        

ヘッダファイルのtxtスクリプトの読み取りと書き込み
import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')
with open('fnl_17030406.txt','w') as f:
	for grb in grbs:
		f.write(str(grb) + '
'
)

2データ読み出し
データを読み取り、txtファイルにデータを書き込むが、txtファイルに書き込むとtxtのデータが不完全に表示されるので、csvファイルに書き込むのが望ましい
import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')
f = open('./txt/data_17090100.txt','w')
grbs.seek(0)
grb = grbs.select(name = 'U component of wind')[0]
f.write(str(grb) +'
'
) value = grb.values f.write(str(value)) f.close()

データを読み出してcsvファイルに書き込む方法1:変数の名前とindexに基づいて変数読み出しを行う
import pygrib as pg
import pandas as pd
import csv
grbs = pg.open('fnl_17030406.grib2')
grbs.seek(0)
grb = grbs.select(name = '2 metre temperature')[0]
value = grb.values
data = pd.DataFrame(value)
data.to_csv('./txt/17090100.csv',index = False,header = False)
lats,lons = grb.latlons()
output_list = []
for i in range(lats.shape[0]):
    zip1 = zip(lats[i],lons[i])
    output_list.append(list(zip1))

output = pd.DataFrame(output_list)

方法2:すべての変数を遍歴し、既知の時間、変数名、levelなどの情報に基づいて変数のvalue(一般的にはこの方法が一般的で、エラーが発生しにくい)の詳細はgithubで与えられたJupiterインスタンスpygribインスタンスに参加してください.
import pygrib as pg
import pandas as pd
import csv
import datetime as dt
grbs = pg.open('fnl_17030406.grib2')
tem = []
data_valid = dt.datetime(2017,3,4,6)
for grb in grbs:
	if grb.validDate == date_valid and grb.parameterName == 'Temperature' and grb.level == 2:
	tem.append(grb,values)