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 を使うと、複雑な集計も簡潔なコードで実現できます。