
У видеохостинга YouTube живое и активное коммьюнити пользователей, и почти под каждым видео есть хотя бы один комментарий. В базе данных, найденной мною на github, собрано более тысячи комментариев из разных стран. Мне стало интересно проанализировать, что у них есть общего и какие тенденции можно обнаружить.
Основными элементами визуализации стал фирменный красный цвет Youtube и шрифт видеохостинга
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 ()
Топ самых частоиспользуемых эмодзи
Для начала я решила проанализировать, какие эмодзи пользователи используют чаще всего.
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

Для начала я загрузила шрифт, который нужно использовать в диаграммах: 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.title ( «Топ-5 самых часто используемых эмодзи в комментариях», fontproperties=youtube_font ) plt.xlabel («Эмодзи», fontproperties=youtube_font) plt.ylabel («Количество», fontproperties=youtube_font)
plt.show ()
Самые частоиспользуемые эмодзи (график из google colab, эмодзи наложены в редакторе figma для читаемости)
Средняя длина комментария
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}»)
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 ()
Среднее количество слов в комментарии
Самые частоиспользуемые слова
top_words = word_counts.most_common (10)
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)}»)
Топ самых частоиспользуемых слов в комментариях
Корреляция лайков и реплаев
На этот раз хочу посмотреть корреляцию количества лайков и количества реплаев.
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 ()
Корреляция между лайками и реплаями
В проекте использовались следующие нейросети: ChatGPT (GPT 5.2) — исправление ошибок кода и генерация кода по задачам Ideogram.ai — генерация изображений в проекте
Код написан в Google Colab с помощью библиотеки Pandas
Материалы: Блокнот с кодом: Гуглдиск https://colab.research.google.com/drive/1MnybiMzijQvGDIAzAbm_mc9Am1UUoKPh?usp=sharing ipynb файл: https://disk.360.yandex.ru/d/nZF_rFN8Df01SA Датасет: https://github.com/luminati-io/YouTube-dataset-sample