はじめに
今回紹介する、gtrendsR
は、Google Trendsの情報を取得・表示するためのパッケージである。
そもそも、Google Trendsは、Googleが提供する無料ツールで、Googleの検索エンジンでの検索クエリの人気動向を分析できる。現在、Google検索のシェアが、世界中で約90%とほぼ独占状態であることからも、このワードトレンドの重要度が分かる。
つまりは、市場調査の観点からも、どの国・地域で、どのような行動、ワードが、どういう時系列でトレンドになっているかを素早く把握できるのは良い。
この記事では、gtrendsRでGoogle検索のトレンドデータを取得して、plotlyによるインタラクティブな可視化などをやってみる。検索の実行例は、アメリカ株ネタにやや偏っているが、あしからず。
gtrendsRなどの関連パッケージのインストール
さっそく、gtrendsRなどの関連パッケージをインストールしてみる。
#パッケージ・インストール pack <- c("gtrendsR", "plotly", "magrittr") install.packages(pack[!(pack %in% unique(rownames(installed.packages())))]) #ロード for(n in 1:length(pack)){ eval(parse(text = paste0("library(", pack[n], ")"))) }; rm("n", "pack")
gtrendsの使い方
次に、gtrends関数の使い方をまとめてみた。 この関数では、keyword、geo、timeの引数設定をよく使うことになる。
#gtrendsの使い方 gtrends( keyword , geo , time = "today+5-y", gprop = "web" ) #引数について #keyword: Google Trends query キーワードである文字ベクトル。複数のキーワード入力も可。 #geo: queryの地理的な地域を示す文字ベクトル。世界中の場合には、"all"を指定する。 #また上記の国コードなどを使用することで、複数の国・地域を指定できる。 #time: queryの期間を指定する文字列。以下を参照のこと。 #"now 1-H" 最後の1時間 #"now 4-H" 最後の4時間 #"now 1-d" 最後の1日 #"now 7-d" 過去7日間 #"today 1-m" 過去30日間 #"today 3-m" 過去90日 #"today 12-m" 過去12ヶ月 #"today+5-y" 過去5年間(デフォルト) #"all" Google Trends の開始時(2004 年)から #"Y-m-d Y-m-d" 2つの日付の間で指定(例:「2010-01-01 2010-04-03」) #gprop: トレンドクエリを収集する Google product を定義する文字列。「web」(デフォ)のままで良いと思う。
代表的な国コード
また、gtrendsRで使う、国コード(country_code)・地域コード(sub_code)は、countriesというデータに格納されている。
代表的な国コードには、日本(JP)、アメリカ(US)、カナダ(CA)、イギリス(GB)などがある。 また、地域コードだと、東京(JP-13)、大阪(JP-27)、ニューヨーク(US-NY)、カリフォルニア(US-CA)などがある。
実際のcountriesからの取り出し方を、以下に記した。
#国コード(country_code)・地域コード(sub_code)の取得 data("countries") head(countries) # country_code sub_code name #1 AF <NA> AFGHANISTAN #2 AF AF-BDS BADAKHSHAN #3 AF AF-BDG BADGHIS #4 AF AF-BGL BAGHLAN #5 AF AF-BAL BALKH #6 AF AF-BAM BAMIAN #アメリカUSの州・都市 head(countries[grepl("^US-", countries$sub_code),]) # country_code sub_code name #3796 US US-AL ALABAMA #3797 US US-AK ALASKA #3798 US US-AZ ARIZONA #3799 US US-AR ARKANSAS #3800 US US-CA CALIFORNIA #3801 US US-CO COLORADO #日本JPの都道府県 head(countries[grepl("^JP-", countries$sub_code),]) # country_code sub_code name #2038 JP JP-23 AITI [AICHI] #2039 JP JP-05 AKITA #2040 JP JP-02 AOMORI #2041 JP JP-38 EHIME #2042 JP JP-21 GIHU [GIFU] #2043 JP JP-10 GUNMA #その他の取得例 #アメリカのカリフォルニア head(countries[grepl("US", countries$country_code) & grepl("CALIFORNIA", countries$name),]) # country_code sub_code name #3800 US US-CA CALIFORNIA #102327 US US-MD CALIFORNIA #102328 US US-MO CALIFORNIA #102329 US US-PA CALIFORNIA #102330 US US-CA CALIFORNIA CITY #ニューヨーク head(countries[grepl("New York", countries$name),]) # country_code sub_code name #122761 US US-NY New York, NY #東京 head(countries[grepl("TOKYO", countries$name),]) # country_code sub_code name #2077 JP JP-13 TOKYO [TOKYO] #79623 JP JP-13 ARIAKE, TOKYO #79697 JP JP-13 CHUO-KU/TOKYO #79806 JP JP-13 FUTAMI, TOKYO #79831 JP JP-13 HABU, TOKYO #79869 JP JP-13 HANEDA APT/TOKYO #大阪 head(countries[grepl("OSAKA", countries$name),]) # country_code sub_code name #2069 JP JP-27 OSAKA [OSAKA] #79702 JP JP-27 DAITO, OSAKA #79914 JP JP-27 HIGASHI-OSAKA #79915 JP JP-27 HIGASHIOSAKA CITY #80114 JP JP-27 IZUMI, OSAKA #80358 JP JP-27 KONOHANA-KU, OSAKA
gtrendsのシンプルな実行例
keywordやgeoについて条件を変えて、トレンド検索を実行してみた。
実行例(1)NASDAQのトレンドを国別で12ヶ月分取得して、折れ線プロットを描く
まずは、NASDAQ(ナスダック)のトレンドを、カナダ(CA)と米国(US)、日本(JP)で12ヶ月分取得して、gtrendsRの折れ線プロットをしてみた。
#実行例(1) res01 <- gtrendsR::gtrends(keyword = c("NASDAQ"), geo = c("US", "CA", "JP"), gprop="web", time = "today 12-m") plot(res01) #quartz.save(file = paste0("./Graph_01.png"), type = "png", dpi=150); dev.off()
実行例(2)NASDAQ銘柄のトレンドを、米国(US)で12ヶ月分取得して、折れ線プロットを描く
次に、NASDAQ、TSLA(テスラ)、PLTR(パランティア)、ZM(ズーム), ARKKのトレンドを、米国(US)で12ヶ月分取得して、gtrendsRの折れ線プロットをしてみた。
#実行例(2) res02 <- gtrendsR::gtrends(keyword = c("NASDAQ", "TSLA", "PLTR", "ZM", "ARKK"), geo = c("US"), gprop="web", time = "today 12-m") plot(res02) #quartz.save(file = paste0("./Graph_02.png"), type = "png", dpi=150); dev.off()
TSLAの人気はやはりすごい。
ただ、ここで、Googleトレンドの検索指数は、対象期間内のピークを100とした相対値である。
そのため、取得期間や検索語の組み合わせで、上図の通り、検索指数が変わってくるので、その点は注意する必要である。
あと、同時に検索できるキーワード数は、5つまでのようだ*1。
実行例(3)market crashやmarket highとかのキーワード検索
続いて、market crashやmarket highとかのキーワードで検索してみると。。
#実行例(3) res03 <- gtrendsR::gtrends(keyword = c("market crash", "stock crash", "stock high"), geo = c("US"), gprop="web", time = "2021-01-01 2021-03-25") plot(res03) #quartz.save(file = paste0("./Graph_03.png"), type = "png", dpi=150); dev.off()
「stock high」は少し先に反応しているようにも見える。
また、「market high」でも検索してみた(省略)が、それはあまり使わないワードみたい。。。
実行例(4)最近のロビンフット(米国株の人気銘柄)のトレンド
さらに、最近のrobinhoodのトレンドはどうだったのかと思い、それも検索してみた。
#実行例(4) res04 <- gtrendsR::gtrends(keyword = c("robinhood"), geo = c("US"), gprop="web", time = "2021-01-01 2021-03-25") plot(res04) #quartz.save(file = paste0("./Graph_04.png"), type = "png", dpi=150); dev.off()
やっぱり、ゲームストップ事件のあたりで、一時期サチってたのかもね。
plotlyを使った可視化の実行
これくらい遊んだところで、plotlyを使った可視化も実行してみた。
#トレンドデータの取り出し res04 %>% .$interest_over_time -> res04.i head(res04.i) # date hits keyword geo time gprop category #1 2021-01-01 2 robinhood US 2021-01-01 2021-03-25 web 0 #2 2021-01-02 4 robinhood US 2021-01-01 2021-03-25 web 0 #3 2021-01-03 4 robinhood US 2021-01-01 2021-03-25 web 0 #4 2021-01-04 5 robinhood US 2021-01-01 2021-03-25 web 0 #5 2021-01-05 5 robinhood US 2021-01-01 2021-03-25 web 0 #6 2021-01-06 4 robinhood US 2021-01-01 2021-03-25 web 0 #グラフ作成 fig <- plotly::plot_ly() fig <- fig %>% add_trace(x=res04.i$date, y = res04.i$hits, name = 'robinhood', mode = 'lines') fig <- fig %>% layout(yaxis = list( title = "Search index")) fig #保存 #fig %>% htmltools::save_html(file="Graph_05.html")
まとめ
簡単に、トレンド解析できるのは大変良い。
ただ、検索語をどれにするかとか、適切にキーワードを選択できるかは悩みどころかも。
補足
r-bloggersをもとに改変版コードを作ってみた
r-bloggersでの実行コードが為になったので、その記事をもとに改変版コードを作成して実行してみた。
#install.packages("gtrendsR") library(gtrendsR) #install.packages("tidyverse") library(tidyverse) #install.packages("ggthemes") library(ggthemes) gtrends(keyword = "robinhood", geo = "US", time = "today 12-m") -> results results %>% summary() # Length Class Mode #interest_over_time 7 data.frame list #interest_by_country 0 -none- NULL #interest_by_region 5 data.frame list #interest_by_dma 5 data.frame list #interest_by_city 5 data.frame list #related_topics 6 data.frame list #related_queries 6 data.frame list results %>% .$interest_over_time %>% glimpse() #Rows: 52 #Columns: 7 #$ date <dttm> 2020-03-29, 2020-04-05, 2020-04-12, 2020-04-19, 2020-… #$ hits <int> 7, 7, 9, 8, 9, 8, 8, 8, 6, 9, 12, 13, 8, 7, 8, 8, 7, 7… #$ keyword <chr> "robinhood", "robinhood", "robinhood", "robinhood", "r… #$ geo <chr> "US", "US", "US", "US", "US", "US", "US", "US", "US", … #$ time <chr> "today 12-m", "today 12-m", "today 12-m", "today 12-m"… #$ gprop <chr> "web", "web", "web", "web", "web", "web", "web", "web"… #$ category <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, … results %>% .$interest_over_time %>% ggplot(aes(x = date, y = hits)) + geom_line(colour = "darkblue", size = 1) + facet_wrap(~keyword) + ggthemes::theme_economist() #quartz.save(file = paste0("./Graph_robinhood.png"), type = "png", dpi=150); dev.off()
やっぱ、2月は、robinhoodバブルだったのかもね。
参考資料
https://cran.r-project.org/web/packages/gtrendsR/gtrendsR.pdf
*1:length(keyword) <= 5 is not TRUE