[PYTHON] Eine Geschichte, die bestätigte, ob die Zahl der Coronas bei jungen Menschen wirklich schnell zunimmt

Einführung

Datenquelle

Sie können die Daten hier ablegen. https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068/resource/c2d997db-1450-43fa-8037-ebb11ec28d4c Obwohl es im CSV-Format vorliegt und es viele Spalten gibt, die nichts enthalten, denke ich, dass die Daten sauber und einfach zu handhaben sind. Zum Zeitpunkt des Schreibens scheint es Daten bis zu 7/9 zu geben.

Umgebung

Dieses Mal habe ich eine Analyseumgebung für Jupyter erstellt, die mit Docker eingerichtet wurde. Es ist durchaus angemessen, aber bitte beachten Sie, dass ich nur das wiederverwendete, was ich anderswo verwendet habe (ich benötige nicht so viel).

FROM python:3.8.2
USER root

EXPOSE 9999

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN mkdir /code
WORKDIR /code

RUN apt-get update && apt-get -y install locales default-mysql-client && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
ADD ./requirements_python.txt /code
RUN pip install --upgrade pip
RUN pip install -r /code/requirements_python.txt
WORKDIR /root
RUN jupyter notebook --generate-config
RUN echo c.NotebookApp.port = 9999 >> ~/.jupyter/jupyter_notebook_config.py
RUN echo c.NotebookApp.token = \'jupyter\' >> ~/.jupyter/jupyter_notebook_config.py
CMD jupyter lab --no-browser --ip=0.0.0.0 --allow-root

requirement_python.txt


glob2
json5
jupyterlab
numpy
pandas
pyOpenSSL
scikit-learn
scipy
setuptools
tqdm
urllib3
matplotlib
xlrd

Implementierung

Von hier aus werden wir die Implementierung beschreiben.

1. importieren und importieren

Laden Sie zunächst die erforderlichen Pakete und Dateien. Diesmal benutze ich nur Matplotlib und Pandas. Ändern Sie das Veröffentlichungsdatum zu diesem Zeitpunkt in den Datums- / Uhrzeittyp.

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

%matplotlib inline
df_patient = pd.read_csv('./data/130001_tokyo_covid19_patients.csv')
df_patient['Veröffentlicht_Datum'] = pd.to_datetime(df_patient['Veröffentlicht_Datum'])
df_patient.head()

2. Datenabruf und -verarbeitung

Für diese Datenverarbeitung werden wir wie folgt vorgehen.

  1. Zählen Sie die Anzahl der neu infizierten Personen nach Alter
  2. Zählen Sie mit einem gleitenden 7-Tage-Durchschnitt, um Faktoren wie die Anzahl der Inspektionen pro Tag zu eliminieren.

2-1 Zählen Sie die Anzahl der neu infizierten Personen nach Altersgruppen

Dies ist bei Gruppen von nicht so schwierig. Lassen Sie zu diesem Zeitpunkt auch nur die erforderlichen Spalten.

df_patient_day = df_patient.groupby(['Veröffentlicht_Datum','geduldig_Alter']).count().reset_index()[['Veröffentlicht_Datum','geduldig_Alter','No']]
df_patient_day

Wenn die Beschreibung des Alters Japanisch enthält, werden die Zeichen im Teil von matplotlib verstümmelt (es ist schwierig, die Umgebung wie oben beschrieben wiederzuverwenden). Ersetzen Sie sie daher wie folgt.

genes_dict = {'Unter 10 Jahren':'under 10',\
         '10er': '10', \
         '20er Jahre': '20', \
         '30er Jahre': '30', \
         'Vierziger Jahre': '40', \
         '50er Jahre': '50', \
         '60er Jahre': '60', \
         '70er Jahre': '70', \
         '80er Jahre': '80', \
         '90er Jahre': '90', \
         '100 Jahre und älter': 'over 100', \
         "'-": '-',
         'Unbekannt': 'unknown'
        }

df_patient_day['geduldig_Alter'] = [genes_dict[x] for x in df_patient_day['geduldig_Alter'].values.tolist()]
df_patient_day

Im obigen Fall liegt ein Problem vor, und wenn die Anzahl der neu infizierten Personen an diesem Tag und in diesem Alter nicht vorhanden ist, gibt es keine Daten, und es tritt ein Problem auf, wenn später ein gleitender Durchschnitt ermittelt wird. Daher liegen diese Daten hier im Bereich des oben genannten Alters × Erstellen Sie ein direktes Produkt des gesamten Datumsbereichs und kombinieren Sie es mit dem oben genannten DataFrame (bitte lassen Sie mich wissen, wenn Sie hier einen besseren Weg kennen!).

genes = ['under 10',\
         '10', \
         '20', \
         '30', \
         '40', \
         '50', \
         '60', \
         '70', \
         '80', \
         '90', \
         'over 100', \
         '-',
         'unknown'
        ]
days = pd.date_range(start=df_patient['Veröffentlicht_Datum'].min(), end=df_patient['Veröffentlicht_Datum'].max(), freq='D')
data = [[x, y] for x in days for y in genes]

df_data = pd.DataFrame(data, columns=['Veröffentlicht_Datum', 'geduldig_Alter'])
df_data = pd.merge(df_data, df_patient_day, on=['Veröffentlicht_Datum', 'geduldig_Alter'], how='left').fillna(0)
df_data = df_data.rename(columns={'No':'Anzahl der Personen'})
df_data

2-2 Nehmen Sie für jede Altersgruppe einen gleitenden Durchschnitt

Nehmen Sie einen gleitenden Durchschnitt für jede Altersgruppe. Mit der Funktion von Pandas können Sie leicht einen gleitenden Durchschnitt ermitteln. Für einen gleitenden 7-Tage-Durchschnitt rollen Sie einfach (7). Wenn Sie den Durchschnitt nehmen möchten, rollen Sie (7) .mean (). Und da die ersten 6 Tage nan sein werden, löschen Sie es mit dropna (). Dieses Mal werde ich es für eine spätere Implementierung zu einem DataFrame für jedes Alter machen und es im Wörterbuch speichern. Dies ist abgeschlossen!

result_diff = {}
for x in genes:
    df = df_data[df_data['geduldig_Alter'] == x]
    df = pd.Series(df['Anzahl der Personen'].values.tolist(), index=df['Veröffentlicht_Datum'].values)
    result_diff[x] = df.rolling(7).mean().dropna()

3. Visualisieren

Zum Schluss visualisieren.

fig, axe = plt.subplots()
for x in genes:
    df_diff = result_diff[x]
    axe.plot(df_diff.index, df_diff.values, label=x)
    
axe.legend()
axe.set_ylim([0,65])

Ergebnis

Zum Schluss werde ich das Ergebnis anzeigen. スクリーンショット 2020-07-12 15.05.14.png

Von den 20er bis 50er Jahren wurde bestätigt, dass sich das Alter in der Reihenfolge des jüngeren Alters geändert hat. Trotzdem ist es erstaunlich, wie man die Anzahl der Menschen in den Zwanzigern erhöht. Die Ankündigung von Tokio war keine Lüge.

Zusammenfassung

Ich möchte nicht sagen, was die Faktoren hier sind, aber Sie können den Inhalt des Berichts schnell mit öffentlichen Daten wie diesen überprüfen. Warum versuchen Sie es nicht auch als Übung? Es gibt noch viele Dinge, die untersucht werden können, indem man dies mit der tatsächlichen Bevölkerungsverteilung vergleicht, und ich denke, es ist ein gutes Lehrmaterial, um die Datenverarbeitung tatsächlich zu üben.

Recommended Posts

Eine Geschichte, die bestätigte, ob die Zahl der Coronas bei jungen Menschen wirklich schnell zunimmt
Erstellen Sie einen BOT, der die Anzahl der infizierten Personen in der neuen Corona anzeigt
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
[Python] Ein Programm, das die Anzahl der Täler zählt
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Ein Server, der mit Flasche.py und OpenCV die Anzahl der Personen vor der Kamera zurückgibt
Eine kleine süchtig machende Geschichte mit den Berechtigungen des von expdp angegebenen Verzeichnisses (für Anfänger)
Die Geschichte der Erstellung einer Website, auf der die Veröffentlichungsdaten von Büchern aufgeführt sind
Ein Programm, das bestimmt, ob eine in Python eingegebene Zahl eine Primzahl ist
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Programmiersprache, die junge Menschen in Zukunft brauchen werden
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
Die Geschichte des Exportierens eines Programms
Eine Geschichte über das Erstellen eines Programms, mit dem die Anzahl der Instagram-Follower in einer Woche von 0 auf 700 erhöht wird
Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Die Geschichte der Entwicklung einer WEB-Anwendung, die automatisch Fangkopien generiert [MeCab]
Die Geschichte, ein Paket zu erstellen, das den Betrieb von Juman (Juman ++) & KNP beschleunigt
Ich habe versucht zu bestätigen, ob die unvoreingenommene Schätzung der Standardabweichung wirklich unvoreingenommen ist, indem ich "10.000 Mal Münzen geworfen" habe.
[Python] [Meta] Ist der Python-Typ ein Typ?
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
Gibt es einen Widerspruch zwischen der Partei, die die Menschen vor NHK schützt, und der Partei, die NHK vor den Menschen schützt?
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
Tiefes Lernen! Die Geschichte der Daten selbst, die gelesen werden, wenn sie nach der handschriftlichen Nummernerkennung nicht folgen