厳しい暑さが続きますね!
この1週間、ずっと30℃超えが当たり前で梅雨はどこ?って思っておりましたが、やはり梅雨明けしたようです。
OpenWeatherMap のAPIにより全世界の天気データを取得できます。
PythonからこのAPIを呼び出し、取得した天気データをグラフ化して、一足先に夏を感じたいと思います。
1. モジュールのインポート
import requests import pandas as pd import plotly.graph_objects as go from pytz import timezone from datetime import datetime APIKEY = "" #APIキー LATITUDE = "" #緯度 LONGITUDE = "" #経度 BG_COLOR = "#100500" #グラフ背景色 FONT_COLOR = "#fff5f3" #グラフ文字色 TITLE = "東京都港区の体感気温と湿度" #グラフタイトル
2. 天気情報を取得
url = "http://api.openweathermap.org/data/2.5/onecall" payload = {"lat": LATITUDE, "lon": LONGITUDE, "lang": "ja", "units": "metric", "APPID": APIKEY} weather_data = requests.get(url, params=payload).json() tz = timezone(weather_data['timezone']) wd = weather_data['hourly'] # 現在から48時間先までの1時間毎のデータを取得
3. 日時、体感気温、湿度をリスト化
weather_data_list = [] for w1 in wd: tmp_dict = {} tmp_dict['日時'] = datetime.fromtimestamp(w1['dt'], tz=tz).strftime("%m/%d %H時") tmp_dict['体感気温℃'] = int(w1['feels_like']) tmp_dict['湿度%'] = int(w1['humidity']) weather_data_list.append(tmp_dict) df_temp = pd.json_normalize(weather_data_list)
4. グラフ化
# X軸:日時、Y軸:体感気温 trace1 = go.Scatter( x = df_temp['日時'], y = df_temp['体感気温℃'], mode = 'lines', name = '体感気温℃', yaxis='y1', line=dict(color='#da70d6') ) # X軸:日時、Y軸:湿度 trace2 = go.Scatter( x = df_temp['日時'], y = df_temp['湿度%'], mode = 'lines', name = '湿度%', yaxis='y2', line=dict(color='#87cefa') ) # Y2軸グラフ化 layout = go.Layout(dict(margin=dict(l=0, r=0, t=30, b=0), paper_bgcolor=BG_COLOR, plot_bgcolor=BG_COLOR, title=dict(text=TITLE, x=0.5, y=1.0, font=dict(color=FONT_COLOR, size=24), xanchor='center', yanchor='top', pad=dict(l=0, r=0, t=5, b=0)), font=dict(color=FONT_COLOR, size=18), xaxis=dict(title='日時', showgrid=False), yaxis=dict(title='体感気温℃', side = 'left', showgrid=False, range = [10, 40]), yaxis2=dict(title='湿度%', side = 'right', overlaying = 'y', showgrid=False, range = [40, 100]) )) fig = go.Figure(dict(data = [trace1,trace2], layout = layout)) # グラフ画像を保存 fig.write_image("weather_graph.png", height=400, width=1600, scale=1)
5. 結果
夏ですね!
ただ日中の湿度はそこまで高くないのでハワイのようにカラッとして過ごしやすそうです。