Para el presente ejemplo vamos a explorar una propuesta de estructura para un analisis hecho en R.
Esta es una propuesta, por lo que queda a libertad de ustedes seleccionar la estructura que deseen aplicar a sus proyectos.
El presente código es reproducible, copiando y pegando el código en tu sesión de RStudio.
Primeramente, hacemos una presentación del trabajo. Podemos iniciar poniendo nuestro nombre y el propósito del script.
#################################
# JORGE JUVENAL CAMPOS FERREIRA #
# CODIGO DEMO NUMERO 1 #
#################################
## PREGUNTA: CUANTAS COLONIAS TIENEN LAS DEMARCACIONES (MPIOS O DELEGACIONES) EN LA CDMX?
Igualmente, configuramos el entorno de trabajo en el cuál correrá el script. Entre las configuraciones más comunes estan las siguientes:
Remover la notación científica.
Seleccionar el locale, el cual se puede entender como el conjunto de parámetros y caracteres que definen el lenguaje y el país que reconoce la sesión de R. Para este caso utilizaremos el es_ES.UTF-8.
Otra configuración consiste en remover todos los objetos del Ambiente Global.
#-------------------------------------------#
# Primero: Configurar el entorno de trabajo #
#-------------------------------------------#
# 1. Removemos notación científica
options(scipen = 999)
# 2. Caracteres usados en el idioma español
Sys.setlocale("LC_ALL", 'es_ES.UTF-8')
## [1] "es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/C/es_ES.UTF-8/en_US.UTF-8"
# 3. Eliminamos los objetos que hay en el Environment
rm(list = ls())
Las Bibliotecas son colecciones de funciones de R, bases de datos y códigos compilados en un formato bien definido. En vez de programar desde cero una función, podemos descargar una biblioteca y utilizar una función predefinida.
Para llamar las bibliotecas, podemos utilizar la función library() o utilizar la función p_load() de la biblioteca pacman como se ve a continuación.
La línea de código if (!require("pacman")) install.packages("pacman") instala la biblioteca pacman si RStudio detecta que no está instalada entre nuestras bibliotecas.
# ------------------------------ #
# Segundo: Sección de librerías. #
# ------------------------------ #
# Checar si esta instalado Pacman
if (!require("pacman")) install.packages("pacman")
## Loading required package: pacman
library(pacman)
p_load("tidyverse", "sf")
Muchas veces las librerías no tienen funciones que vamos a ocupar, o necesitamos hacer funciones muy específicas o programar tareas muy repetitivas. Para solucionar esto necesitaremos definir nuestras propias funciones; un ejemplo de eso se muestra en el bloque de código a continuación.
# -------------------------------------- #
# Tercero: Sección de funciones propias. #
# -------------------------------------- #
# Funcion propia! Para convertir variable texto en variable factor
niveles <- function(x) levels(as.factor(x))
En esta sección importamos bases de datos. En el bloque siguiente, estamos importando un archivo *.geojson que contiene una base de datos de las colonias de la Ciudad de México.
# ------------------------------------------------- #
# Cuarto. Sección para importar las bases de datos. #
# ------------------------------------------------- #
base_de_datos <- st_read("http://rir.geoint.mx/RIR/archivos/101_coloniasCDMX.geojson")
## Reading layer `OGRGeoJSON' from data source `http://rir.geoint.mx/RIR/archivos/101_coloniasCDMX.geojson' using driver `GeoJSON'
## Simple feature collection with 1556 features and 5 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -99.34657 ymin: 19.13012 xmax: -98.94434 ymax: 19.57996
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
Una vez que importamos la base de datos, revisamos que tiene. En el ejemplo siguiente veremos el numero de filas y columnas de la base, el tipo de variable de cada variable y cuantas y cuales delegaciones tiene la base de datos.
# ------------------------------------------------------------- #
# Quinto: Exploración, Limpieza y manejo de las Bases de Datos. #
# ------------------------------------------------------------- #
###############
# Exploracion #
###############
# Cuantas filas y columnas tiene?
dim(base_de_datos) # 1556 renglones x 6 columnas
## [1] 1556 6
# Que tipo de objeto es la base_de_datos?
class(base_de_datos) # Objeto sf
## [1] "sf" "data.frame"
# Que delegaciones tenemos en la base?
niveles(base_de_datos$NOM_MUN)
## [1] "Álvaro Obregón" "Azcapotzalco"
## [3] "Benito Juárez" "Coyoacán"
## [5] "Cuajimalpa de Morelos" "Cuauhtémoc"
## [7] "Gustavo A. Madero" "Iztacalco"
## [9] "Iztapalapa" "La Magdalena Contreras"
## [11] "Miguel Hidalgo" "Milpa Alta"
## [13] "Tláhuac" "Tlalpan"
## [15] "Venustiano Carranza" "Xochimilco"
# Nombres y tipos de datos de las columnas (VARIABLES)
str(base_de_datos) # Todas son factores menos la ultima
## Classes 'sf' and 'data.frame': 1556 obs. of 6 variables:
## $ TEXT : Factor w/ 1417 levels "10 DE ABRIL",..: 1290 483 205 235 219 245 977 1014 432 1183 ...
## $ CLAVE : Factor w/ 16 levels "09002","09003",..: 10 10 10 10 10 10 10 12 12 12 ...
## $ NOM_MUN : Factor w/ 16 levels "Álvaro Obregón",..: 13 13 13 13 13 13 13 16 16 16 ...
## $ ID_COL : Factor w/ 235 levels "0001","0002",..: 8 13 22 25 35 38 52 5 46 61 ...
## $ GEOCLAVE: Factor w/ 1555 levels "090020001","090020002",..: 962 966 974 977 987 989 1000 1191 1232 1247 ...
## $ geometry:sfc_MULTIPOLYGON of length 1556; first list element: List of 1
## ..$ :List of 1
## .. ..$ : num [1:470, 1:2] -99 -99 -99 -99 -99 ...
## ..- attr(*, "class")= chr "XY" "MULTIPOLYGON" "sfg"
## - attr(*, "sf_column")= chr "geometry"
## - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA
## ..- attr(*, "names")= chr "TEXT" "CLAVE" "NOM_MUN" "ID_COL" ...
# Limpieza y manejo
# Queremos solo 1 columna con la delegacion y 1 con el numero de colonias!
base_tidy <- base_de_datos %>%
group_by(NOM_MUN) %>%
summarize(`Numero de Colonias` = n()) %>%
as_tibble() %>%
select(-geometry) %>%
arrange(desc(`Numero de Colonias`))
Los análisis pueden consistir en estadística exploratoria, pruebas de hipótesis, análisis estadísticos, etc.
En el ejemplo siguiente, mediante visualización exploratoria generaremos una gráfica que nos muestre cual es la demarcación con mayor numero de colonias.
Todo dependiendo de tu pregunta de investigación.
# -------------------------------- #
# Sexto: Análisis y estadìsticas. #
# -------------------------------- #
############
# Graficas #
############
# Grafico de Barras #
ggplot(data = base_tidy, aes(x = reorder(NOM_MUN, `Numero de Colonias`),
y = `Numero de Colonias`, fill = NOM_MUN)) +
geom_bar(stat = "identity") +
theme_bw() +
coord_flip() +
theme(legend.position = "none") +
labs(title = "Numero de colonias por Delegación de la Ciudad de México", x = NULL)
Para finalizar, es bueno guardar los resultados. En este caso guardaremos la imágen de la gráfica anterior en un formato de imágen (formato *.png) y la base final en un formato *.csv, dentro de nuestra carpeta de trabajo.
# -------------------------------------------------------------- #
# Séptimo: Impresión de resultados y guardado de la información. #
# -------------------------------------------------------------- #
# Guardamos la grafica
ggsave(file = "numeroColoniasCDMX.png", height = 20, width = 18, units = "cm")
# Guardamos la base en un archivo *.csv
write.csv(base_tidy, "numeroColoniasCDMX.csv")
Recordemos que lo anterior es sólo una sugerencia (mi sugerencia personal). Al final de cuentas cada quien tiene su estilo de trabajo. Sólo hay que recordar que hay que ser lo más ordenados posible, y esto nos permitirá encontrar errores de forma más rápida y entender bien nuestros códigos en el futuro.
Juvenal Campos
Agosto, 2019.