ggwordcloudを使って、愛と感謝のワードを嵐のロゴにビジュアル化する

![hearth&arashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481830/f7ddc2ce-ea7c-c050-0a0d-d89d8fd007d9.png)

# はじめに
アイドルグループの嵐が2021年から活動を休止します。
嵐に、wordcloudを用いて愛と感謝を込めてみました。
マスクシェイプ画像ファイルを使用して希望する形にwordcloudを表示したい場合は、パッケージwordcloud2を使用しますが、今回はwordcloud2の代わりに、ggwordcloudを使用しています。
ggwordcloudはグラフィック関数ggplot2を使ってwordcloud2と同様のアルゴリズムで表示することができます。wordcloud2はRmarkdownでは複数の結果を表示するのは難しいのですが、ggwordcloudは複数の結果を簡単に表示することができます。

# 開発環境
OS: Windows10
R4.02

#パッケージ"ggwordcloud"とデータセットの読み込み

```R:package
library(ggwordcloud)
data("love_words")
data("thankyou_words")
print(str(love_words))
print(str(thankyou_words))
```

ggwordcloudについては下記のサイトをご覧ください。
[ggwordcloud: a word cloud geom for ggplot2](https://cran.r-project.org/web/packages/ggwordcloud/vignettes/ggwordcloud.html)
[Package ‘ggwordcloud’](https://cran.r-project.org/web/packages/ggwordcloud/ggwordcloud.pdf)
2つのデータセット"love_words"と"thankyou_words"が付属しています。2つのデータセットのデータ構成について関数str()で表示した結果です。
"love_words"　

> tibble [147 x 4] (S3: tbl_df/tbl/data.frame)
> $ lang           : chr [1:147] "zh" "en" "es" "ar" ...
> $ word           : chr [1:147] "愛" "Love" "Amor" "<U+062D><U+0628>" ...
> $ native_speakers: num [1:147] 1200 400 480 245 322 76.8 260 77 220 154 ...
> $ speakers       : num [1:147] 1200 800 555 515 442 ...

"thankyou_words"

> tibble [133 x 5] (S3: tbl_df/tbl/data.frame)
>  $ iso_639_3      : chr [1:133] "zho" "eng" "spa" "ara" ...
>  $ word           : chr [1:133] "謝謝" "Thank you" "Gracias" "<U+0634><U+0643><U+0631><U+0627>" ...
>  $ name           : chr [1:133] "Chinese" "English" "Spanish" "Arabic" ...
>  $ native_speakers: num [1:133] 1200 400 480 245 322 76.8 260 77 220 154 ...
>  $ speakers       : num [1:133] 1200 800 555 515 442 ...


# ggwordcloudでデータセット"love_words"をクラウド表示

```{R: ggwordcloud_love_words}
set.seed(42)
ggplot(
  love_words,
  aes(
    label = word, size = speakers,
    color = speakers
  )
) +
  geom_text_wordcloud_area(aes(angle = 45 * sample(-2:2, nrow(love_words),
    replace = TRUE,
    prob = c(1, 1, 4, 1, 1)
  )),
  mask = png::readPNG(system.file("extdata/arashi2.png",
    package = "ggwordcloud", mustWork = TRUE
  )),
  rm_outside = TRUE
  ) +
  scale_size_area(max_size = 40) +
  theme_minimal() +
  scale_color_gradient(low = "darkred", high = "red")
```

`mask = png::readPNG(system.file("extdata/arashi2.png",`
とありますが、マスクに使う画像ファイルはRのlibraryフォルダの下記のパスに保存しておきます。
library\ggwordcloud\extdata

データセット"thankyou_words"についても同様のスクリプトです。


#通しのスクリプト
マスクの画像はデフォルトで保存されている、hearth.pngに代えています。

```R:ggwordcloud
library(ggwordcloud)
data("love_words")
data("thankyou_words")
print(str(love_words))
print(str(thankyou_words))

set.seed(42)
ggplot(
  love_words,
  aes(
    label = word, size = speakers,
    color = speakers
  )
) +
  geom_text_wordcloud_area(aes(angle = 45 * sample(-2:2, nrow(love_words),
    replace = TRUE,
    prob = c(1, 1, 4, 1, 1)
  )),
  mask = png::readPNG(system.file("extdata/hearth.png",
    package = "ggwordcloud", mustWork = TRUE
  )),
  rm_outside = TRUE
  ) +
  scale_size_area(max_size = 40) +
  theme_minimal() +
  scale_color_gradient(low = "darkred", high = "red")

ggplot(
  thankyou_words,
  aes(
    label = word, size = speakers,
    color = speakers
  )
) +
  geom_text_wordcloud_area(aes(angle = 45 * sample(-2:2, nrow(thankyou_words),
    replace = TRUE,
    prob = c(1, 1, 4, 1, 1)
  )),
  mask = png::readPNG(system.file("extdata/hearth.png",
    package = "ggwordcloud", mustWork = TRUE
  )),
  rm_outside = TRUE
  ) +
  scale_size_area(max_size = 40) +
  theme_minimal() +
  scale_color_gradient(low = "darkred", high = "red")
```

こちらにも実行結果をアップしてあります。
https://www.yanwari-data.com/entry/2021/01/02/155958


参考:
[ggwordcloud: a word cloud geom for ggplot2](https://cran.r-project.org/web/packages/ggwordcloud/vignettes/ggwordcloud.html)
[Package ‘ggwordcloud’](https://cran.r-project.org/web/packages/ggwordcloud/ggwordcloud.pdf)