MAT281 - Laboratorio N°08¶
I.- Problema 01¶
El conjunto de datos, denominado vehiculos_procesado_con_grupos.csv
, contiene algunas de las características más importantes de los vehículos. El objetivo de este ejercicio es clasificar los vehículos en diferentes categorías, basándonos en las características que se describen a continuación.
El desafío de este ejercicio radica en la combinación de variables numéricas y categóricas, lo que añade complejidad al análisis.
Lo primero que haremos será cargar el conjunto de datos:
Descripción de los Datos:
Nombre de la Columna | Descripción |
---|---|
year | El año en que el vehículo fue fabricado. |
desplazamiento | La capacidad volumétrica del motor en litros. Indica la cantidad de aire y combustible que puede desplazar el motor durante una revolución. |
cilindros | El número de cilindros que tiene el motor. Los cilindros son las cámaras donde ocurre la combustión interna en los motores de los vehículos. |
co2 | Emisiones de dióxido de carbono del vehículo, medido en gramos por kilómetro. Es una medida de las emisiones de gases de efecto invernadero. |
clase_tipo | La clase o tipo de vehículo, como vehículos especiales, deportivos, etc. |
traccion_tipo | Tipo de tracción del vehículo, ya sea tracción en dos ruedas, en cuatro ruedas o en todas las ruedas. |
transmision_tipo | Tipo de transmisión del vehículo, como automática, manual, entre otros. |
combustible_tipo | Tipo de combustible que utiliza el vehículo, como gasolina, diésel, eléctrico, híbrido, etc. |
tamano_motor_tipo | Clasificación del tamaño del motor (por ejemplo, pequeño, mediano o grande), que generalmente se basa en la capacidad de desplazamiento. |
consumo_tipo | Clasificación del nivel de consumo de combustible del vehículo, indicando si es alto, bajo, o muy alto. |
co2_tipo | Clasificación de las emisiones de CO2 del vehículo, indicando si es alto, bajo, o muy alto. |
consumo_litros_milla | El consumo de combustible del vehículo, medido en litros por milla. Indica la eficiencia del vehículo en términos de consumo de combustible. |
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
from sklearn.dummy import DummyClassifier
from sklearn.cluster import KMeans
%matplotlib inline
sns.set_palette("deep", desat=.6)
sns.set(rc={'figure.figsize':(11.7,8.27)})
# cargar datos
df = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281_2024/main/docs/labs/data/vehiculos_procesado_con_grupos.csv", sep=",")\
.drop(
["fabricante",
"modelo",
"transmision",
"traccion",
"clase",
"combustible",
"consumo"],
axis=1)
df.head()
year | desplazamiento | cilindros | co2 | clase_tipo | traccion_tipo | transmision_tipo | combustible_tipo | tamano_motor_tipo | consumo_tipo | co2_tipo | consumo_litros_milla | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1984 | 2.5 | 4.0 | 522.764706 | Vehículos Especiales | dos | Automatica | Normal | pequeño | alto | alto | 0.222671 |
1 | 1984 | 4.2 | 6.0 | 683.615385 | Vehículos Especiales | dos | Automatica | Normal | grande | muy alto | muy alto | 0.291185 |
2 | 1985 | 2.5 | 4.0 | 555.437500 | Vehículos Especiales | dos | Automatica | Normal | pequeño | alto | alto | 0.236588 |
3 | 1985 | 4.2 | 6.0 | 683.615385 | Vehículos Especiales | dos | Automatica | Normal | grande | muy alto | muy alto | 0.291185 |
4 | 1987 | 3.8 | 6.0 | 555.437500 | Coches Medianos | dos | Automatica | Premium | grande | alto | alto | 0.236588 |
En este caso, no solo se tienen datos numéricos, sino que también categóricos. Además, tenemos problemas de datos vacíos (Nan). Así que para resolver este problema, seguiremos varios pasos:
1.- Normalizar datos¶
- Cree un conjunto de datos con las variables numéricas, además, para cada dato vacía, rellene con el promedio asociado a esa columna. Finalmente, normalize los datos mediante el procesamiento MinMaxScaler de sklearn.
2.- Cree un conjunto de datos con las variables categóricas , además, transforme de variables categoricas a numericas ocupando el comando get_dummies de pandas (referencia). Explique a grande rasgo como se realiza la codificación de variables numéricas a categóricas.
3.- Junte ambos dataset en uno, llamado df_procesado.
# FIXME
2.- Realizar ajuste mediante kmeans¶
Una vez depurado el conjunto de datos, es momento de aplicar el algoritmo de kmeans.
- Ajuste el modelo de kmeans sobre el conjunto de datos, con un total de 8 clusters.
- Asociar a cada individuo el correspondiente cluster y calcular valor de los centroides de cada cluster.
- Realizar un resumen de las principales cualidades de cada cluster. Para esto debe calcular (para cluster) las siguientes medidas de resumen:
- Valor promedio de las variables numérica
- Moda para las variables numericas
# FIXME
3.- Elegir Número de cluster¶
Estime mediante la regla del codo, el número de cluster apropiados para el caso. Para efectos prácticos, eliga la siguiente secuencia como número de clusters a comparar:
$$[5, 10, 20, 30, 50, 75, 100, 200, 300]$$
Una vez realizado el gráfico, saque sus propias conclusiones del caso.
# FIXME
Al observar el gráfico resultante, se pueden obtener conclusiones sobre el número apropiado de clusters. La regla del codo sugiere elegir el número de clusters donde la reducción en la inercia se estabiliza significativamente. En otras palabras, se busca el punto en el gráfico donde la curva de inercia comienza a aplanarse o forma un codo.
II.- Problema 02¶
Para el conjunto de datos de Iris, se pide realizar una reducción de dimensionalidad ocupando las técnicas de PCA y TSNE (vistas en clases).
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from mpl_toolkits.mplot3d import Axes3D
import seaborn as sns
dataset = load_iris()
features = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
target = 'species'
iris = pd.DataFrame(
dataset.data,
columns=features)
iris['species'] = dataset.target
iris.head()
El objetivo es aplicar ambos algoritmos de la siguiente manera:
- Análisis detallado algoritma PCA (tablas, gráficos, etc.)
- Análisis detallado algoritma TSNE (tablas, gráficos, etc.)
- Comparar ambos algoritmos (conclusiones del caso)
# FIXME