Manejo de datos

Estadística

Author

Edimer David Jaramillo

Bibliotecas

Code
library(tidyverse)
library(janitor)
library(readxl)
library(vroom)

Datos

  • Créditos agropecuarios
  • Evaluaciones agropecuarias

Evaluaciones agropecuarias

Code
df_evas <- read_excel("datos-ejemplos/Base agrícola 2019 - 2023.xlsx", 
                      skip = 6) |> 
  clean_names()

df_evas |> head()

Créditos agropecuarios

Code
df_creditos <- 
  vroom("datos-ejemplos/Colocaciones_de_Cr_dito_Sector_Agropecuario_-_2021-_2024_20240910.csv") |> 
  clean_names()

df_creditos |> head()

Preguntas

  • ¿Es posible unir las dos bases de datos? ¿Es más fácil si filtramos un solo cultivo?
  • ¿Cuál es el rango de tiempo en ambas tablas?
  • ¿Cuál es el área perdida total en las evaluaciones agropecuarias?
  • ¿Cada año cuánta área se destina para fines agrícolas en Colombia?
  • ¿Cada año cuál es el total de dinero en créditos agropecuarios?
  • ¿Existen tendencias por municipios o departamentos?
  • ¿Existen tendencias por género en los créditos agropecuarios?
  • ¿Qué porcentaje del valor total del crédito se destina a pequeños productores?
  • ¿Espera que departamentos con mayor valor de créditos también tengan mayores rendimientos? ¿Esto puede variar dependiendo del cultivo?
  • ¿Cuáles líneas de producción tienen mayor valor promedio del crédito?

Consultas varias

  • ¿Cuántos departamentos hay en las evaluaciones agropecuarias?
Code
df_evas$departamento |> 
  unique() |> 
  length()
[1] 32
  • ¿Cuántos departamentos hay en los créditos agropecuarios?
Code
df_creditos$departamento_inversion |> 
  unique() |> 
  length()
[1] 33
  • ¿Cuántos registros hay por departamento en las evas?
Code
df_evas |> 
  count(departamento, sort = TRUE)
  • ¿Cuántos registros hay por departamento en los créditos?
Code
df_creditos |> 
  count(departamento_inversion, sort = TRUE)
  • ¿Cuál es el rango de tiempo de ambas tablas?
Code
df_evas$ano |> range()
[1] 2019 2023
Code
df_creditos$ano |> range()
[1] 2021 2024
  • ¿Cuántos registros hay por departamento y año en los créditos?
Code
df_creditos |> 
  count(departamento_inversion, ano)
  • ¿Cuántos cultivos diferentes existen en evas?
Code
df_evas$cultivo |> 
  unique() |> 
  length()
[1] 162
  • ¿Cuántos créditos por línea de producción?
Code
df_creditos |> 
  count(linea_de_produccion, sort = TRUE)
  • ¿Cuántos créditos por destino?
Code
df_creditos |> 
  count(destino_de_credito, sort = TRUE)

Manejo de datos

Operaciones sobre columnas

  • Creamos una nueva tabla de nombre df_evas2 que será obtenida al realizar los siguientes procesos:
    • Selección de las variables de interés
    • Editaremos los nombres que consideremos necesario
    • Relocalizamos las variables
    • Creamos dos variables nuevas de nombre area_perdida_ha y area_perdida_p (porcentaje) en la tabla de evaluaciones agropecuarias.
    • Edición de variables.
Code
df_evas2 <-
  df_evas |>
  select(-c(
    nombre_cientifico_del_cultivo,
    codigo_del_cultivo,
    estado_fisico_del_cultivo
  )) |>
  rename(id_depto = codigo_dane_departamento,
         id_mpio = codigo_dane_municipio,
         desagregacion = desagregacion_cultivo) |>
  relocate(ano, periodo, everything()) |>
  mutate(
    area_perdida_ha = area_sembrada_ha - area_cosechada_ha,
    area_perdida_p = (area_perdida_ha / area_sembrada_ha) * 100,
    id_depto = as.numeric(id_depto),
    id_mpio = as.numeric(id_mpio)
  )

df_evas2 |> head()
  • Creamos una nueva tabla de nombre df_creditos2 que será obtenida al realizar los siguientes procesos:
    • Selección de las variables de interés
    • Editaremos los nombres que consideremos necesario
    • Relocalizamos las variables
    • Creamos una nueva variable de nombre cuota_credito en la tabla de créditos agropecuarios.
    • Edición de variables.
Code
df_creditos2 <-
  df_creditos |>
  select(-c(id_tipo_prod, percent_fag, vlr_inic_garantia, cantidad)) |>
  rename(
    id_depto_inversion = id_depto,
    id_mpio_inversion = id_munic,
    depto_inversion = departamento_inversion,
    mpio_inversion = municipio_inversion,
    mpio_posconflicto = municipio_de_post_conflico,
    id_depto_colocacion = depcol,
    id_mpio_colocacion = muncol,
    depto_colocacion = departamento_de_colocacion_de_credito,
    mpio_colocacion = municipio_colocacion_de_credito
  ) |>
  relocate(ano, mes, latitud, longitud, genero, everything()) |>
  mutate(cuota_credito = valor_inversion / plazo)

df_creditos2 |> head()

Operaciones sobre filas

  • Con la finalidad de simplificar el ejercicio filtramos datos de un solo cultivo, en este caso el café.
  • (Opcional) - Reordenamos las filas de forma descendente para la variable rendimiento
Code
df_evas3 <-
  df_evas2 |>
  filter(cultivo == "Café") |>
  arrange(desc(rendimiento_t_ha))

df_evas3 |> head()
  • (Opcional) - Si quisieramos ver el top 20 de municipios podríamos usar la función slice():
Code
df_evas3 |> 
  slice(1:20)
  • Filtramos créditos que estén destinados a café.
  • (Opcional) - Reordenamos las filas de forma descendente para el valor de la inversión
Code
df_creditos3 <-
  df_creditos2 |>
  filter(destino_de_credito == "141100 Café") |>
  arrange(desc(valor_inversion))

df_creditos3 |> head()

Operaciones de agrupación y resumen

  • Para simplificar el ejercicio vamos a generar agrupación por año y departamento.
  • Generamos una nueva tabla donde resumiremos las evaluaciones agropecuarias de la siguiente manera:
    • total_area_sembrada
    • total_area_cosechada
    • total_area_perdida
    • total_produccion
    • promedio_rto
Code
df_evas_final <-
  df_evas3 |>
  group_by(ano, id_depto, departamento) |>
  reframe(
    total_area_sembrada = sum(area_sembrada_ha, na.rm = TRUE),
    total_area_cosechada = sum(area_cosechada_ha, na.rm = TRUE),
    total_area_perdida = sum(area_perdida_ha, na.rm = TRUE),
    total_produccion = sum(produccion_t, na.rm = TRUE),
    promedio_rto = mean(rendimiento_t_ha, na.rm = TRUE)
  )

df_evas_final |> head()
  • Para simplificar el ejercicio vamos a generar agrupación por año y departamento.
  • Generamos una nueva tabla donde resumiremos las evaluaciones agropecuarias de la siguiente manera:
    • total_inversion
    • promedio_inversion
    • promedio_plazo
    • promedio_cuota
    • total_creditos
Code
df_creditos_final <-
  df_creditos3 |>
  group_by(ano, id_depto_inversion) |>
  reframe(
    total_inversion = sum(valor_inversion, na.rm = TRUE),
    promedio_inversion = mean(valor_inversion, na.rm = TRUE),
    promedio_plazo = mean(plazo, na.rm = TRUE),
    promedio_cuota = mean(cuota_credito, na.rm = TRUE),
    total_creditos = n()
  )

df_creditos_final |> head()

Unión de datos

Code
df_total_inner <-
  inner_join(
    x = df_evas_final,
    y = df_creditos_final,
    by = c("ano", "id_depto" = "id_depto_inversion")
  )

df_total_inner
Code
df_total_left <-
  left_join(
    x = df_evas_final,
    y = df_creditos_final,
    by = c("ano", "id_depto" = "id_depto_inversion")
  )

df_total_left

Visualización rápida

¿Espera que departamentos con mayor valor de créditos también tengan mayores rendimientos? ¿Esto puede variar dependiendo del cultivo?❓❓

Code
df_total_inner |> 
  ggplot(aes(x = total_inversion, y = promedio_rto)) +
  geom_point() +
  scale_x_log10() +
  geom_smooth()