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.
Erhalten von einer von der Regierung betriebenen 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.
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
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')
Das Ausgabeergebnis wird jedes Jahr im Ordner "Ausgabe" ausgegeben. Wenn Sie das Ausgabe-HTML öffnen, sieht es so aus. Ich habe ein GIF erstellt, das das Ausgabebild von 2001 bis 2019 anzeigt.
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.
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.
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.
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