Datos sobre los incendios forestales en distintos niveles de agregación de la Comunidad Valenciana

Incendios
Comunidad Valenciana
Bosques
Autor/a
Afiliación

Alejandro Cervera Alcalá

Universidad de Valencia

Fecha de publicación

29 de marzo de 2025

Input

Para este trabajo, he decidio buscar bases de datos que resulten interesantes en la web Kaggle, una página web que ofrece distintas bases de datos para entrenar o realizar en ellas procesos estadísticos además de ofrecer distintos scripts en diversos lenguajes de programación. Buscando dentro de esta plataforma, he encontrado una base de datos que se puede descargar de aquí, que nos proporciona todos los incendios forestales ocurridos en todo el territorio español desde 1968 hasta 2016. Esta base de datos contiene distinta información en sus variables que vamos a explicar en el siguiente apartado.

datos <- read.csv("data/000108/incendios.csv", sep = ';')

kable(head(datos, 3),
      align = 'c')
idpif anio idestadopif probabilidadignicion idpeligro idcomunidad comunidad idprovincia provincia idmunicipio latitud longitud altitud nummunicipiosafectados puntosinicioincendio deteccion extinguido horadeteccion mesdeteccion duracion primeranotificaciondesde112 iddetectadopor idgradoresponsabilidad idcausa idmotivacion diastormenta idinvestigacioncausa idcertidumbrecausa intencionalidad idcausante idautorizacionactividad idclasedia diasultimalluvia tempmaxima humrelativa velocidadviento direccionviento perdidassuperficiales idnivelgravedadmaximo numeromediospersonal numeromediospesados numeromediosaereos huso x y iddatum claseincendio lugar combustible tipodefuego tipodeataque
568679 2016 3 NA NA 15 Islas Baleares 7 Islas Baleares 63 39.709 2.622 409 1 1 10/01/2016 10/01/2016 tarde enero 0 VERDADERO ccff_seguridad 2 290 NA 0 1 2 supuesto_no_intencionado 2 4 festivo 0 17 49 20 Suroeste 0.20 0 20 18 0 31 466451 4397989 2 conato excursionistas bosques superficie directo
568680 2016 3 NA NA 10 Aragon 22 Huesca 157 42.466 0.695 1213 1 1 12/01/2016 12/01/2016 tarde enero 0 VERDADERO ccff_seguridad 1 322 NA 0 3 1 no_intencionado 1 3 laborable 2 8 0 0 Norte 0.05 0 4 0 0 30 800159 4713460 2 conato vertederos pas_mat superficie directo
568681 2016 3 NA NA 10 Aragon 22 Huesca 125 42.141 -0.408 483 1 1 17/01/2016 17/01/2016 tarde enero 0 VERDADERO ccff_seguridad 2 241 NA 0 3 1 no_intencionado 1 4 festivo 3 8 40 4 Noreste 0.23 0 9 4 0 30 714747 4675882 2 conato NA pastizal superficie directo

Descripción

Antes de pasar a la modificación de la base de datos hemos de hacernos cargo de eliminar algunas variables que, o bien, resultan redudnantes, o bien tienen tantos valores nulos que no tienen ninguna importancia mantenerlas en la base de datos. Para ello, veremos el diccionario de variables presente en la página web y veremos también el total de NAs que contiene cada variable sabiendo que la base de datos cuenta con un total de 585.399 observaciones, podemos ver cuantos valores nulos tiene cada variable para ver en que casos es un recurso útil eliminar variables.

Número de incendios registrados desde 1968 hasta 2016
585399
Número de NAs en cada variable
probabilidadignicion 96010
idpeligro 5537
latitud 71348
longitud 71348
altitud 71348
puntosinicioincendio 578985
idgradoresponsabilidad 578985
idmotivacion 283151
diastormenta 576137
idinvestigacioncausa 578985
idautorizacionactividad 578985
diasultimalluvia 378983
tempmaxima 303335
humrelativa 308365
velocidadviento 323215
direccionviento 384866
idnivelgravedadmaximo 578982
huso 364809
x 364852
y 364814
iddatum 581473
lugar 11056
combustible 40000
tipodefuego 1726
tipodeataque 81869

Se detecta que variables como los puntos de inicio del incendio, el grado de responsabilidad o la investigación de la causa, entre otras que podemos ver en la tabla superior, tienen un numero exageradamente elevado. Esto se debe principalmente a que son variables que se han añadido recientemente y las observaciones anteriores a 2016 no contienen esta información. No mostramos las variables con 0 NAs para no alargar en exceso el documento.

Por otro lado, variables como id_motivación, contiene muchos NAs, puesto que si el incendio se da por causas naturales es lógico que no tenga motivación. Otras variables como tipo de fuego, tipo de ataque y similares suponemos que aparecen en algunos casos como nulos porque simplemente se desconocen.

Por otro lado, surge la idea de que puede que haya datos que algunas comunidades autónomas añaden y que otras pueden considerar irrelevantes por lo que antes de eliminar variables que puede que sí contengan información útil se procederá a filtrar por la Comunidad Valenciana, que ha sido escogida como nuestro objeto de estudio, antes de tomar cartas en el asunto.

Tras explicar brevemente los problemas que tiene la base de datos, vamos a proceder a modificar la base de datos para facilitar el tratamiento de la misma.

Tratamiento

Cómo anteriormente hemos mencionado, nuestro primer paso será filtrar la base de datos para solo obtener los incendios ocurridos en territorio valenciano. Para ello, utilizaremos el siguiente código:

com_val <- datos %>%
  filter(idcomunidad == 9)
Número de incendios registrados en la Com. Valenciana desde 1968 hasta 2016
20238
Número de NAs en cada variable
probabilidadignicion 1726
idpeligro 341
latitud 3933
longitud 3933
altitud 3933
puntosinicioincendio 19897
idgradoresponsabilidad 19897
idmotivacion 15315
diastormenta 19280
idinvestigacioncausa 19897
idautorizacionactividad 19897
diasultimalluvia 8748
tempmaxima 5345
humrelativa 5482
velocidadviento 6110
direccionviento 10328
idnivelgravedadmaximo 19897
huso 15353
x 15355
y 15354
iddatum 20001
lugar 435
combustible 1082
tipodefuego 56
tipodeataque 2012

Como vemos, hay variables en las que prácticamente todas las observaciones no prestan ningún tipo de información. Por ello, procederemos a eliminarlas de nuestro conjunto de datos para facilitar la lectura de los mismos.

com_val_mut <- com_val %>%
  select(-c(puntosinicioincendio, idgradoresponsabilidad, idmotivacion, diastormenta,
            idinvestigacioncausa, idautorizacionactividad, idnivelgravedadmaximo, huso, x, y,
            iddatum))

Tras esto, se nos queda un dataframe de con 40 variables a las cuales todavía les queda mucha tela que cortar. Lo primero que observamos es que el idmunicipio no es único, y necesita de el idprovincia para poder ser distinguido entre el resto. Si no tomamos medidas, en el caso de la Comunidad Valenciana, tendríamos 3 pueblos con el mismo id por lo que necesitamos de un identificador único para poder distinguir entre los municipios. Para ello, utilizaremos el siguiente código:

com_val_mut <- com_val_mut %>%
  mutate(id_unico = str_c(idprovincia, idmunicipio))
idprovincia idmunicipio id_unico
46 94 4694
3 86 386
3 65 365

Como vemos, hemos creado una variable única que nos permite diferenciar los pueblos entre provincias. Dicho esto, vamos a proceder a añadir a nuestra base de datos el nombre de cada pueblo y su geometría, que puede ser especialmente útil en cuánto a representaciones gráficas y visualización se refiere. Para ello requeriremos del paquete MapSpain, que nos proporcionará una base de datos con todos los pueblos y los mismos identificadores que nuestra base de datos. Tras modificar el conjunto de municipios, haremos un join con la base de datos de los incendios para lograr el nombre y la geometría de los municipios.

library(mapSpain)

municipios <- esp_get_munic()

municipios_val <- municipios %>%
  filter(cpro %in% c("46", "03", "12")) %>%
  select(c(cmun, name, geometry, cpro))
 
municipios_val <- municipios_val %>%
  mutate(cmun = as.integer(cmun),
         cpro = as.integer(cpro)) %>%
  mutate(cmunic = str_c(cpro, cmun)) %>%
  select(c(name, geometry, cmunic))
name cmunic geometry
230 Atzúbia, l’ 31 POLYGON ((-0.16092 38.83412…
244 Agost 32 POLYGON ((-0.65384 38.4952,…
232 Agres 33 POLYGON ((-0.53524 38.81037…

Como vemos, primero filtramos para obtener las provincias que nos interesan en nuestro estudio, para posteriormente seleccionar las variables requeridas. Luego, cambiamos la clase de las variables para que coincidan con las del conjunto de los incendios y creamos nuestra nueva variable que nos permitirá juntar ambos conjuntos. Dicho esto, antes de proceder a mostrar el código de el join, mencionar que reduciremos los años de estudio desde 1968 a 1983 por una simple razón, pero de mucho peso. Dado que la intención es analizar los incendios en los distintos municipios de la Comunidad Valenciana, necesitamos saber en que municipio se ha dado cada incendio. Bien, hasta el año 1983, no se proporciona el municipio en el que se da el incendio. Por ello filtraremos hasta este año.

Por otro lado, el municipio afectado en cada incendio es el municipio en el que se da inicio a el incendio. Hay incendios que afectan a más de un municipio, pero en este caso hay una variable que menciona si se da este caso. Lo que no se menciona, en ningún caso, es el nombre o nombres de los demás municipios afectados.

incendios_completo <- com_val_mut %>%
  filter(anio >= 1983) %>%
  left_join(municipios_val, by = c("id_unico" = "cmunic")) %>%
  rename(municipio = name, pol_muni = geometry) %>%
  relocate(municipio, pol_muni, id_unico, .after = idmunicipio)
Número de NAs en cada variable
probabilidadignicion 1726
idpeligro 341
municipio 13
latitud 13
longitud 13
altitud 13
diasultimalluvia 5725
tempmaxima 3367
humrelativa 3444
velocidadviento 4088
direccionviento 6408
lugar 378
combustible 1082
tipodefuego 56
tipodeataque 2012

A pesar de los cambios realizados, todavía tenemos NAs que no podemos pasar por alto, si miramos en la base de datos tenemos un total de 13 observaciones donde el idmunicipio es 999. No existe un municipio con este código en ninguna de las tres provincias. Por ello, procederemos a eliminar estas observaciones.

Por otro lado, las variables latitud y longitud representan las coordenadas en el sistema de coordenadas WGS-84 del lugar en el que se encuentra exactamente el asentamiento de población de cada municipio. Cabe recalcar esto dado que el término municipal no agrupa solamente al pueblo, sino que abarca mucho más terreno. Como veremos en el gráfico, en algunos casos puede parecer incluso desproporcionado. Por ello, transformaremos en puntos también estas dos variables.

incendios_completo <- incendios_completo %>%
  drop_na(latitud, longitud) %>%
  st_as_sf(coords = c("longitud","latitud"), crs = 4326) %>%
  rename(asentamiento = geometry) %>%
  relocate(asentamiento, pol_muni, .after = id_unico)
idpif anio idestadopif probabilidadignicion idpeligro idcomunidad comunidad idprovincia provincia idmunicipio municipio id_unico asentamiento pol_muni altitud nummunicipiosafectados deteccion extinguido horadeteccion mesdeteccion duracion primeranotificaciondesde112 iddetectadopor idcausa idcertidumbrecausa intencionalidad idcausante idclasedia diasultimalluvia tempmaxima humrelativa velocidadviento direccionviento perdidassuperficiales numeromediospersonal numeromediospesados numeromediosaereos claseincendio lugar combustible tipodefuego tipodeataque
571081 2016 3 NA NA 9 Comunidad Valenciana 46 Valencia 94 Catarroja 4694 POINT (-0.403 39.402) POLYGON ((-0.43539 39.41279… 10 1 03/01/2016 03/01/2016 tarde enero 0 VERDADERO ccff_seguridad 400 1 intencionado 2 festivo 0 0 0 0 Norte 0.01 9 6 0 conato viasferreas pastizal superficie directo
572472 2016 3 NA NA 9 Comunidad Valenciana 3 Alicante 86 Millena 386 POINT (-0.363 38.731) POLYGON ((-0.35935 38.74924… 635 1 04/01/2016 05/01/2016 tarde enero 1 VERDADERO ccff_seguridad 400 1 intencionado 2 laborable 7 12 70 68 Norte 0.20 22 20 0 conato excursionistas mat_bos superficie directo
572486 2016 3 NA NA 9 Comunidad Valenciana 3 Alicante 65 Elche / Elx 365 POINT (-0.699 38.265) POLYGON ((-0.51936 38.27487… 81 1 10/01/2016 10/01/2016 tarde enero 0 VERDADERO ccff_seguridad 295 1 no_intencionado 2 festivo 13 14 51 45 Suroeste 0.02 15 3 0 conato NA pas_res superficie directo
572504 2016 3 NA NA 9 Comunidad Valenciana 3 Alicante 106 Planes 3106 POINT (-0.345 38.786) POLYGON ((-0.38576 38.81026… 451 1 11/01/2016 12/01/2016 noche enero 1 VERDADERO ccff_seguridad 400 1 intencionado 2 laborable 14 0 66 60 Noroeste 0.15 35 20 0 conato excursionistas mat_bos superficie directo
572505 2016 3 NA NA 9 Comunidad Valenciana 3 Alicante 9 Alcoy / Alcoi 39 POINT (-0.473 38.698) POLYGON ((-0.42861 38.63594… 564 1 26/01/2016 26/01/2016 tarde enero 0 VERDADERO ccff_seguridad 400 1 intencionado 2 laborable 11 0 94 3 Sureste 0.05 10 4 0 conato viasferreas pas_mat_res superficie directo

Como vemos, hay municipios que no aparecen en el mapa dado que no han sufrido incendios forestales. Por ejemplo, municipios como Catarroja o Albal pertenecientes al área metropolitana de Valencia no aparecen por razones obvias.

Antes de terminar, y para completar la información recavada, crearemos una nueva base de datos con un acumulado de incendios por municipio para poder analizar de un modo más global la información obtenida. Para ello, dado que no aparecen los municipios sin incendios en el mapa, haremos un nuevo join, en este caso desde municipios a incendios, pero creando previamente el conteo por municipios como observaremos a continuación.

conteo_municipios <- incendios_completo %>% 
  count(id_unico, sort = TRUE) %>%
  st_drop_geometry(asentamiento)

conteo_municipios <- municipios_val %>%
  left_join(conteo_municipios, by = c('cmunic' = 'id_unico')) %>%
  mutate(n = replace_na(n, 0)) %>%
  rename(pol_muni = geometry)
name cmunic n pol_muni
Atzúbia, l’ 31 69 POLYGON ((-0.16092 38.83412…
Agost 32 13 POLYGON ((-0.65384 38.4952,…
Agres 33 39 POLYGON ((-0.53524 38.81037…
Aigües 34 9 POLYGON ((-0.38413 38.51554…
Albatera 35 4 POLYGON ((-0.89368 38.1662,…

Output

Se ha obtenido un total de dos bases de datos. La primera, contiene toda la información relativa a los incendios con gran cantidad de variables a analizar y con todo un mundo de procedimientos que realizar. Por otro lado, hemos obtenido el total de incendios por municipio, que a su vez puede utilizarse para mayores niveles de agregación y/o otras ideas. Aquí mostramos un gráfico del total de incendios por municipios y el nombre de los cinco municipios con más incendios.

Los ficheros generados con este procedimiento se pueden descargar de aquí.



Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394