# Лабораторная работа №4. Кластеризация ## 14 вариант ___ ### Задание: Использовать метод кластеризации DBSCAN, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной вами задачи. ### Описание используемого набора данных: Объектом исследования является набор данных, который размещен на платформе Kaggle (https://www.kaggle.com/datasets/nelgiriyewithana/top-spotify-songs-2023/data). Он представляет собой полный список самых известных песен 2023 года, перечисленных на Spotify. Данный набор представлен в виде файла spotify.csv Столбцами являются: 1. track_name – Название композиции 2. artist(s)_name – Имя исполнителя/имена исполнителей песни. 3. artist_count – Количество исполнителей, участвовавших в со-здании песни 4. released_year – Год, когда песня была выпущена 5. released_month – Месяц, когда песня была выпущена 6. released_day – День месяца, когда песня была выпущена. 7. in_spotify_playlists – Количество плейлистов Spotify, в которые песня включена 8. in_spotify_charts – Присутствие и рейтинг песни в чартах Spotify. 9. streams – Общее количество прослушиваний в Spotify. 10. in_apple_playlists – Количество плейлистов Apple Music, в которые песня включена. 11. in_apple_charts – Присутствие и рейтинг песни в чартах Apple Music. 12. in_deezer_playlists – Количество плейлистов Deezer, в ко-торые песня включена. 13. in_deezer_charts – Присутствие и рейтинг песни в чартах Deezer 14. in_shazam_charts – Присутствие и рейтинг песни в чартах Shazam. 15. bpm – Количество ударов в минуту, показатель темпа песни. 16. key – Тональность песни. 17. mode – Режим песни (мажорный или минорный). 18. danceability_% – Процент, указывающий, насколько песня подходит для танцев. 19. valence_% - Позитивность музыкального содержания пес-ни 20. energy_% - Воспринимаемый уровень энергии песни 21. acousticness_% - Количество акустического звука в песне 22. instrumentalness_% - Количество инструментального кон-тента в песне 23. liveness_% - Наличие элементов живого исполнения 24. speechiness_% - Количество произнесенных слов в песне Задачей кластеризации на данном наборе данных является разделение значений набора данных на кластеры похожих значений (схожих треков). ___ ### Запуск - Запустить файл lab4.py ### Используемые технологии - Язык программирования **Python** - Среда разработки **PyCharm** - Библиотеки: * sklearn * matplotlib * numpy * pandas ### Описание программы Код программы выполняет следующие действия: 1. Импортирует необходимые библиотеки: pandas, numpy, matplotlib.pyplot, sklearn.cluster.DBSCAN и sklearn.metrics.silhouette_score. 2. Загружает данные из файла "spotify.csv" с помощью функции read_csv() из библиотеки pandas и сохраняет их в переменной data. 3. Удаляет все строки с пропущенными значениями в данных с помощью функции dropna(). 4. Удаляет столбец 'artist(s)_name' с помощью функции drop(). 5. Определяет список столбцов для нормализации в переменной columns_to_normalize. 6. Проходит по каждому столбцу из списка columns_to_normalize и выполняет нормализацию данных путем вычитания минимального значения и деления на разницу между максимальным и минимальным значениями. 7. Удаляет запятые из значений столбца 'in_deezer_playlists' с помощью функции str.replace() и преобразует значения в столбце в тип int64 с помощью функции astype(). 8. Удаляет запятые из значений столбца 'in_shazam_charts' и преобразует значения в столбце в тип int64. 9. Создает словарь, где числовым значениям столбца 'track_name' соответствуют уникальные названия треков. 10. Заменяет значения столбца 'track_name' на числовые значения с помощью функции map() и созданного словаря. 11. Создает словарь, где числовым значениям столбца 'key' соответствуют тональности треков. 12. Заменяет значения столбца 'key' на числовые значения с помощью функции map() и созданного словаря. 13. Создает словарь, где числовым значениям столбца 'mode' соответствуют режимы песни. 14. Заменяет значения столбца 'mode' на числовые значения с помощью функции map() и созданного словаря. 15. Определяет радиус окрестности (eps) и минимальное количество точек в окрестности (min_samples) для алгоритма DBSCAN. 16. Создает объект DBSCAN с заданными параметрами и применяет его к данным. 17. Добавляет метки кластеров в исходный датасет с помощью функции labels_ объекта DBSCAN. 18. Создает график рассеяния, используя столбцы "bpm" и "danceability_%" из данных, а также метки кластеров. 19. Добавляет легенду на график, которая отображает метки кластеров. 20. Отображает график. 21. Вычисляет индекс силуэта (silhouette_avg) для модели DBSCAN и выводит его значение в консоль. В результате выполнения кода генерируется график рассеяния с данными, разбитыми на кластеры, и выводится значение индекса силуэта для модели DBSCAN. ___ ### Пример работы ![Graphics](results.png) ```text График рассеивания модели ``` ![Graphics](output.png) ```text Значение индекса силуэта модели ``` ### Вывод Значение индекса силуэта модели DBSCAN равное -0.00602325264419104 говорит о том, что модель DBSCAN не очень хорошо разделяет данные на кластеры. Отрицательное значение индекса силуэта говорит о том, что объекты внутри кластеров находятся ближе к объектам соседних кластеров, чем к объектам своего собственного кластера. В таком случае, стоит обратить внимание на другие алгоритмы кластеризации для получения более точных результатов.