Cargar los datos
setwd("D:/Data")
datos<-read.csv("derrames_globales_.csv",
header= TRUE, sep= ";", dec=",", fileEncoding = "latin1")
ubicacion<-datos$Ubicacion
ubicacion<-na.omit(ubicacion)
TDFubicacion<-table(ubicacion)
Tablaubicacion<-as.data.frame(TDFubicacion)
hi<-Tablaubicacion$Freq/sum(Tablaubicacion$Freq)
hi<-round(hi*100,2)
Tablaubicacion<-data.frame(Tablaubicacion,hi)
###Código que clasifica Ubicación por CONTINENTE
# Crear columna "Continente" basada en la Ubicación
Tablaubicacion$Continente <- NA
# Reglas para América
america <- c("USA", "US", "CA", "TX", "MI", "OH", "AK", "HI",
"Alaska", "Texas", "Ohio", "Michigan", "California",
"Louisiana", "NY", "MA")
Tablaubicacion$Continente[grep(paste(america, collapse="|"),
Tablaubicacion$ubicacion, ignore.case = TRUE)] <- "América"
# Reglas para Europa
europa <- c("UK", "England", "France", "Germany", "Spain", "Italy")
Tablaubicacion$Continente[grep(paste(europa, collapse="|"),
Tablaubicacion$ubicacion, ignore.case = TRUE)] <- "Europa"
# Reglas para Asia
asia <- c("China", "India", "Japan", "Korea", "Saudi")
Tablaubicacion$Continente[grep(paste(asia, collapse="|"),
Tablaubicacion$ubicacion, ignore.case = TRUE)] <- "Asia"
# Reglas para Oceanía
oceania <- c("Australia", "New Zealand")
Tablaubicacion$Continente[grep(paste(oceania, collapse="|"),
Tablaubicacion$ubicacion, ignore.case = TRUE)] <- "Oceanía"
# Reglas para África
africa <- c("Nigeria", "South Africa")
Tablaubicacion$Continente[grep(paste(africa, collapse="|"),
Tablaubicacion$ubicacion, ignore.case = TRUE)] <- "África"
# Cualquier otro → "Otros"
Tablaubicacion$Continente[is.na(Tablaubicacion$Continente)] <- "Otros"
### Generar tabla de frecuencias por continente
TDFcontinente <- table(Tablaubicacion$Continente)
TablaContinente <- as.data.frame(TDFcontinente)
# Porcentajes
TablaContinente$Porcentaje <- round(TablaContinente$Freq / sum(TablaContinente$Freq) * 100, 2)
barplot(TDFcontinente,
main="Gráfica: Distribución por Continente",
xlab="Continente",
ylab="Cantidad",
col="darkblue",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.9,
cex.names = 0.9)
barplot(TDFcontinente,
main="Gráfica:\nDistribución por Continente",
xlab="Continente",
ylab="Cantidad",
col="darkblue",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim = c(0, sum(TDFcontinente)))
barplot(TablaContinente$Porcentaje,
main = "Gráfica: Distribución porcentual por Continente",
xlab = "Continente",
ylab = "Porcentaje (%)",
col = "blue",
names.arg = TablaContinente$Var1,
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.8,
cex.names = 0.9,
ylim = c(0, 100))
# Etiquetas SOLO con porcentaje
etiquetas <- paste(TablaContinente$Porcentaje, "%")
pie(TablaContinente$Porcentaje,
labels = etiquetas,
main = "Distribución porcentual por Continente",
col = heat.colors(nrow(TablaContinente)))
# Leyenda SOLO con nombres
legend("bottomleft",
legend = TablaContinente$Var1,
fill = heat.colors(nrow(TablaContinente)),
title = "Continentes",
cex = 0.9,
bty = "n")
#MODA
moda_continente <- names(which.max(TDFcontinente))
moda_continente
## [1] "América"
La variable presenta una fuerte concentración en el continente América. Esto indica que la mayoría de los derrames registrados ocurren en esta región. Lo cual no es beneficioso para el continente.
tipo<-datos$Tipo_de_crudo
tipo<-na.omit(tipo)
TDFtipo<-table(tipo)
Tablatipo<-as.data.frame(TDFtipo)
hitipo<-Tablatipo$Freq/sum(Tablatipo$Freq)
hitipo<-round(hitipo*100,2)
Tablatipo<-data.frame(Tablatipo,hitipo)
### AGRUPACIÓN DE TIPO DE CRUDO EN CATEGORÍAS MAYORES
Tablatipo$Categoria <- NA
# 1. CRUDO / OIL
crudo <- c("crude", "oil", "Crude Tall Oil", "VGO", "unk", "tar", "oiled birds")
Tablatipo$Categoria[grep(paste(crudo, collapse="|"),
Tablatipo$tipo, ignore.case = TRUE)] <- "Crudo / Oil"
# 2. DIESEL
diesel <- c("diesel", "diseil", "diesel fuel", "Diesel, Fish")
Tablatipo$Categoria[grep(paste(diesel, collapse="|"),
Tablatipo$tipo, ignore.case = TRUE)] <- "Diesel"
# 3. FUEL OIL (BUNKER / IFO)
fueloil <- c("bunker", "fuel oil", "IFO", "IFO 380")
Tablatipo$Categoria[grep(paste(fueloil, collapse="|"),
Tablatipo$tipo, ignore.case = TRUE)] <- "Fuel Oil"
# 4. GAS / JET FUEL
gas <- c("gas fuel oil", "JP", "JP-5", "gasoline")
Tablatipo$Categoria[grep(paste(gas, collapse="|"),
Tablatipo$tipo, ignore.case = TRUE)] <- "Gasolina / Jet fuel"
# 5. ACEITES MINERALES
minerales <- c("mineral oil", "heating oil")
Tablatipo$Categoria[grep(paste(minerales, collapse="|"),
Tablatipo$tipo, ignore.case = TRUE)] <- "Mineral Oil"
# 6. OTROS
Tablatipo$Categoria[is.na(Tablatipo$Categoria)] <- "Otros"
### TABLA AGRUPADA
TDFcategoria <- table(Tablatipo$Categoria)
TablaCategoria <- as.data.frame(TDFcategoria)
TablaCategoria$Porcentaje <- round(TablaCategoria$Freq / sum(TablaCategoria$Freq) * 100, 2)
barplot(TDFcategoria,
main="Gráfica No.2:\nDistribución del Tipo de Combustible",
xlab="Categoría de combustible",
ylab="Cantidad",
col="darkgreen",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.8,
cex.names = 0.9)
barplot(TDFcategoria,
main="Gráfica No.2:\nDistribución del Tipo de Combustible (vista global)",
xlab="Categoría de combustible",
ylab="Cantidad",
col="darkgreen",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.8,
cex.names = 0.9,
ylim = c(0, sum(TDFcategoria)))
barplot(TablaCategoria$Porcentaje,
main="Gráfica No.2:\nDistribución porcentual del Tipo de Combustible",
xlab="Categoría de combustible",
ylab="Porcentaje (%)",
col="darkgreen",
names.arg = TablaCategoria$Var1,
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.8,
cex.names = 0.9,
ylim = c(0, 100))
etiquetas_porcentaje <- paste(TablaCategoria$Porcentaje, "%")
pie(TablaCategoria$Porcentaje,
labels = etiquetas_porcentaje,
main="Distribución porcentual del Tipo de Combustible",
col = heat.colors(nrow(TablaCategoria))
)
# Leyenda con solo los nombres
legend("topright",
legend = TablaCategoria$Var1,
fill = heat.colors(nrow(TablaCategoria)),
title = "Categorías",
cex = 0.9,
bty = "n")
#MODA
# Tabla de frecuencias del tipo de crudo
TDFcategoria <- table(Tablatipo$Categoria)
moda_categoria <- names(which.max(TDFcategoria))
moda_categoria
## [1] "Crudo / Oil"
La variable presenta una gran cantidad de derrames de crudo/oil. Esto indica que los incidentes están asociados al manejo y transporte de crudo, lo cual no es beneficioso.
causa<-datos$Causa_principal
causa<-na.omit(causa)
TDFcausa<-table(causa)
Tablacausa<-as.data.frame(TDFcausa)
hicausa<-Tablacausa$Freq/sum(Tablacausa$Freq)
hicausa<-round(hicausa*100,2)
Tablacausa<-data.frame(Tablacausa,hicausa)
### Crear vector categorizado
categoria <- rep("Otras", length(Tablacausa$causa))
categoria[grepl("corro|rotur|fuga|tuber|tanque|ducto|fall|defec|mal func",
Tablacausa$causa, ignore.case = TRUE)] <- "Fallas técnicas"
categoria[grepl("error|humano|operaci|maniobra|neglig",
Tablacausa$causa, ignore.case = TRUE)] <- "Factores humanos"
categoria[grepl("acciden|choque|colisi|impacto|embarc|naveg",
Tablacausa$causa, ignore.case = TRUE)] <- "Accidentes"
categoria[grepl("inund|torment|lluvia|terrem|sismo|clima|volcan",
Tablacausa$causa, ignore.case = TRUE)] <- "Eventos naturales"
categoria[grepl("vandal|sabota|robo|delincu",
Tablacausa$causa, ignore.case = TRUE)] <- "Actos externos"
### Crear tabla resumida con categorías
Tablacausa$Categoria <- categoria
TablaAgrupada <- aggregate(Freq ~ Categoria, data = Tablacausa, sum)
TablaAgrupada <- TablaAgrupada[order(-TablaAgrupada$Freq), ]
barplot(TablaAgrupada$Freq,
names.arg = TablaAgrupada$Categoria,
col="darkgreen",
main="Distribución de Causas del Derrame (Agrupadas)",
xlab="Categoría",
ylab="Cantidad",
cex.names = 1,
cex.main = 1.5)
barplot(TablaAgrupada$Freq,
names.arg = TablaAgrupada$Categoria,
col = "darkgreen",
main = "Distribución Global de Causas del Derrame (Agrupadas)",
xlab = "Categoría",
ylab = "Cantidad",
cex.names = 1,
cex.main = 1.5,
ylim = c(0, sum(TablaAgrupada$Freq))
)
TablaAgrupada$Porcentaje <- round(TablaAgrupada$Freq / sum(TablaAgrupada$Freq) * 100, 2)
barplot(TablaAgrupada$Porcentaje,
names.arg = TablaAgrupada$Categoria,
col="steelblue",
main="Distribución porcentual de Causas (Agrupadas)",
xlab="Categoría",
ylab="Porcentaje (%)",
ylim=c(0,100))
pie(TablaAgrupada$Porcentaje,
labels = paste(TablaAgrupada$Porcentaje, "%"),
col = heat.colors(nrow(TablaAgrupada)),
main = "Causas del Derrame (Agrupadas)"
)
legend("topright",
legend = TablaAgrupada$Categoria,
fill = heat.colors(nrow(TablaAgrupada)),
title = "Categorías",
cex = 0.9,
bty="n")
# Moda de la causa del derrame (agrupada)
TDFcausaAgrupada <- table(Tablacausa$Categoria)
moda_causa_agrupada <- names(which.max(TDFcausaAgrupada))
moda_causa_agrupada
## [1] "Otras"
La variable causa de derrame presenta una gran cantidad en otras, lo que indica que puede haber muchas causas de incidentes, lo cual no es beneficioso porque aumenta la incertidumbre.
amenaza<-datos$Amenaza
amenaza<-na.omit(amenaza)
TDFamenaza<-table(amenaza)
Tablaamenaza<-as.data.frame(TDFamenaza)
hiamenaza<-Tablaamenaza$Freq/sum(Tablaamenaza$Freq)
hiamenaza<-round(hiamenaza*100,2)
Tablaamenaza<-data.frame(Tablaamenaza,hiamenaza)
par(mar = c(4, 6, 4, 5) + 0.1)
barplot(TDFamenaza,
main="Gráfica No.1:
Distrubución de Amenaza de derrame",
xlab="Amenaza de derrame",
ylab="Cantidad",
col="red",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim = c(0, max(TDFamenaza)))
barplot(TDFamenaza,
main="Gráfica No.2:
Distrubución de Amenaza de derrame",
xlab="Amenaza de derrame",
ylab="Cantidad",
col="darkred",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim=c(0,sum(Tablaamenaza$Freq)))
barplot(Tablaamenaza$hiamenaza,
main="Gráfica No.3:
Distribución de Amenaza de derrame",
xlab="Amenaza de derrame",
ylab="Porcentaje",
col="blue",
names.arg = Tablaamenaza$amenaza,
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim=c(0,100))
etiqueta_amenaza<-paste(hiamenaza,"%")
pie(hiamenaza, main="Gráfica No.4:
Distribución de Amenaza de derrame",
radius = 1,
col=colores<-c(rev(heat.colors(4))),
labels = etiqueta_amenaza)
legend("bottomleft", legend = unique(Tablaamenaza$amenaza),
title="Leyenda",
cex = 0.7,
fill=colores<-c(rev(heat.colors(4))))
#MODA
moda_amenaza <- names(which.max(TDFamenaza))
moda_amenaza
## [1] "Oil"
La variable amenaza de derrame presenta una gran frecuencia en Oil, lo que indica que este producto es el que mas afecta a la población, lo cual no es beneficioso.
etiquetas<-datos$Etiquetas
etiquetas<-na.omit(etiquetas)
TDFetiquetas<-table(etiquetas)
Tablaetiquetas<-as.data.frame(TDFetiquetas)
hietiquetas<-Tablaetiquetas$Freq/sum(Tablaetiquetas$Freq)
hietiquetas<-round(hietiquetas*100,2)
Tablaetiquetas<-data.frame(Tablaetiquetas,hietiquetas)
Tablaetiquetas$grupo_logico <- NA
# 3. Definir listas de categorías
incidentes <- c("Collision", "Grounding", "Adrift", "Derelict")
estructuras <- c("Railcar", "Pipeline", "Wellhead")
fenomenos <- c("Hurricane", "Tsunami")
operaciones <- c("Mystery Substance", "Search + Rescue")
# 4. Función para clasificar cada etiqueta
clasificar_etiqueta <- function(etiqueta) {
componentes <- unlist(strsplit(etiqueta, "\\|")) # separa componentes
if (any(componentes %in% incidentes)) {
return("Incidentes Marítimos")
} else if (any(componentes %in% estructuras)) {
return("Objetos y Estructuras")
} else if (any(componentes %in% fenomenos)) {
return("Fenómenos Naturales")
} else if (any(componentes %in% operaciones)) {
return("Operaciones o Misterios")
} else {
return("Otros")
}
}
# 5. Aplicar la función a todas las filas (con conversión a carácter)
Tablaetiquetas$grupo_logico <- sapply(as.character(Tablaetiquetas$etiquetas), clasificar_etiqueta)
# Tabla de frecuencias con la nueva agrupación
grupo_etiquetas <- table(Tablaetiquetas$grupo_logico)
barplot(grupo_etiquetas,
main="Gráfica No.1:\nDistribución de Etiqueta de Derrame",
xlab="Grupo de Derrame",
ylab="Cantidad",
col="red",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.8,
ylim = c(0, max(grupo_etiquetas)+10))
barplot(grupo_etiquetas,
main="Gráfica No.2:
Distrubución de Etiqueta de derrame",
xlab="Etiqueta de derrame",
ylab="Cantidad",
col="darkred",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim=c(0,sum(grupo_etiquetas)))
hi_grupo_etiquetas<-grupo_etiquetas/sum(grupo_etiquetas)
hi_grupo_etiquetas<-round(hi_grupo_etiquetas*100,2)
barplot(hi_grupo_etiquetas,
main="Gráfica No.3:
Distribución de Etiqueta de derrame",
xlab="Etiqueta de derrame",
ylab="Porcentaje",
col="blue",
names.arg = names(hi_grupo_etiquetas),
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.5,
ylim=c(0,100))
etiqueta<-paste(hi_grupo_etiquetas,"%")
pie(hi_grupo_etiquetas, main="Gráfica No.4:
Distribución de Etiqueta de derrame",
radius = 1,
col=colores<-c(rev(heat.colors(5))),
labels = etiqueta)
legend("bottomleft", legend = names(hi_grupo_etiquetas),
title="Leyenda",
cex = 0.6,
fill=colores<-c(rev(heat.colors(5))))
#MODA
# Calcular la moda
moda <- names(grupo_etiquetas)[which.max(grupo_etiquetas)]
moda
## [1] "Incidentes Marítimos"
La variable etiqueta tiene la mayoría de los derrames en la clasificación incidentes marítimos, lo que indica que los accidentes en el mar son los más frecuentes provocando una crisis ecológica, lo cual no es beneficioso
fuente<-datos$Fuente_respuesta
fuente<-na.omit(fuente)
TDFfuente<-table(fuente)
Tablafuente<-as.data.frame(TDFfuente)
hifuente<-Tablafuente$Freq/sum(Tablafuente$Freq)
hifuente<-round(hifuente*100,2)
Tablafuente<-data.frame(Tablafuente,hifuente)
par(mar = c(4, 6, 4, 5) + 0.1)
barplot(TDFfuente,
main="Gráfica No.1:
Distrubución de Fuente respuesta",
xlab="Fuente respuesta",
ylab="Cantidad",
col="red",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.5,
ylim = c(0, max(TDFfuente)))
barplot(TDFfuente,
main="Gráfica No.2:
Distrubución de Fuente respuesta",
xlab="Fuente respuesta",
ylab="Cantidad",
col="darkred",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim=c(0,sum(TDFfuente)))
barplot(hifuente,
main="Gráfica No.3:
Distribución de Fuente respuesta",
xlab="Fuente respuesta",
ylab="Porcentaje",
col="blue",
names.arg = Tablafuente$fuente,
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim=c(0,100))
nombres_leyenda <- as.character(unique(Tablafuente$fuente))
etiquetafuente <- paste(hifuente, "%")
pie(hifuente,
main="Gráfica No.4:\nDistribución de Fuente respuesta",
radius = 1,
col=colores <- c(rev(heat.colors(4))),
labels = etiquetafuente)
legend("bottomleft",
legend = unique(Tablafuente$fuente),
title="Leyenda",
cex = 0.5,
fill=colores)
#MODA
moda_fuente <- names(TDFfuente)[which.max(TDFfuente)]
moda_fuente
## [1] ""
La variable fuente de respuesta presenta una gran cantidad de datos en description, indicando que la mayoría de los derrames fueron gestionados o reportados por esta entidad. Lo cual es ligeramente beneficioso.
actualizacion<-datos$etiqueta_actualizacion
actualizacion<-na.omit(actualizacion)
TDFactualizacion<-table(actualizacion)
Tablaactualizacion<-as.data.frame(TDFactualizacion)
hiactualizacion<-Tablaactualizacion$Freq/sum(Tablaactualizacion$Freq)
hiactualizacion<-round(hiactualizacion*100,2)
Tablaactualizacion<-data.frame(Tablaactualizacion,hiactualizacion)
par(mar = c(4, 6, 4, 5) + 0.1)
barplot(TDFactualizacion,
main="Gráfica No.1:
Distrubución de Etiqueta actualización",
xlab="Etiqueta actualización",
ylab="Cantidad",
col="red",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.5,
ylim = c(0, max(TDFactualizacion)))
barplot(TDFactualizacion,
main="Gráfica No.2:
Distrubución de Etiqueta actualización",
xlab="Etiqueta actualización",
ylab="Cantidad",
col="darkred",
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim=c(0,sum(TDFactualizacion)))
barplot(hiactualizacion,
main="Gráfica No.3:
Distribución de Etiqueta actualización",
xlab="Etiqueta actualización",
ylab="Porcentaje",
col="blue",
names.arg = Tablaactualizacion$actualizacion,
cex.main = 1.5,
cex.lab = 1,
cex.axis = 0.7,
cex.names = 0.7,
ylim=c(0,100))
nombres_leyenda <- as.character(unique(Tablaactualizacion$actualizacion))
etiquetaactualizacion <- paste(hiactualizacion, "%")
pie(hiactualizacion,
main="Gráfica No.4:\nDistribución de Etiqueta actualización",
radius = 1,
col=colores <- c(rev(heat.colors(4))),
labels = etiquetaactualizacion)
legend("bottomleft",
legend = unique(Tablaactualizacion$actualizacion),
title="Leyenda",
cex = 0.5,
fill=colores,
xpd = TRUE,
bty = "n")
moda_actualizacion <- names(TDFactualizacion)[which.max(TDFactualizacion)]
moda_actualizacion
## [1] "RA still unavailable"
La variable etiqueta de actualización presenta una gran cantidad de datos en “RA still unavailable”, indicando que la mayoría de eventos registrados no han sido remediados, lo cual no es nada beneficioso.