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

92 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа №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 не очень хорошо разделяет данные на кластеры. Отрицательное значение индекса силуэта говорит о том, что объекты внутри кластеров находятся ближе к объектам соседних кластеров, чем к объектам своего собственного кластера. В таком случае, стоит обратить внимание на другие алгоритмы кластеризации для получения более точных результатов.