Ejemplos
En esta sección se presentan ejemplos de uso de las diferentes funciones de la librería, el código usado y el resultado esperado de estas. Los datos utilizados para los ejemplos corresponden a una muestra de los Casos positivos de COVID-19 en Colombia disponibles en el portal de Datos Abiertos de Colombia, se debe aclarar que los datos fueron modificados con el propósito de presentar el alcance de las diferentes funciones de la librería.
>>> # Se importa la librería pandas para la lectura de datos >>> import pandas as pd >>> dtypes = {'ID de caso': object, >>> 'Código DIVIPOLA': object, >>> 'Codigo departamento': object, >>> 'Codigo pais':object} >>> # Lectura de archivo de datos como dataframe >>> df_datos = pd.read_excel('dataset ejemplos.xlsx', dtype=dtypes)
En caso que desee utilizar los datos utilizados en los ejemplos, puede descargarlos utilizando el siguiente link. Descargar datos (6.2 MB)
.
Ejemplos - Calidad datos
calidad_datos.CantidadDuplicados
Retorna el porcentaje/número de filas o columnas duplicadas (repetidas) en el dataframe. Ver documentación calidad_datos.CalidadDatos.CantidadDuplicados()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos)>>> # Numero de filas duplicadas >>> repetidos_col_prop = datos.CantidadDuplicados(eje=0, numero=True) >>> print(repetidos_col_prop) 10>>> # Proporción de columnas duplicadas >>> repetidos_col_prop = datos.CantidadDuplicados(eje=1, numero=False) >>> print(repetidos_col_prop) 0.0833
De acuerdo a los resultados obtenidos vemos que la base de datos de ejemplo presenta 10 filas duplicadas y el 8.3% (2 de 24) de las columnas duplicadas.
calidad_datos.CorrelacionCategoricas
Genera una matriz de correlación entre las variables de tipo categóricas. Ver documentación calidad_datos.CalidadDatos.CorrelacionCategoricas()
Procedemos a calcular la correlación de variables tipo categóricas, en este caso utilizaremos el método de cramer y limitaremos el cálculo a las variables “Atención”, “Sexo”, “Tipo” y “Estado”.
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para calcular la correlación de variables categóricas >>> matriz_cramer = datos.CorrelacionCategoricas(metodo='cramer', variables=['Atención', 'Sexo', 'Tipo', 'Estado']) >>> print(matriz_cramer)
Index Atención Sexo Tipo Estado Atención 1.000000 0.018562 0.080947 0.812447 Sexo 0.018562 1.000000 0.089351 0.022477 Tipo 0.080947 0.089351 1.000000 0.141895 Estado 0.812447 0.022477 0.141895 1.000000
calidad_datos.CorrelacionNumericas
Genera una matriz de correlación entre las variables de tipo numérico. Ver documentación calidad_datos.CalidadDatos.CorrelacionNumericas()
Procedemos a calcular la correlación de variables tipo numéricas, en este caso utilizaremos el método de spearman.
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para calcular la correlación de variables numéricas >>> corr_spearman = datos.CorrelacionNumericas(metodo="spearman") >>> print(corr_spearman)
Index Edad Edad 2 Edad meses Edad 1.000000 1.000000 0.999849 Edad 2 1.000000 1.000000 0.999849 Edad meses 0.999849 0.999849 1.000000
calidad_datos.DescripcionCategoricas
Genera una tabla con los primeros 10 valores más frecuentes de las columnas categóricas del dataframe, además calcula su frecuencia y porcentaje dentro del total de observaciones. Incluye los valores faltantes. Ver documentación calidad_datos.CalidadDatos.DescripcionCategoricas()
Procedemos a generar la tabla descriptiva de variables tipo categóricas, en este caso limitaremos el cálculo a las variables “Atención” y “Pertenencia etnica”.
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para generar la tabla descriptiva de variables categóricas >>> descripcion_categoricas = datos.DescripcionCategoricas(variables=['Atención', 'Pertenencia etnica']) >>> print(descripcion_categoricas)
Index Columna Valor Frecuencia Porcentaje del total de filas 0 Atención Recuperado 59927.0 0.913299 1 Atención Fallecido 2914.0 0.044410 2 Atención Hospital 2138.0 0.032584 3 Atención Hospital UCI 438.0 0.006675 4 Atención Casa 6.0 0.000091 5 Atención Datos faltantes 193.0 0.002941 6 Atención Total categorías (incluye NA): 6 NaN NaN 0 Pertenencia etnica Otro 57670.0 0.878901 1 Pertenencia etnica Negro 5003.0 0.076247 2 Pertenencia etnica Indígena 1333.0 0.020315 3 Pertenencia etnica Rom 293.0 0.004465 4 Pertenencia etnica Raizal 72.0 0.001097 5 Pertenencia etnica Palenquero 15.0 0.000229 6 Pertenencia etnica Datos faltantes 1230.0 0.018745 7 Pertenencia etnica Total categorías (incluye NA): 7 NaN NaN
calidad_datos.DescripcionNumericas
Calcula estadísticas descriptivas de cada columna numérica. Ver documentación calidad_datos.CalidadDatos.DescripcionNumericas()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para generar la tabla descriptiva de variables numéricas >>> descripcion_numericas = datos.DescripcionNumericas() >>> print(descripcion_numericas)
Index count mean std min 25% 50% 75% max missing outliers_total outliers_altos outliers_bajos Edad 65616.0 39.175536 18.661339 0.0 26.0 36.0 52.0 104.0 0.0 0.002865 0.002865 0.0 Edad 2 65616.0 39.175536 18.661339 0.0 26.0 36.0 52.0 104.0 0.0 0.002865 0.002865 0.0 Edad meses 65616.0 476.099625 223.962309 1.0 318.0 443.0 626.0 1250.0 0.0 0.004054 0.004054 0.0
calidad_datos.EmparejamientoDuplicados
Retorna las columnas o filas que presenten valores duplicados del dataframe. Ver documentación calidad_datos.CalidadDatos.EmparejamientoDuplicados()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos)>>> # Se invoca la función para identificar las columnas duplicadas >>> duplicados_col = datos.EmparejamientoDuplicados(col=True) >>> print(duplicados_col)
Index Columnas iguales 1 Columnas iguales 2 0 Edad Fecha reporte web 1 Edad 2 Fecha de registro >>> # Se invoca la función para identificar las filas duplicadas >>> duplicados_fil = datos.EmparejamientoDuplicados(col=False) >>> print(duplicados_fil)
Index Filas iguales 1 Filas iguales 2 Filas iguales 3 Filas iguales 4 Filas iguales 5 Filas iguales 6 Filas iguales 7 Filas iguales 8 Filas iguales 9 0 1 224 267 21571 48235 48237 60173 60175 64994 1 2 225 268 21572 48236 48238 60174 60176 64995 2 269
calidad_datos.Memoria
Calcula el tamaño de la base de datos en memoria (megabytes). Ver documentación calidad_datos.CalidadDatos.Memoria()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para realizar el cálculo de uso en memoria en megabytes >>> peso_base = datos.Memoria(col=False, unidad='megabyte') >>> print(peso_base) 12.01
calidad_datos.Resumen
Retorna una tabla con información general de la base de datos. Ver documentación calidad_datos.CalidadDatos.Resumen()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para generar la tabla de información general de la base de datos >>> resumen = datos.Resumen(columnasRepetidas=True) >>> print(resumen)
Index Valor Número de filas 65616 Número de columnas 24 Columnas numéricas 3 Columnas de texto 15 Columnas booleanas 0 Columnas de fecha 6 Otro tipo de columnas 0 Número de filas repetidas 10 Número de columnas repetidas 2 Columnas con más de la mitad de datos faltantes 4 Columnas con más del 10% de datos como extremos 0 Uso en memoria de la base en megabytes (aproximado) 12
calidad_datos.TipoColumnas
Retorna el tipo de dato de cada columna del dataframe. Ver documentación calidad_datos.CalidadDatos.TipoColumnas()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para generar la tabla de descripción >>> tipos_columnas = datos.TipoColumnas() >>> print(tipos_columnas)
Index tipo_general tipo_general_python tipo_especifico_1 tipo_especifico_2 ID de caso Texto object “str”: 100.0% Fecha de notificación Fecha datetime64[ns] “pandas._libs.tslibs.timestamps.Timestamp”: 100.0% Código DIVIPOLA Texto object “str”: 100.0% Ciudad de ubicación Texto object “str”: 100.0% Departamento o Distrito Texto object “str”: 100.0% Atención Texto object “str”: 99.71% nan: 0.29% Edad Numérico int64 “int”: 100.0% Edad 2 Numérico int64 “int”: 100.0% Edad meses Numérico int64 “int”: 100.0% Sexo Texto object “str”: 100.0% Tipo Texto object “str”: 100.0% Estado Texto object “str”: 99.66% nan: 0.34% País de procedencia Texto Texto object nan: 98.58% “str”: 1.42% Fecha de inicio de síntomas Texto object “str”: 100.0% Fecha de muerte Fecha datetime64[ns] nan: 95.38% “pandas._libs.tslibs.timestamps.Timestamp”: 4.62% Fecha diagnostico Fecha datetime64[ns] “pandas._libs.tslibs.timestamps.Timestamp”: 98.41% nan: 1.59% Fecha recuperado Fecha datetime64[ns] “pandas._libs.tslibs.timestamps.Timestamp”: 91.33% nan: 8.67% Fecha reporte web Fecha datetime64[ns] “pandas._libs.tslibs.timestamps.Timestamp”: 100.0% Fecha de registro Fecha datetime64[ns] “pandas._libs.tslibs.timestamps.Timestamp”: 100.0% Tipo recuperación Texto object “str”: 91.33% nan: 8.67% Codigo departamento Texto object “str”: 100.0% Codigo pais Texto texto object nan: 98.65% “str”: 1.35% Pertenencia etnica Texto object “str”: 98.13% nan: 1.87% Nombre grupo etnico Texto object nan: 97.97% “str”: 2.03%
calidad_datos.ValoresExtremos
Calcula el porcentaje o cantidad de outliers de cada columna numérica (las columnas con números en formato string se intentarán transformar a columnas numéricas). Ver documentación calidad_datos.CalidadDatos.ValoresExtremos()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para realizar el cálculo de valores extremos >>> extremos_ambos_prop = datos.ValoresExtremos(extremos="ambos", numero=True) >>> print(extremos_ambos_prop)
Index Valor Edad 188 Edad 2 188 Edad meses 266
calidad_datos.ValoresFaltantes
Calcula el porcentaje/número de valores faltantes de cada columna del dataframe. Ver documentación calidad_datos.CalidadDatos.ValoresFaltantes()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para realizar el cálculo de proporción de valores faltantes >>> faltantes_prop = datos.ValoresFaltantes(numero=False) >>> print(faltantes_prop)
Index Valor ID de caso 0.000000 Fecha de notificación 0.000000 Código DIVIPOLA 0.000000 Ciudad de ubicación 0.000000 Departamento o Distrito 0.000000 Atención 0.002941 Edad 0.000000 Edad 2 0.000000 Edad meses 0.000000 Sexo 0.000000 Tipo 0.000000 Estado 0.003414 País de procedencia 0.985766 Fecha de inicio de síntomas 0.000000 Fecha de muerte 0.953837 Fecha diagnostico 0.015941 Fecha recuperado 0.086701 Fecha reporte web 0.000000 Fecha de registro 0.000000 Tipo recuperación 0.086701 Codigo departamento 0.000000 Codigo pais 0.986512 Pertenencia etnica 0.018745 Nombre grupo etnico 0.979685
calidad_datos.ValoresUnicos
Calcula la cantidad de valores únicos de cada columna del dataframe. Ver documentación calidad_datos.CalidadDatos.ValoresUnicos()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para realizar el cálculo de valores únicos >>> unicos = datos.ValoresUnicos(faltantes=True) >>> print(unicos)
Index Valor ID de caso 65606 Fecha de notificación 119 Código DIVIPOLA 578 Ciudad de ubicación 559 Departamento o Distrito 37 Atención 6 Edad 105 Edad 2 105 Edad meses 1082 Sexo 4 Tipo 3 Estado 6 País de procedencia 43 Fecha de inicio de síntomas 128 Fecha de muerte 127 Fecha diagnostico 114 Fecha recuperado 134 Fecha reporte web 104 Fecha de registro 104 Tipo recuperación 3 Codigo departamento 36 Codigo pais 40 Pertenencia etnica 7 Nombre grupo etnico 49
calidad_datos.VarianzaEnPercentil
Retorna las columnas numéricas cuyo percentil_inferior sea igual a su percentil_superior. Ver documentación calidad_datos.CalidadDatos.VarianzaEnPercentil()
>>> # Se importan las funciones de la librería >>> from leila.calidad_datos import CalidadDatos >>> # Creamos un objeto tipo CalidadDatos con el dataframe de datos de interés >>> datos = CalidadDatos(df_datos) >>> # Se invoca la función para realizar el cálculo de varianza >>> varianza_perc = datos.VarianzaEnPercentil() >>> print(varianza_perc) No hay ninguna columna numérica que tenga el percentil 5 y el percentil 95 igual
Ejemplos - Datos gov
datos_gov.tabla_inventario
Se conecta al API de Socrata y retorna la base de datos Asset Inventory descargada del Portal de Datos Abiertos como dataframe. Este conjunto de datos es un inventario de los recursos en el sitio. Ver documentación datos_gov.tabla_inventario()
>>> # Se importan las funciones de la librería >>> from leila import datos_gov >>> # Se invoca la función para descargar la base de datos Asset Inventory >>> inventario = datos_gov.tabla_inventario()
A continuación verificamos el tipo de objeto de la variable inventario y su tamaño, para asegurarnos de haber descargado los datos correctamente.
>>> # Verificamos el tipo de objeto de 'inventario' >>> type(inventario) pandas.core.frame.DataFrame>>> # Verificamos el tamaño 'inventario' >>> inventario.shape (19729, 25)
datos_gov.filtrar_tabla
Permite filtrar la base de datos de tabla de inventario de acuerdo a diferentes términos de búsqueda. Como son fechas, textos y otros. Ver documentación datos_gov.filtrar_tabla()
Para realizar el filtro de la base de datos de la tabla de inventario debemos tener en cuenta la información disponible, primero consultamos los campos de consulta que podemos usar.
>>> # Consultamos las columnas de la base 'inventario' >>> list(inventario) ['numero_api', 'nombre', 'descripcion', 'dueno', 'tipo', 'categoria', 'terminos_clave', 'url', 'fecha_creacion', 'fecha_actualizacion', 'actualizacion_frecuencia', 'filas', 'columnas', 'correo_contacto', 'licencia', 'entidad', 'entidad_url', 'entidad_sector', 'entidad_departamento', 'entidad_orden', 'entidad_dependencia', 'entidad_municipio', 'idioma', 'cobertura', 'base_publica']
Una vez conocemos los campos de búsqueda que tenemos disponibles, procedemos con el filtro a la base inventario, en este caso filtraremos las bases de datos que contengan los términos “SECOP” y “contratos” en el nombre de la base de datos y cuya fecha de actualización sea posterior al 14 de Junio del 2020.
>>> # Se importan las funciones de la librería >>> from leila import datos_gov >>> # Filtrar bases cuyo nombre incluyen el término 'SECOP' y 'contratos', y cuya fecha de actualización es posterior al 14 de junio de 2020 >>> columnas_valor = {"nombre":["SECOP", "contratos"], "fecha_actualizacion":["2020-06-15","+"]} >>> tabla_filtrada = datos_gov.filtrar_tabla(columnas_valor)
Procedemos a consultar los resultamos obtenidos
>>> # Consultamos el nombre, número api y fecha de actualización de las 5 primeras respuestas obtenidas >>> tabla_filtrada.head(5)[['nombre', 'numero_api', 'fecha_actualizacion']]
Index nombre numero_api fecha_actualizacion 4299 SECOP II - Contratos+16KSMMLV k9pc-rjkh 2020-07-30 7134 SECOP II - Suma Contratos Por Proveedor iwpe-6gqp 2020-07-30 11434 Vista SECOP Integrado Contratos FONTIC - Iniciativa Datos Abiertos bqww-w6pq 2020-07-30 12946 SECOP II - Contratos Electrónicos jbjy-vk9h 2020-07-30 14357 SECOP I - Contratos+16KSMMLV 79ga-5jck 2020-07-30
A continuación se presentan algunas variaciones que pueden utilizar al filtrar las bases de datos
>>> # Filtrar bases con fechas anteriores a 2020-07-15 >>> columnas_valor = {"fecha_creacion":["2020-07-15","-"]} >>> # Filtrar bases con fechas posteriores a 2020-07-15 >>> columnas_valor = {"fecha_creacion":["2018-07-15","+"]} >>> # Filtrar bases con fecha inicial el 15 de Enero de 2020 y fecha final de 15 de Febrero de 2020 >>> columnas_valor = {"fecha_creacion":["2020-01-15","2020-02-15"]} >>> # Filtrar bases cuya descripción incluya los términos 'economia' y 'ambiente' >>> columnas_valor = {"descripcion":["economia","ambiente"]} >>> # Filtrar bases que tengan entre 100 y 10000 filas y más de 10 columnas >>> columnas_valor = {"filas":[100,10000], "columnas":[10,"+"]}
datos_gov.cargar_base
Se conecta al API de Socrata y retorna la base de datos descargada del Portal de Datos Abiertos como dataframe. Ver documentación datos_gov.cargar_base()
Para la descarga de una base de datos del portal de datos abiertos, requerimos conocer con anterioridad su api_id, en este ejemplo bajaremos los primeros 1.000 registros de la base de datos denominada “SECOP II - Contratos Electrónicos”
>>> # Se importan las funciones de la librería >>> from leila import datos_gov >>> # Se invoca la función para descargar la base de datos usando el api_id de interés >>> base_datos_abiertos = datos_gov.cargar_base("jbjy-vk9h", limite_filas=1000)
Procedemos a consultar los resultados obtenidos
>>> # Consultados los datos de los 5 primeros registros obtenidos >>> base_datos_abiertos.head()
Index nombre_entidad nit_entidad departamento ciudad localizacion orden … 0 ESTABLECIMIENTO PENITENCIARIO DE MEDIANA SEGURIDAD Y CARCELARIO DE PENSILVANIA CALDAS 810001393 Caldas Pensilvania Colombia, Caldas , Pensilvania, Manzanares Nacional … 1 SUBRED INTEGRADA DE SERVICIOS DE SALUD SUR E.S.E 9009585649 Distrito Capital de Bogotá Bogotá Colombia, Bogotá, Bogotá Territorial … 2 ESCUELA NAVAL DE SUBOFICIALES ARC BARRANQUILLA 800141653 Atlántico Barranquilla Colombia, Atlántico , Barranquilla Nacional … 3 INSTITUTO GEOGRÁFICO AGUSTÍN CODAZZI 899999004 Distrito Capital de Bogotá No Definido Colombia, Bogotá Nacional … 4 E.S.E. HOSPITAL UNIVERSITARIO HERNANDO MONCALEANO PERDOMO DE NEIVA 891180268 Huila Neiva Colombia, Huila, Neiva Territorial …
Ejemplos - Reporte
reporte.generar_reporte
Crea un reporte de calidad de datos en formato HTML utilizando las funciones disponibles en los otros módulos de la librería. Ver documentación reporte.generar_reporte()
>>> # Se importan las funciones de la librería >>> from leila.reporte import generar_reporte >>> # Se invoca la función para generar el reporte de calidad de datos >>> generar_reporte(df=df_datos, >>> titulo='Perfilamiento datos COVID-19 - Colombia', >>> archivo='perfilamiento.html') -------------------------------------------------------------- Se ha generado el reporte "perfilamiento.html" 11:52:29 AM (01 min 4 seg) --------------------------------------------------------------