Ich habe ein Python-Diagramm mit den Daten neuer Coronavirus (COVID-19) -positiver Patienten gezeichnet, die von der Tokyo Metropolitan Government veröffentlicht wurden.
Es wurde mit dem minimal erforderlichen Code geschrieben, daher hoffe ich, dass es für diejenigen hilfreich ist, die von nun an daran denken, Datenanalysen mit Python durchzuführen.
Da die öffentlichen Daten im CSV-Format, die täglich von der Regierung der Metropole Tokio aktualisiert werden, direkt gelesen werden, müssen die CSV-Dateien nicht einzeln heruntergeladen werden.
Wenn Sie den folgenden Python-Code in Ihre eigene Ausführungsumgebung (Jupyter Notebook usw.) kopieren, können Sie jedes Mal das neueste Informationsdiagramm zeichnen.
Außerdem habe ich später in diesem Artikel einen Link zur nationalen japanischen Version von CSV-Daten hinzugefügt, sodass ich denke, dass es für Sie einfacher sein wird, Fähigkeiten zu erwerben, wenn Sie die Verwendung üben.
Der Python-Code in diesem Artikel wurde mit Jupyter Lab auf einem Windows 10-Computer mit installiertem Anaconda getestet.
Die diesmal grafisch dargestellten Daten sind die folgenden CSV-Daten. Die Ergebnisse bis zum Vortag werden täglich aktualisiert. Tokyo _ New Corona Virus Positive Patient Announcement Details (CSV-Format)
Das Folgende ist die Homepage mit Links zu CSV-Daten. Details zur Ankündigung eines neuen Patienten mit positivem Corona-Virus in Tokio
Zeichnen wir nun ein Diagramm in Python mit CSV-Daten.
Verwenden Sie zunächst den folgenden Python-Code, um eine Verbindung zur Tokio-Homepage herzustellen, die neuesten Daten (CSV-Format) abzurufen und in Pandas DataFlame zu konvertieren.
Der Punkt hier ist, dass die CSV-Datei nicht im lokalen Ordner gespeichert, sondern direkt in Pandas DataFlame (df) konvertiert wird. Dies erspart Ihnen die Mühe, einen Browser zu öffnen und die neueste tägliche CSV-Datei herunterzuladen, indem Sie einfach den folgenden Code ausführen.
import requests
import pandas as pd
import io
#Importieren Sie CSV direkt in den Pandas-Datenrahmen
url = 'https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv'
r = requests.get(url).content
df = pd.read_csv(io.StringIO(r.decode('utf-8')))
df
Wenn die Daten erfolgreich geladen wurden, sollte der Inhalt von DataFrame (df) angezeigt werden.
Ich werde ein Diagramm mit dem oben gelesenen DataFrame (df) zeichnen. Erstens ist die horizontale Achse das Datum und die vertikale Achse das Balkendiagramm der Anzahl infizierter Personen. Lassen Sie uns den folgenden Code weiter ausführen.
((5/15 postscript)) Da die Reihenfolge der ursprünglichen CSV-Daten nicht mehr in chronologischer Reihenfolge ist, habe ich eine Codezeile hinzugefügt, um die Daten in der Reihenfolge von Veröffentlichungsdatum nahe der Mitte des Codes unten zu sortieren.
#Matplotlib zum Zeichnen von Grafiken.Pyplot und Seaborn importieren
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#Schreiben Sie eine Grafik
plt.figure(figsize=(13,7)) #Definieren Sie die Größe des Diagramms
sns.set(font='Yu Gothic', font_scale = 1.2) #Geben Sie die Schriftart an, da japanische Zeichen verstümmelt sind
df = df.sort_values('Veröffentlicht_Datum') #Veröffentlicht_Datumの順番にデータを並び替える(5/15 Nachschrift)
sns.countplot(data=df, x='Veröffentlicht_Datum') #Erstellen Sie ein aggregiertes Diagramm der Anzahl infizierter Personen mit Seaborn.
plt.title('COVID-19 Änderungen in der Anzahl der neu infizierten Personen in Tokio')
plt.xticks(rotation=90, fontsize=10) #Da sich Datum und Uhrzeit der x-Achse überlappen, wird sie um 90 ° gedreht und angezeigt.
plt.ylabel('Anzahl der infizierten Personen(Mann)') #y-Achsenbeschriftung'Anzahl der infizierten Personen'Angezeigt als
Haben Sie eine Grafik wie die folgende gezeichnet? Es fühlt sich an, als wäre es konvergiert, aber ich frage mich, was in Zukunft passieren wird. .. ..
Übrigens: Verwenden Sie dasselbe Balkendiagramm, wenn Sie versuchen, die horizontale Achse nach Tag zu teilen.
#Zeichnen Sie ein Diagramm der Anzahl infizierter Personen pro Tag
sns.countplot(data=df, x="Tag") #Zeichnen Sie ein Diagramm
plt.title('Anzahl der neu infizierten Personen pro Tag in Tokio') #Diagrammtitel anzeigen
plt.ylabel('Anzahl der infizierten Personen(Mann)') #Titel auf vertikaler Achse anzeigen
Es war leicht zu zeichnen, aber die Reihenfolge der Tage ist seltsam.
Versuchen Sie, die Tage wie folgt neu zu schreiben.
#Ordnen Sie die horizontale Achse des Diagramms neu an und zeichnen Sie das Diagramm erneut
list_weekday = ['Mond','Feuer','Wasser','Holz','Geld','Boden','Tag'] #Erstellen Sie eine Liste mit der Reihenfolge der horizontalen Achse
sns.countplot(data=df, x="Tag",order=list_weekday) #Zeichnen Sie ein Diagramm
plt.title('Anzahl der neu infizierten Personen pro Tag in Tokio') #Diagrammtitel anzeigen
plt.ylabel('Anzahl der infizierten Personen(Mann)') #Titel auf vertikaler Achse anzeigen
Es wurde sicher in der Reihenfolge des Tages sortiert. Es scheint, dass die Anzahl der Freitage und Samstage am Wochenende hoch und die Anzahl der Sonntage und Montage niedrig ist.
Als nächstes ist das Geschlechterverhältnis ...
#Zeichnen Sie ein Diagramm der Anzahl infizierter Personen nach Geschlecht
sns.countplot(data=df, x="geduldig_Sex") #Zeichnen Sie ein Diagramm
plt.title('Anzahl der neu infizierten Personen nach Geschlecht @ Tokio') #Diagrammtitel anzeigen
plt.ylabel('Anzahl der infizierten Personen(Mann)') #Titel auf vertikaler Achse anzeigen
Wie jeden Tag berichtet, gibt es hier mehr Männer, aber ... Es wurde festgestellt, dass die Daten neben "männlich" und "weiblich" auch "untersuchte" und "unbekannte" Elemente enthielten. Diese unerwarteten Entdeckungen sind in der Datenanalyse häufig. Für alle Fälle aggregieren wir die patient_gender-Daten mit pivot_table. Es kann aus den Originaldaten in der folgenden Zeile zusammengefasst werden.
#geduldig_Aggregierte Geschlechtsdaten
df.pivot_table(index='geduldig_Sex',aggfunc='size').sort_values(ascending=False)
Ich denke, dass die folgenden Tabellenergebnisse (Nummer jedes Elements) angezeigt werden.
Mit anderen Worten, im Element patient_gender, Zusätzlich zu "männlich" und "weiblich" scheinen sechs "unbekannte" und eine "untersuchte" gemischt zu sein.
Es ist eine verbreitete Geschichte, dass unerwartete Elemente bei der Analyse von Daten berücksichtigt werden Es ist sehr wichtig, nicht nur die Grafikvisualisierung, sondern auch die Datenaggregation und Vorverarbeitungstechniken zu berücksichtigen.
Als nächstes nach Altersgruppen ...
list_age = ['Unter 10 Jahren','10er','20er Jahre','30er Jahre','Vierziger Jahre','50er Jahre','60er Jahre','70er Jahre','80er Jahre','90er Jahre','100 Jahre und älter','Unbekannt']
sns.countplot(data=df, x="geduldig_Alter", order=list_age)
plt.xticks(rotation=90)
plt.ylabel('Anzahl der infizierten Personen(Mann)')
So betrachtet scheint die Zahl der Infizierten in den Zwanzigern und Dreißigern für die Bevölkerung groß zu sein, ganz zu schweigen vom Anteil älterer Menschen in den Sechzigern und darüber. (Es ist vielleicht besser auszudrücken, dass das Verhältnis der Menschen in den Vierzigern und Fünfzigern für die Bevölkerung gering ist.)
Als Referenz ist die Grafik [^ 1] der Bevölkerung Tokios nach Altersgruppen (Stand 1. Januar, 2. Jahr von Reiwa) unten dargestellt. [^ 1]: Aus Tokios Haushalten und Bevölkerung (nach Stadt und Alter) basierend auf dem Basic Resident Register
Alter | Gesamtbevölkerung | Männliche Bevölkerung | Weibliche Bevölkerung |
---|---|---|---|
Unter 10 Jahren | 1,048,921 | 536,920 | 512,001 |
10er | 1,029,680 | 526,065 | 503,615 |
20er Jahre | 1,557,966 | 779,053 | 778,913 |
30er Jahre | 1,842,086 | 939,710 | 902,376 |
Vierziger Jahre | 2,177,935 | 1,108,561 | 1,069,374 |
50er Jahre | 1,832,946 | 946,158 | 886,788 |
60er Jahre | 1,373,395 | 688,654 | 684,741 |
70er Jahre | 1,414,012 | 645,774 | 768,238 |
80er Jahre | 794,805 | 304,309 | 490,496 |
90er und älter | 185,849 | 47,609 | 138,240 |
Unbekannt | 1 | 0 | 1 |
In der folgenden Grafik wird die Anzahl der Infizierten pro 100.000 Personen verglichen, indem die Anzahl der Infizierten nach Altersgruppen durch die Bevölkerung nach Altersgruppen geteilt wird. Ich war ein wenig überrascht. .. .. Es scheint, dass Menschen in den 90ern und darüber überwältigend sind, gefolgt von Menschen in den 20ern, 30ern und 40ern bis 80ern.
Und wenn Sie es in Männer und Frauen teilen.
:boy_tone1: | :girl_tone1: |
---|---|
Dies ist auch ein überraschendes Ergebnis. Ich habe mich gefragt, ob es in den Zwanzigern viele Infizierte gibt, aber es waren Frauen, die in den Zwanzigern und Dreißigern tendenziell mehr Infizierte haben. Ich kenne die Ursache nicht, aber es ist ein wenig besorgniserregendes Ergebnis.
Und wenn Sie sich die Heatmap nach Alter und Datum ansehen, ...
#Veröffentlicht_Datum und Patient_Erstellen Sie eine Pivot-Tabelle mit Altersspalten
df_pivot = df[['Veröffentlicht_Datum','geduldig_Alter']].pivot_table(index='Veröffentlicht_Datum',columns='geduldig_Alter',aggfunc='size')
#geduldig_Listen Sie jedes Element des Alters auf (wird auf der vertikalen Achse der Wärmekarte verwendet).
list_age = ['Unter 10 Jahren','10er','20er Jahre','30er Jahre','Vierziger Jahre','50er Jahre','60er Jahre','70er Jahre','80er Jahre','90er Jahre','100 Jahre und älter','Unbekannt']
plt.figure(figsize=(6,16)) #Definieren Sie die Größe des Diagramms
plt.yticks(fontsize = 10) #Definieren Sie die Schriftgröße der y-Achse
sns.heatmap(df_pivot[list_age], annot = True, annot_kws={"size": 10}, linewidth = .1) #Zeichnen Sie eine Heatmap
Es sieht so aus, aber es fühlt sich an wie "deshalb". .. .. (-_-;) Da anscheinend andere Informationen extrahiert werden können, werde ich die Analyse nach und nach fortsetzen.
Übrigens habe ich den Inhalt der Rohdaten (csv) überhaupt nicht überprüft, aber da die csv-Daten zu Beginn im Code in DataFrame (df) konvertiert wurden, zeigen wir den Inhalt der Daten mit dem folgenden Befehl erneut an. Machen wir das.
df
Es gibt 4.883 Datenzeilen (Stand: 12. Mai 2020), aber es scheint, dass es viele Nans gibt, die Leerzeichen anzeigen. Schauen wir uns zur Sicherheit die eindeutigen Werte in jeder Spalte an. Versuchen Sie, den folgenden Code auszuführen.
#Datenrahmen mit CSV-Daten(df)Extrahieren Sie den Spaltennamen und den eindeutigen Wert, der in jeder Spalte gespeichert ist.
for i in df.columns: #Wiederholen Sie dies für jede Spalte
print('Spaltenname:' + i) #Drucken Sie den Namen der Spalte
print('Anzahl der eindeutigen Werte:' + str(len(df[i].unique()))) #Zählen Sie die Anzahl der eindeutigen Werte in jeder Spalte
print('Einzigartiger Wert:' + str(df[i].unique())) #Extrahieren Sie eindeutige Werte für jede Spalte
print('///////////////////////////////////////////') #Separator
Da das Ergebnis lang ist, habe ich es unten gefaltet und aufbewahrt.
Zumindest für die folgenden Spalten scheint alles leer zu sein (nan).
Darüber hinaus haben der "nationale Kommunalverwaltungscode" und der "Präfekturname" alle den gleichen Wert, was bei der Datenanalyse keinen Sinn ergibt. Es ist wünschenswert, solche unnötigen Daten im Voraus aus den Daten zu entfernen. Erstellen Sie einen neuen Datenrahmen (df_extract), indem Sie nur die erforderlichen Elemente extrahieren. Führen Sie den folgenden Code aus.
#Nicht benötigte Spalten kürzen (nur erforderliche Spalten extrahieren)
df_extract = df[['No','Veröffentlicht_Datum','Tag','geduldig_Residenz','geduldig_Alter','geduldig_Sex','Entladene Flagge']]
df_extract = df_extract.set_index('No') #Setzen Sie die Spalte "Nein" auf Index.
df_extract
Das ist ziemlich erfrischend. Ich denke, dass das Zuschneiden, bei dem unnötige Daten bei der Datenanalyse richtig beurteilt und ausgeschlossen werden, ebenfalls eine sehr wichtige Fähigkeit ist.
Diesmal waren es Daten aus Tokio, Jag Japan Co., Ltd. hat die nationale Version von CSV-Daten veröffentlicht. https://dl.dropboxusercontent.com/s/6mztoeb6xf78g5w/COVID-19.csv Es gibt viele Daten und ich denke, es ist genau richtig, um die Datenanalyse mit Python zu üben. Das Verfahren ist fast das gleiche. Wenn Sie also interessiert sind, warum probieren Sie es nicht selbst aus?
Unten sehen Sie ein Pivot-Diagramm, das in Excel mit denselben Daten erstellt wurde. Tatsächlich können Sie mit Excel problemlos fast dasselbe tun, einschließlich der in diesem Artikel vorgestellten Heatmap. Ich liebe auch Python und ich habe viele Gefühle, wenn ich etwas mit Python mache, aber wenn ich darüber nachdenke, wofür Datenanalyse ist und für wen Datenanalyse, kann Excel das, was Excel kann, was Excel kann. Jeden Tag denke ich, dass der grundlegende Stil nicht in Python gemacht werden sollte.
Vielen Dank für das Lesen bis zum Ende.
Ich werde es weiterhin aktualisieren, um meine Fähigkeiten zu verbessern.
Recommended Posts