この記事では、Pythonを使ってCSVデータを集計する基本的な流れを紹介します。
pandasのread_csvを使った読み込みから、SQLのような集計処理までを実務ベースで解説します。
サンプルデータを使いながら、顧客別の売上集計を実際に作っていきます。
Excel出力まで含めて、一連の流れをシンプルに理解できる構成にしています。
CSVデータの構造を確認する
まずは今回扱うCSVデータの構造を見ていきます。
請求データとして、以下のようなカラムを持っています。
- invoice_id(請求ID)
- customer_id(顧客ID)
- customer_name(顧客名)
- invoice_date(請求日)
- amount(金額)
今回のデータ件数は10件です。
この中で顧客IDごとに集計すると、顧客は5社に分かれます。
つまり「10件 → 5件」に圧縮されるのが今回のゴールです。
pandasでCSVを読み込む
まずはCSVの読み込みです。
import pandas as pd
df = pd.read_csv("seikyu.csv", encoding="utf-8")
read_csvはpandasの中でも最も使う関数のひとつです。
実務でもログ、売上、顧客データなど、ほぼすべてここから始まります。
行数や列数を確認しておくと安心です。
print(df.shape)
今回のデータは「10行 × 12列」です。
データを集計できる形に整える
CSVはそのままだと集計できないことがあります。
特に金額は文字列として扱われているケースが多いです。
df["amount"] = df["amount"].replace(",", "", regex=True)
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
ここでやっているのは2つです。
- カンマを除去
- 数値型に変換
この処理を入れておかないと、合計が正しく出ません。
実務ではこの前処理が8割と言ってもいいくらい重要です。
SQL感覚で顧客別に集計する
ここが一番のポイントです。
pandasはSQLのGROUP BYとほぼ同じことができます。
summary = (
df.groupby(["customer_id", "customer_name"], as_index=False)["amount"]
.sum()
)
これはSQLで書くとこうなります。
SELECT customer_id, customer_name, SUM(amount)
FROM seikyu
GROUP BY customer_id, customer_name;
今回の集計結果は以下のようになります。
- 株式会社サンプルA:約820,000円
- 株式会社テックD:約700,000円
- 有限会社テストB:約530,000円
- 合同会社デモC:約225,000円
- 株式会社イノベーションE:約50,000円
データ10件から5件に整理されました。
かなりスッキリします。
出典:Pythonプログラミング VTuber サプー
ページ: 1 2