Daniel Pérez
David Gonzalez
Si, te ahorras mucho códgo con esa librería!
Diego Jurado
Y que te parece Plotly?
¡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. 🧠
Daniel Pérez
David Gonzalez
Si, te ahorras mucho códgo con esa librería!
Diego Jurado
Y que te parece Plotly?
Jonathan Fernando Santana Quispillo
Resultados de preguntas del reto 2a: P1: variables categóricas. P2: variables cuantitativas. P3: variable cuantitativas. Por favor feedback con respecto a las respuestas.
Julian Crispin
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
Diego Jurado
De acuerdo con tu respuesta Jonathan!
Jose Luis Higuera Caraveo
David Coello
Ciro Villafraz
David Carrillo Castillo
Reto 1 (3a)
Mario Chavez
Puedes usar enumerate() para no tener que declarar un contador en el for.
Fernando Callasaca Acuña
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()
Eliana Ossio
Preguntas del reto:
Pregunta 1: Datos categóricos
Pregunta 2: Valores continuos (float64)
Pregunta 3: Valores continuos (float64)
Jonathan Fernando Santana Quispillo
Resultados de preguntas del reto 4: P1: vsupervisado-regresión. P2: supervisado-clasificación. P3: no supervisado-clustering.
Juan Alberto Solís Castro
Wilder Winslao Trujillo Meza
El Curso Práctico de Regresión Lineal con Python No está funcionando
María José Barrera Chávez
Hola! El enlace de Curso Práctico de Regresión Lineal con Python no funciona
Nicolás Rodas Rios
Pregunta 1 Tipo object Pregunta 2 Tipo float64 Pregunta 3 Tipo int64
Tomas Dale
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
Anthony Guzman Lopez
Info del reto:
ISMAEL FARID COHEN PUERTA
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.
Juan felipe Becerra
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
Alex Eduardo Nocua Sema
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.
Alex Eduardo Nocua Sema
Este es el desarrollo de mi punto 3.
Alex Eduardo Nocua Sema
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.
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 == 1 else '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')```
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'] = 15 f = 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'] = 15 fig = 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'] = 15 fig = plt.figure(figsize=(8,4)) #Subplot ax = fig.add_subplot(1,1,1) #Graficamos sns.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()
3a: Ejercicio del reto 2
## TU CODIGO AQUI
f = plt.figure(figsize=(8, 4))
ax = f.add_subplot(1, 1, 1)
# Usar 5 bins
data["Age"].hist(ax=ax, bins=5, edgecolor='black', linewidth=1)
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()
TU CODIGO AQUI
f = plt.figure(figsize=(8, 4)) ax = f.add_subplot(1, 1, 1)
Usar 5 bins
data["Age"].hist(ax=ax, bins=5, edgecolor='black', linewidth=1)
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()