データクレンジング

データセット

新型コロナウイルス感染者数マップ

https://jag-japan.com/covid19map-readme/

CC BY-NC 4.0

[1]:
import pandas as pd

csvデータの読み込み

[2]:
url = "https://dl.dropboxusercontent.com/s/6mztoeb6xf78g5w/COVID-19.csv"
df = pd.read_csv(url, low_memory=False, index_col="通し", na_values=[" ", ""])
df.head()
[2]:
厚労省NO 無症状病原体保有者 国内 チャーター便 年代 性別 確定日 発症日 受診都道府県 居住都道府県 ... Field4 Field5 Field6 Field7 Field8 Field9 Field10 Unnamed: 51 Unnamed: 52 Unnamed: 53
通し
1 1 NaN A-1 NaN 30 男性 1/15/2020 1/3/2020 神奈川県 神奈川県 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 2 NaN A-2 NaN 40 男性 1/24/2020 1/14/2020 東京都 中華人民共和国 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 3 NaN A-3 NaN 30 女性 1/25/2020 1/21/2020 東京都 中華人民共和国 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 4 NaN A-4 NaN 40 男性 1/26/2020 1/23/2020 愛知県 中華人民共和国 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 5 NaN A-5 NaN 40 男性 1/28/2020 1/22/2020 愛知県 中華人民共和国 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

5 rows × 53 columns

[3]:
df.columns
[3]:
Index(['厚労省NO', '無症状病原体保有者', '国内', 'チャーター便', '年代', '性別', '確定日', '発症日',
       '受診都道府県', '居住都道府県', '居住管内', '居住市区町村', 'キー', '発表', '都道府県内症例番号',
       '市町村内症例番号', 'ステータス', '備考', 'ソース', 'ソース2', 'ソース3', '人数', '累計', '前日比',
       '発症数', '死者合計', '退院数累計', '退院数', 'PCR検査実施人数', 'PCR検査前日比', '職業_正誤確認用',
       '勤務先_正誤確認用', 'Hospital Pref', 'Residential Pref', 'Release', 'Gender',
       'X', 'Y', '確定日YYYYMMDD', '受診都道府県コード', '居住都道府県コード', '更新日時', 'Field2',
       'Field4', 'Field5', 'Field6', 'Field7', 'Field8', 'Field9', 'Field10',
       'Unnamed: 51', 'Unnamed: 52', 'Unnamed: 53'],
      dtype='object')
[4]:
df.drop(df.columns[df.columns.get_loc("Field2"):], axis=1, inplace=True)
[5]:
df.iloc[:1, :].T
[5]:
通し 1
厚労省NO 1
無症状病原体保有者 NaN
国内 A-1
チャーター便 NaN
年代 30
性別 男性
確定日 1/15/2020
発症日 1/3/2020
受診都道府県 神奈川県
居住都道府県 神奈川県
居住管内 NaN
居住市区町村 NaN
キー 神奈川県
発表 神奈川県
都道府県内症例番号 1
市町村内症例番号 NaN
ステータス 退院
備考 NaN
ソース https://www.mhlw.go.jp/stf/newpage_08906.html
ソース2 https://www.pref.kanagawa.jp/docs/ga4/bukanshi...
ソース3 NaN
人数 1
累計 1.000000
前日比 1.000000
発症数 0.000000
死者合計 NaN
退院数累計 1.000000
退院数 1.000000
PCR検査実施人数 NaN
PCR検査前日比 NaN
職業_正誤確認用 NaN
勤務先_正誤確認用 NaN
Hospital Pref Kanagawa
Residential Pref Kanagawa
Release Kanagawa Prefecture
Gender Male
X 139.642347
Y 35.447504
確定日YYYYMMDD 2020/1/15
受診都道府県コード 14.000000
居住都道府県コード 14.000000
更新日時 12/25/2020 12:04

データ型の変換

[6]:
df.dtypes
[6]:
厚労省NO                object
無症状病原体保有者            object
国内                   object
チャーター便               object
年代                   object
性別                   object
確定日                  object
発症日                  object
受診都道府県               object
居住都道府県               object
居住管内                 object
居住市区町村               object
キー                   object
発表                   object
都道府県内症例番号            object
市町村内症例番号             object
ステータス                object
備考                   object
ソース                  object
ソース2                 object
ソース3                 object
人数                    int64
累計                  float64
前日比                 float64
発症数                 float64
死者合計                float64
退院数累計               float64
退院数                 float64
PCR検査実施人数           float64
PCR検査前日比            float64
職業_正誤確認用             object
勤務先_正誤確認用            object
Hospital Pref        object
Residential Pref     object
Release              object
Gender               object
X                   float64
Y                   float64
確定日YYYYMMDD          object
受診都道府県コード           float64
居住都道府県コード           float64
更新日時                 object
dtype: object

確定日列と発症日列をdatetime型に変換

[7]:
df["確定日"] = df["確定日"].map(pd.Timestamp)
df["発症日"] = df["発症日"].map(pd.Timestamp)
df.dtypes
[7]:
厚労省NO                       object
無症状病原体保有者                   object
国内                          object
チャーター便                      object
年代                          object
性別                          object
確定日                 datetime64[ns]
発症日                 datetime64[ns]
受診都道府県                      object
居住都道府県                      object
居住管内                        object
居住市区町村                      object
キー                          object
発表                          object
都道府県内症例番号                   object
市町村内症例番号                    object
ステータス                       object
備考                          object
ソース                         object
ソース2                        object
ソース3                        object
人数                           int64
累計                         float64
前日比                        float64
発症数                        float64
死者合計                       float64
退院数累計                      float64
退院数                        float64
PCR検査実施人数                  float64
PCR検査前日比                   float64
職業_正誤確認用                    object
勤務先_正誤確認用                   object
Hospital Pref               object
Residential Pref            object
Release                     object
Gender                      object
X                          float64
Y                          float64
確定日YYYYMMDD                 object
受診都道府県コード                  float64
居住都道府県コード                  float64
更新日時                        object
dtype: object

欠損値を除外

年代列と性別列の欠損値を除外

[8]:
df["年代"].isnull().sum()
[8]:
1
[9]:
df["性別"].isnull().sum()
[9]:
3
[10]:
df.drop(
    df.loc[df["年代"].isnull()].index.union(df.loc[df["性別"].isnull()].index), inplace=True
)

空白文字の除去

[11]:
df["年代"].unique()
[11]:
array(['30 ', '40 ', '60 ', '50 ', '20 ', '80 ', '70 ', '10 ', '0-10',
       '不明', '90 ', '20', '50', '30', '40', '80', '10', '60', '70',
       '不明\u3000', '90\xa0', '60\xa0', '90', '10\xa0', '0-10\xa0',
       '30\xa0', '50\xa0', '40\xa0', '100 ', '20\xa0'], dtype=object)

年代列の空白文字を削除

[12]:
df["年代"] = df["年代"].str.strip()

データの直列化

[13]:
df.to_pickle("../data.pickle", protocol=4)