https://github.com/borjamome/accidentes_madrid
Análisis de Accidentes en Madrid en SQL (2023)
https://github.com/borjamome/accidentes_madrid
accidentes-coche data-analysis madrid sql
Last synced: 5 months ago
JSON representation
Análisis de Accidentes en Madrid en SQL (2023)
- Host: GitHub
- URL: https://github.com/borjamome/accidentes_madrid
- Owner: BORJAMOME
- Created: 2024-05-24T14:35:10.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-12-04T10:29:18.000Z (over 1 year ago)
- Last Synced: 2025-01-31T17:48:07.399Z (over 1 year ago)
- Topics: accidentes-coche, data-analysis, madrid, sql
- Homepage:
- Size: 1.35 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://mysql.com)
# 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.
```sql
SELECT distrito, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY distrito
ORDER BY numero_accidentes DESC;
```

### 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.
```sql
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;
```

### 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.
```sql
SELECT tipo_accidente, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY tipo_accidente
ORDER BY numero_accidentes DESC;
```

### 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.
```sql
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;
```

### 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.
```sql
SELECT estado_meteorologico, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY estado_meteorologico
ORDER BY numero_accidentes DESC;
```

### 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.
```sql
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;
```

### 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.
```sql
SELECT distrito, COUNT(*) AS numero_fallecidos
FROM accidentes_madrid
WHERE lesividad = 'Fallecido 24 horas'
GROUP BY distrito
ORDER BY numero_fallecidos DESC;
```

### 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.
```sql
SELECT tipo_vehiculo, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY tipo_vehiculo
ORDER BY numero_accidentes DESC;
```

### 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.
```sql
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;
```

### 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.
```sql
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;
```

### 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.
```sql
SELECT rango_edad, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY rango_edad
ORDER BY numero_accidentes DESC;
```

### 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.
```sql
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;
```

### 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.
```sql
SELECT sexo, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY sexo
ORDER BY numero_accidentes DESC;
```

### 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.
```sql
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;
```

### 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.
```sql
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;
```

### 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.
```sql
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');
```

### 17. Número de accidentes por fecha
Esta consulta cuenta el número de accidentes que ocurrieron en cada fecha.
```sql
SELECT fecha, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY fecha
ORDER BY fecha ASC;
```

### 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.
```sql
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;
```

### 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.
```sql
SELECT tipo_persona, COUNT(*) AS numero_tipo_de_persona
FROM accidentes_madrid
GROUP BY tipo_persona
ORDER BY tipo_persona ASC;
```

### 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.
```sql
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;
```

### 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.
```sql
SELECT distrito, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
WHERE estado_meteorologico != 'Despejado'
GROUP BY distrito
ORDER BY numero_accidentes DESC
LIMIT 5;
```

### 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.
```sql
SELECT lesividad, COUNT(*) AS numero_tipo_de_persona
FROM accidentes_madrid
GROUP BY lesividad
ORDER BY lesividad ASC;
```

### 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.
```sql
SELECT tipo_vehiculo, lesividad, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
GROUP BY tipo_vehiculo, lesividad
ORDER BY numero_accidentes DESC;
```

### 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.
```sql
SELECT rango_edad, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
WHERE positiva_alcohol = 'SI'
GROUP BY rango_edad
ORDER BY numero_accidentes DESC;
```

### 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.
```sql
SELECT sexo, COUNT(*) AS numero_accidentes
FROM accidentes_madrid
WHERE positiva_alcohol = 'Si'
GROUP BY sexo
ORDER BY numero_accidentes DESC;
```
