Wetterdaten von openweathermap.org mit Python loggen

Blick durch eine regennasse Fensterscheibe auf einen Passanten

Das Wetter in Hamburg ist immer schrecklich. Kalt, neblig, regnerisch. Wirklich?

Vor Kurzem bin ich aus Süddeutschland nach Hamburg gezogen, in den „Norden“. Alle sagten, das Wetter sei dort schrecklich. Wirklich? Sogar die Menschen, die in Hamburg leben, beschweren sich ständig über das Wetter. Aber ehrlich gesagt habe ich persönlich keine negativen Unterschiede bemerkt. Ich hatte eher das Gefühl, das Wetter sei besser als in Bayern. Als ich meinen Kollegen von meinen persönlichen Vermutungen erzählte, sagten sie immer: „Nein, du irrst dich. Im Süden ist das Wetter besser.“

Schaffen wir Fakten statt Glauben, dachte ich mir.

Ich beschloss, Wetterdaten von openweathermap.org aus verschiedenen Städten zu loggen. Mit Python habe ich die JSON-Daten heruntergeladen und extrahiert. Die Daten werden in eine MariaDB-Datenbank eingefügt. Für die Visualisierung und Auswertung nutze ich Metabase, um schöne Dashboards zu erstellen. So sieht der Aufbau der Datenbank aus:

CREATE TABLE `weather_city` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `weather_data` (
  `id_city` int(11) NOT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `temp` double NOT NULL,
  `pressure` double NOT NULL,
  `humidity` double NOT NULL,
  `windspeed` double NOT NULL,
  `clouds` double NOT NULL,
  `rain3h` double DEFAULT NULL,
  `snow3h` int(11) DEFAULT NULL,
  `sunrise` timestamp NULL DEFAULT NULL,
  `sunset` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Hier ist nun der nächste Teil: wie man die Daten mit einem Python-Skript von openweathermap.org extrahiert und in die Datenbank einfügt:

import sys
import requests
import MySQLdb

def get_weather(api_key, city_id):
    url = "https://api.openweathermap.org/data/2.5/weather?id={}&units=metric&appid={}".format(city_id, api_key)
    print url
    r = requests.get(url)
    return r.json()

def main():

    conn = MySQLdb.connect(
        user='USERNAME',
        passwd='PASSWORD',
        db='DATABASENAME',
        host='HOSTNAME',
        charset="utf8",
        use_unicode=True)
    cursor = conn.cursor()

    api_key = "YOURAPIKEYFROMOPENWEATHER"

    sql = "SELECT * FROM `weather_city`"
    cursor.execute(sql)
    cities = cursor.fetchall()

    city_ids = []

    for city in cities:
        city_ids.append (city[0])

    for city_id in city_ids:
        weather = get_weather(api_key, city_id)

        temp = weather["main"]["temp"]
        humidity = weather["main"]["humidity"]
        pressure = weather["main"]["pressure"]
        windspeed = weather["wind"]["speed"]
        clouds = weather["clouds"]["all"]
        sunrise = weather["sys"]["sunrise"]
        sunset = weather["sys"]["sunset"]
        timestamp = weather["dt"]

        sql = "INSERT INTO weather_data (id_city, timestamp, temp, pressure, humidity, windspeed, clouds, sunrise, sunset) VALUES (%s, FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, FROM_UNIXTIME(%s), FROM_UNIXTIME(%s))"
        val = (city_id, timestamp, temp, pressure, humidity, windspeed, clouds, sunrise, sunset)
        cursor.execute(sql, val)
        conn.commit()

if __name__ == '__main__':
    main()

Und hier sind die Ergebnisse: In Hamburg ist es wärmer als in München, das 600 km weiter südlich liegt!

Diagramm der Temperaturverläufe von Hamburg und München im Vergleich

Und: München ist viel bewölkter als Hamburg. Ich hatte also recht, der Rest ist einfach Fake News :-)

Diagramm der Bewölkung in Hamburg und München im Vergleich

2 Kommentare zu „Wetterdaten von openweathermap.org mit Python loggen“

  1. Hello,
    I used the project on this site (log data from openweathermap) and made a few modifications to „ingest“ real time weather into a mysql database and then feed that into an apache spark cluster referencing a historical database loaded into REDIS to predict and find weather patterns. Your code was super valuable for completing the „Weather Ingestion Nodes“ of my project. thank you

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

The maximum upload file size: 128 MB. You can upload: image, audio, video, document, archive, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop files here

Nach oben scrollen