повышаем
сложность
день 04
Сегодня мы поговорим:
о том, какие навыки необходимо развивать современному аналитику
о выборе подходящего вида визуализации и его настройки
о создании более сложных DAX-вычислений с учетом контекста
Присоединяйтесь к эфиру, чтобы обсудить тему дня и задать вопросы
15:00 МСК //
Присоединяйтесь к чату марафона, чтобы получить поддержку и общаться с экспертами
Навыки современного аналитика
/ Задуматься
к.э.н., основатель Valiotty Analytics, автор блога об аналитике leftjoin.ru
Николай Валиотти
Визуализация данных — одна из наиболее быстро развивающихся областей Аналитики и Науки о данных. Объединение эстетических элементов визуализации создает настоящие произведения искусства, которые также передают аналитические выводы и помогают принимать бизнес-решения.

Все люди разные, разнятся их навыки, жизненный опыт, подходы к решению задач… Но то, что объединяет всех — это желание как можно эффективнее инвестировать свое время в получение новых знаний и навыков.
В каких областях вам стоит развиваться, если вы хотите развиваться в работе с данными?
В каких областях вам стоит развиваться, если вы хотите развиваться в работе с данными?
  • 1
    Аналитические навыки. Это не статистические навыки, а способность анализировать, интерпретировать и понимать данные. Задавать правильные вопросы — ключ к успеху.
  • 2
    Статистические методологии. Хотя не каждый должен иметь степень по высшей математике, каждая организация нуждается в статистических навыках, будь то несколько специалистов по данным или целая команда по data science.
  • 3
    Визуализация данных. Она упрощает их понимание и должна быть неотъемлемой частью культуры информационной грамотности, помогая широкому кругу людей общаться друг с другом на языке данных.
  • 4
    Базовые знания отраслевых задач. Это необходимо для проектирования востребованных визуализаций и требует удивительно глубокого понимания того, почему вашей аудитории нужно видеть именно эти данные; а также, для чего аудитория будет использовать именно эти диаграммы. Вам нужно понимать на какие вопросы вы будете искать ответ и какие гипотезы нужно проверить.
  • 5
    Понимание природы данных. Знание как выбрать правильный тип диаграмм для вашей аудитории и какие данные использовать. Кроме того, вы будете более продуктивны, если сможете выполнять очистку данных самостоятельно, а не полагаться на других, а знание SQL может быть действительно ценным. Но развитие этого навыка зависит от ваших целей.
  • 6
    Навыки дизайна. Базового понимания особенностей работы с цветом и шрифтами достаточно для разработки большинства диаграмм. Плюсом будем интерес к когнитивным искажениям и психологии визуального восприятия. Большинство диаграмм создано для поддержки более эффективного принятия решений, поэтому интерес к работам Дэниела Канемана, Дэна Ариели, Шейна Пэрриша, братьев Хит и других, пишущих о принятии решений, является хорошим знаком.
  • 7
    Опыт работы с программным обеспечением. Речь идет как о ПО для визуализации данных, так и о прикладных программах и сервисов для обработки данных, создания специализированных видов диаграмм и онлайн-презентаций. Вы можете проходить сертификацию по выбранным вами инструментам, а также формировать свое портфолио решенных кейсов.
  • 8
    Умение четко излагать свои мысли. Важно организовывать материал, опираясь на критическое мышление и логическую иерархию для формирования связного рассказа на основе данных. Быть хорошим слушателем, отказаться от собственных представлений и ожиданий и уметь «залезать в головы» лиц, принимающих решения, чтобы выяснить, что им действительно нужно.
Чтобы развивать эти навыки, необходимо регулярно читать книги, статьи и блоги от разных авторов, таких как Стивен Фью, Альберто Каиро и Эдвард Тафти, а также других исследователей в этой области знаний. Участвуйте в дискуссионных форумах по визуализации данных, конференциях, конкурсах и мероприятиях. Среди русскоязычных авторов широко распространены Telegram-каналы и блоги: LeftJoin, Reveal The Data, DataNature.
Как выбрать и настроить диаграмму
/ Теория
Визуализация данных помогает наводить порядок, преобразовывая сырые данные в наглядные диаграммы и графики. Без визуализации мы бы не смогли быстро и легко разбираться в таком огромном количестве данных, которые накапливаются сегодня.

Одни и те же данные можно показать разными способами — все зависит от поставленного вопроса и цели визуализации. Прежде чем выбирать, какой тип диаграммы выбрать для своих данных, ответьте себе на вопрос «что я хочу показать?».
Каждый тип диаграммы выполняет определенную задачу — вам нужно уметь подбирать наиболее подходящий.

Вот основные виды сопоставления данных:
  • Сравнение категорий
  • Соотношение категорий
  • Части целого
  • Распределение величины
  • Изменение во времени
  • Изменение на местности
Познакомьтесь с видами визуализаций в наборе карточек DataYoga
Задавайте вопросы к данным и подбирайте визуализации под ваши задачи. Определитесь с типом сравнения данных, изучите плюсы и минусы каждой визуализации и прислушайтесь к тщательно подобранным советам.
После того, как вы выберете подходящий вид диаграммы, уделите особое внимание ее настройке в программном продукте. Почти всегда «диаграммы по умолчанию» требуют доработки, их нужно адаптировать под вашу задачу. Объем доработки зависит от возможностей инструмента. Ниже приводим чеклист крутой визуализации — сверяйтесь с ним, чтобы разработать качественную диаграмму.
  • Цвет
    + цвет выбран осознанно
    + не используется более 5-7 отдельных цветов
    + применение цвета постоянно на разных визуализациях с одинаковыми категориями
    + учтен контраст и цветопередача целевого формата (ПК, мобильный экран, ТВ, печать)
    + учтен контраст для людей с нарушениями зрительного восприятия
  • Текст
    + все размеры шрифтов соблюдают цветовую иерархию
    + весь текст располагается строго горизонтально
    + есть подписи шкал и данных, где необходимо
    + подписи данных не перегружают визуализацию, не закрывают собой элементы диаграммы
  • Элементы визуализации
    + данные целенаправленно отсортированы
    + нет визуальных искажений
    + нет 3Д
    + нет элементов, не приносящих смысл визуализации
  • Линии на диаграмме
    + линии на фоне диаграммы убраны или сведены к минимальному контрасту с фоном
    + область диаграммы и элементы диаграммы не имеют обводки
Многие из этих пунктов приходят с опытом проектирования визуализаций внутри компаний, впитывая внутренние стандарты и практики, принятые в корпоративной культуре. Возможно, заказчики будут требовать от разработчиков чего-то такого, что испортит визуальное восприятие диаграммы. Настаивайте на дата-минимализме. Обращайтесь к образовательным материалам, книгам и мнениям экспертов: соблюдайте визуальную гигиену.
Изучите визуальные стратагемы
DataYoga собрали в одном месте советы, понятия и полезные практики по созданию диаграмм, создав удобную последовательную схему с описанием деталей проектирования. Исследуйте карточки онлайн на бесконечной доске MIRO



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

Гибкий DAX для сложных расчетов
/ Теория
В предыдущем дне мы рассмотрели простой DAX, но, как мы и говорили, DAX позволяет делать очень гибкие расчеты, включающие контекст.
Контекст позволяет выполнять динамический анализ, при котором результаты формулы могут меняться в зависимости от выделенной строки или ячейки и любых взаимосвязанных данных.
В DAX существует два основных типа контекстов, оба типа контекста могут взаимодействовать друг с другом:
  • 1
    Рядовой контекст (Row Context): связан с конкретным рядом данных в таблице. Рядовой контекст возникает во время вычисления формулы для каждого ряда таблицы. Ярким примером таких вычислений являются Х функции, которые мы рассмотрели днём ранее.
  • 2
    Фильтровый контекст (Filter Context): определяет, какие данные учитываются в вычислениях агрегирующих функций, таких как SUM, AVERAGE, MIN, MAX и так далее. Может быть изменен с помощью различных DAX-операций, например фильтров, наложенных на таблицы или столбцы, а также с помощью срезов данных в отчетах Visiology.
Понимание контекста в DAX критически важно для правильного создания формул и интерпретации результатов. Например, если вы не учитываете изменения фильтрового контекста при использовании срезов данных, результаты могут быть неожиданными или неверными.

Посмотрим на примере. Представим, что перед вами стоит задача посчитать долю продаж по различным продуктам внутри бренда и отдельно для бренда.
1
Начнём с более простого, когда надо посчитать долю по брендам. Для этого необходимо взять агрегированное значение продаж по конкретному бренду и поделить его на общую сумму продаж.
Шаг 1. Посчитаем агрегированное значение по брендам.

SUM ( factonlinesales[salesamount] )
Шаг 2. Посчитает общее агрегированное значение, причем в данной формуле при помощи функции REMOVEFILTERS мы явно убираем влияние контекста на данную формулу.

CALCULATE ( SUM ( factonlinesales[salesamount] ), REMOVEFILTERS ( dimproduct ) )
Шаг 3. В итоге совмещения этих функций получаем формулу Доли по брендам.

SUM ( factonlinesales[salesamount] )
/ CALCULATE ( SUM ( factonlinesales[salesamount] ), REMOVEFILTERS ( dimproduct ) )
Перейдем к варианту посложнее, так как внутри бренда может существовать еще множество товаров, долю продаж которых также было бы интересно увидеть.
Шаг 1. Посчитаем агрегированное значение по товарам в бренде.

SUM ( factonlinesales[salesamount] ) 
Шаг 2. 

CALCULATE (
SUM ( factonlinesales[salesamount] ),
REMOVEFILTERS ( dimproduct ),
SUMMARIZE ( dimproduct, dimproduct[brandname] )
) 

В данной формуле мы дополнительно используем функцию SUMMARIZE в контексте название бренда. Это даёт понять системе, что доля будет рассчитываться не в общем, а отдельно внутри каждого из брендов.
Шаг 3. Посчитаем долю в бренде.

SUM ( factonlinesales[salesamount] )
/ CALCULATE (
SUM ( factonlinesales[salesamount] ),
REMOVEFILTERS ( dimproduct ),
SUMMARIZE ( dimproduct, dimproduct[brandname] )
)
Данный пример ярко показывает отличия обычного расчёта на уровне запроса SQL и на уровне DAX.
2
Давайте рассмотрим еще один пример, который часто встречается в аналитическом моделировании. Представим, что нам нужно рассчитать среднюю цену товара для каждого чека.

Предположим, существует таблица:
Шаг 1. 

CALCULATE(
                SUM('factonlinesales'[unitprice]),
                REMOVEFILTERS('factonlinesales'),
                SUMMARIZE('factonlinesales', 'factonlinesales'[salesordernumber])
            )

Вычисляется сумма цен всех товаров в чеках без учёта фильтров (REMOVEFILTERS). Для этого сначала применяется функция CALCULATE, которая вычисляет сумму цен всех товаров по каждому уникальному номеру заказа (salesordernumber) из таблицы factonlinesales, затем функция REMOVEFILTERS удаляет фильтры, которые могут изменить сумму цен, и возвращает данные без фильтров.
Шаг 2. 

CALCULATE(
                COUNT('factonlinesales'[productkey]),
                REMOVEFILTERS('factonlinesales'),
                SUMMARIZE('factonlinesales', 'factonlinesales'[salesordernumber])
            ), BLANK()

Вычисляется количество товаров в каждом чеке без учёта фильтров. Для этого также используется функция CALCULATE с аналогичными параметрами.
Средняя цена товара по каждому чеку вычисляется с помощью функции DIVIDE. Чтобы получить среднюю цену товара по каждому чеку, разделите результат первого шага на результат второго шага. Функция DIVIDE также помогает грамотно построить отношение с учетом различных особенностей деления (деление на ноль или пустых значений).
Результат деления на ноль заменяется на пустую строку (BLANK ()).
Шаг 3. 

Средняя цена товара по чеку = DIVIDE(
            CALCULATE(
                SUM('factonlinesales'[unitprice]),
                REMOVEFILTERS('factonlinesales'),
                SUMMARIZE('factonlinesales', 'factonlinesales'[salesordernumber])
            ),
            CALCULATE(
                COUNT('factonlinesales'[productkey]),
                REMOVEFILTERS('factonlinesales'),
                SUMMARIZE('factonlinesales', 'factonlinesales'[salesordernumber])
            ), BLANK()
        )
3
Рассмотрим третий пример. В нём мы рассчитаем накопленный итог продаж за год. Для расчётов используем формулу, которая позволяет рассчитать накопленный итог от начала года до текущей даты по каждому дню со сбросом по годам. С помощью такой формулы можно выполнить любое разбиение визуализируемых данных — по дням, неделям, месяцам, кварталам и полугодиям.
Для проведения расчётов воспользуемся формулой:

TOTALYTD(SUM(salesfact[salesamount]), dimdate[datekey])

в которой
salesamount – это столбец в таблице salesfact, который содержит значения продаж;
SUM(salesfact[salesamount]) – суммирует значения в столбце salesamount, вычисляя общую сумму продаж;
datekey  – столбец в таблице dimdate, содержащий даты, по которым производится расчёт.
Данная формула легла в основу новой меры — Накопленный итог, и с её помощью мы визуализировали накопленный итог со сбросом по годам:
Создаем свои вычисления
/ Практика
Во вчерашнем уроках мы рассмотрели с вами простые примеры, сегодня настал день когда нам необходимо немного усложнить их.

Посмотрим на примерах.
Первый вопрос, на который я хотел бы ответить, звучит так: «Сколько времени тратится на зарядку батареи конкретного автомобиля на зарядной станции в 22 кВт?», при этом формула у меня должна работать универсально для любого автомобиля.

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

В этом случае формула может выглядеть так:

Время зарядки 22 кВт = CALCULATE((DIVIDE (MAX(VIN[Battery capacity]),MAX('Зарядные сессии'[Power]))*60),FILTER('Зарядные сессии','Зарядные сессии'[Power]=22))
Пример 2. Онлайн-кинотеатр.

Во втором примере вопрос может быть таким: «Каково среднее количество показа фильма исходя из страны его производства Россия?» Это можно также отношением уникального количества фильмов к количеству просмотренных фильмов. Для это используя функцию DIVIDE мы математически правильно проведем операцию деления и при помощи комбинации CALCULATE и FILTER установим фильтр на конкретное значение:
AverageViewsPerMonth = CALCULATE(DIVIDE(DISTINCTCOUNT(‘Фильмы’[id]), COUNT(‘Статистика онлайн кинотеатра’[id])),FILTER('Фильмы','Фильмы'[Страна]={Россия}))
Вам необходимо создать 2−3 меры и попробовать их визуализировать. Вы можете добавлять различный контекст. Главное, помните и ориентируйтесь на свой список вопросов.

Результаты выполнения домашнего задания присылайте нам в Telegram-чат в виде скриншота, не забывая поставить хэштег #практика03. Для вашего и нашего удобства, помимо визуализации, укажите саму формулу меры и вопрос, на который отвечает данная мера. Удачи в выполнении домашнего задания! В следующем прямом эфире мы разберем самые интересные из них.
Присоединяйтесь к эфиру, чтобы посмотреть, как именно создать свои вычисления в Visiology
15:00 МСК //
Полезные ссылки
Сборник встреч с экспертами из разных сфер работы с данными для расширения кругозора
Коллекция датавиз-стратагем для эффективной визуализации
Освойте фундамент визуализации данных