Np-Urのデータ分析教室

オーブンソースデータなどWeb上から入手できるデータを用いて、RとPython両方使って分析した結果を書いていきます

【2017年9月版】RからTwitter APIを叩くための基礎講座 ~認証からツイート取得まで~

テキストマイニングを気軽にやってみたい!という方は多いと思います。
そんな時に便利なのが、SNSの投稿データ。

今回はTwitter APIをRから使用して、ツイートデータを取得してみます。
本記事を踏まえて、テキストマイニングにどんどんチャレンジしていきましょう!

注意点として、ちょくちょく公式の手順が変わったりするので、もし本記事の通りやってみてうまくいかない場合は、ググってみて最新の手順を調べてください。
そしてそれをコメントやツイッターなどで教えてくれると助かります。

なお、Twitter APIの使用方法やテキストマイニングの作法については、以下の本がかなり参考になりました。
良書です!

Rによるテキストマイニング入門

Rによるテキストマイニング入門

最近でたこちらの本は、中級者向けで、実践多くて楽しいです。

Rによるやさしいテキストマイニング: 機械学習編

Rによるやさしいテキストマイニング: 機械学習編

APIを使用するためのKey等を取得

まず、Twitter APIを使うためには、

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Access Token Secret

という4つの情報が必要なので、以下の手順で取得してください。
なお、この4つはPythonなど他の言語からAPIを叩く場合も必須です。

Twitterにログインしている状態で、https://apps.twitter.com/にアクセスしましょう。
すると、以下のような画面が出るので、「Create New App」ボタンを押してください。
f:id:Np-Ur:20170919220616p:plain

APIを使用するために、「どんなアプリに使うのー?」的なことを聞かれるので、以下みたいに入力して「Create your Twitter application」をクリックしましょう。
f:id:Np-Ur:20170919221225p:plain
一つ注意点ですが、ツイッターアカウントに電話番号を登録していないと、ここでエラーが出ます。
事前に電話番号登録しておきましょう。

その後、アプリの設定画面に飛ぶので、

  • Permissions タブをクリックして、権限を「Read, write, and direct messages」にしましょう。

f:id:Np-Ur:20170919222455p:plain

  • Key and access tokenタブをクリックして、画面下の 「Create access token」ボタンをクリックしましょう。

そうすると、先ほどの

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Access Token Secret

4つが生成されるので、コピーしてどっかに保存しておくなどして、後から使えるようにしておきましょう。

RからTwitter APIを使用するためのライブラリをインストール

Rには、twitteR というライブラリがあるので、これを使います。

関係するパッケージもまとめて、インストールしておきましょう。

install.packages(c("twitteR", "bit64", "rjson", "DBI", "httr", "base64enc"), dependencies =  TRUE)

ライブラリの使用例

さて、必要な情報が手に入ったところで、実際にライブラリを使ってみましょう。

library(twitteR)

CONSUMERKEY = "xxxxxxxxxxxxxxxxxx"
CONSUMERSECRET = "xxxxxxxxxxxxxxxxxx"
ACCESSTOKEN = "xxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxx"
ACCESSSECRET = "xxxxxxxxxxxxxxxxxx"

options(httr_oauth_cache = TRUE)
setup_twitter_oauth(CONSUMERKEY, CONSUMERSECRET, ACCESSTOKEN, ACCESSSECRET)

上のコードを実行すると、お使いのR環境からTwitter APIを利用する準備ができました。

では、わたくしのTwitter アカウントNp-Ur (@Np_Ur_) | Twitterのツイートを取得してみましょう。

tweet_npur = userTimeline("Np_Ur_", n = 10)

はい、これで最近10件のツイートが取得できました!簡単ですね!
取得できたツイートは以下のように展開できます。

> tweet_npur
[[1]]
[1] "Np_Ur_: 気付いたら100フォロワーだ…\nアカウント作ってから3カ月でやっと100……"

[[2]]
[1] "Np_Ur_: はてブ新着のったぽい\n皆様あざます"

[[3]]
[1] "Np_Ur_: バギングとランダムフォレストについて、学校のクラスを例に説明してみました。次回実践編では、決定木、バギング、ランダムフォレストの精度比較をしてみたいと思いますのでご期待くださいませ!!\nhttps://t.co/hutmaTtCbc"

[[4]]
[1] "Np_Ur_: データ回したかったが、飲みながらやろう"

[[5]]
[1] "Np_Ur_: 体が熱燗を求めている\n本当か?僕の体よ\nこの暑い夜に本当に熱燗を飲みたいのかね"

[[6]]
[1] "Np_Ur_: Google アナリティクスで、APIからセグメントを作ることってできないのかなー…軽く調べる限り情報出てこない\nアクセス解析自動化してくれるよりも、色々使い勝手良いセグメントを自動で作ってくれたほうがありがたいかもね"

今回は、特定のユーザーを指定してツイート取得するという簡単なものでしたが、トレンドを取得したり色々できるので、興味ある方は公式サイトを見てみてください!
https://cran.r-project.org/web/packages/twitteR/twitteR.pdf

追記…

こちらの内容を公開したところ、
Hiroaki Yutani (@yutannihilation) | Twitterさんに、以下のご指摘を頂きました。

ということなので、twitteRではなく、rtweetを使った実装例も紹介しておきます。
いやーありがたいご指摘です!

まずは、ライブラリをインストールし、読み込みましょう。

install.packages("rtweet", dependencies = TRUE)
library(rtweet)

次にお使いのR環境からAPIを利用するための認証を行うのですが、その前に、先ほどのTwitterアプリ編集画面にて、「Settings」タブをクリックして、「Callback URL」という箇所に「http://127.0.0.1:1410」と入力しておいてください。twitteRの認証と違ってここをやらないとうまく動きません。
f:id:Np-Ur:20170920213540p:plain

APPNAME = "XXXXXXXXXXXX"
CONSUMERKEY = "XXXXXXXXXXXX"
CONSUMERSECRET = "XXXXXXXXXXXX"

twitter_token = create_token(
  app = APPNAME,
  consumer_key = CONSUMERKEY,
  consumer_secret = CONSUMERSECRET)

APPNAMEに先ほど作ったアプリの名前、CONSUMERKEYとCONSUMERSECRETもそれぞれ入力して、create_token()という関数に渡すとAPIを利用するための認証が成功します!

これを使って、

tweet_npur = get_timeline("Np_Ur_", n = 10, token = twitter_token)

こんな風に、Np_Ur_のツイートが取得できます。ツイートテキストのみ展開する場合は

> tweet_npur$text
  [1] "@yutannihilation さすがでございます!参考にさせていただきます。"                                                                                                                                                                                                           
  [2] "@yutannihilation おーそうなんですね!調べて追記しておきます!\nありがとうございます!!!"                                                                                                                                                                                 
  [3] "買います! https://t.co/I63ANdKycJ"                                                                                                                                                                                                                                        
  [4] "RT @langstat: RからTwitter APIを叩くための基礎講座 ~認証からツイート取得まで~ - これで無理なら諦めて!世界一やさしいデータ分析教室 https://t.co/tBe8glSYQZ"                                                                                                                
  [5] "Twitterでテキストマイニングとかしたい人向けに!\nRでTwitter APIを使うための基礎講座です\nhttps://t.co/uWMis2yKVY"
…
[177] "はてなブログに投稿しました #はてなブログ\nデータ分析を始める前に! Rの環境をセットアップする方法 - RとPython両方使ってデータ分析するブログ\nhttps://t.co/M8k0Wm3Mzc https://t.co/6Cks4tdPpE" 

これで表示できます!

ただよく分からないのが、n=10と、10件取得と指定しているのに177件のツイート(全ツイート)が取得できてしまいました。何なんだろう…。
知っている方いたら教えてください!(他人任せ…)

追記の追記

またまたHiroaki Yutani (@yutannihilation) | Twitter先生からありがたいツイートをもらいました。
なるほど…確かにカオスですが納得しました。

まとめ

ということで、テキストマイニングを気軽に実行するためのTwitter取得をRからやってみました。

Rから、と言っても前半のAPI Keyを取得するあたりは、どの言語でも共通です。
後半の実際に取得するあたりは、それぞれの言語で恐らく有名なライブラリがあるはずなので、「言語名 twitter api」とかで検索してみてください。

それでは皆さん!素敵なテキストマイニングライフを!!!