データ分析の初期段階では、データの全体像を把握するために「平均値」や「中央値」、「標準偏差」といった基本統計量(記述統計量)を確認することが重要です。PandasのDataFrameには、これらの数値を算出するためのメソッドが豊富に用意されています。
本記事では、個別の統計量を求める方法と、describe() メソッドを用いて主要な統計量を一括で確認する方法について解説します。
目次
主要な統計量算出メソッド一覧
DataFrameやSeriesに対して呼び出すことができる主なメソッドは以下の通りです。これらはデフォルトでは「列(カラム)」ごとに計算されます。
| メソッド | 意味 | 備考 |
count() | 要素数 | 欠損値(NaN)は除外されます |
mean() | 平均値 | |
median() | 中央値 | データを順に並べた真ん中の値 |
mode() | 最頻値 | 最も頻繁に出現する値(複数存在する場合あり) |
max() | 最大値 | |
min() | 最小値 | |
std() | 標準偏差 | データのばらつき具合(不偏標準偏差) |
var() | 分散 | 標準偏差の2乗(不偏分散) |
sample() | ランダム抽出 | 統計量ではありませんが、データのサンプリングに使用 |
describe() | 要約統計量 | 上記の主要な値をまとめて算出 |
実装サンプルコード
ここでは、ある不動産物件のリスト(価格、面積、築年数)を題材に、各統計量を算出します。
import pandas as pd
def calculate_statistics():
"""
Pandas DataFrameを用いて基本統計量を算出する関数
"""
# 1. サンプルデータの作成: 不動産物件データ
# Price: 価格(万円), Area: 面積(m2), Age: 築年数
property_data = {
"Price": [3500, 4200, 2800, 5500, 4200],
"Area": [45.5, 60.0, 38.2, 85.0, 55.0],
"Age": [15, 5, 25, 2, 12]
}
df = pd.DataFrame(property_data)
print("--- 元のデータセット ---")
print(df)
print("\n")
# 2. 個別の統計量を算出
print("=== 個別の統計量 ===")
# 平均値 (Mean)
# 各列の平均がSeriesとして返されます
mean_val = df.mean()
print(f"[平均値]\n{mean_val}\n")
# 中央値 (Median)
median_val = df.median()
print(f"[中央値]\n{median_val}\n")
# 最頻値 (Mode)
# 最頻値は複数存在する可能性があるため、DataFrame形式で返されます
mode_val = df["Price"].mode()
print(f"[価格の最頻値]: {mode_val[0]} 万円\n")
# 標準偏差 (Std)
std_val = df.std()
print(f"[標準偏差]\n{std_val}\n")
# 3. 要約統計量の一括取得 (describe)
print("=== 要約統計量 (describe) ===")
# count, mean, std, min, 25%, 50%, 75%, max が一度に計算されます
description = df.describe()
print(description)
print("\n")
# 4. ランダムサンプリング (sample)
print("=== ランダムサンプリング ===")
# ランダムに2件のデータを抽出
# random_stateを固定すると再現性が保たれます
sampled_df = df.sample(n=2, random_state=1)
print(sampled_df)
if __name__ == "__main__":
calculate_statistics()
実行結果
--- 元のデータセット ---
Price Area Age
0 3500 45.5 15
1 4200 60.0 5
2 2800 38.2 25
3 5500 85.0 2
4 4200 55.0 12
=== 個別の統計量 ===
[平均値]
Price 4040.00
Area 56.74
Age 11.80
dtype: float64
[中央値]
Price 4200.0
Area 55.0
Age 12.0
dtype: float64
[価格の最頻値]: 4200 万円
[標準偏差]
Price 993.981891
Area 17.954052
Age 9.093954
dtype: float64
=== 要約統計量 (describe) ===
Price Area Age
count 5.000000 5.000000 5.000000
mean 4040.000000 56.740000 11.800000
std 993.981891 17.954052 9.093954
min 2800.000000 38.200000 2.000000
25% 3500.000000 45.500000 5.000000
50% 4200.000000 55.000000 12.000000
75% 4200.000000 60.000000 15.000000
max 5500.000000 85.000000 25.000000
=== ランダムサンプリング ===
Price Area Age
2 2800 38.2 25
1 4200 60.0 5
解説:describe()メソッドの利便性
describe() メソッドは、データの傾向を瞬時に掴むのに非常に強力なツールです。
- count: データの個数(欠損値を除く)
- mean: 平均値
- std: 標準偏差
- min / max: 最小値と最大値
- 25%, 50%, 75%: 四分位数(50%は中央値と同じ)
データフレームを読み込んだ直後にまず df.describe() を実行し、データの大まかな分布や異常値の有無(極端なmax/minがないかなど)を確認するのが、データ分析の定石フローの一つです。
