Pandas 記述統計
記述統計は、データの基本的な特徴を要約し記述するために使用されます。Pandas は豊富な統計関数を提供しており、データの全体的な分布状況を迅速に取得できます。
基本統計関数
例
import pandas as pd
import numpy as np
# サンプルデータを作成
df = pd.DataFrame({
"年齢": [25, 30, 28, 35, 22, 40, 38, 45, 29, 31],
"給与": [12000, 15000, 11000, 18000, 9000, 20000, 17000, 22000, 12500, 14000],
"業績": [85, 92, 78, 88, 65, 95, 82, 90, 75, 89]
})
print("=== データ概要 ===")
print(f"データ形状: {df.shape}")
print(f"\n基本統計:")
print(df.describe())
import numpy as np
# サンプルデータを作成
df = pd.DataFrame({
"年齢": [25, 30, 28, 35, 22, 40, 38, 45, 29, 31],
"給与": [12000, 15000, 11000, 18000, 9000, 20000, 17000, 22000, 12500, 14000],
"業績": [85, 92, 78, 88, 65, 95, 82, 90, 75, 89]
})
print("=== データ概要 ===")
print(f"データ形状: {df.shape}")
print(f"\n基本統計:")
print(df.describe())
よく使う統計量
| 関数 | 説明 | 例 |
|---|---|---|
count() |
非欠損値の数 | df["年龄"].count() |
sum() |
合計 | df["薪资"].sum() |
mean() |
平均値 | df["年龄"].mean() |
median() |
中央値 | df["年龄"].median() |
std() |
標準偏差 | df["绩效"].std() |
var() |
分散 | df["绩效"].var() |
min() / max() |
最小/最大値 | df["年龄"].min() |
quantile() |
分位数 | df["薪资"].quantile(0.25) |
分位数の計算
例
import pandas as pd
import numpy as np
s = pd.Series(range(1, 101)) # 1から100
print("各種分位数:")
print(f"0% (最小): {s.quantile(0)}")
print(f"25%: {s.quantile(0.25)}")
print(f"50% (中央値): {s.quantile(0.50)}")
print(f"75%: {s.quantile(0.75)}")
print(f"100% (最大): {s.quantile(1)}")
print()
# 複数の分位数を同時に計算する
print("一括分位数:")
print(s.quantile([0.1, 0.2, 0.5, 0.8, 0.9]))
import numpy as np
s = pd.Series(range(1, 101)) # 1から100
print("各種分位数:")
print(f"0% (最小): {s.quantile(0)}")
print(f"25%: {s.quantile(0.25)}")
print(f"50% (中央値): {s.quantile(0.50)}")
print(f"75%: {s.quantile(0.75)}")
print(f"100% (最大): {s.quantile(1)}")
print()
# 複数の分位数を同時に計算する
print("一括分位数:")
print(s.quantile([0.1, 0.2, 0.5, 0.8, 0.9]))
describe による要約
describe()データセット内の数値列の総合的な統計要約を提供します。
例
import pandas as pd
df = pd.DataFrame({
"年齢": [25, 30, 28, 35],
"給与": [12000, 15000, 11000, 18000],
"都市": ["北京", "上海", "広州", "深圳"]
})
print("数値列の統計:")
print(df.describe())
print()
print("すべての列を含む:")
print(df.describe(include="all"))
df = pd.DataFrame({
"年齢": [25, 30, 28, 35],
"給与": [12000, 15000, 11000, 18000],
"都市": ["北京", "上海", "広州", "深圳"]
})
print("数値列の統計:")
print(df.describe())
print()
print("すべての列を含む:")
print(df.describe(include="all"))
相関係数と共分散
例
import pandas as pd
import numpy as np
df = pd.DataFrame({
"年齢": [25, 30, 28, 35, 22],
"給与": [12000, 15000, 11000, 18000, 9000],
"業績": [85, 92, 78, 88, 65]
})
print("相関係数行列:")
print(df.corr())
print()
# 特定の列との相関
print("給与との相関:")
print(df.corr()["給与"])
import numpy as np
df = pd.DataFrame({
"年齢": [25, 30, 28, 35, 22],
"給与": [12000, 15000, 11000, 18000, 9000],
"業績": [85, 92, 78, 88, 65]
})
print("相関係数行列:")
print(df.corr())
print()
# 特定の列との相関
print("給与との相関:")
print(df.corr()["給与"])
相関係数の範囲は -1 から 1 で、1 に近いほど正の相関、-1 に近いほど負の相関、0 に近いほど無相関を示します。
高度な統計
例
import pandas as pd
import numpy as np
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 歪度(分布の歪みの程度を測る)
print(f"歪度: {s.skew()}")
# 尖度(分布の尖り度合いを測る)
print(f"尖度: {s.kurtosis()}")
print()
# 累積統計
s = pd.Series([1, 2, 3, 4, 5])
print("累積和:")
print(s.cumsum())
print()
print("累積最大値:")
print(s.cummax())
import numpy as np
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 歪度(分布の歪みの程度を測る)
print(f"歪度: {s.skew()}")
# 尖度(分布の尖り度合いを測る)
print(f"尖度: {s.kurtosis()}")
print()
# 累積統計
s = pd.Series([1, 2, 3, 4, 5])
print("累積和:")
print(s.cumsum())
print()
print("累積最大値:")
print(s.cummax())