[Python] J'ai écrit la route du typhon sur la carte en utilisant le folium

Contenu de l'article

Les typhons se sont-ils produits si souvent lorsque vous étiez enfant? Un typhon est-il arrivé au Japon vers octobre? Il y avait une question vague. Je voulais pouvoir résoudre cette question en utilisant les données sur les typhons publiées par l'Agence météorologique, alors j'ai essayé différentes choses.

Source d'acquisition de données

Obtenu à partir d'un site de catalogue de données exploité par le gouvernement.

Site du catalogue de données

Prévisions météo_Prévisions météorologiques / Matériaux des typhons Utilisez "Données CSV de la table de position des typhons" sur cette page.

Dans cet article, j'ai utilisé les données CSV de 2001 à 2019 publiées dans le lien.

Essayez d'écrire l'itinéraire du typhon sur la carte en utilisant le folium

Préparation

L'en-tête des données CSV était japonais, je l'ai donc changé en anglais. Tout à fait approprié

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

Je ne l'ai pas vraiment conçu

import folium
import pandas as pd

pd.options.display.precision = 3

# Année de début et de fin
start_year = 2001
end_year = 2019

# Processus sur une base annuelle
for year in range(start_year, end_year+1):
    print('# ' + str(year) + ' year start')
 #Lecture des données
    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

 #Processer les données CSV ligne par ligne
    for lt, lo, name, land in zip(latitude, longitude, typhoon_names, landing):
 # Si le nom du typhon change, écrivez les informations du typhon en cours de traitement sur la carte
        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')

Résultat de sortie

Le résultat de la sortie est publié chaque année dans le dossier "output". Lorsque vous ouvrez le HTML de sortie, il ressemble à ceci. 2019_typhoon.png J'ai créé un GIF qui affiche l'image de sortie de 2001 à 2019. typhoon.gif

Le typhon qui a atterri au Japon tente de changer la couleur de la ligne

Après tout, je veux faire ressortir le typhon qui a atterri au Japon. Il y avait un élément appelé "atterrissage" dans l'élément final des données. Il vaut 1 s'il a atterri et 0 s'il ne l'a pas fait. Utilisez ces données pour le codage couleur.

Il est à noter que ce "débarquement" n'est pas "au Japon". Il fallait donc juger s’il s’agissait du Japon ou non.

code

import folium
import pandas as pd

pd.options.display.precision = 3

# Année de début et de fin
start_year = 2001
end_year = 2019

# Coordonnées des bords nord, sud, est et ouest du Japon
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

# Processus sur une base annuelle
for year in range(start_year, end_year+1):
    print('# ' + str(year) + ' year start')
 #Lecture des données
    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'
    
 #Processer les données CSV ligne par ligne
    for lt, lo, name, land in zip(latitude, longitude, typhoon_names, landing):
 # Si le nom du typhon change, écrivez les informations du typhon en cours de traitement sur la carte
        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')

Le jugement au Japon se fait en "is_japan_randing". Je pense que c'est très difficile, mais la latitude se situe-t-elle dans la plage la plus au nord et la plus au sud du Japon? La longitude est-elle la plage la plus à l'ouest et à l'est? Est jugé.

résultat

2019_color.png Seule la ligne atterrissant au Japon est devenue rouge. Il existe des lignes assez proches de Kyushu et Honshu. Vous trouverez ci-dessous une citation de Weather.com.

L'atterrissage d'un typhon signifie que le centre du typhon atteint les côtes de Hokkaido, Honshu, Kyushu et Shikoku. (Okinawa ne s'appelle pas un atterrissage d'un typhon, mais un passage.) Un typhon qui approche signifie entrer dans un rayon de 300 km.

En pensant de cette façon, vous pouvez voir à nouveau que cette ligne est la coordonnée du centre.

À la fin

Un tel typhon a-t-il atterri au Japon ces dernières années? J'ai essayé cela à partir de la question, mais il semble que le nombre de débarquements n'ait pas beaucoup changé depuis 2001. Ensuite, je vais essayer de visualiser l'ampleur du typhon.

Recommended Posts

[Python] J'ai écrit la route du typhon sur la carte en utilisant le folium
J'ai écrit la grammaire de base de Python dans Jupyter Lab
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
J'ai écrit la file d'attente en Python
J'ai écrit la pile en Python
J'ai écrit le code pour écrire le code Brainf * ck en python
Je ne connaissais pas les bases de Python
Le modèle de projet Python auquel je pense.
Étude sur Tokyo Rent en utilisant Python (3-1 sur 3)
[Python débutant] J'ai rassemblé les articles que j'ai écrits
Obtenez des images de sites intéressants / 47 à l'aide de Python (Partie 2/2: liste des cibles publiées par github)
J'ai essayé l'analyse par grappes de la carte météo
vprof - J'ai essayé d'utiliser le profileur pour Python
Python: essayez d'utiliser l'interface utilisateur sur Pythonista 3 sur iPad
Comparez la vitesse d'ajout et de carte Python
Folium: Visualisez les données sur une carte avec Python
Essayez Progate Free Edition [Python I]
J'ai essayé d'utiliser le module Datetime de Python
J'ai touché certaines des nouvelles fonctionnalités de Python 3.8 ①
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
Essayez d'utiliser le module de collections (ChainMap) de python3
Au moment de la mise à jour de python avec ubuntu
Exécutez Route53 sur la ligne de commande à l'aide de l'AWS-CLI.
J'ai essayé d'utiliser le filtre d'image d'OpenCV
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
J'ai installé Pygame avec Python 3.5.1 dans l'environnement de pyenv sur OS X
Essayez de tracer la concentration environnementale des composés organiques du fluor sur une carte à l'aide de données ouvertes
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
J'ai essayé d'afficher le degré d'infection par le virus corona sur la carte thermique Seaborn
[Recette du formateur] J'ai touché le flacon du framework Python.
Explication du concept d'analyse de régression à l'aide de python Partie 2
Bases de l'écran d'entrée / sortie en utilisant tkinter en python3
[Exemple d'amélioration de Python] Apprentissage des bases de Python sur un site gratuit en 2 semaines
J'ai essayé Python sur Mac pour la première fois.
Découpez une partie de la chaîne à l'aide d'une tranche Python
Python pratique 100 coups J'ai essayé de visualiser l'arbre de décision du chapitre 5 en utilisant graphviz
Peut-être ai-je surestimé l'impact de Shell Shock sur CGI
le zen de Python
J'ai essayé python pour la première fois avec heroku
Dessinez sur Jupyter en utilisant la fonction de tracé des pandas
La douleur de gRPC en utilisant Python. Novembre 2019. (Mémo personnel)
J'ai vérifié les versions de Blender et Python
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
Explication du concept d'analyse de régression à l'aide de Python Partie 1
J'ai essayé d'utiliser l'API de Sakenowa Data Project
Explication du concept d'analyse de régression à l'aide de Python Extra 1
Étude de Python Hour8: Utilisation de packages
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser du folium
J'ai essayé de résumer les opérations de chaîne de Python
J'ai écrit un script Python qui exporte tous mes articles à l'aide de l'API Qiita v2
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall