ucd-dnp / leila

Librería para la evaluación de calidad de datos, e interacción con el portal de datos.gov.co
https://ucd-dnp.github.io/leila/
Other
59 stars 22 forks source link

Problema con generar reportes para datasets grandes #1

Open pipetrunks opened 3 years ago

pipetrunks commented 3 years ago

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

pablomonhel commented 3 years ago

Buenas tardes,

Muchas gracias por reportar el issue con el conjunto de datos del Portal de Datos Abiertos con código API 'rpmr-utcd'. En efecto, es un conjunto bastante grande y el cálculo de métricas de calidad es demorado y consume mucha memoria. Estamos en la evaluación del código para la optimización de los tiempos y eliminar el problema de la memoria.

Avisaremos cuando se tengan avances

Cordial saludo

Equipo UCD