from sklearn.preprocessing import StandardScaler import pandas as pd import matplotlib.pyplot as plt import numpy as np x = [1, 2, 3, 3, 5, 8] y = [2, 4, 6, 2, 3, 7] data = pd.DataFrame({"x": x, "y": y}, dtype = "float64") print(data) """ x y 0 1.0 2.0 1 2.0 4.0 2 3.0 6.0 3 3.0 2.0 4 5.0 3.0 5 8.0 7.0 """ # Mostrémoslos en una gráfica y calculemos el valor medio y varianza de las características: fig, ax = plt.subplots(figsize = (6, 6)) ax.set_aspect("equal") ax.scatter(x = x, y = y) ax.grid(color = "#EEEEEE", zorder = 1, alpha = 0.4) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_xlim(0, 9) ax.set_ylim(0, 8) plt.show() # Mostramos las media de los valores X e Y print(np.mean(data.x)) # 3.6666666666666665 print(np.mean(data.y)) # 4.0 # varianza: medida de dispersión que representa la variabilidad de una serie de datos con respecto a su media. # La varianza siempre es mayor o igual que cero # Cuanto más dispersos estén los valores en un conjunto de datos, mayor será la varianza. print(np.var(data.x)) # 5.222222222222222 print(np.var(data.y)) # 3.6666666666666665 # Ahora vamos a importar el escalador, instanciarlo y, a continuación, entrenarlo y transformar el dataframe: from sklearn.preprocessing import StandardScaler scaler = StandardScaler() data_transformed = scaler.fit_transform(data) print(data_transformed) ''' [[-1.16691993 -1.04446594] [-0.72932496 0. ] [-0.29172998 1.04446594] [-0.29172998 -1.04446594] [ 0.58345997 -0.52223297] [ 1.89624489 1.5666989 ]] ''' # Los valores mostrados son los equivalentes a los iniciales una vez transformados. # Tal y como se puede ver, el escalador devuelve un array NumPy, no un DataFrame Pandas. # Comprobemos los valores medios y las varianzas de estas características transformadas # (extraemos las columnas para mayor comodidad): x_transformed = data_transformed[:, 0] y_transformed = data_transformed[:, 1] print(np.mean(x_transformed)) # 1.1102230246251565e-16 print(np.mean(y_transformed)) # 0.0 print(np.var(x_transformed)) # 1.0 print(np.var(y_transformed)) # 1.0 # Ahora los valores medios son nulos (la cifra que vemos de 1.11e-16 es debido al redondeo) y las varianzas iguales a 1. # Si mostramos los puntos en una gráfica obtenemos el siguiente resultado: fig, ax = plt.subplots(figsize = (6, 6)) ax.set_aspect("equal") ax.scatter(x = x_transformed, y = y_transformed) ax.grid(color = "#EEEEEE", zorder = 1, alpha = 0.4) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_xlim(-2, 2.5) ax.set_ylim(-2, 2) plt.show() # Comprobamos que, salvo el escalado y el desplazamiento, la distribución de los datos es exactamente la original.