IoTと無線ネットワーク(9)

前言

今日は気象情報の取得と分析です。

よ、始めましょう!

IoT知識

なし

Python

pythonプログラミング(8)

1. 一時間ごとの天気予報の取得方法

import pprint
import requests
import json

url = "https://api.openweathermap.org/data/2.5/onecall?"
loc = "lat=35.0211&lon=135.7538"
unit= "&units=metric"
lang= "&lang=ja"
excl= "&exclude=current,minutely,daily"
key = "&appid=******************"

r = requests.get(url + loc + unit + lang + excl + key)
rj= r.json()

pprint.pprint(rj)

#天気データをjasonで書き出し
with open("work.json","w") as fw:
    json.dump(rj,fw)

2. 時間を扱う方法

  • datetimeモジュール中のオブジェクト

    • datetime.datetime : 日時(日付と時刻)
    • datetime.date : 日付
    • datetime.time : 時刻
    • datetime.timedelta : 時間差・経過時間
  • datetimeオブジェクト

    • 日付(年,月,日)と時刻(時,分,秒, マイクロ秒)の両方の情報を持つオ ブジェクト
    • それぞれの情報には,属性 year, month, day, hour, minute, second, microsecondでアク セス
    • 現在の時刻を取得する関数 now()
    • 曜日は,関数 weekday()で計算 できる(月〜日:0〜6)

    1

  • datetimeオブジェクトのコンストラクタ

    • datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

    2

  • UTCからローカルタイムへの変換

    3

    3. グラフの描画(matplotlib)

    4

    ラベルの指定

    5

    複数のグラフを同じ座標軸に描画

    6

演習課題

  1. OpenWeatherMapから1時間ごとの天候情報を取得しなさい。日時,気温,湿度,体感温度,降水量
  2. 取得した情報をグラフで表現しなさい。
  3. 取得した情報を分析して,これからn時間外出する場合に傘を持って行くべきかどうかを判断するプログラムを作成しなさい
import pprint
import requests
import json

url = "https://api.openweathermap.org/data/2.5/onecall?"
loc = "lat=35.0211&lon=135.7538"
unit= "&units=metric"
lang= "&lang=ja"
excl= "&exclude=current,minutely,daily"
key = "&appid=******"

r = requests.get(url + loc + unit + lang + excl + key)
rj= r.json()

pprint.pprint(rj)

#天気データをjasonで書き出し
with open("work.json","w") as fw:
    json.dump(rj,fw)
import json
import time
import matplotlib.pyplot as plt
from datetime import datetime

#jasonデータを読み込み
with open("work.json","r") as f:
    data = json.loads(f.read())

#日時
time = [datetime.fromtimestamp(data["hourly"][0]["dt"]),
        datetime.fromtimestamp(data["hourly"][1]["dt"]),
        datetime.fromtimestamp(data["hourly"][2]["dt"])]

#気温
weather=[data["hourly"][0]["weather"][0]["description"],
         data["hourly"][1]["weather"][0]["description"],
         data["hourly"][2]["weather"][0]["description"]]

#気温
temp = [data["hourly"][0]["temp"],
        data["hourly"][1]["temp"],
        data["hourly"][2]["temp"]]

#湿度
humidity=[data["hourly"][0]["humidity"],
          data["hourly"][1]["humidity"],
          data["hourly"][2]["humidity"]]

#体感温度
feels_like=[data["hourly"][0]["feels_like"],
            data["hourly"][1]["feels_like"],
            data["hourly"][2]["feels_like"]]

#降水量
rain = [data["hourly"][0]["rain"]["1h"],
        data["hourly"][1]["rain"]["1h"],
        data["hourly"][2]["rain"]["1h"]]

#グラフ
hour = [time[0].hour,time[1].hour,time[2].hour]
#気温と体感温度
plt.subplot(221)
plt.title("Three hours temp FeelsLike")
plt.plot(hour,temp,label="temp")
plt.plot(hour,feels_like,label="FeelsLike")

#湿度
plt.subplot(222)
plt.title("Three hours humidity")
plt.plot(hour,humidity,label="humidity")

#降水量
plt.subplot(212)
plt.plot(hour,rain,label="rain")

plt.show

#プリント("NO.1")
print("NO.1")
print("日時:",time[0])
print("気温:",temp[0])
print("湿度:",humidity[0])
print("体感温度:",feels_like[0])
print("降水量:",rain[0])
print("天気:",weather[0],",傘を忘れないでください")
#プリント("NO.2")
print()
print("NO.2")
print("日時:",time[1])
print("気温:",temp[1])
print("湿度:",humidity[1])
print("体感温度:",feels_like[1])
print("降水量:",rain[1])
print("天気:",weather[1],",傘を忘れないでください")
#プリント("NO.3")
print()
print("NO.3")
print("日時:",time[2])
print("気温:",temp[2])
print("湿度:",humidity[2])
print("体感温度:",feels_like[2])
print("降水量:",rain[2])
print("天気:",weather[2],",傘を忘れないでください")

実行結果は以下:

7

コメントする

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

Scroll to Top