Pythonで地域名称から天候を調べる(geocoder + OpenWeatherMap)

Pythonで地域名称から天候を調べる(geocoder + OpenWeatherMap)

こんにちは。マスジュンです。

前回、住所から緯度と経度を取得する方法を紹介しました。では、今回はその情報を使って、住所の天気を調べてみたいと思います。

天気の情報をAPIで提供してくれるサイトは色々あります。今回は、その中で「OpenWeatherMap」を利用させていただきます。

[link_card=”https://openweathermap.org/“]

先ずは上記リンクから会員登録して、サービス利用に必要なAPIキーを発行してもらいます。

名称から天気を取得

APIキーを取得したら、必要なパッケージとAPIキー、APIアクセス先を設定します。また、OpenWeatherMapはアメリカの会社なので、華氏から摂氏への変換式も定義しておきます。

In [1]:
import requests
import json
import geocoder
import time

api_key = "4df095826ca671a6217dd6da1b83a559"  #自身のAPIキー
api ="http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&APPID={key}" #API接続先

k2c = lambda k: k- 273.15 #気温変換

次に、都市やロケーション名称から緯度と経度を取得するgeocoderを使って、関数を作成します。 geocoderの使い方は、以前の記事をご参考ください。

In [2]:
def get_lat_lon(location):
    geo_address = location
    g = geocoder.google(geo_address)
    return(g.latlng)

次に、上で作成した関数を組み込んで、ロケーションから天気を出力する関数を作成します。

In [3]:
def get_weather(location):
    lat,lon = get_lat_lon(location) #緯度と経度の取得
    url = api.format(lat=lat,lon=lon,key=api_key) #APIのアクセス先
    r = requests.get(url) #APIの結果
    weather_data = json.loads(r.text) #結果をjsonでパース 
    
    #結果の出力
    print("場所=", location) 
    print("天気=",weather_data["weather"][0]["description"])
    print("最低気温=", k2c(weather_data["main"]["temp_min"]))
    print("最高気温=",k2c(weather_data["main"]["temp_max"]))
    print("")

では、以下の都市の天気を出力してみます。

In [4]:
cites = ["東京都千代田区","熊本市","函館市"]
In [5]:
for city in cites:
    get_weather(city)
    time.sleep(20)
場所= 東京都千代田区
天気= few clouds
最低気温= 8.0
最高気温= 10.0

場所= 熊本市
天気= scattered clouds
最低気温= 14.0
最高気温= 15.0

場所= 函館市
天気= light shower snow
最低気温= -2.0
最高気温= -1.0

APIを使って繰り返し処理をする際は、あまり短時間にアクセスするとサーバーの負荷が増えてしまいます。なので、一箇所の天気を取得する度に20秒間隔を空けるようにしています。

最後に

今回は、Googleが提供しているGoogle Maps Geolocation API とOpenWeatherMapが提供しているAPIを利用させてもらい、地名や名所などから天気を取得するスクリプトを作成してみた。天気のデータはleakageデータといい、将来の天候などは不確実なために、実ビジネスでは使えないという意見を見かけます。自分はそのようには考えていません。要は分析の範囲だと思っています。例えば、発注が5日前に必要な商品の需要予測の場合は、あまり不確実性が高く使えませんが、その日の天候状態を確認した上で生産数を決められる、お惣菜やお弁当などの予測には、とても重要な変数になるはずです。

では、今日はここまで。

Pythonカテゴリの最新記事