
Введение

Джастин Бибер это важная фигура в моей жизни. Я в детстве его очень любила. Эта личность многогранна: да, в первую очередь он музыкант, но из-за того, что он стал популярным в раннем возрасте, за ним следил весь мир. А это уже делает его интересной фигурой в интернете. Собственно из-за этого я и решила анализировать не его музыку, а его твиты. Эти данные показались мне более интересными и познавальными.
Данные были найдены в свободном доступе на kaggle: https://www.kaggle.com/datasets/thedevastator/justin-bieber-twitter-engagement-metrics
Гистограммы, точечные, круговые диаграммы кажутся мне наиболее подходящими для данных, которые я захотела визуализировать.
Также я решила выполнить графики в сдержанной тёмной цветовой палитре, так как синий это цвет Твиттера.
Этапы работы

Первый запрос, который пришёл мне в голову, когда я думала про визуализацию данных это самые популярные твиты, поэтому я провизуализировала 5 самых популярных. Для того, чтобы график выглядел компактнее, текст в твитах я сократила до 50 символов.
top_5_tweets['short_content'] = top_5_tweets['content'].apply (lambda x: x[: 50] + '…' if len (x) > 50 else x)
plt.figure (figsize=(10, 6)) sns.barplot (data=top_5_tweets, x='likeCount', y='short_content', palette=billie_muted_palette, edgecolor='white') plt.title ('Топ-5 самых популярных твитов', fontsize=18, fontweight='bold', color='#FFFFFF') plt.xlabel ('Количество лайков', fontsize=14, color='#FFFFFF') plt.ylabel ('Текст твита', fontsize=14, color='#FFFFFF') plt.xticks (fontsize=12, color='#FFFFFF') plt.yticks (fontsize=10, color='#FFFFFF') plt.grid (color='#444444', linestyle='--', linewidth=0.5) plt.tight_layout ()
plt.savefig ('top_5_popular_tweets_shortened.png', dpi=300, bbox_inches='tight') plt.show ()
Результат меня приятно удивил: самым популярным постом оказался пост-поздравление с днём рождения, что кажется мне очень милым!
Поскольку Джастин давно ведет Твиттер, мне стала интересна динамика его ретвитов по времени. Как оказалось пик его активности в Твиттере выпал на 2014 год, собственно тогда и был его пик известности. В это время каждая уважающая себя девчонка фанатела по нему. Для этих данных подходит линейный график.
daily_retweets = data.groupby (data['date'].dt.date)['retweetCount'].sum ()
plt.figure (figsize=(10, 6)) plt.plot (daily_retweets.index, daily_retweets.values, marker='o', color='#4A69BD') plt.fill_between (daily_retweets.index, daily_retweets.values, color='#4A69BD', alpha=0.2) plt.title ('Динамика ретвитов во времени', fontsize=18, fontweight='bold', color='#FFFFFF') plt.xlabel ('Дата', fontsize=14, color='#FFFFFF') plt.ylabel ('Количество ретвитов', fontsize=14, color='#FFFFFF') plt.xticks (rotation=45, fontsize=12, color='#FFFFFF') plt.yticks (fontsize=12, color='#FFFFFF') plt.grid (color='#444444', linestyle='--', linewidth=0.5) plt.tight_layout ()
plt.savefig ('retweets_over_time.png', dpi=300, bbox_inches='tight') plt.show ()
Джастин не ассоциируется с человеком, который пишет длинные посты, провизуализировав его твиты, я в этом и убедилась. У него гораздо чаще встречаются текстовые посты до 100 символов. Получилась такая гистограмма.
data['tweet_length'] = data['content'].str.len ()
plt.figure (figsize=(10, 6)) sns.histplot (data['tweet_length'], bins=20, kde=True, color='#6B8E23') plt.title ('Распределение длин твитов', fontsize=18, fontweight='bold', color='#FFFFFF') plt.xlabel ('Длина твита (количество символов)', fontsize=14, color='#FFFFFF') plt.ylabel ('Частота', fontsize=14, color='#FFFFFF') plt.xticks (fontsize=12, color='#FFFFFF') plt.yticks (fontsize=12, color='#FFFFFF') plt.grid (color='#444444', linestyle='--', linewidth=0.5) plt.tight_layout ()
plt.savefig ('tweet_length_distribution.png', dpi=300, bbox_inches='tight') plt.show ()
Так как я посмотрела, какие посты у него самые популярные, мне стало еще и интересно посмотреть, какие посты его аудитория встретила холодом. Как итог — односложный твит «oh» оказался наименее востребованным, хотя, как мне кажется, у таких односложных твитов есть шанс стать виральными. Для визуализации я использовала столбчатую диаграмму с обрезанным текстом до 50 символов.
bottom_5_tweets['short_content'] = bottom_5_tweets['content'].apply (lambda x: x[: 50] + '…' if len (x) > 50 else x)
plt.figure (figsize=(10, 6)) sns.barplot (data=bottom_5_tweets, x='likeCount', y='short_content', palette=billie_muted_palette, edgecolor='white') plt.title ('Топ-5 самых непопулярных твитов', fontsize=18, fontweight='bold', color='#FFFFFF') plt.xlabel ('Количество лайков', fontsize=14, color='#FFFFFF') plt.ylabel ('Текст твита', fontsize=14, color='#FFFFFF') plt.xticks (fontsize=12, color='#FFFFFF') plt.yticks (fontsize=10, color='#FFFFFF') plt.grid (color='#444444', linestyle='--', linewidth=0.5) plt.tight_layout ()
plt.savefig ('bottom_5_unpopular_tweets_shortened.png', dpi=300, bbox_inches='tight') plt.show ()
Все хотят узнать секрет успеха и как работают алгоритмы в соцсетях, поэтому мне стало любопытно узнать, в какое время выложенные посты встречаются лайками со стороны его аудитории. Результат меня удивил: почему-то в 12 часов дня самый маленький актив, хотя в 10 часов утра аудитория была на пике активности. Такие данные вряд ли могут помочь в развитии, но их знать как минимум интересно. Получился линейный график.
data['hour'] = data['date'].dt.hour
popularity_by_hour = data.groupby ('hour')['likeCount'].mean ()
plt.figure (figsize=(10, 6)) plt.plot (popularity_by_hour.index, popularity_by_hour.values, marker='o', color='#34495E') plt.fill_between (popularity_by_hour.index, popularity_by_hour.values, color='#34495E', alpha=0.2) plt.title ('Популярность твитов по времени суток', fontsize=18, fontweight='bold', color='#FFFFFF') plt.xlabel ('Час дня', fontsize=14, color='#FFFFFF') plt.ylabel ('Среднее количество лайков', fontsize=14, color='#FFFFFF') plt.xticks (range (0, 24, 2), fontsize=12, color='
plt.savefig ('popularity_by_hour.png', dpi=300, bbox_inches='tight') plt.show ()
И последний график который я построила — столбчатая диаграмма. количества твитов. Я сгруппировка по дате и подсчитала количество твитов, таким образом самый активный день Джастина Бибера — 19 ноября 2013 года.
tweets_by_date = data['date'].dt.date.value_counts ().nlargest (5)
plt.figure (figsize=(10, 6)) sns.barplot (x=tweets_by_date.values, y=tweets_by_date.index.astype (str), palette=['
plt.savefig ('top_5_active_days.png', dpi=300, bbox_inches='tight') plt.show ()
Вывод
Мне очень понравилось узнавать данные с помощью программирования и визуализации кода. Мне кажется, эти навыки полезны для моей деятельности и теперь программирование для меня не то-то страшное и непонятное, а достаточно функциональный метод анализа. Теперь если я захочу что-то изучить, например, узнать какие слова встречаются в песнях чаще, мне может помочь этот метод.
Описание применения генеративной модели
Искусственный интеллект применялся для создания проекта с целью корректировки кода, модель Qwen2.5-Max. https://chat.qwen.ai/
Блокнот и Дата-сет