Списки муниципального этапа 2021 года

Описание

В этом репозитории представлен набор скриптов для поиска аудитории в VK. Осторожно - в некоторых запросах к VK подразумевается, что аудитория из Омска и возраста 12-19 лет.

Использовать их стоит примерно в этом порядке.

  • xlsx_parser.py - парсит файлы с табличками

  • graph_builder.py - ищет возможные аккаунты людей

  • plot_drawer.py - для исследования полученных данных

  • accepted_links_parser.py - если у вас уже есть подтверждёненые аккаунты, то этот скрипт добавит их куда надо

  • graph_processor.py - выбирает верную версию аккаунта для некоторых людей

  • process_cleaner.py - если вы хотите отменить действия скриптов accepted_links_parser.py и graph_processor.py

  • visualizer.py - создаёт xlsx файл, считываемый gephi для создания графа

  • manual_seeker.py - даёт возможность искать некоторых людей вручную

Полученные результаты смотри в output/members.txt.

Требования

Надеюсь, код работает под большинством Linux-систем с python3.

Перед запуском скриптов в корне проекта необходимо выполнить:

  • export PYTHONPATH=${PYTHONPATH}:`pwd`

Затем в файле data.py необходимо записать логин и пароль оператора (для части скриптов, работающих с VK API).

Затем следует выполнить команды

  • pip3 install openpyxl
  • pip3 install json
  • pip3 install vk_api
  • pip3 install matplotlib
  • sudo apt install xdotool

xlsx_parser

Требования

Для запуска скрипта подразумевается, что в директории temp лежат файлы, которые называются так:

  • itog_OLYMPINFO.xlsx

Конвертер xls -> xlsx (по 5 штук):

Более того подразумевается, что листы в файлах именованы классами учеников, а также на каждом листе присутствуют столбцы в данном порядке:

  • Фамилия Имя Отчество Школа ...(возможен пропуск)... Тип диплома

Что получится?

На выходе получаем json-файл, записанный в output/members.txt. Структура json:

[
    {
        "name": "Елена",
        "surname": "Шкарупа ",
        "patronymic": "Александровна",
        "school": "ФГБОУ ВО \"ОмГПУ\", Академический лицей",
        "diplomas": [
            {
                "olymp": "PRAVO_9-11",
                "class": "11",
                "status": "участник" // could be null
            }
        ]
    },
    {
            ...
    },
    ... 
]

Ошибка листа: формат не найден

В консоли для каждого листа показывается информация по обработке. Условия обработки листа:

  • Есть только одна клетка "Фамилия"
  • Есть только одна клетка с подстрокой "диплом"
  • Эти две клетки находятся в одной строке

graph_builder

Требования

Для запуска скрипта подразумевается, что сформирован файл output/members.txt, например с помощью xlsx_parser.py

Осторожно - vk может запретить вашему аккаунту отправлять запросы на какое-то время. Имейте пулл аккаунтов. Возможно стоит параллелить запросы.

Что получится?

В каждого человека в json-файле добавится поле "vk_pages", где будут перечислены кандидаты на его аккаунт VK.

plot_drawer

Требования

Для запуска скрипта подразумевается, что был исполнен graph_builder.py

Что получится?

В папке output будет лежать график(и), показывающий статистику по найденным аккаунтам. Для каждого человека уже известны кандидаты, а у каждого кандидата известны друзья. Каждому кандидату сопоставим число N - сколько у него друзей среди всех найденных ранее аккаунтов. Подразумевается - чем больше это число для кандидата, тем больше вероятность для него стать верифицированной страницей.

Тогда каждому человеку можно сопоставить несколько чисел - по одному от каждого кандидата. Пусть M1 - первый максимум в этом списке, M2 - второй максимум.

Графики оперируют с этими числами.

accepted_links_parser

Требования

Для запуска скрипта подразумевается, что был исполнен graph_builder.py

В файле temp/links.txt должны по одной в строке лежать верифицированные ссылки на людей - т.е. это те аккаунты VK, которые, вы уверены, принадлежат людям из искомого комьюнити.

Что получится?

Верифицированные ссылки обновят файл output/members.txt

graph_processor

Требования

Для запуска скрипта подразумевается, что был исполнен graph_builder.py

Что получится?

Для каждого человека появится поле "processed" (true/false) и поле "official_page", где в случае true будет лежать описание предполагаемой страницы vk человека.

Более того у любого аккаунта, будь он в "vk_pages" или в "official_page", появится поле "probability" - число от 0 до 1. Это вероятность того, что он является официальной страницей.

process_cleaner

Требования

Для запуска скрипта подразумевается, что был исполнен graph_builder.py и, вероятно, запущен один из этих: accepted_links_parser.py или graph_processor.py

Что получится?

Для каждого человека будут убраны поля "processed", "official_page" и все "probability" у аккаунтов

visualizer

Требования

Для запуска скрипта подразумевается, что был исполнен graph_processor.py

Что получится?

Файл output/graph.xlsx, пригодный для построения графика в gephi

gephi

Это такая утилита, которая позволяет строить графики. Принимает на вход лист xlsx файла. Стоит загрузить в один проект оба листа из файла output/graph.xlsx.

После загрузки листов в программу - получим некластеризованный граф. Чтобы получить более или менее красивый граф - сверху в панельке Windows откройте окна Statistics, Appearance, Layout.

В окне Statistics запустите основные подсчёты(нужно для вкладки Appearance потом).

В окне Layout найдите алгоритм OpenOrd и запустите его с настройками EdgeCut=0.7, NumIteration=2000. Мне такие настройки понадобились для графа на 1200 человек. Минимальные изменения этих настроек могут давать разные графы - можно подобрать покрсивей.

В окне Appearance покрастье и выберите размер согласно вашим предпочтениям. Например можно выбрать Размер согласно степени вершины, а цвет согласно школе.

Совет: Download and Install

Совет: Если понадобится установить java, то вот:

  • sudo apt install openjdk-8-jdk openjdk-8-jre

manual_seeker

Требования

Для запуска скрипта подразумевается, что сформирован файл output/members.txt

Более того подразумевается, что скрипт запускается в левой части экрана, а гугл хром (именно он!) открыт в правой части экрана

Что получится?

Получится поиск страниц vk в интерактивном формате.

Формат взаимодействия: исключительно через консоль.

Подсказка - взаимодействие улучшается при использовании тачпада и без кликов в область хрома. Так ваше окно terminal остаётся активным и готовым принимать ваши ответы.

Чтобы закончить работу - введите CTRL+C в поле для ввода в консоли