Сколько получают аналитики данных? Выясняем с помощью Data Miner и Tableau

Сколько в среднем получают дата-сайентист и аналитик данных? Так, а на самом деле? А это много или мало для жизни в конкретном городе? Какой город можно назвать столицей отечественного дата-сайенса? Разные ресурсы предлагают разные факты, поэтому мы решили не гадать, а разобраться сами — при помощи несложного исследования вакансий с HeadHunter, в котором нам помогла специалист по дата-визу и автор телеграм-канала «настенька и графики» Анастасия Кузнецова. 

Обратите внимание на то, что это тренировочное исследование, которое мы провели в октябре 2020 года на ограниченной выборке вакансий с HeadHunter. Результаты могут отличаться в зависимости от материала, выборки, платформы и времени. Но вот что обнаружили мы:  

Результаты

Средняя зарплата

118 769 рублей

Медианная зарплата

100 000 рублей

Средняя и медианная зарплаты отличаются подходом к подсчету: допустим, у нас есть три аналитика, один из которых получает 100 рублей, второй 300 и третий 400. Их средняя зарплата будет рассчитываться так 100+300+400/3 = 266,6. А медианная зарплата будет 300, потому что столько получает аналитик посередине списка. 

Где больше всего вакансий?

  1. Москва
  2. Санкт-Петербург
  3. Новосибирск
  4. Екатеринбург
  5. Нижний Новгород

Где больше всего востребованы аналитики (исходя из сравнения числа вакансий на тысячу человек населения):

  1. Москва
  2. Санкт-Петербург
  3. Новосибирск
  4. Томск
  5. Краснодар

А теперь вы можете посмотреть, как мы это выяснили и проделать все то же самое вместе с нами, даже если у вас нет в роду аналитиков и вы не знаете Python. Спокойно — сейчас мы вам все покажем. 

Работать будем для наглядности только с hh.ru, как с одним из самых популярных сайтов для поиска работы. Но тут нет никаких предпочтений — можете с таким же успехом использовать Superjob или Rabota.ru. Искать будем вакансии, связанные с большими данными, при этом отдавая себе отчет в том, что специфика у профессий data scientist и data analyst — разная. О том, чем они отличаются и какие навыки им необходимы, мы писали здесь.

Шаг 1. Сбор данных

Первый и самый доступный вариант — скачивать данные через расширение для Google Chrome — Data Miner. Оно работает в формате скрапера, то есть извлекает данные со страницы, как бы собирая их по элементам. Тот же результат можно получить, копируя всю нужную информацию и вставляя ее руками. 

После установки кликаем на значок расширения и авторизуемся через Google. В рамках бесплатной версии Data Miner можно скачивать 500 страниц в месяц (на сегодня нам этого хватит). 

После авторизации нажимаем Start scraping и кликаем слева New Recipe. После этого справа у нас появится окно для формирования «рецепта» для сбора данных.

 

Теперь идем на hh.ru, чтобы воспользоваться расширенным поиском: пишем ключевые слова data scientist | data analyst | аналитик данных и ставим галочку «искать только в названии вакансии». Мы не берем остальные варианты, чтобы не примешались компании, которые занимаются аналитикой, но ищут людей на совершенно другие должности. А также чтобы не попадали вакансии, связанные с аналитикой, но напрямую не относящиеся к аналитику данных (например, «аналитик отдела закупок»). Не забудьте выбрать регион России слева. Важный момент — сейчас мы работаем только с активными вакансиями.

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



Для начала соберем все данные вне зависимости от наличия зарплатной вилки. Тут на помощь приходит Data Miner. Открываем наше расширение, чтобы на одном листе с поиском вакансий появилось окно для создания нашего «рецепта» сбора данных.



Дальше будем идти ровно по вкладкам в Data Miner. В
Type выбираем List Page, так как у нас как раз лист, из которого мы отдельно хотим «забрать» каждую вакансию. Следующий блок Rows. Здесь нам нужно показать, что именно мы хотим видеть в строках нашей итоговой собранной таблицы. 

Нам нужно, чтобы каждая вакансия находилась в новой строчке, поэтому ориентируемся на блок с ними. Там есть Magic Find Tool, зажимаем Shift на клавиатуре, наводим на поле с вакансией, которое должно подсветиться оранжевым, а справа высветиться блок vacancy-serp-item. Это то, на что будет ориентироваться Data Miner. Выбираем его — все вакансии должны подсветиться зеленым. 

Дальше идем в Cols: это данные, которые будут появляться в колонках итоговой таблицы. Нам нужны названия вакансий, ссылки на них, зарплата, регион и описание. Для этого нам надо создать несколько колонок. В Name пишется название столбца (Вакансия/Зарплата/Регион …). В Extract — материал для скрапинга (для названия, например, нам нужен Text, а для ссылки на вакансию — URL).

Создаем поочередно несколько колонок через тот же магический тул для поиска элементов. Не забывайте зажимать Shift, чтобы искать нужные элементы. Ниже перечислены колонки, названия элементов и тип Extract. У нас получится много лишнего, но на данный момент будет быстрее почистить это все в Excel, чем точнее выбирать элементы. 

Чит-коды, которые можно вводить в HTML Selector, чтобы не выделять все вручную:

  • Название вакансии — .HH-LinkModifier (Extract Text)
  • Ссылка на вакансию — .HH-LinkModifier (Extract URL)
  • Зарплата — .bloko-section-header-3 (Extract Text)
  • Регион — span.vacancy-serp-item__meta-info (Extract Text)
  • Описание — div (Extract Text)

Следующий блок Nav отвечает за навигацию, в нашем случае это переход на следующую страницу. Листаем в самый конец страницы, находим кнопку Дальше. Через замечательный тул выделяем элемент (.HH-Pager-Controls-Next) и нажимаем Test Navigation, если страница перелистнулась, то все ок и Data Miner сможет собирать данные, переходя по страницам. Если нет — проверьте еще раз, стоит ли нужный элемент.

Идем на последнюю вкладку Save, называем наш «рецепт» и нажимаем Scrape in Data Miner.


После этого у вас автоматически откроется окно с Data Miner и вы увидите первую часть ваших данных. 


Теперь нужно запустить «проход» по страницам. Нажимаем на кнопку Next Step справа сверху, устанавливаем Number of Page to Scrape: 20 (всего у нас страниц 14, но поставим чуть больше), нажимаем Scrape 20 pages и наблюдаем за тем, как Data Miner поочередно переключает страницы. Когда высветится, что все страницы были scraped (собраны), нажимаем Next Step, где можно скачать все наши полученные данные в формате csv, excel или просто скопировать в буфер обмена. 



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

План Б. Сбор данных через Python 

Второй вариант для скачивания данных — Python. С ним все в некотором смысле проще и короче, но новичкам будет трудновато. Для скачивания данных с hh.ru через Python есть библиотека parse-hh-data. Там все сильно удобнее и быстрее, пример кода есть тут от пользователя @fuwiak. Описание есть в его же статье на Хабре, вы можете полностью повторить код, добавив или убрав какие-то названия вакансий.

Шаг 2. Подготовка данных

Если вы скачали данные при помощи Python, то никакой предобработки не понадобится, все будет и так в нужных столбцах. Остальным убрать дополнительную информацию из места работы (станцию метро). Сделать это можно поиском и заменой через «,*». Также нужно дополнительно проверить, что везде указан только город, никакой другой информации не потребуется.


Теперь вытащим зарплату. Без всяких дополнительных расширений это можно сделать так:

  1. Так как в зарплату входит название вакансии, то убираем ее формулой =SUBSTITUTE(Salary,Name,»»)
  2. Через замену убираем лишние слова “от”, “до“, руб.”/ и пробелы. Дополнительно стоит проверить наличие других знаков, например EUR и конвертировать все в рубли (здесь взят курс *90).
  3. Там, где у нас указан диапазон зарплат, например 70 000-80 000 возьмем среднее между ними (в данном случае это будет 75 000).
  4. Новую колонку с зарплатой я назвала Salary clean.
  5. Сохраняем файл и открываем Tableau.

Шаг 3. Визуализируем данные в Tableau

Напомним, что мы уже учились визуализировать и подсоединять данные тут. На этот раз у нас экселевский файл, поэтому идем в Connect -> To a file -> Microsoft Excel. Переходим на Sheet1 и рисуем гистограмму по зарплатам. Гистограмма используется для визуализации распределения данных, подробнее здесь

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

Медианная или средняя?

Но все же сначала из любопытства посмотрим на среднюю и медианную зарплату аналитиков. Чтобы сделать расчет в Tableau нам достаточно перетащить Salary clean в Rows, поменять тип визуализации на таблицу и способ измерения с суммы на среднее (Average) или на медианное (Median). Получится, что средняя зарплата аналитика 118 769, а медианная 100 000. Вторая менее чувствительна к выбросам, но мы возьмем среднюю, потому что дальше будем сравнивать со средней зарплатой по региону.

В данном случае посмотрим на гистограмму по зарплатам. Перетаскиваем новую очищенную колонку Salary clean в Rows, и справа в блоке Show me выбираем тип графика — гистограмма. 

У нас получились блоки с интервалами по 50 000, давайте сделаем их чуть поменьше. Для этого нам нужно зайти в новую созданную переменную слева Salary clean (bin) — Tableau сделал ее автоматически и она как раз показывает интервалы данных. Нажимаем на стрелочку на ней и Edit и меняем Size of the bins на 20 000. После этого столбцы на гистограмме стануть чуть мельче.

Поменяем цвет, изменим подписи осей (правой кнопкой мыши на ось и выбираем Edit axis). Название горизонтальной оси меняем на «Интервалы затрат», вертикальной на “Частота встречаемости”, название графика меняем на “Распределение зарплат аналитиков”. 

Самый популярный интервал 40 000 — 60 000. Но мы также видим, что вакансий с зарплатой выше 60 000 больше, чем тех, которые находятся в меньшем диапазоне. 

Где в России чаще ищут аналитиков?

Чтобы выяснить, где аналитиков ищут чаще, нарисуем барчарт (столбиковую диаграмму). Этот тип графиков лучше всего подходит для сравнения между какими-то категориями, в нашем случае это регионы вакансий. Для этого идем на новый лист (Sheet 2) и перетаскиваем Region в Rows, а URL в Columns. Меняем тип агрегации URL, нажимаем на стрелочку рядом с ним (уже в положении Columns)  и выбираем Measure -> Count (Distinct). Отсортируем от большего к меньшему, поменяем цвет, скроем лишние подписки, добавим значения на график и добавим заголовок.

Больше всего вакансий в Москве и Питере, что, конечно, неудивительно. Но вот в Новосибирске и Екатеринбурге для аналитиков тоже есть места.

Но на самом деле, если вы вернетесь на hh.ru, то увидите, что (на момент сбора данных 21.10.2020) 12% вакансий предусматривают удаленную работу. А с учетом коронавируса, все больше компаний переходят в полный онлайн и поэтому работать можно из любого места, где есть интернет.

Насколько востребованы аналитики в разных городах?

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

Так как официальная перепись населения была аж в 2010, то данные о численности населения будем искать в других источниках. Я взяла данные из Википедии, просто скопировала таблицу оттуда в Excel и оставила только 2020 год. Получился файл с двумя колонками: City и Population. 

Первую колонку я специально назвала так же, как и в первом файле, чтобы мы могли объединить по ней данные. Дальше идем в первую вкладку с данными, справа от Connection нажимаем Add, выбираем снова Excel file и берем документ с населением в регионах. Он подсветится оранжевым, потом перетаскиваем лист с него рядом к нашему листу из документа по вакансиям и указываем отношение: Region из файла с вакансиями — это City из файла с населением. Теперь идем на новый лист и видим, что у нас есть информация из обоих файлов и мы можем пользоваться ей одновременно.

Теперь мы можем посчитать соотношение количества вакансий на население в регионе. Данные населения у нас указано в тысячах человек, поэтому и итоговая метрика будет следующая: одна вакансия на тысячу человек населения. Для этого идем во вкладку Analysis и нажимаем Create calculated field. Это позволит нам сделать новую переменную. В ней пишем:

COUNTD([URL])/sum([Population])

В формуле мы считаем количество вакансий, деленное на население.

 

Дальше сделаем барчарт по новой переменной и регионам, как в инструкции выше. Как мы видим, больше всего их все равно в Москве, Санкт-Петербурге и Новосибирске, но на четвертом месте теперь Томск, а не Екатеринбург, как в общем топе по количеству вакансий. 

Где аналитику жить хорошо?

Но все же, где выгоднее жить аналитикам? Представим, что там, где их зарплата сильно выше средней по региону. Для этого возьмем среднюю зарплату в регионах с Росстата (Среднемесячная номинальная начисленная заработная плата работников в целом по экономике по субъектам Российской Федерации за 2000-2019 гг.). Проверенных данных по городам найти не получилось, поэтому нам нужно к нашим городам в вакансиях добавить регионы, но лучше будет добавить города к файлу с зарплатами по регионам, чтобы мы так же быстренько объединили все в Tableau. В итоге у нас должен получиться файл с колонками: регион, город, зарплата. Некоторые регионы будут повторяться два раза, чтобы была отдельная строчка для Сочи и Краснодара, например. 

Дальше идем в Tableau и добавляем новый файл с зарплатами так же, как ранее добавляли файл с населением. Связку с населением для этого нужно убрать (перетащить обратно). Чтобы посмотреть отношение между зарплатами аналитиков и зарплатой в регионе воспользуемся скаттерплотом — диаграммой рассеивания. Она используется для визуализации отношений между двумя числовыми отношениями и корреляции (связи между переменными). Перетаскиваем зарплату по вакансиям в Rows, зарплату по регионами в Columns, меняем тип агрегации суммы на среднее, чтобы у нас показывались средние зарплаты по вакансиям аналитиков. Добавляем город в Detail, чтобы получить разбивку для каждого города. 

Дальше меняем названия осей и заголовок к графику. К сожалению, вакансий с зарплатами у нас было не так много, поэтому добавим еще количество вакансий в городе. Для этого создадим новое поле Analysis -> Create calculated field: COUNTD([URL]. Добавим его к лейблам под название города (во вкладку Marks, как добавляли город). А вот с цветом снова немного “поколдуем”. Сделаем переменную для выбора цвета через calculated field:

IF AVG([Salary Region]) < AVG([Salary clean])

THEN «good»

ELSE «no»

END

Таким образом у нас в категорию «good» попадут города, где средняя зарплата аналитиков выше зарплаты в регионе. Перетаскиваем новую созданную переменную в Color в Marks. 

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

Кстати, специалист по дата-визу Роман Бунин и аналитик Николай Валиотти сделали дэшборд, где периодически собираются данные по похожий вакансиям на hh.ru. Там вы можете посмотреть, как выглядит более профессиональное исследование рынка.

Исследование провела: Анастасия Кузнецова

Поделиться:
Опубликовано в рубрике UncategorizedTagged , , , ,

SkillFactory.Рассылка