Pythonで拡張アメダスを読む

2020/07/24 パッケージとしてGitHubで公開しました。

https://github.com/TRNSYSJP/weapy

2019/06/11 初出時に拡張アメダスのファイル名を間違えていたので、修正しました。
2019/06/12 リマークの削除処理を更新

拡張アメダス気象データ(拡張AMeDAS、EA気象データ)の値を使いたいときが度々あるのですが、専用ツールを使うのもめんどう。(専用ツールでCSVを書き出すと一日分が1行で書き出されるので、ちょっと使いにくい)

Pythonでスクリプトを書いてみた

試しに標準年の気温のデータの読み出しと、テキストファイルへの書き出し処理を書いています。

それらしい値が取れているで、多分大丈夫だと思いますが…、検証はしていないので、使われる方は自己責任でお願いします。

気象データの読み出し方法は分かったので、チャートにしたりとか、これでいろいろ応用が利きそうです。気温以外は気が向いたら作ります。

以下、ソースコードです。1995年版と、それと2000年版の標準年版は読み出しできるはずです。2010年版は地点番号が変更されているので、そのあたりは対策が必要です。(たぶんエラーになる)
このソースコードの使用についての制限は設けませんが、クドいようですが現状有姿(AS-IS)、非保証です。

# coding: utf-8
# Example code for reading extended AMeDAS file.
# author     Yuichi Yasuda @ quattro corporate design
# copyright  2019 quattro corporate design. All right reserved.

import struct
import math

def read_int16(f):
    """Reads a 2-byte signed integer from the file"""
    bytes = f.read(2)
    val = struct.unpack('<h', bytes)[0] #Convert bytes to a 2-byte signed integer (int16)
    return val

def remove_remark(val):
    """remove the remark"""
    return math.floor(val/10.0) # round the value down

if(__name__ == '__main__'):

    RECORD_LENGTH = 18306
    BLOCK_LENGTH = RECORD_LENGTH * 8
    
    weafile = r'E:\EAD95\RWY8195.wea'
    # no = 1 #宗谷
    no = 363 #東京
    #no = 726 #福岡
    tambs = []
    with open(weafile, 'rb') as f:

        f.seek((no-1)*BLOCK_LENGTH) # go to the head of the specified station data.
        # read the station, entity no and the year
        station_number = read_int16(f)
        entity_number  = read_int16(f)
        year = read_int16(f)

        for day in range(366):      #365 days + 1 day for dummy
            for hour in range(24):  #24 hours
                val = read_int16(f)
                val = remove_remark(val) #remove the remark
                val = val * 1.0/10.0 #unit conversion, 0.1C to 1.0C
                tambs.append(val)
                
    with open('tamb.csv', 'w') as f:
        for val in tambs[:8760]:    # data for 365 days excluding the dummy day
            f.write(str(val)+'\n')

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1803)
Anaconda/Python 3.7.1
「拡張アメダス気象データ1981-2000」収録の1995年版標準気象データ

Pocket

3件のピンバック

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です