IIS_2023_1/kozlov_alexey_lab_4/README.md
2024-01-12 11:43:01 +04:00

8.6 KiB
Raw Permalink Blame History

Лабораторная работа №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

График рассеивания модели

Graphics

Значение индекса силуэта модели

Вывод

Значение индекса силуэта модели DBSCAN равное -0.00602325264419104 говорит о том, что модель DBSCAN не очень хорошо разделяет данные на кластеры. Отрицательное значение индекса силуэта говорит о том, что объекты внутри кластеров находятся ближе к объектам соседних кластеров, чем к объектам своего собственного кластера. В таком случае, стоит обратить внимание на другие алгоритмы кластеризации для получения более точных результатов.