IIS_2023_1/kozlov_alexey_lab_3/lab3.py

51 lines
2.9 KiB
Python
Raw Permalink Normal View History

2024-01-12 11:40:23 +04:00
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Загрузить данные
data = pd.read_csv("spotify.csv")
# Удалить все строки с пропусками
data = data.dropna()
data.drop('artist(s)_name', axis=1, inplace=True)
# Список столбцов для нормализации
columns_to_normalize = ['danceability_%', 'valence_%', 'energy_%', 'acousticness_%', 'instrumentalness_%', 'liveness_%', 'speechiness_%']
# Проход по каждому столбцу и выполнение нормализации
for column in columns_to_normalize:
min_value = data[column].min()
max_value = data[column].max()
data[column] = (data[column] - min_value) / (max_value - min_value)
# Удалить запятые из значений в столбце
data['in_deezer_playlists'] = data['in_deezer_playlists'].str.replace(',', '')
# Привести столбец к числовому типу данных
data['in_deezer_playlists'] = data['in_deezer_playlists'].astype(np.int64)
# Удалить запятые из значений в столбце
data['in_shazam_charts'] = data['in_shazam_charts'].str.replace(',', '')
# Привести столбец к числовому типу данных
data['in_shazam_charts'] = data['in_shazam_charts'].astype(np.int64)
# Создаем словарь соответствия числовых значений и названий трека
track_name_dict = {name: index for index, name in enumerate(data['track_name'].unique())}
# Заменяем значения в столбце на числовые
data['track_name'] = data['track_name'].map(track_name_dict)
# Создаем словарь соответствия числовых значений и названий тональности
key_dict = {'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5, 'F#': 6,
'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11}
# Заменяем значения в столбце на числовые
data['key'] = data['key'].map(key_dict)
# Создаем словарь соответствия числовых значений и режимов песни
mode_dict = {'Major': 0, 'Minor': 1}
# Заменяем значения в столбце на числовые
data['mode'] = data['mode'].map(mode_dict)
# Разбить данные на обучающую и тестовую выборку
y = data.pop('in_spotify_playlists')
X_train, X_test, y_train, y_test = train_test_split(data, y, test_size=0.2, random_state=42)
clf = DecisionTreeClassifier(random_state=241)
clf.fit(X_train, y_train)
importances = clf.feature_importances_
columns = data.columns
print("Важность признаков по результатам ранжирования при помощи DecisionTreeClassifier:\n")
for i in range(len(columns)):
print(columns[i], " : ", importances[i])