【初心者】新型コロナを自分で分析する

スポンサーリンク
Python




新型コロナウイルスはいまだに収まる気配をみせていません。新型コロナウイルスの感染者や重症度などもデータ化されて、蓄積されています。なので、新型コロナウイルスのデータを自分で分析することも、当然可能です。

そこで、今回は新型コロナウイルスのデータを自分で分析してみましょう。

簡単な例を提示、解説しますので、自分でも分析してみて下さい。新型コロナウイルスのデータはGithubで公開されています。このデータは日によって更新されていくので、データをダウンロードする日によって多少違う結果になりますが、最新のデータで、興味のあるデータを分析するのが一番の勉強になると思います。

Pythonの環境設定は以下を参照して下さい。

【2021年最新】WindowsでAnacondaをインストールする方法、初心者がPythonの環境を構築する
Pythonの環境構築におすすめなのが、「anaconda」です。anacondaのなかにある、Jupyter Labはデータ解析や機械学習に非常に相性がいいです。理由は、コードを実行すると結果を返してくれます。その結果をみて、新たなコード
M1 mac でanacondaをインストールし、Pythonを動作確認
M1 mac miniを購入したので、anacondaのインストールし、Pythonの動作を確認しました。 以前はWindowsでのanacondaのインストール方法を提示しました。 macでのイ...

それでは、やっていきましょう。

GitHubのデータは以下のリンクからダウンロードして下さい。

GitHub - lisphilar/covid19-sir: CovsirPhy: Python library for COVID-19 analysis with phase-dependent SIR-derived ODE models.
CovsirPhy: Python library for COVID-19 analysis with phase-dependent SIR-derived ODE models. - GitHub - lisphilar/covid19-sir: CovsirPhy: Python library for COV...

データのダウンロード

GitHubのリンクから、以下のように、① 「Code」をクリック、➁ 「Download ZIP」をクリックします。

 

すると、ダウウンロードが開始され、ダウンロードのフォルダに保存されます。

 

ダウンロードされたzipファイルを確認します。
「covid19-sir-master.zip」をクリックしましょう。
「covid19-sir-master.zip」⇒「covid19-sir-master」⇒「data」⇒「japan」⇒「covid_jpn_total.csv」
この「covid_jpn_total.csv」にデータが入っています。
「covid_jpn_total.csv」のファイルを、解析するJupyter Labがあるフォルダに入れましょう。

 

 

以下の例では、「My Test」⇒「blog」を解析用のフォルダにしています。
なので、「blog」フォルダ内に、解析用Jupyter Labとして「EDA COVID-19.ipynb」と、解析データとして「covid_jpn_total.csv」があります。

 

これで、解析するための環境が整いました。
今回もAnacondaをインストールして、Jupyter Labで解析していきましょう。

【2021年最新】WindowsでAnacondaをインストールする方法、初心者がPythonの環境を構築する
Pythonの環境構築におすすめなのが、「anaconda」です。anacondaのなかにある、Jupyter Labはデータ解析や機械学習に非常に相性がいいです。理由は、コードを実行すると結果を返してくれます。その結果をみて、新たなコード

新型コロナウイルスデータセットの内容

  • 厚生労働省ホームページ
  • 日本のコロナウイルス事情(東洋経済オンライン)
  • 東京都のホームページ(COVID-19 in 東京の更新情報)
  • 大阪府のホームページ(大阪のCOVID-19の最新情報)
  • 日本COVID-19 公募予想(Google
  • このノートは定期的に更新したり、要素を追加していきます。

これらから作成されたものらしいです。詳しくは、GitHubをご覧下さい。
といっても、これ以上の詳細な説明はないですが…

必要なライブラリをインポート

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

データを読み込む

df_total=pd.read_csv('covid_jpn_total.csv')  # 「covid_jpn_total.csv」からデータフレームで「df_total」に入れる
df_total    # 「df_total」を表示させる

出力:

データの内容を確認してみましょう。以下が、列(columns)の説明です。

  • Data     :日付
  • Location    :場所
  • Positive   :PCR検査済み陽性(Domestic: 国内、Returnee: 海外帰り?、airport: 空港)
  • Tested     :PCR検査済み
  • Symptomatic   :PCR陽性で症状がある
  • Asymptomatic :PCR陽性で無症状
  • Sym-unknown :PCR陽性で症状未確認
  • Hosp_require  :入院が必要
  • Hosp_mild    :PCR陽性で軽度の症状で入院
  • Hosp_severe   :PCR陽性で重度の症状で入院
  • Hosp_unknown:入院したかどうか未確認
  • Hosp_waiting   :入院待ち
  • Discharger     :退院した(改善した)
  • Fatal       :致命的なケース(死亡)

データの可視化

PCR陽性者がでた場所を見てみましょう

sns.countplot(df_total.Location)

出力:

場所別の数を数値化してみましょう。

 

print(sum(df_total.Location=='Domestic'))   # 国内の数
print(sum(df_total.Location=='Returnee'))   # 帰国後の数
print(sum(df_total.Location=='Airport'))    # 空港の数
print(len(df_total.Location))               # すべての場所での数

出力:
322  # 国内の数
322  # 帰国後の数
299  # 空港での数
943  # すべての場所での数

これらの場所をすべて含めると、複雑になるので、ここでは国内のみに限って分析していましょう。

国内感染者のデータのみを確認する

データを条件指定で抽出する

df=df_total[df_total.Location=="Domestic"]
df

出力:

後ろのデータは欠損値(NaN)が多いように思います。
欠損値を確認してみましょう。
(後で説明しますが、一番左の列名(index名)の数字が飛び飛びになっていることに注目して下さい。)

df.isnull().sum()

出力:
Date 0
Location 0
Positive 0
Tested 0
Symptomatic 234
Asymptomatic 234
Sym-unknown 234
Hosp_require 88
Hosp_mild 234
Hosp_severe 0
Hosp_unknown 234
Hosp_waiting 234
Discharged 0
Fatal 0
dtype: int64

やはり、欠損値が多い項目(Symptomatic、Asymptomatic、Hosp_mild、Hosp_unknown、osp_waiting)がありますね。
これらの欠損値がある項目は、症状別に解析するために必要です、興味深いデータですが、今回は削除します。

データの前処理

Positive(PCR陽性者)や重症者(Hosp_severe)、PCR検査を受けた人数(Tested)などは、累積した数値です。その日の人数を知りたいとします。
そのための前処理を実行していきます。なんとなくでもいいので、確認してみて下さい。

df.index=range(len(df))

出力:

一番左の列(index名)の数字が順番に並びました。
この処理がないと、あとのコードが上手く実行されません。
PCR陽性者数の累積である「Positive」を、毎日のPCR陽性者数の人数である「Positive_day」とうい名前の列を作成します。

col="Positive"

df[col+"_day"]=""

for i in range(len(df)):
    if i == 0:
        df[col+"_day"][i] = df[col][i]
    else:
        df[col+"_day"][i]=df[col][i]-df[col][i-1]

重傷者の累積である「Hosp_severe」を、毎日の重傷者の人数である「Hosp_severe_day」という名前の列を作成します。

col="Hosp_severe"

df[col+"_day"]=""

for i in range(len(df)):
    if i == 0:
        df[col+"_day"][i]=df[col][i]
    else:
        df[col+"_day"][i]=df[col][i]-df[col][i-1]

PCR検査者の累積である「Tested」を、毎日のPCR検査者の人数である「Tested_day」という名前の列を作成します。

col="Tested"

df[col+"_day"]=""

for i in range(len(df)):
    if i == 0:
        df[col+"_day"][i] = df[col] [i]
    else:
        df[col+"_day"][i]=df[col][i]-df.Tested[i-1]

では、作成した列が追加されたデータフレームを確認してみましょう。

df

出力:

列の後ろに、新たに作成した列が追加されていますね。
新たに作成した列を抽出します。

df=df[["Date","Positive_day","Hosp_severe_day","Tested_day"]]
df

出力:

列が少なくなって、すっきりしましたね。

データの可視化

plt.figure(figsize=(15,3),dpi=200)
plt.plot(df.Date, df.Positive_day)
plt.xticks(df.Date[::30], size='small')

plt.show()

出力:

棒線グラフでも見てみましょう。

plt.figure(figsize=(15,3),dpi=200)
plt.bar(df.Date, df.Positive_day)
plt.xticks(df.Date[::30], size='small')

plt.show()

出力:

 

では、Googleで検索した折れ線グラフを比較してみましょう。

 

だいたい一緒ですね。ちゃんとしたデータを使ったので当たり前ですが、確認は必要です。
自身でも、このデータセットを使って分析してみてはいかがでしょうか。
まずは、EDA(探索的データ分析)からしてみましょう。
以下の記事も参考にしてみて下さい。

探索的データ解析(回帰問題)
探索的データ解析(Exploratory data analysis:EDA)とはデータの確認作業です。回帰問題は値の量や程度を予測する問題です。そこで、scikit-learnにあるbostonデータセットを用いてEDAを確認していきましょう。
探索的データ解析(分類問題)
探索的データ解析(Exploratory data analysis:EDA)とはデータの確認作業です。一般的にデータ解析は、仮説検証的に行うものです。つまり、「恐らくこんな関係性があるであろうから、本当にそうなのか、は...
【初心者】matplotlibによる図の作成方法_1
仕事でデータをあつかうことがあります。そのデータをグラフ化する方法はいくつかありますが、やはりエクセルを使うことが多いと思います。エクセルでも問題なく作成できるますが、ここではPythonのmatplotlibを使った方...
【入門編】データの可視化(アイリスデータと戯れる)_その1
今回は、scikit-learnのデータセットで、Anacondaをインストールしていると、デフォルトで使える、アイリスのデータの可視化を行っていきます。アイリスデータセットとは、花の種類を分類するモデルです。 ...





コメント

タイトルとURLをコピーしました