Datos ordenados
- Importar los datos. En este caso son de excel y se usa la función read_excel(). El argumento skip permite omitir filas al momento de importar las bases de datos.
- Cambiar los nombres a través de la biblioteca janitor utilizando la función clean_names().
- Eliminar la última fila de la base de datos porque contiene totales de cada columna. Esta fila no es un individuo bajo análisis, en realidad es un resultado.
- Seleccionar las columnas de interés.
- Conversión de formato ancho a formato largo a través de la función pivot_longer(). Disminuyen las columnas y se aumentan las filas (total = 8 x 1122 = 8976). La nueva base de datos además del formato largo permitirá tener datos ordenados.
- Fraccionamiento de columna de nombre “variable” en cuatro nuevas columnas. La primera contiene información de el tipo de animal, la segunda y tercera haceb referencia a la edada del animal y la cuarta describe la unidad de tiempo.
- Coercionar la nueva variable “edad2” a tipo numérico. Buscamos con esto que en donde esté la palabra “ano” le asigne NA. En el siguiente paso podremos unir “edad1” y “edad2” en una sola columna que represente la edad. Además no se tiene en cuenta la variable “unidad”
Paso 1
# Bibliotecas: readr y tidyr
library(tidyverse)
library(readxl)
censo <- read_excel(path = "BOVINOS-CENSO-2020.xlsx", skip = 4)
censo
names(censo)
## [1] "DEPARTAMENTO" "MUNICIPIO"
## [3] "CODIGO MUNICIPIO" "TERNERAS < 1 AÑO"
## [5] "TERNEROS < 1 AÑO" "HEMBRAS 1 - 2 AÑOS"
## [7] "MACHOS 1 - 2 AÑOS" "HEMBRAS 2 - 3 AÑOS"
## [9] "MACHOS 2 - 3 AÑOS" "HEMBRAS > 3 AÑOS"
## [11] "MACHOS > 3 AÑOS" "TOTAL BOVINOS - 2019"
## [13] "No DE FINCAS 1 A 50" "No DE FINCAS 51 A 100"
## [15] "No DE FINCAS 101 A 500" "No DE FINCAS 501 O MAS"
## [17] "TOTAL FINCAS CON BOVINOS - 2019"
Paso 2
# 2. Editando nombres (limpiando)
library(janitor)
censo2 <- clean_names(censo)
names(censo2)
## [1] "departamento" "municipio"
## [3] "codigo_municipio" "terneras_1_ano"
## [5] "terneros_1_ano" "hembras_1_2_anos"
## [7] "machos_1_2_anos" "hembras_2_3_anos"
## [9] "machos_2_3_anos" "hembras_3_anos"
## [11] "machos_3_anos" "total_bovinos_2019"
## [13] "no_de_fincas_1_a_50" "no_de_fincas_51_a_100"
## [15] "no_de_fincas_101_a_500" "no_de_fincas_501_o_mas"
## [17] "total_fincas_con_bovinos_2019"
Paso 3
# 3. Eliminando última fila
censo3 <- censo2[-nrow(censo2), ]
censo3
Paso 4
# 4. Seleccionando variables
variables <- names(censo3)[c(1, 2, 4:11)]
variables
## [1] "departamento" "municipio" "terneras_1_ano" "terneros_1_ano"
## [5] "hembras_1_2_anos" "machos_1_2_anos" "hembras_2_3_anos" "machos_2_3_anos"
## [9] "hembras_3_anos" "machos_3_anos"
censo4 <- censo3[, variables]
censo4
Paso 5
- Argumento a utilizar de la función pivot_longer():
- data: base de datos sobre la cual se quiere operar
- cols: son las columnas a tener en cuenta para la conversión de formato ancho a largo.
- names_to: (carácter) nueva variable que contiene los nombres o encabezados de las columnas sobre las cuales se aplica la conversión de formato.
- values_to: (carácter) nueva variable que contiene los valores de las celdas sobre las cuales se aplica la conversión de formato.
# 5. Formato ancho a largo con pivot_longer()
censo5 <- pivot_longer(data = censo4, cols = !c(departamento, municipio),
names_to = "variable", values_to = "animales")
dim(censo5)
## [1] 8976 4
censo5
Paso 6
- Argumentos a utilizar de la función separate():
- data: base de datos
- col: variable de interés para fraccionamiento
- into: (carácter) nombre de nuevas variables que resultan luego de fraccionar la columna del argumento “col”
- sep: (carácter) separador. En este caso es el guión bajo (_)
- remove: (lógico) permite controlar si se remueve o no la variable implicada en el fraccionamiento.
censo6 <- separate(data = censo5,
col = variable,
into = c("tipo", "edad1", "edad2", "unidad"),
sep = "_",
remove = TRUE)
censo6
Paso 7
- Argumento a utilizar con la función unite():
- data: base de datos.
- col: (carácter) nombre de nueva variable que se obtiene al unir otras columnas.
- sep: (carácter) separador para la nueva variable.
- remove: (lógico) permite remover las columnas implicadas en la unión.
# Conversión a numérico
censo6$edad2 <- as.numeric(censo6$edad2)
censo6
# Nueva base de datos
censo7 <- unite(data = censo6,
col = "edad",
edad1, edad2,
sep = "-",
remove = TRUE)
censo7
# Eliminando la columna "unidad"
censo8 <- censo7[, -5]
censo8
Concatenando procesos
- La concatenación de diferentes tareas o procesos las vamos a ejecutar a través del operador de tubería “%>%”.
- La función slice() permite filtrar por posición. La función slice() pertence a la biblioteca dplyr.
- La función select() permite seleccionar columnas por nombre o posición. La función select() pertenece a la biblioteca dplyr.
- La función mutate() permite crear o editar variables. La función mutate() pertenece a la biblioteca dplyr.
- Paso extra: pasar las variables “departamento” y “municipio” a minúscula y luego la primera letra llevarla a mayúscula. Para convertir un texto (character) de mayúsculas a minúsculas R tiene la función tolower() y el proceso inverso se obtiene con la función toupper(). La biblioteca Hmisc con la función capitalize() permite tener la primera letra en mayúscula.
library(tidyverse)
library(readxl)
library(janitor)
library(Hmisc)
data_censo <-
read_excel(path = "BOVINOS-CENSO-2020.xlsx", skip = 4) %>%
clean_names() %>%
slice(-1123) %>%
select(departamento, municipio, terneras_1_ano:machos_3_anos) %>%
pivot_longer(
cols = !c(departamento, municipio),
names_to = "variable",
values_to = "animales"
) %>%
separate(
col = variable,
into = c("tipo", "edad1", "edad2", "unidad"),
sep = "_",
remove = TRUE
) %>%
mutate(
edad2 = as.numeric(edad2),
departamento = capitalize(tolower(departamento)),
municipio = capitalize(tolower(municipio)),
tipo = capitalize(tipo)
) %>%
unite(col = "edad",
edad1,
edad2,
sep = "-",
remove = TRUE) %>%
select(-unidad)
data_censo
Anexo
datos_julian <- read_csv(file = "BasesDatos_Actividad1/Evaluaciones_Agropecuarias_Municipales_EVA - Julian.csv")
datos_laura <- read_csv(file = "BasesDatos_Actividad1/estadisticas_gandao - Laura.csv")
datos_yuliana <- read_csv(file = "BasesDatos_Actividad1/Caracterizaci_n_de_Proyectos_Integrales_de_Desarrollo_Agropecuario_y_Rural__PIDAR_ - Yuliana.csv")
# Estructura de datos
str(datos_julian)
## tibble [206,068 x 17] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ CÓD.
## DEP. : num [1:206068] 15 25 25 54 54 68 25 25 54 68 ...
## $ DEPARTAMENTO : chr [1:206068] "BOYACA" "CUNDINAMARCA" "CUNDINAMARCA" "NORTE DE SANTANDER" ...
## $ CÓD. MUN. : num [1:206068] 15114 25754 25214 54405 54518 ...
## $ MUNICIPIO : chr [1:206068] "BUSBANZA" "SOACHA" "COTA" "LOS PATIOS" ...
## $ GRUPO
## DE CULTIVO : chr [1:206068] "HORTALIZAS" "HORTALIZAS" "HORTALIZAS" "HORTALIZAS" ...
## $ SUBGRUPO
## DE CULTIVO : chr [1:206068] "ACELGA" "ACELGA" "ACELGA" "ACELGA" ...
## $ CULTIVO : chr [1:206068] "ACELGA" "ACELGA" "ACELGA" "ACELGA" ...
## $ DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO: chr [1:206068] "ACELGA" "ACELGA" "ACELGA" "ACELGA" ...
## $ AÑO : num [1:206068] 2006 2006 2006 2006 2006 ...
## $ PERIODO : chr [1:206068] "2006B" "2006B" "2006B" "2006B" ...
## $ Área Sembrada
## (ha) : num [1:206068] 2 82 2 3 1 1 72 2 1 1 ...
## $ Área Cosechada
## (ha) : num [1:206068] 1 80 2 3 1 1 70 2 1 1 ...
## $ Producción
## (t) : num [1:206068] 1 1440 26 48 5 6 1260 34 5 6 ...
## $ Rendimiento
## (t/ha) : num [1:206068] 1 18 17.3 16 10 ...
## $ ESTADO FISICO PRODUCCION : chr [1:206068] "FRUTO FRESCO" "FRUTO FRESCO" "FRUTO FRESCO" "FRUTO FRESCO" ...
## $ NOMBRE
## CIENTIFICO : chr [1:206068] "BETA VULGARIS" "BETA VULGARIS" "BETA VULGARIS" "BETA VULGARIS" ...
## $ CICLO DE CULTIVO : chr [1:206068] "TRANSITORIO" "TRANSITORIO" "TRANSITORIO" "TRANSITORIO" ...
## - attr(*, "spec")=
## .. cols(
## .. `CÓD.
## .. DEP.` = col_double(),
## .. DEPARTAMENTO = col_character(),
## .. `CÓD. MUN.` = col_double(),
## .. MUNICIPIO = col_character(),
## .. `GRUPO
## .. DE CULTIVO` = col_character(),
## .. `SUBGRUPO
## .. DE CULTIVO` = col_character(),
## .. CULTIVO = col_character(),
## .. `DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO` = col_character(),
## .. AÑO = col_double(),
## .. PERIODO = col_character(),
## .. `Área Sembrada
## .. (ha)` = col_double(),
## .. `Área Cosechada
## .. (ha)` = col_double(),
## .. `Producción
## .. (t)` = col_double(),
## .. `Rendimiento
## .. (t/ha)` = col_double(),
## .. `ESTADO FISICO PRODUCCION` = col_character(),
## .. `NOMBRE
## .. CIENTIFICO` = col_character(),
## .. `CICLO DE CULTIVO` = col_character()
## .. )
str(datos_laura)
## tibble [5 x 24] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ AÑO : num [1:5] 2014 2012 2011 2013 2015
## $ INVENTARIO GANADO BOVINO MACHOS : num [1:5] 263 251 273 247 283
## $ INVENTARIO GANADO BOVINO HEMBRAS : num [1:5] 574 606 623 578 591
## $ TOTAL INVENTARIO GANADO BOVINO : num [1:5] 837 857 897 826 874
## $ AREA EN PASTOS HAS : num [1:5] 724 688 697 717 758
## $ N° CABEZAS POR HA : num [1:5] 116 124 129 115 115
## $ NATALIDAD : num [1:5] 51 51 54 50.3 53.1
## $ PRODUCCIÓN LECHE LTS/AÑO : chr [1:5] "170.994.379" "170.274.508" "195.810.769" "157.730.899" ...
## $ PRODUCCIÓN LECHE LT/DÍA : num [1:5] 25 25 27 26 27
## $ PRECIO PROMEDIO LECHE $LT/AÑO : num [1:5] 7370 7070 7015 6950 7976
## $ SACRIFICIO ANIMAL MACHO : num [1:5] 5.3 5.05 7.13 4.9 5.59
## $ SACRIFICIO ANIMAL HEMBRA : num [1:5] 47.3 50.9 42.2 42.6 45.6
## $ TOTAL SACRIFICIO : num [1:5] 52.6 55.9 49.3 47.5 51.2
## $ PRECIO CARNE $/KG PIE MACHO : num [1:5] 3172 2623 2434 2680 3153
## $ PRECIO CARNE $/KG PIE HEMBRA : num [1:5] 2.42 2.08 1.93 2.35 2.61
## $ N° PREDIOS GANADERÍA BOVINA : num [1:5] 13.8 13.4 13 13.6 14.1
## $ PREDIOS < 50 BOVINOS - PREDIOS : num [1:5] 9.41 9.16 8.75 9.26 10.23
## $ PREDIOS 51 - 100 BOVINOS - PREDIOS : num [1:5] 2.09 2.03 1.94 2.06 1.9
## $ PREDIOS 101 - 250 BOVINOS - PREDIOS : num [1:5] 1.52 1.49 1.42 1.5 1.34
## $ PREDIOS > 251 BOVINOS - PREDIOS : num [1:5] 749 730 697 737 615
## $ INGRESO PRODUCCIÓN LECHE $/AÑO : num [1:5] 1.26e+11 1.20e+11 1.37e+11 1.10e+11 1.33e+11
## $ PESO PROMEDIO ANIMAL SACRIFICADO MACHO : num [1:5] 467 458 454 480 456
## $ PESO PROMEDIO ANIMAL SACRIFICADO HEMBRA: num [1:5] 364 372 368 368 375
## $ INGRESO SACRIFICIO $/AÑO : num [1:5] 4.96e+10 4.56e+10 3.79e+10 4.33e+10 5.27e+10
## - attr(*, "spec")=
## .. cols(
## .. AÑO = col_double(),
## .. `INVENTARIO GANADO BOVINO MACHOS` = col_double(),
## .. `INVENTARIO GANADO BOVINO HEMBRAS` = col_double(),
## .. `TOTAL INVENTARIO GANADO BOVINO` = col_double(),
## .. `AREA EN PASTOS HAS` = col_double(),
## .. `N° CABEZAS POR HA` = col_double(),
## .. NATALIDAD = col_double(),
## .. `PRODUCCIÓN LECHE LTS/AÑO` = col_character(),
## .. `PRODUCCIÓN LECHE LT/DÍA` = col_double(),
## .. `PRECIO PROMEDIO LECHE $LT/AÑO` = col_double(),
## .. `SACRIFICIO ANIMAL MACHO` = col_double(),
## .. `SACRIFICIO ANIMAL HEMBRA` = col_double(),
## .. `TOTAL SACRIFICIO` = col_double(),
## .. `PRECIO CARNE $/KG PIE MACHO` = col_double(),
## .. `PRECIO CARNE $/KG PIE HEMBRA` = col_double(),
## .. `N° PREDIOS GANADERÍA BOVINA` = col_double(),
## .. `PREDIOS < 50 BOVINOS - PREDIOS` = col_double(),
## .. `PREDIOS 51 - 100 BOVINOS - PREDIOS` = col_double(),
## .. `PREDIOS 101 - 250 BOVINOS - PREDIOS` = col_double(),
## .. `PREDIOS > 251 BOVINOS - PREDIOS` = col_double(),
## .. `INGRESO PRODUCCIÓN LECHE $/AÑO` = col_double(),
## .. `PESO PROMEDIO ANIMAL SACRIFICADO MACHO` = col_double(),
## .. `PESO PROMEDIO ANIMAL SACRIFICADO HEMBRA` = col_double(),
## .. `INGRESO SACRIFICIO $/AÑO` = col_double()
## .. )
str(datos_yuliana)
## tibble [232 x 19] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ BP : num [1:232] 1 2 3 4 5 6 7 8 9 10 ...
## $ No. VP : num [1:232] 1 2 3 4 5 6 7 8 9 10 ...
## $ Nombre Proyecto : chr [1:232] "Implementar un sistema de ganadería silvopastoril, doble propósito con la compra de 60 hembras preñadas (girola"| __truncated__ "Fortalecimiento del cultivo de arroz y caña panelera, con la implementación de tecnologías a partir de la dotac"| __truncated__ "Implementar un modelo piscícola para la producción de tilapia roja bajo el sistema de BIOFLOC en la vereda Mira"| __truncated__ "Mejorar las capacidades productivas para la agregación de valor mediante el mejoramiento de la infraestructura "| __truncated__ ...
## $ Departamento : chr [1:232] "CAQUETA" "NARIÑO" "CAQUETA" "MAGDALENA" ...
## $ Municipio : chr [1:232] "SAN VICENTE DEL CAGUÁN" "SAN ANDRÉS DE TUMACO" "SAN VICENTE DEL CAGUÁN" "ZONA BANANERA" ...
## $ Total beneficiarios : num [1:232] 46 19 52 150 97 35 27 25 30 77 ...
## $ Hombres : num [1:232] 26 7 36 121 76 30 16 21 18 67 ...
## $ Mujeres : num [1:232] 20 12 16 29 21 5 11 4 12 10 ...
## $ Total Víctimas : num [1:232] 0 0 31 0 0 0 0 16 0 40 ...
## $ Valor cofinanciado ADR : num [1:232] 5.34e+08 1.85e+08 9.06e+08 2.95e+09 5.00e+08 ...
## $ Valor encargo fiduciario : chr [1:232] "N/A" "N/A" "N/A" "N/A" ...
## $ Valor total cofinanciación ADR : num [1:232] 5.34e+08 1.85e+08 9.06e+08 2.95e+09 5.00e+08 ...
## $ Valor Contrapartida : num [1:232] 1.16e+08 2.65e+08 1.05e+08 6.66e+08 5.81e+08 ...
## $ Valor total proyecto : num [1:232] 6.50e+08 4.50e+08 1.01e+09 3.61e+09 1.08e+09 ...
## $ Hectáreas : num [1:232] 40 64 1 411 98 100 27 19 150 77 ...
## $ Resolución : num [1:232] 1220 1234 1322 1307 1215 ...
## $ Fecha resolución : chr [1:232] "06/29/2018 12:00:00 AM" "07/06/2017 12:00:00 AM" "08/15/2017 12:00:00 AM" "08/04/2017 12:00:00 AM" ...
## $ Vigencia : num [1:232] 2017 2017 2017 2017 2017 ...
## $ Lineamiento de consejo directivo: chr [1:232] "N/A" "N/A" "N/A" "N/A" ...
## - attr(*, "spec")=
## .. cols(
## .. BP = col_double(),
## .. `No. VP` = col_double(),
## .. `Nombre Proyecto` = col_character(),
## .. Departamento = col_character(),
## .. Municipio = col_character(),
## .. `Total beneficiarios` = col_double(),
## .. Hombres = col_double(),
## .. Mujeres = col_double(),
## .. `Total Víctimas` = col_double(),
## .. `Valor cofinanciado ADR` = col_double(),
## .. `Valor encargo fiduciario` = col_character(),
## .. `Valor total cofinanciación ADR` = col_double(),
## .. `Valor Contrapartida` = col_double(),
## .. `Valor total proyecto` = col_double(),
## .. Hectáreas = col_double(),
## .. Resolución = col_double(),
## .. `Fecha resolución` = col_character(),
## .. Vigencia = col_double(),
## .. `Lineamiento de consejo directivo` = col_character()
## .. )
dim(datos_julian)
## [1] 206068 17
dim(datos_laura)
## [1] 5 24
dim(datos_yuliana)
## [1] 232 19
head(datos_julian)
Pregunta clase
censo_prueba <- censo6
censo_prueba$unidad[is.na(censo_prueba$unidad)] <- "Año"
censo_prueba