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"
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