mcpField
A
analyzing-twitter-sentiment-for-topic

analyzing-twitter-sentiment-for-topic

github.com/apidojo-ioデータ・データベース1849 回インストール24 週間前に更新
リポジトリ

analyzing-twitter-sentiment-for-topic について

話題に関するツイートを収集し、感情やテーマ、時間ごとの投稿量を分析するスキルです。Apifyを使った収集からレポート作成までの手順を示します。

主な機能

  1. 01検索クエリによるツイート収集
  2. 02ツイートごとの感情分類
  3. 03肯定・否定テーマの抽出
  4. 04エンゲージメントを加味した集計
  5. 05感情分析レポートの作成

活用シーン

  1. 01ブランドや話題への反応の追跡
  2. 02肯定・否定的な議論のテーマ比較
  3. 03期間を指定した感情の確認

MCP 対応

Apify MCPサーバーを使ってtweet-scraper Actorを実行できます。コマンドラインとREST APIによる方法も記載されています。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/apidojo-io/apidojo-skills --skill analyzing-twitter-sentiment-for-topic

インストール後、Claude Code で/analyzing-twitter-sentiment-for-topicを入力して読み込まれたか確認します。

詳細

トピックのTwitterセンチメント分析

任意のトピックやキーワードに関するツイートのサンプルを収集し、データセット全体のセンチメントを分析します。優勢な感情の傾向、ポジティブ/ネガティブなセンチメントの要因となる主なテーマ、時間の経過に伴う投稿数のパターンを特定します。

前提条件

  • APIFY_TOKEN 環境変数が設定されていること
  • 任意:Apify MCP サーバーがインストールされていること

入力

パラメーター型必須デフォルト備考
searchTerms配列✅[]Twitter の高度な検索クエリ(例:["#AI lang:en", "from:NASA"])
sort文字列任意Top並べ替え順:Latest、Top、Latest+Top
tweetLanguage文字列任意—ISO 639-1 言語コード(例:en)
maxItems数値任意無制限返すツイートの最大数
onlyVerifiedUsers真偽値任意false認証済みユーザーのツイートのみ
onlyTwitterBlue真偽値任意falseTwitter Blue の登録者のみ
onlyImage真偽値任意false画像付きのツイートのみ
onlyVideo真偽値任意false動画付きのツイートのみ
onlyQuote真偽値任意false引用ツイートのみ
author文字列任意—特定の投稿者ハンドルに絞り込む
inReplyTo文字列任意—特定のハンドルへの返信ツイート
mentioning文字列任意—特定のハンドルに言及するツイート
geotaggedNear文字列任意—特定の場所周辺のツイート
withinRadius文字列任意—geotaggedNear の周囲の半径
geocode文字列任意—緯度/経度+半径の文字列
placeObjectId文字列任意—場所がタグ付けされたツイート
minimumRetweets数値任意—リツイートの最小数
minimumFavorites数値任意—いいねの最小数
minimumReplies数値任意—返信の最小数
start文字列任意—この日付以降のツイート(YYYY-MM-DD)
end文字列任意—この日付以前のツイート(YYYY-MM-DD)
includeSearchTerms真偽値任意false各ツイートに一致した検索語を追加する
customMapFunction文字列任意—各出力オブジェクトを変換する JavaScript 関数

ワークフロー

Progress:
- [ ] Step 1: Define topic and sentiment scope
- [ ] Step 2: Collect tweets via search
- [ ] Step 3: Classify sentiment per tweet
- [ ] Step 4: Identify themes per sentiment bucket
- [ ] Step 5: Deliver sentiment report
ステップ 1:パラメーターの確認

ユーザーに次の情報を尋ねます:

  • 分析するトピック、キーワード、またはブランド
  • 日付範囲(デフォルト:過去7日間 — Twitter のセンチメントデータは急速に古くなります)
  • 言語(デフォルト:英語)
  • サンプルサイズ(デフォルト:500件のツイート — 信頼できる分布を得るのに十分です)
  • リツイートを除外しますか?(デフォルト:はい — 重複する意見のシグナルを減らします)
  • 比較対象のトピック(任意 — センチメントを並べて比較する場合)
ステップ 2:ツイートの収集

推奨 — run_actor.js(待機、出力、ファイル保存を自動で処理します):

# Quick answer (prints table to chat)
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}'

# Save as CSV
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.csv --format csv

# Save as JSON
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.json --format json

APIFY_TOKEN は環境変数または .env ファイルに設定する必要があります。

Apify MCP が利用可能な場合:

Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input:
{
  "searchTerms": ["[TOPIC_KEYWORD]"],
  "maxItems": 500,
  "tweetLanguage": "en",
  "since": "[YYYY-MM-DD]",
  "until": "[YYYY-MM-DD]"
}

REST API を使用する場合:

curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchTerms": ["[TOPIC_KEYWORD]"],
    "maxItems": 500,
    "tweetLanguage": "en",
    "since": "[YYYY-MM-DD]"
  }'
ステップ 3:センチメントの分類

各ツイートの text を対象に、語彙的なシグナルを使って Positive、Negative、Neutral に分類します。

ポジティブな指標: love、great、amazing、perfect、best、win、excited、congrats、excellent、recommend、beautiful、proud、happy、thank、awesome、incredible ネガティブな指標: hate、awful、worst、terrible、broken、scam、disappointed、angry、frustrated、disgusted、avoid、never again、shame、sad、fail、wrong、bad 強いネガティブ表現: "can't believe"、"what a joke"、"are you serious"、"wtf"、"this is ridiculous" デフォルトの中立判定: 上記以外

判断が難しい場合は、絵文字のシグナルを使います:

  • 😍🥰❤️🙌👏✨🔥 → ポジティブ寄り
  • 😡🤬😤💀🗑️🤢👎 → ネガティブ寄り
  • 🤔😐🤷 → 中立寄り

エンゲージメントに応じてツイートに重み付けします。いいねが1,000件のツイートは、いいねが0件のツイートよりも強いシグナルとなります。

ステップ 4:テーマの抽出

ネガティブなツイートの場合:繰り返し登場する名詞やテーマの上位 3~5 個を特定します。具体的に何に不満を感じているのでしょうか? ポジティブなツイートの場合:繰り返し登場する称賛のテーマの上位 3~5 個を特定します。

繰り返し登場する人名、場所、製品などの固有名詞や、具体的なイベント、機能名を探します。

ステップ 5:レポートの形式

出力形式

# Twitter Sentiment Analysis: "[TOPIC]"
Period: [DATE_RANGE] | Tweets analyzed: [N] | Date: [DATE]

## Overall Sentiment

████████████░░░░░░░░ ポジティブ:[X%]([N] 件のツイート) ████░░░░░░░░░░░░░░░░ ネガティブ:[X%]([N] 件のツイート) ██████████░░░░░░░░░░ 中立:[X%]([N] 件のツイート)


Weighted by engagement:
- Positive sentiment accounts for [X%] of total likes/RTs
- Negative sentiment accounts for [X%] of total likes/RTs

**Overall verdict:** [Mostly Positive / Mixed / Mostly Negative / Polarized]

## Top Negative Themes
1. "[Theme]" — [N] tweets, [N] total likes
   Example: "@[handle]: [tweet excerpt]"
2. "[Theme]" — [N] tweets
3. "[Theme]" — [N] tweets

## Top Positive Themes
1. "[Theme]" — [N] tweets, [N] total likes
   Example: "@[handle]: [tweet excerpt]"
2. "[Theme]" — [N] tweets

## Most Engaged Tweets
🔴 Most-liked negative: @[handle] ([N] likes): "[excerpt]"
🟢 Most-liked positive: @[handle] ([N] likes): "[excerpt]"

## Volume Over Time
[Day 1]: [N] tweets | [Day 2]: [N] tweets | [Day 3]: [N] tweets

## Notable Spikes
[Date with highest volume] — [N] tweets | Likely cause: [describe if detectable from tweet context]

トラブルシューティング

**感情分析が不正確に感じられる:**語彙分析では皮肉を見落とします。重大な判断を行う場合は、各分類の上位 20 件のツイートを手動で確認してください。 **トピックの範囲が広すぎる:**検索語を絞り込みます。「Apple」ではテクノロジーと食品が検索されるため、代わりに「Apple iPhone」を使用してください。 **ツイート数が非常に少ない:**現在、Twitter でそのトピックがあまり話題になっていない可能性があります。日付範囲を広げてください。

コメント