Python#3

PythonによるCSV取り込み

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

Pythonによるデータ集約

 

NIDD 国立感染症研究所

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

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

 

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

 

Jupyter Lab

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

 

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

以下のリンクからデータをダウンロード。
IDWR速報データ 2022年第5週
その他2022年第6週から第13週は右サイドバーの一番下のリンクが貼ってあるのでそれぞれをダウンロードして適当なフォルダに入れておきます。
Pythonによるデータ集約

 

pandasのインポート

jupyter labを開いたら適当なファイル名をつけてpandasとglobのインポートを実施。

import pandas as pd
from glob import glob

 

次にglobでファイルのあるパスを指定して読みこませる(.csvの前にある*はワイルドカード)。

glob ('D:\統計データ\全数把握疾患、報告数、累積報告数都道府県別/*.csv')

※)パスの指定がわからない場合はファイルのある所に直接入っていって次のようにパスをそのまま’と*の間にコピペする。
Pythonによるデータ集約

 

Shift + Enterで実行させて次のようにファイルを読み込ませる。
Pythonによるデータ集約

 

それを新しくzensu_haakuの中に入れる。

zensu_haaku = glob ('D:\統計データ\全数把握疾患、報告数、累積報告数都道府県別/*.csv')
zensu_haaku

 

Pythonによるデータ集約

 

0番目のファイルをdir_pathへ格納

dir_path = zensu_haaku[0]
dir_path

 

仮置きの中にpd.read_csvでファイル読み込みさせる。

df_temp = pd.read_csv(dir_path, encoding='sjis')
df_temp

 

Pythonによるデータ集約

主にデータの入っている箇所の列と、なんの症例か判別するために主要感染症名のある行を取り出して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

Pythonによるデータ集約

 

右上に欠損値のNaNがあるのでここを“都道府県別”という文字列を代入します。
次のように入力。

columns = columns.fillna('都道府県別')
columns

Pythonによるデータ集約

 

次にデータの入っている都道府県別の行を取り出していく。

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

 

Pythonによるデータ集約

なんの列名(病名)かわかるように先ほど作成したcolumnsを入れてやるようにする。

df.columns = columns
df

Pythonによるデータ集約

 

いつの時期のものかわかるように週数を入れる。

df['週数'] = df_temp.iloc[0, 0]
df

Pythonによるデータ集約

 

 

一連のデータ抽出の流れをまとめて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()

Pythonによるデータ集約

 

データの集約

pd.concat

抽出のコードが出来たので週ごとのデータをひとつのデータにまとめます。

df = pd.DataFrame()
for dir_path in zensu_haaku:
df_temp = affected_extract(dir_path)
df = pd.concat([df, df_temp])
df

Pythonによるデータ集約
左下の行数を見ればわかるように368 rows × 23 columnsとなっているのでデータが集約出来ていることがわかる。

 

左の行番を順通りにするために以下のように入力。

df = df.reset_index(drop = True)

 

次にこれをCSVファイルとして出力します。

df.to_csv('zensu_data.csv', index = False)

 

実行するとzensu_haku.csvという名前のファイルが作られます。
これをダブルクリックしてやればjupyter lab上で以下のように作成されたファイルが閲覧出来るようになります。
Pythonによるデータ集約

CSVファイルの文字化け修正

なおカレントディレクトリから開く場合csvファイルが以下のように文字化けしていることがあります。
Pythonによるデータ集約
次のように対処していきます。

 

まず対象の文字化けしているCSVを右クリックしてそれをメモ帳か何かで開きます。
Pythonによるデータ集約

 

名前を付けて保存をクリック。
Pythonによるデータ集約

 

この時文字コードをANSIに変換して上書き保存。
Pythonによるデータ集約

 

Pythonによるデータ集約

 

再度開き直せば次のように表示されるようになります。
Pythonによるデータ集約

出力

都道府県ごとのデータを出力してexport_dirというフォルダに格納します。

for i in prefectures:
df_affected = df[df['都道府県別'] == i]
df_affected.to_csv('D:\統計データ\全数把握疾患、報告数、累積報告数都道府県別\export_dir' + '/' + i + '.csv')

 

glob ('D:\統計データ\全数把握疾患、報告数、累積報告数都道府県別\export_dir/*.csv')

 

pythonによるcsvデータの読み取り

 

 

all_csv_dataへ格納。

all_csv_data = glob ('D:\統計データ\全数把握疾患、報告数、累積報告数都道府県別\export_dir/*.csv')
all_csv_data

 

for文のなかにconcatを使ってdf_all_csv_dataへデータを結合。

df_all_csv_data = pd.DataFrame()
for i in all_csv_data:
df_read_csv = pd.read_csv(i)
df_all_csv_data = pd.concat([df_read_csv, df_all_csv_data])

 

pythonによるcsvデータの読み取り

 

余計な列があるのでこれを次のようにして削除。

 

df_drop = df_all_csv_data.drop('Unnamed: 0', axis = 1)
df_all_csv_data = df_drop
df_all_csv_data

 

pythonによるcsvデータの読み取り

 

次のように入力して行番をリセット。

df_all_csv_data = df_all_csv_data.reset_index(drop = True)
df_all_csv_data

 

pythonによるcsvデータの読み取り

 

 

最後に次のようにしてCSVデータを出力。

df_all_csv_data.to_csv('all_csv_data.csv', index = False)

 

pythonによるcsvデータの読み取り

データの描画

seabornの日本語対応をしていないのでそれぞれに対応する病名を次のように表記。

結核 tuberculosis
腸管出血性大腸菌感染症

EHEC(Enterohemorrhagic Escherichia coli infection)

E型肝炎

Hepatitis E

A型肝炎 Hepatitis A
回帰熱 recurrent fever
つつが虫病 Tsutsugamushi disease
日本脳炎 Japanese encephalitis
レジオネラ症 Legionellosis
アメーバ赤痢 Amoebiasis
ウイルス性肝炎 Viral hepatitis
カルバペネム耐性腸内細菌感染症 CRE(carbapenem-resistant Enterobacteriaceae)
急性脳炎 Acute encephalitis
クロイツフェルト・ヤコブ病 CJD(Creutzfeldt-Jakob disease)
劇症型溶血性レンサ球菌感染症 Severe invasive streptococcal disease
後天性免疫不全症候群 HIV
侵襲性インフルエンザ菌感染症 Invasive Haemophilus influenzae disease
侵襲性肺炎球菌感染症 invasive pneumococcal disease
梅毒 Syphilis
播種性クリプトコックス症 Cryptococcosis
破傷風 tetanus
百日咳 Whooping cough

 

df_prefectures_master.index = ['mie', 'kyoto', 'saga', 'hyogo', 'hokkaido', 'tiba', 'wakayama', 'saitama', 'ooita', 'oosaka', 'nara', 'miyagi', 'miyazaki', 'toyama', 'yamaguti', 'yamagata', 'yamanasi', 'gifu', 'okayama', 'iwate', 'tottori', 'hirosima', 'tokusima', 'ehime', 'aiti', 'niigata', 'tokyo', 'totigi', 'siga','kumamoto', 'isikawa', 'kanagawa', 'fukui', 'fukuoka', 'fukusima', 'akita', 'gunma', 'ibaraki', 'nagasaki', 'nagano', 'aomori', 'sizuoka', 'kagawa', 'kouti', 'tottori', 'kagosima' ]
df_prefectures_master.columns = ['tuberculosis', 'EHEC', 'Hepatitis E', 'Hepatitis A', 'recurrent fever', 'Tsutsugamushi disease', 'Japanese encephalitis', 'Legionellosis', 'Amoebiasis', 'Viral hepatitis', 'CRE', 'Acute encephalitis', 'CJD', 'Severe invasive streptococcal disease', 'HIV', 'Invasive Haemophilus influenzae disease', 'invasive pneumococcal disease', 'Syphilis', 'Cryptococcosis', 'tetanus', 'Whooping cough']
df_prefectures_master

 

pythonによるcsvデータの取り込み

seabornのインポート

次のように入力。

import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

 

都道府県ごとの疾患別感染状況をわかりやすくするためにヒートマップでCSVの数値データを可視化。
次のように入力。

plt.figure(figsize = (15, 6))
cmap = sns.light_palette("#00008b", as_cmap = True)
sns.heatmap(df_prefectures_master, cmap = cmap)

 

pythonによるcsvデータの取り込み

 

一番左側の疾患が結核で右から4番目の濃い色の列が梅毒になる。

都道府県別感染症分布グラフ

一部の地域を除いて梅毒が密集人口の高いところで頻発しておりとりわけと東京での結核と梅毒感染者が多いことがわかる。


PythonによるCSV取り込み関連ページ

Visual StudioでPython基礎
当サイトは主に物理に関する数学など、その他周辺も含めた少々ごった煮のウェブサイトです。 数学分野に関しての趣旨としては、通常のテキストでは割愛されてしまう内容などを詳しく記述し、さらには難しい説明をするのではなく、わかりにくい内容をいかにわかりやすく伝えるか━など、そういったウェブコンテンツならではの利便性と機動性を生かしたサイト作成を主眼としています。
Visual StudioでPythonをやろう
当サイトは主に物理に関する数学など、その他周辺も含めた少々ごった煮のウェブサイトです。 数学分野に関しての趣旨としては、通常のテキストでは割愛されてしまう内容などを詳しく記述し、さらには難しい説明をするのではなく、わかりにくい内容をいかにわかりやすく伝えるか━など、そういったウェブコンテンツならではの利便性と機動性を生かしたサイト作成を主眼としています。
pythonによる3次元描画
当サイトは主に物理に関する数学など、その他周辺も含めた少々ごった煮のウェブサイトです。 数学分野に関しての趣旨としては、通常のテキストでは割愛されてしまう内容などを詳しく記述し、さらには難しい説明をするのではなく、わかりにくい内容をいかにわかりやすく伝えるか━など、そういったウェブコンテンツならではの利便性と機動性を生かしたサイト作成を主眼としています。
python描画
当サイトは主に物理に関する数学など、その他周辺も含めた少々ごった煮のウェブサイトです。 数学分野に関しての趣旨としては、通常のテキストでは割愛されてしまう内容などを詳しく記述し、さらには難しい説明をするのではなく、わかりにくい内容をいかにわかりやすく伝えるか━など、そういったウェブコンテンツならではの利便性と機動性を生かしたサイト作成を主眼としています。
pythonインストール
当サイトは主に物理に関する数学など、その他周辺も含めた少々ごった煮のウェブサイトです。 数学分野に関しての趣旨としては、通常のテキストでは割愛されてしまう内容などを詳しく記述し、さらには難しい説明をするのではなく、わかりにくい内容をいかにわかりやすく伝えるか━など、そういったウェブコンテンツならではの利便性と機動性を生かしたサイト作成を主眼としています。

ホーム RSS購読 サイトマップ
TOP 線形代数 ベクトル解析 慣性モーメント 解析力学 微分方程式 NEへの道しるべ