0Pricing
Learn AI with Python · レッスン

ピボットテーブルとクロス集計

pd.pivot_table()、pd.crosstab()、要約統計のためのデータ再構成を扱います。

「ピボットテーブルとクロス集計」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

洞察を得るためのデータ再形成

ピボットテーブルは、縦長のデータをグリッドに再形成し、2つのカテゴリ軸に沿って1つの値を集計します。使い慣れたスプレッドシートのピボットを、プログラムで扱えるようにしたものです。

import pandas as pd
df = pd.DataFrame({
    "region": ["E", "E", "W", "W", "E"],
    "product": ["A", "B", "A", "B", "A"],
    "sales": [10, 20, 30, 40, 50],
})

基本のpivot_table

pd.pivot_tableには、values(集計する数値)、index(行)、columns(列)を指定します。デフォルトでは、重複するセルの平均を計算します。

pt = pd.pivot_table(df, values="sales", index="region", columns="product")
print(pt)
# product     A     B
# region
# E        30.0  20.0
# W        30.0  40.0

aggfuncの選び方

aggfuncを設定すると、重複データをどのように集約するかを制御できます。sum、mean、countなどがあり、リストを使えば複数を同時に指定できます。

pt = pd.pivot_table(df, values="sales", index="region",
                    columns="product", aggfunc="sum")
print(pt)

複数のaggfunc

関数のリストを渡すと、複数の集計結果を横に並べて計算できます。

pt = pd.pivot_table(df, values="sales", index="region",
                    aggfunc=["sum", "mean", "count"])
print(pt)

欠損セルの補完

データのない組み合わせはNaNになります。fill_valueを使うと、通常は0などの値で置き換えられ、見やすいレポートになります。

pt = pd.pivot_table(df, values="sales", index="region",
                    columns="product", aggfunc="sum", fill_value=0)
print(pt)

Margins(合計)

margins=Trueを設定すると、行と列の総合計が追加されます。デフォルトでは「All」というラベルが付けられます。

pt = pd.pivot_table(df, values="sales", index="region",
                    columns="product", aggfunc="sum",
                    fill_value=0, margins=True)
print(pt)

複数のインデックス階層

indexまたはcolumnsにリストを渡すと、階層的な内訳を作成できます。たとえば、地域、次に商品という順で指定できます。

df["channel"] = ["on", "off", "on", "off", "on"]
pt = pd.pivot_table(df, values="sales",
                    index=["region", "channel"], aggfunc="sum")
print(pt)

crosstabによるクロス集計

pd.crosstabは、2つのカテゴリ値の組み合わせの出現頻度をカウントする専用のピボット機能です。集計対象の値の列は必要ありません。

ct = pd.crosstab(df["region"], df["product"])
print(ct)
# product   A  B
# region
# E         2  1
# W         1  1

crosstabの正規化

normalize引数を使うと、カウントを割合に変換できます。"index"は行ごと、"columns"は列ごと、Trueは総合計に対する割合です。

ct = pd.crosstab(df["region"], df["product"], normalize="index")
print(ct)   # each row sums to 1.0

値を使ったcrosstab

valuesとaggfuncを指定すると、crosstabで件数ではなく指標を集計できます。これにより、pivot_tableとの違いは小さくなります。

ct = pd.crosstab(df["region"], df["product"],
                 values=df["sales"], aggfunc="sum")
print(ct)

pivot_tableとcrosstabの違い

数値を集計する場合はpivot_tableを、カテゴリの組み合わせの出現頻度を数える場合はcrosstabを使います。crosstabでは、割合への正規化も1行で実行できます。

確認問題

データ再形成の知識を確認しましょう。

まとめ

データ再形成ツールキット:

  • pd.pivot_table(values, index, columns, aggfunc)で指標を集計する
  • 空のセルにはfill_value、合計にはmargins=Trueを使う
  • 階層を作るにはindexとcolumnsにリストを指定する
  • pd.crosstabは組み合わせを数え、normalizeは割合を返す

よくある質問

「ピボットテーブルとクロス集計」レッスンは無料ですか?

はい。「ピボットテーブルとクロス集計」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「ピボットテーブルとクロス集計」で何を学びますか?

pd.pivot_table()、pd.crosstab()、要約統計のためのデータ再構成を扱います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ピボットテーブルとクロス集計」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. GroupBy と集計
  2. ピボットテーブルとクロス集計
  3. 高度なマージと結合
  4. Pandas の時系列データ
← Learn AI with Pythonに戻る