Visualisez la propagation de Corona dans chaque préfecture Le but est le suivant.
Utilisez python seaborn. Cliquez ici pour le nombre de personnes infectées (jusqu'à 4/5). https://toyokeizai.net/sp/visual/tko/covid19/ Cliquez ici pour les données de nom de préfecture. https://gist.github.com/mugifly/d6e68a516de4a008687c Voici un résumé de diverses choses. https://github.com/kyasby/colona.git
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
% matplotlib inline
est magique.
numpy importe pour cumsum ()
.
df = pd.read_csv("COVID-19.csv")
df = df[["Préfecture de consultation", "Préfecture de résidence", "Nombre de personnes", "Date d'apparition", "Date fixe"]]
df = df.rename(columns={"Âge":"age", "sexe":"sex", "Préfecture de consultation":"hsp", "Préfecture de résidence":"house"})
df
Extrayez les colonnes requises et renommez-les en même temps. En passant une liste à df [], vous ne pouvez extraire que cette colonne.
df.rename(columns={"old_columns_name":"new_name"},index={"old_index_name":"new_name"})
Vous pouvez modifier le nom de la colonne et le nom de l'index en passant un dictionnaire tel que.
for i, row in df.iterrows():
if type(row["Date d'apparition"])==float:
df.at[i, "Date d'apparition"] = row["Date fixe"]
else:
pass
df = df.rename(columns = {"Date d'apparition":"Date"})
Je veux que l'axe horizontal de la carte de chaleur soit la date, donc j'obtiens la date. Cependant, comme indiqué ci-dessous, la «date de début» contient NaN, donc dans ce cas, remplacez-la par la «date confirmée».
hsp | house | Nombre de personnes | Date d'apparition | Date fixe |
---|---|---|---|---|
Préfecture de Kanagawa | Préfecture de Kanagawa | 1 | 1/3/2020 | 1/15/2020 |
Tokyo | les gens de la République de Chine | 1 | 1/14/2020 | 1/24/2020 |
Tokyo | les gens de la République de Chine | 1 | 1/21/2020 | 1/25/2020 |
Préfecture d'Osaka | Préfecture d'Osaka | 1 | 1/20/2020 | 1/29/2020 |
inconnue | les gens de la République de Chine | 1 | 1/29/2020 | 1/30/2020 |
Préfecture de Chiba | les gens de la République de Chine | 1 | NaN | 1/30/2020 |
Enfin, changez le nom de la colonne en "Date".
Jugement NaN
type (row [" date de début "]) == float
Je l'ai écrit comme ça, mais s'il vous plaît laissez-moi savoir s'il existe une meilleure façon de l'écrire.
todofuken = pd.read_csv("japan.csv", header=None)[0]
df["hsp"].value_counts()
Donc, si vous vérifiez le contenu de "hsp", vous pouvez voir qu'il y a "Aéroport de Haneda" et "Inconnu".
df["hsp"]= df["hsp"].apply(lambda x : "Autre" if x not in list(todofuken) else x)
Utilisez apply et la fonction lambda pour réécrire partiellement le contenu de df ["hsp"]. S'il ne figure pas dans la liste des noms de préfecture, entrez «Autre», et s'il y en a, entrez la préfecture telle quelle. Lorsque vous utilisez les fonctions apply et lambda, vous obtiendrez probablement une erreur de syntaxe sans autre. (Non confirmé) Veuillez faire attention.
Jusqu'à présent, df ressemble à ceci.
hsp | house | Nombre de personnes | Date | Date fixe |
---|---|---|---|---|
Préfecture de Kanagawa | Préfecture de Kanagawa | 1 | 1/3/2020 | 1/15/2020 |
Tokyo | les gens de la République de Chine | 1 | 1/14/2020 | 1/24/2020 |
Tokyo | les gens de la République de Chine | 1 | 1/21/2020 | 1/25/2020 |
Préfecture d'Aichi | les gens de la République de Chine | 1 | 1/23/2020 | 1/26/2020 |
Préfecture d'Aichi | les gens de la République de Chine | 1 | 1/22/2020 | 1/28/2020 |
Préfecture de Nara | Préfecture de Nara | 1 | 1/14/2020 | 1/28/2020 |
Hokkaido | les gens de la République de Chine | 1 | 1/26/2020 | 1/28/2020 |
Préfecture d'Osaka | Préfecture d'Osaka | 1 | 1/20/2020 | 1/29/2020 |
pvt = df.pivot_table(index="hsp", columns="Date", values="Nombre de personnes").fillna(0)
pvt = pvt.rename(index = dict(zip(jpn[0], jpn[2]))).rename(index={"Autre":"others"})
pandas a une méthode appelée pivot_table qui vous permet de créer littéralement un tableau croisé dynamique. (Vous n'avez pas besoin d'Excel.) De plus, remplissez NaN avec 0.
Ensuite, renommez-le de Hokkaido en hokkaido. Dans mon environnement, les caractères ne sont pas affichés si le nom de l'index ou le nom de la colonne contient du japonais. Il semble qu'il sera résolu en installant quelque chose, mais il sera géré en renommant. (S'il vous plaît laissez-moi savoir s'il existe un meilleur moyen.)
Le contenu de jpn [0] sont les noms des préfectures en caractères chinois tels que Hokkaido et Aomori. Le contenu de jpn [2] sont les noms des préfectures en caractères romains tels que hokkaido et aomori.
Associez-les à la fonction zip
, transformez-les en dictionnaire avec la fonction dict
, et passez-les à la fonction renommer
.
Remplacez également «Autre» par «Autres».
Jusqu'à ce point, la trame de données ressemble à ceci.
for i in range(len(pvt)):
pvt.iloc[i]=pvt.iloc[i].cumsum()
Extrayez ligne par ligne de pvt et utilisez la fonction cumsum ()
de numpy
pour faire le nombre cumulé de personnes.
De cette façon, il a été mis à jour au nombre cumulé de personnes.
plt.figure(figsize=(20,10))
sns.heatmap(pvt.iloc[:,-60:] , linewidths=0, cmap='Spectral', cbar=True, xticklabels=5)
plt.savefig("colona.png ")
J'ai décidé d'afficher la jeune date d'il y a 60 jours car il y a peu de personnes infectées (heureusement) et cela n'a aucun sens de l'afficher.
Vous pouvez utiliser :
(slice). Par exemple, «10: 20» indique 10 ou plus et moins de 20.
J'ai pu afficher la carte thermique comme celle-ci.
Recommended Posts