Как использовать Python для визуализации временных рядов общественного мнения?

Python Excel pandas NLP

Как выполнить пакетный анализ тональности информации комментариев и визуализировать его на временной шкале? Анализ настроений не сложен, давайте реализуем его на Python.

Болевые точки

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

Отсюда вы узналианализ эмоцийЭтот простой в использовании инструмент автоматизации неожиданно увидел свет.

Вы нашли страницу одной из своих веток на известном сайте обзоров и попросили помощника получить вышеуказанные обзоры и данные о времени выпуска. Поскольку помощник не будет использоватьрептилия, поэтому вы можете копировать и вставлять комментарии только с веб-страницы в Excel. Когда я вышел с работы, у меня было только 27. (Обратите внимание, что здесь мы используем реальные данные отзывов. Во избежание путаницы у проверяемых продавцов название ресторана заменено на «Ресторан». Здесь поясняется.)

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

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

Как это сделать?

последовательность

Естественно есть способы. Мы можем использоватьЗанимать или не брать: как использовать Python и машинное обучение, чтобы решить?«Фрейм данных, представленный в статье, может обрабатывать несколько данных одновременно для повышения эффективности.

Но этого недостаточно, мы также можем визуализировать результаты анализа настроений во временных рядах. Таким образом, вы можете с первого взгляда увидеть тенденции — люди в последнее время больше или меньше довольны ресторанами?

Мы, люди, лучше всего умеем обрабатывать изображения. Потому что долгая эволюционная история заставляет нас постоянно улучшать способность быстро и точно обрабатывать изображения, иначе мы будем уничтожены окружающей средой. Отсюда поговорка «картинка стоит тысячи слов».

Подготовить

Во-первых, вам нужно установить пакет Anaconda. Подробные этапы процесса см.Как сделать облако слов в Python" статья.

Файл Excel, который наконец сделал помощникrestaurant-comments.xlsx, пожалуйста, начинайтездесьскачать.

Открыть с Excel, если все нормально, переместите файл в наш рабочий каталог Demo.

Поскольку в этом примере нам нужно проанализировать комментарии на китайском языке, используется программный пакет SnowNLP. Основные методы применения анализа тональности см. в разделе "Как сделать анализ настроений с помощью Python?".

Перейдите в «Терминал» вашей системы (macOS, Linux) или «Командная строка» (Windows), войдите в демо-версию нашего рабочего каталога и выполните следующие команды.

pip install snownlp
pip install ggplot

Операционная среда настроена.

В терминале или командной строке введите:

jupyter notebook

Если Jupyter Notebook работает правильно, мы можем начать писать код.

код

Мы создаем новую записную книжку Python 2 в Jupyter Notebook под названием time-series.

Во-первых, мы представляем инструмент анализа фреймов данных Pandas, сокращенно pd для простоты вызова.

import pandas as pd

Затем прочитайте в файле данных Excel:

df = pd.read_excel("restaurant-comments.xlsx")

Давайте посмотрим, завершено ли чтение:

df.head()

Результат выглядит следующим образом:

Обратите внимание на колонку времени здесь. Если формат времени в вашем файле Excel такой же, как здесь, включая дату и время, то Pandas будет очень умным, чтобы помочь вам распознать его как формат времени, а затем продолжить.

И наоборот, если время, которое вы получаете, точно соответствует дате, например «2017-04-20», то Pandas будет рассматривать его только как строку, и последующий анализ временных рядов не может использовать строковые данные. Решение состоит в том, чтобы добавить сюда следующие две строки кода:

from dateutil import parser
df["date"] = df.date.apply(parser.parse)

Таким образом, у вас будут правильные данные о времени.

Убедившись, что данные полны и верны, мы проведем анализ настроений. Давайте проведем небольшой эксперимент с первой строкой комментариев.

text = df.comments.iloc[0]

Затем мы вызываем инструмент анализа настроений SnowNLP.

from snownlp import SnowNLP
s = SnowNLP(text)

Показать результаты анализа SnowNLP:

s.sentiments

Результат:

0.6331975099099649

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

def get_sentiment_cn(text):
    s = SnowNLP(text)
    return s.sentiments

Затем мы используем мощный оператор применения в Python для одновременной обработки всех комментариев и сохраняем сгенерированные значения тональности в виде отдельного столбца во фрейме данных, называемого тональностью.

df["sentiment"] = df.comments.apply(get_sentiment_cn)

Давайте посмотрим на результаты анализа настроений:

df.head()

Создана новая тональность столбца. Ранее мы представили, что результаты SnowNLP варьируются от 0 до 1, что представляет вероятность положительного результата анализа настроений. Наблюдая за первыми несколькими фрагментами данных, мы обнаружили, что на веб-сайте обзора отзывы клиентов об этой ветке в целом положительные, а некоторые комментарии очень положительные.

Однако наблюдение небольшого количества данных может привести к необъективности наших выводов. Усредним все результаты анализа настроений. использоватьmean()функция.

df.sentiment.mean()

Результат:

0.7114015318571119

Результат выше 0,7, а общее отношение покупателей к этому магазину положительное.

Давайте снова посмотрим на медианное значение, используемая функцияmedian().

df.sentiment.median()

Результат:

0.9563139038622388

Мы обнаружили кое-что интересное — медиана не только выше среднего, но и почти близка к 1 (полностью положительная).

Это означает, что большинство отзывов односторонние и очень довольны. Тем не менее, есть несколько выбросов, которые значительно ниже среднего.

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

Нам нужно использовать набор инструментов для построения графиков ggplot. Этот инструментарий изначально был доступен только в R, что вызывало у пользователей других инструментов анализа данных слюни от зависти. К счастью, вскоре он был портирован на платформу Python.

Мы импортируем функции построения графиков из ggplot и позволяем Jupyter Notebook напрямую отображать изображения.

%pylab inline
from ggplot import *

Здесь могут быть сообщения о некоторых предупреждающих сообщениях. Это не имеет значения, просто игнорируйте это.

Далее рисуем график. Здесь вы можете ввести следующую строку утверждения.

ggplot(aes(x="date", y="sentiment"), data=df) + geom_point() + geom_line(color = 'blue') + scale_x_date(labels = date_format("%Y-%m-%d"))

Вы можете видеть, насколько кратким и удобным является синтаксис построения графиков ggplot. Просто скажите Python, какой фрейм данных вы хотите использовать, какой столбец выбрать в качестве горизонтальной оси и какой столбец в качестве вертикальной оси, сначала нарисуйте точки, затем соедините линии, и вы можете указать цвет линий. Затем нужно сделать так, чтобы дата по оси X отображалась в каком формате. Все настройки параметров очень похожи на естественный язык, интуитивно понятны и понятны.

После выполнения вы можете увидеть полученный график.

На графике мы видим, что многие значения анализа тональности положительных отзывов чрезвычайно высоки. В то же время мы также четко обнаружили те несколько точек с крайне низкими значениями. Значение анализа тональности соответствующего комментария близко к 0. Эти комментарии были оценены Python как практически не вызывающие положительных эмоций.

Что касается времени, то в последнее время почти каждые несколько дней появлялась относительно серьезная негативная оценка.

Как менеджер, вы можете быть на иголках. Надеюсь скоро узнать, что случилось. Вам не нужно рыться во фрейме данных или файле Excel, чтобы найти отзывы с самыми низкими оценками тональности. Pandas dataframe Python предоставляет вам очень хорошие возможности сортировки. Предположим, вы хотите найти тот, у которого самое низкое значение анализа тональности среди всех комментариев, вы можете сделать это так:

df.sort(['sentiment'])[:1]

Результат:

Результат анализа настроений почти 0! Однако этот фрейм данных показывает, что информация комментария неполная. Нам нужно напечатать отзыв целиком.

print(df.sort(['sentiment']).iloc[0].comments)

Полная информация обзора выглядит следующим образом:

На этот раз это выпало на День святого Валентина. Я никогда раньше не выходила на День святого Валентина. Это не потому, что у меня нет парня, а потому, что я чувствую, что везде много людей, поэтому я намеренно разношу его. очень жажду ресторана А, поэтому он вышел как раз к дню. с 4 часов дня я увидел, что номер очереди больше 100. если я ехал из дома и в течение часа стояла пробка ,я увидела что буду стоять в очереди онлайн на два часа вперед.Я получила номер.Мы приехали примерно в 6:30.Когда мы приехали,я увидела,что перед номером всего 30 цифр.Я думала это будет не проблема Я мог бы съесть это через некоторое время. , с того момента, как мы добрались туда и сели в зоне ожидания, было от десяти до двадцати одного звонка. Я много раз хотел уйти посередине, ха-ха, эй, Я не ел до девяти утра, и официант этого не чувствовал. Раньше я был задумчивым, когда был свободен, но это точно. Один человек отвечает за несколько столов. так много людей на фестивале, это должно быть очень утомительно, поэтому большинство поручений делаю я.Далее, обстановка хорошая с точки зрения гигиены, но немного слишком шумно, а вкус все тот же как и прежде,но самое гуманное в ресторане А это то,что мы ждали больше двух часов и подошли делать нам скидку.Карта,и ей можно одновременно пользоваться,чувствует себя хорошо.Это действительно ресторан А, но он более гуманный, чем средний, но в этот раз я выбрал не тот день Фестиваль идет, так жарко!

Чтение, вы можете увидеть, что у этого клиента был плохой опыт - время ожидания было так много времени, что использовалось слово «трагедия»; были также упоминания плохого обслуживания и шумной окружающей среды. Это появление этих слов, что делает результат анализа очень низким.

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

Из этого примера видно, что, хотя анализ настроений может автоматизировать многие вещи, вы можетене полностьюзависеть от этого.

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

Однако, даже если текущий процесс автоматизации анализа настроений не очень точен, он все же может помочь вам быстро обнаружить те аномалии, которые могут быть проблематичными. По эффективности она намного выше ручной обработки.

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

Поздравляю, менеджер! В эпоху интеллектуального анализа данных вы уже вступаетеправильныйнаправление.

Теперь пришло время вам прочитать следующий негативный отзыв...

Обсуждать

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

Лайк пожалуйста лайк. Вы также можете подписаться на мой публичный аккаунт в WeChat и закрепить его."Юшу Чжилань" (нкваншуйи).

Если вы интересуетесь наукой о данных, вы можете прочитать мою серию постов с учебными указателями "Как эффективно начать работу с наукой о данных?", есть более интересные задачи и решения.