PythonによるCSVファイル取り込み


PythonによるCSVデータの取り込み

NIDD 国立感染症研究所

全数把握疾患、報告数、累積報告数、都道府県別

サンプルにするデータはIDWR速報データの五類感染症に関して都道府県別発生件数を週ごとにまとめられたCSVファイルを使用します。

発生頻度が0のところは見にくいのでこういった部分を省いてデータを集約して見やすくし、さらには週ごとのデータも集約する方法になります。

Jupyter Lab

今回はAnaconda3のJupyter Lab上で操作を進めていくことにします。同じanaconda3上にjupyternotebookというのがありますが現在は開発が止まっているのでjupyter labのほうですすめていくほうが無難でしょう。

集計CSVデータのダウンロード

以下のリンクからデータをダウンロード。

IDWR速報データ 2022年第5週

その他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()

データの集約


PAGE TOP