Pull to refresh
0
Лаборатория данных
Создаём интерактивные визуализации на D3.js

Мы бежали марафон. Продолжение

Reading time 3 min
Views 16K
В продолжение марафонской истории я расскажу, как мы создавали визуализацию. Работа над проектом шла поэтапно: идея, дизайн, реализация и наполнение данными.

Идея

Идея показать результаты забега пришла ко мне после участия в «Весеннем громе». Скучные официальные таблицы никак не отражали настроение забега, при этом данные были в открытом доступе — сложные и интересные. Лаборатория только открылась, и в качестве тестового задания для вакансии дизайнера я выбрала задачу о визуализации результатов «Весеннего грома». Из десятка вариантов мне больше всего понравилась идея Сергея Долинина svetosil — показать распределение участников в момент первого финиша:



Мы взяли за основую эту идею и оживили её временным слайдером. Визуализация марафона стала первым проектом Серёжи в лаборатории.

Дизайн

Итак, мы решили показать распределение бегунов по трассе в каждый момент времени, полово-возрастной состав участников и их распределение на финише, высотный профиль трассы, погоду, фотографии и интересные факты, а также полную таблицу результатов с фильтрами по возрастным группам, команде и городу. Чтобы все данные поместились на одной диаграмме пришлось попотеть. Довольно долго таблица располагалась справа от карты:



Высотный профиль показали, спроецировав его на поля слева и снизу, как на этой карте Германии, которую я давным-давно откопала на книжных развалах в Риме (сейчас она висит в Коворкафе):



Получилось не слишком понятно, зато рельеф привязан к маршруту. Оставляем так:



В конце концов слайдер и таблица переезжают под карту, а маршрут обрастает шутками и фактами. Ещё тут видны конкретные бегуны (к сожалению, реализовать эту функциональность мы так и не успели):



Техническая реализация

Тем временем, готовим технический каркас для «змея». Чип каждого спортсмена фиксировал время прохождения промежуточных рубежей (10, 21, 30, 35 км и финиш). Исходя из предположения, что между этими точками спортсмены двигались равномерно, мы получили распределение толпы на трассе.

Реализацией занимался Глеб Арестов arestov. Он взял за основу d3-шный стримграф и научился строить его вдоль кривой. Вот что рассказывает Глеб:

«Мы строили график по двум точкам:
1) точка, удалённая на n метров от начала пути, заданного через географические координаты
2) точка, находящаяся на отрезке перпендикулярном касательной к кривой в первой точке на необходимой высоте (высоте змея)

Касательная в данном случае не вычисляется, а точка вычисляется через прямую (которая заменяет касательную), заданную двумя точками — серединами двух отрезков, одного отрезка от предыдущего соседа до текущей опорной точки и неё до следующего соседа (соседи — тоже опорные точки). Чтобы получить координаты ищется угол между осью Х и этой прямой (это угол потом будет использоваться ещё для построения кривых Безье).»

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

Сначала налажали с геометрией:



Исправились:



Добавили деление на группы:



Привязали высоты (здесь они сильно скачут из-за слишком большой детализации):



После это натянули на каркас готовый дизайн, осталось оживить картину реальными данными.

Наполнение данными

Мы тестировали змея на результатах питерских «Белых ночей», нам оставалось только подменить эти данные московскими.

В последний момент перед стартом маршрут марафона изменился (Крымскую набережную не успели открыть после ремонта). Но нам было достаточно заменить старый кусок маршрута на новый — путь змея и высоты пересчитались автоматически.

Договориться с организаторами о предоставлении данных в удобном виде не удалось. Поэтому мы просто брали итоговые протоколы с сайта, распознавали, правили вручную и складывали в отдельный файл. (А это проще сказать, чем сделать, в общей сложности на работу ушло 2-3 дня). Проще было распарсить сайт, скажете вы, но результаты там были опубликованы гораздо позже появления протоколов — мы попросту не дождались.

Заключение

Вот что получилось: moscowmarathon2017.datalaboratory.ru

Работа над проектом заняла полтора месяца. За это время мы с Серёжей успели съездить в беговой лагерь в Хорватии, где вместе тренировались и работали. Обычно мы лишены такой возможности — я сижу в Москве, а Серёжа в Питере. На фото мы слева:



Кстати, в лаборатории полнейший ремоут. Мы работаем удалённо с клиентами из Москвы, Питера, Минска, Тюмени, Сербии, Мельбурна. Об этом я расскажу подробнее в следующих заметках :-)

UPD. По совету KoGor добавила детали в описание технической реализации.
Tags:
Hubs:
+24
Comments 18
Comments Comments 18

Articles

Information

Website
datalaboratory.ru
Registered
Founded
Employees
2–10 employees
Location
Россия