21エリアのTwitterトレンドワードを「R」で取得

# トレンドエリアコード「WOEID」

Twitterのトレンドワードを取得する際、地域（コード = WOEID）を指定できます。
指定できる地域は以下の22個（都市21、日本1）です。

~~~R
         name country    woeid
1  Kitakyushu   Japan  1110809
2     Saitama   Japan  1116753
3       Chiba   Japan  1117034
4     Fukuoka   Japan  1117099
5   Hamamatsu   Japan  1117155
6   Hiroshima   Japan  1117227
7    Kawasaki   Japan  1117502
8        Kobe   Japan  1117545
9    Kumamoto   Japan  1117605
10     Nagoya   Japan  1117817
11    Niigata   Japan  1117881
12 Sagamihara   Japan  1118072
13    Sapporo   Japan  1118108
14     Sendai   Japan  1118129
15  Takamatsu   Japan  1118285
16      Tokyo   Japan  1118370
17   Yokohama   Japan  1118550
18    Okinawa   Japan  2345896
19      Osaka   Japan 15015370
20      Kyoto   Japan 15015372
21      Japan   Japan 23424856
22    Okayama   Japan 90036018
~~~

# APIからWOEID確認する方法

「R」を使う場合、WOEIDは以下のように取得できます。

~~~R
#TwitterAPI認証情報設定。API登録の際に指定された値を指定
consumerKey <- "xxxxx"
consumerSecret <- "xxxxx"
accessToken <- "xxxxx"
accessSecret <- "xxxxx"

#TwitterAPIにログイン
library("twitteR")
options(httr_oauth_cache = TRUE)
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)

#トレンドを拾えるエリアを変数に入れる
woeid <- availableTrendLocations()

#日本のエリアのみフィルタリング
library("dplyr")
woeidj <- woeid %>% filter(country == "Japan")
head(woeidj)
        name country   woeid
1 Kitakyushu   Japan 1110809
2    Saitama   Japan 1116753
3      Chiba   Japan 1117034
4    Fukuoka   Japan 1117099
5  Hamamatsu   Japan 1117155
6  Hiroshima   Japan 1117227
~~~

# トレンドワード抽出

ある地域のトレンドワードは、「getTrends」関数にWOEIDを指定して取得します。

~~~R
#トレンドワード取得例（Tokyo   Japan  1118370）
trend <- getTrends(1118370)
trend$name %>% head()  #neme列に収録されているワードをピックアップ
[1] "#世界まる見え"	"#ForeverGold2"	"#片恋グルメ日記2"	"#有吉ゼミ"	"人身事故"
[6] "西武池袋線"     
~~~

次に、22のエリアからトレンドワードを5つずつ取り出してみます。
（後ほど「Japan」エリアを外して21地域とします）

# エリアごとのワードをループして結合

「for」を使い、冒頭で取得したwoeidj（データフレーム）の3列目のWOEIDの値を「getTrends関数」の引数として1行ずつ処理し、結合（rbind）していきます。

~~~R
#22のエリアの各トレンドワード5つを抽出
trwords = NULL 
for( i in 1 : 22){
trwords_select1 <- getTrends(woeidj[i, 3]) #WOEIDを順々に割り当て
trwords_select1a <- trwords_select1$name %>% head(5) #name列のワードを5つ
trwords <- rbind(trwords, trwords_select1a) #1行ずつ結合
}

#確認
head(trwords)
                 [,1]                [,2]                [,3]                [,4]              
trwords_select1a "ヤクルト"          "#CDTVライブライブ" "キスの日"          "#黄金青春_セクゾ"
trwords_select1a "きたえーる"        "#CDTVライブライブ" "キスの日"          "#恋マジ"         
trwords_select1a "#KIZUNA"           "ヤクルト1000"      "#CDTVライブライブ" "キスの日"        
trwords_select1a "ヤクルト"          "#CDTVライブライブ" "キスの日"          "#黄金青春_セクゾ"
trwords_select1a "ヤクルト"          "#CDTVライブライブ" "キスの日"          "#黄金青春_セクゾ"
trwords_select1a "#CDTVライブライブ" "キスの日"          "#黄金青春_セクゾ"  "#恋マジ"         
                 [,5]                     
trwords_select1a "#恋マジ"                
trwords_select1a "#黄金青春_セクゾ"       
trwords_select1a "#黄金青春_セクゾ"       
trwords_select1a "#恋マジ"                
trwords_select1a "#恋マジ"                
trwords_select1a "#JO1と共に行くよWith_Us"

class(trwords)
[1] "matrix" "array" 
~~~

マトリックス型なので、データフレーム型に変換しました。

~~~R
#データフレーム変換
trwords_df <- as.data.frame(trwords)
~~~

# 地域名列を追加

地域名の列を追加（cbind）します。

~~~R
#地域名列付与
trwords_df2 <- cbind(woeidj[1:22, 1], trwords_df) 
rownames(trwords_df2) <- NULL #今の行名外す
head(trwords_df2)
  woeidj[1:22, 1]                V1                V2                V3               V4
1      Kitakyushu          ヤクルト #CDTVライブライブ          キスの日 #黄金青春_セクゾ
2         Saitama        きたえーる #CDTVライブライブ          キスの日          #恋マジ
3           Chiba           #KIZUNA      ヤクルト1000 #CDTVライブライブ         キスの日
4         Fukuoka          ヤクルト #CDTVライブライブ          キスの日 #黄金青春_セクゾ
5       Hamamatsu          ヤクルト #CDTVライブライブ          キスの日 #黄金青春_セクゾ
6       Hiroshima #CDTVライブライブ          キスの日  #黄金青春_セクゾ          #恋マジ
                       V5
1                 #恋マジ
2        #黄金青春_セクゾ
3        #黄金青春_セクゾ
4                 #恋マジ
5                 #恋マジ
6 #JO1と共に行くよWith_Us
~~~

各列の名称も変更しておきます。

~~~R
colnames(trwords_df2) <- c("area", "trendword1", "trendword2", "trendword3", "trendword4", "trendword5"
~~~

今回、都市だけにしようと思ったので、地域の中に含まれている「日本」（Japan）を外しておきます。

~~~R
#エリアにある「Japan」を外す（都市だけにする）
trwords_df3 <- trwords_df2 %>% filter(area != "Japan")

#確認
tail(trwords_df3)
~~~

# CSV出力

CSVファイルに書き出します。

~~~R
#csv書き出し
library(readr)
write_csv(trwords_df3, "trwords_df3.csv")
~~~

Numbersで開いてみました。
上記の処理を行なったタイミングにずれがあるので、上記処理と下記の出力内容に違いがあるかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1143963/8b149a1f-0dbd-a555-c7a6-936ffc37cc10.png)

**了**