Original size 2280x3200

Текстовые эмоции

PROTECT STATUS: not protected
16

Концепция

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

Для анализа я выбрала датасет «Emotion Detection from Text», взятый с платформы Kaggle. В нём содержатся текстовые сообщения и соответствующие им эмоций (таких как «happy», «angry», «sad», и т. п.).

Цель исследования: понять, какие существуют зависимости между сообщениями пользователей от испытываемых ими эмоций в момент написания.

Для проекте я решила использовать:

  1. столбчатую диаграмму (для визуализации распределения эмоций)
  2. круговую диаграмму (для визуализации доли разных эмоций)
  3. wordcloud или облако слов (для визуализации популярных слов в сообщениях по эмоциям)
  4. boxplot или ящик с усами (для анализа длины сообщений в зависимости от эмоции)
big
Original size 2399x702

Цветовое решение:

цвета взяты из цветовой палитры отдельных стикеров Apple Emoji Library, символизирующие разные оттенки эмоций людей

Предварительно

#импортирую нужные библиотеки import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from wordcloud import WordCloud

#указываю путь к файлу df = pd.read_csv («tweet_emotions.csv») print (df.head ())

#сразу добавляю колонку с длиной сообщений (понадобится при построении графика 4) df['text_length'] = df['content'].apply (len) print (df.head ())

#настраиваю стили plt.style.use ('dark_background') #использую темный фон sns.set_style («whitegrid») #стиль сетки Seaborn sns.set_palette (['#FF9A05', '#E91E13', '#EA1D6B', '#76C1F0', '#106BCB', '#FC86C7', '#FD8077', '#FFE737', '#7C4304', '#A1FD51', '#CA7DDB', '#420F47', '#1DA502', '#4636AF']) #задаю цвета

График № 1: визуализация распределения эмоций

На первой диаграмме я решила визуализировать количество слов, наиболее часто встречающихся в сообщениях. Для этого я использовала столбчатую диаграмму (ось х — эмоции, ось у — количество).

Для этого я задала размеры диаграммы, задала данные для х и посчитала количество значений, добавила заголовок и отформатировала текст по оси х.

plt.figure (figsize=(10,6)) #задаю размер диаграммы sns.countplot (data=df, x='sentiment', order=df['sentiment'].value_counts ().index) #указываю данные для х и считаю кол-во значений plt.title («Распределение эмоций») #заголовок диаграммы plt.xticks (rotation=45) #чуть повернула текст по оси х plt.tight_layout () #автоматически регулируются размеры осей и положения текста plt.show ()

Original size 2399x1229

Вывод: меньше всего встречаются эмоции в сообщениях — boredom и anger.

Это может говорить о том, что, когда человеку скучно или он сильно раздражен, не возникает желание общаться с другими людьми

График № 2: доля разных эмоций

Далее я решила визуализировать процентное соотношение эмоций в датасете. Для этого я использовала круговую диаграмму, где задала название и размеры диаграммы, убрала ось у.

df['sentiment'].value_counts ().plot.pie (autopct='%1.1f%%', figsize=(12,12), startangle=90) #задаю размер, редактирую отображение значений на диаграмме plt.title («Доли эмоций в датасете») #заголовок диаграммы plt.ylabel ('') #убираю ось y, т к она не нужна plt.tight_layout () #автоматически регулируются размеры осей и положения текста plt.show ()

Original size 2399x1357

Вывод: наиболее часто встречающиеся эмоции в сообщениях — neutral (21.6%) и worry (21.1%).

1)Чаще всего люди переписываются в спокойном расположении духа или их эмоциональное состояние никак не отображается на диалоге 2)В момент переписок люди обеспокоены чем-то, поэтому имею необходимость поделиться своей эмоцией

График № 3: популярные слова по эмоциям

Теперь я решила визуализировать облако ключевых слов для эмоции «happiness». Для этого я использовала диаграмму wordcloud, где наибольшие по размеру слова являются часто встречающимся.

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

happy_texts = " «.join (df[df['sentiment'] == 'happiness']['content']) #фильтрую данные и делаю из них строку с пробелами wordcloud = WordCloud (width=800, height=400, background_color='white').generate (happy_texts) #генерю облако слов

plt.figure (figsize=(10,5)) #задаю размер plt.imshow (wordcloud, interpolation='bilinear') #улучшаю изображение с помощью интерполяции plt.axis ('off') #удаляю метки осей plt.title („Популярные слова в сообщениях с эмоцией 'happiness'“) #заголовок диаграммы plt.show ()

Original size 2399x884

Вывод: наиболее часто встречающиеся в сообщениях слова в разделе эмоции «happiness» — thank, good, day, lol.

Такой ряд слов говорит о том, что в состоянии счастья люди чаще благодарят собеседника и обращают внимание на положительное вокруг себя.

График № 4: зависимость длины сообщения от эмоции

Также я решила проанализировать длину сообщений и то, как она зависит от эмоций. Здесь для визуализации я использую ящик с усами.

Для этого я задала размеры диаграммы, добавила заголовок и отформатировала текст по оси х.

plt.figure (figsize=(10,6)) #задаю размер sns.boxplot (x='sentiment', y='text_length', data=df) #создаю диаграмму plt.title («Длина сообщений по эмоциям») #заголовок диаграммы plt.xticks (rotation=45) #поворачиваю слова по оси х plt.tight_layout () #автоматически регулируются размеры осей и положения текста plt.show ()

Original size 2399x1229

Вывод: в целом пользователи склонны писать сообщения средней длины, которая варьируется в диапазоне от 75 до 125 символов

Это указывает на то, что пользователи, как правило, пишут сообщения средней длины, независимо от эмоции

Заключение

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

Блокнот и датасет

Текстовые эмоции
16
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more