Я попал в науку о данных, в науку о данных.

Определение своего положения в мире науки о данных с помощью поиска вакансий в Интернете.

Веселое упражнение с текстовой аналитикой объявлений о вакансиях и резюме с tf-idf и t-SNE, чтобы найти, какая должность лучше всего подходит моему профилю.

Существуют серьезные споры о том, из чего состоит реальная работа многих должностей, занимающихся наукой о данных. Специалисту по анализу данных очень сложно смотреть на объявления о вакансиях, которые варьируются от аналитиков до ученых и инженеров, зная, что фактическое описание должности может сильно отличаться от вашего понимания роли. Этот неудачный матч вызвал у меня экзистенциальный кризис после окончания учебы и много беспокойных ночей с тех пор. Я специалист по данным? … Инженер по машинному обучению?

Принадлежу ли я вообще к науке о данных?

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

Моя цель проста. Могу ли я почистить объявления о вакансиях в Интернете, сгруппировать их по заголовкам и посмотреть, смогу ли я получить какую-то значимую визуализацию, которая подскажет мне, где я оказался в ландшафте? Могу ли я найти свое место?

Акт I - история парсера

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

  • Специалист по данным
  • Инженер по данным
  • Аналитик данных
  • Инженер по машинному обучению
  • Статистик
  • Количественный аналитик
  • Научный сотрудник

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

Я решил, что мой лучший выбор - очистить действительно.com с помощью библиотек python requests и beautifulsoup. Посмотрев на сайт и поигравшись с пользовательским интерфейсом, я подумал, что было бы неплохо пойти, сначала собрав ссылки на отдельные описания вакансий, а затем просматривая их одну за другой.

Приведенный выше фрагмент делает это, сначала собирая количество доступных описаний и собирая их по 50 ссылок за раз. Поскольку Indeed.com автоматически сопоставляет вас с несвязанными или частично связанными сообщениями, я встроил проверку, чтобы продолжить, только если название должности было фактически частью объявления о вакансии. Вызов storedescription () только очищает фактическое описание вакансии и сохраняет его в текстовый файл.

Я пропущу некоторые детали, но самое главное, это дало мне список названий должностей и несколько папок, содержащих описания должностей в виде простого текста. Между этими семью папками у меня было 577 текстовых документов.

Акт II - Разбирательство в объявлениях о вакансиях

Я взволнованно открыл одно из объявлений о вакансиях. Текст был в основном в порядке благодаря beautifulsoup, но предобработка все еще была ограничена. Некоторые из окончаний предложений были плохими, и эту проблему следует решить до токенизации.

Чтобы исправить это, я добавил сценарий быстрой и грязной предварительной обработки.

Я немного волновался, как поступить. Я хотел построить описания как классы с t-SNE. Я обычно работаю с многомерными данными, но часто это делается в форме вложения слов и тензоров. Меня пугают длинные и редкие векторы. Если я возьму простой вектор из набора слов для каждого документа, у меня будет один гигантский вектор, который может вызвать проблемы. Использование tf / idf может облегчить некоторые проблемы с общими терминами, но не снижает размерность моих данных. Я подумал, что продолжу работу с SVD, но мне казалось, что должен быть более простой путь к визуализации, которую я хотел.

Затем я нашел Yellowbrick, библиотеку для визуализаций машинного обучения, разработанную для дополнения Scikit-Learn. С Yellowbrick я мог выполнять SVD и t-SNE в одной строке следующим образом:

В результате получается следующая визуализация на основе 577 документов (= 577 объявлений о вакансиях).

Для ясности я отредактировал названия классов на изображении ниже.

То, что это показывает, довольно удивительно. Статистики в значительной степени сгруппированы вместе с близкими к ним странными специалистами по данным или аналитиками. Интересно, что ученые-исследователи отчетливо идентифицируются как соседний кластер. Это показывает, что эти рабочие места, вероятно, довольно связаны, но все же достаточно различны, чтобы их можно было рассматривать как отдельные кластеры. Вперед, ученые!

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

Количественные аналитики формируют свой собственный кластер на краю карты. Этого следовало ожидать, поскольку это довольно уникальная ниша. Что интересно, к ним присоединилась пара аналитиков и ученых. Это может указывать на то, что тем, кто ищет должности количественного аналитика, также следует рассмотреть возможность просмотра публикаций Data Science и Data Analyst.

Акт III - Кому я принадлежу?

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

К сожалению, с t-SNE связан случайный элемент, и я не могу воссоздать тот же сюжет, когда снова запускаю сценарий. Однако общая ориентация данных должна быть такой же. То есть кластеры должны появляться в более или менее одинаковом положении относительно друг друга, но в разных ориентациях и положениях.

Быстрый повторный запуск сценария показывает, что мое резюме заклинило между Data Engineering, Machine Learning Engineering и Data Scientist. Возможно, немного больше об инженерной стороне спектра. В моем резюме есть несколько стажировок и проектов по разработке программного обеспечения, так что в этом есть смысл. К сожалению, я оказался в центре спорной ситуации между всеми дисциплинами. Ближайшие соседи - несколько вакансий Data Science, две вакансии ML Engineering и кластер Data Engineers.

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