【PythonでCIVID-19分析】世界版 CIVID-19状況 Part1:データの前処理 1-1(方針確認1)

投稿者: | 2020年6月28日

今回から世界版のデータの前処理を始めたいと思います。

使用するのはジョンズ・ホプキンズ大学が以下URLでGitHubにて公開している以下のデータです。

https://github.com/CSSEGISandData/COVID-19

こちらのデータは四月の時点で一度前処理に取り組んだことがあります。

その時使用したのはarchived_dataフォルダ内のarchived_daily_case_updates内あった2020/1/21から2020/2/14のデータです。

そのデータを以下、プログラムで処理してデータの作成を行いました。

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

import datetime

#archived_daily_case_updatesフォルダ内の全csvファイルをパスに格納
import glob
p = "./COVID-19-master/archived_data/archived_daily_case_updates/"
csv_list = glob.glob(p + "*.csv")

#リスト数の確認
len(csv_list)

#リストに各csvファイルをデータフレーム化して格納
df_list = []
n=0
for i in csv_list:
    df= pd.read_csv(i)
    df_list.append(df)
    n+=1

#csvファイルの結合
df = pd.concat(df_list , sort=False)

#不要行の削除
del df["Province/State"]
del df["Suspected"]
del df["ConfnSusp"]
del df["Notes"]

#欠損値を0で補間
df = df.fillna(0)

#バラバラの日付の表示を整形・統一
Last_Update = []
days_test_list = df["Last Update"] 
for i in days_test_list:
#    print(i)
    z= i.split(" ")[0]

    if len(z) == 9 :
        m = z.split("/")[0]
        d = z.split("/")[1]
        y = z.split("/")[2]
        day1 = y +  "0" + m + d
        print(day1)
        Last_Update.append(day1)
        
    elif len(z) == 10 :
        day2 = z.replace("-","")
        print(day2)
        Last_Update.append(day2)
        
    if len(z) == 7 :
        m = z.split("/")[0]
        d = z.split("/")[1]
        y = z.split("/")[2]
        day3 = y + "20" + "0"+ m + d
        print(day3)
        Last_Update.append(day3)
        
        
    if len(z) == 6 :
        m = z.split("/")[0]
        d = z.split("/")[1]
        y = z.split("/")[2]
        day4 = y +  "20" +  "0" + m +  "0" + d
        print(day4)
        Last_Update.append(day4)
        
    if len(z) == 8 :
        m = z.split("/")[0]
        d = z.split("/")[1]
        y = z.split("/")[2]
        day5 = y + "0" + m+ "0" + d
        print(day5)
        Last_Update.append(day5)
        
print()
print(len(Last_Update))

#データフレームに上記で処理した新規日付列を追加
df["Date"]  = Last_Update
df.head()

#不要になった日付の列を削除
del df["Last Update"]

#csvファイルに書き込み
df.to_csv("df_COVID19.csv", index= None, encoding="utf-8")

かいつまんで内容を説明すると、
①フォルダ内の全てのcsvファイルのパスを取得、リストに格納
②上記パスをfor文を回して全csvファイルをデータフレーム化しリストに格納
③上記データフレームを結合
④日付の表記がバラバラなので整形して統一
⑤完成データをcsvファイルに書き込み
といった流れです。

しかし、国によっては州や県ごとにバラバラになっていて、それを合計する処理がさらに必要です。

また、今回使用するcsse_covid_19_data内csse_covid_19_daily_reports内あった2020/1/22から2020/6/26のデータ(6/26取得)に適用すると、データの構成が変わってしまっており、このままでは使用できない状況となっています。

大幅なプログラムの訂正が必要となります。

その為、今の自分が早く確実に実行し、視覚化・分析できる別の方法も模索することにしました。

検討した結果、csse_covid_19_time_series内のデータを使った方が、日本版(1)での経験を活かせそうだと判明しました。

テストで前処理を行った限り、以前のプログラムを修正して進めるより、こちらの方が早く確実に進められそうです。

次回からこちらの方法で実際に前処理を進めようと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です