[PYTHON] Lassen Sie uns die von der Präfektur Shimane veröffentlichten Niederschlagsdaten visualisieren

Einführung

Als ich vorgestern fortfuhr, fragte ich mich, ob ich mit den von Mr. Shimane veröffentlichten Daten etwas unternehmen könnte, und es scheint, dass die Niederschlagsdaten über einen weiten Bereich veröffentlicht wurden, also habe ich versucht, dies zu visualisieren.

[Präfektur Shimane] Täglich aktuelle Niederschlagsdaten (für 40 Tage)

Überprüfen Sie das Verfahren

Zeigen Sie die Struktur der öffentlichen Seite an

Katalogseite

Zunächst gibt es eine Katalogseite.

https://shimane-opendata.jp/db/organization/main

Niederschlagseite

Auf der Katalogseite befindet sich eine Seite mit "Niederschlagsdaten".

https://shimane-opendata.jp/db/dataset/010009

Tägliche Datenseite

Es scheint, dass die täglich alle 10 Minuten gespeicherten Niederschlagsdaten in CSV gespeichert werden. Wenn Sie beispielsweise die Daten für den 30. Juni herunterladen möchten, greifen Sie auf die folgende URL zu.

https://shimane-opendata.jp/db/dataset/010009/resource/1a8248dd-cd5e-4985-b01f-6ac79fe72140

  1. Juli ...

https://shimane-opendata.jp/db/dataset/010009/resource/0c9ba4db-b8eb-4b90-8e38-10abf0fd01ee

Das? Die URL variiert stark von Tag zu Tag.

Tägliche CSV

Darüber hinaus lautet die CSV-URL ...

https://shimane-opendata.jp/storage/download/1ddaef55-cc94-490c-bd3f-7efeec17fcf9/uryo_10min_20200701.csv

Ja, es ist schwer zu bedienen!

Verfahren

Versuchen wir also die Visualisierungsarbeit wie folgt.

  1. Rufen Sie die tägliche Seiten-URL von der Niederschlagsdatenseite ab
  2. Rufen Sie die CSV-URL von der täglichen URL-Seite ab
  3. Rufen Sie Daten von der erhaltenen CSV-URL ab
  4. Datenverarbeitung
  5. Visualisierung

Übrigens werden wir auch dieses Mal Colaboratory verwenden.

Holen Sie sich die URL der täglichen Seite

Rufen Sie die tägliche Seiten-URL mit dem folgenden Skript ab.

python


import requests
from bs4 import BeautifulSoup

urlBase = "https://shimane-opendata.jp"
urlName = urlBase + "/db/dataset/010009"

def get_tag_from_html(urlName, tag):
  url = requests.get(urlName)
  soup = BeautifulSoup(url.content, "html.parser")
  return soup.find_all(tag)

def get_page_urls_from_catalogpage(urlName):
  urlNames = []
  elems = get_tag_from_html(urlName, "a")
  for elem in elems:
    try:
      string = elem.get("class")[0]
      if string in "heading":
        href = elem.get("href")
        if href.find("resource") > 0:
          urlNames.append(urlBase + href)
    except:
      pass
  return urlNames

urlNames = get_page_urls_from_catalogpage(urlName)
print(urlNames)

CSV-URL abrufen

Rufen Sie die CSV-URL mit dem folgenden Skript ab.

python


def get_csv_urls_from_url(urlName):
  urlNames = []
  elems = get_tag_from_html(urlName, "a")
  for elem in elems:
    try:
      href = elem.get("href")
      if href.find(".csv") > 0:
        urlNames.append(href)
    except:
      pass
  return urlNames[0]

urls = []

for urlName in urlNames:
  urls.append(get_csv_urls_from_url(urlName))

print(urls)

Holen Sie sich Daten von der URL und erstellen Sie einen Datenrahmen

Lesen Sie die Daten direkt von der oben angegebenen URL. Da CSV jedoch alle 10 Minuten und jede Stunde gemischt wird, wird hier nur alle 10 Minuten angestrebt. Beachten Sie übrigens, dass der Zeichencode Shift JIS ist und die ersten beiden Zeilen andere Informationen als Daten enthalten. Schließen Sie sie daher aus.

python


import pandas as pd

df = pd.DataFrame()

for url in urls:
    if url.find("10min") > 0:
        df = pd.concat([df, pd.read_csv(url, encoding="Shift_JIS").iloc[2:]])

df.shape

Datenbestätigung und -verarbeitung

python


df.info()

Sie können die Spalteninformationen abrufen, indem Sie die obigen Schritte ausführen.

<class 'pandas.core.frame.DataFrame'>
Int64Index: 2880 entries, 2 to 145
Columns: 345 entries,Observatorium zu Unbenannt: 344
dtypes: object(345)
memory usage: 7.6+ MB

... gibt es auch 345 Spalten.

Wenn Sie sich die heruntergeladenen Daten in Excel ansehen, können Sie feststellen, dass es für jedes Observatorium 10-minütige Niederschläge und kumulative Niederschläge gibt und die Spalte für kumulative Niederschläge leer ist. Daher habe ich beschlossen, die Spalte für kumulative Niederschläge auszuschließen. Ich werde. スクリーンショット 2020-07-15 3.12.52.png

Die Erklärung des kumulierten Niederschlags lautet übrigens wie folgt.

Kumulativer Niederschlag ist die kumulierte Niederschlagsmenge vom Beginn des Regens bis zum Ende des Regens. Die Definition des Beginns des Regens ist, wenn der Niederschlag 0,0 mm bis 0,5 mm oder mehr beträgt, und die Definition des Endes des Niederschlags ist, wenn er 6 Stunden überschreitet, nachdem der Niederschlag nicht gezählt wurde, und der kumulierte Niederschlag am Ende des Niederschlags berechnet wird. Zurücksetzen.

Jeder scheint numerische Daten als Zeichenfolge zu haben, da Dtype ein Objekt ist ...

Wenn Sie ein wenig hineinschauen, scheinen die Zeichenfolgen "nicht erfasst", "fehlende Daten" und "Wartung" enthalten zu sein. Nachdem diese Zeicheninformationen entfernt wurden, werden sie in einen realen Wert konvertiert. Da die Datums- und Uhrzeitdaten auch eine Zeichenfolge sind, muss diese ebenfalls in einen seriellen Wert konvertiert werden.

Führen Sie also das folgende Skript aus.

python


for col in df.columns:
  if col.find("name") > 0:
    df.pop(col)

df.index = df["Observatorium"].map(lambda _: pd.to_datetime(_))
df = df.sort_index()

df = df.replace('Nicht gesammelt', '-1')
df = df.replace('Vermisst', '-1')
df = df.replace('Instandhaltung', '-1')

cols = df.columns[1:]

for col in cols:
  df[col] = df[col].astype("float")

Visualisierung

Versuchen Sie, das Diagramm zu zeichnen, nachdem Sie die Umgebung so eingestellt haben, dass die japanische Anzeige nicht merkwürdig wird.

python


!pip install japanize_matplotlib

import matplotlib.pyplot as plt
import japanize_matplotlib 
import seaborn as sns

sns.set(font="IPAexGothic")

df[cols[:5]].plot(figsize=(15,5))
plt.show()

df["2020-07-12":][cols[:5]].plot(figsize=(15,5))
plt.show()

Unknown.png

Unknown-2.png

Sie können den Regen der letzten Tage auf einen Blick sehen.

Nun, was machen wir jetzt?

Recommended Posts

Lassen Sie uns die von der Präfektur Shimane veröffentlichten Niederschlagsdaten visualisieren
Lassen Sie uns die von der Präfektur Shimane veröffentlichten Daten zum Flusswasserstand visualisieren
Visualisierung von Daten nach Präfektur
Spielen wir mit dem von TIS erstellten Unternehmensanalysedatensatz "CoARiJ"
Spielen wir mit dem von TIS erstellten Unternehmensanalysedatensatz "CoARiJ"
Berechnen wir den Übergang der Grundreproduktionszahl des neuen Koronavirus nach Präfektur
[Python] Visualisieren Sie die von Wireshark erfassten Informationen
Visualisieren Sie die Exportdaten des Piyo-Protokolls
Lassen Sie uns die Beziehung zwischen Durchschnittsgehalt und Industrie mit XBRL-Daten und Seaborn visualisieren! (7/10)
Lassen Sie uns den Datumsverlauf durch Kombinationsoptimierung festlegen
Lassen Sie uns eine Rangfolge der Anzahl der wirksamen Reproduktionen des neuen Koronavirus nach Präfektur erstellen