[PYTHON] Laden Sie die Winddaten der Meteorological Agency herunter

Laden Sie die vergangenen Wetterdaten der Meteorologischen Agentur herunter.

Diesmal ist der Wind. Analysieren Sie HTML mit Pythons schöner Suppe.

Skript

Bereiten Sie zuerst das Modul vor.

Vorbereitung


import requests
import bs4
import pandas as pd
import datetime
import time
import numpy as np
from numpy import NaN

Als nächstes kommt der Konvertierungshelfer. Wenn die Zeichenfolge eine Zahl ist, konvertieren Sie sie in float. /// ist ein Symbol dafür, dass keine Beobachtungsdaten vorhanden sind.

Helfer


def convert(item_str):
    if not item_str:
        return ''
    if item_str.replace('.','').replace('-','').isdigit():
        return float(item_str)
    if item_str == '///':
        return NaN
    return item_str

Dann der Hauptkörper. Geben Sie die Präfekturnummer und die Ortsnummer in die URL ein. Es zu finden http://www.data.jma.go.jp/obd/stats/etrn/ Sie können den Ort in der Reihenfolge auswählen. Schauen Sie sich die endgültige URL an und kopieren Sie sie.

Da das Datum in der URL-Spezifikation und die Uhrzeit im Format hh: mm angegeben ist, konvertieren Sie es mit datetime + timedelta, um es in JST zu konvertieren.

Körper


columns = ('JST', 'time', 'Niederschlag', 'Temperatur', 'Durchschnittliche Windgeschwindigkeit', 'Durchschnittliche Windrichtung', 'Maximale momentane Windgeschwindigkeit', 'Maximale momentane Windgeschwindigkeit時風向', 'Sonnenlichtzeit')
all_df = []
    
for year in range(2015, 2017): # 2015 ... 2016
    for month in range(1, 13): # 1 ... 12
        for day in range(1, 32): # 1 ... 31

            try:
                this_day = datetime.datetime(year, month, day)
            except ValueError:
                continue # incorrect date; e.g., 2007/2/31 etc.
            print(this_day)

            url = 'http://www.data.jma.go.jp/obd/stats/etrn/view/10min_a1.php? prec_no=44&block_no=47662&year=' + str(year) + '&month=' + str(month) + '&day=' + str(day) + '&view='
            print(url)
            time.sleep(1) # wait for 1 sec
            res = requests.get(url)

            try:
                res.raise_for_status() # check for error
            except Exception as e:
                print('Error: {}'.format(e))
                continue # go to next if error

            res.encoding = 'utf-8'
            soup = bs4.BeautifulSoup(res.text, "lxml")
            tbl = soup.select("#tablefix1 td") # find the table
            n_rows = len(tbl) // 8


            for r in range(n_rows):
                i = 8 * r

                # JST
                hh, mm = tbl[i + 0].getText().split(":") # '00:10' --> '00', '10'
                row_timedelta = datetime.timedelta(hours=int(hh), minutes=int(mm))

                row_time = this_day + row_timedelta # for converting "24:00" to "00:00" of the next day
                row = [row_time]

                # other data
                row.extend([convert(tbl[i + j].getText()) for j in range(8)])

                
                row_df = pd.DataFrame(columns=columns)
                row_df.loc[0] = row
                all_df.append(row_df)


df = pd.concat(all_df, ignore_index=True)        
df.to_excel('wind_data.xlsx')

Recommended Posts

Laden Sie die Winddaten der Meteorological Agency herunter
Die Niederschlagsdaten der Meteorologischen Agentur kratzen und auf M5Stack anzeigen
Lesen Sie die GRIB2-Datei der Meteorological Agency auf pygrib
Fehlerbehandlung nach dem Stoppen des Downloads der gelernten Daten von VGG16
Erläutern Sie den Mechanismus der PEP557-Datenklasse
Holen Sie sich die Spaltenliste und Datenliste von CASTable
Visualisieren Sie die Exportdaten des Piyo-Protokolls
Konvertieren Sie die GRIB von meteorologischen Radarkoordinatendaten mit doppelter Polarisation in netCDF (CF / Radial Standard).
Die Geschichte des Lesens von HSPICE-Daten in Python
Verwendung vergangener Wetterdaten 1 (Amedas Punktanzeige)
[Kleine Geschichte] Laden Sie das Bild von Ghibli sofort herunter
Übergang von Baseball aus Daten gesehen
Überprüfen Sie den Status der Daten mit pandas_profiling
Scraping der Gewinndaten von Zahlen mit Docker
Eine Geschichte darüber, wie man das Atomfeld (XML-Telegramm) der Meteorologischen Agentur mit einem Raspeltorte bekommt und twittert
Über die Ineffizienz der Datenübertragung im luigi on-memory
Den Inhalt der Daten in Python nicht kennen
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Verwenden wir die offenen Daten von "Mamebus" in Python
Verstehen Sie den Status des Datenverlusts - Python vs. R.
#Wir automatisieren die Datenaggregation von Wiire! Teil 1
Konvertieren Sie die GRIB der Radar-Per-Polarkoordinaten GPV der Meteorological Agency in netCDF (CF / Radial Standard).