56 lines
2.6 KiB
Python
56 lines
2.6 KiB
Python
|
import pandas as pd
|
|||
|
import numpy as np
|
|||
|
from sklearn.linear_model import Ridge
|
|||
|
from sklearn.metrics import mean_absolute_error, mean_squared_error
|
|||
|
from sklearn.model_selection import train_test_split
|
|||
|
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)
|
|||
|
|
|||
|
ridge = Ridge(alpha=1.0)
|
|||
|
ridge.fit(X_train_scaled, y_train)
|
|||
|
|
|||
|
y_pred = ridge.predict(X_test_scaled)
|
|||
|
|
|||
|
mae = mean_absolute_error(y_test, y_pred)
|
|||
|
mse = mean_squared_error(y_test, y_pred)
|
|||
|
|
|||
|
score = ridge.score(X_test_scaled, y_test)
|
|||
|
|
|||
|
print("MAE:", mae)
|
|||
|
print("MSE:", mse)
|
|||
|
print("Score:", score)
|