【初心者向け】Pandas DataFrameでkurtosisを使ってデータ分布を分析しよう!
pandas.DataFrame.kurtosis
関数は、Pandas DataFrame の各列の「尖り具合」を表す統計量である kurtosis(尖度) を計算します。
尖度とは?
尖度は、データ分布の ピークの高さ と 裾の広がり を表す指標です。
- 尖度が低い データ分布は、平坦で、裾が薄く、ピークが低い状態です。これは、異常値 が少ないことを示唆します。
- 尖度が高い データ分布は、中央付近に集中し、裾が厚く、ピークが尖っています。これは、異常値 が存在する可能性が高いことを示唆します。
kurtosis の値
- 負の値: 平坦な分布(異常値の可能性が低い)
- 正の値: 尖った分布(異常値の可能性が高い)
- 0: 正規分布
用途
- 金融データ分析: 金融データは、異常値の影響を受けやすいので、kurtosis を用いて異常値を検出することが重要です。
- データ分布の比較: 異なるデータセットの kurtosis 値を比較することで、それぞれの分布の形状を比較することができます。
- 異常値の検出: 高い kurtosis 値を持つ列は、異常値が存在する可能性が高いので、詳細な調査が必要です。
基本的な使い方
import pandas as pd
# データフレームを作成
data = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
# 各列の尖度を計算
kurtosis = df.kurtosis()
print(kurtosis)
出力
col1 0.000000
col2 0.000000
dtype: float64
オプション
numeric_only
: True の場合、数値列のみを対象に計算します。False の場合、すべての列を対象に計算します。level
: MultiIndex データフレームの場合、計算対象のレベルを指定します。skipna
: True の場合、欠損値を無視して計算します。False の場合、欠損値を含むすべての値を使用して計算します。axis
: 尖度を計算する軸を指定します。デフォルトは0
(行方向)。1
を指定すると列方向に計算します。
例:欠損値を無視して計算
kurtosis = df.kurtosis(skipna=True)
print(kurtosis)
出力
col1 NaN
col2 0.000000
dtype: float64
例:列方向に計算
kurtosis = df.kurtosis(axis=1)
print(kurtosis)
0 0.000000
1 0.000000
dtype: float64
基本的な使い方
この例では、簡単なデータフレームを作成し、各列の尖度を計算します。
import pandas as pd
# データフレームを作成
data = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
# 各列の尖度を計算
kurtosis = df.kurtosis()
print(kurtosis)
出力
col1 0.000000
col2 0.000000
dtype: float64
欠損値を無視して計算
この例では、欠損値を含むデータフレームを作成し、欠損値を無視して各列の尖度を計算します。
import pandas as pd
# データフレームを作成
data = {'col1': [1, 2, 3, 4, None], 'col2': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
# 欠損値を無視して各列の尖度を計算
kurtosis = df.kurtosis(skipna=True)
print(kurtosis)
出力
col1 NaN
col2 0.000000
dtype: float64
列方向に計算
この例では、データフレームを作成し、列方向に尖度を計算します。
import pandas as pd
# データフレームを作成
data = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
# 列方向に尖度を計算
kurtosis = df.kurtosis(axis=1)
print(kurtosis)
出力
0 0.000000
1 0.000000
dtype: float64
MultiIndex データフレームの特定レベルで計算
この例では、MultiIndex データフレームを作成し、特定のレベルで尖度を計算します。
import pandas as pd
# データフレームを作成
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)],
names=('group', 'number'))
data = {'col1': [1, 2, 3, 4], 'col2': [5, 6, 7, 8]}
df = pd.DataFrame(data, index=index)
# 特定のレベルで尖度を計算
kurtosis = df.kurtosis(level='group')
print(kurtosis)
出力
group
A 0.000000
B 0.000000
dtype: float64
この例では、データフレームを作成し、数値列のみを対象に尖度を計算します。
import pandas as pd
# データフレームを作成
data = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10], 'col3': ['a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data)
# 数値列のみを対象に尖度を計算
kurtosis = df.kurtosis(numeric_only=True)
print(kurtosis)
col1 0.000000
col2 0.000000
dtype: float64
- Pandas には、データ分布
- 尖度以外にも、データ分布の形状を理解する指標として、偏度(skewness) や 分散(variance) などがあります。これらの指標と合わせて分析することで、より詳細なデータ分布の分析を行うことができます。
describe() 関数
describe()
関数は、データフレームの主要な統計量を要約した便利なツールです。kurtosis
値もこの要約に含まれています。
import pandas as pd
# データフレームを作成
data = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
# 主要な統計量を表示
print(df.describe())
出力
col1 col2
count 5.000000 5.000000
mean 3.000000 7.000000
std 1.581139 1.581139
min 1.000000 6.000000
25% 2.000000 6.500000
50% 3.000000 7.000000
75% 4.000000 7.500000
max 5.000000 10.000000
kurtosis 0.000000 0.000000
skew 0.000000 0.000000
Series.kurt() メソッド
kurtosis
値は、Series
オブジェクトに対しても計算できます。
import pandas as pd
# データフレームを作成
data = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
# 各列の尖度を計算
kurtosis = df['col1'].kurt()
print(kurtosis)
# または
kurtosis = df.col1.kurt()
print(kurtosis)
出力
0.000000
scipy.stats.kurtosis() 関数
SciPy ライブラリからも kurtosis
値を計算することができます。
import pandas as pd
from scipy.stats import kurtosis
# データフレームを作成
data = {'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
# 各列の尖度を計算
kurtosis = kurtosis(df['col1'])
print(kurtosis)
# または
kurtosis = kurtosis(df.col1)
print(kurtosis)
出力
0.0
これらの方法は、それぞれ異なる利点と欠点があります。
scipy.stats.kurtosis()
関数は、SciPy ライブラリがインストールされている必要があるという点で、他の方法よりも複雑です。ただし、より多くのオプションと柔軟性を提供します。Series.kurt()
メソッドは、個々の列のkurtosis
値を簡単に計算できます。ただし、複数の列の値を同時に比較することはできません。describe()
関数は、kurtosis
値を含め、データフレームの主要な統計量を簡単に確認できます。ただし、個々の列に焦点を当てることはできません。
状況に応じて、最適な方法を選択してください。
- 特定のデータ分析タスクに合わせて、最適なツールを選択することが重要です。
- 上記以外にも、
moments
ライブラリやstatsmodels
ライブラリなど、kurtosis
値を計算するためのライブラリや関数はいくつかあります。