Cursorを用いたX(旧Twitter)投稿分析
こんにちは。ZENKIGENデータサイエンスチームの川﨑です。所属チームでXアカウントを運用しており、AIに関する情報を発信していますのでご興味あれば覗いてみてください。
概要
今回は、CursorなどのコーディングAIを活用したデータ分析の事例として、チームで運用しているXアカウントの投稿データを分析した結果を紹介します。
分析は以下の3つの異なる条件でCursorに指示を与え、その結果と考察を比較しました。
- 単純な指示: データを与え「分析してください」とだけ指示。
- 方向性の指示: 分析の方向性(伸びる記事、文言、ジャンル)を指示。
- 詳細設計の指示とstepに分けた分析: 分析設計を明示的に提示し、stepごとに分析。
この記事を通じて、Cursorへの指示の仕方による結果の違い、そして活用する上でのメリット・デメリットや注意点について簡単に考察します。
背景
近年、Cursor、Cline等のコーディングAIの発展が著しく、様々な業務での活用が進んでいます。データサイエンスチームとしても、業務でのこれらツールの活用方法を模索しています。しかし、具体的な分析タスクへの適用事例は少ないのが現状です。そこで今回は、チームで運用しているXアカウントの投稿内容を元に、Cursorを用いた分析を行ってみました。
なお、Cursorの使い方や様々な機能については、既に多くの素晴らしい記事があるため、参考リンクを以下に記載します。
分析の目的
再掲となりますが、現在DSチームではXアカウントを運用しています。Zennでの記事執筆も含めて継続的に投稿を行っているのですが、アカウントとしては発展途上です。
日々の投稿は日常で知った情報から投稿することが多いのですが、どういった投稿がよりエンゲージメントを獲得できるのか、どういった投稿がより広まるのかといったことに対して分析したことはない状態です。
ということで、これまでの投稿データを分析することで、エンゲージメントを高める投稿の特徴を明らかにし、アカウント運用に役立てることを目指します。
データ概要
本分析では、以下のようなデータを使用しています。
- データソース: Xアカウント@zenkigen_aiの投稿データ
- 取得方法: X API(Twitter API v2)を使用
- サンプル数: 98件(2024年10月2日から2025年3月17日の間の投稿)
収集項目
- 投稿内容(テキスト)
- 投稿日時
- エンゲージメント指標(インプレッション数、いいね数、リツイート数、ブックマーク数)[1]
- 投稿に含まれるメディア情報(画像、URL等)
- 投稿に含まれるURL
など
分析の流れ
今回の分析では、Cursorに指示を与えながら分析を進めることでどの程度結果が変わるか確認したいため、以下の3条件で分析を行いました。
- 単純な指示: データを与え「分析してください」とだけ指示。
- 方向性の指示: 分析の方向性(伸びる記事、文言、ジャンル)を指示。
- 詳細設計の指示とstepに分けた分析: 分析設計を明示的に提示し、stepごとに分析。
結果
1. 単純な指示: データを与え「分析してください」とだけ指示
最初の条件では、データファイル (zenkigen_ai_tweets_all.csv
) を渡し、「このデータを分析してください」という単純な指示のみを与えました。
指示内容:
@zenkigen_ai_tweets_all.csv
このデータを分析してください。
途中でライブラリのインストールやエラー対応などのやり取りは発生しましたが、基本的にはCursorのAgent機能に任せました。
主な発見と考察 (条件1)
Cursorが生成したレポートからは、以下のような基本的な統計量や傾向が把握できました。
- 投稿頻度: 約2日に1回。金曜日と木曜日、特に朝7時台[2]の投稿が多い。
- エンゲージメント: 平均いいね数7.6、平均リツイート数0.9など、基本的な指標が算出された。
-
コンテンツ特性:
- 平均文字数は約149字。
- 98%のツイートがURLを含む。
- 最頻出キーワードは「ZENKIGENテックブログ更新」。
- リンク先ドメインは
arxiv.org
(論文) が最多(37.5%)、次いでzenn.dev
(技術ブログ)。
-
提言:
- 投稿時間の分散: 7時台に集中している投稿時間を他の時間帯にも広げる提案。
- コンテンツミックス: 研究論文紹介を維持しつつ、技術ブログやユーザー参加型コンテンツの比率を高める提案。
考察:
単純な指示でも、データの基本的な傾向(投稿時間、頻度、主要なコンテンツタイプなど)を掴むことはできました。特に、リンク先ドメインを自動で分類し、論文リンクが多いことやそのエンゲージメントが高い傾向にあることを指摘してくれた点は有用でした。
しかし、「ユーザー参加型の投稿を増やす」や「コンテンツミックス改善」といった提言の根拠となる分析がレポート内では不明確でした。例えば、「なぜユーザー参加型が良いのか?」や「なぜ技術ブログの比率を上げるべきなのか?」に対する具体的なデータ分析は見受けられませんでした。
Cursor生成レポート詳細 (条件1)
ZENKIGENのTwitterデータ分析レポート
概要
このレポートは、ZENKIGEN(@zenkigen_ai)のTwitterアカウントのツイートデータを分析した結果をまとめたものです。分析対象期間は2024年10月2日から2025年3月17日までの165日間で、合計98件のツイートを対象としています。
主な発見
1. 投稿パターン
- 投稿頻度: 平均して1日あたり0.59ツイート(約2日に1回の頻度)
- 曜日別投稿数: 金曜日が最も多く(28ツイート)、次いで木曜日(19ツイート)
- 時間帯別投稿数: 7時台が圧倒的に多く(47ツイート、全体の48%)
- 月別投稿数: 2024年10月が最も多く(29ツイート)、次いで2024年12月(22ツイート)
2. エンゲージメント傾向
-
平均エンゲージメント指標:
- リツイート: 平均0.9回(最大13回)
- いいね: 平均7.64回(最大83回)
- ブックマーク: 平均0.94回(最大55回)
- インプレッション: 平均544.55回(最大6801回)
-
エンゲージメント率の推移:
- 2025年3月が最も高い(4.12%)
- 直近の推移: 2024年12月(2.64%)→ 2025年1月(2.78%)→ 2025年2月(1.88%)→ 2025年3月(4.12%)
-
高エンゲージメント投稿:
最もエンゲージメントが高かった投稿(合計153):Googleからユーザーが自然言語で対話しながらキャラクターを育てていくシミュレーションゲームUnboundedの発表。これまでハードコードされた世界での有限ゲームだったものが、生成AIにより永続...
3. コンテンツ特性
-
ツイート長: 平均148.6文字(最小65文字、最大204文字)
-
URL含有率: 98.0%のツイートがURLを含む
-
ハッシュタグ: 最も使用されたのは「#生成AI」(4回)
-
頻出キーワード:
- ZENKIGENテックブログ更新(11回)
- データサイエンスチーム(7回)
- AI(6回)
- Generative / 情報共有会 / note更新(各5回)
-
リンク先ドメイン:
- arxiv.org(33回、37.5%): 研究論文
- zenn.dev(14回、14.6%): 技術ブログ
- x.com(9回、12.5%): ソーシャルメディア
-
リンクカテゴリ分布:
- 研究論文: 37.5%
- 技術ブログ: 14.6%
- ソーシャルメディア: 12.5%
-
リサーチ関連投稿: 研究論文リンクを含むツイートの平均エンゲージメント率(3.29%)は他のツイートより高い傾向
分析と提言
強み
- 専門性の高いコンテンツ: 研究論文(arxiv.org)への参照が多く、AIに関する専門的な情報を提供している
- 技術ブログの定期更新: 「ZENKIGENテックブログ更新」が最頻出キーワードとなっており、継続的な情報発信をしている
- 研究論文リンクの高いエンゲージメント: 専門性の高いコンテンツがフォロワーに評価されている
改善機会
-
投稿頻度と時間の最適化:
- 平均して2日に1回程度の投稿頻度
- 7時に集中している投稿時間を分散させることで、異なる時間帯のオーディエンスにリーチできる可能性
-
エンゲージメント向上:
- 高エンゲージメントを獲得したゲーム関連やテックブログ更新などのコンテンツをさらに強化
- ユーザー参加型の投稿(質問、アンケートなど)を増やす
- ビジュアルコンテンツ(画像、図表)の積極的活用
-
コンテンツ戦略:
- 専門的内容と一般向け解説のバランスを調整
- 論文紹介と実用的技術情報の両方を提供
- トレンドキーワード(「AI」「生成AI」など)を効果的に活用
アクションプラン
-
投稿スケジュール最適化:
- 金曜日の強みを活かしつつ、火曜日や水曜日にも定期投稿を設定
- 7時以外の時間帯(10時、15時など)にも投稿を試験的に実施
-
コンテンツミックス改善:
- 研究論文紹介: 40%(現状維持)
- 技術ブログ: 25%(+10%)
- ユーザー参加型コンテンツ: 15%(新規)
- AIニュース/トレンド解説: 20%(現状維持)
-
エンゲージメント向上施策:
- 週1回のユーザー参加型投稿の導入
- ビジュアル要素(グラフ、図解など)の積極活用
- フォロワー増加のための他アカウントとの相互交流強化
結論
ZENKIGENのTwitterアカウントは、AI関連の研究論文や技術情報を中心とした専門性の高いコンテンツを提供しており、特に研究論文関連の投稿でエンゲージメントを獲得しています。投稿パターンやコンテンツ戦略に若干の最適化を加えることで、さらなるエンゲージメント向上とフォロワー増加が期待できます。
専門的な内容を維持しながらも、より多様なコンテンツフォーマットと投稿時間を試すことで、アカウントの成長を加速させることができるでしょう。
2. 方向性の指示: 分析の方向性(伸びる記事、文言、ジャンル)を指示
次の条件では、単に「分析して」ではなく、より具体的な分析の方向性を指示しました。
指示内容:
@zenkigen_ai_tweets_all.csv
以下に記載した観点で、メンションのcsvファイルを分析してください。
- 伸びやすい記事の特徴
- ニュース等の外部紹介(中でカテゴリーに詳細化)
- サービス紹介、論文紹介、ニュース、等
- Zennの記事
- 記事は、記事自体の伸び等も考慮
- イベント参加、イベント告知等の宣伝系ツイート
- 投稿の文言
- 投稿の書き方
- 投稿内容のジャンル(分け方は一例であり、データを確認したうえでより適切なジャンルを考えてください)
- コミュニケーション系
- 生成AI
- 機械学習系
- HCI系
主な発見と考察 (条件2)
指示に沿って、より具体的な分析が行われました。
-
カテゴリ別エンゲージメント:
- イベント関連が最も高いエンゲージメント率を示したが、サンプル数が少ない(2件)。
- テックブログはインプレッション数が最も高いが、エンゲージメント率は低い傾向。
-
論文紹介は投稿数が最多だが、エンゲージメント率は中程度。
(表データは詳細レポート参照)
-
Zenn記事の効果:
- Zenn記事を含むツイートは、含まないツイートと比較して平均インプレッション数が約2.4倍高い。
- いいね数やリツイート数も高いが、インプレッション数の伸びに比べてエンゲージメント率はやや低い。
-
ジャンル別パフォーマンス:
- 機械学習関連が高いエンゲージメント率。
- データサイエンス関連は件数が少ない(3件)ものの、各指標が突出して高い。
-
文言の特徴:
- 50-150文字程度の比較的短いツイートの方がエンゲージメント率が高い傾向。
- ハッシュタグなしの方がエンゲージメント率が高いという結果(サンプル偏りの可能性あり)。
- 質問文の有無は大きな影響なし。
考察:
分析の方向性を指示したことで、条件1よりも踏み込んだ分析結果が得られました。特に、コンテンツタイプ(イベント、Zenn記事、論文など)やジャンル(機械学習、データサイエンスなど)ごとの違いに踏み込んだ分析となったため、具体的なアクションに近づいてきたと感じます(例: イベント投稿の強化、データサイエンス関連コンテンツの拡充)。
一方で、いくつかの課題も感じられました。
- ジャンルの分類方法: 実装ではキーワードベースでの分類をしていたのですが、内容を考慮していないため不適切な分類の可能性がありそうです。
- 平均値中心の分析: エンゲージメントのような右裾が重い(一部の投稿が非常に高い値を持つ)データでは、平均値は外れ値の影響を受けやすいです。中央値や分布も考慮する必要があると感じました。
- エンゲージメント率 vs 絶対数: エンゲージメント率だけでなく、インプレッション数やいいね数などの絶対数も重要です。Zenn記事のように、リーチは広い(インプレッション大)が率は低い、というケースもあり、目的に応じて評価指標を使い分ける必要があります。
- カテゴリ内の深掘り不足: 例えば「論文紹介」が伸びやすい傾向があっても、「どのような論文紹介が特に伸びるのか?」といったカテゴリ内部の詳細な分析までは行われていませんでした。
Cursor生成レポート詳細 (条件2)
Zenkigen AI ツイート分析レポート
1. 分析概要
このレポートは、Zenkigen AIのTwitterアカウントが投稿したツイートのデータ分析結果をまとめたものです。分析では特に、「伸びやすい記事の特徴」「投稿の文言」「投稿内容のジャンル」に焦点を当てています。
分析対象データ:
- ファイル:
zenkigen_ai_tweets_all.csv
- ツイート総数: 98件
2. 伸びやすい記事の特徴
2.1 カテゴリ別の平均エンゲージメント
エンゲージメント率(いいね数+リツイート数+返信数+引用数+ブックマーク数)÷インプレッション数で分析した結果、以下のカテゴリが高いエンゲージメント率を示しています:
カテゴリ | エンゲージメント率 | 平均いいね数 | 平均リツイート数 | 平均インプレッション数 | 件数 |
---|---|---|---|---|---|
イベント | 0.0435 | 12.50 | 6.00 | 492.50 | 2 |
ニュース | 0.0351 | 6.00 | 0.00 | 171.00 | 1 |
その他 | 0.0314 | 5.61 | 0.06 | 202.11 | 18 |
論文紹介 | 0.0270 | 7.91 | 0.89 | 513.40 | 45 |
サービス紹介 | 0.0212 | 7.11 | 1.00 | 673.32 | 19 |
テックブログ | 0.0209 | 9.69 | 1.23 | 975.08 | 13 |
特筆すべき点:
- イベント関連のツイートが最も高いエンゲージメント率を示している(0.0435)
- 論文紹介が最も多いカテゴリとなっている(45件)が、エンゲージメント率は中程度
- テックブログは平均インプレッション数が最も高い(975.08)が、エンゲージメント率は最も低い
2.2 Zenn記事のパフォーマンス
Zenn記事を含むツイートとそれ以外を比較した結果:
Zenn記事 | エンゲージメント率 | 平均いいね数 | 平均リツイート数 | 平均インプレッション数 | 件数 |
---|---|---|---|---|---|
なし | 0.0272 | 7.13 | 0.75 | 452.87 | 84 |
あり | 0.0208 | 10.71 | 1.79 | 1094.64 | 14 |
特筆すべき点:
- Zenn記事を含むツイートは平均インプレッション数が約2.4倍高い
- いいね数やリツイート数も高いが、インプレッション数の増加率の方が大きいため、全体のエンゲージメント率では低くなっている
- Zenn記事はより広いリーチを持つが、割合としてのエンゲージメントは若干低い傾向
2.3 ジャンル別のパフォーマンス
内容のジャンル別に分析した結果:
ジャンル | エンゲージメント率 | 平均いいね数 | 平均リツイート数 | 平均インプレッション数 | 件数 |
---|---|---|---|---|---|
機械学習 | 0.0312 | 6.74 | 0.42 | 380.00 | 19 |
コミュニケーションAI | 0.0278 | 8.83 | 0.77 | 608.43 | 30 |
データサイエンス | 0.0268 | 14.67 | 5.33 | 1099.67 | 3 |
その他 | 0.0241 | 6.71 | 0.87 | 579.35 | 31 |
生成AI | 0.0215 | 6.93 | 0.93 | 442.27 | 15 |
特筆すべき点:
- 機械学習関連のツイートが最も高いエンゲージメント率を示している
- データサイエンスは件数は少ないが、いいね数・リツイート数・インプレッション数が突出して高い
- コミュニケーションAIは比較的多くのツイート(30件)があり、高いエンゲージメント率を維持
2.4 ハイパフォーマンスツイートの特徴
上位25%のエンゲージメント率またはインプレッション数を持つツイートを分析した結果:
- ハイパフォーマンスツイート数: 49件(全体の50.0%)
- カテゴリ分布:
- 論文紹介: 46.9%
- サービス紹介: 18.4%
- テックブログ: 16.3%
- その他: 12.2%
- イベント: 4.1%
- ニュース: 2.0%
特筆すべき点:
- ハイパフォーマンスツイートでも論文紹介が最も高い割合を占めている
- テックブログはハイパフォーマンスツイートにおいて通常より高い割合を示している(16.3% vs 10.2%)
- イベントとニュースは件数が少ないながらも、そのすべてがハイパフォーマンスツイートに含まれている
3. 投稿の文言の特徴
3.1 文字数とエンゲージメント
ツイートの文字数とエンゲージメント率の関係:
文字数 | エンゲージメント率 | 件数 |
---|---|---|
50-100文字 | 0.0306 | 4 |
100-150文字 | 0.0278 | 37 |
150-200文字 | 0.0254 | 56 |
200-250文字 | 0.0053 | 1 |
特筆すべき点:
- **短めのツイート(50-100文字)**が最も高いエンゲージメント率を示している
- 最も多いのは150-200文字のツイートだが、エンゲージメント率は短いツイートより低い
- 200文字を超えるとエンゲージメント率が大幅に低下(ただしサンプル数が少ないため参考値)
3.2 ハイパフォーマンスツイートの頻出単語
ハイパフォーマンスツイートで頻出する特徴的な単語:
- 「ZENKIGENテックブログ更新」(10回)
- 「データサイエンスチーム」(5回)
- 「AI」(4回)
- 「Generative」(3回)
- 「情報共有会」(3回)
- 「note更新」(3回)
3.3 ツイートの特徴とエンゲージメント
ツイートの文体的特徴とエンゲージメントの関係:
特徴 | エンゲージメント率 | 件数 |
---|---|---|
ハッシュタグあり | 0.0167 | 10 |
ハッシュタグなし | 0.0274 | 88 |
質問文あり | 0.0249 | 11 |
質問文なし | 0.0265 | 87 |
絵文字あり | 0.0263 | 98 |
特筆すべき点:
- ハッシュタグなしのツイートの方が高いエンゲージメント率を示している
- ほぼすべてのツイートで絵文字が使用されている
- 質問文の有無はエンゲージメント率に大きな影響を与えていない
4. 総合分析と推奨事項
4.1 伸びやすいコンテンツの特徴
-
イベント関連の投稿
- 最もエンゲージメント率が高く、フォロワーの関心を引いている
- 件数が少ないため、より積極的に投稿を増やすべき領域
-
論文紹介
- 最も多い投稿カテゴリであり、ハイパフォーマンスツイートでも高い割合を占める
- フォロワーが技術的内容に関心が高いことを示している
-
データサイエンス関連の内容
- 平均いいね数・リツイート数が非常に高く、注目度の高い分野
- 件数が少ないため、より多くのデータサイエンス関連のコンテンツを提供する余地がある
4.2 効果的な投稿戦略
-
Zenn記事の活用
- Zenn記事を含むツイートは平均インプレッション数が約2.4倍と高い
- エンゲージメント率は若干低いが、より広いリーチが期待できる
-
適切な文字数
- 50-150文字程度の簡潔なツイートがより高いエンゲージメント率を示している
- 長すぎるツイートはエンゲージメント率が下がる傾向
-
ハッシュタグの使用を控える
- ハッシュタグを含まないツイートの方がエンゲージメント率が高い
- Zenkigenのフォロワーはハッシュタグでの検索よりも、フィードでの発見を好む可能性
4.3 ジャンル別の戦略
-
機械学習・コミュニケーションAI
- 特に高いエンゲージメント率を示しており、コア領域として継続的な情報発信が有効
- 具体的な応用例や最新の研究動向の紹介が効果的
-
データサイエンス
- 少ない投稿ながら高いパフォーマンスを示しており、拡充の余地が大きい
- 実践的なデータ分析手法や事例紹介などのコンテンツが期待される
-
生成AI
- エンゲージメント率は比較的低いものの、AI領域の重要なトピック
- より専門的または実用的な情報を提供することでエンゲージメント向上の余地がある
5. 結論
Zenkigen AIのTwitterアカウントは技術的な内容、特に論文紹介や機械学習に関する投稿が多く、フォロワーからの高い関心を集めています。イベント関連の投稿は特に高いエンゲージメント率を示しており、この領域での発信を増やすことが効果的である可能性があります。また、Zenn記事を活用した情報発信はリーチを大幅に拡大する効果が見られます。
文言の観点では、150文字以内の簡潔な投稿が好まれる傾向があり、ハッシュタグよりも内容そのものの質が重要であることが示唆されています。今後は、データサイエンスやイベント関連の投稿を増やしつつ、簡潔で質の高いコンテンツを提供することで、さらなるエンゲージメントの向上が期待できるでしょう。
3. 詳細設計の指示とstepに分けた分析: 分析設計を明示的に提示し、stepごとに分析
最後の条件ではより詳細な分析を行うために、具体的な分析ステップ、手法、評価方法などを記述した「分析設計」 をCursorで対話しながらMarkdown形式で作成し、それをさらにいくつかのstepに分割して、stepごとに分析させました。
最終的な分析設計
Zenkigen AI ツイート分析設計
1. 分析概要
Zenkigen AIのツイートデータ(@zenkigen_ai_tweets_all.csv)を多角的に分析し、効果的なSNS戦略のための知見を得ることを目的とします。特に「伸びやすいツイートの特徴」「効果的な投稿文言」「人気のあるコンテンツジャンル」に焦点を当て、定量的・定性的分析を行います。
2. データ前処理
2.1 データ確認とクリーニング
- CSV形式の確認とデータロード
- 欠損値の特定と処理
- 重複データの削除
- データ型の適切な変換(日時型など)
2.2 特徴量エンジニアリング
- エンゲージメント指標の作成(いいね数+RT数+リプライ数など)
- テキスト関連特徴(文字数、URL有無、ハッシュタグ数など)
- 時間関連特徴(投稿曜日、時間帯など)
- Zenn記事関連特徴(URLからZenn記事の識別)
3. 分析手法
3.1 伸びやすい記事の特徴分析
3.1.1 外部紹介ツイートの分類と分析
-
実装方法:
- 正規表現やURLドメイン分析によるカテゴリ分類
- 以下のカテゴリを識別:
- サービス紹介(製品・ツール紹介)
- 論文紹介(arXiv、学会論文など)
- ニュース記事(メディア掲載)
- その他外部リンク
- 各カテゴリのエンゲージメント比較(平均・中央値・分布)
3.1.2 Zenn記事の分析
-
実装方法:
- Zenn URLを含むツイートの抽出
- Zenn記事のいいね数取得(可能であれば)または推定
- 記事タイプ(技術解説、チュートリアル、ニュースなど)の分類
- エンゲージメント数との相関分析
3.1.3 イベント関連ツイートの分析
-
実装方法:
- キーワード(イベント、セミナー、ウェビナー、登壇など)に基づく抽出
- イベント告知とイベント参加報告の区別
- エンゲージメント数の比較
3.2 投稿文言の分析
3.2.1 テキスト特徴量分析
-
実装方法:
- 文字数と単語数の分析
- 疑問形vs宣言形の比較
- 絵文字使用の効果分析
- 特定の表現パターン(「〜しました」「〜できます」など)の効果
3.2.2 感情分析
-
実装方法:
- テキスト感情分析(ポジティブ・ネガティブ・ニュートラル)
- 感情スコアとエンゲージメントの相関
3.2.3 呼びかけ表現分析
-
実装方法:
- 直接的な質問や呼びかけを含むツイートの抽出
- CTAの有無とエンゲージメントの関係
3.3 投稿内容のジャンル分類と分析
3.3.1 ジャンル分類手法
-
実装方法:
- テキストベースのクラスタリング(K-means、トピックモデリング)
- キーワードベースの分類(以下のカテゴリを想定):
- 生成AI(テキスト生成、画像生成、音声生成など)
- 機械学習(アルゴリズム、データ分析、ディープラーニングなど)
- HCI(UI/UX、インタラクションなど)
- コミュニケーション系(チャットボット、対話システムなど)
- ツール・ライブラリ紹介
- 業界動向・ニュース
- 手動ラベリングとモデル学習の組み合わせ
3.3.2 ジャンル別エンゲージメント分析
-
実装方法:
- ジャンル別の平均エンゲージメント比較
- 時系列での人気ジャンルの変化
- 各ジャンルでの投稿文言の効果分析
4. 可視化手法
4.1 エンゲージメント分析可視化
- 各カテゴリのエンゲージメント平均値・中央値の棒グラフ
- エンゲージメント分布の箱ひげ図
- 時系列でのエンゲージメント推移
4.2 テキスト分析可視化
- ワードクラウド(全体、高エンゲージメント群、低エンゲージメント群)
- テキスト特徴量とエンゲージメントの散布図
- 重要単語・フレーズの抽出と重要度可視化
4.3 ジャンル分析可視化
- ジャンル分布の円グラフ・棒グラフ
- ジャンル別のエンゲージメント箱ひげ図
- 時間帯・曜日別のジャンル効果ヒートマップ
5. 実装計画
5.1 データロードと前処理
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
import re
import nltk
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
# データロード
df = pd.read_csv('zenkigen_ai_tweets_all.csv')
# 基本的なデータクリーニング
# - 欠損値処理
# - 日時型変換
# - エンゲージメント指標計算
5.2 カテゴリ分類実装
# URL抽出関数
def extract_urls(text):
url_pattern = re.compile(r'https?://\S+')
return url_pattern.findall(text)
# カテゴリ分類関数
def categorize_tweet(text, urls):
categories = []
# Zenn記事判定
if any('zenn.dev' in url for url in urls):
categories.append('zenn')
# 外部リンク判定
if urls:
if any('arxiv.org' in url for url in urls):
categories.append('paper')
elif any(domain in ''.join(urls) for domain in ['github.com', 'huggingface.co']):
categories.append('service_tool')
# 他のドメイン判定...
# イベント関連判定
event_keywords = ['イベント', 'セミナー', '登壇', 'ウェビナー']
if any(keyword in text for keyword in event_keywords):
categories.append('event')
return categories
5.3 テキスト特徴量抽出実装
# テキスト特徴量抽出
def extract_text_features(text):
features = {}
features['char_count'] = len(text)
features['word_count'] = len(text.split())
features['hashtag_count'] = text.count('#')
features['mention_count'] = text.count('@')
features['question_mark'] = '?' in text
features['exclamation_mark'] = '!' in text
features['emoji_count'] = count_emojis(text) # 絵文字カウント関数
return features
5.4 ジャンル分類実装
# キーワードベースジャンル分類
def classify_genre(text):
genres = []
ai_gen_keywords = ['生成AI', 'GPT', 'ChatGPT', 'DALL-E', 'Stable Diffusion', '画像生成']
ml_keywords = ['機械学習', 'ディープラーニング', '深層学習', '強化学習', 'モデル学習']
hci_keywords = ['HCI', 'UI', 'UX', 'インタフェース', 'インタラクション']
comm_keywords = ['チャットボット', '対話システム', 'コミュニケーション']
# 各ジャンルのキーワードチェック
if any(keyword in text for keyword in ai_gen_keywords):
genres.append('生成AI')
# 他のジャンルチェック...
return genres
5.5 分析と可視化実装
# 各カテゴリのエンゲージメント分析
def analyze_engagement_by_category(df, category_column):
category_stats = df.groupby(category_column)['engagement'].agg(['mean', 'median', 'count', 'std'])
# 可視化
plt.figure(figsize=(12, 6))
sns.barplot(x=category_stats.index, y='mean', data=category_stats)
plt.title(f'{category_column}別平均エンゲージメント')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig(f'results/figures/{category_column}_engagement.png')
return category_stats
6. 評価方法
6.1 定量的評価
- カテゴリ間エンゲージメントの統計的有意差検定(t検定、ANOVA)
- ジャンル分類の精度評価(手動ラベリングサンプルとの一致率)
- 回帰モデルによるエンゲージメント予測と特徴重要度分析
6.2 定性的評価
- 高エンゲージメントツイートのパターン抽出と典型例提示
- ジャンル別の効果的な投稿パターン抽出
- 時系列での人気トピック変化の分析
7. 期待される成果物
-
各カテゴリの効果比較レポート
- 外部紹介タイプ別の効果
- Zenn記事の効果
- イベント関連投稿の効果
-
効果的な投稿文言ガイドライン
- 文章構造の推奨パターン
- 効果的な表現リスト
- 避けるべき表現リスト
-
ジャンル別最適投稿戦略
- 各ジャンルでの効果的な投稿タイミング
- ジャンル別の最適表現パターン
- 今後注力すべきジャンル提案
-
可視化資料集
- 各種グラフ・チャート
- インタラクティブダッシュボード(オプション)
8. 実装スケジュール
- データ前処理とクリーニング(1日)
- 特徴量エンジニアリングとカテゴリ分類(2日)
- エンゲージメント分析と基本可視化(1日)
- テキスト分析と文言パターン抽出(2日)
- ジャンル分類と分析(2日)
- 総合分析と結果解釈(1日)
- レポート作成と可視化資料仕上げ(1日)
合計:約10日間
9. 注意点と課題
-
データ品質の課題
- 不完全なデータ(欠損値、不整合)への対処
- ツイート内容の正確な分類の難しさ
-
分析上の考慮点
- 時間経過による傾向変化の考慮
- 外部要因(ニュース、トレンド)の影響
-
技術的課題
- 日本語テキスト処理の精度向上
- ジャンル分類の精度と再現性
この分析設計を実施することで、Zenkigen AIのTwitter戦略最適化のための具体的な知見が得られることが期待されます。
この分析設計をベースに、Cursorと対話しながら分析処理を実装・実行させました。
分析結果抜粋: 伸びる投稿 / 伸びない投稿の差
LLMを活用して、特にエンゲージメントが高かった投稿と低かった投稿の内容面での差を調べてみました。
Zenn技術ブログ記事の比較分析
X投稿からリンクされているZenn記事について、エンゲージメントが高かった投稿群と低かった投稿群それぞれの記事テキストをLLMに入力し、内容の特徴や改善提案を比較させました。
LLMによる改善提案の概要:
- テーマ選定: なぜ重要か、読者の課題解決にどう繋がるかを明確に。普遍的な技術課題もバランス良く。
- タイトル・導入: 論文紹介なら核心的価値をタイトルに。導入で読者の課題と記事内容を結びつける。
- 付加価値: 単なる要約でなく、著者自身の試行錯誤、比較、注意点など独自の視点を加える。
- 再現性: 読者が試せるコード例や手順、環境情報を添える。
- 読者への問いかけ: 記事途中での問いかけやコメント促進など、インタラクションを意識する。
考察:
「目を引くタイトル・導入」「読者への問いかけ」といった点は、高エンゲージメント記事の特徴[3]を捉えているように見えました。「付加価値・再現性」は、論文等の紹介記事と検証や知見を盛り込んだ記事の違いを反映していると思われますが、後者は作成コストが高いというトレードオフがあります。
arXiv論文アブストラクトの比較分析
同様に、arXiv論文を紹介する投稿について、高エンゲージメント群と低エンゲージメント群の論文アブストラクトをLLMで比較分析しました。
LLMによる高エンゲージメント論文の特徴:
- 革新性と実用性のバランス: 新しいだけでなく、応用可能性や社会的インパクトを示唆。
- ストーリー性: 興味を引く導入、明確な課題設定、解決策、将来展望。
- 再現性と透明性 (推測): コード公開や詳細な実験設定。
- 広範な読者層へのアピール: 分かりやすく魅力的な表現。
LLMによる低エンゲージメント論文の特徴:
- 新規性の不足: 既存技術の改良や特定応用が中心。
- 抽象的な表現: 実装方法などの具体性が不足。
- 応用範囲の限定: 特定タスクに特化。
- 読者層の限定: 専門用語が多く難解。
考察:
「革新的でインパクトが大きい内容」「ストーリー性があり、幅広い読者に分かりやすい」といった考察は、直感的にも妥当に感じられました。一方で、「再現性」などはアブストラクトのみでの判断は難しく、(推測)と補足されていますが、怪しいと感じる点もありました。
伸びなかった投稿文の修正案
最後に、おまけとしてエンゲージメントが低かった投稿のX投稿文をLLMに修正させてみました。
普段の投稿文の表現やキャラクターと異なり、問いかけから入るなどより「ポップ」で目を引きやすい表現になっていますし、ハッシュタグも自動で付与されています。皆さんはどちらの投稿が好みでしょうか。
** 修正前 **
📣ZENKIGENテックブログ更新📣
『Human-AI Collaboration:パフォーマンスと人間の嗜好性のトレードオフ』
人と協働するエージェントにおいて、人の体験の重要性は言うまでもないと思います。
今回はエージェントの協働戦略とパフォーマンス/体験に関する論文紹介です。
** 修正後 **
「高性能なAIツール、なぜか使いにくくない?」🤔
実は、AIの性能と人間の"好み"の間にはトレードオフがあるんです。
人間とAIがうまく協働するためのヒントを探る研究を紹介。
より良いAI体験を作るための重要な視点💡
記事で詳しく👇
[Zenn記事へのリンク]
#AI #UX #ヒューマンコンピュータインタラクション #HCI #論文解説
Cursorを活用した分析の所感
今回の3条件での分析を通じて、CursorのようなAIコーディングアシスタントをデータ分析に活用する上での所感をまとめます。
メリット
- 迅速な初期分析: 対象データと大まかな分析観点を伝えるだけで基本的な集計や可視化を迅速に行ってくれるため、アドホックな分析の初手として便利に感じました。
- アイデアの拡張: 自身では考えていなかった分析手法や可視化方法(例: 感情分析、クラスタリングなど)を提案してくれることがあり、分析の幅を広げるきっかけになると思いました。
- 分析設計の効率化: 具体的な分析内容をゼロから書き出すのは大変ですが、Cursorに叩き台となる分析設計を作成してもらい、それにフィードバックを加える形で進めることで、効率的に詳細な分析計画を立てやすいと感じました。
気になった点・課題
- 意図した分析を行う難しさ: 「ツイート内容をLLMでいい感じに分析してもらう」という部分は、簡単ではありませんでした。特に今回のようなアドホック分析では、プロンプトの調整や、LLMが出力すべき分析軸(評価項目)の設計などは、人間が試行錯誤しながら進める必要性を強く感じました。また、当然かも知れませんが、単純に「分析して」と投げるだけでは表層的または的外れな結果になりがちです。
- 分析粒度のコントロール: 一つのチャットセッションで分析を進めると、会話履歴が長くなるにつれて応答速度が低下し、指示の理解度や精度も落ちていくように感じました。今回の条件3では、長大になった分析プロセスをそのまま実装させようとするとうまくいかなかったため、分析プロセスをステップに分割し、各ステップで必要な情報(コードや前ステップの結果など)を適切に引き継ぎながら、チャットを区切る手順を踏むことで、ある程度設計に従った分析をするようになりました。
ハマったポイント
- 意図しないデータ生成: 事前に用意した投稿データを使っているはずが、分析処理の途中でCursorがダミーのツイートデータを生成してしまい、意図しない分析結果が出力されたことがありました。
- 過剰なエラーハンドリング: LLM API呼び出しでエラーが発生した場合に備え、Cursorが「気を利かせて」フォールバック処理(例: キーワードベースの簡易分析、ランダムスコア生成)を実装してくれた?結果、本来意図しない分析が実行されてしまうケースがありました。
※ スクリプトより抜粋。謎の仮定が紛れ込んでいる。
def analyze_content_factors(self, content: LinkContent) -> Dict[str, Any]:
"""コンテンツの特徴を分析"""
text = content.content or content.summary or ""
# URLからの基本的な情報を抽出 (↓ この部分が意図しない仮定に基づいていた)
if content.type == LinkType.ZENN:
text += " API SDK AI ML" # Zenn記事は技術的な内容が多いと仮定
elif content.type == LinkType.ARXIV:
text += " AI ML DL GPU" # arXiv論文は技術的な内容が多いと仮定
# ...
総括
Cursorのようなツールは、分析作業を進める上では強力な助けとなります。しかし、生成されるコードや分析結果の方向性や質を担保するためには、的確な指示、中間成果物のレビュー、試行錯誤が不可欠です。特に、実装されたコードが意図通りに動作しているか、分析結果の解釈は妥当か、といった検証を怠らないことが重要だと感じました。(偉そうに書いていますが、今回の分析ではそこまでは行っていません。あしからず)
まとめ
本記事では、Cursorを用いたXアカウント投稿分析の事例を紹介しました。
- 単純な指示(条件1)では基本的な傾向把握に留まりましたが、分析の方向性を指示(条件2)することで、より具体的な示唆が得られました。
- さらに詳細な分析設計を提示(条件3)し、stepに分割し対話的に分析を進めることで、コンテンツ内容に踏み込んだ分析を試みることができました。
- Cursorは分析の初期段階や設計の効率化に有用ですが、意図に沿った質の高い分析を行うには、依然として人間の的確な指示、結果の検証、試行錯誤が重要です。
- コンテキスト管理や意図しない挙動への注意も必要です。
実践を通して、AIとの対話を通じて分析を進めるスキルが今後重要になると感じました。一方で今後のLLMの性能向上やツールの進化により、こうした対話/分析がよりスムーズになっていくと考えられるため、設計や指示の粒度をどうしていくとよいかは、使いながら試行錯誤していくことになるのかなと思いました。
お知らせ
少しでも弊社にご興味を持っていただけた方は、お気軽にご連絡頂けますと幸いです。まずはカジュアルにお話を、という形でも、副業を検討したいという形でも歓迎しています。
-
リプライ数も取れるのですが、残念ながらほぼ0なため分析に入れてません。 ↩︎
-
取得データは標準時のタイムスタンプで取得されていたため、日本時間では16時台となります。日本語でやり取りしていましたが、さすがに日本時間として変換するほど察しがよくはありませんでした。 ↩︎
-
redteaさんの記事が高エンゲージメント群に多く含まれていたので、執筆スタイルとも言えるかもしれません。 ↩︎
Discussion