.. | ||
diagram.png | ||
lab4.py | ||
output.png | ||
README.md | ||
spotify.csv |
Лабораторная работа №4. Кластеризация
14 вариант
Задание:
Использовать метод кластеризации DBSCAN, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной вами задачи.
Описание используемого набора данных:
Объектом исследования является набор данных, который размещен на платформе Kaggle (https://www.kaggle.com/datasets/nelgiriyewithana/top-spotify-songs-2023/data). Он представляет собой полный список самых известных песен 2023 года, перечисленных на Spotify. Данный набор представлен в виде файла spotify.csv
Столбцами являются:
- track_name – Название композиции
- artist(s)_name – Имя исполнителя/имена исполнителей песни.
- artist_count – Количество исполнителей, участвовавших в со-здании песни
- released_year – Год, когда песня была выпущена
- released_month – Месяц, когда песня была выпущена
- released_day – День месяца, когда песня была выпущена.
- in_spotify_playlists – Количество плейлистов Spotify, в которые песня включена
- in_spotify_charts – Присутствие и рейтинг песни в чартах Spotify.
- streams – Общее количество прослушиваний в Spotify.
- in_apple_playlists – Количество плейлистов Apple Music, в которые песня включена.
- in_apple_charts – Присутствие и рейтинг песни в чартах Apple Music.
- in_deezer_playlists – Количество плейлистов Deezer, в ко-торые песня включена.
- in_deezer_charts – Присутствие и рейтинг песни в чартах Deezer
- in_shazam_charts – Присутствие и рейтинг песни в чартах Shazam.
- bpm – Количество ударов в минуту, показатель темпа песни.
- key – Тональность песни.
- mode – Режим песни (мажорный или минорный).
- danceability_% – Процент, указывающий, насколько песня подходит для танцев.
- valence_% - Позитивность музыкального содержания пес-ни
- energy_% - Воспринимаемый уровень энергии песни
- acousticness_% - Количество акустического звука в песне
- instrumentalness_% - Количество инструментального кон-тента в песне
- liveness_% - Наличие элементов живого исполнения
- speechiness_% - Количество произнесенных слов в песне
Задачей кластеризации на данном наборе данных является разделение значений набора данных на кластеры похожих значений (схожих треков).
Запуск
- Запустить файл lab4.py
Используемые технологии
- Язык программирования Python
- Среда разработки PyCharm
- Библиотеки:
- sklearn
- matplotlib
- numpy
- pandas
Описание программы
Код программы выполняет следующие действия:
- Импортирует необходимые библиотеки: pandas, numpy, matplotlib.pyplot, sklearn.cluster.DBSCAN и sklearn.metrics.silhouette_score.
- Загружает данные из файла "spotify.csv" с помощью функции read_csv() из библиотеки pandas и сохраняет их в переменной data.
- Удаляет все строки с пропущенными значениями в данных с помощью функции dropna().
- Удаляет столбец 'artist(s)_name' с помощью функции drop().
- Определяет список столбцов для нормализации в переменной columns_to_normalize.
- Проходит по каждому столбцу из списка columns_to_normalize и выполняет нормализацию данных путем вычитания минимального значения и деления на разницу между максимальным и минимальным значениями.
- Удаляет запятые из значений столбца 'in_deezer_playlists' с помощью функции str.replace() и преобразует значения в столбце в тип int64 с помощью функции astype().
- Удаляет запятые из значений столбца 'in_shazam_charts' и преобразует значения в столбце в тип int64.
- Создает словарь, где числовым значениям столбца 'track_name' соответствуют уникальные названия треков.
- Заменяет значения столбца 'track_name' на числовые значения с помощью функции map() и созданного словаря.
- Создает словарь, где числовым значениям столбца 'key' соответствуют тональности треков.
- Заменяет значения столбца 'key' на числовые значения с помощью функции map() и созданного словаря.
- Создает словарь, где числовым значениям столбца 'mode' соответствуют режимы песни.
- Заменяет значения столбца 'mode' на числовые значения с помощью функции map() и созданного словаря.
- Определяет радиус окрестности (eps) и минимальное количество точек в окрестности (min_samples) для алгоритма DBSCAN.
- Создает объект DBSCAN с заданными параметрами и применяет его к данным.
- Добавляет метки кластеров в исходный датасет с помощью функции labels_ объекта DBSCAN.
- Создает график рассеяния, используя столбцы "bpm" и "danceability_%" из данных, а также метки кластеров.
- Добавляет легенду на график, которая отображает метки кластеров.
- Отображает график.
- Вычисляет индекс силуэта (silhouette_avg) для модели DBSCAN и выводит его значение в консоль.
В результате выполнения кода генерируется график рассеяния с данными, разбитыми на кластеры, и выводится значение индекса силуэта для модели DBSCAN.
Пример работы
График рассеивания модели
Значение индекса силуэта модели
Вывод
Значение индекса силуэта модели DBSCAN равное -0.00602325264419104 говорит о том, что модель DBSCAN не очень хорошо разделяет данные на кластеры. Отрицательное значение индекса силуэта говорит о том, что объекты внутри кластеров находятся ближе к объектам соседних кластеров, чем к объектам своего собственного кластера. В таком случае, стоит обратить внимание на другие алгоритмы кластеризации для получения более точных результатов.