Аналитика профиля ВК: различия между версиями

Материал из Поле цифровой дидактики
Нет описания правки
Нет описания правки
Строка 165: Строка 165:
     </div>
     </div>


<!-- Фильтрация стоп-слов -->
<div style="background-color: #ffffff; padding: 20px; border-radius: 12px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">
    <h3 style="color: #2c3e50;">🚫 Фильтрация стоп-слов</h3>
    <p>При анализе текстов постов система автоматически исключает часто встречающиеся, но не несущие смысловой нагрузки слова (предлоги, местоимения, союзы). Это позволяет выделить действительно значимые ключевые слова и получить точную картину тематики контента.</p>
   
    <p><b>Стоп-слова включают:</b> «и», «в», «на», «не», «что», «он», «я», «с», «как», «а», «то», «все», «она», «но», «да», «ты», «к», «у», «же», «вы», «за», «бы», «по», «только», «её», «мне», «было», «вот», «от», «меня», «ещё», «нет», «о», «из», «ему», «теперь», «когда», «даже», «ну», «вдруг», «ли», «если», «уже», «или», «ни», «быть», «был», «него», «до», «вас», «нибудь», «опять», «уж», «вам», «ведь», «там», «потом», «себя», «ничего», «ей», «может», «они», «тут», «где», «есть», «надо», «ней», «для», «мы», «тебя», «их», «чем», «была», «сам», «чтоб», «без», «будто», «чего», «раз», «тоже», «себе», «под», «будет», «ж», «тогда», «кто», «этот», «того», «потому», «этого», «какой», «совсем», «ним», «здесь», «этом», «один», «почти», «мой», «тем», «чтобы», «нее», «сейчас», «были», «куда», «зачем», «всех», «никогда», «можно», «при», «наконец», «два», «об», «другой», «хоть», «после», «над», «больше», «тот», «через», «эти», «нас», «про», «всего», «них», «какая», «много», «разве», «три», «эту», «моя», «впрочем», «свою», «этой», «перед», «иногда», «лучше», «чуть», «том», «нельзя», «такой», «им», «более», «всегда», «конечно», «всю», «между», «это», «этим», «нам», «этих», «та», «те», «при», «ещe», «тебе», «со», «вся», «все», «бы», «ведь», «вон», «вот», «да», «даже», «для», «его», «нет», «ни», «тот», «раз», «еще».</p>
   
    <p><b>А также английские стоп-слова:</b> «the», «and», «in», «of», «to», «a», «is», «it», «that», «for», «on», «are», «with», «was», «at», «be», «by», «this», «have», «from», «or», «an», «but», «not», «they», «we», «you», «he», «she», «all», «as», «do», «did», «been», «his», «her», «our», «their».</p>
   
    <h4 style="color: #4a76a8; margin-top: 20px;">📝 Отрывок кода, отвечающий за фильтрацию:</h4>
    <div style="background-color: #1e1e1e; color: #d4d4d4; padding: 15px; border-radius: 8px; overflow-x: auto; font-family: 'Courier New', monospace; font-size: 13px;">
        <pre style="margin: 0; color: #d4d4d4;">
<span style="color: #569cd6;"># Список стоп-слов (русские и английские)</span>
<span style="color: #569cd6;">RU_STOPWORDS</span> = {
    <span style="color: #ce9178;">"и"</span>,<span style="color: #ce9178;">"в"</span>,<span style="color: #ce9178;">"во"</span>,<span style="color: #ce9178;">"не"</span>,<span style="color: #ce9178;">"что"</span>,<span style="color: #ce9178;">"он"</span>,<span style="color: #ce9178;">"на"</span>,<span style="color: #ce9178;">"я"</span>,<span style="color: #ce9178;">"с"</span>,<span style="color: #ce9178;">"со"</span>,<span style="color: #ce9178;">"как"</span>,<span style="color: #ce9178;">"а"</span>,<span style="color: #ce9178;">"то"</span>,<span style="color: #ce9178;">"все"</span>,<span style="color: #ce9178;">"она"</span>,
    <span style="color: #ce9178;">"так"</span>,<span style="color: #ce9178;">"его"</span>,<span style="color: #ce9178;">"но"</span>,<span style="color: #ce9178;">"да"</span>,<span style="color: #ce9178;">"ты"</span>,<span style="color: #ce9178;">"к"</span>,<span style="color: #ce9178;">"у"</span>,<span style="color: #ce9178;">"же"</span>,<span style="color: #ce9178;">"вы"</span>,<span style="color: #ce9178;">"за"</span>,<span style="color: #ce9178;">"бы"</span>,<span style="color: #ce9178;">"по"</span>,<span style="color: #ce9178;">"только"</span>,<span style="color: #ce9178;">"её"</span>,
    <span style="color: #ce9178;">"the"</span>,<span style="color: #ce9178;">"and"</span>,<span style="color: #ce9178;">"in"</span>,<span style="color: #ce9178;">"of"</span>,<span style="color: #ce9178;">"to"</span>,<span style="color: #ce9178;">"a"</span>,<span style="color: #ce9178;">"is"</span>,<span style="color: #ce9178;">"it"</span>,<span style="color: #ce9178;">"that"</span>,<span style="color: #ce9178;">"for"</span>,<span style="color: #ce9178;">"on"</span>,<span style="color: #ce9178;">"are"</span>,
}
<span style="color: #569cd6;"># Функция обработки текста постов</span>
<span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">process_posts</span>(posts: list) -> dict:
    <span style="color: #6a9955;"># Сбор всего текста из постов</span>
    all_text = <span style="color: #ce9178;">" "</span>.join(p.get(<span style="color: #ce9178;">"text"</span>, <span style="color: #ce9178;">""</span>) <span style="color: #569cd6;">for</span> p <span style="color: #569cd6;">in</span> posts <span style="color: #569cd6;">if</span> p.get(<span style="color: #ce9178;">"text"</span>))
   
    <span style="color: #6a9955;"># Разбивка на слова (только слова длиной от 3 символов)</span>
    words = re.findall(<span style="color: #ce9178;">r"\b[а-яёa-zA-Z]{3,}\b"</span>, all_text.lower())
   
    <span style="color: #6a9955;"># Фильтрация стоп-слов</span>
    filtered = [w <span style="color: #569cd6;">for</span> w <span style="color: #569cd6;">in</span> words <span style="color: #569cd6;">if</span> w <span style="color: #569cd6;">not</span> <span style="color: #569cd6;">in</span> RU_STOPWORDS]
   
    <span style="color: #6a9955;"># Подсчёт топ-20 самых частых слов</span>
    top_words = Counter(filtered).most_common(<span style="color: #b5cea8;">20</span>)
   
    <span style="color: #569cd6;">return</span> {<span style="color: #ce9178;">"words"</span>: {
        <span style="color: #ce9178;">"labels"</span>: [w[<span style="color: #b5cea8;">0</span>] <span style="color: #569cd6;">for</span> w <span style="color: #569cd6;">in</span> top_words],
        <span style="color: #ce9178;">"data"</span>:  [w[<span style="color: #b5cea8;">1</span>] <span style="color: #569cd6;">for</span> w <span style="color: #569cd6;">in</span> top_words]
    }}
        </pre>
    </div>
   
    <p style="margin-top: 15px;"><b>Как это работает:</b></p>
    <ul>
        <li>Из всех постов собирается текст и разбивается на отдельные слова</li>
        <li>Отбрасываются слова короче 3 символов (чтобы исключить бессмысленные сочетания)</li>
        <li>Из оставшихся слов удаляются стоп-слова (предлоги, местоимения, союзы)</li>
        <li>Подсчитывается частота оставшихся слов и формируется топ-20</li>
        <li>В результате пользователь видит самые значимые темы, которые чаще всего встречаются в постах сообщества</li>
    </ul>
</div>
     <!-- Выводы -->
     <!-- Выводы -->
     <div style="background-color: #ffffff; padding: 20px; border-radius: 12px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">
     <div style="background-color: #ffffff; padding: 20px; border-radius: 12px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">

Версия от 09:37, 27 марта 2026

📊 Аналитика профиля ВКонтакте

Автор: Арлинская Александра

Группа: АДЭУ-221

Дисциплина: Работа с API социальных сетей и визуализация данных

📘 Введение

Проект представляет собой веб-сайт для детального анализа публичной страницы или профиля ВКонтакте. Пользователь вводит адрес сообщества, после чего система собирает данные через официальное API VK, обрабатывает их и отображает в виде структурированной статистики и наглядных графиков.

🎯 Цель проекта

  • Создать удобный инструмент для анализа статистики сообществ ВКонтакте.
  • Предоставить пользователю ключевые метрики: количество подписчиков, постов, суммарные лайки, репосты и комментарии.
  • Визуализировать динамику вовлечённости по времени: график активности по постам, распределение по часам и дням недели.
  • Провести текстовый анализ контента с выделением самых частых слов в публикациях.

💻 Стек технологий

       🐍 Python 3.11
       ⚡ FastAPI
       🌐 VK API
       📄 HTML5
       🎨 CSS3
       📜 JavaScript
       📊 Chart.js
       🎨 Jinja2

🛠 Архитектура и блок-схема проекта

Проект построен на архитектуре клиент-сервер. Backend (Python + FastAPI/Flask) обрабатывает запросы к VK API, собирает и агрегирует данные. Frontend (HTML/CSS/JS) отображает информацию и визуализирует графики с использованием библиотеки Chart.js.

🔑 Получение токена доступа VK API

Для работы с API ВКонтакте необходимо создать приложение и получить ключ доступа (токен). Ниже описан пошаговый процесс.

Шаг 1. Создание приложения

На странице создания приложения необходимо указать следующие параметры:

  • Тип приложения — выбирается «Мини-приложение» для получения доступа к API сообществ и пользователей.
  • Название приложения — задаётся уникальное имя (не менее трёх символов).
  • Категория — выбирается «Инструменты» для аналитических сервисов.

После заполнения формы необходимо подтвердить согласие с правилами размещения и платформы, затем нажать кнопку «Создать».

Шаг 2. Получение ключей доступа

В разделе «Ключи доступа» генерируется токен для работы с API.

Сгенерированный токен сохраняется в файле .env проекта для дальнейшего использования при запросах к VK API.


🗂 Структура проекта

VK-DASHBOARD/
📁 __pycache__/
📁 .venv/ — виртуальное окружение
📁 public/
📁 img/
🖼 favicon.svg
📁 templates/
📄 index.html — главная страница с формой ввода
📄 result.html — страница с результатами аналитики
📄 main.py — основной файл приложения (Flask/FastAPI)
📄 .env — переменные окружения (токен VK API)
📄 .env.example — пример конфигурации

Назначение ключевых файлов:

  • main.py — серверная логика: маршруты, взаимодействие с VK API, обработка данных.
  • templates/index.html — стартовая страница с полем ввода адреса профиля.
  • templates/result.html — страница с полной аналитикой: графики, статистика, топ-слов.
  • .env — хранение токена доступа к VK API и других секретов.

📊 Описание визуализации

1. Главная страница

Пользователю предлагается ввести адрес страницы (например, durov или полную ссылку vk.com/durov). После нажатия кнопки «Анализировать» система начинает сбор данных. Кнопка «Сбросить» очищает форму для нового запроса.

2. Карточка профиля

В верхней части страницы результатов отображается основная информация о сообществе или пользователе:

  • Имя профиля и статус (например, «Pavel Durov» и «Детектор»).
  • Геолокация — город (Saint Petersburg).
  • Дата рождения и пол (для пользователей).
  • Количество подписчиков — крупным шрифтом (4.8M).
  • Количество загруженных постов (500).

3. Ключевые метрики

Блок с агрегированной статистикой по всем проанализированным постам:

  • Общее количество постов.
  • Суммарное количество лайков и среднее значение на пост.
  • Суммарное количество репостов.
  • Суммарное количество комментариев и среднее значение на пост.

4. График вовлечённости по постам

Линейный график, отображающий динамику трёх метрик (лайки, репосты, комментарии) для последних 50 постов. По оси X — даты публикаций, по оси Y — количество взаимодействий. График позволяет визуально оценить пики активности и выявить наиболее успешные публикации.

5. Активность по часам

Горизонтальная столбчатая диаграмма, показывающая распределение публикаций по часам суток. Позволяет определить, в какое время автор чаще всего публикует контент. Часовые интервалы от 00:00 до 21:00.

6. Активность по дням

Столбчатая диаграмма, отображающая количество публикаций по дням недели (Пн, Вт, Ср, Чт, Пт, Сб, Вс). Помогает выявить наиболее активные дни ведения сообщества.

7. Топ-20 слов

Список наиболее часто встречающихся слов в текстах постов. Анализ позволяет понять основные темы и ключевые понятия, вокруг которых строится контент сообщества. Пример: «вконтакте», «telegram», «россии», «пользователей», «сегодня».

🚫 Фильтрация стоп-слов

При анализе текстов постов система автоматически исключает часто встречающиеся, но не несущие смысловой нагрузки слова (предлоги, местоимения, союзы). Это позволяет выделить действительно значимые ключевые слова и получить точную картину тематики контента.

Стоп-слова включают: «и», «в», «на», «не», «что», «он», «я», «с», «как», «а», «то», «все», «она», «но», «да», «ты», «к», «у», «же», «вы», «за», «бы», «по», «только», «её», «мне», «было», «вот», «от», «меня», «ещё», «нет», «о», «из», «ему», «теперь», «когда», «даже», «ну», «вдруг», «ли», «если», «уже», «или», «ни», «быть», «был», «него», «до», «вас», «нибудь», «опять», «уж», «вам», «ведь», «там», «потом», «себя», «ничего», «ей», «может», «они», «тут», «где», «есть», «надо», «ней», «для», «мы», «тебя», «их», «чем», «была», «сам», «чтоб», «без», «будто», «чего», «раз», «тоже», «себе», «под», «будет», «ж», «тогда», «кто», «этот», «того», «потому», «этого», «какой», «совсем», «ним», «здесь», «этом», «один», «почти», «мой», «тем», «чтобы», «нее», «сейчас», «были», «куда», «зачем», «всех», «никогда», «можно», «при», «наконец», «два», «об», «другой», «хоть», «после», «над», «больше», «тот», «через», «эти», «нас», «про», «всего», «них», «какая», «много», «разве», «три», «эту», «моя», «впрочем», «свою», «этой», «перед», «иногда», «лучше», «чуть», «том», «нельзя», «такой», «им», «более», «всегда», «конечно», «всю», «между», «это», «этим», «нам», «этих», «та», «те», «при», «ещe», «тебе», «со», «вся», «все», «бы», «ведь», «вон», «вот», «да», «даже», «для», «его», «нет», «ни», «тот», «раз», «еще».

А также английские стоп-слова: «the», «and», «in», «of», «to», «a», «is», «it», «that», «for», «on», «are», «with», «was», «at», «be», «by», «this», «have», «from», «or», «an», «but», «not», «they», «we», «you», «he», «she», «all», «as», «do», «did», «been», «his», «her», «our», «their».

📝 Отрывок кода, отвечающий за фильтрацию:

<span style="color: #569cd6;"># Список стоп-слов (русские и английские)</span>
<span style="color: #569cd6;">RU_STOPWORDS</span> = {
    <span style="color: #ce9178;">"и"</span>,<span style="color: #ce9178;">"в"</span>,<span style="color: #ce9178;">"во"</span>,<span style="color: #ce9178;">"не"</span>,<span style="color: #ce9178;">"что"</span>,<span style="color: #ce9178;">"он"</span>,<span style="color: #ce9178;">"на"</span>,<span style="color: #ce9178;">"я"</span>,<span style="color: #ce9178;">"с"</span>,<span style="color: #ce9178;">"со"</span>,<span style="color: #ce9178;">"как"</span>,<span style="color: #ce9178;">"а"</span>,<span style="color: #ce9178;">"то"</span>,<span style="color: #ce9178;">"все"</span>,<span style="color: #ce9178;">"она"</span>,
    <span style="color: #ce9178;">"так"</span>,<span style="color: #ce9178;">"его"</span>,<span style="color: #ce9178;">"но"</span>,<span style="color: #ce9178;">"да"</span>,<span style="color: #ce9178;">"ты"</span>,<span style="color: #ce9178;">"к"</span>,<span style="color: #ce9178;">"у"</span>,<span style="color: #ce9178;">"же"</span>,<span style="color: #ce9178;">"вы"</span>,<span style="color: #ce9178;">"за"</span>,<span style="color: #ce9178;">"бы"</span>,<span style="color: #ce9178;">"по"</span>,<span style="color: #ce9178;">"только"</span>,<span style="color: #ce9178;">"её"</span>,
    <span style="color: #ce9178;">"the"</span>,<span style="color: #ce9178;">"and"</span>,<span style="color: #ce9178;">"in"</span>,<span style="color: #ce9178;">"of"</span>,<span style="color: #ce9178;">"to"</span>,<span style="color: #ce9178;">"a"</span>,<span style="color: #ce9178;">"is"</span>,<span style="color: #ce9178;">"it"</span>,<span style="color: #ce9178;">"that"</span>,<span style="color: #ce9178;">"for"</span>,<span style="color: #ce9178;">"on"</span>,<span style="color: #ce9178;">"are"</span>,
}

<span style="color: #569cd6;"># Функция обработки текста постов</span>
<span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">process_posts</span>(posts: list) -> dict:
    <span style="color: #6a9955;"># Сбор всего текста из постов</span>
    all_text = <span style="color: #ce9178;">" "</span>.join(p.get(<span style="color: #ce9178;">"text"</span>, <span style="color: #ce9178;">""</span>) <span style="color: #569cd6;">for</span> p <span style="color: #569cd6;">in</span> posts <span style="color: #569cd6;">if</span> p.get(<span style="color: #ce9178;">"text"</span>))
    
    <span style="color: #6a9955;"># Разбивка на слова (только слова длиной от 3 символов)</span>
    words = re.findall(<span style="color: #ce9178;">r"\b[а-яёa-zA-Z]{3,}\b"</span>, all_text.lower())
    
    <span style="color: #6a9955;"># Фильтрация стоп-слов</span>
    filtered = [w <span style="color: #569cd6;">for</span> w <span style="color: #569cd6;">in</span> words <span style="color: #569cd6;">if</span> w <span style="color: #569cd6;">not</span> <span style="color: #569cd6;">in</span> RU_STOPWORDS]
    
    <span style="color: #6a9955;"># Подсчёт топ-20 самых частых слов</span>
    top_words = Counter(filtered).most_common(<span style="color: #b5cea8;">20</span>)
    
    <span style="color: #569cd6;">return</span> {<span style="color: #ce9178;">"words"</span>: {
        <span style="color: #ce9178;">"labels"</span>: [w[<span style="color: #b5cea8;">0</span>] <span style="color: #569cd6;">for</span> w <span style="color: #569cd6;">in</span> top_words],
        <span style="color: #ce9178;">"data"</span>:   [w[<span style="color: #b5cea8;">1</span>] <span style="color: #569cd6;">for</span> w <span style="color: #569cd6;">in</span> top_words]
    }}
        

Как это работает:

  • Из всех постов собирается текст и разбивается на отдельные слова
  • Отбрасываются слова короче 3 символов (чтобы исключить бессмысленные сочетания)
  • Из оставшихся слов удаляются стоп-слова (предлоги, местоимения, союзы)
  • Подсчитывается частота оставшихся слов и формируется топ-20
  • В результате пользователь видит самые значимые темы, которые чаще всего встречаются в постах сообщества

📌 Выводы

  • Разработанный веб-сайт предоставляет полную аналитику публичного профиля ВКонтакте: от базовых метрик до детальных графиков вовлечённости.
  • Визуализация данных включает линейные графики динамики постов, распределение по часам и дням недели, а также текстовый анализ с выделением ключевых слов.
  • Интерфейс выполнен в стилистике VK: светлый фон, акцентные синие элементы, удобная карточная структура.
  • Для работы с API был успешно получен токен доступа через создание мини-приложения в VK.