[PYTHON] Essayez d'utiliser les données ouvertes de COVID-19 de Yokohama / Tokyo / Osaka

Contexte

Je suis un salarié vivant à Yokohama. Cela fait deux ans que j'ai commencé à faire du Python. J'ai réussi le test 2019 # 3 G et le premier test d'implémentation de l'IA, Il n'y a pas de "ce que vous pouvez faire". Quand je regarde des reportages télévisés sur COVID-19, j'ai très peur, mais parfois Est-ce que ça va? Je pensais, ou pour le dire simplement, cela me donnait l'impression de jouer à la télévision. Vous ne pouvez pas comprendre la situation vous-même? Je pensais que c'était le déclencheur.

J'ai réduit la portée

C'est la raison.

J'ai aussi vu le CORD-19 de kaggle, mais ... anglais ...

Que faire

J'ai cherché sur Google [Tokyo Open Data Corona] et je l'ai trouvé.

Portail CIO du gouvernement

À partir de là, reportez-vous aux données et essayez d'abord de créer un graphique.

1. Créez un lien csv pour l'URL des données ouvertes

elements url
tokyo_consultation https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_combined_telephone_advice_center.csv
tokyo_call https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_call_center.csv
tokyo_confirm https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv
kanagawa_confirm http://www.pref.kanagawa.jp/osirase/1369/data/csv/patient.csv
kanagawa_consultation http://www.pref.kanagawa.jp/osirase/1369/data/csv/contacts.csv
kanagawa_returnee http://www.pref.kanagawa.jp/osirase/1369/data/csv/querent.csv
osaka_confirm http://www.pref.osaka.lg.jp/attach/23711/00346644/youseisyajyouhou.xlsx

2. Représentez graphiquement un nombre cumulatif simple à partir des données d'index et de date

Importer la bibliothèque

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime as dt
#↓ je mets toujours
plt.close('all')

Dataframe et traitement des données

Le format étant différent dans chaque préfecture, chaque processus


'''
##########################################
0.Tokyo Metropolitan New Corona Consultation Service Nombre de consultations [nouveau]
1.Nombre de consultations au nouveau centre d'appels Corona à Tokyo [nouveau]
2.Tokyo_Détails de l'annonce d'un nouveau patient positif pour le coronavirus
3.Préfecture de Kanagawa_Nombre et attributs des patients positifs
4.Préfecture de Kanagawa_Nombre de consultations de numérotation dédiées
5.Préfecture de Kanagawa_Retourné / Contact Centre de conseil téléphonique Nombre de consultations
6.Préfecture d'Osaka_Statut d'occurrence positive du patient
##########################################
'''
#Lister les numéros à afficher dans cette liste
#Correspond au nombre de patients 2,3,Mettez 6 dans la liste
sel_list = [2, 3, 6]

for sel_num in sel_list:
    #Charger le csv contenant chaque URL
    url_df = pd.read_csv('opendata.csv')
    if sel_num < 3: #Pour les données de Tokyo
        df = pd.read_csv(url_df.loc[sel_num,'url'], encoding='utf-8')
    elif sel_num == 6: #Pour les données d'Osaka
        df = pd.read_excel(url_df.loc[sel_num,'url'], encoding='shift_jis',header=1)
    else: #Pour les données Kanagawa
        df = pd.read_csv(url_df.loc[sel_num, 'url'], encoding='shift-jis')

    #Pour les données de Tokyo
    if sel_num == 2:
        fig1 = plt.figure()
        ax1 = fig1.add_subplot()
        #Puisqu'il ne peut pas être affiché en japonais, passez à la notation alphabétique
        df = df.rename(columns={'Publié_Date': 'date', 'No':'Tokyo'})
        df['date'] = pd.to_datetime(df['date'],format='%Y-%m-%d')
        df = df.set_index('date')
        df['Tokyo'].plot(ax=ax1, legend=True)
    
    #Pour les données Kanagawa
    elif sel_num == 3:
        df = df.rename(columns={'Date de l'annonce': 'date'})
        df['date'] = pd.to_datetime(df['date'],format='%Y-%m-%d')
        df = df.set_index('date')
        #Puisqu'il n'y a pas de numéro d'index, je vais le faire
        serial_num = pd.RangeIndex(start=1, stop=len(df.index) + 1, step=1)
        #Remplacez le nom de la colonne par Kanagawa pour le nom de la légende
        df['Kanagawa'] = serial_num
        df['Kanagawa'].plot(ax=ax1, legend=True)
    
    #Pour les données d'Osaka
    elif sel_num == 6:
        df = df.rename(columns={'nombre':'num', 'Date de couverture': 'date'})
        #Convertir les données de date Excel
        excel_time = datetime.date(1899, 12, 30)
        ##Traitez chaque ligne avec itération
        #Le remplacement de DataFrame crée une liste et écrase
        new_date = []
        for index, row in df.iterrows():
            new_date.append(excel_time + datetime.timedelta(row['date']))        
        df['date'] = new_date
        
        df['Osaka'] = df['num']
        df = df.set_index('date')
        df['Osaka'].plot(ax=ax1, legend=True) 

3. Là où j'étais inquiet - notation temporelle Excel

Je me demandais s'il s'agissait d'une notation horaire UNIX, mais j'ai utilisé des numéros de date spécifiques à Excel. J'ai trouvé cette page que je lisais.

Convertir le "nombre" de la date Excel en date / heure python

Je ne pouvais pas m'en empêcher.

4. Résultat

Figure_1.png

5. Impressions

J'ai pu publier un graphique cumulatif. Le code n'est pas intelligent. Pour le moment, c'est tout pour aujourd'hui. Python a de nombreux sites qui vous disent exactement ce que vous voulez faire, donc Il y a un sentiment de sécurité que vous pourrez faire quelque chose lorsque vous avez des ennuis. Cependant, je ne connaissais pas la notation datetime dans Excel.

Recommended Posts

Essayez d'utiliser les données ouvertes de COVID-19 de Yokohama / Tokyo / Osaka
Tokyo Corona: faites une prédiction simple à partir de données ouvertes avec la fonction exponentielle curve_fit
Obtenez des données de Twitter avec Tweepy
Essayez d'utiliser Amazon DynamoDB à partir de Python
Essayez d'utiliser la fonction d'intégration de données de scanpy (sc.tl.ingest)
Essayez d'utiliser django-import-export pour ajouter des données csv à django
Envoyer des données depuis Raspberry Pi à l'aide d'AWS IOT
Crypter / décrypter les données de Golang à l'aide d'Azure KeyVault