見出し画像

Step15 ファイル操作の応用--CSVファイルを使った集計アプリなど

前回は、CSVファイルの読み書き方法と、データ管理の重要性について学びました。
今回はそれを応用して、簡単な集計アプリ を作り、少し複雑なデータ操作にも挑戦してみましょう。


1. 合計と平均を出す簡単な集計アプリ

まずは、前回作成した scores.csv のデータを使って、合計点と平均点を計算してみましょう。

scores.csv の中身(例):

name,math,english
Taro,80,90
Hanako,70,100
Ken,60,85

プログラム例

import csv

with open("scores.csv", "r", newline="") as f:
    reader = csv.reader(f)
    next(reader)  # ヘッダーをスキップ
    total = 0
    count = 0
    for row in reader:
        total += int(row[1])  # 2列目(mathの点数)
        count += 1

print("合計点:", total)
print("平均点:", total / count)

実行結果:

合計点: 210
平均点: 70.0

これだけで、「CSVファイルを読み取って計算するアプリ」が完成です!
ヘッダー(タイトル行)は今回必要ありませんでしたので、「next()」関数を使用することで「読み捨てて」います。


2. 複数教科の平均を計算する

次は、数学だけでなく英語の平均点もいっしょに計算してみましょう。
変更点は「english_total」を「math_total」と同じように追加したこと。

import csv

with open("scores.csv", "r", newline="") as f:
    reader = csv.reader(f)
    next(reader)
    math_total = 0
    english_total = 0
    count = 0
    for row in reader:
        math_total += int(row[1])
        english_total += int(row[2])
        count += 1

print("数学 平均:", math_total / count)
print("英語 平均:", english_total / count)

3. 条件付きの集計

もちろん必殺の「if文」を使用すれば、特定の条件を満たすデータだけを集計することだってできますよ(*^^*)
例えば「数学が80点以上の人だけを表示」する場合:

import csv

with open("scores.csv", "r", newline="") as f:
    reader = csv.reader(f)
    next(reader)
    for row in reader:
        if int(row[1]) >= 80:
            print(row[0], "さんは数学で", row[1], "点でした!")

4. 今回のポイント

  • ヘッダーをスキップ → next(reader) を使う

  • int()で数値に変換 → CSVのデータは文字列なので注意

  • 条件分岐 → if文と組み合わせて、欲しいデータだけ処理可能

これらを組み合わせると、データを分析したり、必要な情報だけ抽出することができます。


練習問題

  1. 全員の数学と英語の合計点と平均点を計算して表示してみましょう。

  2. 合計点が 160点以上の人だけを表示してみましょう。

  3. 点数の高い順に並べ替えて表示するプログラムを書いてみましょう(ヒント:sorted() を使う)。

  4. 新しい行を追加して、再度平均点を計算してみましょう。

  5. 平均点が一番高い教科名を表示するプログラムを書いてみましょう。


まとめ

  • CSVファイルからデータを読み取り、計算すれば簡単な集計アプリが作れる

  • 複数列を扱ったり、条件をつけて抽出することで分析の幅が広がる

  • こうした集計処理は、家計簿、学習記録、売上分析など多くのアプリで活用できる

次回は、データの並べ替えや絞り込みをさらに深め、より本格的なデータ処理に挑戦 します。

次の記事


いいなと思ったら応援しよう!

DOI@日々学びの本質を考え続ける探求者 よろしければ応援お願いします! いただいたチップは引き続きプログラミングや学びについて、皆さんの利益になるようなよい記事を書くことで恩返しをさせていただきます!