Привет, Хабр! Совсем недавно мы писали про открытый датасет, собранный командой студентов магистратуры «Наука о данных» НИТУ МИСиС и Zavtra.Online (подразделение SkillFactory по работе с университетами) в рамках первого учебного Дататона. А сегодня представим вам целых 3 датасета от команд, которые также вышли в финал.
Все они разные: кто-то исследовал музыкальный рынок, кто-то – рынок труда IT-специалистов, а кто-то и вовсе домашних кошек. Каждый из этих проектов актуален в своей сфере и может быть использован для того, чтобы что-то усовершенствовать в привычном ходе работы. Датасет с котиками, например, поможет судьям на выставках. Датасеты, которые необходимо было собрать студентам, должны были представлять собой MVP (таблица, json или структура каталогов), данные должны быть очищены и проанализированы. Посмотрим же, что у них получилось.
Датасет 1: Скользим по музыкальным волнам с «Data Surfers»
Состав команды:
- Плотников Кирилл – project manager, разработка, документация.
- Тарасов Дмитрий – разработка, сбор данных, документация.
- Шадрин Ярослав – разработка, сбор данных.
- Мерзликин Артём – product manager, презентация.
- Колесниченко Ксения – предварительный анализ данных.
В рамках участия в хакатоне участниками команды было предложено несколько различных интересных идей, но мы решили остановиться на сборе данных о российских музыкальных исполнителях и их лучших треках с ресурсов Spotify и MusicBrainz.
Spotify – музыкальная платформа, пришедшая в Россию не так давно, но уже активно захватывающая популярность на рынке. Кроме того, с точки зрения анализа данных, Spotify предоставляет очень удобное API с возможностью запроса большого количества данных, в том числе их собственных метрик, например таких, как «danceability» – показатель от 0 до 1, описывающий, насколько трек подходит для танцев.
MusicBrainz – это музыкальная энциклопедия, содержащая максимально полную информацию о существующих и существовавших музыкальных коллективах. Своего рода «музыкальная википедия». Данные с этого ресурса нам были необходимы для того, чтобы получить список всех исполнителей из России.
Сбор данных об артистах
Мы собрали целую таблицу, содержащую 14363 уникальных записи о различных исполнителях. Чтобы в ней было удобно ориентироваться — под спойлером описание полей таблицы.
Описание полей таблицы
artist – имя артиста или название группы;
musicbrainz_id – уникальный идентификатор артиста в музыкальной базе данных Musicbrainz;
spotify_id – уникальный идентификатор артиста в стриминговом сервисе Spotify, если он там представлен;
type – тип исполнителя, может принимать значения Person, Group, Other, Orchestra, Choir или Character;
followers – количество подписчиков артиста на Spotify;
genres – музыкальные жанры артиста;
popularity – индекс популярности артиста на Spotify от 0 до 100, который рассчитывается на основе популярности всех треков артиста.
musicbrainz_id – уникальный идентификатор артиста в музыкальной базе данных Musicbrainz;
spotify_id – уникальный идентификатор артиста в стриминговом сервисе Spotify, если он там представлен;
type – тип исполнителя, может принимать значения Person, Group, Other, Orchestra, Choir или Character;
followers – количество подписчиков артиста на Spotify;
genres – музыкальные жанры артиста;
popularity – индекс популярности артиста на Spotify от 0 до 100, который рассчитывается на основе популярности всех треков артиста.
Пример записи
Поля artist, musicbrainz_id и type извлекаем из музыкальной базы данных Musicbrainz, так как там есть возможность получить список артистов, связанных с одной страной. Извлечь эти данные можно двумя способами:
- Постранично парсить раздел Artists на странице с информацией о России.
- Достать данные через API.
Документация MusicBrainz API
Документация MusicBrainz API Search
Пример запроса GET на musicbrainz.org
В ходе работы выяснилось, что API MusicBrainz не совсем корректно отвечает на запрос с параметром Area:Russia, скрывая от нас тех исполнителей, у кого в поле Area указано, например, Izhevsk или Moskva. Поэтому данные с MusicBrainz были взяты парсером непосредственно с сайта. Ниже пример страницы, откуда парсились данные.
Полученные данные об артистах из Musicbrainz.
Остальные поля получаем в результате GET запросов к эндпоинту. При отправке запроса в значении параметра q указываем имя артиста, а в значении параметра type указываем artist.
Сбор данных о популярных треках
Таблица содержит 44473 записи о самых популярных треках российских артистов, представленных в таблице выше. Под спойлером описание полей таблицы.
Описание полей таблицы
artist – имя артиста или название группы;
artist_spotify_id – уникальный идентификатор артиста в стриминговом сервисе Spotify (по нему можно будет джойнить таблицы, так как это spotify_id из таблицы с артистами);
name – название трека;
spotify_id – уникальный идентификатор трека в стриминговом сервисе Spotify;
duration_ms – длительность трека в миллисекундах;
explicit – содержит ли текст трека нецензурные выражения, может принимать значения true или false;
popularity – индекс популярности трека на Spotify *;
album_type – тип альбома, может принимать значения album, single или compilation;
album_name – название альбома;
album_spotify_id – уникальный идентификатор альбома в стриминговом сервисе Spotify;
release_date – дата выхода альбома;
album_popularity – индекс популярности альбома на Spotify.
artist_spotify_id – уникальный идентификатор артиста в стриминговом сервисе Spotify (по нему можно будет джойнить таблицы, так как это spotify_id из таблицы с артистами);
name – название трека;
spotify_id – уникальный идентификатор трека в стриминговом сервисе Spotify;
duration_ms – длительность трека в миллисекундах;
explicit – содержит ли текст трека нецензурные выражения, может принимать значения true или false;
popularity – индекс популярности трека на Spotify *;
album_type – тип альбома, может принимать значения album, single или compilation;
album_name – название альбома;
album_spotify_id – уникальный идентификатор альбома в стриминговом сервисе Spotify;
release_date – дата выхода альбома;
album_popularity – индекс популярности альбома на Spotify.
Особенности аудио
key – предполагаемая общая тональность трека, целые числа накладываются на нотацию звуковысотных классов, 0 = C, 1 = C?/D?, 2 = D и т.д.;
mode – указывает модальность трека, мажор – 1, минор – 0;
time_signature – предполагаемый общий тактовый размер композиции;
acousticness – мера достоверности от 0,0 до 1,0 того, является ли трек акустическим;
danceability – описывает, насколько трек подходит для танцев от 0,0 до 1,0;
energy – представляет собой перцептивную меру интенсивности и активности от 0,0 до 1,0;
instrumentalness – определяет, содержит ли трек вокал, принимает значения от 0,0 до 1.0;
liveness – определяет присутствие аудитории при записи, принимает значения от 0,0 до 1,0;
loudness – общая громкость трека в децибелах, типичный диапазон значений от -60 до 0 дБ;
speechiness – определяет наличие произнесённых слов в треке, принимает значения от 0,0 до 1,0;
valence – описывает музыкальную «позитивность», передаваемую треком, принимает значения от 0,0 до 1,0;
tempo – предполагаемый общий темп трека в ударах в минуту.
mode – указывает модальность трека, мажор – 1, минор – 0;
time_signature – предполагаемый общий тактовый размер композиции;
acousticness – мера достоверности от 0,0 до 1,0 того, является ли трек акустическим;
danceability – описывает, насколько трек подходит для танцев от 0,0 до 1,0;
energy – представляет собой перцептивную меру интенсивности и активности от 0,0 до 1,0;
instrumentalness – определяет, содержит ли трек вокал, принимает значения от 0,0 до 1.0;
liveness – определяет присутствие аудитории при записи, принимает значения от 0,0 до 1,0;
loudness – общая громкость трека в децибелах, типичный диапазон значений от -60 до 0 дБ;
speechiness – определяет наличие произнесённых слов в треке, принимает значения от 0,0 до 1,0;
valence – описывает музыкальную «позитивность», передаваемую треком, принимает значения от 0,0 до 1,0;
tempo – предполагаемый общий темп трека в ударах в минуту.
Подробно о каждом параметре можно прочитать здесь.
Пример записи
Поля name, spotify_id, duration_ms, explicit, popularity, album_type, album_name, album_spotify_id, release_date получаем с помощью GET запроса на
https://api.spotify.com/v1//v1/artists/{id}/top-tracks
, указывая в качестве значения параметра id Spotify ID артиста, который мы получили ранее, а в значении параметра market указываем RU. Документация.Поле album_popularity можно получить, сделав GET запрос на
https://api.spotify.com/v1/albums/{id}
, указав album_spotify_id, полученный ранее, в качестве значения для параметра id. Документация. В результате получаем данные о лучших треках артистов из Spotify. Теперь задача – получить особенности аудио. Сделать это можно двумя способами:
- Для получения данных об одном треке нужно сделать GET-запрос на
https://api.spotify.com/v1/audio-features/{id}
, указав его Spotify ID как значение параметра id. Документация.
- Чтобы получить данные о нескольких треках сразу, следует отправить GET запрос на
https://api.spotify.com/v1/audio-features
, передавая Spotify ID этих треков через запятую как значение для параметра ids. Документация.
Все скрипты находятся в репозитории по этой ссылке.
После сбора данных мы провели предварительный анализ, визуализация которого представлена ниже.
Итоги
В результате у нас получилось собрать данные по 14363 артистам и 44473 трекам. Объединив данные из MusicBrainz и Spotify, мы получили наиболее полный на текущий момент набор данных о всех российских музыкальных исполнителях, представленных на платформе Spotify.
Такой датасет позволит создавать B2B и B2C продукты в музыкальной сфере. Например, системы рекомендаций промоутерам исполнителей, концерт которых можно организовать, или системы помощи молодым исполнителям в написании треков, которые с большей вероятностью станут популярными. Также при регулярном пополнении датасета свежими данными можно анализировать различные тенденции в музыкальной индустрии, такие как формирование и рост популярности определённых трендов в музыке, либо проводить анализ отдельных исполнителей. Сам датасет можно посмотреть на GitHub.
Датасет 2: Исследуем рынок вакансий и выявляем ключевые навыки с «Ежу понятно»
Состав команды:
- Пшеничный Андрей – сбор и обработка данных, написание аналитической записки о датасете.
- Кондратёнок Павел – Product Manager, сбор данных и описание его процесса, GitHub.
- Щербакова Светлана – сбор и обработка данных.
- Евсеева Оксана – подготовка итоговой презентации проекта.
- Елфимова Анна – Project Manager.
Для своего датасета мы выбрали идею сбора данных о вакансиях в России из сферы «IT и Телеком» с сайта hh.ru за октябрь 2020 года.
Сбор данных о скилах
Самым важным показателем для всех категорий пользователей являются ключевые навыки. Однако при их анализе у нас возникли трудности: эйчары при заполнении данных о вакансии выбирают ключевые навыки из списка, а также могут вносить их вручную, а следовательно, в наш датасет попало большое количество дублирующих навыков и некорректных навыков (например, мы столкнулись с названием ключевого навыка «0,4 Кb»). Есть ещё одна трудность, которая доставила проблем при анализе получившегося датасета, – только около половины вакансий содержат данные о заработной плате, но мы можем использовать средние показатели о заработной плате с другого ресурса (например, с ресурсов Мой круг или Хабр.Карьера).
Начали с получения данных и их глубинного анализа. Далее мы произвели выборку данных, то есть отобрали признаки (features или, иначе, предикторы) и объекты с учетом их релевантности для целей Data Mining, качества и технических ограничений (объема и типа).
Здесь нам помог анализ частоты упоминания навыков в тегах требуемых навыков в описании вакансии, какие характеристики вакансии влияют на предлагаемое вознаграждение. При этом было выявлено 8915 ключевых навыков. Ниже представлена диаграмма с 10 наиболее популярными ключевыми навыками и частотой их упоминания.
Наиболее часто встречающиеся ключевые навыки в вакансиях из сферы IT, Телеком
Данные получили с сайта hh.ru с помощью их API. Код для выгрузки данных можно найти тут. Вручную выбрали признаки, которые нам необходимы для датасета. Структуру и тип собираемых данных можно увидеть в описании документации к датасету.
После этих манипуляций мы получили Dataset размером 34 513 строк. Образец собранных данных вы можете увидеть ниже, а также найти по ссылке.
Образец собранных данных
Итоги
В результате получился датасет, с помощью которого можно узнать, какие навыки являются самыми востребованными среди IT специалистов по разным направлениям, и он может быть полезен для соискателей (как для начинающих, так и для опытных), работодателей, hr-специалистов, образовательных организаций и организаторов конференций. В процессе сбора данных были и трудности: слишком много признаков и они написаны на низкоформализируемом языке (описание навыков для кандидата), половина вакансий не имеет открытых данных о заработной плате. Сам датасет можно глянуть на GitHub.
Датасет 3: Наслаждаемся многообразием котиков с «Команда AA»
Состав команды:
- Евгений Иванов – разработка веб-скрапера.
- Сергей Гурылёв – product manager, описание процесса разработки, GitHub.
- Юлия Черганова – подготовка презентации проекта, анализ данных.
- Елена Терещенко – подготовка данных, анализ данных.
- Юрий Котеленко – project manager, документация, презентация проекта.
Датасет, посвящённый котам? Да почему бы и нет, подумали мы. Наш котосет содержит образцы изображений, на которых сфотографированы кошки различных пород.
Сбор данных о котиках
Изначально для сбора данных мы выбрали сайт catfishes.ru, он обладает всеми нужными нам преимуществами: это свободный источник с простой структурой HTML и качественными изображениями. Несмотря на преимущества этого сайта, он имел существенный недостаток – малое количество фотографий в целом (около 500 по всем породам) и малое количество изображений каждой породы. Поэтому мы выбрали другой сайт – lapkins.ru.
Из-за чуть более сложной структуры HTML скрапить второй сайт было несколько сложнее первого, но разобраться в структуре HTML было легко. В итоге нам удалось собрать со второго сайта уже 2600 фотографий всех пород.
Нам не потребовалось даже фильтровать данные, так как фотографии кошек на сайте хорошего качества и соответствуют породам.
Для сбора изображений с сайта нами был написан веб-скрапер. Сайт содержит страницу lapkins.ru/cat со списком всех пород. Сделав парсинг этой страницы, мы получили названия всех пород и ссылки на страницу каждой породы. Итеративно пройдя в цикле по каждой из пород, мы получили все изображения и сложили их в соответствующие папки. Код скрапера был реализован на Python с использованием следующих библиотек:
- urllib: функции для работы с URL;
- html: функции для обработки XML и HTML;
- Shutil: функции высокого уровня для обработки файлов, групп файлов и папок;
- OS: функции для работы с операционной системой.
Для работы с тегами мы использовали XPath.
Каталог Cats_lapkins содержит папки, названия которых соответствуют названиям пород кошек. Репозиторий содержит 64 каталога для каждой породы. Всего в датасете содержатся 2600 изображений. Все изображения представлены в формате .jpg. Формат названия файлов: например “Абиссинская кошка 2.jpg”, вначале идёт название породы, затем число – порядковый номер образца.
Итоги
Такой датасет может, например, использоваться для обучения моделей, классифицирующих домашних кошек по породам. Собранные данные могут быть использованы для следующих целей: определение особенностей по уходу за котом, подбор подходящего рациона для кошек определённых пород, а также оптимизация первичной идентификации породы на выставках и при судействе. Также котосет может использоваться и бизнесом – ветеринарными клиниками и производителями кормов. Сам котосет находится в свободном доступе на GitHub.
Послесловие
По итогам дататона наши студенты получили первый кейс в своё портфолио дата-сайентиста и обратную связь по работе от менторов из таких компаний, как Huawei, Лаборатория Касперского, Align Technology, Auriga, Intellivision, Wrike, Мерлин АИ. Дататон был полезен ещё и тем, что прокачал сразу и профильные хард- и софт-скилы, которые понадобятся будущим дата-сайентистам, когда они будут работать уже в реальных командах. Также это хорошая возможность для взаимного «обмена знаниями», так как у каждого студента разный бэкграунд и, соответственно, свой взгляд на задачу и её возможное решение. Можно с уверенностью сказать, что без подобных практических работ, похожих на какие-то уже существующие бизнес-задачи, подготовка специалистов в современном мире просто немыслима.
Если в вашей компании есть кейcы по Data Science, которые вы бы хотели решить в рамках хакатона или стать ментором — пишите в личные сообщения skillfactory_school. Также, мы будем рады индустриальным партнерам для наших программ и можем предложить им разные виды сотрудничества: членство в наблюдательном совете, экспертиза для создания курсов, стажировки в ваших компаниях для студентов и другие виды партнерства. Давайте развивать Data Science вместе!
Узнать больше про нашу магистратуру можно на сайте data.misis.ru и в Telegram канале.
Ну, и, конечно, не магистратурой единой! Хотите узнать больше про Data Science, машинное и глубокое обучение – заглядывайте к нам на соответствующие курсы, будет непросто, но увлекательно. А промокод HABR поможет в стремлении освоить новое, добавив 10 % к скидке на баннере.
Другие профессии и курсы
ПРОФЕССИИ
КУРСЫ
- Профессия Java-разработчик
- Профессия QA-инженер на JAVA
- Профессия Frontend-разработчик
- Профессия Этичный хакер
- Профессия C++ разработчик
- Профессия Разработчик игр на Unity
- Профессия Веб-разработчик
- Профессия iOS-разработчик с нуля
- Профессия Android-разработчик с нуля
КУРСЫ
- Курс по Machine Learning
- Курс «Математика и Machine Learning для Data Science»
- Курс «Python для веб-разработки»
- Курс «Алгоритмы и структуры данных»
- Курс по аналитике данных
- Курс по DevOps
Junecat
А мне очень понравился ноутбук, рядом с которым сфотографировался котик на картинке для привлечения внимания. По моему, это Sony Vaio VGN-P21Z. Некоторое время (лет 12 назад) в Москве широко рекламировался его «младший брат» Sony VAIO P как «ноутбук, который можно положить в задний карман джинсов».