The post Análisis Exploratorio de Datos con Pandas en Python first appeared on Aprende Machine Learning.
]]>Como siempre, podrás descargar todo el código de la Jupyter Notebook desde mi cuenta de Github (que contiene información extra). Y como BONUS encuentra una notebook con las funciones más útiles de Pandas!
Eda es la sigla en inglés para Exploratory Data Analysis y consiste en una de las primeras tareas que tiene que desempeñar el Científico de Datos. Es cuando revisamos por primera vez los datos que nos llegan, por ejemplo un archivo CSV que nos entregan y deberemos intentar comprender “¿de qué se trata?”, vislumbrar posibles patrones y reconociendo distribuciones estadísticas que puedan ser útiles en el futuro.
OJO!, lo ideal es que tengamos un objetivo que nos hayan “adjuntado” con los datos, que indique lo que se quiere conseguir a partir de esos datos. Por ejemplo, nos pasan un excel y nos dicen “Queremos predecir ventas a 30 días”, ó “Clasificar casos malignos/benignos de una enfermedad”, “Queremos identificar audiencias que van a realizar re-compra de un producto”, “queremos hacer pronóstico de fidelización de clientes/abandonos”, “Quiero detectar casos de fraude en mi sistema en tiempo real”.
Al llegar un archivo, lo primero que deberíamos hacer es intentar responder:
Puede ocurrir que tengamos set de datos incompletos y debamos pedir a nuestro cliente/proveedor ó interesado que nos brinde mayor información de los campos, que aporte más conocimiento ó que corrija campos.
¿Qué son los conjuntos de Train, Test y Validación en Machine Learning?
También puede que nos pasen múltiples fuentes de datos, por ejemplo un csv, un excel y el acceso a una base de datos. Entonces tendremos que hacer un paso previo de unificación de datos.
El EDA será entonces una primer aproximación a los datos, ATENCIóN, si estamos mas o menos bien preparados y suponiendo una muestra de datos “suficiente”, puede que en “unas horas” tengamos ya varias conclusiones como por ejemplo:
A estas alturas podemos saber si nos están pidiendo algo viable ó si necesitamos más datos para comenzar.
Repito por si no quedó claro: el EDA debe tomar horas, ó puede que un día, pero la idea es poder sacar algunas conclusiones rápidas para contestar al cliente si podemos seguir o no con su propuesta.
Luego del EDA, suponiendo que seguimos adelante podemos tomarnos más tiempo y analizar en mayor detalle los datos y avanzar a nuevas etapas para aplicar modelos de Machine Learning.
Vamos a lo práctico!, ¿Que herramientas tenemos hoy en día? La verdad es que como cada conjunto de datos suele ser único, el EDA se hace bastante “a mano”, pero podemos seguir diversos pasos ordenados para intentar acercarnos a ese objetivo que nos pasa el cliente en pocas horas.
A nivel programación y como venimos utilizando Python, encontramos a la conocida librería Pandas, que nos ayudará a manipular datos, leer y transformarlos.
Instala el ambiente de desarrollo Python en tu ordenador siguiendo esta guía
Otra de las técnicas que más nos ayudaran en el EDA es visualización de datos (que también podemos hacer con Pandas).
Finalmente podemos decir que nuestra Intuición -basada en Experiencia previa, no en corazonadas- y nuestro conocimiento de casos similares también nos pueden aportar pistas para saber si estamos ante datos de buena calidad. Por ejemplo si alguien quiere hacer reconocimiento de imágenes de tornillos y tiene 25 imágenes y con muy mala resolución podremos decir que no tenemos muestras suficientes -dado nuestro conocimiento previo de este campo-.
Vamos a la práctica!
Vamos a hacer un ejemplo en pandas de un EDA bastante sencillo pero con fines educativos.
Vamos a leer un csv directamente desde una URL de GitHub que contiene información geográfica básica de los países del mundo y vamos a jugar un poco con esos datos.
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm url = 'https://raw.githubusercontent.com/lorey/list-of-countries/master/csv/countries.csv' df = pd.read_csv(url, sep=";") print(df.head(5))
Veamos los datos básicos que nos brinda pandas:
Nombre de columnas
print('Cantidad de Filas y columnas:',df.shape) print('Nombre columnas:',df.columns)
Columnas, nulos y tipo de datos
df.info()
descripción estadística de los datos numéricos
df.describe()
Verifiquemos si hay correlación entre los datos
corr = df.set_index('alpha_3').corr() sm.graphics.plot_corr(corr, xnames=list(corr.columns)) plt.show()
Cargamos un segundo archivo csv para ahondar en el crecimiento de la población en los últimos años, filtramos a España y visualizamos
url = 'https://raw.githubusercontent.com/DrueStaples/Population_Growth/master/countries.csv' df_pop = pd.read_csv(url) print(df_pop.head(5)) df_pop_es = df_pop[df_pop["country"] == 'Spain' ] print(df_pop_es.head()) df_pop_es.drop(['country'],axis=1)['population'].plot(kind='bar')
Hagamos la comparativa con otro país, por ejemplo con el crecimiento poblacional en Argentina
df_pop_ar = df_pop[(df_pop["country"] == 'Argentina')] anios = df_pop_es['year'].unique() pop_ar = df_pop_ar['population'].values pop_es = df_pop_es['population'].values df_plot = pd.DataFrame({'Argentina': pop_ar, 'Spain': pop_es}, index=anios) df_plot.plot(kind='bar')
Ahora filtremos todos los paises hispano-hablantes
df_espanol = df.replace(np.nan, '', regex=True) df_espanol = df_espanol[ df_espanol['languages'].str.contains('es') ] df_espanol
Visualizamos…
df_espanol.set_index('alpha_3')[['population','area']].plot(kind='bar',rot=65,figsize=(20,10))
Vamos a hacer detección de Outliers, (con fines educativos) en este caso definimos como limite superior (e inferior) la media más (menos) “2 veces la desviación estándar” que muchas veces es tomada como máximos de tolerancia.
anomalies = [] # Funcion ejemplo para detección de outliers def find_anomalies(data): # Set upper and lower limit to 2 standard deviation data_std = data.std() data_mean = data.mean() anomaly_cut_off = data_std * 2 lower_limit = data_mean - anomaly_cut_off upper_limit = data_mean + anomaly_cut_off print(lower_limit.iloc[0]) print(upper_limit.iloc[0]) # Generate outliers for index, row in data.iterrows(): outlier = row # # obtener primer columna # print(outlier) if (outlier.iloc[0] > upper_limit.iloc[0]) or (outlier.iloc[0] < lower_limit.iloc[0]): anomalies.append(index) return anomalies find_anomalies(df_espanol.set_index('alpha_3')[['population']])
Detectamos como outliers a Brasil y a USA. Los eliminamos y graficamos ordenado por población de menor a mayor.
# Quitemos BRA y USA por ser outlies y volvamos a graficar: df_espanol.drop([30,233], inplace=True) df_espanol.set_index('alpha_3')[['population','area']].sort_values(["population"]).plot(kind='bar',rot=65,figsize=(20,10))
En pocos minutos hemos podido responder: cuántos datos tenemos, si hay nulos, los tipos de datos (entero, float, string), la correlación, hicimos visualizaciones, comparativas, manipulación de datos, detección de ouliers y volver a graficar. ¿No está nada mal, no?
Otras pruebas y gráficas que se suelen hacer son:
En el artículo vimos un repaso sobre qué es y cómo lograr hacer un Análisis Exploratorio de Datos en pocos minutos. Su importancia es sobre todo la de darnos un vistazo sobre la calidad de datos que tenemos y hasta puede determinar la continuidad o no de un proyecto.
Siempre dependerá de los datos que tengamos, en cantidad y calidad y por supuesto nunca deberemos dejar de tener en vista EL OBJETIVO, el propósito que buscamos lograr. Siempre debemos apuntar a lograr eso con nuestras acciones.
Como resultado del EDA si determinamos continuar, pasaremos a una etapa en la que ya preprocesaremos los datos pensando en la entrada a un modelo (ó modelos!) de Machine Learning.
La detección de Outliers podría comentarse en un artículo completo sobre el tema… YA salió!
¿Conocías el EDA? ¿Lo utilizas en tu trabajo? Espero tus comentarios!
Recibe los próximos artículos sobre Machine Learning, estrategias, teoría y código Python en tu casilla de correo.
NOTA: algunos usuarios reportaron que el email de confirmación y/o posteriores a la suscripción entraron en su carpeta de SPAM. Te sugiero que revises y recomiendo que agregues nuestro remitente a tus contactos para evitar problemas. Gracias!
Como siempre, puedes descargar la notebook relacionada con este artículo desde aquí:
Como Bonus…. te dejo una notebook con los Casos más comunes de uso de Manipulación de datos con Pandas!
Estos son otros artículos relacionados que pueden ser de tu interés:
The post Análisis Exploratorio de Datos con Pandas en Python first appeared on Aprende Machine Learning.
]]>