[Python] Ich habe die Route des Taifuns mit Folium auf die Karte geschrieben

Artikelinhalt

Sind Taifune als Kind so oft aufgetreten? Ist um den Oktober ein Taifun nach Japan gekommen? Es gab eine vage Frage. Ich wollte diese Frage anhand der von der Meteorologischen Agentur veröffentlichten Daten zu Taifunen lösen können, also habe ich verschiedene Dinge ausprobiert.

Datenerfassungsquelle

Erhalten von einer von der Regierung betriebenen Datenkatalog-Site.

Datenkatalog-Site

Wettervorhersage_Wettervorhersage / Taifunmaterialien Verwenden Sie die "Typhoon Position Table CSV-Daten" auf dieser Seite.

In diesem Artikel habe ich die im Link veröffentlichten CSV-Daten von 2001 bis 2019 verwendet.

Versuchen Sie, die Route des Taifuns mit Folium auf die Karte zu schreiben

Vorbereitung

Der CSV-Datenheader war japanisch, daher habe ich ihn in Englisch geändert. Ganz passend

year,month,day,hour(UTC),typhoon_no,typhoon_name,rank,latitude,longitude,central_pressure,max_wind_speed,50KT_LDD,50KT_LD,50KT_MA,30KT_LDD,30KT_LD,30KT_MA,landing

Code

Ich habe es nicht wirklich erfunden

import folium
import pandas as pd

pd.options.display.precision = 3

# Jahr des Beginns und des Endes
start_year = 2001
end_year = 2019

# Jährlich verarbeiten
for year in range(start_year, end_year+1):
    print('# ' + str(year) + ' year start')
 #Daten lesen
    df = pd.read_csv('./typhoon/table' + str(year) + '.csv',encoding="SHIFT-JIS")
    typhoon_names = list(df['typhoon_name'])
    latitude = list(df["latitude"])
    longitude = list(df["longitude"])
    landing = list(df["landing"])

    map = folium.Map(location=[35.6611098,139.6953576], zoom_start=3)

    target_typhoon = typhoon_names[0]
    target_location = []
    color = 'blue'
    typhoon_count = 0

 # CSV-Daten zeilenweise verarbeiten
    for lt, lo, name, land in zip(latitude, longitude, typhoon_names, landing):
 # Wenn sich der Name des Taifuns ändert, schreiben Sie die Informationen des zu verarbeitenden Taifuns auf die Karte
        if name != target_typhoon:
            map.add_child(folium.PolyLine(locations=target_location, color=color))
            target_location = [[float(lt), float(lo)]]
            target_typhoon = name
            typhoon_count += 1
        else:
            target_location.append([float(lt), float(lo)])

    map.add_child(folium.PolyLine(locations=target_location, color=color))
    map.save('./output/' + str(year) + '_typhoon_location.html')
    print('# Number of typhoon : ' + str(typhoon_count))
    print('# ' + str(year) + ' year end')

Ausgabeergebnis

Das Ausgabeergebnis wird jedes Jahr im Ordner "Ausgabe" ausgegeben. Wenn Sie das Ausgabe-HTML öffnen, sieht es so aus. 2019_typhoon.png Ich habe ein GIF erstellt, das das Ausgabebild von 2001 bis 2019 anzeigt. typhoon.gif

Der Taifun, der in Japan gelandet ist, versucht, die Farbe der Linie zu ändern

Schließlich möchte ich den Taifun, der in Japan gelandet ist, hervorheben. Im letzten Element der Daten befand sich ein Element namens "Landung". Es ist 1, wenn es gelandet ist, und 0, wenn es nicht gelandet ist. Verwenden Sie diese Daten für die Farbcodierung.

Es sei darauf hingewiesen, dass diese "Landung" nicht "in Japan" ist. Daher musste beurteilt werden, ob es sich um Japan handelte oder nicht.

Code

import folium
import pandas as pd

pd.options.display.precision = 3

# Jahr des Beginns und des Endes
start_year = 2001
end_year = 2019

# Koordinaten der Nord-, Süd-, Ost- und Westkanten Japans
east_end = 153.5911
west_end = 122.5601
north_end = 45.3326
south_end = 20.2531

def is_japan_randing(lt, lo, randing):
    if south_end <= lt and lt <= north_end and west_end <= lo and lo <= east_end and randing == 1:
        return True
    else:
        return False

# Jährlich verarbeiten
for year in range(start_year, end_year+1):
    print('# ' + str(year) + ' year start')
 #Daten lesen
    df = pd.read_csv('./typhoon/table' + str(year) + '.csv',encoding="SHIFT-JIS")
    typhoon_names = list(df['typhoon_name'])
    latitude = list(df["latitude"])
    longitude = list(df["longitude"])
    landing = list(df["landing"])

    map = folium.Map(location=[35.6611098,139.6953576], zoom_start=3)

    target_typhoon = typhoon_names[0]
    target_location = []
    typhoon_count = 0
    color = 'blue'
    
 # CSV-Daten zeilenweise verarbeiten
    for lt, lo, name, land in zip(latitude, longitude, typhoon_names, landing):
 # Wenn sich der Name des Taifuns ändert, schreiben Sie die Informationen des zu verarbeitenden Taifuns auf die Karte
        if name != target_typhoon:
            map.add_child(folium.PolyLine(locations=target_location, color=color))
            target_location = [[float(lt), float(lo)]]
            target_typhoon = name
            typhoon_count += 1
            color = 'blue'
        else:
            target_location.append([float(lt), float(lo)])
            if is_japan_randing(lt, lo, land):
                color = 'red'

    map.add_child(folium.PolyLine(locations=target_location, color=color))
    map.save('./output/' + str(year) + '_typhoon_location.html')
    print('# Number of typhoon : ' + str(typhoon_count))
    print('# ' + str(year) + ' year end')

Das Urteil in Japan erfolgt in "is_japan_randing". Ich denke, es ist sehr rau, aber liegt der Breitengrad im nördlichsten und südlichsten Bereich Japans? Ist der Längengrad der westlichste und östlichste Bereich? Wird beurteilt.

Ergebnis

2019_color.png Nur die Linienlandung in Japan wurde rot. Es gibt Linien, die Kyushu und Honshu sehr nahe kommen. Unten finden Sie ein Zitat von Weather.com.

Die Landung eines Taifuns bedeutet, dass das Zentrum des Taifuns die Küsten von Hokkaido, Honshu, Kyushu und Shikoku erreicht. (Okinawa wird nicht als Landung eines Taifuns bezeichnet, sondern als Vorbeifahren.) Ein sich nähernder Taifun bedeutet das Eintreten in einem Radius von 300 km.

Wenn Sie so denken, können Sie wieder sehen, dass diese Linie die Koordinate des Zentrums ist.

Am Ende

Ist ein solcher Taifun in den letzten Jahren in Japan gelandet? Ich habe dies anhand der Frage versucht, aber es scheint, dass sich die Anzahl der Landungen seit 2001 nicht wesentlich geändert hat. Als nächstes werde ich versuchen, die Größe des Taifuns zu visualisieren.

Recommended Posts

[Python] Ich habe die Route des Taifuns mit Folium auf die Karte geschrieben
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe die Warteschlange in Python geschrieben
Ich habe den Stack in Python geschrieben
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Ich kannte die Grundlagen von Python nicht
Die Python-Projektvorlage, an die ich denke.
Studie über die Miete in Tokio mit Python (3-1 von 3)
[Python-Anfänger] Ich habe die Artikel gesammelt, die ich geschrieben habe
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Python: Versuchen Sie, die Benutzeroberfläche von Pythonista 3 auf dem iPad zu verwenden
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Folium: Visualisieren Sie Daten auf einer Karte mit Python
Probieren Sie Progate Free Edition [Python I]
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe einige der neuen Funktionen von Python 3.8 touched angesprochen
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Zum Zeitpunkt des Python-Updates mit Ubuntu
Führen Sie Route53 in der Befehlszeile mit AWS-CLI aus.
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich habe Pygame mit Python 3.5.1 in der Umgebung von pyenv unter OS X installiert
Versuchen Sie, die Umweltkonzentration organischer Fluorverbindungen mit offenen Daten auf einer Karte darzustellen
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen
[Rezept des Trainers] Ich habe die Flasche des Python-Frameworks berührt.
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2
Grundlagen des Eingabe- / Ausgabebildschirms mit tkinter in python3
[Beispiel für eine Python-Verbesserung] In 2 Wochen wurden die Grundlagen von Python auf einer kostenlosen Website erlernt
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Python-Übung 100 Schläge Ich habe versucht, den Entscheidungsbaum von Kapitel 5 mit graphviz zu visualisieren
Vielleicht habe ich die Auswirkungen von Shell Shock auf CGI überschätzt
der Zen von Python
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Zeichnen auf Jupyter mit der Plot-Funktion von Pandas
Der Schmerz von gRPC mit Python. November 2019. (Persönliches Memo)
Ich habe mir die Versionen von Blender und Python angesehen
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Erläuterung des Konzepts der Regressionsanalyse mit Python Extra 1
Studie aus Python Hour8: Verwenden von Paketen
Ich habe versucht, Python (3) anstelle eines Funktionsrechners zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe ein Python-Skript geschrieben, das alle meine Beiträge mit der Qiita API v2 exportiert
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden