Tarea #5 Punto 2

Item 1

Cargamos los paquetes que estaremos utilizando.

Item 1.1

Listamos los archivos que descargamos.

Item 1.2

Leemos los archivos.

Item 1.3

Fitramos los datos que se leyeron correctamente.

Item 1.4

Unimos todas las bases de datos y vemos el resultado.

# 1. Cargar los paquetes necesarios
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(magrittr)
library(stringr)

# 1.1 Lista de archivos CSV
archivos_csv <- c("P_2018_T1.csv", "P_2018_T2.csv", "P_2018_T3.csv", "P_2018_T4.csv",
                  "P_2019_T1.csv", "P_2019_T2.csv", "P_2019_T3.csv", "P_2019_T4.csv",
                  "P_2020_T1.csv", "P_2020_T2.csv", "P_2020_T3.csv", "P_2020_T4.csv",
                  "P_2021_T1.csv", "P_2021_T2.csv", "P_2021_T3.csv", "P_2021_T4.csv",
                  "P_2022_T1.csv", "P_2022_T2.csv", "P_2022_T3.csv", "P_2022_T4.csv",
                  "P_2023_T1.csv", "P_2023_T2.csv", "P_2023_T3.csv", "P_2023_T4.csv",
                  "P_2024_T1.csv", "P_2024_T2.csv")

# 1.2 Leer todos los archivos CSV en una lista de dataframes
lista_bases_datos <- lapply(archivos_csv, function(archivo) {
  df <- tryCatch(read.csv(archivo), error = function(e) NULL)
  if (is.null(df)) {
    message(paste("Error al leer el archivo:", archivo))
  }
  return(df)
})

# 1.3 Filtrar solo los dataframes que se leyeron correctamente
lista_bases_datos <- Filter(Negate(is.null), lista_bases_datos)

# 1.4 Unir todas las bases de datos usando bind_rows para conservar todas las columnas
base_unida <- bind_rows(lista_bases_datos)

# Ver el resultado
head(base_unida)
##   BANDERA                     NOMBRE.COMERCIAL       PRODUCTO FECHA.REGISTRO
## 1  TERPEL   ESTACION DE SERVICIO AVENIDA SEXTA GASOLINA MOTOR    01-Jan-2018
## 2  TERPEL   ESTACION DE SERVICIO AVENIDA SEXTA         DIESEL    01-Jan-2018
## 3  BIOMAX                EDS ESSO BELLO MADERA          EXTRA    01-Jan-2018
## 4  BIOMAX                EDS ESSO BELLO MADERA         DIESEL    01-Jan-2018
## 5  BIOMAX                EDS ESSO BELLO MADERA GASOLINA MOTOR    01-Jan-2018
## 6  TERPEL ESTACION DE SERVICIO BOMBA VILLA LUZ         DIESEL    01-Jan-2018
##   DEPARTAMENTO MUNICIPIO VALOR.PRECIO
## 1     AMAZONAS   LETICIA         9030
## 2     AMAZONAS   LETICIA         8250
## 3    ANTIOQUIA     BELLO        11390
## 4    ANTIOQUIA     BELLO         8220
## 5    ANTIOQUIA     BELLO         8320
## 6    ANTIOQUIA   BETULIA         9050

Item 2

Observamos las dimensiones de la base de datos.

# 2. Dimensiones de la base de datos 
dim(base_unida)
## [1] 1655022       7

Item 3

Observamos los nombre de todas las columnas que se encuentran en la base de datos

# 3. Nombre de las columnas 
nombres1<- names(base_unida); nombres1 #Nombres de las columnas
## [1] "BANDERA"          "NOMBRE.COMERCIAL" "PRODUCTO"         "FECHA.REGISTRO"  
## [5] "DEPARTAMENTO"     "MUNICIPIO"        "VALOR.PRECIO"

Item 4

Pedimos que nos muestre el tipo de variable de cada una de las columnas.

# 4. Tipo de variables
base_unida %>% glimpse #Tipos de variables
## Rows: 1,655,022
## Columns: 7
## $ BANDERA          <chr> "TERPEL", "TERPEL", "BIOMAX", "BIOMAX", "BIOMAX", "TE…
## $ NOMBRE.COMERCIAL <chr> "ESTACION DE SERVICIO AVENIDA SEXTA", "ESTACION DE SE…
## $ PRODUCTO         <chr> "GASOLINA MOTOR", "DIESEL", "EXTRA", "DIESEL", "GASOL…
## $ FECHA.REGISTRO   <chr> "01-Jan-2018", "01-Jan-2018", "01-Jan-2018", "01-Jan-…
## $ DEPARTAMENTO     <chr> "AMAZONAS", "AMAZONAS", "ANTIOQUIA", "ANTIOQUIA", "AN…
## $ MUNICIPIO        <chr> "LETICIA", "LETICIA", "BELLO", "BELLO", "BELLO", "BET…
## $ VALOR.PRECIO     <dbl> 9030, 8250, 11390, 8220, 8320, 9050, 9760, 8040, 9020…

Observamos que en las colmunas no tenemos el mes, por lo tanto es un valor “NULL”

unique(base_unida$mes)
## NULL

Item 5

Reducimos el sombre de San Andrés Islas

# 5. Cambiamos de nombre a San Andrés
base_unida$DEPARTAMENTO[base_unida$DEPARTAMENTO
                           == "ARCHIPIELAGO DE SAN ANDRES, SANTA CATALINA Y PROVIDENCIA"] <- "SAN ANDRES ISLAS"

Item 6

Nos muestra los departamentos

# 6. Departamentos
base_unida$DEPARTAMENTO %<>% str_replace_all("\\?","Ñ");unique(base_unida$DEPARTAMENTO)
##  [1] "AMAZONAS"           "ANTIOQUIA"          "ATLANTICO"         
##  [4] "BOGOTA D.C."        "BOLIVAR"            "BOYACA"            
##  [7] "CALDAS"             "CAQUETA"            "CASANARE"          
## [10] "CAUCA"              "CESAR"              "CORDOBA"           
## [13] "CUNDINAMARCA"       "HUILA"              "LA GUAJIRA"        
## [16] "MAGDALENA"          "META"               "NARIÑO"            
## [19] "NORTE DE SANTANDER" "PUTUMAYO"           "QUINDIO"           
## [22] "RISARALDA"          "SANTANDER"          "SUCRE"             
## [25] "TOLIMA"             "VALLE DEL CAUCA"    "VICHADA"           
## [28] "-"                  "ARAUCA"             "SAN ANDRES ISLAS"  
## [31] "CHOCO"              "GUAINIA"            "GUAVIARE"          
## [34] "VAUPES"

Item 7

Nos muestra el tipo de producto

# 7. Tipo de producto
base_unida$MUNICIPIO %<>% str_replace_all("\\?","Ñ")

unique(base_unida$PRODUCTO)
## [1] "GASOLINA MOTOR" "DIESEL"         "EXTRA"

Item 8

Verificamos los valores “NA”

# 8. Verifiar los NA:
nas<-!complete.cases(base_unida) #Determinar filas con al menos un NA
Nas_tabla<-base_unida[nas,] #Tabla registros con NA, 3 datos faltantes en nombre comercial
"El nombre comercial es una variable categórica que posría ser reemplazada consultando con el dueño de la data"
## [1] "El nombre comercial es una variable categórica que posría ser reemplazada consultando con el dueño de la data"

Item 9

Observamos los datos atípicos y se realiza un boxplot de esos valores

# 9. Observar datos atípicos:
summary(base_unida)
##    BANDERA          NOMBRE.COMERCIAL     PRODUCTO         FECHA.REGISTRO    
##  Length:1655022     Length:1655022     Length:1655022     Length:1655022    
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  DEPARTAMENTO        MUNICIPIO          VALOR.PRECIO     
##  Length:1655022     Length:1655022     Min.   :       0  
##  Class :character   Class :character   1st Qu.:    8460  
##  Mode  :character   Mode  :character   Median :    9220  
##                                        Mean   :   10256  
##                                        3rd Qu.:   10920  
##                                        Max.   :14750147  
##                                        NA's   :20
boxplot(base_unida$VALOR.PRECIO) #Existe un dato atípico en los precios, valor muy alto

Item 10

Se buscan los datos atípicos de los precios y se realiza un boxplot

# 10. Datos atípicos en los precios
require(dplyr)
atip<-filter(base_unida, VALOR.PRECIO>50000);atip #Detección de datos atípico en precios
##         BANDERA
## 1  COOMULPINORT
## 2        BIOMAX
## 3        TERPEL
## 4        TERPEL
## 5        TERPEL
## 6        PRIMAX
## 7        TEXACO
## 8        PRIMAX
## 9     PETROMIL 
## 10       TERPEL
## 11    PETRDECOL
## 12         ECOS
## 13         PUMA
## 14       BIOMAX
## 15       TERPEL
## 16       TERPEL
## 17       BIOMAX
## 18       TERPEL
## 19       TERPEL
## 20       TERPEL
## 21       TERPEL
## 22    PETROMIL 
## 23       TERPEL
## 24       PRIMAX
## 25         PUMA
## 26       PRIMAX
## 27         ECOS
## 28        BRIO 
## 29       TERPEL
## 30       TERPEL
## 31    PETROMIL 
## 32    PETROMIL 
## 33       TERPEL
## 34    PETROMIL 
## 35    PETROMIL 
## 36    PETROMIL 
## 37       TERPEL
## 38       TERPEL
## 39       TERPEL
## 40       TERPEL
## 41       TERPEL
## 42       TERPEL
## 43       TERPEL
## 44       TERPEL
## 45       TERPEL
## 46       TERPEL
## 47       TERPEL
## 48       TERPEL
## 49    PETROMIL 
## 50    PETROMIL 
## 51    PETROMIL 
## 52  AYATAWACOOP
## 53  AYATAWACOOP
## 54  AYATAWACOOP
## 55  AYATAWACOOP
## 56  AYATAWACOOP
## 57  AYATAWACOOP
## 58  AYATAWACOOP
## 59  AYATAWACOOP
## 60  AYATAWACOOP
## 61  AYATAWACOOP
## 62  AYATAWACOOP
## 63  AYATAWACOOP
## 64    PETROMIL 
##                                                      NOMBRE.COMERCIAL
## 1                                    ESTACION DE SERVICIO LOS ADIOSES
## 2                            ESTACION DE SERVICIO SAN DIEGO GUACHUCAL
## 3                                ESTACIÓN DE SERVICIO EL PASO COROZAL
## 4                                       EDS TERPEL AEROPUERTO COROZAL
## 5                                       EDS TERPEL AEROPUERTO COROZAL
## 6                                                  EDS COESCO EL LIDO
## 7                                 ESTACION DE SERVICIO SAN NICOLAS DQ
## 8  ESTACION DE SERVICIO DISTRIBUIDORA SERVICENTRO LAS AVENIDAS S.A.S.
## 9                    ESTACION DE SERVICIO AUTOMOTRIZ SANTA MONICA J M
## 10                                   ESTACION DE SERVICIO LUIS LOZANO
## 11                                              SERVICENTRO EL PORTAL
## 12                                   ESTACION DE SERVICIO SAN JOSE DN
## 13                     ESTACION DE SERVICIO AUTOMOTRIZ EL GRAN WIPAMA
## 14                              ESTACION DE SERVICIO LA SOFIA DANIELA
## 15                                      ESTACION DE SERVICIO EL CERRO
## 16                               ESTACIÓN DE SERVICIO EL PASO COROZAL
## 17                                                   EDS DOÑA DANIELA
## 18                ESTACION DE SERVICIO ESTACION DE LLENADO SAN MARCEL
## 19                         ESTACION DE SERVICIO LA CRISTALINA CENTRAL
## 20                        ESTACION DE SERVICIO AUTOMOTRIZ ROUND POINT
## 21                        ESTACION DE SERVICIO AUTOMOTRIZ ROUND POINT
## 22                                      ESTACION DE SERVICIO GUANENTA
## 23                                                 TERPEL JAIME ROOKE
## 24                        ESTACION DE SERVICIO AUTOCENTRO SANTANA SAS
## 25       INVERSIONES Y ESTACIÓN DE SERVICIOS AUTOMOTRIZ DOÑA CORI SAS
## 26                                   ESTACION DE SERVICIO LA VORAGINE
## 27                            ESTACION DE SERVICIO SAN JOSE CARTAGENA
## 28                                                         BRIO PEAJE
## 29                         ESTACION DE SERVICIO COROZAL JORGE SANCHEZ
## 30                                                   LA PRIMAVERA EDS
## 31                                      ESTACION DE SERVICIO GUANENTA
## 32                                      ESTACION DE SERVICIO GUANENTA
## 33                                   ESTACION DE SERVICIO LA CABRERA 
## 34                                      ESTACION DE SERVICIO GUANENTA
## 35                                      ESTACION DE SERVICIO GUANENTA
## 36                                      ESTACION DE SERVICIO GUANENTA
## 37                                          EDS AVENIDA SIERRA NEVADA
## 38                                          EDS AVENIDA SIERRA NEVADA
## 39                                          EDS AVENIDA SIERRA NEVADA
## 40                                          EDS AVENIDA SIERRA NEVADA
## 41                                          EDS AVENIDA SIERRA NEVADA
## 42                                          EDS AVENIDA SIERRA NEVADA
## 43                                          EDS AVENIDA SIERRA NEVADA
## 44                                          EDS AVENIDA SIERRA NEVADA
## 45                                          EDS AVENIDA SIERRA NEVADA
## 46                                          EDS AVENIDA SIERRA NEVADA
## 47                                          EDS AVENIDA SIERRA NEVADA
## 48                                          EDS AVENIDA SIERRA NEVADA
## 49                                      ESTACION DE SERVICIO GUANENTA
## 50                                      ESTACION DE SERVICIO GUANENTA
## 51                                      ESTACION DE SERVICIO GUANENTA
## 52                                     ESTACION DE SERVICIO EL BOSQUE
## 53                                     ESTACION DE SERVICIO EL BOSQUE
## 54                                     ESTACION DE SERVICIO EL BOSQUE
## 55                                     ESTACION DE SERVICIO EL BOSQUE
## 56                                     ESTACION DE SERVICIO EL BOSQUE
## 57                                     ESTACION DE SERVICIO EL BOSQUE
## 58                                     ESTACION DE SERVICIO EL BOSQUE
## 59                                     ESTACION DE SERVICIO EL BOSQUE
## 60                                     ESTACION DE SERVICIO EL BOSQUE
## 61                                     ESTACION DE SERVICIO EL BOSQUE
## 62                                     ESTACION DE SERVICIO EL BOSQUE
## 63                                     ESTACION DE SERVICIO EL BOSQUE
## 64                                      ESTACION DE SERVICIO GUANENTA
##          PRODUCTO FECHA.REGISTRO       DEPARTAMENTO           MUNICIPIO
## 1  GASOLINA MOTOR    01-Dec-2021 NORTE DE SANTANDER            PAMPLONA
## 2  GASOLINA MOTOR    01-Feb-2022             NARIÑO           GUACHUCAL
## 3  GASOLINA MOTOR    01-Jul-2023 NORTE DE SANTANDER          LOS PATIOS
## 4  GASOLINA MOTOR    01-Jul-2023              SUCRE             COROZAL
## 5          DIESEL    01-Jul-2023              SUCRE             COROZAL
## 6          DIESEL    01-Jul-2023    VALLE DEL CAUCA                CALI
## 7  GASOLINA MOTOR    02-Jul-2023          RISARALDA        DOSQUEBRADAS
## 8  GASOLINA MOTOR    03-Jul-2023             NARIÑO               PASTO
## 9  GASOLINA MOTOR    05-Jul-2023          MAGDALENA         SANTA MARTA
## 10         DIESEL    06-Jul-2023          ANTIOQUIA      PUERTO TRIUNFO
## 11 GASOLINA MOTOR    06-Jul-2023             NARIÑO       SANTA BÁRBARA
## 12         DIESEL    08-Jul-2023            BOLIVAR SAN JUAN NEPOMUCENO
## 13         DIESEL    08-Jul-2023          MAGDALENA            ARIGUANÍ
## 14         DIESEL    09-Jul-2023              CAUCA            GUACHENÉ
## 15         DIESEL    15-Jul-2023              CESAR           AGUACHICA
## 16         DIESEL    15-Jul-2023 NORTE DE SANTANDER          LOS PATIOS
## 17 GASOLINA MOTOR    01-Sep-2023            BOLIVAR         MONTECRISTO
## 18         DIESEL    01-Sep-2023             CALDAS           MANIZALES
## 19         DIESEL    01-Sep-2023              CESAR            CURUMANÍ
## 20         DIESEL    01-Sep-2023              HUILA            ALTAMIRA
## 21 GASOLINA MOTOR    01-Sep-2023              HUILA            ALTAMIRA
## 22          EXTRA    01-Sep-2023          SANTANDER            PINCHOTE
## 23         DIESEL    01-Sep-2023             TOLIMA              IBAGUÉ
## 24         DIESEL    02-Sep-2023        BOGOTA D.C.        BOGOTÁ, D.C.
## 25 GASOLINA MOTOR    02-Sep-2023            BOLIVAR         ARROYOHONDO
## 26         DIESEL    02-Sep-2023               META       VILLAVICENCIO
## 27 GASOLINA MOTOR    07-Sep-2023            BOLIVAR             TURBACO
## 28         DIESEL    11-Sep-2023       CUNDINAMARCA              SOACHA
## 29          EXTRA    20-Sep-2023 NORTE DE SANTANDER          LOS PATIOS
## 30 GASOLINA MOTOR    21-Sep-2023            CORDOBA             COTORRA
## 31          EXTRA    02-Oct-2023          SANTANDER            PINCHOTE
## 32          EXTRA    02-Nov-2023          SANTANDER            PINCHOTE
## 33         DIESEL    01-Dec-2023 NORTE DE SANTANDER  SAN JOSÉ DE CÚCUTA
## 34          EXTRA    01-Dec-2023          SANTANDER            PINCHOTE
## 35          EXTRA    02-Jan-2024          SANTANDER            PINCHOTE
## 36          EXTRA    01-Feb-2024          SANTANDER            PINCHOTE
## 37 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 38 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 39 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 40 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 41 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 42 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 43 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 44 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 45 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 46 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 47 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 48 GASOLINA MOTOR    28-Feb-2024              CESAR          VALLEDUPAR
## 49          EXTRA    02-Mar-2024          SANTANDER            PINCHOTE
## 50          EXTRA    01-Apr-2024          SANTANDER            PINCHOTE
## 51          EXTRA    02-May-2024          SANTANDER            PINCHOTE
## 52         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 53         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 54         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 55         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 56         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 57         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 58         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 59         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 60         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 61         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 62         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 63         DIESEL    07-May-2024         LA GUAJIRA             DIBULLA
## 64          EXTRA    01-Jun-2024          SANTANDER            PINCHOTE
##    VALOR.PRECIO
## 1         74900
## 2         81690
## 3        115120
## 4        128600
## 5         86990
## 6        102420
## 7        133000
## 8        111160
## 9        132400
## 10        94100
## 11       115000
## 12        85100
## 13        92500
## 14        97000
## 15        86900
## 16        96150
## 17     14750147
## 18        91340
## 19        82000
## 20        94600
## 21       140580
## 22       160000
## 23        93700
## 24        98340
## 25       146650
## 26        91415
## 27       135900
## 28        87300
## 29       195000
## 30       148000
## 31       160000
## 32       160000
## 33        71590
## 34       200000
## 35       120000
## 36       120000
## 37        88190
## 38        88190
## 39        88190
## 40        88190
## 41        88190
## 42        88190
## 43        88190
## 44        88190
## 45        88190
## 46        88190
## 47        88190
## 48        88190
## 49       120000
## 50        70000
## 51        70000
## 52        79484
## 53        79484
## 54        79484
## 55        79484
## 56        79484
## 57        79484
## 58        79484
## 59        79484
## 60        79484
## 61        79484
## 62        79484
## 63        79484
## 64        70000
library(tidyr)
## 
## Adjuntando el paquete: 'tidyr'
## The following object is masked from 'package:magrittr':
## 
##     extract
base_unida$VALOR.PRECIO[base_unida$VALOR.PRECIO>50000]<-NA #Atípico como NA
#Reemplazar NA con la mediana de los precios
base_unida$VALOR.PRECIO <- replace_na(base_unida$VALOR.PRECIO,median(base_unida$VALOR.PRECIO,na.rm = T))
boxplot(base_unida$VALOR.PRECIO) #Mejora la distribución de los datos

Item 11

Se realiza un boxplot de la distrubición de los precios por el tipo de combustible.

# 11. Boxplot distribución de precios por el tipo de combustible
library(ggplot2)

base_unida_filtered <- base_unida %>%
  filter(VALOR.PRECIO < 20000)  # Ajusta el umbral según sea necesario

ggplot(base_unida_filtered, aes(x = PRODUCTO, y = VALOR.PRECIO, fill = PRODUCTO)) + 
  geom_boxplot(outlier.shape = NA) +  # Elimina la visualización de valores atípicos extremos
  labs(title = "Distribucion de Precios por Tipo de Combustible",
       x = "Producto",
       y = "Precio") +
  theme_minimal() +
  theme(legend.position = "none",
        axis.text.x = element_text(angle = 45, hjust = 1),  # Gira el texto para mejorar la legibilidad
        plot.title = element_text(hjust = 0.5)) +  # Centra el título
  scale_y_continuous(labels = scales::comma)  # Añade separadores de miles al eje y

Item 12

Se realiza una gráfica de distrubución del precio promedio segun el tipo de combustible

# 12. Distribución, precio del combustible según tipo:

resum2 <- base_unida %>% group_by(PRODUCTO,FECHA.REGISTRO) %>%
  summarise(p_prom2=mean(VALOR.PRECIO))
## `summarise()` has grouped output by 'PRODUCTO'. You can override using the
## `.groups` argument.
ggplot(resum2, aes(x = p_prom2, fill = PRODUCTO)) +
  geom_density(alpha = 0.4) +
  xlab("Precio promedio") +
  ylab("Densidad") +
  ggtitle("Distribucion precio promedio combustibles segun el tipo") +
  theme_minimal()