今回はPowerQueryを使って
API接続する方法を紹介します!
どんなAPIに接続するかと言うと…
今回はGoogleが提供している自然言語処理のAI
CloudNaturalLanguage API を使って実装していきます!
これを活用してセリフの感情分析をしてみます!
このAPIを使うには
前もってGoogleCloudPlatformに登録が必要になります。
感情分析に使う文字数が
月に5000文字までだったら今のところ無料だそうです!
とても分かり易い説明のいまにゅさん!
他の動画もとても勉強になりますよ♪♪
それではPowerQueryで実装してみます!
APIを実装してみよう!
かじむー
今回作りたいもの
ではGoogleCloudPlatformの登録を進めていくと
CloudNaturalLanguage API に接続するための
APIキーを取得できます。
そのAPIキーをどこかシートに記入して
テーブル化しておきましょう!
では最終的にこんなものを作りたいと思います!
「テキスト」テーブルに文章を入力して
「感情分析」テーブルを更新すると
どれだけその文章が
ポジティブか?ネガティブか?
出力するものを作ろうと思います!
因みにこのAPIは
文章に対して最小値 -1 最大値 +1 で数値判定をして
その文章のポジティブ度合い・ネガティブ度合が分かります!
例えば画像にあるこの文章!
この冬ドラマsilentの主題歌でヒットした曲
髭男の「subtitle」のサビの部分!
皆さんこの文章は
ネガティブだと思いますか?ポジティブだと思いますか?
更新してみてみると…
「+50%」でポジティブでした!!!
今からこの中身を作っていきます!
シートの情報を読込む
まずはシート上のテーブルに記入した
・APIキー
・文章
を読込みます!
// APIキー
api_key = Excel.CurrentWorkbook(){[Name="api"]}[Content]{0}[api_key],
// 文章
words = Excel.CurrentWorkbook(){[Name="text"]}[Content]{0}[テキスト]
Excel.CurrentWorkbook() 関数を使って
{[Name = “テーブル名“]}[Content]{0}[列名]
と入力すれば取得できます!
この関数を無理やり和訳すると
“〇〇〇”と言う名前のテーブル(Name=”テーブル名”)の
〇〇〇という名前の列(列名)に対して
データ行(Content)の一番上にある(0行目)データを取得
公式リファレンスで作り方を確認しよう
ではAPIに文章を送って
感情値が返ってくる部分を作ります!
要はリクエストする記述を書くのですが
これは公式リファレンスに説明が書いております!
HTTPリクエストはPOST形式で
URLは
https://language.googleapis.com/v1/documents:analyzeSentiment
でリクエストしろって言ってますね!
そしてポストデータ、つまりボディ部分は
Json形式でこのように書けって言ってますね!
因みにJson形式とは辞書型のデータ形式です。
「言葉」に対して「意味」が紐づいてる辞書の様に
「名前」に対して「値」が紐づいている形式です。
ではボディの中身を見てみると
DocumentとencodingTypeという名前に対して値が必要みたいです!
~Document~
Documentの中身を見てみると
typeとcontentとlanguageまたはgcsContentUriと言う設定がありますね。
・type:PLAIN_TEXT
・language:JA
・content:感情分析したい文章(words)
~encodingType~
encodingTypeはUTF8で良いでしょう!
ではPowerQueryでリクエストする関数を見ていきます!
この「Web.Contents」関数を使います!
そして親切にPOST形式のテンプレートがあります!
これをそのまま使っちゃいましょう!
M言語でAPIを実装してみよう
先ほどのテンプレートを、続きにコピペしましょう!
そして中身を先ほど確認した内容に書き換えていきましょう!
// URL
url = "https://language.googleapis.com/v1/documents:analyzeSentiment?" & "key=" & api_key,
// ヘッダー (リクエストするポストデータはJson形式ですよ~)
headers = [#"Content-Type" = "application/json"],
// ボディ (ポストデータはこんな内容です~)
postData = Json.FromValue(
[
document = [
type = "PLAIN_TEXT",
language = "JA",
content = words
],
encodingType = "UTF8"
]
),
// リクエスト
response = Web.Contents(
url,
[
Headers = headers,
Content = postData
]
),
// Json形式の文字列をJson型に変換
jsonResponse = Json.Document(response)
これによって
文章をAPIに渡して感情分析をしてもらい
その結果が返ってきます!
その結果を見てみると…
documentSentimentのscoreが感情の値を表しています!
では全コードを書くとこんな感じです!
let
// APIキー
api_key = Excel.CurrentWorkbook(){[Name="api"]}[Content]{0}[api_key],
// 文章
words = Excel.CurrentWorkbook(){[Name="text"]}[Content]{0}[テキスト],
// URL
url = "https://language.googleapis.com/v1/documents:analyzeSentiment?" & "key=" & api_key,
// ヘッダー (リクエストするポストデータはJson形式ですよ~)
headers = [#"Content-Type" = "application/json"],
// ボディ (ポストデータはこんな内容です~)
postData = Json.FromValue(
[
document = [
type = "PLAIN_TEXT",
language = "JA",
content = words
],
encodingType = "UTF8"
]
),
// リクエスト
response = Web.Contents(
url,
[
Headers = headers,
Content = postData
]
),
// Json形式の文字列をJson型に変換
jsonResponse = Json.Document(response),
// 感情値のみ取得
documentSentiment = jsonResponse[documentSentiment][score]
in
documentSentiment
この数値をシートに出力させれば完了です!
1なら100%、0.5なら50%、-0.5なら-50%て感じですね!
プラスならポジティブ、マイナスならネガティブ!
感情分析で遊んでみよう
かじむー
それではOfficial髭男dism「subtitle」の1番の歌詞を
Aメロ・Bメロ・サビの3つに分けて感情値を出してみると…
かじむー
~全体~
数値だけ見るとサビ前で感情を下げて、サビ入って盛り上げてますね!
ここは感情の振れ幅が大きいので、聞き手の感情が揺さぶられそうですよね。
~Aメロ~
1番のAメロは言い換えるとポジティブとネガティブのせめぎ合い!
君には僕が必要という傲慢さ、騒がしいほどの励ましが、逆に傷つけていたというネガティブさ!
でもそれによって、本当に伝えたい、静かで熱いものに気づいたポジティブさ!
~Bメロ~
綺麗な理想はあるけど、今の僕にはどうする事もできないネガティブさ!
~サビ~
それでも諦められない。愛してるの言葉よりもっと奥に愛が届くまで。というポジティブさ!
かじむー
今回のまとめ
▼API接続する方法
①APIキーを発行する
②Web.Contents関数を使ってリクエスト
APIを使って業務効率化できることは沢山あります!
特にデータ分析を行っている業務では
手動でデータをかき集める手間が省けます!
数値を自動で集めて
すぐに集計結果を出す事ができるのでかなり便利だと思います!
欲しいデータ元でAPIが公開されていれば
是非活用していきましょう!
と言うより今の時代APIを使いこなせる事は必須だと思います!
頑張って習得していきましょう!
かじむー