[PYTHON] Visualisieren Sie Korona-Infektionsdaten in Tokio mit matplotlib

Einführung

Dieses Mal werde ich versuchen, es mit Matplotlib zu visualisieren, basierend auf den Daten von Menschen, die in Tokio mit dem Corona-Virus infiziert sind.

Die Daten zur Anzahl der mit dem Tokyo Corona Virus infizierten Personen lauten "Tokyo _ Details zur Ankündigung neuer Corona Virus positiver Patienten" -43fa-8037-ebb11ec28d4c) kann im CSV-Format heruntergeladen werden.

Import der gebrauchten Bibliothek

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import os
import numpy as np
from matplotlib import dates as mdates
from matplotlib.ticker import MultipleLocator
from matplotlib.dates import DateFormatter
import seaborn as sns

Bestätigung der Daten

Überprüfen Sie zunächst die Daten.


df = pd.read_csv('130001_tokyo_covid19_patients.csv')
print('------column-------')
print(df.columns.values)
print('----head values----')
print(df.head().values)
print('----tail values----')
print(df.tail().values)

#Ausgabe

------column-------
['No' 'Nationaler lokaler Regierungskodex' 'Name der Präfekturen' 'Stadtname' 'Veröffentlicht_Datum' 'Tag' 'Beginn_Datum' 'geduldig_Residenz'
 'geduldig_Alter' 'geduldig_Sex' 'geduldig_Attribut' 'geduldig_Status' 'geduldig_Symptome' 'geduldig_Reiseverlauf Flagge' 'Bemerkungen' 'Entladene Flagge']

----head values----
[[1 130001 'Tokio' nan '2020-01-24' 'Geld' nan 'Stadt Wuhan, Provinz Hubei' 'Vierziger Jahre' 'männlich' nan nan nan
  nan nan 1.0]
 [2 130001 'Tokio' nan '2020-01-25' 'Boden' nan 'Stadt Wuhan, Provinz Hubei' '30er Jahre' 'Weiblich' nan nan nan
  nan nan 1.0]
 [3 130001 'Tokio' nan '2020-01-30' 'Holz' nan 'Stadt Changsha, Provinz Hunan' '30er Jahre' 'Weiblich' nan nan nan
  nan nan 1.0]
 [4 130001 'Tokio' nan '2020-02-13' 'Holz' nan 'In Tokio' '70er Jahre' 'männlich' nan nan nan nan
  nan 1.0]
 [5 130001 'Tokio' nan '2020-02-14' 'Geld' nan 'In Tokio' '50er Jahre' 'Weiblich' nan nan nan nan
  nan 1.0]]

----tail values----
[[26064 130001 'Tokio' nan '2020-10-02' 'Geld' nan nan '50er Jahre' 'männlich' nan nan nan
  nan nan nan]
 [26065 130001 'Tokio' nan '2020-10-02' 'Geld' nan nan '50er Jahre' 'männlich' nan nan nan
  nan nan nan]
 [26066 130001 'Tokio' nan '2020-10-02' 'Geld' nan nan '70er Jahre' 'Weiblich' nan nan nan
  nan nan nan]
 [26067 130001 'Tokio' nan '2020-10-02' 'Geld' nan nan '50er Jahre' 'männlich' nan nan nan
  nan nan nan]
 [26068 130001 'Tokio' nan '2020-10-02' 'Geld' nan nan '60er Jahre' 'männlich' nan nan nan
  nan nan nan]]

Es scheint, dass Datum, Alter, Geschlecht usw. für jede Zeile zusammengefasst sind. Es scheint, dass es eine Person pro Zeile gibt, also werde ich es verarbeiten, damit es später leicht aggregiert werden kann. Der Datumsteil wird in Datum / Uhrzeit konvertiert.

df['qty'] = 1
df['Veröffentlicht_Datum'] = pd.to_datetime(df['Veröffentlicht_Datum'])

Erstellen eines Übergangsdiagramms

Zeichnen Sie die Anzahl der infizierten Personen nach Datum.


def plot_bar(df):
    df_pivot = pd.pivot_table(df, index='Veröffentlicht_Datum', values='qty', aggfunc=np.sum)
    labels = df_pivot.index.values
    vals = [i[0] for i in df_pivot.values]

    #Figurengenerierung
    fig, ax = plt.subplots(figsize=(10, 6))
    ax.bar(labels, height=vals, linewidth=1, color='orangered', alpha=0.8)
    plt.show()

bar_before.png

Bei dieser Geschwindigkeit fühlt es sich ein wenig unmodern an, also werde ich es zu einem guten Gefühl verarbeiten.

    #Ändern Sie die Häkchenfarbe
    ax.tick_params(axis='y', colors='gray')
    ax.tick_params(axis='x', colors='dimgray')

    #Raster anzeigen
    ax.grid(axis='y')

    #Setze ylabel und ändere die Farbe
    ax.set(ylabel='Anzahl der infizierten Personen', ylim=(0, 500))
    ax.yaxis.label.set_color('gray')

    #Löschen Sie die Häkchenlinien der y- und x-Achse
    ax.tick_params(bottom=False, left=False)

    #Anzeige nach Monat
    ax.xaxis.set_major_locator(mdates.MonthLocator())
    #Korrigierte x-Label-Notation
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d'))

    #Randentfernung
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['left'].set_visible(False)

    #Titel setzen
    ax.set_title('tokyo covid19 patients-bar', color='gray')

    plt.tight_layout()
    plt.show()

bar_after.png

Wie in den Nachrichten erwähnt, kann man sehen, dass es sich seit Mai einmal beruhigt hat und wieder aufgeregt war.

Zeichnen Sie die Anzahl der Infizierten pro Tag auf

Zeichnen wir die Anzahl der Infizierten pro Tag.

def plot_barh(df):
    df_pivot = pd.pivot_table(df, index='Tag', values='qty', aggfunc=np.sum)
    week_days = df_pivot.index.values
    #Listen Sie die Anzahl der infizierten Personen pro Tag auf
    vals = [val[0] for val in df_pivot.values]
    #Graphgenerierung
    fig, ax = plt.subplots(figsize=(10, 6))
    ax.barh(week_days, vals, color='tomato')
    plt.show()

barh_before.png

Ich konnte es sicher zeichnen, aber die Anordnung der Tage ist anders, also werde ich auch mit dem Aussehen davon spielen.


def plot_barh(df):
    df_pivot = pd.pivot_table(df, index='Tag', values='qty', aggfunc=np.sum)
    #Sortieren Sie die Tage
    df_pivot = df_pivot.reindex(index=['Mond', 'Feuer', 'Wasser', 'Holz', 'Geld', 'Boden', 'Tag'])

    week_days = df_pivot.index.values
    
    #Listen Sie die Anzahl der infizierten Personen pro Tag auf
    vals = [val[0] for val in df_pivot.values]

    #Graphgenerierung
    fig, ax = plt.subplots(figsize=(10, 6))
    ax.barh(week_days, vals, color='tomato')

    #Ändern Sie die Farbe des y-Etiketts
    ax.tick_params(axis='y', colors='dimgray')

    #Der Sonntag wird oben sein, also sortieren
    ax.invert_yaxis()

    #Löschen Sie die Häkchenlinie
    ax.tick_params(bottom=False, left=False)

    #Löschen Sie den Rand
    ax.spines['bottom'].set_visible(False)
    ax.spines['top'].set_visible(False)
    ax.spines['left'].set_visible(False)
    ax.spines['right'].set_visible(False)

    #x Etikett entfernen
    ax.set_xticklabels([])

    #Zeigen Sie eine Zahl rechts von der Leiste an
    vmax = np.array(vals).max()
    for i, val in enumerate(vals):
        ax.text(val + vmax * 0.02, i, f'{val:,}', fontsize='x-large', va='center', color='darkred')

    #Gib einen Titel
    ax.set_title('tokyo covid19 patients-barh(day of week count)', color='dimgray')

    plt.show()

barh_after.png

Ich konnte sauber und sicher planen. Ich denke, es gibt viele Verlage von Donnerstag bis Samstag, aber vielleicht ist das Ziel, Leute einzudämmen, die über das Wochenende ausgehen. Nun, ich denke, dass die Anzahl der Personen, die sich PCR-Tests unterziehen, von Tag zu Tag voreingenommen ist.

Gestapeltes Balkendiagramm

Zeichnen Sie die Anzahl der Infizierten nach Altersgruppe und Geschlecht auf. Da die Spalten für Geschlecht und Alter Daten wie "Unbekannt", "-", "-" usw. enthalten, bereinigen Sie diese im Voraus.

def plot_stacked_bar(df):
    #Reinigung
    #Von Mann zu Mann vereint
    df = df.replace({'geduldig_Sex': {'Mann': 'Mann性'}})

    #Löschen Sie Datensätze mit unbekanntem Geschlecht und Alter
    df = df[df['geduldig_Sex'] != 'Unbekannt']
    df = df[df['geduldig_Sex'] != '―']
    df = df[df['geduldig_Sex'] != '-']
    df = df[df['geduldig_Alter'] != '-']
    df = df[df['geduldig_Alter'] != 'Unbekannt']

    #Aggregiert nach Geschlecht und Alter
    df_pivot = pd.pivot_table(df, index='geduldig_Alter', columns='geduldig_Sex', values='qty', aggfunc=np.sum)

    #Neuanordnungen
    df_pivot = df_pivot.reindex(index=['Unter 10 Jahren', '10er', '20er Jahre', '30er Jahre', 'Vierziger Jahre', '50er Jahre',
                                       '60er Jahre', '70er Jahre', '80er Jahre', '90er Jahre', '100 Jahre und älter'])

    #Holen Sie sich die Nummer für jeden Mann und jede Frau mit einem Slicer
    men_qty = df_pivot.values[:, 0]
    women_qty = df_pivot.values[:, 1]

    labels = ['männlich', 'Weiblich']
    ages = df_pivot.index.values

    # figure,Erzeugung von Axt
    fig, ax = plt.subplots(figsize=(10, 6))

    #Gestapeltes Barplot
    width = 0.6
    ax.bar(ages, men_qty, width, label=labels[0], color='skyblue')
    ax.bar(ages, women_qty, width, label=labels[1], color='pink', bottom=men_qty)
  
  plt.show() 

stacked_bar_before.png

Dies wird ebenfalls geändert.

 #Löschen Sie die Häkchenlinie
    ax.tick_params(bottom=False, left=False)

    #Grenze löschen
    ax.spines['top'].set_visible(False)
    ax.spines['left'].set_visible(False)
    ax.spines['right'].set_visible(False)

    # y,Setze xlabel und ändere die Farbe
    ax.set(ylabel='Anzahl der infizierten Personen')
    ax.yaxis.label.set_color('gray')
    ax.set(xlabel='Alter')
    ax.xaxis.label.set_color('gray')

    #Ändern Sie die Farbe des y / x-Etiketts
    ax.tick_params(axis='y', colors='dimgray')
    ax.tick_params(axis='x', colors='dimgray')

    #Anzeige der Legende
    ax.legend(loc="upper left", bbox_to_anchor=(1.02, 1.0,), borderaxespad=0, frameon=False)

    #Anzeige des Gitters
    ax.grid(axis='y')

    #Ändern Sie die Anzeigebreite der y-Achse alle 2000
    ax.yaxis.set_major_locator(MultipleLocator(2000))

    #Geben Sie ein Komma in die Zahl ein
    ax.yaxis.set_major_formatter('{x:,.0f}')

    #Gib einen Titel
    ax.set_title('tokyo covid19 patients-stacked bar(age,sex,count)', color='dimgray')

    plt.show()

stacked_bar_after.png

Ich mache mir Sorgen, dass es einen großen Unterschied zwischen Teenagern und 20ern gibt. Da sich meine körperliche Verfassung nicht verschlechtert, wurde ich möglicherweise überhaupt nicht untersucht. Da es viele Schüler gibt, kann dies auch darauf hinweisen, dass der Ausbruch einer Infektion durch die Schließung der Schule verhindert werden kann.

Wärmekartenplot

Erstellen Sie Heatmaps nach Altersgruppe und Monat. Dies ist leicht zu beschreiben, daher werde ich es mit Seaborn zeichnen.

def plot_heatmap(df):
    df = df.set_index('Veröffentlicht_Datum')
    df['month'] = df.index.month
    months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct']

    #Löschen Sie Datensätze mit unbekanntem Geschlecht und Alter
    df = df[df['geduldig_Sex'] != 'Unbekannt']
    df = df[df['geduldig_Sex'] != '―']
    df = df[df['geduldig_Sex'] != '-']
    df = df[df['geduldig_Alter'] != '-']
    df = df[df['geduldig_Alter'] != 'Unbekannt']

    #Aggregiert nach Monat und Alter
    df_pivot = pd.pivot_table(df, index='geduldig_Alter', columns='month', values='qty', aggfunc=np.sum)

    #Neuanordnungen
    df_pivot = df_pivot.reindex(index=['Unter 10 Jahren', '10er', '20er Jahre', '30er Jahre', 'Vierziger Jahre', '50er Jahre',
                                       '60er Jahre', '70er Jahre', '80er Jahre', '90er Jahre', '100 Jahre und älter'])

    fig, ax = plt.subplots(figsize=(10, 6))

    #Grundstück mit Seegeborenen
    ax = sns.heatmap(df_pivot, annot=True, fmt="1.0f", cmap='YlGnBu')

    ax.tick_params(bottom=False, left=False)
    ax.set_xticklabels(months)
    ax.set_title('tokyo covid19 heatmap(month,age count)', color='gray')
    #Ändern Sie die Farbe des y / x-Häkchens
    ax.tick_params(axis='y', colors='dimgray')
    ax.tick_params(axis='x', colors='dimgray')
    # y,x Etikett löschen
    ax.set(ylabel='', xlabel='')

    plt.show()

heatmap.png

abschließend

Wenn Sie die Daten visualisieren, können Sie die Trends lesen. Die Standarddiagramme in matplotlib fühlen sich unangenehm an, daher möchte ich weiterhin Techniken zum Erstellen sauberer Diagramme studieren.

Recommended Posts

Visualisieren Sie Korona-Infektionsdaten in Tokio mit matplotlib
Zeichnen Sie Excel-Daten mit matplotlib (1)
Zeichnen Sie Excel-Daten mit matplotlib (2)
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Vielseitige Datenerfassung mit Pandas + Matplotlib
Heatmap mit Dendrogramm in Python + Matplotlib
Implementieren Sie "Data Visualization Design # 2" mit matplotlib
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Trennung von Design und Daten in matplotlib
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
Daten in RDS mit AWS Glue überschreiben
Behandeln Sie 3D-Datenstrukturen mit Pandas
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, visualisieren, matplotlib 2D-Daten mit Fehlerleiste
Lesen Sie Python-CSV-Daten mit Pandas ⇒ Graph mit Matplotlib
Löschen Sie Daten in einem Muster mit Redis Cluster
Lassen Sie uns den Infektionsstatus des Corona-Virus mit Plotly [für Anfänger] visualisieren.
Visualisieren Sie Yugioh-Kartendaten mit Python - Yugiou Data Science 1. EDA Edition
Lesen Sie Tabellendaten in einer PDF-Datei mit Python
Implementieren Sie "Data Visualization Design # 3" mit Pandas und Matplotlib
Visualisieren Sie Daten interaktiv mit TreasureData, Pandas und Jupyter.
Folium: Visualisieren Sie Daten auf einer Karte mit Python
Visualisieren Sie das Verhalten des Sortieralgorithmus mit matplotlib
Visualisiere grib2 auf einer Karte mit Python (matplotlib)
Ich habe ein gestapeltes Balkendiagramm mit matplotlib von Python erstellt und eine Datenbeschriftung hinzugefügt
Animation mit matplotlib
[Erste Datenwissenschaft ⑥] Ich habe versucht, den Marktpreis von Restaurants in Tokio zu visualisieren
Japanisch mit Matplotlib
Animation mit matplotlib
Histogramm mit Matplotlib
Erstellen Sie eine Animation mit matplotlib
So wenden Sie mit matplotlib Marker nur auf bestimmte Daten an
Trainieren Sie MNIST-Daten mit PyTorch mithilfe eines neuronalen Netzwerks
Fügen Sie AWS-Daten mit boto + gspread in Google Spreadsheet ein
Visualisieren Sie mit Cytoscape 2 Eisenbahnstreckendaten als Grafik
Ungefähr 200 Breiten- und Längengraddaten für Krankenhäuser in Tokio
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 3 heraus ~ Visualisieren Sie MNIST-Daten ~
Visualisieren Sie Schlüsselwörter in Dokumenten mit TF-IDF und Word Cloud
Visualisieren Sie Zahlenschwankungen auf Websites mit Datadog
Sortieren Sie die Postdaten in umgekehrter Reihenfolge mit Djangos ListView