Как мы делали материал про муниципальные выборы в Москве

Накануне муниципальных выборов в Москве мы выпустили материал про кандидатов. На примере описания процесса мы решили рассказать, как работаем и создаем материалы. Мы не хотим грузить вас формальным языком и объясним, как это было на самом деле.

Данные
Самый простой способ найти данные — это первоисточник. В нашем случае это был сайт ЦИКа, который аккумулирует у себя всю информацию о выборах в России. Второй способ — найти ребят, которые уже вытащили эти данные. Например, в нашем случае датасет по всем кандидатам уже был на сайте избирательной комиссии . К сожалению, он нам не подошёл, так как была идея сравнить эти выборы с прошлыми.

Был написан парсер на python, который собрал нам всю информацию по кандидатам: ФИО, год рождения, партия, занятость и т. д. Это заняло три часа. В итоге скрипт открывал сайт избиркома, находил по региону, датам и ключевым словам находил выборы, по каждому району они были отдельные. Дальше мы шли по списку кандидатов и сохраняли информацию о них себе. И так мы сделали как для выборов 2017 года, так и для 2012.

Все это позволило (не без помощи pandas) сформировать понятную таблицу для анализа.

Почти всегда для анализа мы используем pandas. Он крайне удобен и позволяет очень быстро работать с достаточно крупными массивами.

Весь анализ начинается со гипотез, у нас были такие:
• Увеличилась конкуренция,
• Пришло много молодежи
• Много «понаехавших»
• У Единой России много бюджетников
• Много кандидатов с сомнительной биографией
• Есть интересные судимости
• Некоторые партии имеют кадровые проблемы и их кандидаты подавали по несколько заявок каждый

При проверках гипотез основные сложности вызывает подготовка данных к ним. Например, для оценки конкуренции нужно было убрать тех, кого не зарегистрировали, а для других гипотез — убрать повторные заявки в разных округах, чтобы не считать кандидатов по два или более раз.

Конкуренцию мы сравнили через группировку по годам и районам. Для небольших данных мы часто используем google spreadsheets, куда экспортируем данные из основной среды для анализа (jupyter notebook). Там есть и сводные таблицы, и модули с геокодерами, сведением/разделением строк и столбцов.

С молодежью было чуть сложнее. Для начала мы перевели год рождения в возраст, а потом делали рабочие визуализации.

Посмотрели еще и средний возраст по партиям, но там ничего интересного не было, кроме каких-то глупостей, типа у «Российской партии пенсионеров за справедливость» средний возраст был 34 года.

Для оценки мест рождения и жительства, мы просто проверили по наличию вхождений слов «москв», «моско» и т. д. в названия мест жительства и рождения и оценили долю «понаехавших». Их оказалось около 41%. Не очень понятно, много это или мало, поэтому на этом мы не стали заострять внимание (мне кажется, что много — Сергей). Также оценили количество кандидатов, которые даже не живут в Москве, их оказалось совсем мало.

Одна из самых затратных гипотез ввиду того, что должности и места работы не систематизированы, приходилось подбирать ключевые слова и по названию должностей и мест работ определять кандидатов к тем или иным группам. Например, «домохоз» (не «домохозяйка», так как есть и «домохозяины»), «не работ», «безраб», «неработ» — это всё про безработных. А для бюджетников «государ», «муниципал», «поликлиник», «больниц», «школ», «детский сад», «гбоу», «гау», «казенн», «гуп», «гбу», «гбпоу», «гку», «гоу», «гапоу», «универ», «колледж». Понятно, что для детального анализа это так себе, но общую картину вполне себе показывает.

Судимости ничего интересного не показали, кроме девушки, которая уехала воевать на Донбасс и имела 3 судимости в России и одну в Украине.

Кадровые проблемы выявились через подсчет одинаковых имен кандидатов в разных районах. ЛДПР всех обошла, ибо их кандидаты подавались по многу раз, некоторые даже по 9.

В итоге из гипотез остались: уровень конкуренции, возраст кандидатов и род деятельности.

Визуализация
Конкуренция по муниципальным округам
Первой задачей было изобразить увеличение конкуренции по муниципальным округам, было желание подчеркнуть ситуацию в каждом округе. Шаблон визуализации изначально выглядел так:

Макет получился очень большим, скролл шел вниз, был непонятен макро-месседж о том, что конкуренция в целом стала больше.
В итоге было принято решение сделать карту, сгенерить ее на основе обычной svg карты районов Москвы и доделывать в Adobe Illustrator.

Цифры с карты было решено убрать, цвет будет показывать уровень конкуренции. Было непонятно, откуда взялся «пустой» округ. Позже посмотрели, что это Щукино, выборы уже были в прошлом году.

Спорили по цветам. Можно было сделать градацию одним цветом, от светлого к темному, такой тип окраски называется однополярная прогрессия. Мы решили использовать биполярную прогрессию от красного к синему, так мы ясней изменения величин.
Чем темнее цвет, тем более высокий показатель он отображает.

Возраст кандидатов
Задача — визуализировать изменения среднего возраста кандидатов на выборах в 2012 и 2017 годах. Эскизы в начале выглядели так:

В этом макете непонятно, что означает зона пересечения графиков 2012 и 2017 годов. Решено разделить графики на две части. Все графики сделаны в программе Tabletau и доделаны в Adobe Illustrator.

Вот еще про возраст:

Линейный график здесь не подходит, речь идет не о динамических, а о категорийных значениях.
Пробовали представить каждого депутата точкой.

Точки для визуализации распределения кандидатов — не самый удачный вариант.

Линии выглядят, как будто это два независимых показателя, а по факту это число кандидатов каждого возраста. В итоге представляем в виде столбиков c заливкой.

Род деятельности кандидатов по партиям

Сначала была идея изобразить состав процентным соотношением того или иного типа деятельности по партиям и подчеркнуть «государственное» происхождение кандидатов отдельных партий.

Но потом стало понятно, что это будет манипуляцией — число кандидатов от разных партий неодинаково. Решили использовать диаграмму типа стейк .

Пробовали вариант в разбивкой по отраслям.

Но в итоге остановились на более компактном и удобном для соцсетей графике:

Граф на основе данных Вк

Задача: попробовать залезть во Вконтакте и сравнить аккаунты потенциальных депутатов по подпискам и друзьям.

До выборов оставалось несколько дней, поэтому делать нужно было быстро. Для начала мы попытались разобраться в API, его ограничениях и принципах работы. В итоге через день появились данные, которые мы вытащили через дату рождения и имя. Всего нашлось 2232 аккаунта кандидатов (около трети от общего числа) со всеми их взаимными друзьями и подписками.

В итоге получался граф с 370 068 объектами (кандидаты, их друзья, паблики и группы), между которыми имелось 39 337 связей. Пришлось их отфильтровать и оставить только те объекты, у которых не менее трех связей. Осталось 8138 объектов с 18 167 связями. При визуализации мы увеличили эту границу еще до 5 связей, чтобы граф принял более адекватную форму. В итоге полученные данные мы загрузили в Gephi и получилось так.

Сергей: Как по мне, данные неявно, но формировали кластеры. Например, было видно, что в потреблении контента представители «Единой России» абсолютно не пересекаются с «Яблоком», что может свидетельствовать об их очень серьезных идеологических различиях (что так и есть). В то время, как все остальные партии перемешаны друг с другом и их кандидаты мало чем отличатся друг от друга. Формирование двух таких полюсов («ЕР» и «Яблоко») показалось мне очень крутым, а также я был впечатлен тем, насколько мало остальные партии отличаются друг от друга — кандидаты от либерал-демократов, справедливороссов и коммунистов оказались людьми с примерно одинаковыми взглядами. Звучит смешно и немного абсурдно (но вполне в рамках российских политических реалий).

Но нормально это визуализировать не получалось. Мы пробовали цвета, разные алгоритмы и настройки укладки графа, но получалось все так себе.

В итоге остановились на версии “пушистика”, который, конечно, все равно выглядел так себе и плохо доносил то, что я описал выше. Нужно было побольше поработать настройками, с весом ребер и объектов, с укладкой, но времени уже не было, поэтому мы выпустили его таким.

Андрей (дизайнер): Данные вк — это круто, хотя и затратно по редакционным редакциям (граф задержал выход материала). Но важно понимать, какие гипотезы мы ими подтверждаем или опровергаем. Граф, который получился, дает такие инсайты, которых можно достичь без использования технологий big data. Но так как на производство потратили много ресурсов, решили опубликовать. Я предлагал сделать гиф или видео с аннотациями:

Однако анимация не показывала деталей и была скорее декоративным элементом. По уму, этот граф должен быть интерактивным, чтобы ты мог потянуть за конкретное ребро и увидеть, с кем связан тот или иной кандидат. Тогда и вовлеченность, и время пребывание пользователя на странице возросли. Но интерактив — это много ресурсов, которыми мы не располагали. В итоге договорились о статике в виде слайдера (неплохо бы снять метрики с того, сколько процентов пользователей им пользовались).
Мы надеемся, что те навыки, которые мы получили в работе с данными «Вконтакте» помогут нам в будущем сделать более качественные работы.

Продвижение
В условиях отсутствия собственной площадки мы стараемся использовать различные каналы донесения материала, которые зависят от его темы и формата. В данном случае мы посеяли материал в политических телеграмм-чатах, благодаря которым пост дошел до кандидатов и лидеров общественного мнения, которые распространяли его в Facebook и Twitter.

В один день с нами РБК выпустил материал, очень похожий на наш.

Почитать и посмотреть на то, что в итоге получилось: http://blog.mediagun.ru/?go=all/municipal-election-2017/

Поделиться
Отправить
Запинить
18 октября   #ddj   выборы   процесс
Подписывайтесь на новости в Фейсбуке
Ваш комментарий
адрес не будет опубликован

ХТМЛ не работает

Ctrl + Enter
Популярное