Skip to content

BORJAMOME/accidentes_madrid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

SQL

Análisis de Accidentes en Madrid (2023) 🚗💥

Los datos utilizados en este análisis provienen de la base de datos de la Ciudad de Madrid sobre los accidentes ocurridos en el año 2023. Estos datos contienen información detallada sobre cada accidente, incluyendo la fecha, hora, ubicación, condiciones meteorológicas, tipos de vehículos involucrados, tipos de personas afectadas, lesiones sufridas y resultados de pruebas de alcohol y drogas.

Estructura de los Datos

- fecha: Fecha del accidente (formato: DD/MM/AAAA)

- hora: Hora del accidente (formato: HH:MM:SS)

- cod_distrito: Código del distrito donde ocurrió el accidente

- distrito: Nombre del distrito donde ocurrió el accidente

- tipo_accidente: Tipo de accidente ocurrido

- estado_meteorologico: Estado del tiempo en el momento del accidente

- tipo_vehiculo: Tipo de vehículo involucrado en el accidente

- tipo_persona: Tipo de persona afectada por el accidente (conductor, pasajero, peatón)

- rango_edad: Rango de edad de la persona afectada

- sexo: Género de la persona afectada

- lesividad: Gravedad de las lesiones sufridas por la persona afectada

- positiva_alcohol: Resultado positivo en prueba de alcoholemia (Si/No)

- positiva_droga: Resultado positivo en prueba de drogas (Si/No)

Consultas SQL Realizadas

1. Número total de accidentes por distrito:

Esta consulta cuenta el número total de accidentes registrados en cada distrito de Madrid.

SELECT distrito, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY distrito
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 15 42 12

2. Porcentaje de accidentes por distrito:

Esta consulta calcula el porcentaje de accidentes que ocurrieron en cada distrito en relación con el total de accidentes registrados.

SELECT 
	distrito,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / (SELECT COUNT(*) FROM accidentes_madrid) AS porcentaje_total
FROM accidentes_madrid
GROUP BY distrito
ORDER BY total_accidentes DESC;
Screenshot 2024-05-24 at 15 43 17

3. Número total de accidentes por tipo de accidente:

Esta consulta cuenta el número total de accidentes agrupados por el tipo de accidente ocurrido.

SELECT tipo_accidente, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY tipo_accidente
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 15 44 40

4. Porcentaje de accidentes según el tipo de accidente:

Esta consulta calcula el porcentaje de accidentes que corresponde a cada tipo de accidente en relación con el total de accidentes registrados.

SELECT 
    tipo_accidente,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / (SELECT COUNT(*) FROM accidentes_madrid) AS porcentaje_total
FROM 
    accidentes_madrid
GROUP BY 
    tipo_accidente
ORDER BY 
    tipo_accidente;
Screenshot 2024-05-24 at 15 46 09

5. Número total de accidentes por el estado del tiempo:

Esta consulta cuenta el número total de accidentes registrados para cada estado meteorológico.

SELECT estado_meteorologico, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY estado_meteorologico
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 15 46 25

6. Porcentaje de accidentes según el estado del tiempo:

Esta consulta calcula el porcentaje de accidentes que ocurrieron bajo cada estado meteorológico en relación con el total de accidentes registrados.

SELECT 
    estado_meteorologico,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / (SELECT COUNT(*) FROM accidentes_madrid) AS porcentaje_total
FROM 
    accidentes_madrid
GROUP BY 
    estado_meteorologico
ORDER BY 
    estado_meteorologico;
Screenshot 2024-05-24 at 15 47 22

7. Número de accidentes con personas fallecidas en las 24 horas por distrito:

Esta consulta cuenta el número de accidentes en los que hubo personas fallecidas en las 24 horas posteriores al accidente, agrupados por distrito.

SELECT distrito, COUNT(*) AS numero_fallecidos
FROM accidentes_madrid
WHERE lesividad = 'Fallecido 24 horas'
GROUP BY distrito
ORDER BY numero_fallecidos DESC;
Screenshot 2024-05-24 at 15 48 22

8. Número total de accidentes por tipo de vehículo:

Esta consulta cuenta el número total de accidentes agrupados por el tipo de vehículo involucrado.

SELECT tipo_vehiculo, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY tipo_vehiculo
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 15 49 33

9. Porcentaje de accidentes según el tipo de vehículo:

Esta consulta calcula el porcentaje de accidentes que involucran a cada tipo de vehículo en relación con el total de accidentes registrados.

SELECT tipo_vehiculo,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / (SELECT COUNT(*) FROM accidentes_madrid) AS porcentaje_total
FROM accidentes_madrid
GROUP BY  tipo_vehiculo
ORDER BY tipo_vehiculo;
Screenshot 2024-05-24 at 15 50 56

10. Porcentaje de accidentes con positivo en alcohol o droga con respecto al total de accidentes según distrito:

Esta consulta calcula el porcentaje de accidentes en los que se registró un resultado positivo en alcohol o drogas en relación con el total de accidentes, agrupados por distrito.

SELECT 
    distrito,
    COUNT(*) AS total_accidentes,
    SUM(CASE WHEN positiva_alcohol = 'SI' THEN 1 ELSE 0 END) AS accidentes_positiva_alcohol,
    SUM(CASE WHEN positiva_droga = 'SI' THEN 1 ELSE 0 END) AS accidentes_positiva_droga,
    (SUM(CASE WHEN positiva_alcohol = 'SI' THEN 1 ELSE 0 END) * 100.0) / COUNT(*) AS porcentaje_alcohol,
    (SUM(CASE WHEN positiva_droga = 'SI' THEN 1 ELSE 0 END) * 100.0) / COUNT(*) AS porcentaje_droga
FROM accidentes_madrid
GROUP BY distrito
ORDER BY total_accidentes DESC;
Screenshot 2024-05-24 at 16 38 05

11. Número de accidentes por rango de edad:

Esta consulta cuenta el número de accidentes por cada rango de edad de las personas involucradas.

SELECT rango_edad, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY rango_edad
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 16 41 09

12. Porcentaje de accidentes según rango de edad:

Esta consulta calcula el porcentaje de accidentes para cada rango de edad de las personas involucradas.

SELECT rango_edad,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / (SELECT COUNT(*) FROM accidentes_madrid) AS porcentaje_total
FROM accidentes_madrid
GROUP BY rango_edad
ORDER BY porcentaje_total DESC;
Screenshot 2024-05-24 at 16 44 33

13. Número de accidentes por sexo de la persona implicada:

Esta consulta cuenta el número de accidentes según el sexo de las personas involucradas.

SELECT sexo, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY sexo
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 16 46 13

14. Porcentaje de accidentes por distrito y sexo

Esta consulta calcula el porcentaje de accidentes que ocurrieron en cada distrito según el sexo de las personas involucradas.

SELECT 
    distrito,
    sexo,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (PARTITION BY distrito) AS porcentaje_por_distrito
FROM accidentes_madrid
GROUP BY distrito, sexo
ORDER BY distrito, sexo;
Screenshot 2024-05-24 at 16 48 06

15. Número de accidentes por hora del día

Esta consulta cuenta el número de accidentes que ocurrieron en cada hora del día.

SELECT
    CASE
        WHEN HOUR(hora) = 0 THEN '00:00:00 - 00:59:59'
        WHEN HOUR(hora) = 1 THEN '01:00:00 - 01:59:59'
        WHEN HOUR(hora) = 2 THEN '02:00:00 - 02:59:59'
        WHEN HOUR(hora) = 3 THEN '03:00:00 - 03:59:59'
        WHEN HOUR(hora) = 4 THEN '04:00:00 - 04:59:59'
        WHEN HOUR(hora) = 5 THEN '05:00:00 - 05:59:59'
        WHEN HOUR(hora) = 6 THEN '06:00:00 - 06:59:59'
        WHEN HOUR(hora) = 7 THEN '07:00:00 - 07:59:59'
        WHEN HOUR(hora) = 8 THEN '08:00:00 - 08:59:59'
        WHEN HOUR(hora) = 9 THEN '09:00:00 - 09:59:59'
        WHEN HOUR(hora) = 10 THEN '10:00:00 - 10:59:59'
        WHEN HOUR(hora) = 11 THEN '11:00:00 - 11:59:59'
        WHEN HOUR(hora) = 12 THEN '12:00:00 - 12:59:59'
        WHEN HOUR(hora) = 13 THEN '13:00:00 - 13:59:59'
        WHEN HOUR(hora) = 14 THEN '14:00:00 - 14:59:59'
        WHEN HOUR(hora) = 15 THEN '15:00:00 - 15:59:59'
        WHEN HOUR(hora) = 16 THEN '16:00:00 - 16:59:59'
        WHEN HOUR(hora) = 17 THEN '17:00:00 - 17:59:59'
        WHEN HOUR(hora) = 18 THEN '18:00:00 - 18:59:59'
        WHEN HOUR(hora) = 19 THEN '19:00:00 - 19:59:59'
        WHEN HOUR(hora) = 20 THEN '20:00:00 - 20:59:59'
        WHEN HOUR(hora) = 21 THEN '21:00:00 - 21:59:59'
        WHEN HOUR(hora) = 22 THEN '22:00:00 - 22:59:59'
        WHEN HOUR(hora) = 23 THEN '23:00:00 - 23:59:59'
    END AS hora_del_dia,
    COUNT(*) AS total_accidentes
FROM accidentes_madrid
GROUP BY hora_del_dia
ORDER BY total_accidentes DESC;
Screenshot 2024-05-24 at 16 48 52

16. Probabilidad de accidentes según el periodo del día

Esta consulta calcula la probabilidad de accidentes que ocurren en diferentes periodos del día.

SELECT
    CASE
        WHEN HOUR(hora) BETWEEN 6 AND 11 THEN 'Mañana'
        WHEN HOUR(hora) BETWEEN 12 AND 13 THEN 'Mediodía'
        WHEN HOUR(hora) BETWEEN 14 AND 19 THEN 'Tarde'
        WHEN HOUR(hora) BETWEEN 20 AND 23 THEN 'Noche'
        ELSE 'Madrugada'
    END AS periodo_del_dia,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / (SELECT COUNT(*) FROM accidentes_madrid) AS probabilidad
FROM accidentes_madrid
GROUP BY periodo_del_dia
ORDER BY FIELD(periodo_del_dia, 'Mañana', 'Mediodía', 'Tarde', 'Noche', 'Madrugada');
Screenshot 2024-05-24 at 16 51 12

17. Número de accidentes por fecha

Esta consulta cuenta el número de accidentes que ocurrieron en cada fecha.

SELECT fecha, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY fecha
ORDER BY fecha ASC;
Screenshot 2024-05-24 at 16 52 35

18. Probabilidad de accidentes según la estación del año

Esta consulta calcula la probabilidad de accidentes según la estación del año en que ocurrieron.

SELECT estacion,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / (SELECT COUNT(*) FROM accidentes_madrid) AS probabilidad
FROM
    (
    SELECT
        fecha,
        CASE
            WHEN STR_TO_DATE(fecha, '%d/%m/%Y') BETWEEN STR_TO_DATE('01/03/2023', '%d/%m/%Y') AND STR_TO_DATE('31/05/2023', '%d/%m/%Y') THEN 'Primavera'
            WHEN STR_TO_DATE(fecha, '%d/%m/%Y') BETWEEN STR_TO_DATE('01/06/2023', '%d/%m/%Y') AND STR_TO_DATE('31/08/2023', '%d/%m/%Y') THEN 'Verano'
            WHEN STR_TO_DATE(fecha, '%d/%m/%Y') BETWEEN STR_TO_DATE('01/09/2023', '%d/%m/%Y') AND STR_TO_DATE('30/11/2023', '%d/%m/%Y') THEN 'Otoño'
            ELSE 'Invierno'
        END AS estacion
    FROM
        accidentes_madrid
    ) AS estaciones
GROUP BY
    estacion;
Screenshot 2024-05-24 at 16 53 18

19. Número de accidentes según el tipo de persona (conductor, pasajero, peatón)

Esta consulta cuenta el número de accidentes según el rol de la persona involucrada.

SELECT tipo_persona, COUNT(*) AS numero_tipo_de_persona
FROM accidentes_madrid
GROUP BY tipo_persona
ORDER BY tipo_persona ASC;
Screenshot 2024-05-24 at 16 53 56

20. Porcentaje de accidentes según el tipo de persona (conductor, pasajero, peatón)

Esta consulta calcula el porcentaje de accidentes según el rol de la persona involucrada.

SELECT tipo_persona,
    COUNT(*) AS total_accidentes,
    COUNT(*) * 100.0 / (SELECT COUNT(*) FROM accidentes_madrid) AS porcentaje_total
FROM accidentes_madrid
GROUP BY tipo_persona
ORDER BY tipo_persona;
Screenshot 2024-05-24 at 16 55 17

21. Top 5 distritos con mayor número de accidentes en condiciones meteorológicas adversas

Esta consulta encuentra los cinco distritos con el mayor número de accidentes en condiciones meteorológicas adversas.

SELECT distrito, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
WHERE estado_meteorologico != 'Despejado'
GROUP BY distrito
ORDER BY numero_accidentes DESC
LIMIT 5;
Screenshot 2024-05-24 at 16 55 44

22. Total del tipo de asistencia después del accidente según lesividad

Esta consulta cuenta el número total de tipos de asistencia proporcionada después de un accidente según el nivel de lesiones sufridas.

SELECT lesividad, COUNT(*) AS numero_tipo_de_persona
FROM accidentes_madrid
GROUP BY lesividad
ORDER BY lesividad ASC;
Screenshot 2024-05-24 at 16 56 52

23. Accidentes por tipo de vehículo y lesividad

Esta consulta cuenta el número de accidentes según el tipo de vehículo y el nivel de lesiones sufridas.

SELECT tipo_vehiculo, lesividad, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY tipo_vehiculo, lesividad
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 16 57 51

24. Número de accidentes con resultado positivo en alcohol por rango de edad

Esta consulta cuenta el número de accidentes en los que la prueba de alcoholemia fue positiva, agrupados por rango de edad.

SELECT rango_edad, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
WHERE positiva_alcohol = 'SI'
GROUP BY rango_edad
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 16 58 20

25. Número de accidentes por combinación de sexo y resultado positivo en alcohol

Esta consulta cuenta el número de accidentes en los que se registró un resultado positivo en la prueba de alcoholemia, agrupados por sexo de la persona afectada.

SELECT sexo, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
WHERE positiva_alcohol = 'Si'
GROUP BY sexo
ORDER BY numero_accidentes DESC;
Screenshot 2024-05-24 at 16 58 50

About

Análisis de Accidentes en Madrid en SQL (2023)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published