#はじめに
2020年1月16日,SARS-CoV-2(ウイルス名)による新型コロナウイルス感染症(病名)が日本で初めて確認されました。残念ながら一般人から著名人まで多くの方の命がこの病気によって落とされました。あれから半年以上経った今でも流行が治らず,外出時にはマスクが必需品となっています。
さて,本投稿では日本でのコロナウイルスを簡単に分析し,まとめました。この分析で自分にとって何らかの気付きや分析スキル向上を望めればと思い取り組んでみました。
#データの準備
今回コロナウイルスを分析するにあたってジャッグジャパン株式会社さんの公開しているCSVデータを使用させていただきました。ありがとうございます。以下にリンクを掲載させていただきます。
#環境
- python3
- JupyterLab
#分析してみる
###1. 必要なライブラリをインポート
import collections
import matplotlib.pyplot as plt
import pandas as pd
###2. CSVファイルをを読みこむ
pd.set_option('display.max_columns', None)
df = pd.read_csv('COVID-19.csv')
df
JupyterLabではcolumn(カラム)が多いと省略された表示になるため一行目の部分で全て表示させる
###3. 感染者の年代を確認してみる
age = df['年代'].value_counts(ascending=True)
age
90以上 1
90代 1
100 2
80代 7
10代 9
70代 10
60代 12
90 14
50代 25
30代 33
40代 33
80 44
20代 49
10 66
70 69
60 128
40 167
50 179
30 203
20 310
90 1040
不明 1145
0-10 1335
80 2645
10 2952
70 3751
60 4531
50 7355
40 8315
30 10551
20 18009
Name: 年代, dtype: int64
20と20代...といったように表記がひとつに定まっていないので出力結果が多くなってしまいました。df.replace()を用いて表記を統一させてみようと思います。
df = df.replace({'年代':{'0-10':'under10','10代':'10','20代':'20', '30代':'30', '40代':'40', '50代':'50', '60代':'60', '70代':'70', '80代':'80', '90代':'90' , '不明':'unknown', '90以上':'90~'}})
age2 = df['年代'].value_counts()
age2
20 18009
30 10551
40 8315
50 7355
60 4531
70 3751
10 2952
80 2645
under10 1335
unknown 1145
90 1040
20 359
30 236
50 204
40 200
60 140
70 79
10 75
80 51
90 15
100 2
90~ 1
Name: 年代, dtype: int64
先ほどより出力表示を抑えることができました。(同じ数字どうしで合計を取りたかったため色々試したがうまくいかなかったので今後の課題とします。)少々見辛いのでグラフで可視化してみます。
plt.title('Age of infected person')
age2.plot.bar()
グラフにすることで視覚的に理解しやすくなりました。このグラフをみると20代,30代,40代...といったように世代が若い方が感染者が多いとわかります。特に20代の感染者数の多さは一目瞭然ですね。
###4. 男女別の感染者数を確認する
df = df.replace({'性別':{'男性':'male', '女性':'female', '不明':'unknown'}})
sex = df['性別'].value_counts()
plt.xlabel('Sex')
plt.ylabel('Number of people')
plt.title('Infected_sex')
#print(sex) #男女別の詳しい感染者数が知りたい場合に表示する
sex.plot.bar()
グラフ化し確認してみると,男性の方が感染者数が多いとわかりました。感染は人間の性別に依存しないと思うが,外出時の目的や行動はそれぞれ異なると思うので詳しく知ることができれば感染数の男女別の関係が突き止められるのではと私は予想します。
###5. 陽性反応の増減を確認する
fixed_date = df['確定日']
fixed_date = collections.Counter(fixed_date)
#fixed_date #出力が多いので実行結果は割愛する
date = []
value = []
for get_date in fixed_date:
date.append(get_date)
for get_value in fixed_date.values():
value.append(get_value)
plt.plot(date, value)
plt.xticks( [0, 180, 70] )
plt.xticks(rotation=45)
plt.xlabel('date')
plt.ylabel('value')
plt.title('Changes in infected people')
plt.show()
グラフを確認すると1月から陽性患者を確認,4月頃に急増し一時的に治るものの,7月に再び急増し8月辺りにピークを迎えていることがわかる。グラフ化することで新型コロナウイルスの第二波を確認することができた。グラフの終わりから急激に陽性患者の確認数が減少しているので今後期待ですね。
###6. コロナ感染が確認された場所を地図上にプロットする
CSVにX,Y座標のデータがあったのでプロットしてみようと思います。
今回こちらの記事を参考にさせていただきました
#geopandasを使用するために必要なのでインストールする
pipenv install geopandas
pipenv install descartes
#元の地図データを描写
map_1 = gpd.read_file('./land-master(qiita)/japan.geojson')
map_1.plot(figsize=(10,10), edgecolor='#444', facecolor='white', linewidth = 1);
#CSVのXY座標を入力してみる
map_1.plot(figsize=(10,10), edgecolor='#444', facecolor='white', linewidth = 1);
plt.scatter(df['X'],df['Y'])
plt.show()
プロットされた点をよくみると右上に意味ありげに集結している...ということで拡大してみます。
map_1.plot(figsize=(10,10), edgecolor='#444', facecolor='white', linewidth = 1);
plt.xlim([120,150]) #拡大したい範囲を設定(任意)
plt.ylim([30,46]) #拡大したい範囲を設定(任意)
plt.scatter(df['X'],df['Y'])
plt.show()
しっかりプロットできていることが確認できました。コロナウイルスが全国的に蔓延しているのがこの地図を通してわかると思います。関東は勿論,九州地方は全体的に感染者が多いとわかりました。どこへ行っても感染のリスクがあるかもしれないと考えると非常に怖いです。
###7. まとめ
今回初めてのqiita投稿ということで至らない点もあると思いますが,楽しく分析・記事作成を行うことができ,とても嬉しく思います。簡単な分析ではありますが,地図上に座標をプロットするという自分にとって新しいことに挑戦できたので大変満足です。今回扱ったデータは欠損値が多く分析できるものが少なかったが,今後はよりディープなコロナ分析にチャレンジしてみたいです。コロナウイルスで大変な時期ではありますが,くれぐれもご自愛くださいませ。