mstadeo / segvial

dashboard de seguridad vial
GNU Affero General Public License v3.0
0 stars 0 forks source link

Página sobre calidad de datos #14

Open mstadeo opened 6 months ago

mstadeo commented 6 months ago

@abrilr1604 cuando @mstadeo termine el #9 que va a permitir incorporar páginas múltiples a streamlit, vamos a crear una página que tenga todos los gráficos de análisis de calidad.

msoltadeo commented 5 months ago

@abrilr1604 , creo que esto puede servirte.

abrilr1604 commented 5 months ago

@msoltadeo hola sol! ya hice la página. Se llama 'Calidad de datos' y ya figura en el menú. También agregué unos emojis porque vi que se puede, pero cualquier cosa se sacan.

image image image

Acá solo quedarían los gráficos de diferencias y el cuadro de nulos, no? Me parece que también íbamos a agregar algo más sobre los años, pero no recuerdo qué.

msoltadeo commented 4 months ago

@abrilr1604 te quedó re lindo :heart_eyes: La idea era volcar un poco del material que generaste en la notebook de análisis exploratorio de datos. Te parece? Y cuando puedas hace la PR, aunque sea con esto así vamos viendo como queda.

abrilr1604 commented 4 months ago

@msoltadeo genial! ya hice la PR, te puse para que la chequees. Esta semana estuve a full con tps de la carrera así que no pude agregar más nada al streamlit, en estos días ya lo hago :)

abrilr1604 commented 4 months ago

@msoltadeo buen dia sol! te cuento cómo va quedando la página de calidad de datos para ver qué te parece. Quise separar en secciones, primero una visión general del dataset, como cantidad de observaciones (siniestros), cantidad de columnas, una vista previa de las primeras filas y el cuadro de valores nulos.

image

Después, quise mostrar información más específica por columna, entonces puse un selectbox para seleccionar la columna y esto mostraría: una descripción sobre la columna, estadísticas básicas, un cuadro de valores nulos y sus porcentajes por año y alguna visualización gráfica sobre la columna por año. Por ejemplo así queda si se selecciona la columna 'heridos_graves'.

image

Algunas columnas las tuve que "personalizar", por ejemplo para la variable 'anio_acci' (y otras más) que representa el año en que ocurrió el siniestro no tiene sentido algunas estadísticas como la desviación estandar o los cuartiles entonces los omití, lo mismo con el slider por año que no tiene sentido. También para la variable 'posicion_XY', agregué un mapa con las coordenadas que ya estaban disponibles en el dataframe inicial.

image

Para los años 2012 y 2013, donde el 100% de los siniestros poseen valores nulos, aparecería la advertencia de que no se encontró información para el año seleccionado.

image

Por último, vendría el histograma y el scatterplot sobre las diferencias entre las columnas 'Total' y la suma de los involucrados, que ya estaba hecho desde antes, y me faltaría agregar los porcentajes de siniestros que no se pudieron geocodificar con la notebook de geocodificaciones. ¿Faltaría algo más agregar a la página de calidad de datos o con lo que mostré es suficiente?

PD: hay algunas columnas que tengo dudas sobre su descripción. El siguiente es el diccionario que utilicé, hay columnas como 'sin_datos', 'desc_ruta_ori' y otras que no entiendo qué representan o no sé como redactar su descripción.

descripciones= {'anio_acci': 'Año en que ocurrió el siniestro.',
                'nro_acci': 'Contador de siniestros.',
                'fecha': 'Fecha exacta en que ocurrió el siniestro.',
                'desc_dia': 'Día de la semana en que ocurrió el siniestro.',
                'fecha_aprox': 'Fecha aproximada en que ocurrió el siniestro.',
                'hora_aprox': 'Hora aproximada en que ocurrió el siniestro.',
                'desc_ruta': 'Ruta en que ocurrió el siniestro.',
                'km': 'Número de kilómetro en que ocurrió el siniestro.',
                'cant_participantes': 'Cantidad de participantes en el siniestro.',
                'desc_participante': 'Modo/s involucrado/s en el siniestro.',
                'calle_avenida_km': 'Lugar en que ocurrió el siniestro.',
                'total': 'Total de personas participantes en el siniestro.',
                'heridos_leves': 'Cantidad de heridos leves participantes en el siniestro.',
                'heridos_graves': 'Cantidad de heridos graves participantes en el siniestro.',
                'heridos_gravisimos': 'Cantidad de heridos gravísimos participantes en el siniestro.',
                'ilesos': 'Cantidad de ilesos participantes en el siniestro.', 
                'fallecidos': 'Cantidad de fallecidos en el siniestro.',
                'sin_datos':  'Cantidad de ??',
                'posicion_XY': 'Coordenadas donde ocurrió el siniestro.',
                'desc_tipo_via': 'Tipo de vía donde ocurrió el siniestro.',
                'desc_ruta_ori': '??',
                'desc_loc': 'Municipio en que ocurrió el siniestro.',
                'desc_dpto': 'Departamento en que ocurrió el siniestro.',
                'desc_tipo_calzada': 'Tipo de calzada en que ocurrió el siniestro.',
                'desc_tipo_banquina': 'Tipo de banquina en que ocurrió el siniestro.',
                'desc_unidad_regional': 'Unidad regional en que ocurrió el siniestro.',
                'desc_lugar_calzada': 'Lugar de la calzada en que ocurrió el siniestro.',
                'desc_zona': 'Tipo de zona en que ocurrió el siniestro.', 
                'desc_prioridad': '??',
                'desc_estado_semaforo': 'Estado del semáforo al momento del siniestro.',
                'desc_lugar_via': '??? Lugar de la vía en que ocurrió el siniestro.', 
                'desc_estado_via': 'Estado de la vía al momento del siniestro.', 
                'desc_estado_visibilidad': 'Estado de visibilidad de la vía al momento del siniestro.', 
                'desc_luminosidad': 'Estado de luminosidad al momento del siniestro.', 
                'desc_estado_clima': 'Estado del clima al momento del siniestro.',
                'desc_tipo_colision': 'Tipo de colisión involucrado en el siniestro.', 
                'desc_tipo_atropello': 'Tipo de atropello involucrado en el siniestro.',
                'desc_tipo_hecho': 'Tipo de siniestro.',
                'desc_pres_calzada': '??', 
                'desc_senializacion': 'Estado de la señalización al momento del siniestro.', 
                'desc_separacion_via': '??', 
                'desc_restriccion': '??'}
msoltadeo commented 4 months ago

@abrilr1604, me gusta mucho como te quedo :heart_eyes: @ccandeci podrías decirnos que significan las columnas para las que @abrilr1604 indicó que no sabe la descripción? (son las que dicen '??')

abrilr1604 commented 4 months ago

@msoltadeo recordé que en el repo privado uno de los primeros issues fue acerca de los siniestros duplicados, así que lo agregué a la página de calidad de datos, con la opción de seleccionar las columnas que se deseen. Como se ve, agregué las columnas _fecha, hora_aprox, desc_participante, cant_participantes, calle_avenida_km y desc_tipocolision y devuelve 684 filas duplicadas.

image

msoltadeo commented 4 months ago

@abrilr1604, muy bueno!!!! @ccandeci @aleglk para que lo vean

ccandeci commented 4 months ago

@abrilr1604 Perdón la demora! Ahi te paso la descripción de las columnas que faltan: Sin datos: Persona involucrada que no se pudo catalogar en las anteriores Descripción ruta ori: descripción ruta de origen. Descripción de prioridad: si existiera (ceda el paso, semáforo, etc). Descripción pres calzada: Estado de la calzada. Separación de la vía: si es física, si solo es demarcación horizontal, si no hay, etc. Descripción de la restricción: es por si tiene separadores físicos o no, imposibilidad de movimientos, etc

Si hay algo que no se entiende o alguna falto avisame, pero estimo que esta todo.

ccandeci commented 4 months ago

@msoltadeo recordé que en el repo privado uno de los primeros issues fue acerca de los siniestros duplicados, así que lo agregué a la página de calidad de datos, con la opción de seleccionar las columnas que se deseen. Como se ve, agregué las columnas _fecha, hora_aprox, desc_participante, cant_participantes, calle_avenida_km y desc_tipocolision y devuelve 684 filas duplicadas.

image

Esto me parece que esta bueno. Tengo una duda, yo tengo que mencionarle al script (creo es) que tiene que contrastar para saber si es un duplicado?? o solo lo hace el código?

abrilr1604 commented 4 months ago

@ccandeci gracias por las descripciones! En un rato vuelvo a actualizar el script antes de que sol apruebe la PR.

La pregunta sobre los duplicados no entendí bien a que se refiere.

En esa sección del streamlit sobre duplicados, uno puede apretar la cajita de opciones y le van a aparecer todas las columnas del conjunto de datos. Se pueden seleccionar todas las columnas que uno quiera. Entonces, el script (el archivo con el código) filtra todas las filas (siniestros) que tengan exactamente los mismos valores en todas las columnas seleccionadas. O sea, el script se encarga automáticamente de eso y te muestra los resultados en tiempo real

abrilr1604 commented 4 months ago

@msoltadeo @mstadeo sol, ya tengo el script de calidad de datos actualizado con las descripciones que faltaban, tengo que esperar que apruebes la PR que hice ayer para poder hacer otra con el script actualizado? O puedo actualizar el archivo igual antes de hacer la PR?

msoltadeo commented 4 months ago

@abrilr1604, actualiza el archivo y pushealo al branch con el que hiciste la PR. Entonces, la PR va a tener todos los cambios

abrilr1604 commented 4 months ago

@msoltadeo listo! ya está actualizado. cuando puedas, fijate si se puede hacer la PR sin problemas, porque sigue apareciendo que dos archivos están en conflicto