##### Seminario Megalópolis 2030#### #Construcción del espacio urbano # Ciudad inteligente: Puntos de acceso wifi install.packages("mapview") install.packages("crosstable") install.packages('ghibli') install.packages("tayloRswift") # Indica el uso de los paquetes en este script library (sf) library (raster) library(leaflet) library(tidyverse) library(mapview) library(dplyr) library(crosstable) library(ghibli) library(tayloRswift) # Utilizar paletas de colores para graficos ggplot(mpg, aes(manufacturer, fill = manufacturer)) + geom_bar() + theme_minimal()+ theme(axis.text.x = element_text(angle = 45, hjust = 1)) + scale_fill_taylor(palette = "lover", guide = "none") # Descargar datos desde vínculo web wifi_desde-web<-download.file("https://datos.cdmx.gob.mx/dataset/puntos-de-acceso-wifi-en-la-ciudad-de-mexico", "puntoswifi_url.csv") # Cargar desde archivo local wifi_raw<-read.csv("2024-03-04-puntos_de_acceso_wifi.csv") names(wifi_raw) summary(wifi_raw) nrow(wifi_raw) colSums(is.na(wifi_raw)) # Excluir filas con datos faltantes (NA) wifi_no_NA<-na.omit(wifi) # Resumen sin datos NA summary(wifi_no_NA) # Excluir variable con datos faltantes (fecha de instalación) wifi <- subset(wifi_raw, select = -fecha_instalacion) # Ubica los valores faltantes print("Conteo de valores faltantes") sum(is.na(wifi)) print("Posición de valores faltantes") which(is.na(wifi)) print("Columnas con valores faltantes") colSums(is.na(wifi)) # Descartar filas con NA en latitud wifi<-wifi%>% drop_na(latitud) # Revisar si se descartaron NA correctamente summary(wifi) colSums(is.na(wifi)) nrow(wifi) # Primer gráfico wifi %>% ggplot(aes(x = longitud, y = latitud))+ geom_point()+ labs(title = "Identificación de puntos de acceso wifi CDMX") #Convertir a datos espaciales dat <- st_as_sf(wifi, coords = c("longitud", "latitud")) which(is.na(wifi)) sum(is.na(wifi)) as.numeric(wifi$longitud) is.numeric(wifi$longitud) # Atributo numérico desde origen puntoswifi <- read_csv("20240304_puntoswifi.csv", col_types = cols(fecha_instalacion = col_skip(), latitud = col_number(), longitud = col_number())) View(puntoswifi) sum(is.na(puntoswifi)) print("Columnas con valores faltantes") colSums(is.na(puntoswifi)) puntoswifi_no_NA<-na.omit(puntoswifi) #Convertir a datos espaciales dat <- st_as_sf(puntoswifi_no_NA, coords = c("longitud", "latitud"), crs=4326) # Inspeccionar nuevo objeto sf head(dat) # Visualizar geometría de objeto sf # Visualizar datos mapview(dat) # Identificamos observaciones con errores #32600,31545,32227 # Se corrigen manualmente # ¿En los datos aparecen 16 alcaldías? table(puntoswifi$alcaldia) # "Número" de alcaldías categorias <- unique(puntoswifi$alcaldia) numcategorias <- length(categorias) # Renombrar Alcaldías puntoswifi$alcaldia<- recode(puntoswifi$alcaldia, 'AZCAPOTZALCO' = 'Azcapotzalco', 'BENITO JUAREZ' = 'Benito Juárez', 'COYOACÁN' = 'Coyoacán', 'COYOACAN' = 'Coyoacán', 'CUAUHTEMOC' = 'Cuauhtémoc', 'CUAHUTEMOC' = 'Cuauhtémoc', 'Cuahutémoc' = 'Cuauhtémoc', 'Gustavo A Madero' = 'Gustavo A. Madero', 'GUSTAVO A. MADERO' = 'Gustavo A. Madero', 'IZTACALCO' = 'Iztacalco', 'IZTAPALAPA' = 'Iztapalapa', 'La Magdalena Contreras' = 'Magdalena Contreras', 'MIGUEL HIDALGO' = 'Miguel Hidalgo', 'TLAHUAC' = 'Tláhuac', 'TLALPAN' = 'Tlalpan', 'VENUSTIANO CARRANZA' = 'Venustiano Carranza', 'XOCHIMILCO' = 'Xochimilco') # ¿En los datos aparecen 16 alcaldías? table(puntoswifi$alcaldia) # ¿Cuántas colonias aparecen? table(puntoswifi$colonia) # Requiere una limpieza de datos más sofisticada -> se realizará posteriormente # No utilizar observaciones donde punto wifi es móvil (unidades de trolebus y cabinas de Cablebús) # Estas observaciones móviles no tienen alcaldía y están georeferenciadas al mismo punto # Renombrar datos de $programa table(puntoswifi$programa) puntoswifi$programa<- recode(puntoswifi$programa, 'HOSPITALES' = 'Hospitales') table(puntoswifi$móvil) # Tabla de proporciones proportions(table(puntoswifi$programa)) # Proporciones por fila proportions(table(puntoswifi$programa, puntoswifi$alcaldia), margin = 1) # Proporciones por columna proportions(table(puntoswifi$programa, puntoswifi$alcaldia), margin = 2) # Tabla de programa por Alcaldía ct1<-crosstable(puntoswifi, c(programa), by=alcaldia, total="both", percent_pattern="{n} ({p_row}/{p_col})", percent_digits=0) %>% as_flextable() ct1 # Gráfico con porcentajes en orden ggplot(puntoswifi, aes(x = `alcaldia`)) + geom_bar() + xlab("Alcaldía") # Añadir paleta de colores # dMuestra las paletas de colores y sus nombres # Ghibli par(mfrow=c(9,3)) for(i in names(ghibli_palettes)) print(ghibli_palette(i)) # TayloRswift #par(mfrow=c(8,3)) #for(i in names(swift_palettes)) print(swift_pal(i)) names(swift_palettes) # Añadir Lover gplot<-ggplot(puntoswifi, aes(alcaldia, fill = alcaldia)) + geom_bar()+ xlab("Alcaldía") + ylab("Número de puntos Wifi")+ theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + scale_fill_taylor(palette = "lover", guide = "none") gplot # En este punto, aún tenemos NA en alcaldía, ¿a qué se debe? # Excluye observaciones sin alcaldía