Procesamiento y Análisis de Datos para Machine Learning
¡Hola! Te doy la bienvenida a esta clase donde comenzaremos a poner a prueba lo que has aprendido en los cursos previos de ciencia de datos e inteligencia artificial de Platzi y en este.
Recuerda que para avanzar con esta clase deberás haber tomado los siguientes cursos:
Te reitero que es muy importante que conozcas estos temas y ya tengas las habilidades para que puedas aprender con facilidad y seguir con el curso hasta el final. Aprender machine learning en un principio no es una tarea sencilla, pero con la preparación adecuada y dedicación podemos obtener este conocimiento de forma trascendental.
Let’s go for it! 💪
Nuestra notebook de ejercicios
Para esta clase tendrás una notebook en Google Colab donde encontrarás piezas de código con explicaciones sobre el paso a paso para procesar y analizar un dataset antes de comenzar a aplicar algoritmos de machine learning.
Crea una copia de este notebook en tu Google Drive o utilizalo en el entorno de Jupyter notebook que prefieras.
En el notebook también encontrarás ejercicios que deberás resolver por tu cuenta. Sigue las instrucciones dentro del notebook y comparte tus resultados en los comentarios de esta clase.
En dado caso de que tengas alguna duda o no puedas completar alguno de los ejercicios, al final del notebook encontrarás una sección con las respuestas, pero antes de revisarlas da el máximo esfuerzo para realizar los ejercicios. Así aprenderás mucho más.
De igual forma te invito a que dejes en comentarios cualquier duda, dificultad o pregunta que tengas al momento de seguir el notebook y realizar los ejercicios. Con mucho gusto la comunidad de Platzi te ayudará.
¡Te deseo mucho éxito y nos vemos en el próximo módulo! Comenzaremos a detallar los diferentes modelos que existen de machine learning. 🧠
Pienso que también se debería compartir Notebooks comentados para el resto de cursos, ayudan mucho.
Demasiado... No me imaginé que me quedaría muy claro cada detalle de esa manera.
Definitivo, el notebook está increíble para aprender a nuestro ritmo.
Hay una herramienta muy buena para gráficar llamada Seaborn. Es un wrapper de matplotlib pero considero tiene mejores funcionalidades y una mejor sintaxis, permite realizar gráficos más atractivos.
import seaborn as sns
data['Diabetes']=data.apply( lambda row:'Diabetic'if row.Outcome==1else'Notdiabetic', axis=1)sns.scatterplot(x='BloodPressure', y='Age', hue='Diabetes', data=data, style='Diabetes', alpha=0.80, palette=['purple','#55CCCC']).set(title='Blood Pressure v. Age range of patients')```
Si, te ahorras mucho códgo con esa librería!
Y que te parece Plotly?
Resultados de preguntas del reto 2a:
P1: variables categóricas.
P2: variables cuantitativas.
P3: variable cuantitativas.
Por favor feedback con respecto a las respuestas.
P1. Cada categoria se podria representar como un entero
P2. Es una variable cuantitativa continua, y se repesenta como un float
P3. la misma que P2
De acuerdo con tu respuesta Jonathan!
Este es mi código a los retos:
RETO 1:
binvalues =[20,25,30,35,40,85]plt.figure(figsize=(10,8))plt.subplot(1,1,1)plt.hist(data['Age'], bins=binvalues, facecolor="g", alpha=0.4, edgecolor='black', linewidth=2)plt.title("Age range of patients")plt.ylim([0,510])plt.xlabel("Age")plt.ylabel("Count")ax = plt.gca()ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')plt.show()
Resultado:
RETO 2:
plt.figure(figsize=(10,8))plt.subplot(1,1,1)plt.hist(data['Age'], bins=5, facecolor="g", alpha=0.4, edgecolor='black', linewidth=2)plt.title("Age range of patients")plt.ylim([0,510])plt.xlabel("Age")plt.ylabel("Count")ax = plt.gca()ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')plt.show()
Resultado:
RETO 3:
diabetic = data[data["Outcome"]==1]notdiabetic = data[data["Outcome"]==0]plt.rcParams['font.size']=15f = plt.figure(figsize=(8,8))ax = f.add_subplot(2,1,1)ax.scatter(diabetic["BloodPressure"], diabetic["Age"], alpha=0.25, c='r')ax.set_title("Diabetic: Age range of patients v. Blood Pressure")ax.set_ylabel("Age")ax.set_xlabel("Blood Pressure")ax = f.add_subplot(2,1,2)ax.scatter(notdiabetic["BloodPressure"], notdiabetic["Age"], alpha=0.25, c='b')ax.set_title("Not diabetic: Age range of patients v. Blood Pressure")ax.set_ylabel("Age")ax.set_xlabel("Blood Pressure")ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')f.tight_layout()
Resultado:
Es muy notable que las personas de menor edad están concentradas en la gráfica de Not diabetic. Además, su Blod Pressure ronda entre los 60 a 100.
Seaborn nos permite realizar Histogramas o Scatterplots y discrimar con algún feature en específico, por ejemplo:
El histograma del rango de edades de los pacientes y si son diabéticos o no diabéticos
#Creamos nueva columna para diabetes y no diabetes
#Realizamos un mapeo entre el outcome y su respectivo valor categórico
df_diabetes['Patient']= df_diabetes['Outcome'].map({0:'Not Diabetic',1:'Diabetic'})plt.rcParams['font.size']=15fig = plt.figure(figsize=(8,4))ax = fig.add_subplot(1,1,1)#Realizamos histograma con edad
sns.histplot(data= df_diabetes, x='Age', hue='Patient')# Crea el título.ax.set_title("Age Range of Patients")fig.tight_layout()
Lo mismo podemos realizar con un Scatterplot
#Para ello la columna 'Patient'Ya debió haber sido creada
#Scatterplot entre Edad y Presión sanguínea
plt.rcParams['font.size']=15fig = plt.figure(figsize=(8,4))#Subplotax = fig.add_subplot(1,1,1)#Graficamossns.scatterplot(data=df_diabetes, x='BloodPressure', y='Age', hue='Patient',alpha=0.8)#Título
plt.title("Blood pressure vs. age range of patients")fig.tight_layout()
Reto 1 (3a)
Puedes usar enumerate() para no tener que declarar un contador en el for.
Aquí les comparto mi aporte con seaborn y cambiando de ejes.
Y aquí el código:
plt.figure(figsize=(10,5))sns.scatterplot(x ='Age', y ='BloodPressure', data = data, hue ='Outcome', alpha =0.75, style='Outcome')plt.legend(['Diabéticos','No Diabéticos'])plt.title('Presión Sanguinea v. Edad: Pacientes con/sin Diabetes')plt.ylabel('Presión Sanguinea')plt.xlabel('Edad')plt.show()
Preguntas del reto:
Pregunta 1: Datos categóricos
Pregunta 2: Valores continuos (float64)
Pregunta 3: Valores continuos (float64)
Resultados de preguntas del reto 4:
P1: vsupervisado-regresión.
P2: supervisado-clasificación.
P3: no supervisado-clustering.
ax.set_title("Age range of patients")
ax.set_ylim([0, 510]) # Mantener el límite de y en [0, 510]
ax.set_xlabel("Age")
ax.set_ylabel("Count")
f.tight_layout()
Pregunta 1
Tipo object
Pregunta 2
Tipo float64
Pregunta 3
Tipo int64
De reto, los de dispersion
Si tiene diabetes no hay correlacion entre presion arterial y edad
PERO SI NO TIENE DIABETES SI HAY CORRELACION ENTRE EDAD BAJA Y PRESION ARTERIAL BAJA
Info del reto:
Hola a Todos, por acá dejo respuestas del reto. Pregunta1: Categórico, pues el # de productos es finito. P2: Si es en pesos colombianos, se puede interpretar como Entero; si es en dolares, se puede interpretar como flotante (este caso admite centavos). P3: Flotante, pues admite decimales. Saludos.
2a: Preguntas del reto
A partir de las siguientes preguntas, debes identificar el tipo de datos que se usaría en cada situación. Deja tus resultados en los comentarios de la clase donde encontraste este notebook.
Pregunta 1
Tienes un conjunto de datos de información de ventas sobre equipos electrónicos. Una de las columnas del conjunto de datos describe qué es el producto: tableta, teléfono inteligente, TV, computadora. ¿Qué tipo de datos es este?
Rt// categorial
Pregunta 2
A partir del mismo conjunto de datos de equipos electrónicos anterior, tienes información sobre el precio de cada artículo. ¿Qué tipo de datos es este?
Rta//Numerical
Pregunta 3
Tienes información sobre el kilometraje (distancia recorrida) de varios automóviles en un concesionario. ¿Qué tipo de información es esta?
Rta//Numerical
4: Preguntas del reto
A continuación, te daré un par de ejemplos para tratar de comprender qué tipos de modelos debería utilizar. Responde en los comentarios de la clase a qué tipo de algoritmo se refiere la situación.
Pregunta 1
Tienes un conjunto de datos de una empresa de ropa y deseas predecir el volumen de ventas de vestidos en el próximo mes. ¿Qué tipo de problema es?
Rta//Supervisado y Regresión
Pregunta 2
Al igual que en la primera pregunta, estás utilizando un conjunto de datos de ropa. En lugar de predecir el volumen de ventas, querrás saber si venderás al menos 1000 de un determinado tipo de vestido. ¿Qué tipo de problema es este?
Rta//Supervisado y Clasificación
Pregunta 3
Tienes información sobre cómo compran ropa los clientes en tu tienda. Tienes un conjunto de datos de sus compras, segmentado en categorías: la cantidad de pantalones, camisas, vestidos y faldas que compra cada cliente. Deseas segmentar a tus clientes en diferentes grupos para poder enviar anuncios a cada grupo, según lo que quieran usar. ¿Qué tipo de problema podría ser este?
Rta//Aprendizaje no supervisado - Clustering
Pregunta 1
Tienes un conjunto de datos de una empresa de ropa y deseas predecir el volumen de ventas de vestidos en el próximo mes. ¿Qué tipo de problema es?
RTA: Aprendizaje supervisado de regresión.
Pregunta 2
Al igual que en la primera pregunta, estás utilizando un conjunto de datos de ropa. En lugar de predecir el volumen de ventas, querrás saber si venderás al menos 1000 de un determinado tipo de vestido. ¿Qué tipo de problema es este?
RTA: Aprendizaje supervisado de clasificación.
Pregunta 3
Tienes información sobre cómo compran ropa los clientes en tu tienda. Tienes un conjunto de datos de sus compras, segmentado en categorías: la cantidad de pantalones, camisas, vestidos y faldas que compra cada cliente. Deseas segmentar a tus clientes en diferentes grupos para poder enviar anuncios a cada grupo, según lo que quieran usar. ¿Qué tipo de problema podría ser este?
RTA: Aprendizaje no supervisado por clustering.
Este es el desarrollo de mi punto 3.
Pregunta 1
Tienes un conjunto de datos de información de ventas sobre equipos electrónicos. Una de las columnas del conjunto de datos describe qué es el producto: tableta, teléfono inteligente, TV, computadora. ¿Qué tipo de datos es este?
Estos tipos de datos hacen parte de los categóricos nominales, esto ya que en si cada uno de las columnas se podrían representar como variable no numéricas, estos son categorías por decirlo así, no existe un orden entre las categorías, es decir, un teléfono no es mas o menos que una TV, solo son clases diferentes.
Pregunta 2
A partir del mismo conjunto de datos de equipos electrónicos anterior, tienes información sobre el precio de cada artículo. ¿Qué tipo de datos es este?
Este ya seria del tipo numérico continuo, esto debido a que es un numero que se puede representar con los números reales, osea puede incluir cualquier valor en una rango incluyendo decimales, no es específicamente un numero determinado o entero, esto lo convertiría en un timo numérico discreto.
Pregunta 3
Tienes información sobre el kilometraje (distancia recorrida) de varios automóviles en un concesionario. ¿Qué tipo de información es esta?
Este es un tipo de información numérico cuantitativa, debido a que representan una característica medible.