С развитием технологий мы переходим (или довольно медленно) из промышленного сектора в сектор услуг. Это означает, что постоянный анализ того, что мы предлагаем нашим клиентам, и того, как они воспринимают нашу продукцию, становится неотъемлемой частью нашей жизни. Тем не менее, каждый, кто имеет доступ к Интернету и выступает за свободу воли и слова, имеет право хвалить или ненавидеть услугу, которую он получает, выражая свое мнение.

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

В этой статье мы коснемся базы с

СловоОблака

Анализ настроений

О наборе данных:

'''
Getting the data 
'''
# importing All the necessary libraries for working with the data  
import numpy as np # For numerical processing 
import pandas as pd # working with the dataframes 
import matplotlib.pyplot as plt # nice looking plots
%matplotlib inline
# #Read the data
df = pd.read_csv('Reviews.csv')
df.info()

  • Я использую обзоры прекрасной еды Amazon, которые можно найти здесь.
  • Атрибуты, которые у нас есть: productID, userID, score (что примерно переводится в звездный рейтинг), сводка, текст (их обзор) и т. Д.
  • Мы обнаружили, что в атрибутах ProfileName и Summary отсутствуют детали.

Обработка естественного языка начинается здесь, где мы загружаем библиотеки и работаем с данными.

# Import libraries
from nltk.corpus import stopwords
from textblob import TextBlob
from textblob import Word

Стоп-слова

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

Определители. Определители обычно отмечают существительные, где за определителем обычно следует существительное
примеры: the, a, an, another

Координирующие союзы. Координирующие союзы соединяют слова, фразы и предложения
примеры: for, an, nor, but, or, still, so

Предлоги - предлоги выражают временные или пространственные отношения
примеры: в, под, по направлению, перед

TextBlob

TextBlob - это библиотека Python (2 и 3) для обработки текстовых данных. Он предоставляет простой API-интерфейс для решения общих задач обработки естественного языка (NLP), таких как тегирование части речи, извлечение именных фраз, анализ тональности, классификация, перевод и многое другое.

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

# Lower Casing 
df['Text'] = df['Text'].apply(lambda x: " ".join(x.lower() for x in x.split()))
# Removing Punctuations
df['Text'] = df['Text'].str.replace('[^\w\s]','')
# Removal of Stop Words
stop = stopwords.words('english')
df['Text'] = df['Text'].apply(lambda x: " ".join(x for x in x.split() if x not in stop))

Исследовательский анализ данных

# Create a new data frame "reviews" to perform exploratory data analysis upon that
reviews = df
# Dropping null values
reviews.dropna(inplace=True)
reviews.Score.hist(bins=5,grid=False)
plt.show()
print(reviews.groupby('Score').count().Id)

Мы можем наблюдать, что данные сильно несбалансированы в сторону более высокого рейтинга.

Означает ли это, что продукт работает хорошо? или это означает, что людям нравится услуга, предоставляемая прекрасной едой Amazon? Или это означает, что люди ставят 5 звезд за то, что они получают, или за услуги?

ТАК почему анализ настроений? Верно?

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

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

# To make it balanced data, we sampled each score by the lowest n-count from above. (i.e. 29743 reviews scored as '2')
score_1 = reviews[reviews['Score'] == 1].sample(n=29743)
score_2 = reviews[reviews['Score'] == 2].sample(n=29743)
score_3 = reviews[reviews['Score'] == 3].sample(n=29743)
score_4 = reviews[reviews['Score'] == 4].sample(n=29743)
score_5 = reviews[reviews['Score'] == 5].sample(n=29743)
# Here we recreate a 'balanced' dataset.
reviews_sample = pd.concat([score_1,score_2,score_3,score_4,score_5],axis=0)
reviews_sample.reset_index(drop=True,inplace=True)
# Printing count by 'Score' to check dataset is now balanced.
print(reviews_sample.groupby('Score').count().Id)

СловоОблака

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

# Let's build a word cloud looking at the 'Summary' text
from wordcloud import WordCloud
from wordcloud import STOPWORDS
# Wordcloud function's input needs to be a single string of text.
# Here I'm concatenating all Summaries into a single string.
# similarly you can build for Text column
reviews_str = reviews_sample.Summary.str.cat()
wordcloud = WordCloud(background_color='white').generate(reviews_str)
plt.figure(figsize=(10,10))
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis("off")
plt.show()

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

# Now let's split the data into Negative (Score is 1 or 2) and Positive (4 or #5) Reviews.
negative_reviews = reviews_sample[reviews_sample['Score'].isin([1,2]) ]
positive_reviews = reviews_sample[reviews_sample['Score'].isin([4,5]) ]
# Transform to single string
negative_reviews_str = negative_reviews.Summary.str.cat()
positive_reviews_str = positive_reviews.Summary.str.cat()
# Create wordclouds
wordcloud_negative = WordCloud(background_color='white').generate(negative_reviews_str)
wordcloud_positive = WordCloud(background_color='white').generate(positive_reviews_str)
# Plot
fig = plt.figure(figsize=(10,10))
ax1 = fig.add_subplot(211)
ax1.imshow(wordcloud_negative,interpolation='bilinear')
ax1.axis("off")
ax1.set_title('Reviews with Negative Scores',fontsize=20)
ax2 = fig.add_subplot(212)
ax2.imshow(wordcloud_positive,interpolation='bilinear')
ax2.axis("off")
ax2.set_title('Reviews with Positive Scores',fontsize=20)
plt.show()

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

Анализ настроений

#Importing required libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import re
import os
import sys
import ast
plt.style.use('fivethirtyeight')
# Function for getting the sentiment
cp = sns.color_palette()
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()

VADER (Valence Aware Dictionary и sEntiment Reasoner) - это инструмент анализа настроений на основе лексики и правил, специально адаптированный к настроениям, выраженным в социальных сетях. VADER оказался весьма успешным при работе с текстами в социальных сетях, редакционными статьями NY Times, обзорами фильмов и обзорами продуктов. Это потому, что VADER не только сообщает о показателях положительности и отрицательности, но также сообщает нам о том, насколько положительным или отрицательным является настроение.

VADER имеет множество преимуществ перед традиционными методами анализа настроений, в том числе:

  • Он очень хорошо работает с текстом в социальных сетях, но легко обобщается на несколько доменов.
  • Он не требует каких-либо обучающих данных, но построен на основе обобщаемого, основанного на валентности и подбираемого людьми лексикона золотого стандарта настроений.
  • Это достаточно быстро, чтобы использовать онлайн с потоковыми данными, и
  • Он не сильно страдает от компромисса между скоростью и производительностью.
# Generating sentiment for all the sentence present in the dataset
emptyline=[]
for row in df['Text']:
    vs=analyzer.polarity_scores(row)
    emptyline.append(vs)
    
    
# Creating new dataframe with sentiments
df_sentiments=pd.DataFrame(emptyline)
df_sentiments.head(5)

Положительные, отрицательные и нейтральные оценки отражают долю текста, попадающего в эти категории.

Составной балл - это показатель, который вычисляет сумму всех лексических рейтингов, которые были нормализованы между -1 (крайнее отрицательное значение) и +1 (крайнее положительное значение). Это означает, что первый отзыв очень положительный (0,94), однако второй отзыв имеет немного отрицательный оттенок.

# Merging the sentiments back to reviews dataframe
df_c = pd.concat([df.reset_index(drop=True), df_sentiments], axis=1)
# Convert scores into positive and negative sentiments using some threshold
df_c['Sentiment'] = np.where(df_c['compound'] >= 0 , 'Positive','Negative')

Наконец, проверка соответствия библиотеки VADER.

result=df_c['Sentiment'].value_counts()
result.plot(kind='bar')

Заключение

Теперь мы можем быть уверены, что прекрасные продукты очень хороши, так как многим людям нравятся продукты или отзывы. Очень немногим людям не нравятся продукты и услуги Amazon’s Fine Foods.

Можно четко работать с облаками Word в отрицательных аннотациях, чтобы понять, какие слова (сервисный продукт, если таковые имеются) вызывают беспокойство у их клиентов, и работать над этими секторами, чтобы повысить вовлеченность клиентов.

Например, слово "вкус" , аромат, кофе, собака (интересно) нуждается в изменении, чтобы угодить покупателям. Интересно, что слово «собака» упоминается дважды, что означает, что в разделе, посвященном корму для собак, необходимо внести изменения, чтобы их четвероногие клиенты остались нетронутыми.

использованная литература