前回の続き、Pandasを使ったPython自動化プログラムを書いたので復習のために残しておきたい。あと誰かの役に立つことを願って・・・。
Pandas

Pandas を有効活用した実践的データ処理 ( 1 ) - 複数のエクセルファイルを一瞬でCSVファイルに変換するプログラム
実際の問題解決にPythonのデータ処理ライブラリ Pandas を使ったのでここで共有したい。
日常的にコードを一定数書いていないと忘れてしまうのでブログにアウトプットしたいと思います・・・。
(scraping_intermediate/count_elements.py, ファイル名やディレクトリなどは実際に使用する場合は <> の箇所を書き換えてください)
CSV内に散らばるデータのカウント数をとるプログラム
例えば、以下のようなテーブルにデータが大量に並んでいて、しかもそういったファイルが大量に存在する状態で、その中にある項目( A )が合計何回データの中に含まれているかを自動で数えるもの。
実際は空欄になっている箇所もあったりするだろうしこれより複雑だが、簡単に表すとこのようにデータが格納されているファイルが複数あるとする(毎日一日分自動で生成されるデータ)。その複数あるファイル中の”Event”や”Error”として並んでいるデータA, B, None, Error A, Error B が合計何回出現しているかを整理して一つのCSVファイルに自動で書き出す、というもの。
Date | Time | Event | Error |
2018-01-05 | 01:03:00 | A | None |
2018-01-05 | 03:30:00 | B | Error A |
2018-01-05 | 04:43:00 | A | Error B |
書いたコード
このプログラムではCSV内のデータを一度集計しやすいように別に格納してカウント処理をかけてます。
知っておくべきこと
- path = “<the path to your directory>” … 処理をしたいファイルがどこに格納されているかを示すためにpathの指定する
- files = os.listdir(path) … pathの指定後、ファイルを指定
- filenames = [ f for f in files if os.path.isfile(os.path.join(path, f))] … 指定したディレクトリにあるファイルのファイル名をリストに格納
- csv_input = pd.read_csv(filepath_or_buffer=”<the path to the directory>/{}”.format(csv_file),
usecols=[4, 17], encoding=”utf-8″, delimiter=”,”, header=None) … CSVファイルのカラムを指定して読み込み、変数に格納 - data_list.append(csv_input) … 上で格納したデータをリストに格納
- frame = pd.concat(data_list) … 上で格納したデータのリストをPandasのデータフレームとして格納
- frame.to_csv(“<the path to the directory>/<file name>”) … 上で格納したデータをCSVに書き出し、その際にCSVファイル名を指定
- counts = frame.stack().value_counts().to_frame(‘<column label>’).loc[error.error] … 格納したデータのカウント数を計算しcountsに格納
- counts.to_csv(“<the path to the directory>/<file name>”) … 上で格納したデータをCSVに書き出し
コメント