Code Monkey home page Code Monkey logo

leila's Introduction

LEILA - Librería de calidad de datos

screenshot

PyPI version fury.io PyPI pyversions PyPI license Downloads GitHub forks

Descripción

La librería de calidad de datos tiene como objetivo principal ser una herramienta que facilite la verificación de contenido de bases de datos y dé métricas de calidad para que usuarios puedan decidir si sus bases de datos necesitan modificarse para ser utilizadas en los proyectos. La librería fue escrita en el lenguaje de programación de Python y puede analizar bases de datos estructurados que se conviertan en objetos tipo pandas.DataFrame. Contiene tres módulos principales, el módulo Calidad Datos para analizar cualquier base de datos, el módulo Datos gov para conectarse con los metadatos del Portal de Datos Abiertos de Colombia y utilizar sus bases de datos, y por último el módulo Reporte el cual permite generar un reporte de calidad utilizando los módulos anteriores.

La librería surge como resultado de un proyecto relacionado con realizar análisis descriptivos de la calidad de la información cargada al portal de Datos Abiertos de Colombia, durante el desarrollo del proyecto se identifica el interés por parte de diferentes actores en el proyecto al igual que el beneficio potencial de tener a la mano una librería que facilite describir la calidad de una base de datos, lo cual motivó a realizar la implementación de la librería.

Ejemplo

La librería permite generar un reporte de calidad de datos el cual contiene información descriptiva del dataframe analizado, a continuación se presenta el código requerido para generar un reporte a partir de un archivo en Excel en formato .xlsx.

from leila.reporte import generar_reporte

generar_reporte(datos='datosDeInteres.xlsx')

screenshot

Documentación

La librería cuenta con una documentación que detalla las funciones que la conforman, al igual que ejemplos de uso y demás información de interés relacionada con esta, para acceder a la documentación siga el siguiente link:

Documentación - LEILA - Librería de calidad de datos.

Instalación

Para la instalación de la librería se recomienda utilizar el gestor de paquetes pip, por buenas prácticas se sugiere antes de la instalación crear un entorno virtual que permita aislar las librerías y evitar conflictos de versiones con el entorno de desarrollo base del computador.

pip install leila

De manera alterna también puede utilizar el gestor de paquetes conda.

conda install -c ucd-dnp -c conda-forge leila

Control de cambios

Para ver todos los cambios en las versiones de LEILA ver el archivo changelog

Contribuciones a LEILA

Todas las contribuciones, reportes de errores, corrección de errores, las mejoras de la documentación y las ideas son bienvenidas.

Puede encontrar una descripción detallada de cómo contribuir en la Wiki de LEILA

También lo invitamos a revisar el 📆 Tablero TODO de LEILA, donde hay una serie de temas listados en los que el equipo UCD se encuentra trabajando.

Licencia MIT license

MIT License

La librería LEILA - Calidad de datos se encuentra publicada bajo la licencia MIT
Copyleft (c) 2020 - 2021 Departamento Nacional de Planeación - DNP Colombia

Para mayor información puede consultar el archivo de Licencia

Contacto

Para comunicarse con la Unidad de Científicos de Datos (UCD) de la Dirección de Desarrollo Digital (DDD) del DNP, lo puede hacer mediante el correo electrónico [email protected]

leila's People

Contributors

davidinsuasty avatar drambaut avatar jairoruizsaenz avatar pablomonhel avatar ucd-dnp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

leila's Issues

Mejorar tiempos de ejecución en cálculo de duplicados de columnas

Reducir los tiempos de ejecución al calcular los duplicados de columnas, especialmente para conjuntos de datos muy grandes. Se estudiará agregar un parámetro para seleccionar algunas filas de las columnas al hacer la verificación de duplicados. Este número podrá ser cambiado por el usuario

Indicador de características mínimas de calidad

Identificar los parámetros necesarios para crear un indicador con las características mínimas requeridas por un conjunto de datos para que sea trabajable

Escribir funciones que creen los parámetros de insumo del indicador

Crear el indicador

Problemas al instalar en una plataforma con TensorFlow

Estimados, reciban un cordial saludo. El problema de las versiones en la instalación (pip install leila) funciona en un entorno local específico para utilizar y probar la librería, sin embargo en un entorno de desarrollo en la nube y ya para trabajar, por ejemplo con Tensor Flow V2, genera problemas y finalmente no se puede usar. Adjunto la respuesta del servidor (Ubuntu server 64 bits) al intentar instalar Leila:

Collecting leila
Downloading https://files.pythonhosted.org/packages/dc/78/34233a4c6117cc44bca8b774e3785be99144e4cd70fa4d741e6acf8fe437/leila-0.1-py3-none-any.whl
Requirement already satisfied: chardet==3.0.4 in /usr/local/lib/python3.6/dist-packages (from leila) (3.0.4)
Collecting pytz==2020.1
Downloading https://files.pythonhosted.org/packages/4f/a4/879454d49688e2fad93e59d7d4efda580b783c745fd2ec2a3adf87b0808d/pytz-2020.1-py2.py3-none-any.whl (510kB)
|████████████████████████████████| 512kB 5.6MB/s
Collecting idna==2.9
Downloading https://files.pythonhosted.org/packages/89/e3/afebe61c546d18fb1709a61bee788254b40e736cff7271c7de5de2dc4128/idna-2.9-py2.py3-none-any.whl (58kB)
|████████████████████████████████| 61kB 5.5MB/s
Requirement already satisfied: MarkupSafe==1.1.1 in /usr/local/lib/python3.6/dist-packages (from leila) (1.1.1)
Collecting six==1.14.0
Downloading https://files.pythonhosted.org/packages/65/eb/1f97cb97bfc2390a276969c6fae16075da282f5058082d4cb10c6c5c1dba/six-1.14.0-py2.py3-none-any.whl
Collecting pandas==1.0.3
Downloading https://files.pythonhosted.org/packages/bb/71/8f53bdbcbc67c912b888b40def255767e475402e9df64050019149b1a943/pandas-1.0.3-cp36-cp36m-manylinux1_x86_64.whl (10.0MB)
|████████████████████████████████| 10.0MB 7.6MB/s
Requirement already satisfied: python-dateutil==2.8.1 in /usr/local/lib/python3.6/dist-packages (from leila) (2.8.1)
Requirement already satisfied: requests==2.23.0 in /usr/local/lib/python3.6/dist-packages (from leila) (2.23.0)
Requirement already satisfied: sodapy==2.1.0 in /usr/local/lib/python3.6/dist-packages (from leila) (2.1.0)
Requirement already satisfied: numpy>=1.18.4 in /usr/local/lib/python3.6/dist-packages (from leila) (1.18.5)
Collecting xlrd==1.2.0
Downloading https://files.pythonhosted.org/packages/b0/16/63576a1a001752e34bf8ea62e367997530dc553b689356b9879339cf45a4/xlrd-1.2.0-py2.py3-none-any.whl (103kB)
|████████████████████████████████| 112kB 44.4MB/s
Collecting phik==0.10.0
Downloading https://files.pythonhosted.org/packages/01/5a/7ef1c04ce62cd72f900c06298dc2385840550d5c653a0dbc19109a5477e6/phik-0.10.0-py3-none-any.whl (599kB)
|████████████████████████████████| 604kB 40.1MB/s
Collecting certifi==2020.4.5.1
Downloading https://files.pythonhosted.org/packages/57/2b/26e37a4b034800c960a00c4e1b3d9ca5d7014e983e6e729e33ea2f36426c/certifi-2020.4.5.1-py2.py3-none-any.whl (157kB)
|████████████████████████████████| 163kB 49.1MB/s
Collecting scipy==1.5.1
Downloading https://files.pythonhosted.org/packages/ab/f9/6eeed6d5cd8dd435bbf105d10d778c2d76de1a5838fdbc315a59fb7fad64/scipy-1.5.1-cp36-cp36m-manylinux1_x86_64.whl (25.9MB)
|████████████████████████████████| 25.9MB 68.5MB/s
Requirement already satisfied: Jinja2==2.11.2 in /usr/local/lib/python3.6/dist-packages (from leila) (2.11.2)
Collecting urllib3==1.25.9
Downloading https://files.pythonhosted.org/packages/e1/e5/df302e8017440f111c11cc41a6b432838672f5a70aa29227bf58149dc72f/urllib3-1.25.9-py2.py3-none-any.whl (126kB)
|████████████████████████████████| 133kB 49.8MB/s
Requirement already satisfied: joblib>=0.14.1 in /usr/local/lib/python3.6/dist-packages (from phik==0.10.0->leila) (0.16.0)
Requirement already satisfied: matplotlib>=2.2.3 in /usr/local/lib/python3.6/dist-packages (from phik==0.10.0->leila) (3.2.2)
Requirement already satisfied: numba>=0.38.1 in /usr/local/lib/python3.6/dist-packages (from phik==0.10.0->leila) (0.48.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.2.3->phik==0.10.0->leila) (1.2.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.2.3->phik==0.10.0->leila) (2.4.7)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.2.3->phik==0.10.0->leila) (0.10.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from numba>=0.38.1->phik==0.10.0->leila) (50.3.0)
Requirement already satisfied: llvmlite<0.32.0,>=0.31.0dev0 in /usr/local/lib/python3.6/dist-packages (from numba>=0.38.1->phik==0.10.0->leila) (0.31.0)
ERROR: tensorflow 2.3.0 has requirement scipy==1.4.1, but you'll have scipy 1.5.1 which is incompatible.
ERROR: nbclient 0.5.0 has requirement jupyter-client>=6.1.5, but you'll have jupyter-client 5.3.5 which is incompatible.
ERROR: kaggle 1.5.8 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25.9 which is incompatible.
ERROR: PipeServer-colab 1.0.0 has requirement six~=1.15.0, but you'll have six 1.14.0 which is incompatible.
ERROR: fbprophet 0.7.1 has requirement pandas>=1.0.4, but you'll have pandas 1.0.3 which is incompatible.
ERROR: datascience 0.10.6 has requirement folium==0.2.1, but you'll have folium 0.8.3 which is incompatible.
ERROR: albumentations 0.1.12 has requirement imgaug<0.2.7,>=0.2.5, but you'll have imgaug 0.2.9 which is incompatible.
Installing collected packages: pytz, idna, six, pandas, xlrd, scipy, phik, certifi, urllib3, leila
Found existing installation: pytz 2018.9
Uninstalling pytz-2018.9:
Successfully uninstalled pytz-2018.9
Found existing installation: idna 2.10
Uninstalling idna-2.10:
Successfully uninstalled idna-2.10
Found existing installation: six 1.15.0
Uninstalling six-1.15.0:
Successfully uninstalled six-1.15.0
Found existing installation: pandas 1.0.5
Uninstalling pandas-1.0.5:
Successfully uninstalled pandas-1.0.5
Found existing installation: xlrd 1.1.0
Uninstalling xlrd-1.1.0:
Successfully uninstalled xlrd-1.1.0
Found existing installation: scipy 1.4.1
Uninstalling scipy-1.4.1:
Successfully uninstalled scipy-1.4.1
Found existing installation: certifi 2020.6.20
Uninstalling certifi-2020.6.20:
Successfully uninstalled certifi-2020.6.20
Found existing installation: urllib3 1.24.3
Uninstalling urllib3-1.24.3:
Successfully uninstalled urllib3-1.24.3
Successfully installed certifi-2020.4.5.1 idna-2.9 leila-0.1 pandas-1.0.3 phik-0.10.0 pytz-2020.1 scipy-1.5.1 six-1.14.0 urllib3-1.25.9 xlrd-1.2.0
WARNING: The following packages were previously imported in this runtime:
[pandas,pytz,six]
You must restart the runtime in order to use newly installed versions.

Flexibilizar requerimientos

Actualmente los requerimientos o dependencias de la librería son del tipo "==" (versión exacta), por lo que se pueden presentar conflictos innecesarios con otras versiones de las dependencias cuando se instala LEILA.

Por favor prueben con flexibilizar esto, cambiando el "==" por ">=" (versión mayor o igual a ). Esto permitirá reducir conflictos a medida que otras librerías van sacando nuevas versiones.

Por supuesto, hay que probar que con este cambio (y utilizando como resultado versiones más recientes de algunas librerías) el desempeño de LEILA no se vea afectado.

Gracias!

Reporte - personalización

Adecuar la función "generar_reporte" para que se puedan ingresar los parámetros de las métricas que se desean calcular y mostrar únicamente los resultados escogidos en el reporte

Reporte - gráficas para cada variable

Incluir gráficas en el reporte automático en la sección de cada variable

Se hará después de incluir la sección de análisis de cada variable sin gráficas

Optimización de cálculo de tipos

Reescribir código en las funciones "VarianzaEnPercentil", "DescripcionCategoricas" para que no se calculen los tipos generales con "dtypes" y se utilice la lista de tipos calculada en init

Duplicados de columnas - tamaño límite

Definir el tamaño límite de un conjunto de datos sobre el cual no utilizar la función "EmparejamientoDuplicados" para columnas y poner en documentación para que sea visto por usuarios. EL cálculo de duplicados por columnas es el más lento de toda la librería y no se recomienda para conjuntos de datos muy grandes por su demora en la ejecución.

Esto se revisará después de optimizar la función "EmparejamientoDuplicados"

Reporte - análisis por variable

Incluir una sección para cada variable en el reporte automático con su propio análisis descriptivo y de calidad

No incluye gráficas

Instalar leila a través de Conda

Buen día

Sería posible que adicionaran la opción de instalar la librería utilizando conda?

por ejemplo con el comando

conda install -c conda-forge leila

Comentar scripts

Comentar scripts de forma completa para que queden claros los pasos

Optimización - cálculos de tipos específicos

Adaptar el código en las funciones "CantidadDuplicados", "EmparejamientoDuplicados", "DescripcionCategoricas" para que el tipo específico de cada columna no se calcule al correr esa función, sino se utilice la lista de tipos creada en init

Problema con generar reportes para datasets grandes

Hola, gracias por la librería.
Cuando intento hacer un reporte de calidad de un dataset grande, se presentan muchos problemas. Solucioné lo del token, pero lograr evaluar la calidad de los datos (lo hice como prueba para ver los limites y si salía la evaluación de las filas) es, como esperaba, un proceso que toma mucho tiempo y consume muchos recursos (un poco más de 32 Gigas de RAM en su pico más alto, utilizó cerca de 9 núcleos de procesador y una GPU Radeon AMD RX 5700 XT al 20%. Envío el código utilizado.

api_id = 'rpmr-utcd'
token = 'xxxxxxxx'
RowLimit=1000000000

client = Socrata("www.datos.gov.co", app_token=token)
MetaData = client.get_metadata(api_id)

Data = client.get(api_id, limit=RowLimit)
DS = pd.DataFrame.from_records(Data)
Vars = list(DS.columns)
Types = DS.dtypes
generar_reporte(df = DS, titulo='Perfilamiento datos SECOP I - Colombia', archivo='perfilamiento.html')

La base de datos no tiene columnas numéricas

Traceback (most recent call last):

File "", line 12, in
generar_reporte(df = DS, titulo='Perfilamiento datos SECOP I - Colombia', archivo='perfilamiento.html')

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\leila\reporte.py", line 172, in generar_reporte
dataframe_duplic_colum = base.EmparejamientoDuplicados(col=True)

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\leila\calidad_datos.py", line 366, in EmparejamientoDuplicados
dupli = base.T.duplicated(keep=False)

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\pandas\core\frame.py", line 2711, in transpose
result = self._constructor(

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\pandas\core\frame.py", line 464, in init
mgr = init_ndarray(data, index, columns, dtype=dtype, copy=copy)

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\pandas\core\internals\construction.py", line 210, in init_ndarray
return create_block_manager_from_blocks(block_values, [columns, index])

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\pandas\core\internals\managers.py", line 1658, in create_block_manager_from_blocks
mgr._consolidate_inplace()

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\pandas\core\internals\managers.py", line 945, in _consolidate_inplace
self.blocks = tuple(_consolidate(self.blocks))

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\pandas\core\internals\managers.py", line 1886, in _consolidate
merged_blocks = _merge_blocks(

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\pandas\core\internals\blocks.py", line 3099, in _merge_blocks
new_values = np.vstack([b.values for b in blocks])

File "<array_function internals>", line 5, in vstack

File "C:\ProgramData\Anaconda3\envs\Leila\lib\site-packages\numpy\core\shape_base.py", line 283, in vstack
return _nx.concatenate(arrs, 0)

File "<array_function internals>", line 5, in concatenate

MemoryError: Unable to allocate 974. MiB for an array with shape (9816364, 13) and data type object

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.