読者です 読者をやめる 読者になる 読者になる

今すぐ知るべき! RStudioのオススメTips 5種

R RStudio

※この投稿はRStudio Advent Calender 2016の12日目の記事です。

RStudioのTipsを紹介します。といっても私はTipsの紹介はしません。Tipsの紹介を紹介するだけです。

RStudioのTipsを垂れ流すだけのこのアカウントを皆さんご存知でしょうか。

フォロワー数は実に1.8万。私のようなフォロワー3桁ゴミアカウントは、Tipsを無理やりひねり出すよりも、身の丈に合わせて今はやりの「キュレーションメディア」と成り果てて、このawesomeなアカウントのツイートをひとつふたつ引用してお茶を濁すほうが世のため人のためではないでしょうか。という考えに至ったのでそうします。

TwitterAPIからツイートをとってくる

twitteRパッケージを使ってもいいですが、あえて素のhttrでやってみます。

ドキュメント:GET statuses/user_timeline — Twitter Developers

OAuthアクセストークンの取得

詳しくはhttr/oauth1-twitter.r at master · hadley/httr · GitHubを見てください。こんな感じです。

twtr_token <- httr::oauth1.0_token(
  endpoint = httr::oauth_endpoints("twitter"),
  app = httr::oauth_app(
    "twitter",
    key = "(Consumer Key)",
    secret = "(Consumer Secret)"
  )
)

まずはひとつ取ってくる

@rstudiotipsのツイートを、RTを除いて取ってくるのはこんな感じです。countは最大200件まで指定できるとのことなので最大まで指定します。

res <- httr::GET("https://api.twitter.com/1.1/statuses/user_timeline.json",
                 query = list(
                   screen_name = "rstudiotips",
                   count = 200,
                   include_rts = FALSE
                 ),
                 twtr_token)

tw <- httr::content(res)

このtwはちょっとサイズが大きすぎるため、データ全体をここで示すことはしません。こうしたlistの構造を探索するには明日のアドベントカレンダー「list型のデータを可視化してみよう」を読めばきっとわかるはずです!

という期待はさておき、とりあえずどのような要素があるかだけでも眺めてみましょう。

names(tw[[1]])
#>  [1] "created_at"                "id"                        "id_str"                   
#>  [4] "text"                      "truncated"                 "entities"                 
#>  [7] "source"                    "in_reply_to_status_id"     "in_reply_to_status_id_str"
#> [10] "in_reply_to_user_id"       "in_reply_to_user_id_str"   "in_reply_to_screen_name"  
#> [13] "user"                      "geo"                       "coordinates"              
#> [16] "place"                     "contributors"              "is_quote_status"          
#> [19] "retweet_count"             "favorite_count"            "favorited"                
#> [22] "retweeted"                 "possibly_sensitive"        "lang"                     

textというやつにツイートの中身が入っているようです。

tw[[1]]$text
#> [1] "Want to remember when you wrote a section of R script? Type \"ts\" and press Shift+Tab to insert a section header w/… https://t.co/fo3evGvH5S"

retweet_countfavorite_countにはリツイート数とふぁぼ数が入っています。これを調べれば、人気のTipsがわかりそうです。その路線でいってみましょう。

tw[[1]]$retweet_count
#> [1] 60
tw[[1]]$favorite_count
#> [1] 170

ツイートを過去にさかのぼって取得する

max_idというやつを指定するといいようです。ただし、max_idに指定したIDのツイートを含まれるので、先頭の一つは取り除かないとその前のリクエストとツイートが重複してしまうことになります。なので、こういう感じでしょう。

result <- vector("list", 16)
result[[1]] <- tw

# 最大3200件までしか取得できないので、1度に200件取得するなら16回が限度 
for (i in 2:16) {
  res <- httr::GET("https://api.twitter.com/1.1/statuses/user_timeline.json",
                   query = list(
                     screen_name = "rstudiotips",
                     count = 200,
                     include_rts = FALSE,
                     max_id = tw[[length(tw)]]$id_str
                   ),
                   twtr_token)
  tw <- httr::content(res)
  result[[i]] <- tw[-1]
}

result <- purrr::flatten(result)

...なんですが、RStudio tipsのツイート数は268。そんなことをする必要はありませんでした。必要な要素だけ抜き出してきてpurrr::map_df()でデータフレームにします。

d <- purrr::map_df(tw, `[`, c("id_str", "text", "retweet_count", "favorite_count"))

dplyr::glimpse(d)
#> Observations: 175
#> Variables: 4
#> $ id_str         <chr> "807278080750284800", "806576818140499968", "804731706158682112", "804462...
#> $ text           <chr> "Want to remember when you wrote a section of R script? Type \"ts\" and p...
#> $ retweet_count  <int> 60, 29, 61, 0, 0, 185, 20, 0, 0, 0, 0, 43, 0, 0, 1, 22, 27, 0, 1, 31, 6, ...
#> $ favorite_count <int> 170, 83, 152, 1, 0, 388, 61, 0, 1, 0, 0, 86, 0, 0, 3, 38, 60, 2, 0, 86, 8...

リツイート数+ふぁぼ数トップ5

早速ランキングを発表しましょう。

d %>% mutate(count_total = retweet_count + favorite_count) %>% arrange(desc(count_total))

5位 Profvis

Rのコードのプロファイリング。アドベントカレンダーの昨日の記事をまだ見ていない人は要チェックです。

4位 MarkdownエディタとしてのRStudio

Markdownのエディタとしても便利だよ、という話。

3位 ショートカットを見るショートカット

Alt+Shift+Kを押すと、キーボードショートカットのチートシートを見ることができます。地味ですが割と重宝します。

2位 flexdashboard

ダッシュボードをつくれるパッケージです。もはやRStudioのTipsではなくてただのパッケージ紹介では...。詳しくは「おねがいぞうさん」のフレーズが鮮烈な、所沢義男さんのTokyo.RでのLTスライドを見てください。

1位 SQL

knitrにはR以外のエンジンもあって、例えばSQL使えるよ、という話ですね。これも、もはやRStudioのTipsなのかよくわかりません。

感想

RStudio Tips、ネタ切れ...?