戯言日記

Rの話だと思ったら唐突にサバゲーが混じってくる何か。

gtrendsRで今が旬のサバゲー装備をグーグル先生に訊いてみる

サバゲー装備というかガスハンドガン限定だけど()。


という訳で、グーグル先生での検索数から気になる装備がどれくらい興味を持たれているか、{gtrendsR}を使って調べてみる。

今回は調査というより「こうやれば調べられる」みたいなところに主眼を置いてるので、別に東京マルイの全機種調べたりとかはしてない。


それと先に断っておくと、「検索数=人気」ではないので、これだけで人気とかを語るのは難しいと思う(例:M92Fの新型の販売が決定すると、人気はどうあれ検索数は増えると予想される)。
でも目安として簡単に拾ってくる分には楽しい。
それと今回は検索対象がwebだけど、これってSNS入ってるのかどうかが気になる。ツイッターとかのデータも引っこ抜いて比較すると何か見つかるかもってのも思う。


まずは準備から。頭を空っぽにしてこれを走らせる。
ちなみに自分の環境だとなぜか{Rcpp}が上手く更新されなくて、一度remove.packagesしてから再度入れ直す羽目になった。謎。


install.packages("drat")       # easier repo access + creation
drat:::add("ghrr")             # make it known
install.packages("gtrendsR")
if (!require("devtools")) install.packages("devtools")
devtools::install_github("PMassicotte/gtrendsR")


それと今回使うパッケージを入れておく。


library(gtrendsR)
library(tidyverse)
library(DT)
library(plotly)
library(dygraphs)


早速だが試しに調べてみる。デフォルトだと1週ごとのデータを5年分も拾ってくれるけど、そこまでいらない人は期間を設定すれば解決する。
keywordで調べたい単語、geoで検索地域を設定する。
国は日本で設定した。海外を調べると実銃のデータしか拾ってこない気がする。

ちなみに、日本語で検索すると「マルチバイトが~」とか言い出して動かなくなるので英語(というかアルファベット)で検索した。エンコードを何とかすればいいのかもしれないが、調べて出てきた解決法が「Ubuntuを使う」だったのでそっ閉じした。コンソールに出力される結果も日本語と思われる箇所までがっつり文字化けしてるんだけど、これマジで解決法ないの???


gtrendsR::gtrends( keyword = c("M92F"), geo = c("JP") )


結果はリスト形式で、「期間 time」「国 country」「地域 region」「都市 city」などでそれぞれ検索された(≒興味を持たれた interest)数が表示される。
また検索ワードに対する「関連項目 related topics」も出してくれる。でもこれが一緒に検索された単語なのか、一緒に書かれることが多い単語なのか分からない。

3種類の検索された回数を纏めて取りたい場合はキーワードを纏めて指定。5個まで同時に調べられるらしい。
結果は表形式で出力して確認する。


WeeklyTrends <- 
  gtrendsR::gtrends( keyword = c("M92F", "Glock", "SIG Sauer", "Desert Eagle", "M1911"), geo = c("JP") )$interest_over_time %>% 
  as_tibble() %>% 
  dplyr::select(date,hits,keyword) %>% 
  dplyr::mutate(keyword = keyword %>% as.factor() )

WeeklyTrends %>% DT::datatable()



見返してみると、検索する単語が型番だったり社名だったりが混じっていて適当にも程があるけど、"Beletta"より"M92F"の方が引っ掛かるから大目に見てください(適当)。
何はともあれ、これで集計とかがしやすくなった。検索数の平均を出してやるとこんな感じ。


WeeklyTrends %>% dplyr::group_by(keyword) %>% dplyr::summarize(Hit = mean(hits))
## # A tibble: 5 x 2
##   keyword        Hit
##   <fct>        <dbl>
## 1 Desert Eagle  2.22
## 2 Glock        10.5 
## 3 M1911        13.5 
## 4 M92F         12.5 
## 5 SIG Sauer     3.34


国内のベレッタに対する興味の高さに震える。いいぞもっとやれ。
あとシグザウエルは結構カッコいいのでもっと人気出てほしい。というか純正メーカーとしてエアソフトガンやり始めてるし、ぜひ頑張ってくれ。

「今興味を持たれているのはこれです!」みたいなことが言いたければ箱ひげ図で可視化すればいいと思う。外れ値が入っててもデータの概形は把握できるし。


WeeklyTrends %>% ggplot(aes(keyword, hits, colour=keyword)) +
  stat_boxplot(geom = "errorbar", coef = 1.5, width = 1) +
  geom_boxplot() +
  ylim(c(0,30)) +
  theme_cowplot() +
  theme(legend.position="none") 

f:id:doubtpad:20200306234935p:plain


せっかく時間の情報も持っているので、時系列データとしてインタラクティブな可視化をやってみる。

{plotly}パッケージ内のggplotlyでやる方法と、{dygraph}パッケージでやる方法と2つある。
ちなみに後者はtidyな見た目のデータだと上手くグラフにならないので、pivot_widerで検索対象ごとに列を作ってから変換すると良さげ。

あと残念ながら未だにインタラクティブなグラフの貼り付けができない人なので、上の画像はpngで貼り付けた。 下はpngにすらできなかったので気になる人はRで実行してもらえれば。


g <- WeeklyTrends %>% ggplot(aes(date, hits, colour=keyword)) + geom_line()+ theme_cowplot()
ggplotly(g)


f:id:doubtpad:20200307000646p:plain


WeeklyTrends %>% tidyr::pivot_wider(names_from = keyword, values_from = hits) %>% 
  read.zoo() %>% xts::as.xts() %>%
  dygraphs::dygraph() %>%
  dyOptions(drawPoints = TRUE, pointSize = 1.5,
            colors = c("red", "blue", "green"),
            stepPlot = FALSE, fillGraph = FALSE, fillAlpha = 0.4) %>%
  dyRangeSelector(height = 20, strokeColor = "red")


最後に、今回一番面白かった検索結果を。
関連項目が上で調べたものに比べて結構面白いことになってる。
GGOでピンク色になってたもんな、うん。


gtrendsR::gtrends( keyword = c("P90"), geo = c("JP") )$related_topics


##     subject related_topics                                        value geo
## 1       100            top                                       FN P90  JP
## 2        16            top                                         P-90  JP
## 3        12            top                                          Gun  JP
## 4        10            top                                       custom  JP
## 5         7            top                                  Airsoft gun  JP
## 6         7            top                                     Magazine  JP
## 7         7            top                                       Pickup  JP
## 8         5            top                                  Tokyo Marui  JP
## 9         5            top                                      Airsoft  JP
## 10        5            top                              Gibson Les Paul  JP
## 11        4            top                                       Guitar  JP
## 12        4            top                                       Bullet  JP
## 13        4            top                                        Rifle  JP
## 14        3            top                          Gibson Brands, Inc.  JP
## 15        3            top                                   M4 carbine  JP
## 16        3            top                                Battlefield 4  JP
## 17        3            top                           Heckler & Koch MP5  JP
## 18        2            top                                  Machine gun  JP
## 19        2            top                                        Sight  JP
## 20        2            top                               Submachine gun  JP
## 21        2            top                                     Epiphone  JP
## 22        2            top                                   Gun barrel  JP
## 23        2            top                                     Silencer  JP
## 24        2            top                                       Weapon  JP
## 25 Breakout         rising                                         Pink  JP
## 26 Breakout         rising                             Girls' Frontline  JP
## 27 Breakout         rising                                   Knives Out  JP
## 28 Breakout         rising                                    Huawei P9  JP
## 29 Breakout         rising               Tom Clancy's Rainbow Six Siege  JP
## 30 Breakout         rising                           Nikon Coolpix P900  JP
## 31 Breakout         rising                            Electrical wiring  JP
## 32 Breakout         rising                     Tom Clancy's Ghost Recon  JP
## 33 Breakout         rising                                          Mod  JP
## 34 Breakout         rising                                   Splatoon 2  JP
## 35 Breakout         rising                              Yamaha Pacifica  JP
## 36 Breakout         rising                    Tom Clancy's The Division  JP
## 37 Breakout         rising           Tom Clancy's Ghost Recon Wildlands  JP
## 38 Breakout         rising                   Fender Telecaster Thinline  JP
## 39 Breakout         rising                                         Hero  JP
## 40 Breakout         rising                                      FujiGen  JP
## 41 Breakout         rising                     Tom Clancy's Rainbow Six  JP
## 42 Breakout         rising                                         Hand  JP
## 43 Breakout         rising                                       Vector  JP
## 44 Breakout         rising             Counter-Strike: Global Offensive  JP
## 45 Breakout         rising                PlayerUnknown's Battlegrounds  JP
## 46 Breakout         rising                                     DiMarzio  JP
## 47 Breakout         rising      Call of Duty: Modern Warfare Remastered  JP
## 48    +850%         rising Sword Art Online Alternative Gun Gale Online  JP
## 49    +250%         rising                                    Humbucker  JP
##    keyword category
## 1      P90        0
## 2      P90        0
## 3      P90        0
## 4      P90        0
## 5      P90        0
## 6      P90        0
## 7      P90        0
## 8      P90        0
## 9      P90        0
## 10     P90        0
## 11     P90        0
## 12     P90        0
## 13     P90        0
## 14     P90        0
## 15     P90        0
## 16     P90        0
## 17     P90        0
## 18     P90        0
## 19     P90        0
## 20     P90        0
## 21     P90        0
## 22     P90        0
## 23     P90        0
## 24     P90        0
## 25     P90        0
## 26     P90        0
## 27     P90        0
## 28     P90        0
## 29     P90        0
## 30     P90        0
## 31     P90        0
## 32     P90        0
## 33     P90        0
## 34     P90        0
## 35     P90        0
## 36     P90        0
## 37     P90        0
## 38     P90        0
## 39     P90        0
## 40     P90        0
## 41     P90        0
## 42     P90        0
## 43     P90        0
## 44     P90        0
## 45     P90        0
## 46     P90        0
## 47     P90        0
## 48     P90        0
## 49     P90        0