Data Science: Pandas, Numpy, Matplotlib y Scikit-learn
Development
- Curso
- Especialización en Python (EOI)
- Módulo
- Data Science
- Tecnologías
- Pandas, Scikit-learn, Numpy, Matplotlib
Data Science con Python, usando Pandas, Matplotlib y Scikit-learn
Este proyecto sobre Data Science fue uno de los más divertidos de realizar. Se trató de limpiar un dataset y analizarlo, usando para ello principalmente Pandas, Matplotlib y Machine Learning.

Nos proporcionan un csv con valores para el id, TV, radio, newspaper y sales, con un total de 210 filas. Nos indican que tenemos que limpiar el dataset, hacer varias representaciones usando Matplotlib y seaborn y realizar varios modelos usando scikit-learn, la famosa librería de Machine Learning.
Para realizar todas estas operaciones, usamos un “notebook” de jupyter lab, que permite ejecutar código python a la vez que vas realizando anotaciones usando markdown. Puedes verlo en mi github.
Proyecto Data Science: Instrucciones
La tarea consiste en analizar y explorar un conjunto de datos sencillo, utilizando las herramientas vistas en clase: numpy
, pandas
, matplotlib
, seaborn
, scikit-learn
, etc.
El conjunto de datos está en formato CSV, y se puede descargar aquí.
Cada fila del conjunto de datos describe una campaña de marketing con la cantidad de dinero que una empresa no especificada ha empleado en tres canales diferentes: televisión, radio y prensa, además de una última columna que lista las ventas conseguidas en dicha campaña. Las columnas TV
, radio
y newspaper
indican la cantidad de dinero invertida en miles de euros, mientras que la columna sales
indica miles de unidades vendidas.
Paso 1
- Limpiar el conjunto de datos de aquellas filas en las que falten datos o haya valores extraños o fuera de rango (recordemos
pandas.DataFrame.describe()
) - Crear tres scatter plots (o uno solo con tres subplots) con los ejes debidamente etiquetados, donde el eje X es la cantidad de dinero invertida en ese canal, y el eje Y representa el número de unidades vendidas
- [OPCIONAL] Utilizar plotting alternativo, como por ejemplo
seaborn.regplot()
; este incluye automáticamente una recta de regresión sobre los datos y unos intervalos de confianza ajustables - [OPCIONAL] Investigar acerca del coeficiente de correlación de Pearson (por ejemplo aquí y aquí), calcularlo y mostrarlo sobre los plots. La funcion
numpy.corrcoef()
es útil para esto
El resultado debe ser similar a esto:
Paso 2
Aumentar el dataset con las siguientes dos columnas generadas:
- Cantidad total invertida por venta, es decir, coste total (entre los tres canales) dividido por el número de ventas
- Un valor booleano (
true
/false
, o0
/1
) que indique si la campaña de marketing fue exitosa. Una campaña es considerada exitosa si se cumplen ambas condiciones siguientes:- Cantidad total invertida por venta es menos de 20€
- Más de 15000 unidades fueron vendidas
Responder a la pregunta: ¿Cuántas campañas fueron exitosas?
Paso 3
- Crear un conjunto de entrenamiento seleccionando las filas con
id <= 160
- Entrenar un clasificador Gaussian Naive-Bayes como vimos en clase para determinar si una campaña será exitosa, dadas las cantidades empleadas en cada canal de marketing
- Calcular la fracción del conjunto de entrenamiento que es clasificado correctamente.
- [OPCIONAL] Utilizar clasificadores alternativos, tales como regresión logística (enlace, enlace) o random forest (enlace, enlace)
Paso 4
- Crear un conjunto de prueba seleccionando las filas con
id > 160
- Evaluar el rendimiento del clasificador de la siguiente manera:
- ¿Qué porcentaje del conjunto de prueba fue clasificado correctamente (aciertos sobre el total)? Es deseable que este número llegue al menos al 80%
- ¿Cuál es la proporción de falsos positivos y falsos negativos?
Criterios de evaluación
En orden de importancia, se evaluará la entrega acorde a los siguientes puntos:
- Implementación de los puntos obligatorios en los cuatro pasos
- Correctitud de los datos obtenidos
- Implementación de los puntos opcionales
- Organización y limpieza del código