Предыстория вопроса.
После публикаций в Троицком Варианте про статистический анализ прошедших в декабре выборов решил сам посмотреть на выборную статистику. Для этого было решено сделать робота, выкачивающего из интернета с сайта центральной избирательной комиссии (ЦИК) разрозненные файлы и соединяющий их в 1. Данные имеют древовидную структуру: ЦИК состоит из нескольких Территориальных Избирательных Комиссий (ТИКов), ТИК либо из УИКов (Участковых Избирательных Комиссий), либо из нескольких более мелких ТИКов (Данные вынимаются все, т.е. до и включая УИКи). ЦИК, каждый ТИК и каждый УИК имеют одинаковый набор данных в соответствии с графами итогового протокола голосования. Для реализации был выбран .
Организация кода
Код организован с использованием архитектуры producer-consumer, а также рекурсивной многозадачности через рекурсию по мотивам предложенного Tomi Maila. Робот использует стартовую страницу для прошедших выборов для запуска. С каждой страницы считываются данные по избирательной комиссии этого уровня, потом определяются страницы нижестоящих избирательных комиссий. Каждая новая страница порождает параллельную задачу (считать-обработать-породить новые задачи). Одновременно выполняемое количество потоков регулируется consumer циклом.
Структуры данных
Кэш
Кэш реализован через атрибуты типа вариант. Организована LV2Global, в которой хранится тип вариант. Одна из операций над LV2Global - добавить URL в кэш, вторая операция - получить локальный путь из для данной URL. На рисунке показана первая из операций:
Дерево данных по избиркомам
Древовидная структура данных реализована через LVOOP. Имеется базовый объект BaseNode.lvclass. Производный класс Node содержит ссылки на объекты класса BaseNode и инкапсулирует функциональность дерева. IKNode - производный класс от Node - содержит в себе данные из соответствующих строчек протокола каждой избирательной комиссии.
Общие замечания
Друзья, здесь мы обсуждаем аспекты реализации робота, а политику - в другом месте.
Программа может нехило нагрузить канал (у меня отвалился WiMAX), поэтому используйте с осторожностью
Программа нехило нагружает сайт избиркома, пользуйтесь кешем (порядка 100000 файлов - число избиркомов в России)
к сожалению tree control совершенно не приспособлен к выводу информации с 100000 элементов.
Приходится ждать обновления control примерно столько сколько происходит скачивание.
Возможные доработки
1. Ограничение параллельности нужно делать не так как сделано а на уровне кода, реализующего рекурсию
2. Нужно написать свой, более быстрый XControl для дерева с множеством элементов.
3. Обрезать пути, которые используются для кэша.
4. С минимальной модификацией робот способен вынимать данные и по другим выборам (в частности последним) с сайта ЦИК.
Скачать
Для запуска требуется internet toolkit, OpenG file (для windows) >=2010.
Работает под linux с установленным internet тулкитом. Замените главный на прилагаемый (2011)
Откомпилированная версия тоже прилагается.
Напоминаю, что для запуска откомпилированной версии запуска требуется установленная Runtime Environment версии 2010 SP1, (скачивать отсюда)
Запуск
Установите путь к кэшу, проверьте, что во временной директории есть достаточно места для временных файлов, укажите путь к результирующему файлу и нажмите кнопку "Start".
Программу можно останавливать кнопкой Stop, всё скачанное сохранится в кэше, потом можно перезапустить.
Результаты
Кому интересны лишь результаты выполнения:
PS. Код написан за несколько часов "на коленке", не судите строго.
LabVIEW робот получающий статистику по выборам.
-
Pavel Krivozubov
- professor
- Сообщения: 4422
- Зарегистрирован: 07 фев 2008, 16:39
- Награды: 3
- Версия LabVIEW: 7.0 - 2013
- Откуда: г. Электросталь
- Благодарил (а): 24 раза
- Поблагодарили: 9 раз
- Контактная информация:
Re: LabVIEW робот получающий статистику по выборам.
Прикольный проект
Это наверное самое экзотическое применение LabVIEW из всех, которые я видел
Но выборы же закончились. Какое его практическое применение после выборов?
Можно ли его использовать на следующих выборах в России? И легко ли он адаптируется для выборов в других странах?
Это наверное самое экзотическое применение LabVIEW из всех, которые я видел
Но выборы же закончились. Какое его практическое применение после выборов?
Можно ли его использовать на следующих выборах в России? И легко ли он адаптируется для выборов в других странах?
Правила форума
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: LabVIEW робот получающий статистику по выборам.
Практических применений несколько:
1. Отсюда можно вычленить шаблон для работы с древовидной структурой данных.
2. Отсюда можно вычленить шаблон для выкачивания интернет сайтов.
3. Я хотел поделиться приемом кэширования
4. Изучение электоральной статистики в России
Насколько я понимаю, адаптация к любым другим выборам на сайте ГАС-Выборы - это просто замена одного числа в коде. Я попробую и расскажу. В принципе, данные по выборам другой страны (где они опубликованы) - это такой же иерархически организованный сайт.
Мне же было интересно вот что. Говорят, что на выборах в Думу основным видом фальсификации в Питере был вброс, а в Москве - ночная переписка протоколов. А на президентских - в Питере - ночная переписка протоколов, а в Москве карусели-открепительные. Говорят, что это видно на статистических данных. Чтобы пройти тем же путем, которым прошли авторы этих высказываний, нужно скачать эти данные и обработать их. Первая часть выполнена: данные скачаны.
1. Отсюда можно вычленить шаблон для работы с древовидной структурой данных.
2. Отсюда можно вычленить шаблон для выкачивания интернет сайтов.
3. Я хотел поделиться приемом кэширования
4. Изучение электоральной статистики в России
Насколько я понимаю, адаптация к любым другим выборам на сайте ГАС-Выборы - это просто замена одного числа в коде. Я попробую и расскажу. В принципе, данные по выборам другой страны (где они опубликованы) - это такой же иерархически организованный сайт.
Мне же было интересно вот что. Говорят, что на выборах в Думу основным видом фальсификации в Питере был вброс, а в Москве - ночная переписка протоколов. А на президентских - в Питере - ночная переписка протоколов, а в Москве карусели-открепительные. Говорят, что это видно на статистических данных. Чтобы пройти тем же путем, которым прошли авторы этих высказываний, нужно скачать эти данные и обработать их. Первая часть выполнена: данные скачаны.
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Pavel Krivozubov
- professor
- Сообщения: 4422
- Зарегистрирован: 07 фев 2008, 16:39
- Награды: 3
- Версия LabVIEW: 7.0 - 2013
- Откуда: г. Электросталь
- Благодарил (а): 24 раза
- Поблагодарили: 9 раз
- Контактная информация:
Re: LabVIEW робот получающий статистику по выборам.
Отлично, с нетерпением ждём результатов второй части.
Правила форума
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
Developlabs - IT услуги - ждём Ваших заказов на написание программ
Новостной канал о LabVIEW и технологиях NI на Facebook
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 2078 Просмотры
-
Последнее сообщение PozhiloyGoblin
-
- 0 Ответы
- 348 Просмотры
-
Последнее сообщение maxim_MA
-
- 23 Ответы
- 2439 Просмотры
-
Последнее сообщение dadreamer
-
- 2 Ответы
- 392 Просмотры
-
Последнее сообщение ujin1
-
- 5 Ответы
- 848 Просмотры
-
Последнее сообщение dadreamer