SECTION 19

実践: 感情分析ダッシュボード

顧客の声を数値化 — AIで感情をリアルタイム可視化

calendar_today2026年4月 LCREATOR.Inc Google AI 研修プログラム

SECTION 19 — 感情分析ダッシュボード

感情分析とは何か

CONCEPT

感情分析(Sentiment Analysis)

テキストデータから書き手の感情・意見・態度を自動判定する自然言語処理技術。顧客レビュー、SNS投稿、アンケート回答などを大規模に処理できる。

1

テキスト入力

レビュー・コメント・フィードバックなど自然言語テキスト

2

AI解析

Gemini APIが文脈・ニュアンス・感情語を総合的に判断

3

スコア出力

感情スコア(1〜5)・ラベル・要因キーワードを返す

感情分析ダッシュボード完成イメージ

判定カテゴリ

sentiment_very_satisfied

ポジティブ

スコア 4〜5 / 満足・称賛・推薦

sentiment_neutral

ニュートラル

スコア 3 / 事実的・どちらでもない

sentiment_very_dissatisfied

ネガティブ

スコア 1〜2 / 不満・苦情・警告

SECTION 19 — 感情分析ダッシュボード

ビジネスでの活用シーン

USE CASE
rate_review

顧客レビュー分析

ECサイト・アプリストアのレビューを一括分析。製品改善の優先度を自動判定。

商品改善 満足度追跡
forum

SNS監視・ブランド管理

TwitterやInstagramの言及をリアルタイム監視。炎上リスクを早期に検知。

ブランド保護 炎上対策
people

従業員満足度調査

社内アンケートの自由記述を自動分類。離職リスクの高い部門を定量的に把握。

HR分析 離職予防
lightbulb 共通の価値: 人手では数日かかる数千件のテキスト分析が、GASとGemini APIの組み合わせで数分で完了します。

SECTION 19 — 感情分析ダッシュボード

システム全体構成

ARCHITECTURE
input データ収集 フォーム/API
arrow_forward
psychology Gemini API分析 GAS経由
arrow_forward
table_chart スプレッドシート 結果格納
arrow_forward
dashboard Looker Studio 可視化
arrow_forward
notifications_active アラート配信 Slack/メール

使用するGoogleサービス

  • Googleフォーム / スプレッドシート
  • Google Apps Script(GAS)
  • Gemini API(Vertex AI経由)
  • Looker Studio

コスト見積もり

  • スプレッドシート・フォーム: 無料
  • Looker Studio: 無料
  • Gemini API: 月1万件で約500円程度
  • GAS: 無料(実行時間制限あり)

SECTION 19 — 感情分析ダッシュボード

データ収集方法の設計

DATA

スプレッドシートのデータ構造

列名 内容
timestamp入力日時datetime
source収集元(フォーム/API)string
categoryカテゴリ(商品/サポート等)string
review_text元のレビューテキストtext
score感情スコア(分析後)number
label感情ラベル(分析後)string
dynamic_form

Googleフォーム経由

顧客満足度調査・お問い合わせフォームの回答をスプレッドシートに自動格納。フォーム送信トリガーで即時分析も可能。

api

API経由での取得

外部サービス(ECプラットフォーム等)のAPIからGASでレビューを定期取得。URLFetchApp.fetchを使用。

warning 注意: 個人情報を含むテキストは送信前に氏名・連絡先を匿名化すること。

SECTION 19

AI感情分析の実装

Gemini APIとGASで大量テキストを一括処理する

SECTION 19 — AI感情分析の実装

Gemini APIプロンプト設計

PROMPT

JSON形式で構造化された結果を返すプロンプトを設計します。スコア・ラベル・要因を一度に取得するのがポイントです。

GAS / Prompt const prompt = ` 以下のレビューテキストを感情分析してください。 レビュー: "${reviewText}" 必ず以下のJSON形式のみで回答してください: { "score": 感情スコア(1=非常に否定的〜5=非常に肯定的の整数), "label": "ポジティブ" or "ニュートラル" or "ネガティブ", "factors": ["要因キーワード1", "要因キーワード2"], "summary": "30文字以内の要約" } `;

設計のポイント(青: 基本概念)

  • JSON形式を明示指定 → パース処理が安定
  • スコアを1〜5の整数に限定 → 集計が容易
  • factors配列で根拠を取得 → 改善アクションに直結

出力例(緑: 推奨パターン)

{
 "score": 4,
 "label": "ポジティブ",
 "factors": ["迅速な対応", "丁寧"],
 "summary": "対応スピードに満足"
}

SECTION 19 — AI感情分析の実装

GASでバッチ処理を実装する

GAS
GAS function analyzeSentimentBatch() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('レビュー'); const data = sheet.getDataRange().getValues(); for (let i = 1; i < data.length; i++) { // 未分析行のみ処理(E列が空欄) if (data[i][4] !== '') continue; const text = data[i][3]; // D列: レビューテキスト const result = callGeminiAPI(text); if (result) { sheet.getRange(i + 1, 5).setValue(result.score); sheet.getRange(i + 1, 6).setValue(result.label); sheet.getRange(i + 1, 7).setValue(result.factors.join(', ')); sheet.getRange(i + 1, 8).setValue(new Date()); } Utilities.sleep(500); // レート制限対策 } }
check_circle
未分析行のみ処理する設計
再実行しても二重分析が起きません。中断しても安全に再開できます。
schedule
GAS実行時間制限(6分)
1回で処理できる件数は約500〜700件。大量データはタイムアウト前に保存する仕組みが必要。
error
APIエラーのハンドリング(赤: リスク)
try/catchでエラー行をスキップし、ログに記録。処理を止めないことが重要。

SECTION 19 — AI感情分析の実装

結果のスプレッドシート格納設計

STORAGE

分析結果を適切な列構成でスプレッドシートに格納することで、Looker Studioでの集計・可視化が容易になります。

項目名 内容 Looker Studioでの用途
Atimestamp受付日時時系列グラフの軸
Bsource収集元フィルタ・ディメンション
Ccategoryカテゴリドリルダウン用ディメンション
Dreview_text元テキスト詳細表示用
Escore感情スコア(1〜5)KPI・平均値算出
Flabelポジ/ニュートラル/ネガ円グラフ・フィルタ
Gfactors要因キーワードキーワード頻度分析
Hanalyzed_at分析実行日時処理状況の確認
info ヒント: スプレッドシートは「マスターシート(生データ)」と「分析済みシート(結果のみ)」に分けると、Looker Studioの接続が安定します。

SECTION 19

ダッシュボード構築

Looker Studioで感情データを視覚的に表現する

SECTION 19 — ダッシュボード構築

Looker Studioとの接続設定

SETUP
1

Looker Studioを開く

lookerstudio.google.comにアクセスし、「レポートを作成」をクリック

2

データソースを追加

「Googleスプレッドシート」コネクタを選択し、分析済みシートを指定

3

フィールドの設定

score列を「数値」、label列を「テキスト」、timestamp列を「日付」に設定

4

計算フィールド追加

「平均感情スコア」「ポジ率」などをカスタム計算式で作成

重要な計算フィールド例

-- ポジティブ率(%) COUNTIF(label, "ポジティブ") / COUNT(label) * 100 -- 週次平均スコア AVG(score)
sync データ更新頻度はデフォルト15分。リアルタイム性が必要な場合は「毎時更新」に変更してください。

SECTION 19 — ダッシュボード構築

KPIスコアカードの設計

KPI

ダッシュボードの上部に主要KPIをスコアカードとして並べることで、一目で状況を把握できます。

3.8
平均感情スコア
前月比 +0.2
68%
ポジティブ率
前月比 +5%
12%
ネガティブ率
前月比 -3%
1,240
今月の分析件数
累計 8,420件

スコアカードの設定

指標: AVG(score)
比較期間: 前の期間
条件付き書式で色分け

ポジ率の設定

計算フィールドを使用
COUNTIF / COUNT * 100
緑色で表示(推奨)

補足ヒント

スコアカードは最大6個まで
最重要指標に絞ること
数値のフォーマット設定も忘れずに

SECTION 19 — ダッシュボード構築

効果的なチャート設計

CHART
show_chart

時系列折れ線グラフ

ディメンション: 日付(週単位)
指標: 平均スコア、ポジ率

トレンド変化を一目で確認

donut_large

感情分布ドーナツグラフ

ディメンション: label
指標: COUNT(label)

■ ポジ 68%
■ ニュートラル 20%
■ ネガ 12%

全体バランスを把握

table_rows

ランキング表(要因)

ディメンション: factors
指標: COUNT件数

配送速度234件
梱包品質187件
サポート対応142件

改善優先度の特定に活用

SECTION 19 — ダッシュボード構築

フィルタ・ドリルダウンの設計

FILTER

インタラクティブなフィルタコントロールを配置することで、分析担当者が自在にデータを絞り込めるダッシュボードになります。

1

期間フィルタ(日付範囲コントロール)

ダッシュボード全体に適用。デフォルトを「過去30日間」に設定する

2

カテゴリフィルタ(プルダウン)

「商品」「サポート」「配送」などのカテゴリで絞り込み。複数選択可能に設定

3

感情ラベルフィルタ(チェックボックス)

ネガティブのみ表示して集中分析するなど、対応優先度の高い案件に絞れる

4

スコア範囲スライダー

スコア1〜2のみを表示して低評価レビューを集中的に確認・対応

Looker Studio フィルタ付きダッシュボード

推奨フィルタ配置(緑: 推奨)

フィルタはレポートの最上部に横並びで配置。ユーザーが最初に目にする場所に置くことで操作性が向上します。

注意点(赤: リスク)

フィルタを多くしすぎると表示が遅くなります。重要な3〜5個に絞り込みましょう。全ページ共通フィルタにはページレベルではなくレポートレベルで設定すること。

SECTION 19

アラート機能

ネガティブ急増を即座に検知・通知する仕組みを構築する

SECTION 19 — アラート機能

ネガティブ急増時の自動通知

ALERT
GAS function checkNegativeAlert() { const sheet = SpreadsheetApp .getActiveSpreadsheet() .getSheetByName('分析済み'); // 直近1時間のデータを取得 const oneHourAgo = new Date( Date.now() - 3600000 ); const recentData = getRecentRows( sheet, oneHourAgo ); // ネガティブ率を計算 const negCount = recentData.filter( r => r[5] === 'ネガティブ' ).length; const negRate = negCount / recentData.length; // 閾値超過でSlack通知 if (negRate > 0.3) { sendSlackAlert( `ネガティブ率急増: ${Math.round(negRate*100)}%` ); } }
notifications_active

アラート条件の設定例

  • 直近1時間のネガティブ率 > 30%
  • スコア1のレビューが10件以上
  • 特定キーワード(「返金」「故障」等)が急増
  • 日次平均スコアが前日比0.5以上低下
send

通知先の設定

  • GmailApp.sendEmail() でメール通知
  • Slack Webhook URL で即時チャット通知
  • 時間駆動トリガーで15分ごとに監視実行

SECTION 19 — アラート機能

週次レポートの自動PDF配信

REPORT

Looker Studioのレポートを週次でPDF化し、関係者に自動配信します。GASの時間駆動トリガーと組み合わせます。

GAS function sendWeeklyReport() { // Looker Studio共有URLをPDF変換 const reportUrl = 'https://lookerstudio.google.com/...'; const pdfUrl = reportUrl + '&format=pdf'; const blob = UrlFetchApp .fetch(pdfUrl).getBlob() .setName('週次感情分析レポート.pdf'); GmailApp.sendEmail( 'manager@example.com', '【週次】感情分析レポート', '週次レポートをお送りします。', { attachments: [blob] } ); }

トリガー設定

1

GASエディタ → 時計アイコン → トリガーを追加

2

「時間ベースのトリガー」→「週タイマー」→「月曜日」「午前8〜9時」を選択

3

実行する関数に sendWeeklyReport を指定して保存

warning 注意(赤: リスク): Looker StudioのPDFエクスポートは認証が必要な場合があります。サービスアカウントでの認証設定を確認してください。

SECTION 19

ハンズオン

実際に手を動かして感情分析ダッシュボードを構築しよう

SECTION 19 — ハンズオン

ハンズオン 1: サンプルレビューを感情分析する

HANDS-ON 1

サンプルデータ(スプレッドシートに貼り付け)

category review_text
商品品質が良く大満足です。また購入します!
配送届くのに2週間かかりました。遅すぎます。
サポート問い合わせへの返答が丁寧でよかった。
商品説明通りの商品でした。普通です。
1

スプレッドシートを作成

新規スプレッドシートを作成し、「レビュー」シートにサンプルデータを入力

2

GASスクリプトを貼り付け

拡張機能 → Apps Script を開き、配布コードを貼り付けてAPIキーを設定

3

関数を実行

analyzeSentimentBatch を実行。E〜H列に分析結果が入力されることを確認

GAS感情分析実行画面
check_circle
期待される結果
1行目: score=5, label=ポジティブ
2行目: score=1, label=ネガティブ
3行目: score=4, label=ポジティブ
4行目: score=3, label=ニュートラル
help
うまくいかない場合
・APIキーの設定を確認(スクリプトプロパティ)
・Gemini APIの有効化を確認(GCPコンソール)
・実行ログ(表示 → ログ)でエラー内容を確認

SECTION 19 — ハンズオン

ハンズオン 2: Looker Studioでダッシュボード作成

HANDS-ON 2
1

Looker Studioにアクセス

lookerstudio.google.com → 「レポートを作成」 → Googleスプレッドシートを選択

2

計算フィールドを追加

「リソース」→「データソースを管理」→フィールドを追加 → ポジ率を計算式で作成

3

スコアカードを4つ配置

グラフを追加 → スコアカード → 平均スコア/ポジ率/ネガ率/件数を設定

4

グラフを追加(折れ線・円)

時系列折れ線グラフと感情分布ドーナツグラフをレイアウトに配置

5

フィルタコントロール設定

日付範囲コントロールとカテゴリプルダウンをヘッダー部分に配置

完成時のチェックリスト

  • スコアカードが4つ表示される
  • 折れ線グラフで時系列が確認できる
  • ドーナツグラフで感情分布が見える
  • 日付フィルタで期間絞り込みができる
  • カテゴリフィルタで種別絞り込みができる
lightbulb ヒント(黄: 補足): レポートのタイトルバーに「感情分析ダッシュボード」と入力し、テーマカラーをGoogleブルーに設定するとより見やすくなります。

SECTION 19 — ハンズオン

ハンズオン 3: アラート通知を設定する

HANDS-ON 3
1

checkNegativeAlert 関数を追加

GASスクリプトに配布コードを追加。ALERT_THRESHOLD(閾値)を自分で設定

2

メール通知をテスト

閾値を0(常にアラート)に設定し、手動実行してメールが届くことを確認

3

時間駆動トリガーを設定

トリガー追加 → 時間ベース → 「毎時」→ checkNegativeAlert を実行

4

閾値を適切な値に変更

0.3(30%)など実際の運用に合わせた閾値に戻して設定完了

error
トリガー設定の注意(赤: リスク)
トリガーは設定後も有効なまま残ります。テスト後は不要なトリガーを必ず削除してください。複数設定すると同じメールが重複送信されます。
check_circle
発展課題
Slack Webhook URLを取得して、GmailではなくSlackチャンネルへの通知も試してみましょう。UrlFetchApp.fetch() にWebhookへのPOSTリクエストを送る実装です。
schedule
GASのトリガー確認方法
左メニュー「トリガー(時計アイコン)」から現在設定中のトリガー一覧を確認できます。

SECTION 19 — 感情分析ダッシュボード

このセクションのまとめ

SUMMARY

感情分析 × Looker Studio の組み合わせで、顧客の声をリアルタイムに数値化・可視化するダッシュボードが構築できます。

1

データ収集

Googleフォームやスプレッドシートでレビューを収集・蓄積する

2

AI分析(GAS + Gemini API)

GASのバッチ処理で大量テキストをスコア・ラベル・要因に変換

3

可視化(Looker Studio)

KPIスコアカード・時系列グラフ・感情分布でダッシュボード化

4

アラート自動化

ネガティブ急増を自動検知して即時通知・週次レポート配信

習得したスキル

psychology

Gemini APIプロンプト設計

構造化JSON出力を安定して得るプロンプトパターン

code

GASバッチ処理

未処理行のみ分析する効率的なループ設計

dashboard

Looker Studioダッシュボード

KPI・グラフ・フィルタの効果的な配置

SECTION 19 完了

感情分析ダッシュボードの構築スキルを習得しました

arrow_forward 次のセクション: SECTION 19「自動レポート配信システム」
ハンズオン
3
スライド数
23
使用ツール
GAS/Gemini
🏠 研修ポータル ▶ この章の動画 📺 動画一覧