Twitter APIで出来ること・ちょっとした分析

最近、Twitter APIを使ったTweetの自動化に興味を持って色々と調べていました。

Twitter APIを使う事自体はそれほど難しくないのですが、使える機能に制限があるため、私がやりたいことに対して、何ができて、何ができないのか、を把握するのに手こずりました。

そこで、この記事では以下の内容を紹介できればと思います。

  • 私がTwitter APIでやりたいこと
  • Twitter APIで出来ること・出来ないこと
  • ちょっとした分析

「ちょっとした分析」では、Twitter APIとトピックモデル(LDA)を使って、どんなトピックがどの時間帯に投稿されやすいのか、いいねされやすいのか、を分析した結果を紹介できればと思います。

Twitter API活用方法をイメージする一助となれば幸いです。

→ 下記の記事で、Twitter APIの機能の網羅的な整理を行いましたので、全体像が知りたいという方はこちらをご覧いただければと思います。

私がTwitter APIでやりたいこと

以下、Twitter APIで解決したいことです。

  1. Twitter Analyticsのデータに相当するものを自動で取得したい
  2. 公式Tweet/返信/連ツイ/リツイート/引用リツイートの判別を自動で判別したい
  3. Twitter Analyticsで取得出来ないフォロワー数などエンゲージメント率に影響しそうな因子も自動で取得したい
  4. Twitterへの投稿を自動化したい

私のブログの集客はTwitterに依存しています。
ですので、私が継続的に良質なTweetを投稿し続けることが大事だと考えています。

Tweetの質自体は、自分自身担保するしかないと思っているのですが、投稿時間は自動化したいと考えています。

先日投稿した下記ブログでは、Twitter Analyticsのデータに機械学習モデルを適用して、「投稿時間帯をコントロールすることによってTweetのエンゲージメント率を向上出来る余地があること」に言及しました。

しかし、やりたいことに掲げた4つの作業を全て手動でこなしていたので、これらを自動したいのです。。

Twitter APIで出来ること・出来ないこと

前述のやりたいことに対して、Twitter APIで出来ることと、出来ないことは以下の通りです。

Twitter APIで出来ること

  • 自分・特定ユーザーの直近の投稿内容、いいね数などが取得出来る
  • 投稿が公式Tweet/返信/連ツイ/リツイート/引用リツイートのいずれかを判別出来る
  • APIを叩いた時点でのフォロー数/フォロワー数が分かる
  • Twitterに投稿出来る

APIの利用には、申請が必要です。申請方法は、ITTI STAFF BLOGを参考にしました。ちょっとした英作文が必要ですが、数十分程度で完了しました。

APIを利用した投稿の取得は、Qiitaの記事を参考にさせていただきました。取得できるツイート数は、1回200件までで、15分毎に900回までの制限がありますので、大量のツイートを取得する場合、15分間を開けて複数回処理を実行する必要があります。

投稿内容はjson形式で取得出来るのですが、それぞれのデータ項目が何を示すのかが分かりにくいです。私は、SYNCERのページを参考にさせていただきました。

追記。本題と直接関係しませんが、Twitter APIを使うと、下記頁のように、自分の好きなアプリ上で、Twitterの投稿状況をリアルタイムにモニタリングできるようになりますよ笑。

Twitter APIで出来ないこと

  • インプレッション、クリック数などエンゲージメント率を構成する要素が取得出来ない①
  • 過去のフォロワー数/フォロー数が取得出来ない②
  • 予約投稿が出来ない③

出来ないこと①に関して、Engagement APIという有料プラン(エンタープライズ版)のAPIを使う必要があるようです。プラン別の機能のカバー範囲は、Twitter社の公式ページにまとまっているようです(下記)。

Twitter社公式ページより

エンタープライズ版に課金するのはきついので、私は以下の半自動のアプローチで対応することにしました。

  1. Twitter Analyticsからcsvファイルを定期的にダウンロードする(手動)
  2. Pythonのプログラムでダウンロードファイルを一つのファイルに統合するようにする

出来ないこと②に関して、私が調べた限りだと、A. 定期的にAPIを叩く、B. GASで定期的に取得する、というアプローチがありそうです。A. はPCがオフになっていると動いてくれなさそうなので、確実にデータを取得してくれるB. のアプローチで対応しようと思っています。

出来ないこと③に関しては、別途、Ads APIの申請が必要のようです。Ads APIは無料らしいですが、応募フォームが企業向けっぽいので、ビビってまだ申請していません。申請したところ、2日くらいで通過連絡がきました!企業名=個人名で出しました。

ちょっとした分析

Twitter APIを使って出来る事を理解するために、実際に使ってみることにしました。分析にあたり、次のような問いを立てました。

結果も合わせて記載しておきます。

  • Tweetが「投稿される時間」と「いいねされやすい時間」
    • フォロワーがよくTweetする時間はいつか?
      →平日の12時、17-24時、土曜日の11-24時にフォロワーの投稿量が多くなる
    • Tweetが多い時間帯に投稿されたTweetはいいねされやすいのでは?
      →投稿量といいねされやすさは無相関
      →色々なジャンルの投稿を一括りに見ても良い示唆が得られなさそう
  • 分析・仕事・ブログ関連Tweetが「投稿される時間」と「いいねされやすい時間」
    • フォロワーはどんなジャンルのTweetをしているのか?
      →私が好きなジャンルである分析・仕事・ブログ関連の投稿の他、考えたこと、積み上げたことなどのジャンルがある
    • フォロワーが分析・仕事・ブログ関連のTweetをするのはどの時間帯か?
      →夜20時頃から朝4時頃にかけて出現頻度が増える
    • 分析・仕事・ブログ関連のTweetが多く投稿される時間帯に投稿された同カテゴリのTweetはいいねされやすいのでは?
      →投稿量のピークと、いいねのピークは合致しない

Tweetが「投稿される時間」と「いいねされやすい時間」

Twitter APIを利用して、フォロワーさんの Tweetを200件×800名分を取得し、過去1週間の Tweetに限定して以下の集計を行いました。
(若干名、1週間に200件以上の投稿をされている方もいて、その方の200件以上前の投稿は加味されていませんが、ここでは目を瞑ることにしましょう。。)

曜日×時間別のフォロワー投稿数合計

  • フォロワーさんが「投稿しやすい時間」を確認するために、時間帯を1時間単位で区切って、フォロワーさんの投稿数を集計しました
  • 結果、12時、平日17時〜0時と、土曜日11時〜24時に投稿量が多くなる傾向が読み取れました。日曜日は全体的に投稿量が少ないですが、ピークの立ち方は平日に似ているのが意外でした

曜日×時間別の”いいね指標”平均

  • フォロワーさんの投稿が「いいねされやすい時間(いいねされた時間ではなく投稿した時間)」を確認するために、次に示す「いいね指標」の平均値を時間別に集計しました
    • いいね指標=その投稿のいいね数÷投稿したフォロワーの平均いいね数
    • フォロワーさんによって、いいねのされやすさ、投稿しやすい時間帯が異なるはずなので、バイアスを除くために、上記のような指標を定義しました
  • 結果、投稿量が多い時間帯に投稿された Tweetにいいねがつきやすい訳ではないことが見えてきました
    • 分析をする前には、投稿量が多い時間帯ほどユーザーが活性化しておりいいねもされやすい、と踏んでいたのですが、仮説と異なる結果が出てきたのが意外でした
    • この点については、以下で、もう少し踏み込んで分析してみました

投稿量といいね指標の相関関係

投稿量が多い時間帯ほどユーザーが活性化しておりいいねもされやすい」に関して上記の分析で否定的な結果が出ましたので、さらに、次のような相関分析を行いました。

  • 図表の見方
    • プロットされている一つ一つの点は 1つのTweetに対応しています
    • x軸はTweetが投稿された時間(1時間単位)にあったTweet数合計です
    • y軸はTweetが獲得したいいね数を、Tweetを投稿したフォロワーの平均的ないいね数で割ったもの(前述のいいね指標)です
  • 相関分析の結果
    • 投稿量といいね指標の相関関係に関して、相関係数r=-0.016、p値=-0.27という結果が得られました。投稿量といいね指標には相関関係はないようです
    • あまりに投稿量が多い時間帯だと、いろんな人の Tweetとバッティングしてしまい、いいねがつきにくくなる」、ということなのかなあ、と推察しました

ここまででは、いろいろなジャンルの Tweetを丸めて見てきました。以降では、ジャンル別に分析することによって、示唆を出していきたいと思います

分析・仕事・ブログ関連Tweetが「投稿される時間」と「いいねされやすい時間」

ここからは、Tweetのジャンル別に、「投稿される時間」と「いいねされやすい時間」の関係性を探ってみたいと思います。特に、私がよく呟くジャンルである、分析・仕事・ブログ関連のジャンルについて深く見て行ければと思います。

Tweetのジャンル分けには、LDA(トピックモデルの一種)を使いました。LDAの使い方やコーディングについては下記のグログを参考にさせていただきました。また、形態素解析で除外すべきパターンについては、Qiitaの記事(トピックモデルによる Twitter の分類)を参考にさせていただきました。

ジャンル分け

ここからは、「ジャンル」を「トピック」という言葉に置き換えて話を進めます。

詳しくは上記のブログに譲りますが、LDAでは、トピック数は事前に指定しておきます。フォロワーさんの Tweetは、単語の集まりとしてインプットされ、結果、Tweetがそれぞれのトピックに所属する確率を得ることが出来ます

LDAでは、トピックも単語分布(単語がトピックに所属する確率)として表現されます。LDAを適応した結果、トピック別の単語分布を得ることが出来ます。この単語分布から、トピックの意味合いを人間が考えることになります。

以上をざっくりまとめます。今回は、以下の手順でLDAによる分析を行いました。

  1. トピック数(ジャンル数)を決める
  2. 文書を単語の集まりに変換する(形態素解析、辞書・コーパス作成)
  3. LDAを適用する
  4. トピック別の単語分布からトピックの意味合いを考える
  5. トピック別にTweetがいいねされる傾向について分析する

手順1に関して、今回、トピック数は10に設定しました。このブログでは、手順1、2、3の説明は割愛し、以降では手順4、5について紹介できればと思います。

手順4. トピックの意味合い

フォロワーさんのTweet200件×800名分をLDAにかけた結果、各トピックの単語分布(所属確率トップ10)は、以下のようになりました。

  • 図表の見方
    • 「質問や考えを募集中」などのトピック名称は、上位の単語から私が命名したものです
    • wordに単語、probに単語がトピックに所属する確率が記載されています
  • 意味合い解釈の結果
    • 赤枠で囲ったものは、私が日々呟いている内容と相性が良さそうなトピック(②データ分析する、④仕事・勉強する時間、⑩機械学習・統計のブログ・記事)です
    • 上記以外のトピックについても、日常関連の投稿(⑤人と自分について思うこと、⑧今日も疲れた)や、自己研鑽関連の投稿(⑦今日の積み上げ、⑨入門・参加・開催)等、よくお見かけするトピックに分類することが出来ました
  • 躓いたこと
    • 形態素解析で使っているMeCabの問題だと思いますが、「い」、「さ」などの謎の単語が上位に現れてしまいました。。他の形素体解析ツールを使う、前処理を工夫する、などの対処法がありそうですが、大変そうなので今回は見送ってしまいました。
      • 他の形素体解析ツールは、Qiitaの記事(2019年末版 形態素解析器の比較)が参考になりそうなので、気が向いたら試してみようと思います。
      • 前処理として、出現頻度が高すぎる単語、低すぎる単語を削除しています。この削除判断の閾値を調整することにより、謎単語も削除できると思われます。試してみたところ、閾値を変えると、トピックの顔ぶれがガラリと変わってしまうので、もう少しちゃんと勉強してから試してみようと思いました。。

手順5.トピック別の「投稿されやすい時間」と「いいねされやすい時間」

時間帯毎に、トピックの「出現頻度」と、「いいね指標」を集計することで、そのトピックが投稿されやすい時間帯と、いいねされやすい時間帯の関係性を探りました

以下、上記の分析によってわかったことです。

  • トピックによって投稿量のピークといいねされやすさのピークの時間帯は異なる
    • ユーザーによって得意なトピックと活動時間帯が異なるためだと思われます
  • 投稿量のピークといいねされやすさのピークの時間帯は合致しない
    • トピック別に分けて見ても、前章と同様の結果が得られました
  • 私が狙っているトピック(機械学習や仕事関連)は深夜0時〜朝9時頃に投稿するといいねがつきやすい
    • 深夜3時など極端な時間に発せられた投稿にいいねがつきやすいというのは、ちょっと意外な結果でした。ちゃんとABテストして検証したいですね

最後に

最後までご覧いただきありがとうございました。現在、ABテスト実施に向けて、テスト用のTweetを量産していますので、どこかで日の目を見ることがあればいいですね。。

またどこかでお会いしましょう。

以上!

コメントを残す