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 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
Ü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'])
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()
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()
Wie in den Nachrichten erwähnt, kann man sehen, dass es sich seit Mai einmal beruhigt hat und wieder aufgeregt war.
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()
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()
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.
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()
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()
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.
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()
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