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 ─ 機械学習(分類・回帰・クラスタリング)、予測重視
用途マトリクス ─ どれを選ぶか
- 仮説検定をしたい(p値が欲しい) → scipy.stats
- 回帰の係数とその有意性が知りたい → statsmodels
- 予測精度を出したい → scikit-learn
- 前処理・集計・グルーピング → pandas
- 自前で数値計算を書きたい → numpy
1. scipy.stats ─ 検定と確率分布
scipy.stats は統計検定の問題を Python で再現するときの第一選択。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() でまとめて出力されます。学術論文・ビジネスレポートで使うならこちら。
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 の評価指標を重視し、クロスバリデーションやハイパーパラメータ調整が標準装備されています。
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 に投げるのがパフォーマンス上の常套手段。
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 は他のライブラリの基盤層。直接使う場面は『自前で数式を実装したい』『高速ベクトル演算が必要』といったシーンに限られますが、内部理解のために避けては通れません。
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}')目的別の選び分けフロー
→ scipy.stats + numpy が王道。t検定・カイ二乗検定・分布計算がすべて関数化されており、教科書の例題を1行で再現できます。
回帰問題は statsmodels で summary() を表示すると、係数・p値・決定係数すべてが教科書の表と同じフォーマットで出力されます。
→ pandas + statsmodels の組み合わせ。pandas で前処理してから statsmodels の OLS で要因分析、係数を経営陣に見せる。A/B テストの有意差判定 は scipy.stats.ttest_ind が簡単。
→ pandas + scikit-learn が最強の組み合わせ。pandas で特徴量エンジニアリング、scikit-learn でモデル構築・評価。XGBoost / LightGBM / CatBoost を併用すると競技レベル。
→ statsmodels(SARIMA・状態空間モデル) か prophet を使う。短期はSARIMA、長期トレンド+季節性なら prophet が手軽。深層学習に行くなら PyTorch + 時系列専用ライブラリへ。
学習順序の推奨
- numpy ─ 配列操作の基礎(2週間)
- pandas ─ DataFrame の操作(2週間)
- scipy.stats ─ 検定と分布(1週間)
- statsmodels ─ 回帰モデル(2週間)
- 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)
本気で AI エンジニアを目指すなら ─ 関連スクール
以下は当サイトと提携しているスクールの紹介です。リンク経由でのお申込で運営費を支援できます(読者の皆様の追加負担はありません)。
関連記事
- 2026-04-30実装Slack Bot を LLM で作る ─ FastAPI + OpenAI で社内ツール化Slack の Slash Command と Events API を使い、社内チャンネル内で動く LLM Bot を構築。FastAPI バックエンド + OpenAI で 1 日で完成。
- 2026-04-30実装FastAPI 入門 ─ ML モデルを 5 分で API にするPython の高速 Web フレームワーク FastAPI を使って、ML モデルを REST API として公開する最短ルート。型ヒント・自動ドキュメント・非同期対応の 3 拍子。
- 2026-04-30実装Docker 入門 ─ ML 環境の再現性を担保する「自分の PC では動く問題」を解決する Docker。ML プロジェクトの Dockerfile・GPU 対応・docker-compose・Multi-Stage Build までを実用視点で。