【pandas】データの代表値を求める

データの代表値をpandasで求める方法を紹介します。

計算する代表値

以下の代表値を計算します。

  • 平均(相加平均)
  • 中央値
  • 最頻値
  • 分散
  • 標準偏差
  • 四分位数
  • パーセンタイル

各代表値の説明は以下の通りです。

平均(相加平均)

全てのデータを足してデータの個数で割った値です。
$$
\begin{align}
{\bar{x}} = \frac{1}{N}\sum\limits_{i}^{N}{x_{i}}
\end{align}
$$

中央値

全てのデータを値の大きさの順に並べたときにちょうど中央に来る値です。データの個数が偶数であるときは中央に来る2つのデータの平均値を中央値とします。

最頻値

全てのデータの中で最も多く出てくる値です。

分散

各データが平均値から平均的にどのくらい離れた値を有しているかを、各データの平均値からの差分の2乗を平均することで評価した値です。
$$
\begin{align}
s^{2} = \frac{1}{N}\sum\limits_{i}^{N}{\left(x_{i} - {\bar{x}}\right)^{2}}
\end{align}
$$

標準偏差

分散の平方根をとった値です。

四分位数

全てのデータを小さい順に並べたときに、小さい方から全体の4分の1の位置に来るデータの値のことを第一四分位数、4分の2の位置に来るデータの値のことを第二四分位数、4分の3の位置に来るデータの値のことを第三四分位数といいます。第二四分位数は中央値と等しいです。

パーセンタイル

全てのデータを小さい順に並べたときに、小さい方から全体の$n$%の位置に来るデータの値のことを$n$パーセンタイルといいます。25パーセンタイル、50パーセンタイル、75パーセンタイルはそれぞれ第一、第二、第三四分位数と等しいです。

サンプルコード

import pandas as pd
import numpy as np

# サンプルデータを用意する
data = {
    'column': [3, 5, 6, 10, 6, 6, 20, 14, 1, 6]
}
df = pd.DataFrame(data)

"""
    代表値の計算
"""
# 平均値
mean = df['column'].mean()
# 中央値
median = df['column'].median()
# 最頻値
mode = df['column'].mode()  # 複数ある場合が存在するため、結果がSeriesとなる
# 分散
variance = df['column'].var()
# 標準偏差
std_dev = df['column'].std()
# 四分位数
quartiles = df['column'].quantile([0.25, 0.5, 0.75])
# パーセンタイル(90パーセンタイルの例)
percentile_90 = np.percentile(df['column'], 90)

# 結果の表示
print(f"平均: {mean}")
print(f"中央値: {median}")
print(f"最頻値: {mode}")
print(f"分散: {variance}")
print(f"標準偏差: {std_dev}")
print("四分位数:")
print(quartiles)
print(f"90パーセンタイル: {percentile_90}")

以下が実行結果です。

平均: 7.7
中央値: 6.0
最頻値: 0    6
Name: column, dtype: int64
分散: 31.34444444444445
標準偏差: 5.598610938835137
四分位数:
0.25    5.25
0.50    6.00
0.75    9.00
Name: column, dtype: float64
90パーセンタイル: 14.599999999999998