#!/usr/bin/env python # coding: utf-8 # In[2]: get_ipython().system('pip install funpymodeling') # In[3]: #Importacion de las librerias import pandas as pd import seaborn as sns from pandas_profiling import ProfileReport from funpymodeling.exploratory import cat_vars, num_vars import numpy as np # ### Preparacion de Datos # In[4]: # Carga de datos data=pd.read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-01-21/spotify_songs.csv") # Removemos duplicados de canciones: data=data.drop_duplicates(subset="track_id") #Nos quedamos unicamente con las variables numericas x_data=data.drop(cat_vars(data), axis=1) # Sacamos algunas variables adicionales que no aportan valor x_data=x_data.drop(['key','speechiness', 'mode', 'tempo', 'duration_ms'], axis=1) # ### Creación del modelo de PCA # In[5]: #Importamos la libreria para el escalado de los datos from sklearn.preprocessing import StandardScaler #Generamos el objeto scaler = StandardScaler() #Aplicamos la transformacion x_scaled = scaler.fit_transform(x_data) #Importante: Los datos no tienen que tener nulos y deben ser todos numericos # Generamos el modelo y fiteamos: # In[6]: #Importamos la libreria from sklearn.decomposition import PCA #Generamos el objeto model_pca = PCA() #Aplicamos pca x_pca=model_pca.fit_transform(x_scaled) # In[7]: #Variaanza explicada de las componentes var_explicada_pca = model_pca.explained_variance_ratio_ var_explicada_pca # **Interpretación**: # # La primer componente aporta el 26 % de la varianza explicada, la segunda el 17% y así sucesivamente # # UMAP # UMAP es un método de reducción de dimensionalidad no lineal y es muy eficaz para visualizar agrupaciones o grupos de puntos de datos y sus proximidades relativas. # # Link de Interes: # # * https://towardsdatascience.com/dimensionality-reduction-for-data-visualization-pca-vs-tsne-vs-umap-be4aa7b1cb29 # In[9]: get_ipython().system('pip3 install umap-learn') # In[10]: import umap #pip3 install umap-learn # In[11]: #Generamos el objeto para la estandarizacion x_scaled = StandardScaler() #Aplicamos la estandarizacion x_scaled = x_scaled.fit_transform(x_data) # In[12]: #Obtenemos el objeto umap model_umap = umap.UMAP() # In[13]: #Ejecutamos el umap model_umap_fit_transform = model_umap.fit_transform(x_scaled) model_umap_fit_transform.shape # Visualización interactiva con Plotly! # In[14]: data2 = data.copy() #Hacemos un copy data2['cancion'] = data2['track_artist'] + ' | ' + data2['track_name'] #Creamos una nueva variable llamada: cancion data2[['dim1', 'dim2']] = model_umap_fit_transform #Agregamos las dos dimensiones generadas por umap # In[15]: import plotly.express as px fig = px.scatter(data2, x="dim1", y="dim2", color="track_popularity", hover_data=['cancion']) fig.show() # # Created in deepnote.com # Created in Deepnote