о визуализации данных и жизни

Позднее Ctrl + ↑

Вопрос-ответ: анализ футбольных матчей

Спрашивает Дамир Мельников:

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

В традиционных таблицах порядок столбцов отражает ход чемпионата: в матчах (М) забивают и пропускают голы, в результате — выигрыш (В), ничья (Н) или проигрыш (П), на основе которых подсчитываются очки (О). У Вадима то же самое, только вместо голов — моменты, ВНП и О рассчитываются именно для них.

Объединим две таблицы:
М | Зб Пр | ВНП О для голов
+
М | Сз Дп | ВНП О для моментов
=
М | Сз Зб Дп Пр | ВНП О для моментов | ВНП О  для голов | Разница очков

Момент предшествует голу, поэтому статистика моментов в таблице идёт перед статистикой голов. Cозданные моменты сгрупируем с забитыми голами, допущенные моменты с пропущенными. При наведении покажем разницу этих показателей, которую анализирует в статье Вадим. Избавимся от графического мусора, выровняем подписи по левому краю, а цифры по разрядам, для наглядности поставим на строки логотипы команд. Вишенка на торте — временной слайдер, который показывает историю изменения таблицы с начала чемпионата:

Внутри лиги таблица сортируется по очкам, голам или моментам. По альтернативной версии в Премьер-лиге Арсенал опередил Челси и Манчестер Сити.

Как сделать футбольную статистику ещё интереснее и нагляднее? Дополним таблицу (информативную, но всё же суховатую) полем, на котором при выборе команды будем отмечать голы и голевые моменты. Слева свои ворота, справа — ворота всех противников. Голы с голевым моментом и без показаны красными стрелками, нерезультативные моменты — фиолетовыми линиями: промах со стрелкой, «сейв» с кружком, заблокированный удар с перпендикулярной чертой соответственно.

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

Сравним игру команд на одном экране:

Живой прототип: https://big-chances.datalaboratory.ru/

Команды-лидеры создают больше моментов у ворот противника, чем допускают у своих; у команд, замыкающих список, ситуация противоположная. У ворот Сандерленда практически отсутствую фиолетовые стрелки — много голов, мало нереализованных голевых моментов. Ну и, конечно, сразу бросается в глаза гол Чарли Адама с середны поля в ворота Челси. Мы собрали полные данные только для Премьер-лиги, но и они хорошо демонстрируют подход.

Ничто так не обогощает спортивную визуализацию, как игровое поле (трасса, дорожка, снаряд) с наглядными попытками и результатами. Другие примеры: анализ бросков НБА и история стометровки.

Присылайте вопросы о визуализации данных на почту: data@datalaboratory.ru, ответы публикуются ежемесячно. При участии Кирилла Беляева и Дамира Мельникова.

Вопрос-ответ: история цен на авиабилеты

Спрашивает Андрей:

Есть интересная задача — визуализировать историческую стоимость билета (авиа, жд и т. п.) в зависимости от даты его покупки. Наиболее простым кажется следующий вариант: пользователь выбирает направление (откуда и куда), авиакомпанию-перевозчика, выбирает дату отправления и на графике ему показывается стоимость в зависимости от даты покупки.

Но это не удобно для пользователя, так как придется перебирать авиакомпании/перевозчики. Для этого можно несколько графиков рисовать сразу. Но даже этот подход не решает самую главную задачу: если пользователь может изменить дату поездки (например, плюс/минус неделя), то чтобы найти наиболее удобный вариант, ему придется перебирать и дату отправления.

Как бы вы предложили показать на одном графике (возможно, интерактивном) изменение цены в зависимости от даты покупки билета, даты отправления и перевозчика?

Давайте для простоты рассуждений сузим задачу до авиабилетов. Предложенный вами график цены билета на определённую дату вылета в зависимости от даты покупки — это первый шаг в решении задачи. Именно такой тренд интересно изучать и сравнивать для разных дат и сезонов вылета, перевозчиков, направлений. Это идеальный элементарный кирпичик визуализации: графики удобно сравнивать между собой (сравнимость) и складывать друг с другом для получения глобальных картин (аддитивность). Глобальные картины, полученные суммированием графиков, в свою очередь тоже можно сравнивать.

Чтобы проиллюстрировать свою мысль я воспользуюсь данными, любезно предоставленными туристическим сервисом «Туту.ру». Это усреднённые данные по покупкам: 5384 цены на билеты Аэрофлота в направлении Москва → Симферополь, 1480 усреднённых по различным авиакомпаниям цен в направлении Москва → Берлин и 1035 усреднённых по авиакомпаниям цен Москва → Тиват. Данные не совсем полные и однородные, тем не менее интересные для изучения.

Чтобы отличать графики между собой используем цветной градиент для разных дат вылета:

Живой прототип: https://ticket-prices.datalaboratory.ru/

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

Изучим внимательно наиболее подробные и однородные данные о перелёте Москва → Симферополь (только Аэрофлот):

Билеты в прошлом летнем сезоне покупались и заранее, и накануне вылета, в среднем за 5 тыс. руб со случайными отклонениями до 7—10 тыс. Осенью плотность «хвоста» слева уменьшилась, покупки совершались ближе к дате вылета, при этом ранняя цена в среднем чуть меньше поздней. Зимой билеты никто не покупал раньше, чем за полтора месяца до вылета, зато цены покупок в последние дни заметно скачут — до 10—15 тыс. Весной проявились ярко выраженные ступеньки (фиксированные тарифы): синие мартовские ступеньки до снижения цен по указанию президента, зелёные апрельские — после.

Интересно, какие закономерности найдут на визуализации внимательные читатели :-)

Присылайте вопросы о визуализации данных на почту: data@datalaboratory.ru, ответы публикуются ежемесячно. При участии Кирилла Беляева и Сергея Долинина. Спасибо Никите Иванову и Наталье Анисимовой за данные для эксперимента.

Вопрос-ответ: Рига-Вена-Будапешт

Спрашивает Кирилл Беляев:

С 1 по 10 мая 2014 мы путешествовал на машине по Европе. Записывали время и существенные траты. Собрал маршрут, схему с отрезками пути и временем, которое они заняли, основные траты. Подскажите, пожалуйста, какой полезной информация не хватает, и какую стоит подавать иначе.

Иллюстрация получилась аккуратная, но без души. Кому и почему интересно будет её изучать? Яркие моменты, полюбившиеся места, фотографии — всё самое главное в путешествии осталось за кадром.

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

Надеюсь когда-нибудь опубликовать интерактивные рассказы о своих главных приключениях :-)

Дорогие читатели, делитесь достойными внимания визуализациями путешествий в комментариях!

Присылайте вопросы о визуализации данных на почту: data@datalaboratory.ru, ответы публикуются по понедельникам.

Вопрос-ответ: качество работы маршруток

Спрашивает Евгений Макаров из Baseride Technologies:

Мы собираем данные о работе маршрутных такси в Нижнем Новгороде для центральной диспетчерской, которая контролирует качество перевозок. На каждой машине установлен GPS-передатчик, который передаёт данные в «Клаудбас». На основании данных формируются ежедневные и ежемесячные отчёты о выполненной работе и нарушениях.

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

Как наглядно отобразить эту информацию?

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

Попробуем решить задачу иначе: от частного (одного рейса) к общему (ежедневным и ежемесячным отчётам). Как наглядно показать отклонения и превышения маршрутки за один рейс? Расположим остановки по горизонтали, сохранив пропорциональность растояний между ними. Отклонения от расписания при посещении конкретной остановки покажем кругом, площадь которого пропорциональна опозданию/опережению в минутах. Участки превышения скорости закрасим красным цветом: чем больше превышение, тем краснее участок.

Рейсы без нарушений или с небольшими нарушениями выглядят нейтрально:

Конкретные опоздания и превышения показаны при наведении:

Чтобы картина была нагляднее, оживим её временным слайдером.

Чем «краснее» рейс, тем больше нарушений и тем они серьёзнее:

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

Во-первых, такие рейсы легко сравнивать между собой. Например, можно одним взглядом окинуть все утренние рейсы, расположив их друг под другом (слева — время старта):


Живой прототип: http://minibus.datalaboratory.ru/onebyone/

Во-вторых, рейсы можно складывать между собой. Та же картина дня может быть свёрнута в одну линию с суммарным опозданиям по остановкам и суммарными (полупрозрачными) нарушениями на участках:

Последние четыре остановки сильнее других страдают от нарушений расписания, а скорость превышают чаще всего в начале и на длинном перегоне в конце маршрута. Благодаря интерактивности видно, как маршрутки, стартовавшие в разное время дня, распределяются по маршруту: кто и где отстаёт и, наоборот, опережает общую массу.

Дополним картину средними показателями, над каждой остановкой подпишем средний интервал ожидания:

Живой прототип: https://minibus.datalaboratory.ru/all/

Плюс такого подхода в том, что можно наглядно показать любой срез по рейсам: за определённую дату или время дня, для конкретного водителя, по определённым нарушениям, — а также сравнивать эти срезы между собой. Так можно показать все городские маршруты со статистикой за любой временной период на одном экране. При этом будет видна общая картина и каждый конкретный рейс в удобной для дальнейшего исследования форме.

Мы в Лаборатории данных создаём наглядные системы мониторинга для траспортных компаний и городских служб. Пишите: data@datalaboratory.ru

Присылайте вопросы о визуализации данных на почту: data@datalaboratory.ru, ответы публикуются по понедельникам. При участии Кирилла Беляева и Сергея Долинина.

Вопрос-ответ: календарь рекордов

Спрашивает Денис Хрипков:

Делаю первые шаги, приму любые замечания! http://denisx.ru/calendar2015/

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

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

Рекорды за другие даты можно показать при наведении на график.

Чтобы сравнение было ещё более многогранным, дополним картину погодой и рекордами в других городах. Здесь также уместно показать соотношение ясных/пасмурных дней и годовое количество осадков, чтобы дать общее представление о климате городов.

Живой прототип: https://weather-records.datalaboratory.ru/

Видно, что самое жаркое 13 апреля было в Нижнем Новгороде — +20°С, а самое холодное в Красноярске — -10°С. В Москве за рекордно жарким днём (+18°С) в 2008 году последовал рекордно холодный (-1°С) в 2009. Конечно, данные за сто лет более показательны, но и десятилетнего периода достаточно, чтобы проиллюстририровать подход.

Если у вас душа не лежит к интерактивным визуализациям, выпустите отрывной календарик с ежедневными рекордами :-)

Присылайте вопросы о визуализации данных на почту: data@datalaboratory.ru, ответы публикуются по понедельникам. При участии Сергея Долинина.

Ранее Ctrl + ↓