PythonでCSV! - 集計しよう!
いろんなデータをまとめたり、わかりやすくしたり。
CSVファイルのデータを作って、それを集計する方法が紹介されています。
from random import randint
pdc_list = ["小説", "新書", "ビジネス書", "技術書"]
with open("sell_month.csv", "w", encoding="utf-8") as f:
f.write("{0},{1},{2}".format("日", "ジャンル", "冊数") + "\n")
for i in range(1, 32):
pdc_index = randint(0, len(pdc_list) - 1)
pdc_name = pdc_list[pdc_index]
book_num = randint(0, 100)
f.write("{0},{1},{2}".format(i, pdc_name, book_num) + "\n")
これで"小説", "新書", "ビジネス書", "技術書"という項目に対して数字が当てられてファイルに保存されます。
以下Colabで実行してファイルを確認しているところです。
左のカラムにsell_month.csvという名前のファイルができています。そしてそのファイルをダブルクリックすると右側のカラムが開き内容が確認できます。しっかりデータが作られ保存されています。
このデータを使って集計します。
junle_num_dic = {}
with open("sell_month.csv", "r", encoding="utf-8") as f:
for i, row in enumerate(f):
#Headerスキップ
if i == 0: continue
row = row.split(",")
junle = row[1]
num = int(row[2].rstrip())
if junle not in junle_num_dic.keys():
junle_num_dic[junle] = num
else:
junle_num_dic[junle] += num
for junle, num in junle_num_dic.items():
print("{0}:{1}".format(junle, num))
これを実行すると
と集計され出力されます。
たくさんのファイルをまとめる方法が紹介されています。
これを使わせていただき、最初に紹介した自動でデータを作るコードを利用して3つのファイルを作ります。ファイル名は
として出力させます。これで3つのファイルができました。このファイルをまとめます。参考サイトのコードの一部を以下として読み込みファイルの場所を指定します。先ほど作ったファイルを読み込めるようにしています。
sample_files = glob.glob('*.csv')
全体は以下となり、出力ファイル名もmatome.csvとしています。
import pandas as pd
import csv
import glob
sample_files = glob.glob('*.csv')
list = []
for file in sample_files:
list.append(pd.read_csv(file))
df = pd.concat(list)
df.to_csv('matome.csv',index=False)
これを実行してさらに以下のコード( 集計のコード、matome.csvを読み込むようにファイル名を変えています)
junle_num_dic = {}
with open("matome.csv", "r", encoding="utf-8") as f:
for i, row in enumerate(f):
#Headerスキップ
if i == 0: continue
row = row.split(",")
junle = row[1]
num = int(row[2].rstrip())
if junle not in junle_num_dic.keys():
junle_num_dic[junle] = num
else:
junle_num_dic[junle] += num
for junle, num in junle_num_dic.items():
print("{0}:{1}".format(junle, num))
これを実行すると
とうまくいきました。
便利なライブラリをうまく使えばかなり楽に集計できますね。
この記事が気に入ったらサポートをしてみませんか?