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

Цветовое решение:
цвета взяты из цветовой палитры отдельных стикеров 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 ()
Вывод: меньше всего встречаются эмоции в сообщениях — 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 ()
Вывод: наиболее часто встречающиеся эмоции в сообщениях — 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 ()
Вывод: наиболее часто встречающиеся в сообщениях слова в разделе эмоции «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 ()
Вывод: в целом пользователи склонны писать сообщения средней длины, которая варьируется в диапазоне от 75 до 125 символов
Это указывает на то, что пользователи, как правило, пишут сообщения средней длины, независимо от эмоции
Заключение
В результате анализа данного датасета я выяснила, что чаще всего люди пишут друг другу в нейтральном или обеспокоенном состоянии, при этом длина сообщения никак не зависит от эмоции, которую испытывает пользователь.
Блокнот и датасет