# easyStat

easyStatは、授業・校内研究・初学者のデータ分析を支援するブラウザベースの統計分析アプリです。Excel/CSV、表形式の直接入力、テキスト直接入力に対応し、統計計算と通常の可視化はブラウザ内で実行します。

## 現行仕様

- 分析・データ処理モジュール: 23機能
- 入力: Excel (`.xlsx`, `.xls`)、CSV、Excelから貼り付け可能な表形式入力
- テキスト入力: 表の列選択に加え、自由記述をテキストボックスへ直接入力可能
- 出力: 結果表、解釈補助、APAスタイル風報告表、Plotlyグラフ、画像・CSV保存
- 初学者支援: 全23機能の「この分析を簡単に説明すると」に加え、分析実行後は「今回の結果を簡単に説明すると」を表示。結果の要点、画面に出た指標の意味と見方、読み違えやすい点を高校生向けの言葉で確認可能
- 図表編集: タイトル、軸ラベル、凡例、数値・日付軸の最小値／最大値、幅、高さ、プリセットまたは任意入力の縦横比を図ごとまたは一括で調整
- 比較図: 生の観測値を利用できるt検定、一要因・二要因ANOVA、EDAの平均値棒グラフは、棒グラフと箱ひげ図を切替可能
- 配信: 静的ファイルだけで動作し、GitHub Pagesに対応

## データと外部通信

統計計算、データ加工、テキストマイニング、図表生成のために、読み込んだデータをeasyStat独自の分析サーバーへ送信することはありません。

「今回の結果を簡単に説明すると」は、画面内の結果を短く整理して表示します。この説明を開くだけで外部通信が発生することはありません。

ただし、次の外部通信があります。

- 初回表示では、Plotly、SheetJS、jStat、math.js、MathJaxなどのライブラリをCDNから取得します。ネットワークやキャッシュの状態により、完全なオフライン動作は保証されません。
- 任意のGemini解釈補助を実行すると、分析対象列の要約統計量、分析手法、結果表、妥当性チェックがGoogle Gemini APIへ送信されます。原データ行と自由記述例は初期設定では送信しません。
- 「機微情報候補を自動マスクした原データ先頭10件を含める」を有効にした場合だけ、氏名・ID等の候補列とメールアドレス・電話番号・URL等を自動マスクしたプレビューを追加します。この設定は分析を切り替えるとオフに戻ります。自動判定は完全ではないため、「送信内容を確認」で必ず確認してください。
- Gemini APIキーは初期設定では「一時保存」となり、タブを閉じると削除します。「APIキーをブラウザに保存する（次回も使う）」を選んだ場合だけ`localStorage`に保存され、同じブラウザで次回開いたときも利用できます。静的Webアプリではキーを完全に秘匿できないため、Gemini API専用の制限付きキーを使用してください。
- AI解釈は分析手法別の確認順序に従い、主要結果、効果量・信頼区間、前提条件、言える範囲、次の確認を点検します。有意でない理由を標本数だけで断定せず、追加データを「有意にするため」に勧めないよう制約しています。
- AIの説明レベルは「高校生向け（やさしく）」「標準」「研究・論文向け（詳しく）」から選択でき、高校生向けでも正式な統計量を残したまま用語と見る順番を補足します。
- 初回の根拠付き解釈は精度重視、追加質問は応答速度とトークン量を考慮した軽量設定です。回答欄にはAPIトークンの入力・回答・推論・合計を表示します。

機密データを扱う場合は、外部AI送信を有効にせず、ブラウザ・端末・CDN利用方針を所属組織の規定に照らして確認してください。AI生成文の数値・p値・効果量は、必ずeasyStatの結果表と照合してください。

## 23機能

| 分野 | 機能 |
|---|---|
| 案内・前処理 | 分析サポーター、データ加工・整形、データ結合、因子得点算出 |
| 記述・関係把握 | 探索的データ分析（EDA）、クロス集計、相関分析 |
| 平均・順位の比較 | t検定、一要因分散分析、二要因分散分析、マン・ホイットニーのU検定、クラスカル・ウォリス検定、ウィルコクソンの符号付順位検定 |
| カテゴリ分析 | マクネマー検定、カイ二乗検定、フィッシャーの正確確率検定 |
| 回帰 | 単回帰分析、重回帰分析、ロジスティック回帰分析 |
| 多変量・時系列 | 因子分析、主成分分析（PCA）、時系列データ分析 |
| テキスト | テキストマイニング |

詳細は[FEATURES.md](FEATURES.md)とアプリ内の[操作マニュアル](manual.html)を参照してください。

## テキストマイニング

- ブラウザ内の軽量な日本語分割処理
- 出現頻度、文書頻度、TF-IDF
- 品詞別ランキングと品詞色分け
- 頻度・TF-IDFワードクラウド
- KWIC（前後文脈）
- 文単位Jaccard係数による共起ネットワーク
- カテゴリごとの連続表示と、群間の特徴語比較
- ワードクラウド・共起ネットワークの画像保存

軽量処理はGitHub Pagesでの応答性を優先した実装です。KH Coderと目的が重なる機能はありますが、同一の形態素解析器・辞書・統計モデルではないため、結果が完全に一致するものではありません。

## 結果の読み方

- `p < .05`は、帰無仮説のもとで観測結果以上が得られる確率に基づく判断です。非有意は「差がない」「独立である」ことの証明ではありません。
- 統計的有意性だけでなく、効果量、信頼区間、標本数、欠損、前提条件を確認してください。
- 相関や回帰係数だけから因果関係を断定できません。
- 自動生成される解釈文とAIの回答は補助情報です。研究計画、測定方法、データ品質を含めて利用者が最終判断してください。

## 開発

```bash
npm install
npx http-server . -p 8081
npx playwright test
```

主要構成:

```text
index.html                  アプリ画面と外部ライブラリ読込
js/main.js                  データ入力、モジュール切替、任意AI補助
js/utils.js                 共通UI、図表編集、集計、解釈、報告表
js/analyses/*.js            実行される分析モジュール
js/analyses/*/helpers.js    分析別計算補助
tests/unit/                 ロジック・共通契約テスト
tests/verification/         既知解との精度検証
tests/*.spec.ts             E2E・操作・表示・保存テスト
```

`anova_one_way.js`と`anova_two_way.js`は直下のファイルが実行対象です。同名サブフォルダ内の旧分割版は実行されません。

不具合は[GitHub Issues](https://github.com/dai-ki-iro/easy_stat_edu/issues)へ報告してください。

© 2022-2026 Dit-Lab. (Daiki Ito)
