[Перевод] Анализ тональности текста в Excel с помощью Azure Machine Learning и Power Query

Возможно, вы видели пост Joseph Sirosh на прошлой неделе о возможности опубликовать модели Azure Machine Learning в Azure Marketplace, и что MS уже опубликовало некоторое количество API. Для Excel есть специальный аддон, который может используется для доступа к этим API, но я заметил, что как минимум одно API (Sentiment Analysis API) может использоваться напрямую через Power Query.Для того, чтобы сделать это, сперва вам необходимо зайти в Azure Marketplace, войти под вашим Microsoft-аккаунтом и подписаться на Lexicon Based Sentiment Analysis API. В документации говориться, что у вас есть 25000 транзакций в месяц бесплатно. API как таковое очень простое: передайте предложение для оценки, и вам в ответ придет оценка от -1 до 1, где 1 означает положительную тональность, а -1 отрицательную. Для примера, выражение «I had a good day» возвращает значение 1:

8b1ed9b1015a4c35a57c27976f30f562.pngТогда как выражение «I had a bad day» возвращает -1:

8969193978b8494495e7da1f90d5d812.png

Теперь вы можете проследовать в Power Query и кликнуть «From Azure Marketplace» (вам потребуется ввести свои учетные данные, если это первый раз, когда вы используете Azure Marketplace из Power Query):

a4203c5727514976ad99881612b01ea3.png

И затем, когда появится панель «Navigator», дважды щелкните на «Score»:

def19a940d37435086ec9033f1332d7e.png

API представляется как функция в Power Query (я думаю из-за того, что это операция OData-сервиса, но я не уверен), и двойной клик на «Score» вызовет функцию. Вы можете ввести выражение в это поле, и откроется Query Editor для отображения результата оценки:

457facec2b454fa391597fe8b6a10560.png

29ebc7f5e20f474abaf33fdc4666d197.png

Однако, для того, чтобы сделать что-то полезное, надо не просто вызвать функцию «прямо сейчас», надо сделать запрос, который возвращает функцию. Для этого следует немного отредактировать запрос. Перейдите в Advanced Editor, и вы увидите M-код для запроса — он будет выглядеть как-то так:

let Source = Marketplace.Subscriptions (), #«https://api.datamarket.azure.com/data.ashx/aml_labs/lexicon_based_sentiment_analysis/v1/» = Source{[ServiceUrl=«https://api.datamarket.azure.com/data.ashx/aml_labs/lexicon_based_sentiment_analysis/v1/»]}[Feeds], Score1 = #«https://api.datamarket.azure.com/data.ashx/aml_labs/lexicon_based_sentiment_analysis/v1/»{[Name=«Score»]}[Data], #«Invoked FunctionScore1» = Score1(«I had a good day») in #«Invoked FunctionScore1» Вам нужно удалить последнюю строчку (#«Invoked FunctionScore1»), которая вызывает функцию, оставив следующий код:

let Source = Marketplace.Subscriptions (), #«https://api.datamarket.azure.com/data.ashx/aml_labs/lexicon_based_sentiment_analysis/v1/» = Source{[ServiceUrl=«https://api.datamarket.azure.com/data.ashx/aml_labs/lexicon_based_sentiment_analysis/v1/»]}[Feeds], Score1 = #«https://api.datamarket.azure.com/data.ashx/aml_labs/lexicon_based_sentiment_analysis/v1/»{[Name=«Score»]}[Data], #«Invoked FunctionScore1» = Score1(«I had a good day») in Score1 Теперь вы можете кликнуть «Close & Load» для закрытия окна Query Editor. Сейчас у вас есть функция «Score», которую вы можете вызывать из других запросов. Для примера, сделайте следующую Excel-таблицу:

8d3b6be996e043c3a58b575bd157e742.png

Кликните на кнопке «From Table» для загрузки этой таблицы в Power Query, затем в Query Editor«e нажмите «Add Custom Column» и добавьте новую колонку, названую «Sentiment Score» с выражением Score ([Sentence])

ba35822a657949ae89495473fd49ab1d.png

Вам будет предложено установить уровень конфиденциальности для используемых данных, так как вызов этой функции включает в себя отправку данных с вашего листа в API, где, потенциально, кто-то может увидеть их.

1cd840c14b1844db9326e61d1e9a6db1.png

Нажмите «Continue» и установите уровень конфиденциальности для этой рабочей книги как «Public» для того что бы данные могли быть отправлены в API:

aaddd519691748efa401e668bda4a252.png

Нажмите «Save», и вы увидите, что была добавлена колонка «Sentiment Score», содержащая значение «Record». Нажмите на иконку «Expand» в этой колонке и затем «Ok»:

32a2ea2f87b848ec88415653eeba1d77.png

И, наконец, вы увидите, собственно, оценки:

b6bd5312a98a409893b87b5481cfc00c.png

Вот какой получился код:

let Source = Excel.CurrentWorkbook (){[Name=«Table3»]}[Content], #«Added Custom» = Table.AddColumn (Source, «SentimentScore», each Score ([Sentence])), #«Expand SentimentScore» = Table.ExpandRecordColumn (#«Added Custom», «SentimentScore», {«result»}, {«SentimentScore.result»}) in #«Expand SentimentScore» Вы можете загрузить файл с рабочей книгой тут.

Конечно, я не смог устоять и повторил это с моими обновлениями статуса в Facebook — к которым можно очень легко получить доступ из Power Query. Вот среднемесячная оценка тональности моих статусов с июня 2009 года до настоящего времени:

00cf5c66ea904837bb12deaa546e199a.png

Как вы можете видеть, я был в особенно хорошем настроении в августе — возможно, из-за того, что я был в отпуске практически весь месяц.

© Habrahabr.ru