import pandas as pd import numpy as np from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score from sklearn.model_selection import train_test_split from sklearn.neural_network import MLPRegressor from sklearn.preprocessing import StandardScaler # Загрузить данные data = pd.read_csv("spotify.csv") # Удалить все строки с пропусками data = data.dropna() data.drop('artist(s)_name', axis=1, inplace=True) # Удалить запятые из значений в столбце 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) # Разделение данных на обучающую и тестовую выборки regrData = ['in_apple_playlists', 'in_deezer_playlists', 'streams', 'bpm'] y = data['in_spotify_playlists'] x_train, x_test, y_train, y_test = train_test_split(data[regrData], y, test_size=0.2, random_state=42) # Нормализация данных scaler = StandardScaler() X_train_scaled = scaler.fit_transform(x_train) X_test_scaled = scaler.transform(x_test) # Создание и обучение модели model = MLPRegressor(hidden_layer_sizes=(100, 100), activation='relu', solver='adam', random_state=42) model.fit(X_train_scaled, y_train) # Предсказание на тестовых данных y_pred = model.predict(X_test_scaled) # Оценка качества модели mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print("Mean Squared Error:", mse) print("R^2 Score:", r2)