Блог Ромы Бунина

о визуализации данных и работе с Tableau

Обзор вакансий в области BI

Решил сделать небольшой обзор рынка вакансий в области BI. Данные брал с hh.ru через официальное API.

Немного про методологию. Хотя это сложно конечно назвать методологией. Я запрашивал с hh кол-во резюме и сводную статистику, по сути получал в ответ всё-то, что обычно вы видите в левой части сайта. Для этого пользовался методом clusters. Данные брал только в разрезе регионов за 22 июня 2019 года.

АПИ hh отдает такие же данные

Зарплата считается как средневзвешенная от кол-во вакансий с указанной зарплатой. Так как hh отдает данные с припиской «от», то думаю что можно прибавлять 5-10%. Для расчета конкурса на вакансию использовались только соискатели с таким названием профессии в название резюме или таким навыком в описании обязанностей или умений. Брались только актуальные вакансии и соискатели обновлявшие резюме в течении последнего месяца. Регион соискателя не учитывался.

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

Вот, что получилось:

 Ссылкой на Табло паблик — https://public.tableau.com/views/HHBI/BI
 
Выводы из анализа
Рынок сильно перегретый, даже для IT отрасли. Так, средний конкурс — 1,5 человека на вакансию, для сравнения в среднем по IT это 3, как пишет hh, но не уверен, что мы с ними считаем одинаково. Если проверять по той же методике, что делал я, то для сравнения получаются такие конкурсы:
— Front-end программист — 1,5
— Менеджер проектов — 2,7
— Дизайнер интерфейсов — 4,7
— Java-script — 21

Если посчитать конкурс на кол-во участников в чатиках Табло и Power BI в ТГ, то получается так:
— 2,3 участника чата Табло на одну вакансию с упоминанием Табло
— 1,2 участник чата Power BI на одну вакансию с упоминанием Power BI

Зарплаты указаны только в 14% случаев, это конечно немного для нормальной оценки. Интересно как коррелирует с реальным зарплатами, но как такое разузнать кроме опросов не придумал.

В целом понятно, что методика довольно кривая, но я пока не придумал лучше. Ведь и Табло и Power BI могут указать почти в любой профессии, но кажется, что общее представление, всё равно можно получить. Хочу ещё попробовать сделать тоже самая, но забирая с hh, не сводную информацию, а конкретные вакансии и анализировать уже полные данные. Будет здорово, если маякнёте, что такое было бы интересно. Для моих целей мне подойдет и этот анализ, но я готов попробовать такое для сообщества BI спецов. Или если знаете какие ещё ключевые слова и названия профессий надо попробовать загнать в анализ.

Технические особенности
Из этого мини-проекта могу поделится такими находками:
— Гугл-таблицы из коробки умеют подключатся к любому АПИ и парсить JSON, просто чума. Делается через написание простейшего скрипта. Я был покорен этой фичей. Мои любимые JS и гугл-таблицы, что может быть лучше.
— В Табло есть встроенная и не задокументированная функция RANDOM(), которая возвращает случайное число от 0 до 1. Использовал для житерринга в левом графике. Пока он смотрится не очень уместно, но я планирую в таком же духе положить все вакансии, если спаршу их.

П.С. Дисклеймер, если будете использовать это все на собеседованиях как работодатель или соискатель, я тут ни при чем и за данные не ручаюсь, хотя и проверил всё несколько раз.

22 июня   пример   табло

Gartner BI Magic Quadrant

Каждый год аналитическое агенство Gartner публикует отчеты о развитии разных направлений IT. Меня всегда бесило, что чтобы сравнить год к году надо открывать кучу картинок. Моя интерактивная вариация про квадрант в области BI:

7 апреля   пример

Консультации от Лаборатории данных

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

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

Услуга, на мой взгляд, будет полезна двум категориям:
— Арт-директору/руководителю продукта/дизайнеру сложного продукта с большим количеством данных, когда вы хотите получить новую идею о том, как классно показать эти данные, чтобы это решало задачу пользователей.
— Руководителю службы инфографики или журналисту данных, которые делают лонгрид или большую инфографику для получения новых идей.

Будет бесполезно тем, у кого мало данных (2-4 разреза данных с простой структурой и небольшим количеством самих данных) или нужно готовое решение продуктового качества.

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

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

Примеры прототипов
Job digitalisation
Климат в России
Возрастно-половая пирамида
Работы участников конкурса «Один раз увидеть»

Записаться на консультацию можно на сайте лаборатории.

П. С. Понял, что я уже был клиентом Тани в таком формате визуализаций. Так был сделан совет про OEE. А еще в таком же формате велась работа внутри лаборатории. Мы с дизайнерами приходили к Тане, как к артдиру, раз в неделю и получали те самые консультации. Дальше делали прототипы и макеты. Мне результат таких консультаций очень нравился. =)

П. П. С. Еще такой же формат консультаций получают все наши слушатели на курсе, когда делают практическую часть. Курс в мае, следите за анонсами.

2019  

Маленькое исследование рынка вакансий Москвы и России

Сделал маленькое исследование рынка вакансий Москвы и России. Взял интересные мне профессии и скилы. Данные с hh.ru и моего небольшого инструмента, там данные тоже с hh.
Если хотите чтобы добавил какие-то профессии — пишите. =)

https://public.tableau.com/views/_21975/sheet1

Оцифровка профессий в США

Кирилл Беляев в своём телеграмм-канале разобрал визуализацию про проникновение IT и  автоматизации в профессии. Я помогал ему обсуждениями и разработкой прототипа.

Вот, что получилось. На картинке финальный макет, которые сверстал Кирилл, а по ссылке прототип в Табло.

http://revealthedata.com/examples/job-digitalisation/

Как сделать контрол для переключения день/неделя/месяц в Табло

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

Создаем параметр, которым будет управлять пользователь. Правой кнопкой на панели с данными, затем create parameter.

Потом создаем расчетное поле:

DATE(
CASE [Date range]
WHEN "Day" THEN DATETRUNC('day', [Date])
WHEN "Week" THEN DATETRUNC('week', [Date])
WHEN "Month" THEN DATETRUNC('month', [Date])
END
)

Здесь вся фишка в том, что оборачиваем весь CASE в DATE, иначе Табло не будет воспринимать результат как дату, и используем DATETRUNC, чтобы выбрать уровень агрегации.

Подставляем получившиеся поле в нужное нам место и теперь можем управлять датой:

Ecли вы читаете мой блог и у вам есть вопросы по Табло — пишите на buninra@mail.ru. Если у меня будет время, то отвечу в блоге или скину полезную ссылку по вопросу.

Разделение на квантили в Табло

Одна из участниц корпоративного курса по Табло спросила про так, как покрасить цвета в облаке слов по квантилям от частоты слов. Вот рецепт.

Для примера взял данные о частоте слов в английском языке. В наборе данных — слова и частота их возникновения. Для того, чтобы построить «облако слов» расположим слова на текст, частоту на размер, выберем в качестве визуального атома (makrs) слова.

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

RUNNING_SUM(SUM([Frequency])/TOTAL(SUM([Frequency])))

Автоматическим инструментом bins для разбиения на квантили использовать не получится, так как это table calc. Поэтому создадим разбивку в ручную, ещё через одно расчетное поле.

IF [Runnig % of total] >=0 AND [Runnig % of total] <0.25
THEN "0-25%"
ELSEIF  [Runnig % of total] >= 0.25 AND [Runnig % of total] <0.5
THEN "25-50%"
ELSEIF [Runnig % of total] >= 0.5 AND [Runnig % of total] <0.75
THEN "50-75%"
ELSE "75-100%"
END

Кинем получившееся поле на цвет.

Получилась фигня, так как Табло не знает как отсортировать наши слова при расчете накопительного процента. Чтобы это исправить скажем ему как отсортировать слова. Для этого зайдем в редактор table calc и зададим сортировку:

Вуаля:

Добавил Парето и залил на Табло Паблик. Там можно скачать книгу и посмотреть как что реализовано.

https://public.tableau.com/views/Wordfreqineng/Wordfreqineng?:embed=y&:display_count=yes&publish=yes

55 работ участников «Один раз увидеть»

В том году закончился конкурс ОРУ (один раз увидеть). Спасибо организаторам и все участникам, было круто. Вот разбор работ и моя последняя работа. Делал её из отпуска на коленке, но считаю, что самая это моя самая сильная работа из всего конкурса. Не успел только картинки пожать, чтобы быстрее грузилось. В во время реализации узнал про «новую» фишку размеров в css c помощью vw и vh. Очень удобно и полезно для адаптивности визуализаций и приложений в вебе.

Лолипоп чарт с осью времени в Табло

У Кати, одного из участников курса, был вопрос — как сделать «лолипоп» чарт c временем по оси икс.

Что хотелось получить в итоге

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

Данные хранились в CSV, когда открываешь их в Табло получается фигня:

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

Раз и данные прочитались как надо:

Кстати, сначала пошёл исправлять такое через Экслеь, но это не сработало. Эксель неправильно кушает эти данные из-за наличия запятых в предсмертной речи.

В этой таблице даты хранятся в широком формате. Это не удобно, исправляем формат на длинный:

Подробнее про длинный и широкий формат в этой статье.

После функции pivot наши даты разместились в двух столбцах с названиями Pivot Filed Values и Pivot Filed Names:

В Values хранятся значения дат, а в Names — тип даты (дата рождения, обвинения, взятия под страду и дата смертной казни). Переназовём поля в Date и Date type:

Такой формат данных очень удобен для табло. Но теперь задваиваются (точнее зачетвиряются =) ) строки:

Тогда когда мы будем подсчитывать кол-во смертников, складывать сумму лет проведенных в тюрьме и т. п. мы будем получать неверный результат. Чтобы этого избежать можно продублировать источник (надо было сделать заранее) и в одном источнике сделать pivot, а в другом нет. Тогда источник с pivot будем использовать только для визуализации lolipop, а другие для других графиков. Делается, например, здесь:

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

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

Чтобы «закрасить» растояние между точками, создадим расчетное поле дублирующие даты и изменим ему тип данных на число с запятой. Это нужно чтобы мы потом могли применить к этому числу Quick Table Calculation, для дат его применять нельзя. Ещё надо перетащить копию дату в Measures.

Создадим ещё одну ось с датой и объединим её с предыдущей через dual axis:

Не забудем синхронизировать оси:

Теперь зададим, чтобы размер наших меток ганчарта зависел от копии даты:

Добавим быстрое Quick Table Calculation для подсчета разницы между точками.

Теперь настроим этот расчет:

Сделаем так, чтобы Табло рассчитывал разницу к предыдущей точке по дате для каждого типа даты:

Теперь мы получили разницу между точками, но она откладывается вправо:

Чтобы это исправить добавим в расчетное поле минус.

Вуаля! Подстроим размеры ганчарта и готово.

На таком графике сразу видно много интересного:

Ранее Ctrl + ↓