本文へスキップ
統計ロードマップ
2026-05-05·実装·⏱ 約 12

Pythonで学ぶ統計学 ─ ライブラリ別 早わかり比較 2026年版

Python統計分析の主要ライブラリ numpy / scipy.stats / statsmodels / pandas / scikit-learn を用途別に整理。検定・推定・回帰・分類でどれを選ぶべきか、実装例コード付きで2026年版の最新情報で解説。

Pythonで統計分析を始めようとすると、numpy・scipy・statsmodels・pandas・scikit-learn といった似たような名前のライブラリが並び、どれを使うべきか迷います。本記事では2026年現在で標準的に使われる5大ライブラリを 用途別に整理 し、検定・推定・回帰・分類のそれぞれでどれを選ぶべきか実装例とともに解説します。

5大ライブラリの役割

  • numpy ─ 数値配列(ndarray)と高速計算、すべての基盤
  • scipy.stats ─ 確率分布・統計的検定の関数群
  • statsmodels ─ 統計モデル(回帰・時系列)、結果の解釈 に強い
  • pandas ─ 表データ(DataFrame)の前処理・集計・可視化
  • scikit-learn ─ 機械学習(分類・回帰・クラスタリング)、予測重視

用途マトリクス ─ どれを選ぶか

  1. 仮説検定をしたい(p値が欲しい) → scipy.stats
  2. 回帰の係数とその有意性が知りたい → statsmodels
  3. 予測精度を出したい → scikit-learn
  4. 前処理・集計・グルーピング → pandas
  5. 自前で数値計算を書きたい → numpy

1. scipy.stats ─ 検定と確率分布

scipy.stats は統計検定の問題を Python で再現するときの第一選択。t検定・カイ二乗検定・正規性検定など主要な検定をワンライナーで実行できます。

scipy.stats: t検定とカイ二乗検定
import numpy as np
from scipy import stats

# 2標本のt検定(等分散仮定)
rng = np.random.default_rng(42)
group_a = rng.normal(70, 10, 30)
group_b = rng.normal(75, 10, 30)
t, p = stats.ttest_ind(group_a, group_b, equal_var=True)
print(f't = {t:.3f}, p = {p:.4f}')

# 適合度のカイ二乗検定
observed = np.array([18, 22, 20, 14, 16, 10])  # サイコロ目の度数
expected = np.array([16.67] * 6)               # 期待度数
chi2, p = stats.chisquare(observed, expected)
print(f'chi2 = {chi2:.3f}, p = {p:.4f}')

# 正規分布の確率密度・累積分布
from scipy.stats import norm
print(f'P(X < 1.96) = {norm.cdf(1.96):.4f}')
print(f'95%点 = {norm.ppf(0.975):.4f}')

scipy.stats が得意なこと

  • 1標本・2標本・対応ありのt検定
  • カイ二乗検定(適合度・独立性)
  • ノンパラ検定(マン・ホイットニー、ウィルコクソン)
  • 正規性検定(シャピロ・ウィルク、コルモゴロフ・スミルノフ)
  • 確率分布の pdf / cdf / ppf

2. statsmodels ─ 回帰と時系列の解釈

statsmodels は回帰モデルの 解釈 に強い。係数・標準誤差・t値・p値・信頼区間が summary() でまとめて出力されます。学術論文・ビジネスレポートで使うならこちら。

statsmodels: OLS重回帰
import numpy as np
import pandas as pd
import statsmodels.api as sm

rng = np.random.default_rng(0)
n = 200
df = pd.DataFrame({
    'x1': rng.normal(0, 1, n),
    'x2': rng.normal(0, 1, n),
})
df['y'] = 2.0 * df['x1'] - 1.5 * df['x2'] + rng.normal(0, 0.5, n)

# 切片を追加
X = sm.add_constant(df[['x1', 'x2']])
model = sm.OLS(df['y'], X).fit()
print(model.summary())

# AIC・BIC・決定係数
print(f'R^2 = {model.rsquared:.3f}')
print(f'AIC = {model.aic:.2f}')

statsmodels が得意なこと

  • OLS / GLM / ロジスティック回帰の 係数解釈
  • ARIMA / SARIMA など時系列モデル
  • 分散分析(ANOVA)、ANCOVA
  • 混合効果モデル(MixedLM)
  • 残差診断・多重共線性(VIF)・異常値検出

3. scikit-learn ─ 機械学習の予測重視

scikit-learn予測精度 を最大化するためのライブラリ。係数解釈より train/test の評価指標を重視し、クロスバリデーションやハイパーパラメータ調整が標準装備されています。

scikit-learn: ロジスティック回帰と分類
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report, roc_auc_score

X, y = load_breast_cancer(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42)

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression(max_iter=1000)),
])
pipe.fit(X_tr, y_tr)

y_pred = pipe.predict(X_te)
y_prob = pipe.predict_proba(X_te)[:, 1]
print(classification_report(y_te, y_pred))
print(f'AUC = {roc_auc_score(y_te, y_prob):.3f}')

# 5-fold CV
scores = cross_val_score(pipe, X, y, cv=5, scoring='accuracy')
print(f'CV mean = {scores.mean():.3f} +/- {scores.std():.3f}')

scikit-learn が得意なこと

  • 分類(ロジスティック・ランダムフォレスト・SVM・XGBoost連携)
  • 回帰(リッジ・ラッソ・ElasticNet・勾配ブースティング)
  • クラスタリング(K-means・DBSCAN・GMM)
  • 次元圧縮(PCA・t-SNE・UMAP連携)
  • 前処理(StandardScaler・OneHotEncoder)とパイプライン化

4. pandas ─ 表データの前処理王者

pandas は分析の 入口 です。データを読み込み・整形・集計するすべてを担当。最終的な数値計算は numpy / scipy / sklearn に投げるのがパフォーマンス上の常套手段。

pandas: 集計とグルーピング
import pandas as pd
import numpy as np

rng = np.random.default_rng(1)
df = pd.DataFrame({
    'group': rng.choice(['A', 'B', 'C'], 1000),
    'score': rng.normal(70, 15, 1000),
    'time': rng.exponential(30, 1000),
})

# グループ別の集計
summary = df.groupby('group').agg(
    n=('score', 'size'),
    mean=('score', 'mean'),
    std=('score', 'std'),
    median=('score', 'median'),
)
print(summary)

# クロス集計
df['score_cat'] = pd.cut(df['score'], bins=[-np.inf, 60, 80, np.inf], labels=['低', '中', '高'])
print(pd.crosstab(df['group'], df['score_cat']))

5. numpy ─ すべての基盤

numpy は他のライブラリの基盤層。直接使う場面は『自前で数式を実装したい』『高速ベクトル演算が必要』といったシーンに限られますが、内部理解のために避けては通れません。

numpy: 信頼区間を手で計算
import numpy as np
from scipy import stats

rng = np.random.default_rng(7)
data = rng.normal(50, 10, 100)

n = len(data)
mean = np.mean(data)
se = np.std(data, ddof=1) / np.sqrt(n)

# 95%信頼区間(t分布)
t_crit = stats.t.ppf(0.975, df=n - 1)
ci_low = mean - t_crit * se
ci_high = mean + t_crit * se
print(f'95% CI: [{ci_low:.2f}, {ci_high:.2f}]')

# numpy だけで標準誤差・分散
print(f'mean = {mean:.3f}, se = {se:.3f}')
print(f'sample variance (ddof=1) = {np.var(data, ddof=1):.3f}')

目的別の選び分けフロー

シーン1: 統計検定の問題を再現したい

scipy.stats + numpy が王道。t検定・カイ二乗検定・分布計算がすべて関数化されており、教科書の例題を1行で再現できます。

回帰問題は statsmodels で summary() を表示すると、係数・p値・決定係数すべてが教科書の表と同じフォーマットで出力されます。

シーン2: ビジネスでKPIを分析したい

pandas + statsmodels の組み合わせ。pandas で前処理してから statsmodels の OLS で要因分析、係数を経営陣に見せる。A/B テストの有意差判定 は scipy.stats.ttest_ind が簡単。

シーン3: Kaggle・実務で予測モデルを作りたい

pandas + scikit-learn が最強の組み合わせ。pandas で特徴量エンジニアリング、scikit-learn でモデル構築・評価。XGBoost / LightGBM / CatBoost を併用すると競技レベル。

シーン4: 時系列予測がしたい

statsmodels(SARIMA・状態空間モデル)prophet を使う。短期はSARIMA、長期トレンド+季節性なら prophet が手軽。深層学習に行くなら PyTorch + 時系列専用ライブラリへ。

学習順序の推奨

  1. numpy ─ 配列操作の基礎(2週間)
  2. pandas ─ DataFrame の操作(2週間)
  3. scipy.stats ─ 検定と分布(1週間)
  4. statsmodels ─ 回帰モデル(2週間)
  5. scikit-learn ─ 機械学習(1ヶ月以上)

よくある落とし穴

  • ddof問題: numpy.var はデフォルトで n で割る。scipy / pandas は n-1。検定時は要注意
  • statsmodels の add_constant 忘れ: 切片を追加しないと回帰係数が想定と違う
  • sklearn の y は1D推奨: 2D で渡すと警告、列ベクトルで渡しがち
  • pandas の SettingWithCopyWarning: 部分参照への代入で発生、loc で対処

まとめ

  • 目的が p値か係数か予測か で選ぶライブラリが決まる
  • scipy.stats=検定、statsmodels=回帰解釈、sklearn=ML予測
  • pandas+numpy は前処理基盤として全シーンで併用
  • 学習順序は numpy → pandas → scipy → statsmodels → sklearn
  • 統計検定の Python 実装は scipy.stats + statsmodels で7割カバー

関連リンク

  • [プログラミング学習ページ](/programming) ─ Pythonでの実装演習
  • [scipy.stats チートシート](/blog/scipy-stats-cheatsheet) ─ よく使う関数一覧
  • [統計検定2級 教科書](/textbook/grade-2) ─ 数学的背景の理解
  • [多重共線性 VIF 解説](/blog/multicollinearity-vif-explained)
  • [統計検定参考書まとめ](/blog/toukei-textbooks-by-level-2026)
Sponsored / Recommended

本気で AI エンジニアを目指すなら ─ 関連スクール

以下は当サイトと提携しているスクールの紹介です。リンク経由でのお申込で運営費を支援できます(読者の皆様の追加負担はありません)。

Related Articles

関連記事