2017年で最も「たーのしー!」かった日は?

今年も残すところわずかですね。

今年も多くのアニメが放送されましたが、2017年最も話題を集めたのは「けものフレンズ」ではないでしょうか?
kemono-friends.jp

本作で特徴的なセリフの1つに「たーのしー!」があります。
そこでけものフレンズに関するツイートから2017年で最も「たーのしー!」かった日を求めてみたいと思います*1






1.Twitter APIキー・トークンの取得

ツイートを取得するにはTwitter APIキーとトークンを取得する必要があります。APIキー・トークン・ツイート取得までは下記の記事を参考にさせて頂きました。
www.randpy.tokyo

#使用するライブラリをダウンロード
library(rtweet)
library(dplyr)
library(ggplot2)
library(tidyverse)
library(scales)

#APPNAME, CONSUMERKEY, CONSUMERSECRETは前もって取得しておきます
APPNAME <- "xxxxxxxxxx"
CONSUMERKEY <- "xxxxxxxxxx"
CONSUMERSECRET <- "xxxxxxxxxx"

#トークンを取得
twitter_token <- create_token(
        app <- APPNAME,
        consumer_key <- CONSUMERKEY,
        consumer_secret <- CONSUMERSECRET)


これでツイート取得する準備は整いました。当初はsearch_tweets関数でハッシュタグ「#けものフレンズ」を含むツイートを全て取得しようと思っていたのですが、helpのdescriptionによると

ONLY RETURNS DATA FROM THE PAST 6-9 DAYS.

とのことで最高で6-9日までしか遡れないようです。*2

そこで、公式アカウント(@kemo_anime)のツイートを取得し、そのリツイートやいいねの数を見ることにします。


2.ツイート取得・前処理

#get_timeline関数を使用
#user:ユーザー名
#n:取得したいツイート数
#home:ユーザーのツイートを取得する場合はF
#token:token_createで取得したオブジェクト

tl <- get_timeline(user = "kemo_anime", n = 3200, home = F, token = twitter_token)
dim(tl)
[1] 2575   42

2575ツイートを取得できました*3。42変数の中にツイート日、文章、いいねの数などが含まれています。
アカウント名からてっきりアニメ専用アカウントかと思っていましたが、ツイート日が格納された変数(created_at)を見ると最初のツイートは2015年2月(アプリ時代?)でした。


以下解析のために前処理としてデータを整形します。

#リツイートを除外
tl <- tl[tl$is_retweet == F, ]
#APIで取得するとグリニッジ標準時なので日本時間に変更
tl$created_at <- as.POSIXlt(tl$created_at, tz = "Japan")
#アニメの影響を見たいので期間を2017年1月1日以降に
tl <- tl[tl$created_at > "2017-01-01 02:00:00", ]
#日ごとにまとめる
tl$day <- as.POSIXct(substring(tl$created_at, 1, 10))
tw_per_day <- table(tl$day) %>% as.data.frame()




3.ツイート解析

下図は公式アカウントの1日あたりツイート数のヒストグラムです。
この1年で公式アカウントからは570ツイートあり、1日あたりのツイート数は1〜9件ということが分かります*4

#合計ツイート数を算出
sum(tw_per_day$Freq)
[1] 570

#1日あたりツイート数の概要
summary(tw_per_day$Freq)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.000   1.000   2.000   2.317   3.000   9.000 

#ヒストグラムのプロット
ggplot(tw_per_day, aes(x = Freq)) + 
        ggtitle("けものフレンズ公式アカウント ツイート数/日") + 
        theme(plot.title = element_text(family = "HiraginoSans-W3", 
                                        hjust = 0.5), 
              axis.title = element_text(family = "HiraginoSans-W3", 
                                        size = 10)) +
        geom_histogram(bins = 9, binwidth = 1) + 
        scale_x_continuous(breaks = 1:9, labels = 1:9) + 
        xlab("ツイート数/日") + ylab("頻度")

f:id:aiuchi0703:20171231204616p:plain

いいね数とリツイート数をプロットしてみます。

day_df <- data.frame(day = rev(unique(tl$day)), 
                     favorite_count = tapply(tl$favorite_count, tl$day, sum), 
                     retweet_count = tapply(tl$retweet_count, tl$day, sum))

#ggplot用に整形
day_plot <- tidyr::gather(day_df, key = "group", value = "value", 
                           c("favorite_count", "retweet_count"))

#プロット
ggplot(data = day_plot, aes(x = day, y = value, colour = group)) + 
        ggtitle("けものフレンズ公式アカウント いいね数・リツイート数") + 
        theme(plot.title = element_text(family = "HiraginoSans-W3", 
                                        hjust = 0.5), 
              axis.title = element_blank(),
              axis.text.x = element_text(family = "HiraginoSans-W3", 
                                         size = 8), 
              legend.text = element_text(family = "HiraginoSans-W3")) +
        geom_line() + 
        scale_x_datetime(breaks = as.POSIXct(paste("2017-", 1:12, "-01", sep = "")), 
                         labels = paste(1:12, "月", sep = "")) +
        scale_y_continuous(labels = comma) + 
        scale_colour_discrete(name = element_blank(), labels = c("いいね", "リツイート"))

#いいねとリツイートの相関係数を算出
cor(day_df$favorite_count, day_df$retweet_count) %>% round(digits = 2)
[1] 0.93


f:id:aiuchi0703:20171231205214p:plain

いいね数とリツート数は強い相関があること(相関係数:0.93)、どちらも日によって数に大きな差があることが分かります。
多少荒っぽいかもしれませんが、以降は単純のためにいいね・リツイート数の合計したものを基準にします。

#いいねとリツイートを合算
day_df$fav_rt <- day_df$favorite_count + day_df$retweet_count

#プロット
ggplot(data = day_df, aes(x = day, y = fav_rt, group = 1)) + 
        ggtitle("けものフレンズ公式アカウント いいね+リツイート数") + 
        theme(plot.title = element_text(family = "HiraginoSans-W3", 
                                        hjust = 0.5), 
              axis.title = element_blank(),
              axis.text.x = element_text(family = "HiraginoSans-W3", 
                                         size = 8), 
              legend.text = element_text(family = "HiraginoSans-W3")) +
        geom_line() + 
        scale_x_datetime(breaks = as.POSIXct(paste("2017-", 1:12, "-01", sep = "")), 
                         labels = paste(1:12, "月", sep = "")) +
        scale_y_continuous(labels = comma)

#いいね+リツート数の多い日トップ5を算出
day_df$Freq <- tw_per_day$Freq
head(day_df[order(day_df$fav_rt, decreasing = T), -1], 5)

           favorite_count retweet_count fav_rt Freq
2017-03-29          65440         61601 127041    4
2017-12-25          76554         49895 126449    3
2017-07-21          45296         53329  98625    3
2017-04-24          33692         48750  82442    2
2017-04-27          36986         42759  79745    4

僅差ではありますが最も「いいね+リツイート数」が多いのは3月29日でした。ただし、3月29日のツイート数は4、2位の12月25日のツイート数は3ですので、1ツイートあたりの平均では12月25日がトップになります。
トップ5のうち放送期間中(1〜3月)のツイートが1件しかないのも興味深いです。

f:id:aiuchi0703:20171231205548p:plain


それでは、3月29日や12月25日にどのようなツイートがされたのか見ていきます。

tl$fav_ret <- tl$favorite_count + tl$retweet_count

#いいね+リツイート数の多いツイートトップ5を表示
tweets <- data.frame(tl[, c("favorite_count", "retweet_count", "fav_ret", "text")], 
row.names = as.character(tl$created_at))

head(tweets[order(tweets$fav_ret, decreasing = T), -4], 5)
                    favorite_count retweet_count fav_ret
2017-12-25 00:00:21          68438         45488  113926
2017-07-21 15:01:22          42581         51385   93966
2017-04-07 17:00:24          30064         44505   74569
2017-04-24 10:05:39          26132         38002   64134
2017-03-29 02:18:57          35350         25957   61307

ツイート単位で最もいいね+リツイート数が大きいのは12月25日の「ようこそジャパリパーク」のクリスマスver.を告知するツイートです。
3月29日のツイートは最終回直後のものですね。




4.まとめ

  1. 2017年で最も「たーのしー!」かった日は3月29日。
  2. 最もいいね+リツイートされたのはOPのクリスマスver.告知のツイート。
  3. 放送終了後も根強い人気がある。




放送終了後も人気があるのは分かっていましたが、こうして可視化してみるとよりはっきりしますね。
放送から1年近く経った現在でも万単位でいいねやリツイートされるのは凄まじいです。。。
こんなデータを見ると思わず言いたくなります。


すっごーい! と(笑)



2018年も面白いアニメに出会えますように。

*1:RによるTwitterテキストマイニング、ggplot2で時系列データを描く練習を兼ねて

*2:このゆらぎは何だろう。あと公式の7日間制限との差は。。。

*3:2017年12月31日17:00時点

*4:実データでここまできれいな階段状のヒストグラムは初めて見ました