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 の感情を解析する
⇒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」を選択します。

③以下のような画面が表示されるので、「+追加」をクリックします。

④以下のような画面が表示されるので、検索窓に「テキスト」と入力し、「テキスト分析」を選択します。

⑤次に「作成」をクリックします。

⑤必要事項を入力し、最後に「作成」をクリックしてください。デプロイが始まります。
 ※価格レベルの「Free F0」は、サブスクリプション内で1個しか使えない点にご注意下さい。

⑥デプロイが完了したら、以下のような画面が表示されます。「リソースに移動」をクリックします。

⑦左側のメニューの「キーとエンドポイント」をクリックします。

⑧キー1とエンドポイントのURLをコピーしておいてください。

Power BI側作業

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

②リボンのホームタブで、「データの変換」をクリックします。

③Power Queryエディターが起動します。
 リボンのホームタブにある「パラメータの管理」の▼をクリックし、
 表示されたメニューから「新しいパラメータ」を選択します。

④以下のような画面が表示されます。
 ここでは名前を「キーフレーズ用パラメータ」、種類を「テキスト」、提案された値を「任意の値」、
 現在の値を「テスト」に設定し、OKをクリックします。

⑤クエリペイン上の何もないところで右クリックし、
 表示されたメニューから「新しいクエリ」→「空のクエリ」を選択します。

⑥新しくクエリが作成されます。作成されたクエリを右クリックします。
 メニューから「名前の変更」を選択し、名前を「キーフレーズ分析」にします。

⑦再度右クリックして、「詳細エディター」を選択してください。

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

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、キーを設定してください。

⑨キーフレーズ分析を右クリックして、表示されたメニューから「関数を作成」を選択します。

⑩以下のような画面が表示されるので、名前に「キーフレーズ分析関数」と入力して、「OK」をクリックしてください。

⑪分析対象の列に、作成した関数を適用して、結果を新しい列に保存するようにします。
 Queryエディターで対象のテーブルを選択します。
 その後、リボンの「列の追加」タブを開き、「カスタム関数呼び出し」をクリックします。

⑫以下のような画面が表示されます。関数クエリには、先ほど作成した関数を選択してください。
 キーフレーズ用パラメータには、分析対象の列を選びます。
 新しい列名は任意に入力し、最後に「OK」ボタンをクリックします。

⑬最後にリボンの「ホーム」タブを開き、「閉じて適用」をクリックします。

ビジュアルの準備、表示

上記までの作業でデータが作成できたので、Word Cloudでデータを表示してみます。

①視覚化ペインの中から、「・・・」をクリックし、その他のビジュアルの取得をクリックします。

②以下のような画面が表示されるので、「データの可視化」カテゴリを選択し、「Word Cloud」の追加ボタンをクリックします。

③視覚化ペインにWord Cloudが追加されるので、クリックします。

④Word Cloudがレポートに貼り付けられます。レポート上のWord Cloudが選択された状態で、
 フィールド内にある分析対象の項目をドラッグ&ドロップでカテゴリにセットします。

⑤分析結果が表示されます。頻出する要点が大きな文字で表示されます。