LabVIEW робот получающий статистику по выборам.

Делись идеей, получай поддержку и критику!
Ответить
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

LabVIEW робот получающий статистику по выборам.

Сообщение mzu2006 »

Предыстория вопроса.
После публикаций в Троицком Варианте про статистический анализ прошедших в декабре выборов решил сам посмотреть на выборную статистику. Для этого было решено сделать робота, выкачивающего из интернета с сайта центральной избирательной комиссии (ЦИК) разрозненные файлы и соединяющий их в 1. Данные имеют древовидную структуру: ЦИК состоит из нескольких Территориальных Избирательных Комиссий (ТИКов), ТИК либо из УИКов (Участковых Избирательных Комиссий), либо из нескольких более мелких ТИКов (Данные вынимаются все, т.е. до и включая УИКи). ЦИК, каждый ТИК и каждый УИК имеют одинаковый набор данных в соответствии с графами итогового протокола голосования. Для реализации был выбран :labview:.

Организация кода
Код организован с использованием архитектуры producer-consumer, а также рекурсивной многозадачности через рекурсию по мотивам предложенного Tomi Maila. Робот использует стартовую страницу для прошедших выборов для запуска. С каждой страницы считываются данные по избирательной комиссии этого уровня, потом определяются страницы нижестоящих избирательных комиссий. Каждая новая страница порождает параллельную задачу (считать-обработать-породить новые задачи). Одновременно выполняемое количество потоков регулируется consumer циклом.

Структуры данных
Кэш
Кэш реализован через атрибуты типа вариант. Организована LV2Global, в которой хранится тип вариант. Одна из операций над LV2Global - добавить URL в кэш, вторая операция - получить локальный путь из для данной URL. На рисунке показана первая из операций:
URLCache.png
URLCache.png (7.45 КБ) 7197 просмотров
Дерево данных по избиркомам
Древовидная структура данных реализована через LVOOP. Имеется базовый объект BaseNode.lvclass. Производный класс Node содержит ссылки на объекты класса BaseNode и инкапсулирует функциональность дерева. IKNode - производный класс от Node - содержит в себе данные из соответствующих строчек протокола каждой избирательной комиссии.

Общие замечания
Друзья, здесь мы обсуждаем аспекты реализации робота, а политику - в другом месте.
Программа может нехило нагрузить канал (у меня отвалился WiMAX), поэтому используйте с осторожностью
Программа нехило нагружает сайт избиркома, пользуйтесь кешем (порядка 100000 файлов - число избиркомов в России)
к сожалению :labview: tree control совершенно не приспособлен к выводу информации с 100000 элементов.
Приходится ждать обновления control примерно столько сколько происходит скачивание.

Возможные доработки
1. Ограничение параллельности нужно делать не так как сделано а на уровне кода, реализующего рекурсию
2. Нужно написать свой, более быстрый XControl для дерева с множеством элементов.
3. Обрезать пути, которые используются для кэша.
4. С минимальной модификацией робот способен вынимать данные и по другим выборам (в частности последним) с сайта ЦИК.

Скачать
Для запуска требуется internet toolkit, OpenG file (для windows) :labview: >=2010.
Elections2010.zip
(715.57 КБ) 200 скачиваний
Работает под linux с установленным internet тулкитом. Замените главный :vi: на прилагаемый (2011)
DisplayTreeWorkerPool.vi.zip
(74.5 КБ) 195 скачиваний
Откомпилированная версия тоже прилагается.
ElectionsDuma2011.zip
(988.33 КБ) 196 скачиваний
Напоминаю, что для запуска откомпилированной версии запуска требуется установленная Runtime Environment версии 2010 SP1, (скачивать отсюда)

Запуск
Установите путь к кэшу, проверьте, что во временной директории есть достаточно места для временных файлов, укажите путь к результирующему файлу и нажмите кнопку "Start".
Программу можно останавливать кнопкой Stop, всё скачанное сохранится в кэше, потом можно перезапустить.

Результаты
Кому интересны лишь результаты выполнения:
Elections2011-Duma.zip
(2.92 МБ) 203 скачивания
PS. Код написан за несколько часов "на коленке", не судите строго.
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: LabVIEW робот получающий статистику по выборам.

Сообщение Pavel Krivozubov »

Прикольный проект :super:
Это наверное самое экзотическое применение LabVIEW из всех, которые я видел :wink:
Но выборы же закончились. Какое его практическое применение после выборов?
Можно ли его использовать на следующих выборах в России? И легко ли он адаптируется для выборов в других странах?
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: LabVIEW робот получающий статистику по выборам.

Сообщение mzu2006 »

Практических применений несколько:
1. Отсюда можно вычленить шаблон для работы с древовидной структурой данных.
2. Отсюда можно вычленить шаблон для выкачивания интернет сайтов.
3. Я хотел поделиться приемом кэширования
4. Изучение электоральной статистики в России

Насколько я понимаю, адаптация к любым другим выборам на сайте ГАС-Выборы - это просто замена одного числа в коде. Я попробую и расскажу. В принципе, данные по выборам другой страны (где они опубликованы) - это такой же иерархически организованный сайт.

Мне же было интересно вот что. Говорят, что на выборах в Думу основным видом фальсификации в Питере был вброс, а в Москве - ночная переписка протоколов. А на президентских - в Питере - ночная переписка протоколов, а в Москве карусели-открепительные. Говорят, что это видно на статистических данных. Чтобы пройти тем же путем, которым прошли авторы этих высказываний, нужно скачать эти данные и обработать их. Первая часть выполнена: данные скачаны.
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: LabVIEW робот получающий статистику по выборам.

Сообщение Pavel Krivozubov »

Отлично, с нетерпением ждём результатов второй части.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Проекты»