Original size 735x1003

Анализ твитов Джастина Бибера

PROTECT STATUS: not protected

Введение

big
Original size 640x640

Джастин Бибер это важная фигура в моей жизни. Я в детстве его очень любила. Эта личность многогранна: да, в первую очередь он музыкант, но из-за того, что он стал популярным в раннем возрасте, за ним следил весь мир. А это уже делает его интересной фигурой в интернете. Собственно из-за этого я и решила анализировать не его музыку, а его твиты. Эти данные показались мне более интересными и познавальными.

Данные были найдены в свободном доступе на kaggle: https://www.kaggle.com/datasets/thedevastator/justin-bieber-twitter-engagement-metrics

Гистограммы, точечные, круговые диаграммы кажутся мне наиболее подходящими для данных, которые я захотела визуализировать.

Также я решила выполнить графики в сдержанной тёмной цветовой палитре, так как синий это цвет Твиттера.

Этапы работы

big
Original size 638x316

Первый запрос, который пришёл мне в голову, когда я думала про визуализацию данных это самые популярные твиты, поэтому я провизуализировала 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 ()

Результат меня приятно удивил: самым популярным постом оказался пост-поздравление с днём рождения, что кажется мне очень милым!

Original size 984x584
Original size 500x600

Поскольку Джастин давно ведет Твиттер, мне стала интересна динамика его ретвитов по времени. Как оказалось пик его активности в Твиттере выпал на 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 ()

Original size 984x584

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

Original size 984x584
Original size 736x736

Так как я посмотрела, какие посты у него самые популярные, мне стало еще и интересно посмотреть, какие посты его аудитория встретила холодом. Как итог — односложный твит «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 ()

Original size 984x584
Original size 736x896

Все хотят узнать секрет успеха и как работают алгоритмы в соцсетях, поэтому мне стало любопытно узнать, в какое время выложенные посты встречаются лайками со стороны его аудитории. Результат меня удивил: почему-то в 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='

FFFFFF')

Шаг в 2 часа plt.yticks (fontsize=12, color='#FFFFFF') plt.grid (color='#444444', linestyle='--', linewidth=0.5) plt.tight_layout ()

plt.savefig ('popularity_by_hour.png', dpi=300, bbox_inches='tight') plt.show ()

Original size 984x584

И последний график который я построила — столбчатая диаграмма. количества твитов. Я сгруппировка по дате и подсчитала количество твитов, таким образом самый активный день Джастина Бибера — 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=['

2C3E50', '

4A69BD', '

6B8E23', '

7D6F9B', '#34495E'], 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=12, color='#FFFFFF') plt.grid (color='#444444', linestyle='--', linewidth=0.5) plt.tight_layout ()

plt.savefig ('top_5_active_days.png', dpi=300, bbox_inches='tight') plt.show ()

Original size 984x584

Вывод

Мне очень понравилось узнавать данные с помощью программирования и визуализации кода. Мне кажется, эти навыки полезны для моей деятельности и теперь программирование для меня не то-то страшное и непонятное, а достаточно функциональный метод анализа. Теперь если я захочу что-то изучить, например, узнать какие слова встречаются в песнях чаще, мне может помочь этот метод.

Original size 564x562

Описание применения генеративной модели

Искусственный интеллект применялся для создания проекта с целью корректировки кода, модель Qwen2.5-Max. https://chat.qwen.ai/

Блокнот и Дата-сет

Анализ твитов Джастина Бибера
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more