NumPyでのクロスタブとピボット操作の完全ガイド

この記事では、PythonのNumPyライブラリを用いてクロスタブとピボット操作を行う方法について詳しく解説します。具体的なコード例、その詳細な解説、応用例を含めています。

目次

NumPyとは

NumPy(Numerical Python)は、Pythonで数値計算を効率的に行うためのライブラリです。特に、大量のデータを高速に操作するために設計されています。

NumPyの特徴

  • 高次元配列を効率的に扱える
  • 数学関数を豊富に提供
  • C/C++やFortranとの連携が容易

クロスタブとピボット操作の基本

クロスタブとは、カテゴリ変数の組み合わせによる頻度や平均などを集計する表のことです。一方、ピボット操作は、データフレームの形状を変更する操作の一つです。

クロスタブの基本概念

  • 行:集計するカテゴリ変数
  • 列:集計する数値変数
  • 値:集計関数(平均、合計、最大値など)

ピボット操作の基本概念

  • index:行にする変数
  • columns:列にする変数
  • values:集計する値

NumPyでのクロスタブ操作

NumPyには直接クロスタブを生成する関数はありませんが、配列操作を駆使することで実現できます。

import numpy as np

# データ生成(性別と年齢)
gender = np.array(['M', 'F', 'M', 'F', 'F'])
age = np.array([25, 30, 35, 40, 45])

# クロスタブの生成(性別ごとの年齢平均)
unique_gender = np.unique(gender)
result = {}
for g in unique_gender:
    avg_age = np.mean(age[gender == g])
    result[g] = avg_age

print(result)

コードの解説

  • `np.unique()`で性別のユニークな値を取得。
  • ループで各性別に対して年齢の平均を計算。
  • 計算結果を辞書に格納。

NumPyでのピボット操作

NumPyでピボット操作を行う際には、`np.reshape()`などの配列形状を変更する関数が役立ちます。

# ピボット操作の例
data = np.array([[1, 'A', 10],
                 [2, 'A', 20],
                 [3, 'B', 30],
                 [4, 'B', 40]])

reshaped_data = data[:, [1, 2]].reshape(-1, 4)
print(reshaped_data)

コードの解説

  • `data`配列を列でスライスして形状を変更。
  • `np.reshape()`で配列の形状を変更。

応用例1:多次元クロスタブ

# 性別、年齢、収入のデータ
gender = np.array(['M', 'F', 'M', 'F', 'F'])
age = np.array([25, 30, 35, 40, 45])
income = np.array([50000, 60000, 70000, 80000, 90000])

# クロスタブ(性別・年齢ごとの収入平均)
result = {}
for g in unique_gender:
    for a in np.unique(age):
        avg_income = np.mean(income[(gender == g) & (age == a)])
        result[(g, a)] = avg_income

print(result)

コードの解説

2つのカテゴリ変数(性別と年齢)を組み合わせて、収入の平均を計算しています。

応用例2:条件付きピボット

# 条件にマッチするデータだけでピボット
filtered_data = data[data[:, 2].astype(int) > 20]
reshaped_filtered_data = filtered_data[:, [1, 2]].reshape(-1, 4)
print(reshaped_filtered_data)

コードの解説

特定の条件(この場合は値が20より大きい)にマッチするデータのみでピボット操作を行っています。

まとめ

NumPyを用いて、クロスタブとピボット操作は非常に柔軟に行えます。特に大量のデータを扱う際には、NumPyの高速な配列操作が大いに役立ちます。本記事の例を参考に、ぜひ実

践してみてください。

コメント

コメントする

目次