num_filas <- nrow(factories)
# Número de columnas
num_columnas <- ncol(factories)
# Imprimir el resultado
print(paste("El dataset de factories contiene", num_filas, " fials y", num_columnas, "columns"))
## [1] "El dataset de factories contiene 732 fials y 8 columns"
colnames(factories)
## [1] "id" "state_code" "source" "name" "status"
## [6] "ward_code" "global_id" "geometry"
Estos son los nombres de cada columna del dataset
factories <- factories[, c("name","status","geometry")]
colSums(is.na(factories))
## name status geometry
## 0 0 0
Despues de contar, en las columnas seleccionadas del dataset, los valores Na, se llega a que no existen.
factories$lon <- st_coordinates(factories)[, "X"]
factories$lat <- st_coordinates(factories)[, "Y"]
Creamos nuevas columnas ‘lon’ y ‘lat’ donde se calcula la longitud y latidud en cuestion
print(st_crs(factories))
## Coordinate Reference System:
## User input: WGS 84
## wkt:
## GEOGCRS["WGS 84",
## DATUM["World Geodetic System 1984",
## ELLIPSOID["WGS 84",6378137,298.257223563,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## CS[ellipsoidal,2],
## AXIS["geodetic latitude (Lat)",north,
## ORDER[1],
## ANGLEUNIT["degree",0.0174532925199433]],
## AXIS["geodetic longitude (Lon)",east,
## ORDER[2],
## ANGLEUNIT["degree",0.0174532925199433]],
## ID["EPSG",4326]]
Imprimimos la referencia geoespacial de la tierra, con 4326 correspondiendo a un codigo asignado a partir de la longitud y latitud.
scatter_plot <- ggplot(factories, aes(x = lon, y = lat)) +
geom_point(color = "blue") +
labs(title = "A Scatter plot of the latitude and Longitude of Factories in Lagos",
x = "Longitude", y = "Latitude")
interactive_plot <- ggplotly(scatter_plot)
interactive_plot
Generamos un grafico de dispersion entre la longitud y latitude la que se hablaba anteriormente. Se aprecia como no posee ninguna forma ni lineal, ni cuadratica, que ayude a percibir la relacion entre los datos.
mapa <- leaflet() %>%
setView(lng = 3.3792, lat = 6.5244, zoom = 12) %>%
addTiles() # Puedes cambiar "addTiles()" por otros proveedores de mapas, como Stamen.Toner, Stamen.Terrain, etc.
# Añadir los marcadores al mapa
for (i in 1:nrow(factories)) {
mapa <- mapa %>%
addMarkers(lng = factories$lon[i], lat = factories$lat[i], popup = factories$name[i])
}
# Visualizar el mapa
mapa
Gracias a leaflet podemos tener una vision geoespacial de la distribucion de las latitudes y longitudes. Es por eso que esta es parecida a la grafica anterior.
bubble <- leaflet() %>%
setView(lng = 3.3792, lat = 6.5244, zoom = 12) %>%
addTiles()
# Crear los marcadores con círculos
for (i in 1:nrow(factories)) {
bubble <- addCircleMarkers(map = bubble, lng = factories$lon[i], lat = factories$lat[i], radius = 5, fillOpacity = 0.5)
}
# Configurar opciones de clústeres
cluster_options <- markerClusterOptions()
# Agregar los marcadores con opciones de clústeres
bubble <- addMarkers(map = bubble, lng = factories$lon, lat = factories$lat, clusterOptions = cluster_options)
# Visualizar el mapa
bubble
Teniendo en cuenta que, para el anterior grafico interactivo, a medida que nos alejamos se acercan las localizaciones seleccionadas, se realiza un mapa que, en realidad, agrupe las localizacion segun lo cerca que se encuentren. A medida que nos acercamos se exhiben individualmente las localizaciones.
heat <- leaflet() %>%
setView(lng = 3.3792, lat = 6.5244, zoom = 10) %>%
addTiles()
# Agregar un mapa de calor al mapa base
heat <- addHeatmap(map = heat, lng = factories$lon, lat = factories$lat, radius = 10)
# Visualizar el mapa
heat
En esta ocasion, en vez de generar burbujas segun la distancia relativa entre las localizaciones, generamos un mapa de calor que tiene en cuenta, tambien, un radio relativo a la distancia de la que lo estemos viendo. Viendo el mapa desde muy alto, apreciamos que desde ‘Lagos’ y ‘Sango Otta’ es donde mas se encuetran puntuados los espacios; lo que se especifica a medida que nos acercamos.
status <- table(factories$status)
status_df <- data.frame(status = names(status), count = as.numeric(status))
status_df$status <- factor(status_df$status, levels = c("In Use", "Unused Good", "Unused Poor"))
p <-ggplot(status_df, aes(x = status, y = count, fill = status)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("blue", "yellow", "purple")) +
labs(title = "Status of Factories and Industrial Sites in Lagos")
ggplotly(p)
Para realizar esta grafica, separamos los datos de las fabricas segun sus estados: en uso, sin uso y buen estado, sin uso y mal estado. Luego, se realiza un grafico de barras. Claramente, la gran mayoria de las fabricas se ecnuentran en uso; a diferencia, de solo unas cuntas que no lo estan, teniendo que la menor parte de estas se encuentran en mal estado.
circle <- leaflet() %>%
setView(lng = 3.3792, lat = 6.5244, zoom = 10) %>%
addTiles()
# Función para asignar colores según la condición
color_producer <- function(val) {
if (val == 'In Use') {
return('blue')
} else if (val == 'Unused Good') {
return('yellow')
} else {
return('purple')
}
}
# Agregar los círculos al mapa
for (i in 1:nrow(factories)) {
circle <- circle %>%
addCircleMarkers(lng = factories$lon[i], lat = factories$lat[i],
radius = 2, color = color_producer(factories$status[i]))
}
# Mostrar el mapa
circle
En esta ocasion, generamos un scatter plot geo espacial. Esta seria otra forma de visualizar los datos que ya se habian mostrado anteriormente. Con visualizaciones como estas tenemos visiones mas certeras de los datos, que, a diferencia de graficas como la de burbujas, podrian ser mas explicitas y menos confusas.
library(plotly)
# Define el mapa scatter
scatter_map <- plot_geo(factories) %>%
add_markers(
y = ~lat,
x = ~lon,
color = ~status,
colors = c("In Use" = "blue", "Unused Good" = "yellow", "Unused Poor" = "purple"),
text = ~name
) %>%
layout(
title = "Status of Factories and Industrial Sites in Lagos",
margin = list(l = 0, r = 0, t = 30, b = 10),
mapbox = list(
style = "carto-positron",
zoom = 100
)
)
# Mostrar el gráfico
scatter_map
Ahora generamos ‘el mismo grafo’ pero usando plotly, el cual llega a ser igual de interactivo que leaflet. Sin embrago, es mas claro a la hora de usar leyendas para la guia e identificacion de datos. Por ejemplo, desde muy lejos parece predominar el color morado, pero al acercarnos lo suficiente, encontramos que veiamos en el grafico de barras, las fabricas en uso superan por mucho, en cantidad, las no usadas.
density_grid <- with(factories, table(cut(lat, breaks = 30), cut(lon, breaks = 30)))
# Convertir la tabla en una matriz
density_matrix <- as.matrix(density_grid)
# Crear el mapa de calor con la densidad
heatmap <- plot_ly(z = density_matrix, type = "heatmap", colorscale = "Viridis") %>%
layout(
title = "Density Map of Factories in Lagos",
xaxis = list(title = "Longitude"),
yaxis = list(title = "Latitude"),
margin = list(l = 0, r = 0, t = 30, b = 10)
)
heatmap
Finalmente, tenemos otra perspectiva de los datos ya presentados. en este caso resulta una perspectiva de tres variables, donde la tercera variable, a diferencia del scatter plot y las burbujas, es cuantitativa; dando asi un resultado apreciable sobre el color, gracias a la densidad de la informacion. Gracias a esta guia, se nota esa concentracion de fabricas en algunos lugares mas al centro y mayor ausencia en los costados.