見出し画像

[Python]csvファイルから集計をしてみる

1.何をするのか

本屋の売り上げデータを擬似的に作成し、集計処理します。作成する売り上げデータの各フィールド名は日 、値段、冊数です。また、求めたい集計結果は各ジャンル毎の合計売り上げ冊数です。

2.サンプルデータ作成

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

3.サンプルデータ詳細

日,ジャンル,冊数
1,小説,63
2,新書,2
3,技術書,99
4,ビジネス書,5
5,新書,74
6,ビジネス書,38
7,ビジネス書,35
8,技術書,1
9,技術書,16
10,ビジネス書,27
11,ビジネス書,0
12,ビジネス書,41
13,小説,62
14,小説,61
15,技術書,87
16,ビジネス書,36
17,小説,92
18,小説,41
19,新書,40
20,ビジネス書,63
21,新書,48
22,技術書,43
23,技術書,33
24,小説,8
25,技術書,78
26,技術書,14
27,小説,49
28,ビジネス書,42
29,技術書,31
30,新書,100
31,小説,37

4.集計処理

#集計処理

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

5.集計結果

新書:420冊
技術書:503冊
小説:626冊
ビジネス書:216





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