Данные по избирательным комиссиям РФ из ГАС Выборы: различия между версиями
Kalenkov (обсуждение | вклад) |
|||
(не показано 108 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
{{Статья| | {{Статья|Опубликована|cik-data}} | ||
{{Аннотация|Данные об избирательных комиссиях}} | {{Аннотация|Данные об избирательных комиссиях в машиночитаемом виде}} | ||
На региональных сайтах избирательных комиссий (субодомены сайта ЦИК) появилась информация о всех территориальных и участковых избирательных комиссиях (например [http://www.altai_rep.vybory.izbirkom.ru/altai_rep/ik/ Алтайский край]). К сожалению, исходно информация предоставляется не в машиночитаемом виде, что препятствует эффективному ее использованию для анализа данных и картографии. Нами были написали скрипты для скачивания всех данных о комиссиях и здесь можно получить полную БД в машиночитаемом виде. | |||
==Общая информация== | ==Общая информация== | ||
Для каждой избирательной комиссии предоставляется следующая информация: | |||
Для каждой избирательной комиссии предоставляется следующая информация | |||
* Наименование избирательной комиссии | * Наименование избирательной комиссии | ||
* Адрес комиссии | * Адрес комиссии | ||
Строка 16: | Строка 16: | ||
Для подавляющего большинства участковых избирательных комиссий факс и адрес электронной почты не указаны. | Для подавляющего большинства участковых избирательных комиссий факс и адрес электронной почты не указаны. | ||
Также указана информация по каждому члену избирательной комиссии | Также указана информация по каждому члену избирательной комиссии и по резерву в участковые избирательные комиссии: | ||
* Фамилия Имя Отчество | * Фамилия Имя Отчество | ||
* Должность (председатель/зам. председателя/секретарь/член) | * Должность (председатель/зам. председателя/секретарь/член) | ||
Строка 24: | Строка 24: | ||
Ниже представлены данные, скачанные с сайтов избирательных комиссий субъектов РФ. | Ниже представлены данные, скачанные с сайтов избирательных комиссий субъектов РФ. | ||
Актуальность: | Актуальность: 14.09.2021 | ||
* Единая БД по всем данным ЦИК в формате [http://gis-lab.info/data/cik/ | * Единая БД по всем данным ЦИК в формате [http://gis-lab.info/data/cik/cik_20210914.7z SQLite] | ||
* Адреса, телефоны и пр. избирательных комиссий ([http://gis-lab.info/data/cik/ | * Адреса, телефоны и пр. избирательных комиссий ([http://gis-lab.info/data/cik/cik_uik_20210914.7z CSV]) | ||
* Составы комиссий ([http://gis-lab.info/data/cik/ | * Составы комиссий ([http://gis-lab.info/data/cik/cik_people_20210914.7z CSV]) | ||
* Исходные данные: html-страницы ([http://gis-lab.info/data/cik/ | * Резерв участковых избирательных комиссий ([http://gis-lab.info/data/cik/cik_people_reserve_20210914.7z CSV]) | ||
* Исходные данные: html-страницы ([http://gis-lab.info/data/cik/cik_20210914_orig.7z файл]) | |||
===Архив=== | |||
Чтобы скачать предыдущие версии данных, необходимо поменять дату в ссылках на другую, имеющуюся в архиве. Доступны следующие даты: | |||
*20140404 | |||
*20140629 | |||
*20141119 | |||
*20150915 | |||
*20160229 | |||
*20160629 | |||
*20170121 | |||
*20170719 | |||
*20180215 | |||
*20180709 | |||
*20180906 | |||
*20190101 | |||
*20190313 | |||
*20190617 | |||
*20190905 | |||
*20191110 | |||
*20200212 | |||
*20200610 | |||
*20200628 | |||
*20200910 | |||
*20210208 | |||
*20210630 | |||
==Структура данных == | ==Структура данных == | ||
Таблица адресов избирательных комиссий: | Таблица адресов избирательных комиссий (cik_uik): | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
|- | |- | ||
Строка 42: | Строка 69: | ||
| id | | id | ||
| id избирательной комиссии | | id избирательной комиссии | ||
| | | Если для записи из резерва не удается найти подходящую комиссию, то в таблице адресов избирательных комиссий создается фейковая запись, которой назначается отрицательное значение id. | ||
|45766 | |45766 | ||
|- | |- | ||
Строка 49: | Строка 76: | ||
| | | | ||
| 442401997889 | | 442401997889 | ||
|- | |||
| reserve_iz_id | |||
| id резерва участковой избирательной комиссии, используемый в ГАС Выборы | |||
| | |||
| 828 | |||
|- | |- | ||
| parent_id | | parent_id | ||
Строка 70: | Строка 102: | ||
| URL интернет страницы с информацией об избирательной комиссии | | URL интернет страницы с информацией об избирательной комиссии | ||
| | | | ||
|http://www.vybory.izbirkom.ru/kemerovo | | http://www.kemerovo.vybory.izbirkom.ru/region/kemerovo?action=ik&vrn=442401997889 | ||
|- | |- | ||
| name | | name | ||
Строка 80: | Строка 112: | ||
| адрес избирательной комиссии | | адрес избирательной комиссии | ||
| | | | ||
|652840, Кемеровская область, Мысковский городской округ, Чувашка поселок, | | 652840, Кемеровская область, Мысковский городской округ, Чувашка поселок, улица Алтын Шор, дом 4, Дом культуры поселка Чувашка | ||
|- | |||
| address_voteroom | |||
| адрес помещения для голосования | |||
| Это поле появилось в выгрузке начиная с 15.02.2018 | |||
| 652840, Кемеровская область, Мысковский городской округ, Чувашка поселок, улица Алтын Шор, дом 4, Дом культуры поселка Чувашка | |||
|- | |||
| lat_ik, lon_ik | |||
| координаты избирательной комиссии | |||
| Эти поля появились в выгрузке начиная с 15.02.2018 | |||
| 53.597575, 87.818478 | |||
|- | |||
| lat_voteroom, lon_voteroom | |||
| координаты помещения для голосования | |||
| Эти поля появились в выгрузке начиная с 15.02.2018 | |||
| 53.597575, 87.818478 | |||
|- | |- | ||
| phone | | phone | ||
| телефон избирательной комиссии | | телефон избирательной комиссии | ||
| | | | ||
|( | |8-(384-74)-95-6-46 | ||
|- | |||
| phone_voteroom | |||
| телефон помещения для голосования | |||
| Это поле появилось в выгрузке начиная с 15.02.2018 | |||
|8-(384-74)-95-6-46 | |||
|- | |- | ||
| fax | | fax | ||
Строка 103: | Строка 155: | ||
|} | |} | ||
Таблица составов избирательных комиссий: | Таблица составов избирательных комиссий (cik_people): | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
|- | |- | ||
Строка 114: | Строка 166: | ||
| id записи | | id записи | ||
| | | | ||
| | |683770 | ||
|- | |- | ||
| ik_id | | ik_id | ||
| id избирательной комиссии | | id избирательной комиссии | ||
| этот id указывает на комиссию из таблицы адресов комиссии | | этот id указывает на комиссию из таблицы адресов комиссии | ||
| | |78161 | ||
|- | |- | ||
| number | | number | ||
| номер в списке членов избирательной комиссии | | номер в списке членов избирательной комиссии | ||
| никакого смысла это поле не имеет | | никакого смысла это поле не имеет | ||
| | |10 | ||
|- | |- | ||
| fio | | fio | ||
| Фамилия Имя Отчество члена избирательной комиссии | | Фамилия Имя Отчество члена избирательной комиссии | ||
| | | | ||
| | |Якимова Татьяна Валерьевна | ||
|- | |||
| post | |||
| должность | |||
| | |||
|Член | |||
|- | |||
| party | |||
| субъект, предложивший данную кандидатуру в состав комиссии | |||
| | |||
|Свердловское региональное отделение политической партии "Российская объединенная демократическая партия "ЯБЛОКО" | |||
|} | |||
Таблица резервов участковых избирательных комиссий (cik_people_reserve): | |||
{| class="wikitable sortable" | |||
|- | |||
! | Код поля | |||
! | Название поля | |||
! | Примечания | |||
! | Пример | |||
|- | |||
| id | |||
| id записи | |||
| | |||
|457646 | |||
|- | |||
| ik_id | |||
| id избирательной комиссии | |||
| этот id указывает на комиссию из таблицы адресов комиссии. Если для записи из резерва не удается найти подходящую комиссию, то в таблице адресов избирательных комиссий создается фейковая запись, которой назначается отрицательное значение id. | |||
|81578 | |||
|- | |||
| number | |||
| номер в списке членов резерва участковой избирательной комиссии | |||
| никакого смысла это поле не имеет | |||
|1 | |||
|- | |||
| fio | |||
| Фамилия Имя Отчество члена резерва участковой избирательной комиссии | |||
| | |||
|Васькина Юлия Николаевна | |||
|- | |- | ||
| post | | post | ||
| должность | | должность | ||
| | | | ||
| | |Зачислен в резерв составов УИК | ||
|- | |- | ||
| party | | party | ||
| субъект, предложивший данную кандидатуру в состав комиссии | | субъект, предложивший данную кандидатуру в состав комиссии | ||
| | | | ||
| | |собрание избирателей по месту работы - ГБОУ НПО "Профессиональный лицей №10", г.Тверь | ||
|} | |} | ||
Строка 153: | Строка 244: | ||
Непонятна актуальность информации. Составы комиссий и адреса УИК время от времени меняются. Из представленных данных неясно, какие из этих изменений учтены. | Непонятна актуальность информации. Составы комиссий и адреса УИК время от времени меняются. Из представленных данных неясно, какие из этих изменений учтены. | ||
''' | '''3. Территории избирательных участков''' | ||
Отсутствует информация о территории избирательных участков. | Отсутствует информация о территории избирательных участков. | ||
'''4. Непостоянство структуры записи адреса избирательной комиссии''' | |||
Встречаются разные вариации записи адреса избирательного участка | |||
* индекс, область, район, населенный пункт, улица (название места голосования), дом | |||
* индекс, область, район, населенный пункт (название места голосования), улица, дом | |||
* индекс, область, район, населенный пункт, улица, дом, название места голосования | |||
* и множество других | |||
Название любого компонента адреса может фигурировать в разных вариантах, содержать опечатки или вообще отсутствовать. В середине адресной строки могут присутствовать неожиданные вставки вида | |||
* Адрес УИК и помещения для голосования: | |||
* адрес УИК | |||
* адрес помещения для голосования | |||
==Скрипты== | ==Скрипты== | ||
Для получения данных служат следующие скрипты: | Для получения данных служат следующие скрипты: | ||
* | *down.py - скачивание исходных данных | ||
* | *cik.py - парсинг исходных данных в SQLite базу | ||
[https:// | [https://github.com/old-bibigon/parse-cik Исходный код] | ||
Для преобразование SQLite-> используются следующие команды: | Для преобразование SQLite -> CSV используются следующие команды: | ||
sqlite3 -header -csv cik.sqlite "select * from cik_people order by id" > cik_people.csv | sqlite3 -header -csv cik.sqlite "select * from cik_people order by id" > cik_people.csv | ||
sqlite3 -header -csv cik.sqlite "select * from cik_uik order by id" > cik_uik.csv | sqlite3 -header -csv cik.sqlite "select * from cik_uik order by id" > cik_uik.csv | ||
sqlite3 -header -csv cik.sqlite "select * from cik_people_reserve order by id" > cik_people_reserve.csv | |||
==Примеры использования== | |||
* Скачать данные об адресах и составах избирательных комиссий Башкортостана | |||
python down.py --region=bashkortostan | |||
* Скачать данные об адресах, составах избирательных комиссий и резервов участковых избирательных комиссий Орловской области | |||
python down.py --with-reserve --region=orel | |||
Список используемых наименований субъектов РФ можно посмотреть в файле cik.py | |||
==Примеры SQL запросов== | |||
<span style="color:#ff0000">'''NB''' В программе '''sqlite''' по умолчанию не включена поддержка сопоставления кириллических символов.</span> По умолчанию не работают функции перевода строки в нижний и верхний регистр и не работает регистронезависимый поиск. Как исправить этот недостаток описано [[#Подключение регистронезависимого поиска для sqlite|ниже]]. | |||
Запрос к базе данных выглядит следующим образом | |||
<syntaxhighlight lang="bash"> | |||
sqlite3 -header -csv cik.sqlite "sql запрос" > result.csv | |||
</syntaxhighlight> | |||
Примеры простых sql запросов: | |||
* Выгрузить из SQLite базы списочный состав всех избирательных комиссий Москвы с указанием названий комиссий | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik.name, | |||
cik_people.* | |||
from | |||
cik_people | |||
inner join | |||
cik_uik | |||
on cik_people.ik_id = cik_uik.id | |||
where | |||
cik_uik.region = 'moscow_city' | |||
</syntaxhighlight> | |||
* Выгрузить из SQLite базы списочный состав всех участковых избирательных комиссий Московской области с указанием названий самой комиссии и вышестоящей | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik2.name as "parent_name", | |||
cik_uik1.region, | |||
cik_uik1.url, | |||
cik_uik1.name, | |||
cik_people.fio, | |||
cik_people.post, | |||
cik_people.party | |||
from | |||
cik_uik as cik_uik1 | |||
inner join | |||
cik_uik as cik_uik2 | |||
on cik_uik1.parent_id = cik_uik2.id | |||
join | |||
cik_people | |||
on cik_people.ik_id = cik_uik1.id | |||
where | |||
cik_uik1.type_ik = 'uik' | |||
and cik_uik1.region = 'moscow_reg' | |||
</syntaxhighlight> | |||
* Выгрузить из SQLite базы адреса всех участковых комиссий Ярославской области | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik.* | |||
from | |||
cik_uik | |||
where | |||
cik_uik.region = 'yaroslavl' | |||
and cik_uik.type_ik = 'uik' | |||
and cik_uik.iz_id > 0 | |||
</syntaxhighlight> | |||
* Выгрузить из SQLite состав резервов участковых комиссий Тамбовской области | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik.name, | |||
cik_people_reserve.* | |||
from | |||
cik_people_reserve | |||
inner join | |||
cik_uik | |||
on cik_people_reserve.ik_id = cik_uik.id | |||
where | |||
cik_uik.region = 'tambov' | |||
</syntaxhighlight> | |||
* Выгрузить из SQLite состав резервов участковых комиссий Московской области с указанием названия самой комиссии, а также вышестоящей | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik2.name as "parent_name", | |||
cik_uik1.region, | |||
cik_uik1.url, | |||
cik_uik1.name, | |||
cik_people_reserve.fio, | |||
cik_people_reserve.post, | |||
cik_people_reserve.party | |||
from | |||
cik_uik as cik_uik1 | |||
left outer join | |||
cik_uik as cik_uik2 | |||
on cik_uik1.parent_id = cik_uik2.id | |||
join | |||
cik_people_reserve | |||
on cik_people_reserve.ik_id = cik_uik1.id | |||
where | |||
cik_uik1.region = 'moscow_reg' | |||
</syntaxhighlight> | |||
* Найти данные по УИКам Брянского района Брянской области | |||
Сначала с помощью запроса | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik.name, | |||
cik_uik.id | |||
from | |||
cik_uik | |||
where | |||
type_ik = 'ik' | |||
and cik_uik.name LIKE '%Брянск%' | |||
</syntaxhighlight> | |||
найдем id комиссии Брянской области. Результатом выполнения этой команды будет следующий текст | |||
<syntaxhighlight lang="text"> | |||
Избирательная комиссия Брянской области|91193 | |||
</syntaxhighlight> | |||
Так как ТИКи Брянской области имеют parent_id=91193, то их находим командой | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik.name, | |||
cik_uik.id | |||
from | |||
cik_uik | |||
where | |||
parent_id = '91193' | |||
and cik_uik.name LIKE '%Брянск%' | |||
</syntaxhighlight> | |||
Из вывода этой команды | |||
<syntaxhighlight lang="text"> | |||
name|id | |||
Брянск, Бежицкая|91194 | |||
Брянск, Володарская|91258 | |||
Брянск, Советская|91288 | |||
Брянск, Фокинская|91338 | |||
Брянская|91461 | |||
</syntaxhighlight> | |||
находим, что УИКи Брянского района Брянской области имеют parent_id=91461. Используя этот результат несложно выбрать нужную информацию по этим УИКам. | |||
NB. Это лишь пример работы со срезом от 01.01.2019. В срезах за другие даты значения id могут отличаться. | |||
* Если известно название вышестоящей комиссии, то составы непосредственно нижестоящих комиссий можно выгрузить одной командой. Например, следующая команда выдает составы всех УИК района Южное Тушино Города Москвы | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik.parent_id, | |||
cik_uik.name, | |||
cik_people.* | |||
from | |||
cik_people | |||
inner join | |||
cik_uik | |||
on cik_people.ik_id = cik_uik.id | |||
where | |||
cik_uik.parent_id in | |||
( | |||
select | |||
cik_uik.id | |||
from | |||
cik_uik | |||
where | |||
cik_uik.name like '%Южное Тушино%' | |||
) | |||
</syntaxhighlight> | |||
* Поиск члена комиссии по фамилии по всем комиссиям | |||
<syntaxhighlight lang="SQL"> | |||
select | |||
cik_uik.name, | |||
cik_uik.address, | |||
cik_people.* | |||
from | |||
cik_people | |||
inner join | |||
cik_uik | |||
on cik_people.ik_id = cik_uik.id | |||
where | |||
cik_people.fio LIKE '%Иванов Иван%' | |||
</syntaxhighlight> | |||
==Подключение регистронезависимого поиска для sqlite== | |||
По умолчанию '''sqlite''' умеет переводить символы в верхний или нижний регистр и искать строки без учета регистра только для ASCII символов. Для поддержки этих операций для символов вне этого диапазона необходимо подключить специальное расширение. Для этого | |||
* Необходимо скачать [https://www.sqlite.org/cgi/src/doc/trunk/README.md исходные тексты sqlite]. | |||
* Распаковать архив с исходными текстами и перейти в директорию ''ext/icu/''. | |||
* Скомпилировать расширение icu. | |||
* Регистронезависимый поиск по базе данных осуществляется командой | |||
<syntaxhighlight lang="bash"> | |||
sqlite3 -header -csv cik.sqlite '.load /PATH/TO/ICU/EXTENSION/libSqliteIcu.so sqlite3_icu_init' "sql запрос" > result.csv | |||
</syntaxhighlight> | |||
==Альтернативные машиночитаемые источники данных== | |||
* [http://uikgeo.ru/ УИК ГЕО] – данные об адресах участковых избирательных комиссий и географических координат помещений для голосования. | |||
* [http://wikiuiki.org/ WikiУИКи] - данные об избирательных комиссиях и их составах. | |||
* [http://gis-lab.info/blog/2013-08/mgik-data-problems/ Мосгоризбирком] |
Текущая версия от 09:36, 15 сентября 2021
по адресу http://gis-lab.info/qa/cik-data.html
Данные об избирательных комиссиях в машиночитаемом виде
На региональных сайтах избирательных комиссий (субодомены сайта ЦИК) появилась информация о всех территориальных и участковых избирательных комиссиях (например Алтайский край). К сожалению, исходно информация предоставляется не в машиночитаемом виде, что препятствует эффективному ее использованию для анализа данных и картографии. Нами были написали скрипты для скачивания всех данных о комиссиях и здесь можно получить полную БД в машиночитаемом виде.
Общая информация
Для каждой избирательной комиссии предоставляется следующая информация:
- Наименование избирательной комиссии
- Адрес комиссии
- Телефон
- Факс
- Адрес электронной почты
- Срок окончания полномочий
Для подавляющего большинства участковых избирательных комиссий факс и адрес электронной почты не указаны.
Также указана информация по каждому члену избирательной комиссии и по резерву в участковые избирательные комиссии:
- Фамилия Имя Отчество
- Должность (председатель/зам. председателя/секретарь/член)
- субъект, предложивший данную кандидатуру в состав комиссии
Скачать данные
Ниже представлены данные, скачанные с сайтов избирательных комиссий субъектов РФ.
Актуальность: 14.09.2021
- Единая БД по всем данным ЦИК в формате SQLite
- Адреса, телефоны и пр. избирательных комиссий (CSV)
- Составы комиссий (CSV)
- Резерв участковых избирательных комиссий (CSV)
- Исходные данные: html-страницы (файл)
Архив
Чтобы скачать предыдущие версии данных, необходимо поменять дату в ссылках на другую, имеющуюся в архиве. Доступны следующие даты:
- 20140404
- 20140629
- 20141119
- 20150915
- 20160229
- 20160629
- 20170121
- 20170719
- 20180215
- 20180709
- 20180906
- 20190101
- 20190313
- 20190617
- 20190905
- 20191110
- 20200212
- 20200610
- 20200628
- 20200910
- 20210208
- 20210630
Структура данных
Таблица адресов избирательных комиссий (cik_uik):
Код поля | Название поля | Примечания | Пример |
---|---|---|---|
id | id избирательной комиссии | Если для записи из резерва не удается найти подходящую комиссию, то в таблице адресов избирательных комиссий создается фейковая запись, которой назначается отрицательное значение id. | 45766 |
iz_id | id избирательной комиссии, используемый в ГАС Выборы | 442401997889 | |
reserve_iz_id | id резерва участковой избирательной комиссии, используемый в ГАС Выборы | 828 | |
parent_id | id "вышестоящей" избирательной комиссии | 45764 | |
type_ik | тип избирательной комиссии | type_ik=ik – избирательная комиссия субъекта РФ type_ik=tik – территориальная избирательная комиссия |
uik |
region | субъект РФ, к которой относится избирательная комиссия | kemerovo | |
url | URL интернет страницы с информацией об избирательной комиссии | http://www.kemerovo.vybory.izbirkom.ru/region/kemerovo?action=ik&vrn=442401997889 | |
name | название избирательной комиссии | Участковая избирательная комиссия №545 | |
address | адрес избирательной комиссии | 652840, Кемеровская область, Мысковский городской округ, Чувашка поселок, улица Алтын Шор, дом 4, Дом культуры поселка Чувашка | |
address_voteroom | адрес помещения для голосования | Это поле появилось в выгрузке начиная с 15.02.2018 | 652840, Кемеровская область, Мысковский городской округ, Чувашка поселок, улица Алтын Шор, дом 4, Дом культуры поселка Чувашка |
lat_ik, lon_ik | координаты избирательной комиссии | Эти поля появились в выгрузке начиная с 15.02.2018 | 53.597575, 87.818478 |
lat_voteroom, lon_voteroom | координаты помещения для голосования | Эти поля появились в выгрузке начиная с 15.02.2018 | 53.597575, 87.818478 |
phone | телефон избирательной комиссии | 8-(384-74)-95-6-46 | |
phone_voteroom | телефон помещения для голосования | Это поле появилось в выгрузке начиная с 15.02.2018 | 8-(384-74)-95-6-46 |
fax | номер факса избирательной комиссии | (38474) | |
адрес электронной почты избирательной комиссии | |||
end_date | дата окончания полномочий избирательной комиссии | 26.03.2018 |
Таблица составов избирательных комиссий (cik_people):
Код поля | Название поля | Примечания | Пример |
---|---|---|---|
id | id записи | 683770 | |
ik_id | id избирательной комиссии | этот id указывает на комиссию из таблицы адресов комиссии | 78161 |
number | номер в списке членов избирательной комиссии | никакого смысла это поле не имеет | 10 |
fio | Фамилия Имя Отчество члена избирательной комиссии | Якимова Татьяна Валерьевна | |
post | должность | Член | |
party | субъект, предложивший данную кандидатуру в состав комиссии | Свердловское региональное отделение политической партии "Российская объединенная демократическая партия "ЯБЛОКО" |
Таблица резервов участковых избирательных комиссий (cik_people_reserve):
Код поля | Название поля | Примечания | Пример |
---|---|---|---|
id | id записи | 457646 | |
ik_id | id избирательной комиссии | этот id указывает на комиссию из таблицы адресов комиссии. Если для записи из резерва не удается найти подходящую комиссию, то в таблице адресов избирательных комиссий создается фейковая запись, которой назначается отрицательное значение id. | 81578 |
number | номер в списке членов резерва участковой избирательной комиссии | никакого смысла это поле не имеет | 1 |
fio | Фамилия Имя Отчество члена резерва участковой избирательной комиссии | Васькина Юлия Николаевна | |
post | должность | Зачислен в резерв составов УИК | |
party | субъект, предложивший данную кандидатуру в состав комиссии | собрание избирателей по месту работы - ГБОУ НПО "Профессиональный лицей №10", г.Тверь |
Недостатки
У представленных данных есть несколько недостатков
1. Неполная адресная информация об УИК
Адрес участковой избирательной комиссии (УИК) определяется постановлением главы соответствующего муниципального образования или решением ТИК. Обычно в этих документах указывают не только почтовый адрес УИК, но также и название соответствующего здания (школа, дом культуры, клуб, и пр.). В представленных на сайтах избирательных комиссий субъектов РФ информация о типе здания во многих случаях опускается. Кроме того, там не делается различий между адресом помещения для голосования и адресом избирательной комиссии.
2. Актуальность информации
Непонятна актуальность информации. Составы комиссий и адреса УИК время от времени меняются. Из представленных данных неясно, какие из этих изменений учтены.
3. Территории избирательных участков
Отсутствует информация о территории избирательных участков.
4. Непостоянство структуры записи адреса избирательной комиссии Встречаются разные вариации записи адреса избирательного участка
- индекс, область, район, населенный пункт, улица (название места голосования), дом
- индекс, область, район, населенный пункт (название места голосования), улица, дом
- индекс, область, район, населенный пункт, улица, дом, название места голосования
- и множество других
Название любого компонента адреса может фигурировать в разных вариантах, содержать опечатки или вообще отсутствовать. В середине адресной строки могут присутствовать неожиданные вставки вида
- Адрес УИК и помещения для голосования:
- адрес УИК
- адрес помещения для голосования
Скрипты
Для получения данных служат следующие скрипты:
- down.py - скачивание исходных данных
- cik.py - парсинг исходных данных в SQLite базу
Для преобразование SQLite -> CSV используются следующие команды:
sqlite3 -header -csv cik.sqlite "select * from cik_people order by id" > cik_people.csv
sqlite3 -header -csv cik.sqlite "select * from cik_uik order by id" > cik_uik.csv
sqlite3 -header -csv cik.sqlite "select * from cik_people_reserve order by id" > cik_people_reserve.csv
Примеры использования
- Скачать данные об адресах и составах избирательных комиссий Башкортостана
python down.py --region=bashkortostan
- Скачать данные об адресах, составах избирательных комиссий и резервов участковых избирательных комиссий Орловской области
python down.py --with-reserve --region=orel
Список используемых наименований субъектов РФ можно посмотреть в файле cik.py
Примеры SQL запросов
NB В программе sqlite по умолчанию не включена поддержка сопоставления кириллических символов. По умолчанию не работают функции перевода строки в нижний и верхний регистр и не работает регистронезависимый поиск. Как исправить этот недостаток описано ниже.
Запрос к базе данных выглядит следующим образом
sqlite3 -header -csv cik.sqlite "sql запрос" > result.csv
Примеры простых sql запросов:
- Выгрузить из SQLite базы списочный состав всех избирательных комиссий Москвы с указанием названий комиссий
select
cik_uik.name,
cik_people.*
from
cik_people
inner join
cik_uik
on cik_people.ik_id = cik_uik.id
where
cik_uik.region = 'moscow_city'
- Выгрузить из SQLite базы списочный состав всех участковых избирательных комиссий Московской области с указанием названий самой комиссии и вышестоящей
select
cik_uik2.name as "parent_name",
cik_uik1.region,
cik_uik1.url,
cik_uik1.name,
cik_people.fio,
cik_people.post,
cik_people.party
from
cik_uik as cik_uik1
inner join
cik_uik as cik_uik2
on cik_uik1.parent_id = cik_uik2.id
join
cik_people
on cik_people.ik_id = cik_uik1.id
where
cik_uik1.type_ik = 'uik'
and cik_uik1.region = 'moscow_reg'
- Выгрузить из SQLite базы адреса всех участковых комиссий Ярославской области
select
cik_uik.*
from
cik_uik
where
cik_uik.region = 'yaroslavl'
and cik_uik.type_ik = 'uik'
and cik_uik.iz_id > 0
- Выгрузить из SQLite состав резервов участковых комиссий Тамбовской области
select
cik_uik.name,
cik_people_reserve.*
from
cik_people_reserve
inner join
cik_uik
on cik_people_reserve.ik_id = cik_uik.id
where
cik_uik.region = 'tambov'
- Выгрузить из SQLite состав резервов участковых комиссий Московской области с указанием названия самой комиссии, а также вышестоящей
select
cik_uik2.name as "parent_name",
cik_uik1.region,
cik_uik1.url,
cik_uik1.name,
cik_people_reserve.fio,
cik_people_reserve.post,
cik_people_reserve.party
from
cik_uik as cik_uik1
left outer join
cik_uik as cik_uik2
on cik_uik1.parent_id = cik_uik2.id
join
cik_people_reserve
on cik_people_reserve.ik_id = cik_uik1.id
where
cik_uik1.region = 'moscow_reg'
- Найти данные по УИКам Брянского района Брянской области
Сначала с помощью запроса
select
cik_uik.name,
cik_uik.id
from
cik_uik
where
type_ik = 'ik'
and cik_uik.name LIKE '%Брянск%'
найдем id комиссии Брянской области. Результатом выполнения этой команды будет следующий текст
Избирательная комиссия Брянской области|91193
Так как ТИКи Брянской области имеют parent_id=91193, то их находим командой
select
cik_uik.name,
cik_uik.id
from
cik_uik
where
parent_id = '91193'
and cik_uik.name LIKE '%Брянск%'
Из вывода этой команды
name|id
Брянск, Бежицкая|91194
Брянск, Володарская|91258
Брянск, Советская|91288
Брянск, Фокинская|91338
Брянская|91461
находим, что УИКи Брянского района Брянской области имеют parent_id=91461. Используя этот результат несложно выбрать нужную информацию по этим УИКам.
NB. Это лишь пример работы со срезом от 01.01.2019. В срезах за другие даты значения id могут отличаться.
- Если известно название вышестоящей комиссии, то составы непосредственно нижестоящих комиссий можно выгрузить одной командой. Например, следующая команда выдает составы всех УИК района Южное Тушино Города Москвы
select
cik_uik.parent_id,
cik_uik.name,
cik_people.*
from
cik_people
inner join
cik_uik
on cik_people.ik_id = cik_uik.id
where
cik_uik.parent_id in
(
select
cik_uik.id
from
cik_uik
where
cik_uik.name like '%Южное Тушино%'
)
- Поиск члена комиссии по фамилии по всем комиссиям
select
cik_uik.name,
cik_uik.address,
cik_people.*
from
cik_people
inner join
cik_uik
on cik_people.ik_id = cik_uik.id
where
cik_people.fio LIKE '%Иванов Иван%'
Подключение регистронезависимого поиска для sqlite
По умолчанию sqlite умеет переводить символы в верхний или нижний регистр и искать строки без учета регистра только для ASCII символов. Для поддержки этих операций для символов вне этого диапазона необходимо подключить специальное расширение. Для этого
- Необходимо скачать исходные тексты sqlite.
- Распаковать архив с исходными текстами и перейти в директорию ext/icu/.
- Скомпилировать расширение icu.
- Регистронезависимый поиск по базе данных осуществляется командой
sqlite3 -header -csv cik.sqlite '.load /PATH/TO/ICU/EXTENSION/libSqliteIcu.so sqlite3_icu_init' "sql запрос" > result.csv
Альтернативные машиночитаемые источники данных
- УИК ГЕО – данные об адресах участковых избирательных комиссий и географических координат помещений для голосования.
- WikiУИКи - данные об избирательных комиссиях и их составах.
- Мосгоризбирком