Temas a evaluar:

Ejercicios

Ejercicio 1. Visualización en ggplot2() —-

Elabore una gráfica de líneas, de puntos y de barras con los siguientes datos:

  1. Gráfica de líneas: A partir de la base de datos apple.xlsx replique la siguiente gráfica.

Cargar todas las librerías que utilicé para estos ejercicios

#Cargar librerías
library(pacman)
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(webshot)
library(sf)
library(readr)
library(stringr)
library(readxl)
library(units)
library(wesanderson)
library(plotly)
library(rebus)
library(scales)

Descargar la base de datos contenida en nuestro proyecto

apple <- read_excel("01_Datos/datos_graficas/data_apple.xlsx") #Bajar base de datos subida previamente en el proyecto

Crear el código en ggplot

apple %>%  
  ggplot(aes()) + #creamos los geom line necesarios con las tres variables
  geom_line(aes(x=date,
                y=adjusted), 
            size = 1,
            colour = "black")+
  geom_line(aes(x=date, 
                y=mavg_short),
            size = 1,
            colour = "blue",
            lty =5) +
  geom_line(aes(x=date, 
                y=mavg_long),
            size = 1,
            colour = "red",
            lty =3) +
  labs(title = "Precio ajustado de las acciones de Apple", # Título
       subtitle = "Fecha: 8 de Sept. 2020 al 4 de Marzo, 2021", # Subtitulo
              caption = "Fuente: Librería tidyquant. Matt Dancho, 2020. Extraído del API del S&P500" # Pie de pagina
  ) + 
  # Modificar el tema de la gráfica, cambiando los ejes x e y
  labs(x = "Fecha" , y = "Precio ajustado")

  1. Gráfica de puntos: A partir de la base de datos faculty.csv, grafique lo siguiente

Descargar la base de datos contenida en nuestro proyecto y crearemos la gráfica

# Ingrese su código aquí

salario <- read_csv("01_Datos/datos_graficas/faculty-data.csv")

#Creo dos objetos con los distitnos nombres en español e inglés para después reemplazar todo con str_replace

inglés <- c("biology", "english", "informatics", "sociology", "statistics")
español <- c("Biología", "Inglés", "Informática", "Sociología", "Estadística")

salario %>%
  mutate(department = str_replace(español, inglés, department)) %>%
  arrange(department) %>%
  ggplot(aes(x= experience, #Creamos la gráfica con las dos variables
             y= salary,
             color = department)) +
  geom_point() + 
  geom_smooth(method = "lm") +
  facet_wrap(~department, ncol = 3) + #Hacemos los facet dividido en tres columnas para que se parezca a la imagen
  theme_bw() + #Añadimos el tema principal (para quitar el fondo)
  labs(title = "Experiencia vs. Salario", # Título de la gráfica
       caption = "Datos obtenidos de 'cierta' universidad de Estados Unidos, 2020.") + # Pie de pagina
  theme(plot.title = element_text(face= "bold", hjust = 1), #título a la derecha y en negritas
        legend.position = "bottom", #Leyenda al fondo
        legend.background = element_rect(fill = "white", colour = "white"),
        panel.grid.major = element_line(colour = "gray93", size = .8), #Cambié las características de las líneas para que se parecieran un poco más al de la imagen
        panel.grid.minor = element_line(colour = "gray94")) +
  labs(x = "Años de experiencia" , y = "Salario (USD)") + #El título se va a la izquierda y en negritas y bajamos la leyenda 
  labs(color="Departamento") + #Cambiamos el resto de las etiquetas
  scale_y_continuous(labels=scales::dollar_format()) + scale_x_continuous(breaks = breaks_extended(9)) #Añadimos dólares el en eje y t separaciones distintas en el eje x

  1. Gráfica de barras: A partir de la base de datos anuario_chapingo.xlsx, grafique la siguiente gráfica. (Es necesario pre-procesar los datos).

Descargar la base de datos del proyecto y crearemos la gráfica.

# Ingrese su código aquí


Chapingo <- read_csv("01_Datos/datos_graficas/anuario_chapingo_2018.csv") #bajar base de datos

Creamos la gráfica de barras

Chapingo %>%
  group_by(estado_de_nacimiento) %>% #se hace la suma de los estudiantes por estado para crear la gráfica
  summarise(estudiantes_estado = sum(num_alumnos)) %>%
  ungroup() %>%
  mutate(estado_de_nacimiento = str_to_title(estado_de_nacimiento)) %>% #Es importante hace run str_to_title para que las letras sean mayúsculas y minúsculas
  ggplot(aes(x= estudiantes_estado,
             y= fct_reorder(estado_de_nacimiento, estudiantes_estado),
             fill = estudiantes_estado)) +
  geom_col() + geom_text(aes(label = estudiantes_estado), 
            position = position_stack(), hjust = -0.3) +
  labs(title = "Universidad Autónoma Chapingo",
       subtitle = "Alumnos registrados de grado 1 a 8. 2018 \npor entidad federativa de nacimiento", 
       caption="Fuente: Anuario estadístico Champingo, 2018") + 
  labs(x = "" , y = "") + #Creamos título, subtítulo y quitamos etiquetas. \n nos sirve para bajar el texto del título
  theme(legend.position = "none") + #quitamos la leyenda
  scale_x_continuous(limits = c(0,2200)) #cambamos la escala para que entre la cifra y no se corte


Ejercicio 2. Mapas en ggplot() —-

En la siguiente página: https://trends.google.com.mx/trends/?geo=MX usted puede ver las tendencias de búsquedas de Google en México realizadas sobre algún tema en particular.

Para el presente ejercicio, haga lo siguiente:

  1. Consulte la información de búsquedas sobre la Ley Seca para el último año ( o cualquier otro tema que le resulte más interesante).

  2. Descarge la información por región (entidades) y guardela en su carpeta de 01_Datos.

  1. Abra la información en R, y guardela en un objeto llamado trends.
###Bajamos la base de datos

trends <- read_csv("01_Datos/google trends/susana_distancia.csv", 
                   skip = 2) %>% 
  rename(Tendencia = `susana distancia: (21/3/20 - 21/3/21)`) %>% 
  rename(ENTIDAD = Region) #Bajamos base de datos y renombramos las columnas
  1. Explique lo que realiza el siguiente código.
geometria_entidades <- read_sf("01_Datos/edos/entidades.geojson") %>% 
  st_transform(crs = 4326) %>% 
  select(-c(COV_, COV_ID, AREA, PERIMETER, CAPITAL)) #homogeneizamos el sistema 4326 y quitamos columnas

plot(geometria_entidades, max.plot = 1) #Ya podemos ver un mapa preelimilar

Funciones para checar cómo estan escritos los nombres

geometria_entidades$ENTIDAD
##  [1] "Aguascalientes"                  "Baja California"                
##  [3] "Baja California Sur"             "Campeche"                       
##  [5] "Coahuila de Zaragoza"            "Colima"                         
##  [7] "Chiapas"                         "Chihuahua"                      
##  [9] "Ciudad de México"                "Durango"                        
## [11] "Guanajuato"                      "Guerrero"                       
## [13] "Hidalgo"                         "Jalisco"                        
## [15] "México"                          "Michoacan de Ocampo"            
## [17] "Morelos"                         "Nayarit"                        
## [19] "Nuevo León"                      "Oaxaca"                         
## [21] "Puebla"                          "Querétaro de Arteaga"           
## [23] "Quintana Roo"                    "San Luís Potosi"                
## [25] "Sinaloa"                         "Sonora"                         
## [27] "Tabasco"                         "Tamaulipas"                     
## [29] "Tlaxcala"                        "Veracruz de Ignacio de La Llave"
## [31] "Yucatán"                         "Zacatecas"
sort(trends$ENTIDAD)
##  [1] "Aguascalientes"       "Baja California"      "Baja California Sur" 
##  [4] "Campeche"             "Chiapas"              "Chihuahua"           
##  [7] "Ciudad de México"     "Coahuila de Zaragoza" "Colima"              
## [10] "Durango"              "Estado de México"     "Guanajuato"          
## [13] "Guerrero"             "Hidalgo"              "Jalisco"             
## [16] "Michoacán"            "Morelos"              "Nayarit"             
## [19] "Nuevo León"           "Oaxaca"               "Puebla"              
## [22] "Querétaro"            "Quintana Roo"         "San Luis Potosí"     
## [25] "Sinaloa"              "Sonora"               "Tabasco"             
## [28] "Tamaulipas"           "Tlaxcala"             "Veracruz"            
## [31] "Yucatán"              "Zacatecas"
cbind.data.frame(geometria_entidades$ENTIDAD, sort(trends$ENTIDAD))
##        geometria_entidades$ENTIDAD sort(trends$ENTIDAD)
## 1                   Aguascalientes       Aguascalientes
## 2                  Baja California      Baja California
## 3              Baja California Sur  Baja California Sur
## 4                         Campeche             Campeche
## 5             Coahuila de Zaragoza              Chiapas
## 6                           Colima            Chihuahua
## 7                          Chiapas     Ciudad de México
## 8                        Chihuahua Coahuila de Zaragoza
## 9                 Ciudad de México               Colima
## 10                         Durango              Durango
## 11                      Guanajuato     Estado de México
## 12                        Guerrero           Guanajuato
## 13                         Hidalgo             Guerrero
## 14                         Jalisco              Hidalgo
## 15                          México              Jalisco
## 16             Michoacan de Ocampo            Michoacán
## 17                         Morelos              Morelos
## 18                         Nayarit              Nayarit
## 19                      Nuevo León           Nuevo León
## 20                          Oaxaca               Oaxaca
## 21                          Puebla               Puebla
## 22            Querétaro de Arteaga            Querétaro
## 23                    Quintana Roo         Quintana Roo
## 24                 San Luís Potosi      San Luis Potosí
## 25                         Sinaloa              Sinaloa
## 26                          Sonora               Sonora
## 27                         Tabasco              Tabasco
## 28                      Tamaulipas           Tamaulipas
## 29                        Tlaxcala             Tlaxcala
## 30 Veracruz de Ignacio de La Llave             Veracruz
## 31                         Yucatán              Yucatán
## 32                       Zacatecas            Zacatecas
trends <- trends %>% 
  mutate(ENTIDAD = str_replace_all(ENTIDAD, c("Michoacán" = "Michoacan de Ocampo", 
                                              "Estado de México" = "México", 
                                              "San Luis Potosí" = "San Luís Potosi", 
                                              "Veracruz" = "Veracruz de Ignacio de La Llave", 
                                              "Querétaro" = "Querétaro de Arteaga"))) #Cambiamos los valores para que coincidan con los nombres comunes  de los estados

Hacer un merge con la llave “ENTIDAD”

merge(geometria_entidades, trends, by = "ENTIDAD")
## Simple feature collection with 32 features and 3 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -117.1264 ymin: 14.53401 xmax: -86.74038 ymax: 32.71877
## geographic CRS: WGS 84
## First 10 features:
##                 ENTIDAD CVE_EDO Tendencia                       geometry
## 1        Aguascalientes      01        77 POLYGON ((-102.0004 22.2332...
## 2       Baja California      02        68 POLYGON ((-114.7575 32.7162...
## 3   Baja California Sur      03        79 POLYGON ((-112.7655 28.0007...
## 4              Campeche      04        38 POLYGON ((-90.45313 20.7065...
## 5               Chiapas      07        63 POLYGON ((-93.23986 17.9497...
## 6             Chihuahua      08        63 POLYGON ((-107.2539 31.7856...
## 7      Ciudad de México      09       100 POLYGON ((-99.27946 19.1311...
## 8  Coahuila de Zaragoza      05        50 POLYGON ((-102.3296 29.8639...
## 9                Colima      06        78 POLYGON ((-104.617 19.15396...
## 10              Durango      10        71 POLYGON ((-106.2219 26.6366...
map = left_join(geometria_entidades, trends) #Hacemos el merge que logrará que todo lo de Entidad coincida con el mapa de trends

plot(map, max.plot = 1)

Crear mapa en ggplot2

library(viridis)


map %>%  # Hacemos el mapa 
  ggplot(aes(fill = Tendencia)) + 
  geom_sf(color = "gray") + 
  labs(title = "Mapa de la tendencia de Susana Distancia", #Título
       subtitle = "Búsquedas correspondientes al año pasado", #Subtítulo
       caption = "Fuente: Google Trends", #Pie 
       fill = "Métrica de tendencias de Google") + #Leyenda
  theme_bw() + 
  scale_fill_gradientn(colors = magma(begin = 0, 
                                        end = 1, 
                                        n = 10)) + 
  guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5)) + 
  theme(plot.title = element_text(hjust = 0.5, 
                                  color = "gray10", 
                                  face = "bold"), 
        plot.subtitle = element_text(hjust = 0.5, 
                                     color = "gray50", 
                                     face = "bold"), 
        plot.caption = element_text(hjust = 1), 
        axis.text = element_blank(), 
        axis.ticks = element_blank(),
        panel.background = element_blank(), 
        legend.position = "bottom") 

Lo haremos interactivo, guardándolo en un objeto llamado plt

#El mapa requiere ser trabajado para enviarlo a ggplotly
plt = map %>% 
  ggplot(aes(fill = Tendencia)) + 
  geom_sf(color = "gray") + 
  labs(title = "Mapa de la tendencia de Susana Distancia", 
       subtitle = "Búsquedas correspondientes al año pasado", 
       caption = "Fuente: Google Trends",
       fill = "Tendencia") + 
  theme_bw() + 
  scale_fill_gradientn(colors = magma(begin = 0, 
                                      end = 1, 
                                      n = 10)) + 
  guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5)) + 
  theme(plot.title = element_text(hjust = 0.5, 
                                  color = "gray10", 
                                  face = "bold"), 
        plot.subtitle = element_text(hjust = 0.5, 
                                     color = "gray50", 
                                     face = "bold"), 
        plot.caption = element_text(hjust = 1), 
        axis.text = element_blank(), 
        axis.ticks = element_blank(),
        panel.background = element_blank(), 
        legend.position = "bottom") 

Lo convertimos a ggplotly

ggplotly(plt)
mapa_interactivo = ggplotly(plt)
library(htmlwidgets)
saveWidget(mapa_interactivo, "mapasusanadistancia.html") #Generamos el mapa interactivo

Ejercicio 3. Mapas en leaflet

  1. ¿Qué es el DENUE del INEGI? El Directorio Estadístico Nacional de Unidades Económicas (DENUE) que ofrece datos de identificación, ubicación, actividad económica y tamaño de más de 5 millones de unidades económicas activas en México. Puede ser consultado en https://www.inegi.org.mx/app/mapa/denue/default.aspx

  2. Lea el archivo 01_Datos/tacos_cdmx/tacos_tortas_cdmx.shp el cual contiene los puntos latitud/longitud de las ubicaciones de los negocios con el tipo de actividad “Restaurantes con servicio de preparación de tacos y tortas”. Guarde esta información en un objeto llamado tacos_tortas.

tacos_tortas <- read_sf("01_Datos/tacos_cdmx/tacos_tortas_cdmx.shp") #Descargamos la base de datos

print(tacos_tortas, n=10)
## Simple feature collection with 10954 features and 27 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -124.4455 ymin: 10.25839 xmax: -98.953 ymax: 19.57733
## CRS:            NA
## # A tibble: 10,954 x 28
##    nom_estab   codigo_act nombre_act    per_ocu tipo_v_e_1 tipo_v_e_2 tipo_v_e_3
##    <chr>            <dbl> <chr>         <chr>   <chr>      <chr>      <chr>     
##  1 100% CARNI~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALZADA    CALLE     
##  2 153 TORTAS~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  3 37 50 FUEN~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  4 60 FUENTE ~     722514 Restaurantes~ 0 a 5 ~ EJE VIAL   AVENIDA    PRIVADA   
##  5 621 TAQUER~     722514 Restaurantes~ 6 a 10~ CALLE      VIADUCTO   VIADUCTO  
##  6 68 69 TAQU~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  7 72 TAQUERI~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  8 A BUENA HO~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALZADA   
##  9 A LA PARIL~     722514 Restaurantes~ 0 a 5 ~ AVENIDA    CALLE      CALLE     
## 10 A TAKEAR        722514 Restaurantes~ 6 a 10~ AVENIDA    CIRCUITO   CALLE     
## # ... with 10,944 more rows, and 21 more variables: numero_ext <dbl>,
## #   letra_ext <chr>, edificio <chr>, edificio_e <chr>, numero_int <dbl>,
## #   letra_int <chr>, tipo_asent <chr>, nomb_asent <chr>, nom_CenCom <chr>,
## #   num_local <chr>, cod_postal <dbl>, cve_ent <chr>, entidad <chr>,
## #   cve_mun <chr>, nom_mun <chr>, cve_loc <dbl>, localidad <chr>, ageb <chr>,
## #   manzana <dbl>, tipoUniEco <chr>, geometry <POINT>
  1. Dado el objeto tacos_tortas, quédese con los negocios cuyo nombre de establecimiento (nom_establec) deje claro que venden tacos (no queremos torterías). (Pista: use las funciones de stringr con palabras como tacos, takeria, etc.) Guarde esta información en un objeto llamado taquerias_cdmx.
pat <- rebus::  SPC %R% or1(c("TAQ", "TAK")) # creamos un rebus con las palabras TAQ y TAK, que filtre las taquerías


taquerias_chilangas <- tacos_tortas %>% 
   filter(str_detect(tacos_tortas$nom_estab, pat), !tacos_tortas$nom_estab == "LOS TACOS DE LA ABUELA TAQUERIA") #Hicimos un último filtro para quitar ese valor atípico


print(taquerias_chilangas, N=10)
## Simple feature collection with 183 features and 27 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -99.28908 ymin: 19.18455 xmax: -98.98622 ymax: 19.50816
## CRS:            NA
## # A tibble: 183 x 28
##    nom_estab   codigo_act nombre_act    per_ocu tipo_v_e_1 tipo_v_e_2 tipo_v_e_3
##  * <chr>            <dbl> <chr>         <chr>   <chr>      <chr>      <chr>     
##  1 621 TAQUER~     722514 Restaurantes~ 6 a 10~ CALLE      VIADUCTO   VIADUCTO  
##  2 68 69 TAQU~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  3 72 TAQUERI~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  4 A TAKEAR        722514 Restaurantes~ 6 a 10~ AVENIDA    CIRCUITO   CALLE     
##  5 ANEXO DE T~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  6 ANTOJITOS ~     722514 Restaurantes~ 0 a 5 ~ CALLE      ANDADOR    CALLE     
##  7 APOYO A TA~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  8 AUXILIAR D~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
##  9 BANQUETES ~     722514 Restaurantes~ 0 a 5 ~ CALLE      CALLE      CALLE     
## 10 BODEGA 4 T~     722514 Restaurantes~ 0 a 5 ~ AVENIDA    CALLE      CALLE     
## # ... with 173 more rows, and 21 more variables: numero_ext <dbl>,
## #   letra_ext <chr>, edificio <chr>, edificio_e <chr>, numero_int <dbl>,
## #   letra_int <chr>, tipo_asent <chr>, nomb_asent <chr>, nom_CenCom <chr>,
## #   num_local <chr>, cod_postal <dbl>, cve_ent <chr>, entidad <chr>,
## #   cve_mun <chr>, nom_mun <chr>, cve_loc <dbl>, localidad <chr>, ageb <chr>,
## #   manzana <dbl>, tipoUniEco <chr>, geometry <POINT>
  1. Elabore un mapa en leaflet de las taquerías en la CDMX que contenga la siguiente información:

4.1. Un mapa base (provider) de tonalidad oscura. Recuerde que puede ver una previsualización de los providers en este enlace: https://leaflet-extras.github.io/leaflet-providers/preview/

4.2. Los puntos que indiquen las ubicaciones de cada uno de estos negocios de un color contrastante con el fondo (usted decide cual color). Para esto, puede usar su sentido común o utilizar herramientas como https://webaim.org/resources/contrastchecker/, que le permiten ver que tan bueno es el contraste entre colores.

4.3. Los puntos tienen que tener un label que, cuando el usuario pase el cursor se pueda ver el nombre del establecimiento.

4.4. Los puntos tienen que tener un popup que, cuando el usuario de click en cada elemento del mapa, se muestre el nombre del establecimiento, la localidad o alcaldía en la que se encuentra y el tipo de Unidad Económica.

4.5 OPCIONAL. Coloque los polígonos de las alcaldías debajo de los puntos de las taquerías. Para esto, puede basarse en el código de la clase pasada. Igualmente, si buscando en internet ve alguna característica de R-Leaflet que le agrade, puede incluirla en su mapa.

Label_taquerias_chilangas <- lapply(str_c("<b style = 'color:red;'> Nombre: </b><br>",
                                    taquerias_chilangas$nom_estab), htmltools::HTML) #Añadimos etiquetas para el label

Popup_taquerias_chilangas <- str_c(taquerias_chilangas$nom_estab, "<br>", #Añadimos características del popup
                             "Asentamiento: ", taquerias_chilangas$nomb_asent, "<br>",
                             "Capacidad de la taquería: ", taquerias_chilangas$per_ocu, "<br>",
                             "Alcaldía: ", taquerias_chilangas$nom_mun, "<br>",
                             "CP: ", taquerias_chilangas$cod_postal)

 
leaflet() %>%
  addProviderTiles(providers$Stamen.Toner) %>% #Creamos el gráfico con un fondo de color contrastante
  addCircleMarkers(data = taquerias_chilangas,
                   color = "red",
                   radius = 5,
                   label = Label_taquerias_chilangas,
                   popup = Popup_taquerias_chilangas)
  1. Si quisiera hacer un mapa de ubicación de establecimientos que vendan Burritos… ¿Qué tendría que hacer? Describa con palabras cual sería el cambio con respecto al procedimiento anterior.

En el rebus buscaría establecimientos que venden burrito, para es crearía otro patrón simple: pat <- c(“BURR”) y luego sustituiría ese patrón en la columna nom_estab de la base tacos_tortas y eso lo guardaría en un objeto llamado burritos