NOAA気象データセットの加工

NOAA気象データセットは,米国の国立気候データセンター(National Climatic Data Center; NCDC)が公開しているデータセットです.1900年から最新までのデータが公開されています.

このデータセットに対して,以下のようなスクリプトを用いてCSV形式に変換します.

# -*- coding: utf-8 -*-
import csv;

# 入力ファイル
ifn = open("010010-99999-1934")
reader = csv.reader(ifn)

# 出力ファイル
ofn = open("010010-99999-1934.csv", "w")
writer = csv.writer(ofn)

# 各レコードに対して項目を抽出しファイルに出力する
writer.writerow(["usaf_id","wban_id","year","month","day","hour","minute","latitude","longitude","height","calllet","qcpname","winddir","winddir_qcode","winddir_tcode","windspeed","windspeed_qcode","lcloud","lcloud_dcode","lcloud_ccode","visdist","visdist_qcode","visdist_vcode","visdist_qvcode","temp","temp_qcode","dptemp","dptemp_qcode","pressure","pressure_qcode"])
for row in reader:
        for elem in row:
                usaf_id = elem[4:10] # USAF気象情報ステーション識別子
                wban_id = elem[11:16]        # WBAN気象情報ステーション識別子
                year = elem[15:19] # 観測年
                month = elem[19:21]        # 観測月
                day = elem[21:23]        # 観測日
                hour = elem[23:25] # 観測時間
                minute = elem[25:27] # 観測分
                latitude = long(elem[28:34])/1000 # 緯度
                longitude = long(elem[35:41])/1000        # 経度
                height = elem[46:51] # 標高
                calllet = elem[51:56] # 呼出符号識別子
                qcpname = elem[56:60] # 品質プロセス名
                winddir = elem[60:63] # 風向き
                winddir_qcode = elem[63:64] # 風向きの品質コード
                winddir_tcode = elem[64:65] # 風向きのタイプコード
                windspeed = elem[65:70] # 風速
                windspeed_qcode = elem[70:71] # 風速の品質コード
                lcloud = elem[71:76] # 雲低高度
                lcloud_qcode = elem[76:77] # 雲低高度の品質コード
                lcloud_dcode = elem[77:78] # 雲低高度の決定コード
                lcloud_ccode = elem[78:79] # 雲低高度のCAVOKコード
                visdist = elem[79:84] # 視界
                visdist_qcode = elem[84:85] # 視界の品質コード
                visdist_vcode = elem[85:86] # 視界の変数コード
                visdist_qvcode = elem[86:87] # 視界の品質変数コード
                temp = long(elem[87:92])/10 # 気温
                temp_qcode = elem[92:93] # 気温の品質コード
                dptemp = long(elem[93:98])/10 # 露点気温
                dptemp_qcode = elem[98:99] # 露点気温の品質コード
                pressure = long(elem[99:104])/10 # 気圧
                pressure_qcode = elem[104:105] # 気圧の品質コード
                writer.writerow([usaf_id,wban_id,year,month,day,hour,minute,latitude,longitude,
                                         height,calllet,qcpname,winddir,winddir_qcode,winddir_tcode,windspeed,windspeed_
                                         qcode,lcloud,lcloud_dcode,lcloud_ccode,visdist,visdist_qcode,visdist_vcode,visdist_qvcode,
                                         temp,temp_qcode,dptemp,dptemp_qcode,pressure,pressure_qcode])

ifn.close()
ofn.close()