Explorando y describiendo datos de ventas.

Cargar las librerías

  • Utilizar {r warning=FALSE, message=FALSE}
  • Para que no muestre mensajes y warnings
library(readr)     # Para leer datos
library(lubridate) # Para fechas y Times
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
## 
##     date
library(anytime)   # Para fechas y Times
library(dplyr)     # Para filters(), select(),...mutate(), arrange()...  
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:lubridate':
## 
##     intersect, setdiff, union
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
ventas <- read_csv("../Datos/sales.csv")
## Parsed with column specification:
## cols(
##   Folio = col_character(),
##   Hora = col_character(),
##   Total = col_double(),
##   Pago = col_double(),
##   Cajero = col_character()
## )
ventas <- as.data.frame(ventas) # Es un data frame

head(ventas) # los primeros seis registros
##             Folio             Hora   Total    Pago Cajero
## 1 LBVT18010004435 01/05/2018 12:36 1121.20 1121.20  MAYTE
## 2 LBVT18010004436 01/05/2018 12:37   18.50   20.00  MAYTE
## 3 LBVT18010004437 01/05/2018 12:38  160.00  200.00  MAYTE
## 4 LBVT18010004438 01/05/2018 12:47  397.50  397.50  MAYTE
## 5 LBVT18010004439 01/05/2018 12:48   22.00   50.00  MAYTE
## 6 LBVT18010004440 01/05/2018 12:53 1314.19 1314.19  MAYTE
tail(ventas) # los últimos seis registros
##                 Folio             Hora Total  Pago    Cajero
## 84876 LBVT18070002268 31/08/2018 16:58 43.80 50.00 JAQUELINE
## 84877 LBVT18070002269 31/08/2018 17:03 16.32 16.32 JAQUELINE
## 84878 LBVT18070002270 31/08/2018 17:04 28.32 28.32 JAQUELINE
## 84879 LBVT18070002271 31/08/2018 17:06 21.36 50.00 JAQUELINE
## 84880 LBVT18070002272 31/08/2018 17:27 50.00 50.00 JAQUELINE
## 84881 LBVT18070002273 31/08/2018 17:36 30.14 50.00 JAQUELINE

Limpiar la variable Hora de ventas

  • Crear con la descomposición de la variable Hora de ventas
  • El propósito es tener mejor control de un dato tipo date() y/o datetime()
  • Por medio de la función substr(), extraer los caraceres adecuados de la variable Hora, dejar la Hora en una variable nueva llamada fechas y a partir de ésta, variable extraer año, mes, dia, hora, minutos.
  • Mediate as.numeric() convertir a formato numérico cada variable
  • Se muestran con head() solo los primeros seis regisros
fechas <- ventas$Hora
# fechas y horas con todos los caracteres
head(fechas)
## [1] "01/05/2018 12:36" "01/05/2018 12:37" "01/05/2018 12:38" "01/05/2018 12:47"
## [5] "01/05/2018 12:48" "01/05/2018 12:53"
fagnio <- as.numeric(substr(fechas, 7,10))
head(fagnio)
## [1] 2018 2018 2018 2018 2018 2018
fmes <- as.numeric(substr(fechas, 4,5))
head(fmes)
## [1] 5 5 5 5 5 5
fdia <- as.numeric(substr(fechas, 1,2))
head(fdia)
## [1] 1 1 1 1 1 1
fhora <- as.numeric(substr(fechas, 12,13))
head(fhora)
## [1] 12 12 12 12 12 12
fminuto <- as.numeric(substr(fechas, 15,16))
head(fminuto)
## [1] 36 37 38 47 48 53
fecha.y.hora <- make_datetime(year = fagnio, 
                          month = fmes, 
                          day=fdia,
                          hour=fhora,
                          min=fminuto)
head(fecha.y.hora)
## [1] "2018-05-01 12:36:00 UTC" "2018-05-01 12:37:00 UTC"
## [3] "2018-05-01 12:38:00 UTC" "2018-05-01 12:47:00 UTC"
## [5] "2018-05-01 12:48:00 UTC" "2018-05-01 12:53:00 UTC"

Transformar la variable Hora para generar nuevas variables en ventas

ventas <- mutate(ventas, agnio = fagnio, mes = fmes, dia = fdia, hora=fhora, minuto=fminuto, fechahora = fecha.y.hora)

head(ventas)
##             Folio             Hora   Total    Pago Cajero agnio mes dia hora
## 1 LBVT18010004435 01/05/2018 12:36 1121.20 1121.20  MAYTE  2018   5   1   12
## 2 LBVT18010004436 01/05/2018 12:37   18.50   20.00  MAYTE  2018   5   1   12
## 3 LBVT18010004437 01/05/2018 12:38  160.00  200.00  MAYTE  2018   5   1   12
## 4 LBVT18010004438 01/05/2018 12:47  397.50  397.50  MAYTE  2018   5   1   12
## 5 LBVT18010004439 01/05/2018 12:48   22.00   50.00  MAYTE  2018   5   1   12
## 6 LBVT18010004440 01/05/2018 12:53 1314.19 1314.19  MAYTE  2018   5   1   12
##   minuto           fechahora
## 1     36 2018-05-01 12:36:00
## 2     37 2018-05-01 12:37:00
## 3     38 2018-05-01 12:38:00
## 4     47 2018-05-01 12:47:00
## 5     48 2018-05-01 12:48:00
## 6     53 2018-05-01 12:53:00

Ordenar conforme las variables año mes, dia hora minuto ascendente.

  • Se utiliza la variable fecha y hora
  • Ver los primeros seis y últimos seis registros ordenados
ventas <- arrange(ventas, fechahora)
head(ventas)
##             Folio             Hora  Total Pago     Cajero agnio mes dia hora
## 1 LBVT18020018825 01/05/2018 07:46  88.85  100 ALE HUERTA  2018   5   1    7
## 2 LBVT18020018826 01/05/2018 07:53 183.75  200 ALE HUERTA  2018   5   1    7
## 3 LBVT18020018827 01/05/2018 07:58 497.18  500 ALE HUERTA  2018   5   1    7
## 4 LBVT18020018828 01/05/2018 08:13  11.50   12 ALE HUERTA  2018   5   1    8
## 5 LBVT18020018829 01/05/2018 08:14 200.00  200 ALE HUERTA  2018   5   1    8
## 6 LBVT18020018830 01/05/2018 08:16 177.20  500 ALE HUERTA  2018   5   1    8
##   minuto           fechahora
## 1     46 2018-05-01 07:46:00
## 2     53 2018-05-01 07:53:00
## 3     58 2018-05-01 07:58:00
## 4     13 2018-05-01 08:13:00
## 5     14 2018-05-01 08:14:00
## 6     16 2018-05-01 08:16:00
tail(ventas)
##                 Folio             Hora  Total   Pago     Cajero agnio mes dia
## 84876 LBVT18020048670 31/08/2018 20:59 112.50 120.00 ROSI MEJIA  2018   8  31
## 84877 LBVT18020048671 31/08/2018 21:03 344.80 345.00 ROSI MEJIA  2018   8  31
## 84878 LBVT18020048672 31/08/2018 21:06 154.80 205.00 ROSI MEJIA  2018   8  31
## 84879 LBVT18030071088 31/08/2018 21:06 585.65 585.65 ALE HUERTA  2018   8  31
## 84880 LBVT18030071089 31/08/2018 21:07 112.70 112.70 ALE HUERTA  2018   8  31
## 84881 LBVT18030071090 31/08/2018 21:13 162.70 162.70 ALE HUERTA  2018   8  31
##       hora minuto           fechahora
## 84876   20     59 2018-08-31 20:59:00
## 84877   21      3 2018-08-31 21:03:00
## 84878   21      6 2018-08-31 21:06:00
## 84879   21      6 2018-08-31 21:06:00
## 84880   21      7 2018-08-31 21:07:00
## 84881   21     13 2018-08-31 21:13:00

Interpretación de las ventas de cuerdo a fecha y hora

  • Las ventas inician con fecha: 2018-05-01 07:46:00
  • Las ventas terminan con fecha: 2018-08-31 21:13:00
  • Del 1 de Mayo del 2018 al 31 de Agosto 2018

Agrupando datos por mes de ventas

totalespormes <- data.frame(ventas %>% 
  group_by(month(fechahora)) %>%
  summarize(frec = n(), total = sum(Total)))

totalespormes
##   month.fechahora.  frec   total
## 1                5 20348 3748978
## 2                6 19838 3749558
## 3                7 21607 4197541
## 4                8 23088 4412733

Visualizando la frecuencia por mes de las ventas

barplot(totalespormes$frec, names.arg = month.name[5:8])

Visualizando los totales por mes de las ventas

barplot(totalespormes$total, names.arg = month.name[5:8])

Totales por Cajero

Agrupando datos por cajero de ventas

  • Agrupar por cajero
  • Ordenar por frecuencia
totalesporcajero <- data.frame(ventas %>% 
  group_by(Cajero) %>%
  summarize(frec = n(), total = sum(Total)))

totalesporcajero <- arrange(totalesporcajero, desc(frec))
totalesporcajero
##           Cajero  frec      total
## 1       MARICRUZ 11885 2377528.60
## 2    JUAN MARTIN 10287 2043433.47
## 3     ALE HUERTA 10215 2121820.22
## 4     FERNANDO C 10089 2051828.96
## 5    JESUS PEREZ  6739 1307989.69
## 6          MAYTE  5565 1126737.82
## 7     ROSI MEJIA  4934 1030549.23
## 8       MONSE L.  4236  383628.75
## 9          JANET  3594  681716.26
## 10        MIRIAM  3241  674795.88
## 11    GABY LUCIO  2591  555617.24
## 12          LINA  2367  496577.05
## 13        SARAHY  2103  161650.91
## 14     JAQUELINE  1792  205634.67
## 15      ALE DIAZ  1488  321807.38
## 16     EDUARDO V  1265  215377.09
## 17 MIRIAM LANDIN   906  193589.88
## 18       CLAUDIA   783   47937.92
## 19          MAGO   490   43925.29
## 20        ELI C.   188   46397.50
## 21       EDUARDO   123   20266.48

Visualizando totales y frecuencias por cajero

barplot(totalesporcajero$frec, names.arg = totalesporcajero$Cajero)

Interpretación

  • Se limpia la variable char Hora de ventas, extrayendo los valores para el año, mes, día, hora y fecha con la función as.numeric() y asignarla a una nueva variable
  • Agrupar cada variable de la fecha en una nueva de tipo Date con la función make_datetime()
  • Transformamos la variable Hora para generar nuevas variables en ventas con la función mutate()
  • Ordenamos la ventas con la función arrange() de manera ascendente
  • El registro de las ventas inician con fecha: 2018-05-01 07:46:00 y terminan con fecha: 2018-08-31 21:13:00
  • Agrupamos el total y la frecuencia de las ventas y nos damos cuenta de que el mes con mayor cantidad de ventas es el mismo mes con mayor frecuencia de ventas, quedando de la siguiente manera las dos graficas de barras: ## 1 August ## 2 July ## 3 June ## 4 May
  • Agrupamos el total y la frecuencia de las ventas y nos damos cuenta de que los vendedores con mayor cantidad de ventas es el mismo mes con mayor frecuencia de ventas, quedando de la siguiente manera los primeros 10 vendedoras de la tabla: ## 1 MARICRUZ 11885 2377528.60 ## 2 JUAN MARTIN 10287 2043433.47 ## 3 ALE HUERTA 10215 2121820.22 ## 4 FERNANDO C 10089 2051828.96 ## 5 JESUS PEREZ 6739 1307989.69 ## 6 MAYTE 5565 1126737.82 ## 7 ROSI MEJIA 4934 1030549.23 ## 8 MONSE L. 4236 383628.75 ## 9 JANET 3594 681716.26 ## 10 MIRIAM 3241 674795.88