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