A lo largo de esta práctica veremos como aplicar diferentes tecnicas para la carga y preparación de datos:
Para eso necesitaremos las siguientes librerías:
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn import datasets
from sklearn.manifold import TSNE
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.model_selection import train_test_split, cross_val_score
import matplotlib.pyplot as plt
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
pd.set_option('display.max_columns', None)
%matplotlib inline
En primer lugar, debéis cargar el conjunto de datos Wine recognition (más información en el enlace https://archive.ics.uci.edu/ml/datasets/Wine). Se puede descargar de internet o se puede cargar directamente desde la librería "scikit-learn", que incorpora un conjunto de datasets muy conocidos y usados para la minería de datos y machine learning http://scikit-learn.org/stable/datasets/index.html.
from sklearn.datasets import load_wine
data = load_wine()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['classes'] = pd.Categorical.from_codes(data.target, data.target_names)
print("Primer análisis de los datos")
df.head()
print("Descripción de los datos")
df.describe()
print("El número de líneas es: " + str(df.shape[0]) + " y el número de columnas: "+ str(df.shape[1]))
print("No existe ningún null")
df.isnull().sum()
print('Cálculo de la frecuéncia')
cols = df.columns
num_cols_no_categoric = df._get_numeric_data().columns
col_categoric=list(set(cols) - set(num_cols_no_categoric))
print("Frecuéncia")
print( pd.value_counts(df[col_categoric].values.flatten()))
frecuencia_data =pd.value_counts(df[col_categoric].values.flatten())
sns.catplot(x="classes", kind="count", palette="ch:.25", data=df);
print("Estadísticos descriptivos básicos:")
df[num_cols_no_categoric].describe()
print("Histograma de las variables: alcohol")
graf1 = sns.distplot(df['alcohol'],kde=0)
print("Histograma de las variables: color_intensity")
graf3 = sns.distplot(df['color_intensity'],kde=0,color="red")
print("Histograma de las variables: magnesium")
graf2 = sns.distplot(df['magnesium'],kde=0,color="green")
Respecto al target, la clase de vino, cabe destacar que el número de elementos está distribuido equitativamente entre los 3 tipos de vino, es decir, no tenemos una gran cantidad del tipo1 y muy poca del resto que complicaria las tareas de clasificación.
También es posible analizar como el alcohol es el elemento más distribuido de las tres gráficas, es decir, tenemos una gran cantidad de muestras diferentes lo que me hace deducir que será una variable dificil de utilizar para la clasificación. En otro sentido, el color de la intensidad se agrupa más y el magnesio esta muy agrupado alrededor de 90.
En este ejercicio exploraremos la relación de algunos de los atributos numéricos con la variable respuesta ("wine_class"), tanto gráficamente como cualitativamente, y analizaremos las diferentes correlaciones. Para empezar, seleccionaremos solo 3 atributos para explorar: alcohol, magnesium y color_intensity.
feats_to_explore = ['alcohol', 'magnesium', 'color_intensity']
for i in [0,1,2]:
sns.distplot(df['alcohol'][data.target==i],
kde=False,label='{
}'.format(i))
plt.legend()
for i in [0,1,2]:
sns.distplot(df['color_intensity'][data.target==i],kde=False,label='{}'.format(i))
plt.legend()
for i in [0,1,2]:
sns.distplot(df['magnesium'][data.target==i],kde=False,
label='{
}'.format(i))
plt.legend()
La intensidad del color, mientras qeu el de menor peso el magnesium. Realmente el color esta más agrupado y diferenciado que el resto.
for i in [0,1,2]:
std = round(df["alcohol"][data.target==i].std(),3)
sns.distplot(df['alcohol'][data.target==i],
kde=1,label='{} con std {}'.format(i,std))
plt.legend()