Данные по избирательным комиссиям РФ из ГАС Выборы: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показана 91 промежуточная версия 3 участников)
Строка 2: Строка 2:
{{Аннотация|Данные об избирательных комиссиях в машиночитаемом виде}}
{{Аннотация|Данные об избирательных комиссиях в машиночитаемом виде}}


На региональных сайтах избирательных комиссий (субодомены сайта ЦИК) появилась информация о всех территориальных и участковых избирательных комиссиях (например [http://www.altai_rep.vybory.izbirkom.ru/region/altai_rep?region=2&action=show_komissia&sub_region=2&type=100&vrnorg=0&vrnkomis=0 Алтайский край]). К сожалению, исходно информация предоставляется не в машиночитаемом виде, что препятствует эффективному ее использованию для анализа данных и картографии. Мы написали скрипты для скачивания всех данных о комиссиях и здесь можно скачать полную БД в машиночитаемом виде.
На региональных сайтах избирательных комиссий (субодомены сайта ЦИК) появилась информация о всех территориальных и участковых избирательных комиссиях (например [http://www.altai_rep.vybory.izbirkom.ru/altai_rep/ik/ Алтайский край]). К сожалению, исходно информация предоставляется не в машиночитаемом виде, что препятствует эффективному ее использованию для анализа данных и картографии. Нами были написали скрипты для скачивания всех данных о комиссиях и здесь можно получить полную БД в машиночитаемом виде.


==Общая информация==
==Общая информация==
Строка 16: Строка 16:
Для подавляющего большинства участковых избирательных комиссий факс и адрес электронной почты не указаны.
Для подавляющего большинства участковых избирательных комиссий факс и адрес электронной почты не указаны.


Также указана информация по каждому члену избирательной комиссии:
Также указана информация по каждому члену избирательной комиссии и по резерву в участковые избирательные комиссии:
* Фамилия Имя Отчество
* Фамилия Имя Отчество
* Должность (председатель/зам. председателя/секретарь/член)
* Должность (председатель/зам. председателя/секретарь/член)
Строка 24: Строка 24:
Ниже представлены данные, скачанные с сайтов избирательных комиссий субъектов РФ.
Ниже представлены данные, скачанные с сайтов избирательных комиссий субъектов РФ.


Актуальность: 04.04.2014
Актуальность: 14.09.2021
* Единая БД по всем данным ЦИК в формате [http://gis-lab.info/data/cik/cik_20140404.7z SQLite]
* Единая БД по всем данным ЦИК в формате [http://gis-lab.info/data/cik/cik_20210914.7z SQLite]
* Адреса, телефоны и пр. избирательных комиссий ([http://gis-lab.info/data/cik/cik_uik_20140404.7z CSV])
* Адреса, телефоны и пр. избирательных комиссий ([http://gis-lab.info/data/cik/cik_uik_20210914.7z CSV])
* Составы комиссий ([http://gis-lab.info/data/cik/cik_people_20140404.7z CSV])
* Составы комиссий ([http://gis-lab.info/data/cik/cik_people_20210914.7z CSV])
* Исходные данные: html-страницы ([http://gis-lab.info/data/cik/cik_20140404_orig.7z файл])  
* Резерв участковых избирательных комиссий ([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/ik/442401997889
| http://www.kemerovo.vybory.izbirkom.ru/region/kemerovo?action=ik&vrn=442401997889
|-
|-
| name  
| name  
Строка 80: Строка 112:
| адрес избирательной комиссии
| адрес избирательной комиссии
|  
|  
|652840, Кемеровская область, Мысковский городской округ, Чувашка поселок, ул. Алтын Шор, (клуб), д. 4
| 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  
| телефон избирательной комиссии
| телефон избирательной комиссии
|  
|  
|(38474) 95-6-46
|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"
|-
|-
Строка 140: Строка 192:
|  
|  
|Свердловское региональное отделение политической партии "Российская объединенная демократическая партия "ЯБЛОКО"
|Свердловское региональное отделение политической партии "Российская объединенная демократическая партия "ЯБЛОКО"
|}
Таблица резервов участковых избирательных комиссий (cik_people_reserve):
{| class="wikitable sortable"
|-
! | Код поля
! | Название поля
! | Примечания
! | Пример
|-
| id
| id записи
|
|457646
|-
| ik_id
| id избирательной комиссии
| этот id указывает на комиссию из таблицы адресов комиссии. Если для записи из резерва не удается найти подходящую комиссию, то в таблице адресов избирательных комиссий создается фейковая запись, которой назначается отрицательное значение id.
|81578
|-
| number
| номер в списке членов резерва участковой избирательной комиссии
| никакого смысла это поле не имеет
|1
|-
| fio
| Фамилия Имя Отчество члена резерва участковой избирательной комиссии
|
|Васькина Юлия Николаевна
|-
| post
| должность
|
|Зачислен в резерв составов УИК
|-
| party
| субъект, предложивший данную кандидатуру в состав комиссии
|
|собрание избирателей по месту работы - ГБОУ НПО "Профессиональный лицей №10", г.Тверь
|}
|}


Строка 153: Строка 244:
Непонятна актуальность информации. Составы комиссий и адреса УИК время от времени меняются. Из представленных данных неясно, какие из этих изменений учтены.
Непонятна актуальность информации. Составы комиссий и адреса УИК время от времени меняются. Из представленных данных неясно, какие из этих изменений учтены.


'''2. Территории избирательных участков'''
'''3. Территории избирательных участков'''


Отсутствует информация о территории избирательных участков.
Отсутствует информация о территории избирательных участков.


'''3. Непостоянство структуры записи адреса избирательной комиссии'''
'''4. Непостоянство структуры записи адреса избирательной комиссии'''
Встречаются разные вариации записи адреса избирательного участка
Встречаются разные вариации записи адреса избирательного участка
* индекс, область, район, населенный пункт, улица (название места голосования), дом
* индекс, область, район, населенный пункт, улица (название места голосования), дом
Строка 172: Строка 263:
Для получения данных служат следующие скрипты:
Для получения данных служат следующие скрипты:


*download_cik.py - скачивание исходных данных
*down.py - скачивание исходных данных
*parse_cik.py - парсинг исходных данных в SQLite базу
*cik.py - парсинг исходных данных в SQLite базу


[https://github.com/old-bibigon/parse-cik Исходный код]
[https://github.com/old-bibigon/parse-cik Исходный код]
Строка 182: Строка 273:


   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://uikgeo.ru/ УИК ГЕО] – данные об адресах участковых избирательных комиссий и географических координат помещений для голосования.
* [http://wikiuiki.org/ WikiУИКи] - данные об избирательных комиссиях и их составах.
* [http://wikiuiki.org/ WikiУИКи] - данные об избирательных комиссиях и их составах.
* Мосгоризбирком (TODO)
* [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 – территориальная избирательная комиссия
type_ik=uik – участковая избирательная комиссия

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)
email адрес электронной почты избирательной комиссии
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 символов. Для поддержки этих операций для символов вне этого диапазона необходимо подключить специальное расширение. Для этого

  • Распаковать архив с исходными текстами и перейти в директорию ext/icu/.
  • Скомпилировать расширение icu.
  • Регистронезависимый поиск по базе данных осуществляется командой
sqlite3 -header -csv cik.sqlite '.load /PATH/TO/ICU/EXTENSION/libSqliteIcu.so sqlite3_icu_init' "sql запрос" > result.csv

Альтернативные машиночитаемые источники данных

  • УИК ГЕО – данные об адресах участковых избирательных комиссий и географических координат помещений для голосования.
  • WikiУИКи - данные об избирательных комиссиях и их составах.
  • Мосгоризбирком