原始内容
easyStat - ブラウザで完結する統計分析アプリ
完全なクライアントサイド実行・インストール不要・高速動作
概要
easyStatは、モダンなブラウザだけで動作する統計分析Webアプリケーションです。 サーバーへのデータ送信は一切行わず、すべての計算とグラフ描画をユーザーのデバイス内で完結させます。そのため、機密性の高いデータも安全に扱うことができます。
従来のPyScript版から完全なJavaScript実装に移行したことで、以下のメリットが生まれました:
- 🚀 高速な起動: Python環境のロード待ち時間がゼロに
- 📱 オフライン動作: 一度読み込めばネット環境がなくても動作
- 🔒 高セキュリティ: データはブラウザから出ません
実装済み機能(全14機能)
📊 データ処理
- データ読み込み: Excel (.xlsx, .xls) および CSV (Shift-JIS/UTF-8自動判定)
- データクレンジング: 欠損値処理、外れ値除去、データ型変換
- 探索的データ分析 (EDA): 要約統計量、ヒストグラム、箱ひげ図、散布図
📈 統計解析
- 相関分析: ピアソンの積率相関係数、相関行列、散布図行列
- t検定: 対応なし(独立)/ 対応あり(関連)、効果量 (Cohen's d)
- 一要因分散分析 (One-way ANOVA): 3群以上の平均値比較、多重比較
- 二要因分散分析 (Two-way ANOVA): 2要因の主効果と交互作用
🔮 多変量解析・予測
- 単回帰分析: 最小二乗法による単回帰モデル
- 重回帰分析: 偏回帰係数、モデル適合度 ($R^2$, 調整済み$R^2$)
- 主成分分析 (PCA): 次元削減、寄与率、バイプロット
- 因子分析: 因子負荷量、スクリープロット(主因子法・バリマックス回転近似)
- カイ二乗検定: クロス集計表、独立性の検定 ($χ^2$)
📝 テキスト分析
- テキストマイニング: 日本語分かち書き (
TinySegmenter)、TF-IDF、ワードクラウド、共起ネットワーク - 記述統計・可視化: 基本的なデータの要約とグラフ化
使い方
- アクセス: ブラウザでページを開きます(インストール不要)。
- 機能選択: ホーム画面から行いたい分析機能カードをクリックします。
- データアップロード: ExcelまたはCSVファイルをドラッグ&ドロップします。
- 変数選択: 分析に使用する変数(列)を選択し「分析実行」をクリックします。
- 結果確認: 結果の表とインタラクティブなグラフが表示されます。
- 保存: 加工済みデータやグラフ画像をダウンロードできます。
技術スタック
本アプリケーションは、外部APIやバックエンドサーバーに依存しないPure JavaScript (SPA) で構築されています。
- Core: Vanilla JavaScript (ES6+)
- UI/CSS: Custom CSS, Font Awesome
- Computation:
jStat: 統計検定 (t-test, ANOVA, chi-square, etc.)math.js: 行列演算、高度な数学計算
- Visualization:
Plotly.js: インタラクティブなグラフ描画wordcloud2.js: ワードクラウド生成
- Data Handling:
SheetJS (xlsx): Excel/CSVファイルの読み書き
- NLP:
TinySegmenter: ブラウザ内日本語分かち書き
統計処理ロジックの検証
本プロジェクトの全ての統計処理ロジックは、統計学・データサイエンス・エンジニアリングの3つの専門的視点から包括的に検証されています。
検証済み項目
| カテゴリ | 手法 | 検証状態 |
|---|---|---|
| 相関分析 | Pearson r, Spearman ρ, Fisher z変換CI, p値 | 検証済み |
| t検定 | Welch t, Welch-Satterthwaite df, 対応ありt, 1標本t | 検証済み |
| 分散分析 | SS計算, F比, η², ω², GG epsilon, 多重比較 (Tukey/Holm/Bonferroni) | 検証済み |
| 回帰分析 | OLS推定, R², 調整済みR², F検定, VIF, 切片の統計量 | 検証済み |
| カイ二乗検定 | χ², Cramér's V, 調整済み残差, Yates補正 | 検証済み |
| Mann-Whitney U | U統計量, タイ補正, Z正規近似, 効果量r | 検証済み |
| PCA | 相関行列の固有値分解, PC得点, 累積寄与率 | 検証済み |
| 因子分析 | 主成分抽出, Varimax/Promax/Oblimin/Geomin回転 | 検証済み |
| EDA | 記述統計, 歪度(Fisher調整), 尖度(過剰尖度) | 検証済み |
2026-02-19 統計ロジック修正
以下の問題を特定し修正しました(TDDにて実施):
- EDA標準偏差: 母集団SD(n除算) → 標本SD(n-1除算)に修正
- GG epsilon: Greenhouse-Geisser epsilonの分子を正しい
trace(S̃)²に修正 - Levene検定: 平均値ベース → 中央値ベース(Brown-Forsythe変法)に変更
- 対応ありt検定: 効果量ラベルを
d→d_zに修正(教育的明確化) - Mann-Whitney U: Z値を絶対値で報告するよう修正
- 単回帰分析: 切片のSE/t値/p値を追加
- 1標本t検定: p<0.1の傾向有意水準(†)を他の検定と統一
- カイ二乗検定: Yates補正に関するドキュメント不整合を修正
2026-02-19 表記・表示修正
以下の問題を特定し修正しました(TDDにて実施):
- 時系列分析:
createPlotlyConfig()の誤ったプロパティアクセス(.layout/.config)を修正 - 有意記号統一: 全モジュール(単回帰・重回帰・カイ二乗・相関)の有意記号チェインを
** / * / † / n.s.に統一 - 相関APA表: 傾向有意(† p<.10)をAPA表データセルと注釈に追加
- 因子分析回転ラベル: varimax/none のみ → promax/oblimin/geomin にも対応
- PCA用語: 「因子負荷量」→「主成分負荷量」に修正(PCA固有の用語を使用)
- Mann-Whitney表ヘッダ: 「Z値」→「|Z|」に修正(絶対値表記の統一)
- 単回帰: 負の切片表示を
+ -1.234→- 1.234に改善
2026-02-19 t検定/ANOVA表修正
以下の問題を特定し修正しました(TDDにて実施):
- [CRITICAL] 二要因ANOVA: Error行のp値スタイルにnullガードを追加(
null < 0.05がtrueになる問題) - p値 < .001表示: 対応ありt検定・1標本t検定・一要因ANOVA・二要因ANOVAの全表にて
< .001表示に統一 - t統計量絶対値: 対応ありt検定・1標本t検定のメインテーブル/APA表で
|t|を報告 - HTML凡例エスケープ: 一要因ANOVAの有意記号凡例で
<→<に修正 - 二要因ANOVA混合パス: truthinessチェック →
!== null明示チェックに修正 - 有意記号凡例: 二要因ANOVA混合/反復パスに欠落していた凡例を追加
- 日本語テキスト: 「球面性仮定下的な結果」→「球面性仮定下の結果」に修正
2026-02-19 ユーティリティ・横断的整合性修正
以下の問題を特定し修正しました(TDDにて実施):
- [CRITICAL] createPairSelector: DOM append呼び出しの重複を除去(コピペエラー)
- evaluatePValue:
***(p<.001)を**(p<.01)に統一(プロジェクト規約準拠) - 相関可視化: 散布図行列の有意記号を
*** / ** / *→** / * / †に統一 - interpretCorrelation: 弱い相関の日本語ラベルを述語形「ほとんど相関がない」→形容詞形「非常に弱い」に修正
2026-02-23 ユーザビリティ・機能整理とTDD検証
以下の改善を実施しました(TDDにて検証):
- トップページ: 初学者向けに分析機能のパネル説明文や表現を平易な言葉・アイコン付きに修正
- 分析サポーター: 新規手法(フィッシャーの正確確率検定、マクネマー検定、ロジスティック回帰分析等)のサジェストを追加。複合条件での排他処理を排除し、網羅的な推奨ロジックへ刷新
- UI統一:
MultiSelectコンポーネントを標準のセレクターへ移行。各種結果表示の順序を「要約統計量 → 本結果 → 事後検定」に統一し、表形式も一貫性のあるAPAスタイル互換な表示に統合 - ユーティリティ・デッドコード整理:
data_processing.js内の冗長な「データ結合」タブを廃止し専用機能へ集約、古いテストスクリプトやCSS等の残骸をすべてクリーンアップ
開発者向け情報
プロジェクト構成
easy_stat_edu/
├── js/
│ ├── analyses/ # 統計分析モジュール(16エントリ + サブモジュール)
│ │ ├── anova_one_way.js # 一要因分散分析(LIVE)
│ │ ├── anova_two_way.js # 二要因分散分析(LIVE)
│ │ ├── correlation.js # 相関分析
│ │ ├── ttest.js # t検定
│ │ ├── chi_square.js # カイ二乗検定
│ │ ├── mann_whitney.js # Mann-Whitney U検定
│ │ ├── regression_simple.js # 単回帰分析
│ │ ├── regression_multiple.js # 重回帰分析
│ │ ├── pca.js # 主成分分析
│ │ ├── factor_analysis.js # 因子分析
│ │ ├── eda.js # 探索的データ分析
│ │ ├── time_series.js # 時系列分析
│ │ ├── text_mining.js # テキストマイニング
│ │ └── */ # 各モジュールのヘルパー・可視化サブモジュール
│ ├── utils.js # 共通ユーティリティ(Levene検定、APA表生成等)
│ └── utils/stat_distributions.js # 統計分布(Tukey, Holm補正, Gamma関数)
├── tests/
│ ├── unit/ # ユニットテスト(統計ロジック検証)
│ ├── verification/ # 精度検証テスト
│ └── *.spec.ts # E2E / スモークテスト
└── css/ # スタイルシート
アーキテクチャノート
- モジュールロード:
main.jsがindex.htmlのdata-analysis属性に基づいて動的にモジュールをインポート - ANOVA: モノリシックファイル(
anova_one_way.js,anova_two_way.js)がLIVEコード。サブフォルダ版はデッドコード - 統計ライブラリ: jStat (CDN), math.js (CDN) をグローバルスコープで使用
テストの実行
# 全テスト実行
npx playwright test
# 統計ロジック検証テスト
npx playwright test tests/unit/statistical_logic_validation.spec.ts
# 精度検証テスト
npx playwright test tests/verification/
# テストレポート表示
npx playwright show-report
GitHub Pagesへのデプロイ
- リポジトリの
Settings->Pagesを開く。 - Sourceを
Deploy from a branchに設定。 - Branchを
main(またはmaster) の/ (root)または/docsに設定してSave。
ライセンス
© 2022-2026 Dit-Lab.(Daiki Ito). All Rights Reserved. easyStat: Open Source for Ubiquitous Statistics Democratizing data, everywhere.