Power BI Tips - Azure Cognitive Serviceを使ってテキストデータを分析する

#概要
私の所属している会社では、認可の小規模保育事業所を運営しています。
保育園では、毎日子どもごとに日報を作成しています。
日報は、現在Microsoft Azure上に構築した帳票作成システムを使って作成し、
データはAzure SQL Database上に保存されています。

この日報のテキストデータを使って、
・子どもの週ごと、月ごとのおおまかな様子、傾向
・保育士の観察観点
を分析したいと考えています。

今回、これをPower BI（セルフBIツール）とAzure Cognitive Service（MicrosoftのAIサービス）で
やってみた際の備忘録。

Azure Cognitive ServiceのText Analyticsのひとつ
「キーフレーズ抽出」をPower BIからAPIで呼び出して、
結果（文章の要点）をWord Cloudというビジュアルで表現します。


#用意するもの
・テキストデータ（今回はAzure SQL Databaseに入っています）
・Power BI Desktop
・Microsoft Azureのアカウント

#参考ページ
@kenakamu さん
『[Power BI Desktop と Azure Cognitive サービスで GitHub Issue の感情を解析する](https://qiita.com/kenakamu/items/fbf125472effa547819f)』
⇒Power BIでAzure Cognitive Serviceの感情分析を使う方法を解説されています。
　同じ手順で、感情分析ではなくてキーフレーズ抽出を呼び出せます。


#手順
ざっくりいうとこんな感じ。
・Azure Cognitive Serviceの準備
　　　　↓
・Power BIで対象となるデータを取り込み
　　　　↓
・テキストデータ列の一つ一つのデータに対し、関数を使ってAzure Cognitive ServiceのAPIを呼び出し、
　結果（要点）を別の列に出力
　　　　↓
・出力結果列をPower BIのWord Cloudで表示

##Azure Cognitive Serviceの準備
①Microsoft Azureのポータルにログインします。
 https://portal.azure.com/

②検索窓に「Cognitive Services」と入力し、サービスから「Cognitive Services」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/1a98ef62-2b67-7793-ec5b-8b4b67d3c4e4.png)

③以下のような画面が表示されるので、「＋追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/f130f401-01dd-af63-1b0a-d30dd4f92d8c.png)

④以下のような画面が表示されるので、検索窓に「テキスト」と入力し、「テキスト分析」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/a708739b-0eb9-d090-a12e-1fa58e175fbf.png)

⑤次に「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/0c692406-9f43-aa5f-1d50-47a74fc911d5.png)


⑤必要事項を入力し、最後に「作成」をクリックしてください。デプロイが始まります。
　※価格レベルの「Free F0」は、サブスクリプション内で1個しか使えない点にご注意下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/b77e33e8-8b72-c906-3598-f3ae6ce81714.png)

⑥デプロイが完了したら、以下のような画面が表示されます。「リソースに移動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/e6d2ec61-0cff-6d18-5d81-112efd65e28b.png)

⑦左側のメニューの「キーとエンドポイント」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/bb914b1d-2eaf-7fa9-7b04-253b9fc3f7fc.png)

⑧キー１とエンドポイントのURLをコピーしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/33cc46b0-f003-abcf-80a7-1c761219f019.png)


##Power BI側作業
①Power BI Desktopで、対象となるデータを取り込みます。

②リボンのホームタブで、「データの変換」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/ae0ba0ad-fa19-e467-692a-8fd7f6984b62.png)

③Power Queryエディターが起動します。
　リボンのホームタブにある「パラメータの管理」の▼をクリックし、
　表示されたメニューから「新しいパラメータ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/55402bbc-9ac7-5288-8a74-da03a4e2d8bc.png)

④以下のような画面が表示されます。
　ここでは名前を「キーフレーズ用パラメータ」、種類を「テキスト」、提案された値を「任意の値」、
　現在の値を「テスト」に設定し、OKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/9981c1ba-0fd3-3d54-85f2-70b8d19d2927.png)

⑤クエリペイン上の何もないところで右クリックし、
　表示されたメニューから「新しいクエリ」→「空のクエリ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/a5e8319a-d125-7516-4893-0a11526dbf10.png)

⑥新しくクエリが作成されます。作成されたクエリを右クリックします。
　メニューから「名前の変更」を選択し、名前を「キーフレーズ分析」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/6891a9ec-5da9-6a4b-295c-c9bb687f5aeb.png)

⑦再度右クリックして、「詳細エディター」を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/022e907e-0c68-539e-85d5-3621526b3a1a.png)

⑧クエリの詳細エディタが起動するので、
　以下のようなコードを入力します。

```js
let
    URL = "https://XXXXXXXXXXXXXXX/text/analytics/v2.1/keyPhrases",
    Key = "YYYYYYYYYYYYYYY",
    Contents = "{ ""documents"": [ { ""language"": ""ja"", ""id"": 0, ""text"": """ & キーフレーズ用パラメータ & """ } ] }",
    AnalyzedData = Json.Document(Web.Contents(URL, [
        Headers = [#"Ocp-Apim-Subscription-Key"=Key,#"Content-Type"="application/json"],
        Content = Text.ToBinary(Contents)
    ])),
    Documents = AnalyzedData[documents],
    KeyPhrases = Text.Combine(Documents{0}[keyPhrases], ", ")
in
    KeyPhrases
```

XXXXXXXXXXXXXXXとYYYYYYYYYYYYYYYには、
Azure Cognitive Serviceの準備でコピーしておいたエンドポイントURL、キーを設定してください。

⑨キーフレーズ分析を右クリックして、表示されたメニューから「関数を作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/5baf7a16-a95e-e00a-380b-ea0ed05bcb97.png)

⑩以下のような画面が表示されるので、名前に「キーフレーズ分析関数」と入力して、「OK」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/553af7bb-3255-f304-ef3c-7191955b6a19.png)

⑪分析対象の列に、作成した関数を適用して、結果を新しい列に保存するようにします。
　Queryエディターで対象のテーブルを選択します。
　その後、リボンの「列の追加」タブを開き、「カスタム関数呼び出し」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/cd636aad-8e84-e394-cdbb-a4fe805841f1.png)

⑫以下のような画面が表示されます。関数クエリには、先ほど作成した関数を選択してください。
　キーフレーズ用パラメータには、分析対象の列を選びます。
　新しい列名は任意に入力し、最後に「OK」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/e2a310b2-4e91-82ba-0ef8-5ad1fe1d4398.png)


⑬最後にリボンの「ホーム」タブを開き、「閉じて適用」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/407a33b1-bee3-0e55-2a2d-ad9badf7df83.png)

##ビジュアルの準備、表示
上記までの作業でデータが作成できたので、Word Cloudでデータを表示してみます。

①視覚化ペインの中から、「・・・」をクリックし、その他のビジュアルの取得をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/4a9309ea-81a7-d362-14a5-cdf0f4b2b120.png)

②以下のような画面が表示されるので、「データの可視化」カテゴリを選択し、「Word Cloud」の追加ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/3135700d-8cf2-bcdf-50b3-c4c826eab9c6.png)

③視覚化ペインにWord Cloudが追加されるので、クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/b96f94e6-a21f-6222-067f-63e7a0db6902.png)

④Word Cloudがレポートに貼り付けられます。レポート上のWord Cloudが選択された状態で、
　フィールド内にある分析対象の項目をドラッグ＆ドロップでカテゴリにセットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/3d9e7a10-b1cc-e4ff-261a-2e3f6a408418.png)

⑤分析結果が表示されます。頻出する要点が大きな文字で表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/c9a43fc4-52ad-6fbf-e799-1a8daafe6a5b.png)