[PYTHON] Utilisation des données météorologiques passées 4 (sensations de la météo pendant les Jeux olympiques de Tokyo)

L'Agence météorologique fournira gratuitement des données météorologiques historiques jusqu'à fin mars 2020. (Référence) Environnement d'utilisation des données météorologiques passées https://www.data.jma.go.jp/developer/past_data/index.html

Les données météorologiques de base sont "Tout le monde peut l'utiliser quel que soit le but et la cible d'utilisation", nous allons donc faire quelque chose en utilisant les données météorologiques.

Vous pouvez également le télécharger à partir de la page "Téléchargement des données météorologiques passées" de l'Agence météorologique, mais c'est très pratique car vous pouvez tout télécharger en même temps. Les données disponibles sont énumérées ci-dessous. https://www.data.jma.go.jp/developer/past_data/data_list_20200114.pdf La date limite arrive bientôt, donc si vous en avez besoin, téléchargez-la tôt.

Cette fois, j'essaierai d'exprimer la météo des JO de Tokyo en lettres. WordCloud (1.6.0) est utilisé pour afficher les caractères.

Téléchargement de données

Comme pour «Utilisation des données météorologiques passées 2 (changement de température maximale pendant les Jeux olympiques de Tokyo)», utilisez «Observation météorologique au sol» - «Valeur horaire / quotidienne». Vérifiez les éléments suivants pour le format de fichier. http://data.wxbc.jp/basic_data/kansoku/surface/format_surface.pdf

Téléchargez le fichier dans le dossier surface. Cela prend du temps car il a une capacité d'environ 2 Go.

import os
import urllib.request

#Téléchargement du fichier de valeur horaire / quotidienne d'observation météorologique au sol
url    = 'http://data.wxbc.jp/basic_data/kansoku/surface/hourly_daily_1872-2019_v191121.tar'
folder = 'surface'
path   = 'surface/hourly_daily_1872-2019_v191121.tar'
#Créer le dossier
os.makedirs(folder, exist_ok=True)
if not os.path.exists(path):
    #Télécharger
    urllib.request.urlretrieve(url, path)

Pour plus de détails sur le fichier, reportez-vous à "Utilisation des données météorologiques passées 2 (changement de température maximale pendant les Jeux olympiques de Tokyo)".

Lecture des données météorologiques

En ce qui concerne les données météorologiques, les données «diurne» et «nocturne» sont stockées en tant que conditions météorologiques générales. Cette fois, nous utiliserons les données «de jour». L'aperçu météorologique comprend jusqu'à quatre conditions météorologiques et connecteurs. Par exemple, s'il fait beau toute la journée, ce sera "bien".

code conjonction
0 Pas de données
1 Vide
2 Temporaire
3 quelquefois
4 arrière
5 Temporairement après
6 Parfois plus tard
7 Avec (avec, ○○)
code Météo code Météo code Météo
0 Pas de temps 10 Mizore 20 Vent
1 Ensoleillé 11 neige 21 Tonnerre
2 Bien 12 beaucoup de neige 22 Grêle
3 Nuage léger 13 Tempête de neige 23 léopard
4 Nuageux 14 Fubuki 24 Vent et tonnerre
5 brouillard 15 Fubuki 25 Tonnerre et grêle
6 Brouillard pluie 16 réserve 26 Tonnerre / Hyo
7 pluie 17 réserve 27 Tonnerre / brouillard
8 forte pluie 18 réserve 28 Aucune précipitation
9 tempête 19 réserve 29 Il y a une journée ensoleillée
30 réserve
31 ×

«Pluie abondante» est utilisé lorsqu'il y a des précipitations de 30 mm ou plus. Pour plus de détails, consultez le site suivant. http://www.data.jma.go.jp/obd/stats/data/mdrr/man/gaikyo.html

Préparez une liste pour la conversion.

conjunction = ['Pas de données', 'Vide', 'Temporaire', 'quelquefois', 'arrière', 'arrièreTemporaire', 'arrièrequelquefois', '、']
conjunction7 = 'Accompagné par'
weather = ['Pas de temps', 'Ensoleillé', 'Bien', 'Nuage léger', 'Nuageux', 'brouillard', 'brouillardpluie', 'pluie', '大pluie', '暴風pluie',
           'Mizore', 'neige', '大neige', '暴風neige', 'Fubuki', '地Fubuki', 'réserve', 'réserve', 'réserve', 'réserve',
           'Vent', 'Tonnerre', 'Grêle', 'léopard', 'Vent・Tonnerre', 'Tonnerre・Grêle', 'Tonnerre・léopard', 'Tonnerre・霧', 'Aucune précipitation', 'Il y a une journée ensoleillée',
           'réserve', '×']

Le mot de connexion est généralement mis avant la météo, mais dans le cas de "accompagné", la météo (la partie de XX) est au milieu comme "avec XX".

Chargez des données dans une trame de données pandas. L'aperçu météo est stocké à partir du 1500e octet de chaque jour. Lisez tout en convertissant des nombres en caractères. Insérez un espace entre chaque mot pour un affichage ultérieur dans WordCloud. WordCloud ne décompose pas les mots. Vous devez le décomposer en mots et le transmettre à l'avance.

#Création d'une trame de données pour le stockage de données
import pandas as pd

tokyo_df = pd.DataFrame()
#Obtenez un aperçu de la météo
import tarfile

#Réglage du point=Tokyo
p_no = '662'

#Récupérez les fichiers contenus dans le fichier tar
with tarfile.open(path, 'r') as tf:
    for tarinfo in tf:
        if tarinfo.isfile():
            # tar.Récupérez les fichiers contenus dans le fichier gz
            with tarfile.open(fileobj=tf.extractfile(tarinfo), mode='r') as tf2:
                for tarinfo2 in tf2:
                    if tarinfo2.isfile():
                        #Fichiers en lecture seule avec des points correspondants
                        if tarinfo2.name[-3:] == p_no:
                            print(tarinfo2.name)
                            #Fichier ouvert
                            with tf2.extractfile(tarinfo2) as tf3:
                                lines = tf3.readlines()
                                for line in lines:
                                    #Ignorer les fichiers qui ne contiennent pas de données
                                    if line[0:3] == b'   ':
                                        continue
                                    #Année
                                    year = line[14:18].decode()
                                    #temps
                                    date = line[18:22].decode().replace(' ', '0')
                                    #Obtenez un aperçu de la météo
                                    conditions = ''
                                    p = 1500
                                    #
                                    for i in range(4):
                                        #conjonction
                                        c = int(line[p:p+1])
                                        c_rmk = int(line[p+1:p+2])
                                        if c_rmk == 8:
                                            conditions += conjunction[c] + ' '
                                        #Météo
                                        w = int(line[p+2:p+4])
                                        w_rmk = int(line[p+4:p+5])
                                        if w_rmk == 8:
                                            conditions += weather[w] + ' '
                                            if c == 7: #S'il est accompagné de 〇〇, attachez-le à l'arrière.
                                                conditions += conjunction7 + ' '
                                        p += 5

                                    #Stockage de données
                                    tokyo_df.loc[year, date] = conditions

Vérifiez les données.

#Confirmation des données
tokyo_df

Il n'y a pas d'informations météorologiques dans l'ancien temps. Il semble que le format actuel soit postérieur à 1989, donc je retirerai les données après 1989. La date sera la période olympique.

tokyo_olympic_df = tokyo_df.loc['1989':'2019','0724':'0809']
tokyo_olympic_df

Le temps est correct.

Affichage par nuage de mots

Affiche la météo à l'aide de WordCloud. La taille des lettres change en fonction du nombre de mots utilisés dans les conditions météorologiques. Il n'est peut-être pas possible de refléter précisément la météo, mais vous devriez être en mesure de vous faire une idée approximative de la situation, car «bien» est compté comme le même pour «bien» et «nuageux temporaire» toute la journée. Il contient également un connecteur, mais laissez-le tel quel pour indiquer le changement de temps.

Tout d'abord, vérifions la météo pendant la période olympique chaque année. Pour chaque année, nous combinons les chaînes d'aperçu météo et les transmettons à WordCloud. C'est un point à noter. -Spécifiez la police (font_path) pour afficher le japonais. Mon environnement a spécifié MS Gothic pour Winodws. Veuillez choisir la police appropriée à votre environnement. -Par défaut, les mots à une seule lettre ne sont pas affichés. Spécifiez l'expression régulière avec regexp et affichez-la.

import matplotlib.pyplot as plt
from wordcloud import WordCloud
#Affichage par année
i = 1
plt.figure(figsize=(16, 33))
for row in tokyo_olympic_df.index:
    text = ''
    for column in tokyo_olympic_df.columns:
        text += tokyo_olympic_df.loc[row, column]
    #Création d'image de personnage avec WordCloud
    wordcloud = WordCloud(colormap='jet', font_path="msgothic.ttc", regexp="\w+").generate(text)
    plt.subplot(11,3,i)
    plt.imshow(wordcloud)
    plt.title(row)
    plt.axis("off")
    i += 1
plt.show()

Le résultat. En fait, ce serait bien si la couleur du texte pouvait être modifiée en fonction des conditions météorologiques telles que le beau temps et la pluie, mais la couleur du texte semble être choisie au hasard. Il existe quelques variations selon les années, mais le temps est généralement ensoleillé et nuageux. WordCloud_year.png

Par date.

#Affichage par date
i = 1
plt.figure(figsize=(16, 18))
for column in tokyo_olympic_df.columns:
    text = ''
    for row in tokyo_olympic_df.index:
        text += tokyo_olympic_df.loc[row, column]
    #Création d'image de personnage avec WordCloud
    wordcloud = WordCloud(colormap='jet', font_path="msgothic.ttc", regexp="\w+").generate(text)
    plt.subplot(6,3,i)
    plt.imshow(wordcloud)
    plt.title(column)
    plt.axis("off")
    i += 1
plt.show()

C'est le milieu de l'été, donc il fait beau. WordCloud_date.png

Calendrier des sensations météorologiques

C'est un gros problème, alors créons un calendrier météo. C'est pour un an. 2019 sera jusqu'en 2018 car il n'y a que des données à mi-chemin. De plus, le 29 février de l'année Uru a été supprimé.

tokyo_365_df = tokyo_df.loc['1989':'2018']
tokyo_365_df = tokyo_365_df.drop('0229', axis=1)
tokyo_365_df
#Affichage par date
i = 1
plt.figure(figsize=(16, 40))
for column in tokyo_365_df.columns:
    text = ''
    for row in tokyo_365_df.index:
        text += tokyo_365_df.loc[row, column]
    #Création d'image de personnage avec WordCloud
    wordcloud = WordCloud(colormap='jet', font_path="msgothic.ttc", regexp="\w+").generate(text)
    plt.subplot(37,10,i)
    plt.imshow(wordcloud)
    plt.title(column)
    plt.axis("off")
    i += 1
plt.show()

C'est un calendrier d'un an à Tokyo. WordCloud_tokyo.png

Pendant la saison des pluies, la pluie est perceptible. Le 10 octobre, lors de la cérémonie d'ouverture des derniers Jeux olympiques de Tokyo, qui serait une journée particulière de beau temps, a eu lieu, il semble qu'il y ait moins de pluie que les dates environnantes. Je pense que c'est une journée particulière de beau temps.

Les points peuvent être adressés en changeant le numéro de point de p_no = '662'. Si vous avez créé un calendrier pour votre emplacement local, modifiez le numéro de l'emplacement. Vous pouvez vérifier le numéro de point dans le fichier d'historique des informations de point (smaster_201909.tar.gz).

Voici un exemple de Sapporo (412). Il y a beaucoup de neige en hiver.

WordCloud_sapporo.png

Cette fois, j'ai essayé d'exprimer le temps par la taille des lettres. Il est plus précis de l'exprimer numériquement ou sous forme de graphique, mais il est intuitif et intéressant de l'exprimer en taille de caractère.

Les données seront publiées jusqu'à la fin du mois de mars 2020, donc si vous en avez besoin, nous vous recommandons de les télécharger dès que possible.

Recommended Posts

Utilisation des données météorologiques passées 4 (sensations de la météo pendant les Jeux olympiques de Tokyo)
Utilisation des données météorologiques passées 1 (affichage des points Amedas)
Utilisation des données météorologiques passées 3 (affichage de cartes thermiques chronologiques des précipitations lors de fortes pluies)
Utilisons les données ouvertes de "Mamebus" en Python
Essayez de gratter les données COVID-19 Tokyo avec Python
Analyse des données basée sur les résultats des élections du gouverneur de Tokyo (2020)
Utilisez PyCaret pour prédire le prix des appartements d'occasion à Tokyo!
Expliquer le mécanisme de la classe de données PEP557
Obtenez la liste des colonnes et la liste des données de CASTable
Visualisez les données d'exportation du journal Piyo