pandas でデータの要約統計量を求める

pandas はデータ分析に特化したライブラリで、データフレーム形式のデータに対して要約統計量を簡単に計算できます。実際のデータ分析でよく使う機能を紹介します。

pandas のインポートとデータ準備

サンプルとして、学生のテスト成績データを作成します。

import pandas as pd
import numpy as np

# サンプルデータの作成
data = {
    '名前': ['田中', '鈴木', '佐藤', '高橋', '伊藤', '渡辺', '山本', '中村'],
    '数学': [72, 85, 68, 91, 74, 80, 77, 88],
    '英語': [65, 78, 72, 85, 70, 82, 75, 90],
    '理科': [70, 82, 65, 88, 72, 78, 80, 85]
}

df = pd.DataFrame(data)
print(df)

describe() で要約統計量を一括取得

describe() メソッドを使うと、主要な統計量をまとめて確認できます。

print(df.describe())

実行すると、count(データ数)、mean(平均)、std(標準偏差)、min(最小値)、25%・50%・75%(四分位数)、max(最大値)が表示されます。数値列のみが対象になります。

個別の統計量を計算する

特定の統計量だけを取得したい場合は、専用のメソッドを使います。

# 各科目の平均
print("平均:")
print(df[['数学', '英語', '理科']].mean())

# 各科目の標準偏差
print("\n標準偏差:")
print(df[['数学', '英語', '理科']].std())

# 各科目の中央値
print("\n中央値:")
print(df[['数学', '英語', '理科']].median())

pandas の std() はデフォルトで標本標準偏差( で割る)を返します。母標準偏差が必要な場合は std(ddof=0) とします。

行ごとの統計量

各学生の合計点や平均点を計算することもできます。

# 各学生の合計点
df['合計'] = df[['数学', '英語', '理科']].sum(axis=1)

# 各学生の平均点
df['平均'] = df[['数学', '英語', '理科']].mean(axis=1)

print(df)

axis=1 を指定すると行方向(横方向)に計算されます。

グループ別の集計

カテゴリ別に統計量を計算したい場合は groupby() を使います。

# クラス列を追加
df['クラス'] = ['A', 'A', 'B', 'B', 'A', 'B', 'A', 'B']

# クラス別の平均
print(df.groupby('クラス')[['数学', '英語', '理科']].mean())

このように pandas を使うと、複雑な集計も簡潔なコードで実現できます。