見出し画像

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))

これを実行すると

ビジネス書:206
技術書:269
小説:462
新書:451

と集計され出力されます。

たくさんのファイルをまとめる方法が紹介されています。

これを使わせていただき、最初に紹介した自動でデータを作るコードを利用して3つのファイルを作ります。ファイル名は

sell_month.csv
sell_month2.csv
sell_month3.csv

として出力させます。これで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))

これを実行すると

技術書:1195
ビジネス書:1201
小説:1086
新書:1215

とうまくいきました。

便利なライブラリをうまく使えばかなり楽に集計できますね。


この記事が気に入ったらサポートをしてみませんか?