Librerías
library(readr)
library (dplyr)
## Warning: package 'dplyr' was built under R version 3.6.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(sqldf)
## Loading required package: gsubfn
## Loading required package: proto
## Loading required package: RSQLite
#install.packages("plyr")
library(plyr) # installa.packages("plyr")
## Warning: package 'plyr' was built under R version 3.6.2
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
##
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
Explorar datos
str(estados)
## 'data.frame': 32 obs. of 4 variables:
## $ estado : Factor w/ 32 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ nombre : Factor w/ 32 levels "Aguascalientes",..: 1 2 3 4 7 8 5 6 9 10 ...
## $ abreviatura: Factor w/ 32 levels "Ags.","BC","BCS",..: 1 2 3 4 7 8 6 5 9 10 ...
## $ pais : Factor w/ 1 level "MX": 1 1 1 1 1 1 1 1 1 1 ...
summary(estados)
## estado nombre abreviatura pais
## 1 : 1 Aguascalientes : 1 Ags. : 1 MX:32
## 2 : 1 Baja California : 1 BC : 1
## 3 : 1 Baja California Sur: 1 BCS : 1
## 4 : 1 Campeche : 1 Camp. : 1
## 5 : 1 Chiapas : 1 Chih. : 1
## 6 : 1 Chihuahua : 1 Chis. : 1
## (Other):26 (Other) :26 (Other):26
str(municipios)
## 'data.frame': 2466 obs. of 3 variables:
## $ municipio: Factor w/ 2466 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ nombre : Factor w/ 2326 levels "Abalá","Abasolo",..: 36 128 240 434 525 764 1079 1174 1299 1342 ...
## $ estado : Factor w/ 32 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(municipios)
## municipio nombre estado
## 1 : 1 Benito Juárez : 7 20 : 576
## 2 : 1 Ocampo : 6 21 : 217
## 3 : 1 Emiliano Zapata: 5 30 : 213
## 4 : 1 Hidalgo : 5 14 : 125
## 5 : 1 Juárez : 5 15 : 125
## 6 : 1 Morelos : 5 7 : 118
## (Other):2460 (Other) :2433 (Other):1092
Juntar datos: SQL merge y join
Alternativa 1. Por SQL librería sqldf
- Solo se muestra los primero 6y últimos 6 registros con head() y tail()
estadosmunicipios <- sqldf("select estados.estado, estados.nombre,
abreviatura,pais, municipios.municipio, municipios.nombre,
municipios.estado
from estados, municipios
where estados.estado = municipios.estado order by estados.abreviatura, municipios.municipio")
head(estadosmunicipios)
## estado nombre abreviatura pais municipio nombre..6 estado..7
## 1 1 Aguascalientes Ags. MX 1 Aguascalientes 1
## 2 1 Aguascalientes Ags. MX 10 San José de Gracia 1
## 3 1 Aguascalientes Ags. MX 11 Tepezalá 1
## 4 1 Aguascalientes Ags. MX 2 Asientos 1
## 5 1 Aguascalientes Ags. MX 3 Calvillo 1
## 6 1 Aguascalientes Ags. MX 4 Cosío 1
tail(estadosmunicipios)
## estado nombre abreviatura pais municipio nombre..6
## 2461 32 Zacatecas Zac. MX 2461 Villa de Cos
## 2462 32 Zacatecas Zac. MX 2462 Villa García
## 2463 32 Zacatecas Zac. MX 2463 Villa González Ortega
## 2464 32 Zacatecas Zac. MX 2464 Villa Hidalgo
## 2465 32 Zacatecas Zac. MX 2465 Villanueva
## 2466 32 Zacatecas Zac. MX 2466 Zacatecas
## estado..7
## 2461 32
## 2462 32
## 2463 32
## 2464 32
## 2465 32
## 2466 32
Alternativa 2. merge
estadosmunicipios <- merge(estados, municipios, by='estado')
head(estadosmunicipios)
## estado nombre.x abreviatura pais municipio nombre.y
## 1 1 Aguascalientes Ags. MX 1 Aguascalientes
## 2 1 Aguascalientes Ags. MX 2 Asientos
## 3 1 Aguascalientes Ags. MX 3 Calvillo
## 4 1 Aguascalientes Ags. MX 4 Cosío
## 5 1 Aguascalientes Ags. MX 5 El Llano
## 6 1 Aguascalientes Ags. MX 6 Jesús María
tail(estadosmunicipios)
## estado nombre.x abreviatura pais municipio nombre.y
## 2461 9 Distrito Federal DF MX 276 Miguel Hidalgo
## 2462 9 Distrito Federal DF MX 277 Milpa Alta
## 2463 9 Distrito Federal DF MX 278 Tláhuac
## 2464 9 Distrito Federal DF MX 279 Tlalpan
## 2465 9 Distrito Federal DF MX 280 Venustiano Carranza
## 2466 9 Distrito Federal DF MX 281 Xochimilco
Alternativa 3 join librería: plyr
estadosmunicipios <- join(estados, municipios, by='estado',
type='left')
head(estadosmunicipios)
## estado nombre abreviatura pais municipio nombre
## 1 1 Aguascalientes Ags. MX 1 Aguascalientes
## 2 1 Aguascalientes Ags. MX 2 Asientos
## 3 1 Aguascalientes Ags. MX 3 Calvillo
## 4 1 Aguascalientes Ags. MX 4 Cosío
## 5 1 Aguascalientes Ags. MX 5 El Llano
## 6 1 Aguascalientes Ags. MX 6 Jesús María
tail(estadosmunicipios)
## estado nombre abreviatura pais municipio nombre
## 2461 32 Zacatecas Zac. MX 2461 Villa de Cos
## 2462 32 Zacatecas Zac. MX 2462 Villa García
## 2463 32 Zacatecas Zac. MX 2463 Villa González Ortega
## 2464 32 Zacatecas Zac. MX 2464 Villa Hidalgo
## 2465 32 Zacatecas Zac. MX 2465 Villanueva
## 2466 32 Zacatecas Zac. MX 2466 Zacatecas
# Aqui left y right sale igual porque siempre
# hay municipios de estados
# ALTERNATIVA 3: join: type=right: library(plyr)
estadosmunicipios <- join(estados, municipios, by='estado',
type='right')
head(estadosmunicipios)
## estado nombre abreviatura pais municipio nombre
## 1 1 Aguascalientes Ags. MX 1 Aguascalientes
## 2 1 Aguascalientes Ags. MX 2 Asientos
## 3 1 Aguascalientes Ags. MX 3 Calvillo
## 4 1 Aguascalientes Ags. MX 4 Cosío
## 5 1 Aguascalientes Ags. MX 5 El Llano
## 6 1 Aguascalientes Ags. MX 6 Jesús María
tail(estadosmunicipios)
## estado nombre abreviatura pais municipio nombre
## 2461 32 Zacatecas Zac. MX 2461 Villa de Cos
## 2462 32 Zacatecas Zac. MX 2462 Villa García
## 2463 32 Zacatecas Zac. MX 2463 Villa González Ortega
## 2464 32 Zacatecas Zac. MX 2464 Villa Hidalgo
## 2465 32 Zacatecas Zac. MX 2465 Villanueva
## 2466 32 Zacatecas Zac. MX 2466 Zacatecas
Alternativa 4.1: left_join: library dplyr()
estadosmunicipios <- right_join(estados, municipios, by = 'estado')
head(estadosmunicipios)
## estado nombre.x abreviatura pais municipio nombre.y
## 1 1 Aguascalientes Ags. MX 1 Aguascalientes
## 2 1 Aguascalientes Ags. MX 2 Asientos
## 3 1 Aguascalientes Ags. MX 3 Calvillo
## 4 1 Aguascalientes Ags. MX 4 Cosío
## 5 1 Aguascalientes Ags. MX 5 El Llano
## 6 1 Aguascalientes Ags. MX 6 Jesús María
tail(estadosmunicipios)
## estado nombre.x abreviatura pais municipio nombre.y
## 2461 32 Zacatecas Zac. MX 2461 Villa de Cos
## 2462 32 Zacatecas Zac. MX 2462 Villa García
## 2463 32 Zacatecas Zac. MX 2463 Villa González Ortega
## 2464 32 Zacatecas Zac. MX 2464 Villa Hidalgo
## 2465 32 Zacatecas Zac. MX 2465 Villanueva
## 2466 32 Zacatecas Zac. MX 2466 Zacatecas
Alternativa 4.2: right_join: library dplyr()
estadosmunicipios <- right_join(estados, municipios, by = 'estado')
head(estadosmunicipios)
## estado nombre.x abreviatura pais municipio nombre.y
## 1 1 Aguascalientes Ags. MX 1 Aguascalientes
## 2 1 Aguascalientes Ags. MX 2 Asientos
## 3 1 Aguascalientes Ags. MX 3 Calvillo
## 4 1 Aguascalientes Ags. MX 4 Cosío
## 5 1 Aguascalientes Ags. MX 5 El Llano
## 6 1 Aguascalientes Ags. MX 6 Jesús María
tail(estadosmunicipios)
## estado nombre.x abreviatura pais municipio nombre.y
## 2461 32 Zacatecas Zac. MX 2461 Villa de Cos
## 2462 32 Zacatecas Zac. MX 2462 Villa García
## 2463 32 Zacatecas Zac. MX 2463 Villa González Ortega
## 2464 32 Zacatecas Zac. MX 2464 Villa Hidalgo
## 2465 32 Zacatecas Zac. MX 2465 Villanueva
## 2466 32 Zacatecas Zac. MX 2466 Zacatecas
Alternativa 4.3: inner_join: library dplyr()
estadosmunicipios <- inner_join(estados, municipios, by = 'estado')
head(estadosmunicipios)
## estado nombre.x abreviatura pais municipio nombre.y
## 1 1 Aguascalientes Ags. MX 1 Aguascalientes
## 2 1 Aguascalientes Ags. MX 2 Asientos
## 3 1 Aguascalientes Ags. MX 3 Calvillo
## 4 1 Aguascalientes Ags. MX 4 Cosío
## 5 1 Aguascalientes Ags. MX 5 El Llano
## 6 1 Aguascalientes Ags. MX 6 Jesús María
tail(estadosmunicipios)
## estado nombre.x abreviatura pais municipio nombre.y
## 2461 32 Zacatecas Zac. MX 2461 Villa de Cos
## 2462 32 Zacatecas Zac. MX 2462 Villa García
## 2463 32 Zacatecas Zac. MX 2463 Villa González Ortega
## 2464 32 Zacatecas Zac. MX 2464 Villa Hidalgo
## 2465 32 Zacatecas Zac. MX 2465 Villanueva
## 2466 32 Zacatecas Zac. MX 2466 Zacatecas
Alternativa 5
- Utilizando libreria data.table
- data.tabla. Otro tipo de dato.
- No es un data.frame propiamente aunque se comporta de manera similar
library(data.table) # Otra librería
##
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
##
## between, first, last
estadosDT <- data.table(estados, key = "estado")
municipiosDT <- data.table(municipios, key = "municipio")
class(estadosDT)
## [1] "data.table" "data.frame"
class(municipiosDT)
## [1] "data.table" "data.frame"
estadosmunicipios <- join(estadosDT, municipiosDT, by='estado')
head(estadosmunicipios)
## estado nombre abreviatura pais municipio nombre
## 1: 1 Aguascalientes Ags. MX 1 Aguascalientes
## 2: 1 Aguascalientes Ags. MX 2 Asientos
## 3: 1 Aguascalientes Ags. MX 3 Calvillo
## 4: 1 Aguascalientes Ags. MX 4 Cosío
## 5: 1 Aguascalientes Ags. MX 5 El Llano
## 6: 1 Aguascalientes Ags. MX 6 Jesús María
tail(estadosmunicipios)
## estado nombre abreviatura pais municipio nombre
## 1: 32 Zacatecas Zac. MX 2461 Villa de Cos
## 2: 32 Zacatecas Zac. MX 2462 Villa García
## 3: 32 Zacatecas Zac. MX 2463 Villa González Ortega
## 4: 32 Zacatecas Zac. MX 2464 Villa Hidalgo
## 5: 32 Zacatecas Zac. MX 2465 Villanueva
## 6: 32 Zacatecas Zac. MX 2466 Zacatecas
Que sucede si los campos de asociación se llaman de manera diferente?
- Se ordena el conjunto de datos generado
names(estados) <- c('estado1', 'nombre', 'abreviatura', 'pais')
estados
## estado1 nombre abreviatura pais
## 1 1 Aguascalientes Ags. MX
## 2 2 Baja California BC MX
## 3 3 Baja California Sur BCS MX
## 4 4 Campeche Camp. MX
## 5 5 Coahuila de Zaragoza Coah. MX
## 6 6 Colima Col. MX
## 7 7 Chiapas Chis. MX
## 8 8 Chihuahua Chih. MX
## 9 9 Distrito Federal DF MX
## 10 10 Durango Dgo. MX
## 11 11 Guanajuato Gto. MX
## 12 12 Guerrero Gro. MX
## 13 13 Hidalgo Hgo. MX
## 14 14 Jalisco Jal. MX
## 15 15 México Mex. MX
## 16 16 Michoacán de Ocampo Mich. MX
## 17 17 Morelos Mor. MX
## 18 18 Nayarit Nay. MX
## 19 19 Nuevo León NL MX
## 20 20 Oaxaca Oax. MX
## 21 21 Puebla Pue. MX
## 22 22 Querétaro Qro. MX
## 23 23 Quintana Roo Q. Roo MX
## 24 24 San Luis Potosí SLP MX
## 25 25 Sinaloa Sin. MX
## 26 26 Sonora Son. MX
## 27 27 Tabasco Tab. MX
## 28 28 Tamaulipas Tamps. MX
## 29 29 Tlaxcala Tlax. MX
## 30 30 Veracruz de Ignacio de la Llave Ver. MX
## 31 31 Yucatán Yuc. MX
## 32 32 Zacatecas Zac. MX
estadosmunicipios <- merge(estados, municipios,
by.x = 'estado1', by.y = 'estado')
estadosmunicipios <- arrange(estadosmunicipios, abreviatura)
head(estadosmunicipios)
## estado1 nombre.x abreviatura pais municipio nombre.y
## 1 1 Aguascalientes Ags. MX 1 Aguascalientes
## 2 1 Aguascalientes Ags. MX 2 Asientos
## 3 1 Aguascalientes Ags. MX 3 Calvillo
## 4 1 Aguascalientes Ags. MX 4 Cosío
## 5 1 Aguascalientes Ags. MX 5 El Llano
## 6 1 Aguascalientes Ags. MX 6 Jesús María
tail(estadosmunicipios)
## estado1 nombre.x abreviatura pais municipio nombre.y
## 2461 32 Zacatecas Zac. MX 2461 Villa de Cos
## 2462 32 Zacatecas Zac. MX 2462 Villa García
## 2463 32 Zacatecas Zac. MX 2463 Villa González Ortega
## 2464 32 Zacatecas Zac. MX 2464 Villa Hidalgo
## 2465 32 Zacatecas Zac. MX 2465 Villanueva
## 2466 32 Zacatecas Zac. MX 2466 Zacatecas
Análisis
Cuantos municipios por estado
- Hay muchas alternativas, aquí se utiliza table() para genrar una tabla de frecuencia
- Var1 y Freq son nobre s decolumnas que genera table()
- Luego convertir ese table() a data.frame para poder graficar
- Además de hacer factor la variable Var1 que es abreviatura
CuantosMunicipiosEstados <- data.frame(table(estadosmunicipios$abreviatura))
CuantosMunicipiosEstados$Var1 <- as.factor(CuantosMunicipiosEstados$Var1)
CuantosMunicipiosEstados
## Var1 Freq
## 1 Ags. 11
## 2 BC 5
## 3 BCS 5
## 4 Camp. 11
## 5 Chih. 67
## 6 Chis. 118
## 7 Coah. 38
## 8 Col. 10
## 9 DF 16
## 10 Dgo. 39
## 11 Gro. 81
## 12 Gto. 46
## 13 Hgo. 84
## 14 Jal. 125
## 15 Mex. 125
## 16 Mich. 114
## 17 Mor. 33
## 18 Nay. 20
## 19 NL 51
## 20 Oax. 576
## 21 Pue. 217
## 22 Q. Roo 10
## 23 Qro. 18
## 24 Sin. 18
## 25 SLP 58
## 26 Son. 72
## 27 Tab. 17
## 28 Tamps. 44
## 29 Tlax. 60
## 30 Ver. 213
## 31 Yuc. 106
## 32 Zac. 58
Ordenar de mayor a menor
- Se utiliza arrange() de librería dplyr
# Ordenar de Mayor a menor por Frecuencia. arrange es de la Librería dplyr
CuantosMunicipiosEstados <- arrange(CuantosMunicipiosEstados, desc(Freq))
CuantosMunicipiosEstados
## Var1 Freq
## 1 Oax. 576
## 2 Pue. 217
## 3 Ver. 213
## 4 Jal. 125
## 5 Mex. 125
## 6 Chis. 118
## 7 Mich. 114
## 8 Yuc. 106
## 9 Hgo. 84
## 10 Gro. 81
## 11 Son. 72
## 12 Chih. 67
## 13 Tlax. 60
## 14 SLP 58
## 15 Zac. 58
## 16 NL 51
## 17 Gto. 46
## 18 Tamps. 44
## 19 Dgo. 39
## 20 Coah. 38
## 21 Mor. 33
## 22 Nay. 20
## 23 Qro. 18
## 24 Sin. 18
## 25 Tab. 17
## 26 DF 16
## 27 Ags. 11
## 28 Camp. 11
## 29 Col. 10
## 30 Q. Roo 10
## 31 BC 5
## 32 BCS 5
Generar los top y bot 5 con head() y tail()
top5 <- head(CuantosMunicipiosEstados, 5) # Los primeros 5
bot5 <- tail(CuantosMunicipiosEstados, 5) # Los ultimos 5
Visualizar
# Gráfica de Barra para determinar cuantos municipios de cada estado
barplot(top5$Freq, names.arg = top5$Var1)

barplot(bot5$Freq, names.arg = bot5$Var1)

Visualizar utilizando ggplot2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.6.2
# Creando con ggplot
ggplot(data = top5,
mapping = aes(x = Var1, y = Freq))

# Agregando punto
ggplot(data = top5,
mapping = aes(x = Var1, y = Freq)) +
geom_point()

# Modificando la figura del punto
ggplot(data = top5,
mapping = aes(x = Var1, y = Freq)) +
geom_point(shape=21)

Creando gráfica con datos originales
- Notar que el campo se llama estado1 por la última alternativa de join
# Graficando barra con los datos originales de estadosmunicipios
ggplot(estadosmunicipios, aes(estado1)) +
geom_bar()

ggplot(estadosmunicipios, aes(x=abreviatura)) +
geom_bar()
