<jupyter_start><jupyter_text>Clustering con Python  Importar el dataset<jupyter_code>import pandas as pd
df = pd.read_csv("../datasets/wine/winequality-red.csv", sep = ";")
df.head()

df.shape
import matplotlib.pyplot as plt
plt.hist(df["quality"])# histograma de quality
df.groupby("quality").mean()# agrupamos por la columna quality y saca el promedio<jupyter_output><empty_output><jupyter_text>Normalización de los datos<jupyter_code>df_norm = (df-df.min())/(df.max()-df.min())# se Normaliza todo el data set
df_norm.head()<jupyter_output><empty_output><jupyter_text>Clustering jerárquico con scikit-learn<jupyter_code>from sklearn.cluster import AgglomerativeClustering
clus= AgglomerativeClustering(n_clusters = 6, linkage="ward").fit(df_norm)
# agrupacion de clusteres con 6 cortes y metodo de "ward" y normalizado
clus
md_h = pd.Series(clus.labels_)# crea una serie con las etiquetas del clusters que pertenece
md_h
plt.hist(md_h)
plt.title("Histograma de los clusters")
plt.xlabel("Cluster")
plt.ylabel("Número de vinos del cluster")
clus.children_ # estructura de los hijos
from scipy.cluster.hierarchy import dendrogram, linkage # llamamos la funcion emdograma
Z = linkage(df_norm, "ward")# metodo de  "ward" para hacer el enlace
plt.figure(figsize=(25,10))# 25 ancho X 10 de alto
plt.title("Dendrograma de los vinos")
plt.xlabel("ID del vino")
plt.ylabel("Distancia")
dendrogram(Z, leaf_rotation=90., leaf_font_size=4.)
plt.show()<jupyter_output><empty_output><jupyter_text>Clustering con K-means<jupyter_code>from sklearn.cluster import KMeans
from sklearn import datasets
df_norm
model = KMeans(n_clusters=6)  # creamos el modelo
model.fit(df_norm) # normalizamos
model.labels_ # nos mostrara las etiquetas a que categoria y cluster pertenese
md_k = pd.Series(model.labels_) # convertimos a series las etiquetas
md_k
# Agregamos a df_norm las columnas con los clusteres de KMeans y Jerarquico 
df_norm["clust_h"] = md_h
df_norm["clust_k"] = md_k
df_norm["clust_ruber"] = 0
df_norm.head()
plt.hist(md_h)
plt.hist(md_k)
model.cluster_centers_# se Obtiene los Centroides (6 coordenadas 12 dimenciones )
model.inertia_ # La suma de los cuadrado internos<jupyter_output><empty_output><jupyter_text>Interpretación final<jupyter_code>df_norm.groupby("clust_k").mean() # agrupamos x "clust_k" y sacamos un promedio de las variables<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup