0% found this document useful (0 votes)
34 views6 pages

Tarea 4

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views6 pages

Tarea 4

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

2/11/24, 11:14 PM Tarea4.

ipynb - Colaboratory

# Instala las librerías necesarias (si aún no las tienes instaladas)


!pip install kmodes
!pip install pca

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy.stats import norm
import scipy.stats as ss
%matplotlib inline
from sklearn.preprocessing import StandardScaler

# Cargar los datos desde el enlace


data = pd.read_csv("https://raw.githubusercontent.com/marsgr6/EN-online/8a1cee296279c274d

#1
# Mapeo de valores categóricos a numéricos
attrition_mapping = {v: i for i, v in enumerate(data.Attrition.unique())}
business_travel_mapping = {v: i for i, v in enumerate(data.BusinessTravel.unique())}
department_mapping = {v: i for i, v in enumerate(data.Department.unique())}
education_field_mapping = {v: i for i, v in enumerate(data.EducationField.unique())}

encoded_data = data.copy()
encoded_data['Attrition'] = encoded_data['Attrition'].map(attrition_mapping)
encoded_data['BusinessTravel'] = encoded_data['BusinessTravel'].map(business_travel_mappi
encoded_data['Department'] = encoded_data['Department'].map(department_mapping)
encoded_data['EducationField'] = encoded_data['EducationField'].map(education_field_mappi

# Filtrar las columnas numéricas


data_num = encoded_data.select_dtypes(include=np.number)

# Eliminar columnas con varianza cero


data_filtered = data_num.loc[:, data_num.var() > 0]

# Estandarizar los datos


scaler = StandardScaler()
data_scaled = scaler.fit_transform(data_filtered)

# Imprimir los primeros registros del DataFrame


print(data_filtered.head())

Age Attrition BusinessTravel DailyRate Department DistanceFromHome \


0 41 0 0 1102 0 1
1 49 1 1 279 1 8
2 37 0 0 1373 1 2
3 33 1 1 1392 1 3
4 27 1 0 591 1 2

Education EducationField EmployeeNumber EnvironmentSatisfaction ... \


0 2 0 1 2 ...
1 1 0 2 3 ...
2 2 1 4 4 ...
3 4 0 5 4 ...
https://colab.research.google.com/drive/1J6z0n7M4XdLJE7QZdDmi703EX-Mf3D8y#scrollTo=F6b4bT4JmhMY&printMode=true 1/6
2/11/24, 11:14 PM Tarea4.ipynb - Colaboratory
4 1 2 7 1 ...

PerformanceRating RelationshipSatisfaction StockOptionLevel \


0 3 1 0
1 4 4 1
2 3 2 0
3 3 3 0
4 3 4 1

TotalWorkingYears TrainingTimesLastYear WorkLifeBalance YearsAtCompany \


0 8 0 1 6
1 10 3 3 10
2 7 3 3 0
3 8 3 3 8
4 6 3 3 2

YearsInCurrentRole YearsSinceLastPromotion YearsWithCurrManager


0 4 0 5
1 7 1 7
2 0 0 0
3 7 3 0
4 2 2 2

[5 rows x 28 columns]

1 Preprocesamiento de datos

a) Filtrar las columnas numéricas: El primer paso es seleccionar solo las columnas que
contienen valores numéricos. Esto permitirá trabajar con las características relevantes para el
análisis, para esto se tiliza la función select_dtypes que permite filtrar las columnas numéricas.

b) Eliminar columnas con varianza cero: Si alguna columna tiene una varianza igual a cero,
significa que todos sus valores son iguales. Estas columnas no aportan información útil y
pueden eliminarse, para esto se verifica si hay columnas con varianza cero y las excluiremos del
conjunto de datos.

c) Estandarizar los datos usando escalado estándar: Para facilitar el análisis, se realiza el
escalamiento de los valores numéricos para que tengan una media de 0 y una desviación
estándar de 1, por lo tanto, se itilizará la clase StandardScaler de Scikit-Learn para estandarizar
los datos.

https://colab.research.google.com/drive/1J6z0n7M4XdLJE7QZdDmi703EX-Mf3D8y#scrollTo=F6b4bT4JmhMY&printMode=true 2/6
2/11/24, 11:14 PM Tarea4.ipynb - Colaboratory

#2
from sklearn.cluster import KMeans

# fitting multiple k-means algorithms and storing the values in an empty list
SSE = []
test_clusters = 10
for cluster in range(1,test_clusters+1):
kmeans = KMeans(n_clusters=cluster, n_init="auto")
kmeans.fit(data_scaled)
SSE.append(kmeans.inertia_)

# converting the results into a dataframe and plotting them


frame = pd.DataFrame({'Cluster':range(1,test_clusters+1), 'SSE':SSE})
plt.figure(figsize=(12,6))
plt.plot(frame['Cluster'], frame['SSE'], marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.xticks(frame.Cluster[1::2]);

2 Utilice K-means y realice un análisis de codo para decidir cuántos clusters usar.

Una vez que se ha aplicado el algoritmo K-means y se ha realizado un análisis de codo, se


puedes determinar el número óptimo de clusters para nuestros datos. Este método de codo
implica crear una gráfica con el número de clusters en el eje x y la suma de los errores

https://colab.research.google.com/drive/1J6z0n7M4XdLJE7QZdDmi703EX-Mf3D8y#scrollTo=F6b4bT4JmhMY&printMode=true 3/6
2/11/24, 11:14 PM Tarea4.ipynb - Colaboratory

cuadrados internos (SSE) en el eje y. Permintiendo de esta manera encontrar el punto donde
aparece un “codo” o curva en la gráfica. Este punto representa el número óptimo de clusters. Por
consiguiente, en la gráfica resultante se observa el punto de la curva lo cual es el número 5 el
valor óptimo de clusters para nuestros datos.

#3
from sklearn.decomposition import PCA

pca = PCA(n_components=2)
principalComponents = pca.fit_transform(data_scaled)
pc_transformation = pd.DataFrame(data = principalComponents,
columns = ['PC1', 'PC2'])
kmeans = KMeans(n_clusters=2, n_init="auto").fit(data_scaled)
pc_transformation['Cluster'] = pd.Categorical(kmeans.labels_)

sns.scatterplot(data=pc_transformation, x="PC1", y="PC2", hue="Cluster")

<Axes: xlabel='PC1', ylabel='PC2'>

3 Use PCA para visualizar los clusters generados.

a) Visualice usando las priemeras 2 componentes principales: En la gráfica generada después


de aplicar el análisis de componentes principales (PCA) y el algoritmo K-means, se puede
observar la distribución de los datos en un espacio bidimensional.

Los puntos se agrupan en dos clusters distintos, representados por diferentes colores.
Cada punto en la gráfica corresponde a una fila de datos del conjunto original.
Los clusters están separados en función de las características transformadas por PCA.

https://colab.research.google.com/drive/1J6z0n7M4XdLJE7QZdDmi703EX-Mf3D8y#scrollTo=F6b4bT4JmhMY&printMode=true 4/6
2/11/24, 11:14 PM Tarea4.ipynb - Colaboratory

#4
kmeans = KMeans(n_clusters=5, n_init="auto").fit(data_scaled)
pc_transformation['Cluster'] = pd.Categorical(kmeans.labels_)

sns.scatterplot(data=pc_transformation, x="PC1", y="PC2", hue="Cluster")

<Axes: xlabel='PC1', ylabel='PC2'>

4 Realice un análisis descriptivo y decida entre k∈{2,3,4,5}.

a) A continuación tiene un ejemplo para visualizar 5 clusters usando PCA:

5 De conclusiones:

Después de realizar todo este análisis y procesamiento de datos, se puede extraer algunas
conclusiones:

Análisis de Componentes Principales (PCA): Utilizamos PCA para reducir la


dimensionalidad de los datos y representarlos en un espacio bidimensional. En las dos
primeras componentes principales (PC1 y PC2) explican la mayor parte de la variabilidad
en los datos, la gráfica muestra cómo se agrupan las observaciones en función de estas
componentes.

K-means Clustering: Se aplicó K-means para agrupar los datos en dos clusters, los puntos
en la gráfica están coloreados según el cluster al que pertenecen, estos clusters
representan grupos de observaciones similares en términos de sus características
transformadas.

https://colab.research.google.com/drive/1J6z0n7M4XdLJE7QZdDmi703EX-Mf3D8y#scrollTo=F6b4bT4JmhMY&printMode=true 5/6
2/11/24, 11:14 PM Tarea4.ipynb - Colaboratory

En resumen, se ha explorado y visualizado los datos, aplicando técnicas de reducción de


dimensionalidad y clustering, y tomado decisiones basadas en análisis descriptivos.

https://colab.research.google.com/drive/1J6z0n7M4XdLJE7QZdDmi703EX-Mf3D8y#scrollTo=F6b4bT4JmhMY&printMode=true 6/6

You might also like