PythonとPower BIを使ってテキストマイニングしようとした話

今回はPower BIでテキストマイニングをしてみた話です。私の環境ではAzure Cognitive Serviceを使うことができないのですが、Azure Cognitive Serviceを使わずに日本語で記載されたテキスト（今回は製品のレビューコメント）内のキーワードの出現頻度をWordCloudで可視化してみました。
(私の会社だけかもしれませんが、WordCloudはユーザーの興味をひきやすいので、Power BIの啓蒙活動の時とかにお勧めのビジュアルです！）

Power BIにはWordCloudのビジュアルが用意されていますが、日本語のテキストをそのままWordCloudに読み込むと、日本語が単語単位に分解されずに、文章がそのままみえてきてしまうので、まずはテキストを単語に分解（形態素分析）する必要があります。形態素分析するためによいライブラリがPythonには揃っているのでPythonを使って形態素分析しました。今回は形態素分析するためのライブラリとしてMeCabを使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952241/bb171990-cfa0-c669-5dbe-4d7111d50120.png)

※Power BIではPythonと連携することもできますが、スケジュール更新ができなかったため、今回はPower BI上でのPython連携はせずに、Pythonでテキスト解析した情報を別途Power BIで読み込んでいます。
https://learn.microsoft.com/ja-jp/power-bi/connect-data/desktop-python-scripts

## 準備
・製品のレビューコメント（ShampooLove.csv）
今回はアットコスメのレビューからスクレイピングしたデータを用意しました。
※データの内容（例）
|date  |name  |age |...|product|score|review|...|
|---|---|---|---|---|---|---|---|
|10/5/2022  |Kaori  |29  |   |AAAA|5|香りがよい|  |
|30/8/2022  |Ayako  |34  |   |BBBB|4|髪の毛さらさら|  |
|3/11/2022  |Mari  |20  |   |CCCC|6|パッケージがかわいい|  |

・Python
・Power BI

## 処理の流れ
1.PythonでMecabを使ってレビューコメントを形態素解析
2.Power BIにて形態素解析したデータの読込み
3.Word Cloud作成(カスタムビジュアル)

## 手順
#### 1.PythonでMecabを使って形態素解析
1-1.Pythonにpandas, MeCab, csvライブラリをインポートする
```python
    import pandas as pd
    import MeCab
    import csv
```

1-2.準備した"ShampooLove.csv"を読み込んでMeCabを使って形態素分析する
```python
    df = pd.read_csv('ShampooLove.csv')
    tagger = MeCab.Tagger("-Ochasen")
    
    def extractKeyword(text):
        """Morphological analysis of text and returning a list of nouns, adjective, verb, adverb"""
        node = tagger.parseToNode(text)
        keywords = []
        while node:
            if node.feature.split(",")[0] == u"名詞": 
                keywords.append(node.surface)
            elif node.feature.split(",")[0] == u"形容詞":
                keywords.append(node.feature.split(",")[6])
            elif node.feature.split(",")[0] == u"動詞":
                keywords.append(node.feature.split(",")[6])
            elif node.feature.split(",")[0] == u"副詞":
                keywords.append(node.feature.split(",")[6])
            node = node.next
            
        return keywords
```
1-3.同じファイルに"review-1"という列を作成し、"review"にあるレビューコメントを形態素分析した結果を返す
```python
    df['review-1'] = df['review'].apply(extractKeyword)
```

#### 2.Power BIにて形態素解析したデータの読込み

詳細は省きますが、形態素解析したレビューコメントが含まれるデータ（ShampooLove.csv）をPower BIに読込みます。

#### 3.Word Cloud作成(カスタムビジュアル)
3-1.WordCloudをVisualizations一覧からインポートする
・・・をクリックし、Get more visualsをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952241/bf8804dc-8651-650a-9275-14d08907fe07.png)

Power BI visualsの中からWord Cloudをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952241/9502d980-7cee-ecb6-f100-dabc68745662.png)


3-2.Word Cloudを設定する
Categoryに形態素分析した方の列（"review-1")を設定する。Valuesにも態素分析した方の列（"review-1")を設定し、単語の集計値にするために、Count of "review-1"に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952241/eb129c21-bb67-02b5-40fa-986b6a26f90c.png)


3-3.Stop wordを設定する
Visualの書式設定にて、Word Cloudには表示したくない単語を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952241/4b2e8bce-3a57-73a2-f580-558ecdeac992.png)

すると下記のようなWord Cloudが出来上がります！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952241/f636dd93-70d5-6016-f0e2-2882bb3a83a4.png)


アットコスメのデータには製品の評価（★★★★★）や肌タイプ、年齢などが含まれているのでこれらのデータを掛け合わせてどのようなキーワードが使われているかを見るのも面白そうです。

でもやっぱりAzure Cognitive Serviceは感情分析もできるっていうから使ってみたいですね～