PythonによるCSVファイル取り込み
PythonによるCSVデータの取り込み
NIDD 国立感染症研究所
全数把握疾患、報告数、累積報告数、都道府県別
サンプルにするデータはIDWR速報データの五類感染症に関して都道府県別発生件数を週ごとにまとめられたCSVファイルを使用します。
発生頻度が0のところは見にくいのでこういった部分を省いてデータを集約して見やすくし、さらには週ごとのデータも集約する方法になります。
Jupyter Lab
今回はAnaconda3のJupyter Lab上で操作を進めていくことにします。同じanaconda3上にjupyternotebookというのがありますが現在は開発が止まっているのでjupyter labのほうですすめていくほうが無難でしょう。
集計CSVデータのダウンロード
以下のリンクからデータをダウンロード。
その他2022年第6週から第13週は右サイドバーの一番下のリンクが貼ってあるのでそれぞれをダウンロードして適当なフォルダに入れておきます。
pandasのインポート
jupyter labを開いたら適当なファイル名をつけてpandasとglobのインポートを実施。
import pandas as pd from glob import glob
次にglobでファイルのあるパスを指定して読みこませます(.csvの前にある*はワイルドカード)。
glob ('D:\統計データ\全数把握疾患、報告数、累積報告数都道府県別/*.csv')
※)パスの指定がわからない場合はファイルのある所に直接入っていって次のようにパスをそのまま最初の’と*の間にコピペします。
Shift + Enterで実行させて次のようにファイルを読み込ませる。
それを新しくzensu_haakuの中に入れる。
zensu_haaku = glob ('D:\統計データ\全数把握疾患、報告数、累積報告数都道府県別/*.csv') zensu_haaku
0番目のファイルをdir_pathへ格納します。
dir_path = zensu_haaku[0] dir_path
仮置きの中にpd.read_csvでファイル読み込みさせる。
df_temp = pd.read_csv(dir_path, encoding='sjis') df_temp
主にデータの入っている箇所の列と、なんの症例か判別するために主要感染症名のある行を取り出してcolumnsに入れておきます。
columns = df_temp.iloc[1, [0, 17, 35, 41,45,55,81,93,123,129,131,133,137,141,143,145,149,153,159,161,163,169]] columns
右上に欠損値のNaNがあるのでここを“都道府県別”という文字列を代入します。
次のように入力。
columns = columns.fillna('都道府県別') columns
次にデータの入っている都道府県別の行を取り出していく。
df = df_temp.iloc[4:50, [0, 17, 35, 41,45,55,81,93,123,129,131,133,137,141,143,145,149,153,159,161,163,169]] df
なんの列名(病名)かわかるように先ほど作成したcolumnsを入れてやるようにする。
df.columns = columns df
いつの時期のものかわかるように週数を入れる。
df['週数'] = df_temp.iloc[0, 0] df
一連のデータ抽出の流れをまとめてaffected_extractという関数にまとめます。ファイルのパスを認識させるために関数名の後の()の中にdir_pathと入力してファイルを引き込んでやります。
def affected_extract(dir_path): df_temp = pd.read_csv(dir_path, encoding = 'sjis') columns = df_temp.iloc[1, [0, 17, 35, 41,45,55,81,93,123,129,131,133,137,141,143,145,149,153,159,161,163,169]] columns = columns.fillna('都道府県別') df = df_temp.iloc[4:50, [0, 17, 35, 41,45,55,81,93,123,129,131,133,137,141,143,145,149,153,159,161,163,169]] df.columns = columns df['週数'] = df_temp.iloc[0, 0] return df df = affected_extract(dir_path) df.head()