Original size 2480x3500

Анализ комментариев YouTube

PROTECT STATUS: not protected
The project is taking part in the competition

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

Основными элементами визуализации стал фирменный красный цвет Youtube и шрифт видеохостинга

Код для начала работы:

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns

sns.set (style="whitegrid»)

from google.colab import files files.upload ()

df = pd.read_csv («Youtube-dataset-sample.csv»)

df.head () df.info () df.columns df.isnull ().sum () df.describe ()

Топ самых частоиспользуемых эмодзи

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

Код:

import re from collections import Counter

all_comments = " «.join (df['comment_text'].astype (str))emoji_pattern = re.compile („[“ „\U0001F600-\U0001F64F“ „\U0001F300-\U0001F5FF“ „\U0001F680-\U0001F6FF“ „\U0001F700-\U0001F77F“ „\U0001F780-\U0001F7FF“ „\U0001F800-\U0001F8FF“ „\U0001F900-\U0001F9FF“ „\U0001FA00-\U0001FAFF“ „]+“, flags=re.UNICODE)emojis = emoji_pattern.findall (all_comments)

emoji_counts = Counter (emojis) top_5_emojis = emoji_counts.most_common (5) top_5_emojis

big
Original size 1312x416

Для начала я загрузила шрифт, который нужно использовать в диаграммах: from google.colab import files files.upload () import matplotlib.font_manager as fm import matplotlib.pyplot as plt

font_path = «/content/YouTube Sans .ttf» youtube_font = fm.FontProperties (fname=font_path)

plt.rcParams['font.family'] = youtube_font.get_name ()

Код для создания диаграммы:

plt.figure (figsize=(6,4)) sns.barplot ( x='Emoji', y='Count', data=emoji_df, color='#FF0000', edgecolor='black' )

plt.title ( «Топ-5 самых часто используемых эмодзи в комментариях», fontproperties=youtube_font ) plt.xlabel («Эмодзи», fontproperties=youtube_font) plt.ylabel («Количество», fontproperties=youtube_font)

plt.show ()

Original size 3634x2681

Самые частоиспользуемые эмодзи (график из google colab, эмодзи наложены в редакторе figma для читаемости)

Средняя длина комментария

Код для подсчета среднего значения комментария:

def count_words (text): return len (str (text).split ())

df['word_count'] = df['comment_text'].apply (count_words)

df[['comment_text', 'word_count']].head ()

average_words = df['word_count'].mean () average_words

print (f"Среднее количество слов в комментарии: {average_words:.2f}»)

Original size 1312x416

Код для визуализации с помощью гистограммы:

plt.figure (figsize=(8,5))

sns.histplot ( df['word_count'], bins=30, color='#FF0000', edgecolor='black' )

plt.axvline ( average_words, color='black', linestyle='--', linewidth=1.5, label=f’Среднее: {average_words:.1f}' )

plt.title ( «Распределение длины комментариев (в словах)», fontproperties=youtube_font if 'youtube_font' in globals () else None ) plt.xlabel ( «Количество слов», fontproperties=youtube_font if 'youtube_font' in globals () else None ) plt.ylabel ( «Количество комментариев», fontproperties=youtube_font if 'youtube_font' in globals () else None )

plt.legend () plt.show ()

Original size 701x469

Среднее количество слов в комментарии

Самые частоиспользуемые слова

Код для анализа данных:

def clean_text (text): text = str (text).lower () text = re.sub (r'[^\w\s]', ' ', text) text = re.sub (r'\d\+', '', text) text = re.sub (r'\s\+', ' ', text).strip () return text df['cleaned_text'] = df['comment_text'].apply (clean_text) all_words = [] for text in df['cleaned_text']: words = text.split () stop_words = ['and', 'in', 'so', 'as', 'no', 'on', 'at', 'for', 'to', 'but', 'myself', 'we', 'she', 'his', 'who', 'has', 'her', 'i', 'me', 'it', 'am', 'if', 'of', 'by', 'this', 'that', 'the', 'you', 'will', 'was', 'from', 'with', 'not', 'are', 'have', 'not', 'they', 'about', 'your', 'would', 'what'] filtered_words = [word for word in words if word not in stop_words and len (word) > 2] all_words.extend (filtered_words) word_counts = Counter (all_words)

top_words = word_counts.most_common (10)

Original size 1312x416

Код для визуализации:

top_df = pd.DataFrame (top_words, columns=['word', 'count'])

plt.style.use ('default') youtube_red = '#FF0000' edge_color = 'black'

colors = [youtube_red] + [plt.cm.Reds (0.6 + i*0.03) for i in range (9)]

plt.figure (figsize=(12, 10), facecolor='white')

wedges, texts, autotexts = plt.pie ( top_df['count'], labels=top_df['word'], colors=colors, autopct='%1.1f%%', startangle=90, wedgeprops={'edgecolor': edge_color, 'linewidth': 2, 'linestyle': '-', 'antialiased': True}, textprops={'fontsize': 11, 'fontweight': 'bold', 'color': 'black'}, pctdistance=0.85 )

for autotext in autotexts: autotext.set_color ('white') autotext.set_fontweight ('bold') autotext.set_fontsize (10) centre_circle = plt.Circle ((0, 0), 0.70, fc='white', edgecolor=edge_color, linewidth=2) plt.gca ().add_artist (centre_circle)

plt.title ('ТОП-10 самых используемых слов в комментариях', fontsize=16, fontweight='bold', pad=20, color='black')

total_words = len (all_words) unique_words = len (word_counts) plt.text (0, -1.3, f’Всего слов: {total_words} | Уникальных слов: {unique_words}', ha='center', fontsize=12, style='italic') plt.legend (wedges, [f'{word}: {count}' for word, count in top_words], title="Слова и количество», loc="center left», bbox_to_anchor=(1, 0, 0.5, 1), fontsize=10, title_fontsize=12) plt.axis ('equal') plt.grid (True, alpha=0.3, linestyle='--')

plt.tight_layout () plt.show () print («ТОП-10 самых используемых слов:») print («-» * 40) for i, (word, count) in enumerate (top_words, 1): print (f"{i: 2}. {word: 15} — {count: 3} раз (а)») print («-» * 40) print (f"Всего обработано комментариев: {len (df)}»)

Original size 1189x997

Топ самых частоиспользуемых слов в комментариях

Корреляция лайков и реплаев

На этот раз хочу посмотреть корреляцию количества лайков и количества реплаев.

Код для анализа данных:

import pandas as pd import matplotlib.pyplot as plt import numpy as np from scipy import stats plt.figure (figsize=(14, 10), facecolor='white') youtube_red = '#FF0000' edge_color = 'black' df_filtered = df[['likes', 'replies']].dropna () df_filtered = df_filtered[(df_filtered['likes'] > 0) & (df_filtered['replies'] > 0)] correlation_pearson, p_value = stats.pearsonr (df_filtered['likes'], df_filtered['replies'])
Original size 1312x416

Код для визуализации графика:

ax = plt.subplot (111)

scatter = ax.scatter (df_filtered['likes'], df_filtered['replies'], c=df_filtered['likes'], cmap='Reds', alpha=0.8, edgecolor=edge_color, linewidth=1, s=100, zorder=3)

z = np.polyfit (df_filtered['likes'], df_filtered['replies'], 1) p = np.poly1d (z) x_line = np.linspace (df_filtered['likes'].min (), df_filtered['likes'].max (), 100) ax.plot (x_line, p (x_line), color='darkred', linewidth=3, linestyle='-', label=f’Линия регрессии: y = {z[0]:.3f}x + {z[1]:.3f}', zorder=2) ax.set_xlabel ('Количество лайков', fontsize=14, fontweight='bold', labelpad=10) ax.set_ylabel ('Количество реплаев', fontsize=14, fontweight='bold', labelpad=10) ax.set_title (f’Корреляция между лайками и реплаями\nКоэффициент корреляции: {correlation_pearson:.3f}', fontsize=16, fontweight='bold', pad=20) ax.grid (True, alpha=0.3, linestyle='--', zorder=0) ax.legend (loc='upper left', fontsize=12, framealpha=0.9, edgecolor=edge_color) cbar = plt.colorbar (scatter, ax=ax, pad=0.01) cbar.set_label ('Количество лайков', rotation=270, labelpad=20, fontsize=12, fontweight='bold') stats_text = (f’Статистика:\n' f’N = {len (df_filtered)}\n' f’Среднее лайков: {df_filtered[«likes»].mean ():.1f}\n' f’Среднее реплаев: {df_filtered[«replies»].mean ():.1f}\n' f’R² = {correlation_pearson**2:.3f}\n' f’P-значение: {p_value:.5f}') ax.text (0.02, 0.98, stats_text, transform=ax.transAxes, fontsize=11, verticalalignment='top', bbox=dict (boxstyle='round', facecolor='white', alpha=0.9, edgecolor=edge_color))

plt.tight_layout () plt.show ()

Original size 623x470

Корреляция между лайками и реплаями

В проекте использовались следующие нейросети: ChatGPT (GPT 5.2) — исправление ошибок кода и генерация кода по задачам Ideogram.ai — генерация изображений в проекте

Код написан в Google Colab с помощью библиотеки Pandas

We use cookies to improve the operation of the HSE website and to enhance its usability. More detailed information on the use of cookies can be fou...
Show more