(2022-02-17 初稿 - )
気象庁のアメダスのデータ(CSV)をダウンロードするのは、以下のサイトからできる。
GUIでとても使いやすいだが、定期的にスクリプトを用いてダウンロードしたり、ある観測地点の現在のデータを知るのには少し不便だ。
そこで、以下のページからWebスクレイピングで、必要なデータ(サンプルとして静岡空港)をいただこうと思ったが、気象庁のサイトが複雑で、素人の筆者には難しくてできなかった。(^^ゞ
他の方法についてネットで検索すると、以下のサイトでjsonでダンロードできるとの記述があった。多謝。m(__)m
実際に試したところ、うまくデータを取得できたので、備忘録として記す。
https://www.jma.go.jp/bosai/amedas/data/map/YYYYMMDDhhmm00.json YYYYMMDDhhmmは、202202171510等の日付と時刻のデータを入力する。
このURLひとつで、北は宗谷、南は波照間の現在の観測データ(実際には10分程度前)データが一度で手に入れることができるからすごい。
毎回、URLを入力するのも面倒なので、簡単なpythonスクリプトを作った。
このスクリプトは、筆者の近くの静岡空港の直近のデータを取得するが、それぞれ地点のコードを設定すれば、欲しい地点のデータが得られる。
なお、直近と言っても、あまりに直近の場合は、データの登録が完了していなく、エラーになることが多いので、実際には15分程度前で、かつ分数の1の位を切捨てるので、20分程度前のデータを取得する。具体的には、現在時刻が15:25だと、15:10のデータを取得する。
#!/usr/bin/env python3
#coding: UTF-8
# ver 0.01 Written by Hymd3a
# sample data
#"50477":{"temp":[0.3,0],"humidity":[59,0],"sun10m":[0,0],"sun1h":[0.0,0],"precipitation10m":[0.0,0],"precipitation1h":[0.0,0],"precipitation3h":[0.0,0],"precipitation24h":[0.0,0],"windDirection":[13,0],"wind":[1.2,0]},"50477":{"temp":[1.5,0],"precipitation10m":[0.0,0],"precipitation1h":[0.0,0],"precipitation3h":[0.0,0],"precipitation24h":[0.0,0],"windDirection":[11,0],"wind":[4.8,0]},
import json
import requests
import datetime
# wind direction
wd = { 1:"北北東", 2:"北東", 3:"東北東", 4:"東", 5:"東南東", 6:"南東", 7:"南南東", 8:"南", 9:"南南西", 10:"南西", 11:"西南西", 12:"西", 13:"西北西", 14:"北西", 15:"北北西", 16:"北" }
# functions
def get_rdate():
# date time now
dt_now = datetime.datetime.now()
gdate = dt_now + datetime.timedelta(minutes=-12) # 現在時刻から12分引く
gdate = gdate.strftime('%Y%m%d%H%M') # 時刻を表す文字列に変換
return gdate[0:11] + "000" # 分の1の位と秒を0に
def dt2str(dt):
return f"{dt[0:4]}-{dt[4:6]}-{dt[6:8]} {dt[8:10]}:{dt[10:12]}"
get_dt = get_rdate()
dt_str = dt2str( get_dt )
#print(get_dt, dt_str)
# get json
jdata = f"https://www.jma.go.jp/bosai/amedas/data/map/{get_dt}.json"
#jdata = "https://www.jma.go.jp/bosai/amedas/data/map/20220217050000.json"
#print(jdata)
df = requests.get(jdata).json()
print('静岡空港', dt_str)
print("温度(℃):", df['50476']['temp'][0])
print("湿度(%):", df['50476']['humidity'][0])
print("日照時間(10m):", df['50476']['sun10m'][0])
print("日照時間(1h):", df['50476']['sun1h'][0])
print("降水量(10m):", df['50476']['precipitation10m'][0])
print("降水量(1h):", df['50476']['precipitation1h'][0])
print("降水量(3h):", df['50476']['precipitation3h'][0])
print("降水量(24h):", df['50476']['precipitation24h'][0])
print("風向:", wd[df['50476']['windDirection'][0]])
print("風速(m/s):", df['50476']['wind'][0])
実行すると、以下のとおり表示される(データは架空)。
静岡空港 2022-02-17 15:10 温度(℃): 3.8< 湿度(%): 46 日照時間(10m): 10 日照時間(1h): 1.0 降水量(10m): 0.0 降水量(1h): 0.0 降水量(3h): 0.0 降水量(24h): 0.0 風向: 西北西 風速(m/s): 2.7
簡単にデータを取得できるからといって、たくさんデータを取ってサーバに負荷を掛けたりしないように。
大量のデータをGetするときは、気象庁の上記サイトから取得するように