
Мой проект по применению программирования в креативных индустриях посвящен анализу данных об активности и показах постов в социальной сети Instagram (проект Meta Platforms Inc., деятельность которой признана экстремистской и запрещена на территории РФ).
Социальные сети являются неотъемлемой частью современной цифровой культуры и креативной экономики, так как они формируют визуальные тренды, способы коммуникации и модели потребления контента. Анализ данных Instagram представляет особый интерес, поскольку позволяет рассмотреть поведение аудитории, источники распространения контента и механизмы формирования охватов. Изучение показов, лайков, сохранений и источников трафика дает возможность выявить закономерности взаимодействия пользователей с визуальными публикациями.
Для визуализации данных я планирую использовать следующие типы графиков: 1. Точечная диаграмма 2. Столбчатая диаграмма 3. Матрица метрик 4. Паучья диаграмма (radar chart)
Стилизация визуала

Для реализации проекта были использованы библиотеки pandas и numpy для обработки и анализа данных о публикациях в Instagram. Библиотека matplotlib применялась для построения графиков и визуализации результатов анализа. В рамках проекта был разработан собственный визуальный стиль, вдохновленный эстетикой Instagram, включающий пользовательские функции для оформления графиков и легенд, а также индивидуальную цветовую палитру.
1. Источники показов
Сначала я обобщила данные о показах постов по основным источникам, и для каждой группы постов по уровню Impressions было подсчитано суммарное количество показов из разных каналов.
cols_sources = [«From Home», «From Hashtags», «From Explore», «From Other»] tmp = df[[«Impressions», *cols_sources]].dropna ().copy () tmp[«impr_group»] = pd.qcut (tmp[«Impressions»], 4, labels=[«Low», «Mid-Low», «Mid-High», «High»])
share = tmp.groupby («impr_group»)[cols_sources].sum ()
Затем я рассчитала долю каждого источника показов внутри группы постов, чтобы оценить структуру трафика относительно общего охвата.
share_pct = share.div (share.sum (axis=1), axis=0
После этого я построила составную столбчатую диаграмму, где цвет каждого сегмента отображает вклад конкретного источника показов в общей структуре охвата постов. Это позволило наглядно увидеть, как меняется роль разных каналов в зависимости от популярности публикаций.
fig, ax = plt.subplots (figsize=(10, 6)) insta_white (ax)
bottom = np.zeros (len (share_pct)) colors = [PURPLE, ORANGE, PINK, MUTED] labels = [«Home», «Hashtags», «Explore», «Other»]
for c, col, lab in zip (colors, cols_sources, labels): ax.bar (share_pct.index, share_pct[col], bottom=bottom, color=c, label=lab) bottom += share_pct[col].to_numpy ()
ax.set_title («Структура источников показов по уровням Impressions», fontsize=16, pad=10) ax.set_xlabel («Группа постов по общим показам (Impressions)») ax.set_ylabel («Доля источника в показах»)
legend_white (ax) plt.show ()
По графику видно, что при большом показе постов играет роль и показ на домашней странице, и через хэштэги и через explore. Это значит, что данные показатели одинаково влияют на показ постов пользователям при высоких значениях показов. Однако для остальных групп видно, что пользователи чаще замечают пост при прокрутке домашней страницы, далее по пулярности идут хэштеги и наименее значительно пользователи обращают внимание на пост через explore.
2. Зависимость лайков, комментариев и репостов
Я подготовила данные о взаимодействии пользователей с постами, выбрав ключевые метрики: количество лайков, комментариев и репостов. Для улучшения визуального восприятия экстремальные значения были ограничены 99,5-м процентилем, чтобы исключить редкие аномальные публикации.
tmp = df[[«Likes», «Comments», «Shares»]].dropna ().copy ()
for col in [«Likes», «Comments», «Shares»]: tmp = tmp[tmp[col] <= tmp[col].quantile (0.995)]
Далее публикации были разделены на три группы по количеству репостов (Shares), чтобы наглядно показать, как уровень распространения контента влияет на взаимосвязь лайков и комментариев.
q1, q2 = tmp[«Shares»].quantile ([0.33, 0.66]) low = tmp[tmp[«Shares»] <= q1] mid = tmp[(tmp[«Shares»] > q1) & (tmp[«Shares»] <= q2)] high = tmp[tmp[«Shares»] > q2]
После этого я построила точечную диаграмму, где каждая группа постов отображена своим цветом: низкий уровень репостов — фиолетовый, средний — оранжевый, высокий — розовый. Это позволило визуально оценить зависимость лайков и комментариев в зависимости от активности распространения контента.
Глядя на розовые точки, видно, что люди больше делятся постом при условии, что у его есть хотя бы ±120 лайков, но при этом поиск может быть всего с 2 комментариями (тут рассмотрены розовые и желтые точки). Соответсвенно хочется сделать вывод, что лайки больше влияют на репост, чем комментарии. Дополнительно хочется отметить, что выбросов «больших» репостов происходит больше по лайкам, чем по комментариям, что тоже может подтверждать тот факт, что лайки играют большую роль, чем комментарии.
3. Зависимость вовлеченности пользователей и посещения профиля
Были подготовленны данные о вовлеченности пользователей и посещениях профиля, выбрав ключевые метрики: Impressions, Likes, Comments, Shares, Saves и Profile Visits. Для корректного анализа были исключены посты с нулевыми показами, а экстремальные значения ограничены 99,5-м процентилем, чтобы избежать влияния редких аномалий.
tmp = df[[«Impressions», «Likes», «Comments», «Shares», «Saves», «Profile Visits»]].dropna ().copy () tmp = tmp[tmp[«Impressions»] > 0]
tmp = tmp[ (tmp[«eng_rate»] <= tmp[«eng_rate»].quantile (0.995)) & (tmp[«Profile Visits»] <= tmp[«Profile Visits»].quantile (0.995)) ]
Далее была рассчитана суммарная вовлеченность постов (engagement), как сумма лайков, комментариев, репостов и сохранений, а также коэффициент вовлеченности (eng_rate) в процентах относительно общего количества показов, а также построен график.
tmp[«engagement»] = tmp[«Likes»] + tmp[«Comments»] + tmp[«Shares»] + tmp[«Saves»] tmp[«eng_rate»] = tmp[«engagement»] / tmp[«Impressions»] * 100
Визуализация показывает, что вовлеченность пользователей не сильно влияет на количество посещений профиля. Скорее всего, пользователи просматривают контент напрямую в ленте и не заходят на профиль для дополнительного просмотра.
При этом на графике заметны отдельные точки с относительно низкой вовлеченностью, но высоким числом посещений профиля. Это может объясняться тем, что менее популярные посты в основном просматривают близкие пользователю люди — друзья, родственники — которые интересуются жизнью автора, а не только его контентом.
4. Корреляционная матрица по всем показателям
Сначала я подготовила данные для анализа взаимосвязей между основными метриками постов. Были выбраны показатели общего количества показов, вовлеченности (лайки, комментарии, репосты, сохранения), посещений профиля и источники показов (домашняя лента, хэштеги, раздел Explore и прочие). Данные были очищены от пропусков для корректного расчета корреляций.
cols = [«Impressions», «Likes», «Comments», «Shares», «Saves», «Profile Visits», «From Home», «From Hashtags», «From Explore», «From Other»]
tmp = df[cols].dropna ().copy () corr = tmp.corr (numeric_only=True)
Далее была построена корреляционная матрица (heatmap), позволяющая наглядно оценить силу и направление связей между показателями. Для визуализации использовалась цветовая карта magma, а график был оформлен в соответствии с Instagram-стилем.
По матрице видно, что пользователь наиболее часто вовлекается в посты через explore и с домашней страницы. Также видно, что чаще пользователь предпочитает оставлять лайки, сохранять посты и посещать профили, а не комментаровать посты. Лайки пользователя сильно связаны с количеством сохранений поста, что неудивительно, потому что кажется, будто обычно люди ставят лайкам наименьшую серьезность (например, лайки в наше время будто стоят не так много, как комментарии), а сохраненки никто не видит.
Также хочется отметить, что на посещение профиля никак не влияет количество комментариев, сохраненок и репостов — что подтверждает выводы, что мы делали ранее.
Еще один интерсное наблюдение: хэштеги, в основном, помогают повысить количество лайков и посещение профиля.
5. Зависимость лайков, комментариев, репостов и сохраненок
Сначала я подготовила данные о взаимодействии пользователей с постами, выбрав ключевые метрики: Likes, Comments, Shares и Saves. Для наглядного сравнения значения были нормированы относительно максимального среднего показателя.
cols = [«Likes», «Comments», «Shares», «Saves»] tmp = df[cols].dropna ().copy () means = tmp.mean () values = means / means.max () labels = cols
values = np.append (values, values[0]) angles = np.linspace (0, 2 * np.pi, len (labels) + 1)
Далее была построена паучья диаграмма (radar chart), где каждая ось соответствует одной из метрик вовлеченности, а линия и заливка отображают средний профиль реакции аудитории.
Анализ диаграммы показал, что лайки и сохранения являются доминирующей формой реакции аудитории, тогда как комментарии и репосты встречаются значительно реже.
Это свидетельствует о том, что большинство взаимодействий носит поверхностный характер, а более «качественные» реакции (shares и comments) требуют от контента дополнительной ценности или эмоционального отклика.
Источник, через который пользователь видит пост, играет разную роль в зависимости от уровня показов. Для публикаций с высоким количеством impressions значимы сразу несколько каналов: домашняя лента, хэштеги и раздел Explore. Это говорит о том, что популярные посты продвигаются алгоритмом комплексно, используя различные источники трафика.
Общий профиль вовлечённости показывает, что большинство взаимодействий с контентом носит поверхностный характер: пользователи чаще ставят лайки и сохраняют посты, а комментарии и репосты встречаются значительно реже. Следовательно, для получения «глубокой» реакции контент должен обладать значительной ценностью или эмоциональной привлекательностью.
В целом Instagram чаще продвигает публикации, которые быстро собирают большое количество простых реакций, таких как лайки и сохранения. Более сложные действия — комментарии, репосты и переходы в профиль — возникают реже и зависят не только от алгоритма, но и от личного интереса пользователя к автору или теме контента.
В проекте была использована нейросеть ChatGPT с целью проверки кода, орфографии и логики написанного текста.