0% encontró este documento útil (0 votos)
3 vistas7 páginas

Apunte de Python 2

El documento proporciona un apunte sobre el análisis de componentes principales (PCA) utilizando Python, incluyendo la preparación del ambiente, tratamiento de datos, visualización con gráficos y modelado. Se abordan técnicas como la normalización de datos, generación de variables dummy, y el uso de K-means y clustering jerárquico para el análisis de datos. Además, se incluyen ejemplos de código para implementar estas técnicas utilizando bibliotecas como pandas, numpy, seaborn y scikit-learn.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas7 páginas

Apunte de Python 2

El documento proporciona un apunte sobre el análisis de componentes principales (PCA) utilizando Python, incluyendo la preparación del ambiente, tratamiento de datos, visualización con gráficos y modelado. Se abordan técnicas como la normalización de datos, generación de variables dummy, y el uso de K-means y clustering jerárquico para el análisis de datos. Además, se incluyen ejemplos de código para implementar estas técnicas utilizando bibliotecas como pandas, numpy, seaborn y scikit-learn.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Apunte de Python 2

Análisis de Componentes Principales

Preparación del ambiente

Tratamiento de datos

import numpy as np

import pandas as pd

import [Link] as sm

Gráficos

import [Link] as plt

import seaborn as sns

import matplotlib.font_manager

from matplotlib import style

[Link]('ggplot') or [Link]('ggplot')

Preprocesado y modelado

from [Link] import PCA

from [Link] import make_pipeline

from [Link] import StandardScaler

from [Link] import scale

Configuración warnings

import warnings

[Link]('ignore')

Carga de datos

df = pd.read_excel("/content/[Link]")

df

Carga el archivo y agrega una variable como índice

df = pd.read_excel("/content/[Link]", index_col="variable_id")

Correlación entre las variables originales del data set

corr = [Link]()

corr

1
Mapa de calor

import numpy as np

import seaborn as sns

import [Link] as plt

Crear el mapa de calor con las correlaciones entre las variables (heatmap)

[Link](corr, xticklabels = True , yticklabels = True ,cmap='coolwarm', annot=True,


fmt=".3f")

# Muestra el gráfico

[Link]()

En Pandas, "axis = 0" se refiere al eje horizontal o a las filas, y "axis = 1" al eje vertical o a
las columnas.

[Link](axis=0)

[Link](axis=0)

[Link](axis=0)

Modelo PCA

Entrenamiento modelo PCA con escalado de los datos

pca_pipe = make_pipeline(StandardScaler(), PCA()) # Le indico el modelo a aplicar

pca_pipe.fit(df) # Entrena el modelo con los datos de df

# Se extrae el modelo entrenado del pipeline

modelo_pca = pca_pipe.named_steps['pca']

# Se convierte el array a dataframe para añadir nombres a los ejes.

[Link](

data = modelo_pca.components_,

columns = [Link],

index = ['PC1', 'PC2', 'PC3', 'PC4', 'PC5', 'PC6', 'PC7'] # Cantidad de PC según la cantidad
de variables x

Mapa de calor (Heatmap) de las componentes

fig, ax = [Link](nrows=1, ncols=1, figsize=(5, 5))

componentes = modelo_pca.components_

[Link](componentes.T, cmap='viridis', aspect='auto')

[Link](range(len([Link])), [Link])

2
[Link](range(modelo_pca.n_components_),[f"PC{i+1}" for i in
range(modelo_pca.n_components_)])

[Link](False)

[Link]();

Biplot

import [Link] as plt

import numpy as np

# Nombres de las variables originales

features = [Link]

# Primeras dos componentes

pc1 = X_pca[:, 0]

pc2 = X_pca[:, 1]

[Link](figsize=(10, 7))

# 1) Graficamos los individuos (observaciones)

[Link](pc1, pc2, alpha=0.6, color="lightblue")

# 2) Agregamos vectores de las variables originales

# Tomamos los coeficientes (loadings) de PCA

loadings = pca.components_.T[:, :2]

for i, feature in enumerate(features):

[Link](0, 0,

loadings[i, 0]*5, # factor de escala

loadings[i, 1]*5,

color="red", alpha=0.7, head_width=0.05)

[Link](loadings[i, 0]*5.2, loadings[i, 1]*5.2, feature, color="red")

# Etiquetas

[Link]("PC1 ({}%)".format(round(pca.explained_variance_ratio_[0]*100, 2)))

[Link]("PC2 ({}%)".format(round(pca.explained_variance_ratio_[1]*100, 2)))

[Link]("Biplot de las dos primeras componentes principales")

[Link](True)

[Link](0, color="grey", lw=1)

3
[Link](0, color="grey", lw=1)

[Link]()

Distancia entre los puntos

import numpy as np

from [Link] import pdist

Distancia euclídea

pdist(x)

Distancia de Minkowski

pdist(x, metric='minkowski', p=3.5)

Distancia de Manhattan

pdist(x, metric='cityblock')

Distancia de Chebyshev

pdist(x, 'chebyshev')

Generación de variables Dummy para categóricas

df = pd.get_dummies(df, columns=["Gender"])

Normalizar columnas

df["V1"] = (df["V1"] - df["V1"].min()) / (df["V1"].max() - df["V1"].min())

K-means

V1 vs V2

Cálculo de la inercia para determinar la cantidad de cluster

c1 = "V1"

c2 = "V2"

inercias = []

for n in range(1, 11):

km = KMeans(n_clusters=n, init='k-means++', random_state=42)

[Link](df[[c1, c2]])

[Link](km.inertia_)

inercias

# Inercia: Suma de las distancias al cuadrado de los puntos a su centroide más cercano

4
# Graficamos la curva de inercias para ver el codo

[Link](1, figsize=(5, 5))

[Link](range(1, 11) , inercias , 'o')

[Link](range(1, 11) , inercias , '-' , alpha=0.5)

[Link]('Cantidad de clusters')

[Link]('Inercias')

[Link]()

Tomamos k=3 y entrenamos (Se puede elegir el valor según el método del codo)

k=3

km = KMeans(n_clusters=k, init='k-means++', random_state=42)

[Link](df[[c1, c2]])

km.fit_predict(df[[c1, c2]])

labels = km.labels_

centroids = km.cluster_centers_

# Graficamos

[Link](1, figsize=(10, 5))

[Link](x=c1, y=c2, data=df[[c1, c2]], c=labels, s=100)

[Link](x=centroids[:, 0] , y=centroids[:, 1], s=120 , c="red", alpha=0.5)

[Link](c1)

[Link](c2)

[Link]()

Se agregar el número de cluster al conjunto de datos

df['Cluster']=km.fit_predict(df[[c1, c2]])

df=df[['V1', 'V2', 'Cluster']]

df

Coeficiente de Silhouette

x=df[['V1','V2']].values

scaler = StandardScaler()

x_scale = scaler.fit_transform(x)

5
max_score = -1

best_k = None

for k in range(2, 11):

kmeans = KMeans(n_clusters=k, random_state=42)

y = kmeans.fit_predict(x_scale)

score = silhouette_score(x_scale, y)

if score > max_score:

max_score = score

best_k = k

print(f"k={k}, silhouette score={score:.3f}")

print(f"\nBest k={best_k} with silhouette score={max_score:.3f}")

Cluster Jerárquico

Vecino más cercano, distancia euclideana

single_clustering = linkage(df, method="single", metric="euclidean")

[Link](3, figsize=(20, 10))

dendrogram(single_clustering, above_threshold_color='#bcbddc')

# Otra orientación del dendrograma

#dendrogram(single_clustering, above_threshold_color='#bcbddc', orientation='right')

[Link]()

Para agregar el cluster al conjunto de datos

# Queremos, por ejemplo, 2 clusters

k=2

clusters = fcluster(single_clustering, k, criterion="maxclust")

df["Cluster"] = clusters

[Link]()

Vecino más lejano, distancia euclideana

complete_clustering = linkage(df, method="complete", metric="euclidean")

[Link](1, figsize=(20, 10))

dendrogram(complete_clustering)

[Link]()

6
Vinculación promedio de puntos, distancia euclideana

average_clustering = linkage(df, method="average", metric="euclidean")

[Link](2, figsize=(20, 10))

dendrogram(average_clustering)

[Link]()

UPGMA ponderado, distancia euclideana

weighted_clustering = linkage(df, method="weighted", metric="euclidean")

[Link](4, figsize=(20, 10))

dendrogram(weighted_clustering)

[Link]()

Método del centroide, distancia euclideana

centroid_clustering = linkage(df, method="centroid", metric="euclidean")

[Link](5, figsize=(20, 10))

dendrogram(centroid_clustering)

[Link]()

Médodo de la mediana, distancia euclideana

median_clustering = linkage(df, method="median", metric="euclidean")

[Link](5, figsize=(20, 10))

dendrogram(median_clustering)

[Link]()

Médodo ward mínima varianza, distancia euclideana

ward_clustering = linkage(df, method="ward", metric="euclidean")

[Link](5, figsize=(20, 10))

dendrogram(ward_clustering)

[Link]()

También podría gustarte