Databricksで日本語ワードクラウドを作成する

以前、[matplotlibで日本語の表示に苦戦](https://qiita.com/taka_yayoi/items/f35a9c288966dc7077bb)したのと同じような状況になりました。

Databricksのクラスターにはデフォルトで日本語フォントが入っていないので、当然ですが日本語のワードクラウドを表示しようとすると文字化けします。
![Screen Shot 2022-03-27 at 9.35.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e543b5db-65b3-4d36-c8b6-1ad0738799b0.png)

以下の手順で日本語のワードクラウドを表示することができました。

# 日本語フォントのインストール

## initスクリプトの作成

Databricksクラスターに日本語フォントをインストールするinitスクリプトを準備します。

```py:Python
# init script格納ディレクトリの作成
dbutils.fs.mkdirs("dbfs:/databricks/scripts/")
```

```py:Python
# init scriptの作成
dbutils.fs.put("/databricks/scripts/japanese-font-install.sh","""
#!/bin/bash
apt-get install fonts-takao-mincho fonts-takao-gothic fonts-takao-pgothic -y""", True)
```

initスクリプトが作成されたことを確認します。

```py:Python
display(dbutils.fs.ls("dbfs:/databricks/scripts/japanese-font-install.sh"))
```

![Screen Shot 2022-03-27 at 9.38.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ac9e0a50-b25f-9f12-ed41-841fca142a1e.png)

## クラスターのinitスクリプトの設定

クラスター起動時に、上のステップで作成したinitスクリプトを読み込むように設定します。

1. クラスターの詳細画面に移動します。**編集**ボタンをクリックします。
1. **高度なオプション**を展開します。
1. **initスクリプト**タブをクリックします。
![Screen Shot 2022-03-27 at 9.39.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3e7600ea-ade4-bea2-1989-f21be9182d31.png)
1. initスクリプトのパスに上で作成したinitスクリプトのパスを入力します。この場合は、`dbfs:/databricks/scripts/japanese-font-install.sh`と入力し、**追加**ボタンをクリックします。
![Screen Shot 2022-03-27 at 9.41.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/29f04179-3edc-2263-559f-e320e0570abc.png)
![Screen Shot 2022-03-27 at 9.41.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1db14fde-c6dc-f9b4-4622-3467537fd285.png)
1. 画面上部の**確認して再起動**ボタンをクリックします。

# 日本語ワードクラウドの作成

wordcloudのライブラリをインストールします。クラスターライブラリとしてインストールしておけば、クラスターが起動するたびに`%pip install wordcloud`を実行する必要がないので楽です。
![Screen Shot 2022-03-27 at 9.44.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1155273b-f7a7-1c6c-4d67-f3cebe7a5bc9.png)

ライブラリをインポートします。

```py:Python
import matplotlib.pyplot as plt
from wordcloud import WordCloud
```

日本語フォントがインストールされていることを確認します。

```sh:Shell
%sh
fc-list | grep -i Takao
```
![Screen Shot 2022-03-27 at 9.49.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7c55021f-226c-ebe8-f1ab-a2302159dafe.png)

単語のリストを引数としてワードクラウドを表示する関数を作成します。こちらの記事の関数を引用させていただきました。上のフォントファイルパスを`font_path`に指定します。

https://qiita.com/kyoro1/items/59216cc09b56d5b5f760

```py:Python
def depict_word_cloud(noun_list):
    ## 名詞リストの要素を空白区切りにする(word_cloudの仕様)
    noun_space = ' '.join(map(str, noun_list))
    ## word cloudの設定(フォントの設定)
    wc = WordCloud(background_color="white", font_path=r"/usr/share/fonts/truetype/fonts-japanese-gothic.ttf", width=300,height=300)
    wc.generate(noun_space)
    ## 出力画像の大きさの指定
    plt.figure(figsize=(5,5))
    ## 目盛りの削除
    plt.tick_params(labelbottom=False,
                    labelleft=False,
                    labelright=False,
                    labeltop=False,
                   length=0)
    ## word cloudの表示
    plt.imshow(wc)
    plt.show()
```

再度ワードクラウドを表示してみます。

```py:Python
word_list = ["テスト", "テスト", "お好み焼き", "たこ焼き", "お寿司", "お寿司", "お寿司", "お寿司"]
depict_word_cloud(word_list)
```

無事に日本語ワードクラウドが表示されました。テキストデータを対象としたEDA(探索的データ分析)ではワードクラウドは有効だと思います。

![Screen Shot 2022-03-27 at 9.51.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/de2991be-66b4-ce2c-0927-9e5fb1124afe.png)


### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)