Tratamiento, modelizacion y visualizacion con R
Tomado del archivo de Nestor Montaño - Agosto 2019, R User Group Ecuador
Ejemplo: Data de transacciones bancarias
El Banco del Pacifico requiere mejorar los tiempos de atencion al cliente en ventanilla, para ello ha recolectado esta informacion anonimamente para cada cajero y transaccion realizada.
Le suministran un excel con dos hojas:
Tiene los datos de las transacciones, columnas: Sucursal, Cajero, ID_Transaccion, Transaccion, Tiempo_Servicio_eg, Nivel de satisfaccion, Monto de la transaccion
Otra hoja que indica si en la sucursal se ha puesto o no el nuevo sistema
Importar Datos
# Cargar la libreria a utilizar
library(openxlsx)
# Leer el archivo de excel y asignarlo al objeto data_banco
data_banco <- read.xlsx(xlsxFile = "Data/Data_Banco.xlsx", sheet = "Sucursal")
data_sucursal <- read.xlsx(xlsxFile = "Data/Data_Banco.xlsx", sheet = "Data_Sucursal")
data_cajero <- read.xlsx(xlsxFile = "Data/Data_Banco.xlsx", sheet = "Data_Cajero")hemos cargado las 3 hojas de nuextro archivo de excel.
Estructura de los datos
¿qué tipo de estructura hemos importado?. Por ejemplo tomamos la data Sucursal
'data.frame': 24299 obs. of 7 variables:
$ Sucursal : num 62 62 62 62 62 62 62 62 62 62 ...
$ Cajero : num 4820 4820 4820 4820 4820 4820 4820 4820 4820 4820 ...
$ ID_Transaccion : chr "2" "2" "2" "2" ...
$ Transaccion : chr "Cobro/Pago (Cta externa)" "Cobro/Pago (Cta externa)" "Cobro/Pago (Cta externa)" "Cobro/Pago (Cta externa)" ...
$ Tiempo_Servicio_seg: num 311 156 248 99 123 172 140 247 183 91 ...
$ Satisfaccion : chr "Muy Bueno" "Malo" "Regular" "Regular" ...
$ Monto : num 2889 1671 3172 1765 1836 ...
Entender los datos
ver las primeras 5 filas
ID_Sucursal Sucursal Nuevo_Sistema
1 62 Riocentro Sur No
2 85 Centro Si
3 267 Alborada Si
4 443 Mall del Sol Si
5 586 Via Daule No
Listar los nombres de las columnas
[1] "Sucursal" "Cajero" "ID_Transaccion"
[4] "Transaccion" "Tiempo_Servicio_seg" "Satisfaccion"
[7] "Monto"
[1] "ID_Sucursal" "Sucursal" "Nuevo_Sistema"
¿Están bien nuestros tipos de datos?
'data.frame': 24299 obs. of 7 variables:
$ Sucursal : num 62 62 62 62 62 62 62 62 62 62 ...
$ Cajero : num 4820 4820 4820 4820 4820 4820 4820 4820 4820 4820 ...
$ ID_Transaccion : chr "2" "2" "2" "2" ...
$ Transaccion : chr "Cobro/Pago (Cta externa)" "Cobro/Pago (Cta externa)" "Cobro/Pago (Cta externa)" "Cobro/Pago (Cta externa)" ...
$ Tiempo_Servicio_seg: num 311 156 248 99 123 172 140 247 183 91 ...
$ Satisfaccion : chr "Muy Bueno" "Malo" "Regular" "Regular" ...
$ Monto : num 2889 1671 3172 1765 1836 ...
Tibbles (un dataframe mejorado):
Tibble es un objeto del paquete dplyr, entre las mejoras que da es que no imprime todo el objeto en pantalla, sino un resumen del mismo. (más información tipeando ?tibble)
# Convertir el data_banco a un tibble
data_banco <- tbl_df(data_banco)
# Muestra data_banco
data_banco# A tibble: 24,299 x 7
Sucursal Cajero ID_Transaccion Transaccion Tiempo_Servicio~ Satisfaccion
<dbl> <dbl> <chr> <chr> <dbl> <chr>
1 62 4820 2 Cobro/Pago~ 311 Muy Bueno
2 62 4820 2 Cobro/Pago~ 156 Malo
3 62 4820 2 Cobro/Pago~ 248 Regular
4 62 4820 2 Cobro/Pago~ 99 Regular
5 62 4820 2 Cobro/Pago~ 123 Muy Bueno
6 62 4820 2 Cobro/Pago~ 172 Bueno
7 62 4820 2 Cobro/Pago~ 140 Regular
8 62 4820 2 Cobro/Pago~ 247 Bueno
9 62 4820 2 Cobro/Pago~ 183 Muy Bueno
10 62 4820 2 Cobro/Pago~ 91 Muy Bueno
# ... with 24,289 more rows, and 1 more variable: Monto <dbl>
Seleccionar columnas: select() Seleccionar las columnas Transaccion, Tiempo_Servicio_seg del data.frame data_banco
# Note que como no se asignó, R evalúa la expresión y presenta el resultado
select(data_banco, Transaccion, Tiempo_Servicio_seg)# A tibble: 24,299 x 2
Transaccion Tiempo_Servicio_seg
<chr> <dbl>
1 Cobro/Pago (Cta externa) 311
2 Cobro/Pago (Cta externa) 156
3 Cobro/Pago (Cta externa) 248
4 Cobro/Pago (Cta externa) 99
5 Cobro/Pago (Cta externa) 123
6 Cobro/Pago (Cta externa) 172
7 Cobro/Pago (Cta externa) 140
8 Cobro/Pago (Cta externa) 247
9 Cobro/Pago (Cta externa) 183
10 Cobro/Pago (Cta externa) 91
# ... with 24,289 more rows
Operador Pipe: %>%
El operador Pipe %>% del paquete magrittr permiten que el código sea más legible porque:
- Permite secuencias estructurantes de operaciones de datos de izquierda a derecha (a diferencia de dentro y fuera),
- Evitando llamadas a funciones anidadas,
- Minimiza la necesidad de variables locales y definiciones de funciones
- Facilita agregar pasos en cualquier lugar de la programación
para acceder rapidamente al operador presionar en el teclado: ctrl + Shift + m
[1] "Sucursal" "Cajero" "ID_Transaccion"
[4] "Transaccion" "Tiempo_Servicio_seg" "Satisfaccion"
[7] "Monto"
# A tibble: 5 x 7
Sucursal Cajero ID_Transaccion Transaccion Tiempo_Servicio~ Satisfaccion Monto
<dbl> <dbl> <chr> <chr> <dbl> <chr> <dbl>
1 62 4820 2 Cobro/Pago~ 311 Muy Bueno 2889.
2 62 4820 2 Cobro/Pago~ 156 Malo 1671.
3 62 4820 2 Cobro/Pago~ 248 Regular 3172.
4 62 4820 2 Cobro/Pago~ 99 Regular 1765.
5 62 4820 2 Cobro/Pago~ 123 Muy Bueno 1836.
Seleccionar columnas: select()
Seleccionar las columnas Transaccion, Tiempo_Servicio_seg del data.frame data_banco pero usando %>%, lo que permite programar como si se escribiese “del data_banco, selecciona las columnas Transaccion y Tiempo_Servicio_seg”
# Note que como no se asignó, R evalúa la expresión y presenta el resultado Se
# lee, del data_banco, selecciona las columnas Transaccion y Tiempo_Servicio_seg
# data_banco[ , c('Transaccion', 'Tiempo_Servicio_seg') ] ## Base de R
data_banco %>% select(Transaccion, Tiempo_Servicio_seg)# A tibble: 24,299 x 2
Transaccion Tiempo_Servicio_seg
<chr> <dbl>
1 Cobro/Pago (Cta externa) 311
2 Cobro/Pago (Cta externa) 156
3 Cobro/Pago (Cta externa) 248
4 Cobro/Pago (Cta externa) 99
5 Cobro/Pago (Cta externa) 123
6 Cobro/Pago (Cta externa) 172
7 Cobro/Pago (Cta externa) 140
8 Cobro/Pago (Cta externa) 247
9 Cobro/Pago (Cta externa) 183
10 Cobro/Pago (Cta externa) 91
# ... with 24,289 more rows
# Seleccionar la columna Tiempo_Servicio_seg y obtener un boxplot
# boxplot(data_banco$Tiempo_Servicio_seg) ## Base de R
data_banco %>% select(Tiempo_Servicio_seg) %>% boxplot# Seleccionar la columna Tiempo_Servicio_seg y obtener los fivenumbers de Tukey
data_banco %$% fivenum(Tiempo_Servicio_seg, na.rm = TRUE)[1] 18.13177 75.69119 122.45229 197.73046 1602.69832
Seleccionar todas las columnas menos Cajero
Seleccionar según nombre de la columna/variable.
# Seleccionar todas las columnas cuyo nombre contenga el texto 'Tra'
data_banco %>% select(contains("Tra")) %>% View
# Seleccionar todas las columnas cuyo nombre inicie con 'S'
data_banco %>% select(starts_with("S")) %>% View
# Seleccionar todas las columnas cuyo nombre finalice con 'on'
data_banco %>% select(ends_with("on")) %>% View
# Seleccionar todas las columnas cuyo nombre contenga una 'r' o un 'sa'
data_banco %>% select(matches("r?sa")) %>% View
# Más información sobre expresiones regulares usando: ?base::regexFiltrar/Seleccionar filas: filter()
Filtrar las filas según las condiciones dadas en filter()
# Filtrar las filas correspondientes a la sucursal 62
data_banco %>% filter(Sucursal == 62) %>% View
# Filtrar las filas correspondientes a la sucursal 62 y hayan durado más de 120
# segundos
data_banco %>% filter(Sucursal == 62 & Tiempo_Servicio_seg > 120) %>% View
# Filtrar las filas correspondientes a la sucursal 62, hayan durado más de 120
# segundos y la evaluación a la satisfacción sea Bueno
data_banco %>% filter(Sucursal == 62 & Tiempo_Servicio_seg > 120 & Satisfaccion ==
"Muy Bueno") %>% ViewFiltrar filas y seleccionar
# Con el data banco
# Filtrar las filas correspondientes a la sucursal 85
# calcular la correlacion entre Tiempo_Servicio_seg y Monto
data_banco %>% # Operador pipe total
filter( Sucursal== 85 ) %$% # Operador pipe para seleccion de columnas
cor(Tiempo_Servicio_seg, as.numeric(Monto))[1] 0.5339392
Ordenar las filas: arrange()
Crear o modificar columnas/variables mutate()
# Crear una nueva columna con el tiempo en minutos
data_banco %>% mutate(Tiempo_Servicio_Min = Tiempo_Servicio_seg/60)# A tibble: 24,299 x 8
Sucursal Cajero ID_Transaccion Transaccion Tiempo_Servicio~ Satisfaccion
<dbl> <dbl> <chr> <chr> <dbl> <chr>
1 62 4820 2 Cobro/Pago~ 311 Muy Bueno
2 62 4820 2 Cobro/Pago~ 156 Malo
3 62 4820 2 Cobro/Pago~ 248 Regular
4 62 4820 2 Cobro/Pago~ 99 Regular
5 62 4820 2 Cobro/Pago~ 123 Muy Bueno
6 62 4820 2 Cobro/Pago~ 172 Bueno
7 62 4820 2 Cobro/Pago~ 140 Regular
8 62 4820 2 Cobro/Pago~ 247 Bueno
9 62 4820 2 Cobro/Pago~ 183 Muy Bueno
10 62 4820 2 Cobro/Pago~ 91 Muy Bueno
# ... with 24,289 more rows, and 2 more variables: Monto <dbl>,
# Tiempo_Servicio_Min <dbl>
Crear una nueva columna con el tiempo en minutos
# Crear una nueva columna con el tiempo en minutos
data_banco %>% mutate(Tiempo_Servicio_Min = Tiempo_Servicio_seg/60)# A tibble: 24,299 x 8
Sucursal Cajero ID_Transaccion Transaccion Tiempo_Servicio~ Satisfaccion
<dbl> <dbl> <chr> <chr> <dbl> <chr>
1 62 4820 2 Cobro/Pago~ 311 Muy Bueno
2 62 4820 2 Cobro/Pago~ 156 Malo
3 62 4820 2 Cobro/Pago~ 248 Regular
4 62 4820 2 Cobro/Pago~ 99 Regular
5 62 4820 2 Cobro/Pago~ 123 Muy Bueno
6 62 4820 2 Cobro/Pago~ 172 Bueno
7 62 4820 2 Cobro/Pago~ 140 Regular
8 62 4820 2 Cobro/Pago~ 247 Bueno
9 62 4820 2 Cobro/Pago~ 183 Muy Bueno
10 62 4820 2 Cobro/Pago~ 91 Muy Bueno
# ... with 24,289 more rows, and 2 more variables: Monto <dbl>,
# Tiempo_Servicio_Min <dbl>
Crear una nueva columna con el tiempo en minutos
# Crear una nueva columna con el tiempo en minutos
data_banco <- data_banco %>% mutate(Tiempo_Servicio_Min = Tiempo_Servicio_seg/60)
# Mostrar
data_banco# A tibble: 24,299 x 8
Sucursal Cajero ID_Transaccion Transaccion Tiempo_Servicio~ Satisfaccion
<dbl> <dbl> <chr> <chr> <dbl> <chr>
1 62 4820 2 Cobro/Pago~ 311 Muy Bueno
2 62 4820 2 Cobro/Pago~ 156 Malo
3 62 4820 2 Cobro/Pago~ 248 Regular
4 62 4820 2 Cobro/Pago~ 99 Regular
5 62 4820 2 Cobro/Pago~ 123 Muy Bueno
6 62 4820 2 Cobro/Pago~ 172 Bueno
7 62 4820 2 Cobro/Pago~ 140 Regular
8 62 4820 2 Cobro/Pago~ 247 Bueno
9 62 4820 2 Cobro/Pago~ 183 Muy Bueno
10 62 4820 2 Cobro/Pago~ 91 Muy Bueno
# ... with 24,289 more rows, and 2 more variables: Monto <dbl>,
# Tiempo_Servicio_Min <dbl>
Manipulacion(correcion) de datos
Volvemos al ejemplo de nuestra data_banco
Lo primero que necesitamos es corregir los tipos de datos, nótese que
- Monto tiene una mezcla de “,” y “.”
- Sucursal y Cajero deberían ser de tipo character
- Satisfaccion debe ser factor ordenado
data_banco <- data_banco %>% mutate(Monto = str_replace(Monto, pattern = ",", replacement = ".")) %>%
mutate(Sucursal = as.character(Sucursal), Cajero = as.character(Cajero), Satisfaccion = parse_factor(Satisfaccion,
levels = c("Muy Malo", "Malo", "Regular", "Bueno", "Muy Bueno"), ordered = T),
Monto = parse_number(Monto, locale = locale(decimal_mark = ".")))Con los datos corregidos, podemos empezar a explorar, para ello además de poder seleccionar columnas o filtrar filas, debemos poder calcular medidas estadísticas que nos permitan entender nuestros datos
Medidas de Tendencia Central
# Media mean(data_banco$Tiempo_Servicio_seg, na.rm = TRUE) ## Base R
data_banco %$% mean(Tiempo_Servicio_seg, na.rm = TRUE)[1] 155.58
[1] 122.4523
# Media de Huber MASS::huber(data_banco$Tiempo_Servicio_seg)$mu ## Base R
data_banco %$% MASS::huber(Tiempo_Servicio_seg) %>% as.data.frame() %>% select(mu) mu
1 138.0164
Medidas de Posición
10% 20% 30% 40% 50% 60% 70% 80%
49.6230 67.0000 84.0000 102.0000 122.4523 146.9901 178.8348 220.2469
90% 100%
298.7826 1602.6983
5% 95%
39.0000 382.9779
Medidas de Posición - Boxplot
boxplot(data_banco$Tiempo_Servicio_seg, main = "Boxplot para Tiempo de Servicio (seg)",
ylab = "Tiempo")# Cortar el gráfico (outliers)
q95 <- quantile(data_banco$Tiempo_Servicio_seg, probs = 0.95)
ggplot(data = data_banco, aes(x = "", y = Tiempo_Servicio_seg)) + geom_boxplot() +
coord_cartesian(ylim = c(0, q95))# Gráfico de forma horizontal y titulo
q95 <- quantile(data_banco$Tiempo_Servicio_seg, probs = 0.95)
ggplot(data = data_banco, aes(x = "", y = Tiempo_Servicio_seg)) + geom_boxplot() +
coord_flip(ylim = c(20, q95)) + labs(title = "Boxplot para Tiempo de Servicio (seg)",
y = "Tiempo")Medidas de Dispersión
[1] 14402.27
[1] 120.0095
[1] 82.35503
[1] 122.0393
[1] 18.13177 1602.69832
[1] 1584.567
Manipulacion de datos - Intermedio
Crear resúmenes summarise()
summarise() permite aplicar funciones a nuestro data.frame, en R-base se usa tapply(), otra opcion es ddply() del paquete plyr.
# Obtener la media del tiempo de servicio
data_banco %>% summarise(MEDIA = mean(Tiempo_Servicio_seg, na.rm = TRUE), MEDIA_ACOT = mean(Tiempo_Servicio_seg,
na.rm = TRUE, trim = 0.05), CANTIDAD = n())# A tibble: 1 x 3
MEDIA MEDIA_ACOT CANTIDAD
<dbl> <dbl> <int>
1 156. 142. 24299
Crear resúmenes para datos agrupados
# Obtener medidas de tendencia central para el tiempo de servicio para cada tipo
# de transaccion
data_banco %>% group_by(Transaccion) %>% summarise_at(vars(Tiempo_Servicio_seg),
funs(MEDIA = mean(., na.rm = TRUE), MEDIA_ACOT = mean(., na.rm = TRUE, trim = 0.05),
CANTIDAD = n()))# A tibble: 3 x 4
Transaccion MEDIA MEDIA_ACOT CANTIDAD
<chr> <dbl> <dbl> <int>
1 Cobrar cheque (Cta del Bco) 186. 175. 5407
2 Cobro/Pago (Cta externa) 301. 285. 3005
3 Deposito 118. 112. 15887
# Obtener medidas de tendencia central para el tiempo de servicio para cada
# Transaccion y Nivel de Satisfaccion
data_banco %>% group_by(Transaccion, Satisfaccion) %>% summarise_at(vars(Tiempo_Servicio_seg),
funs(MEDIA = mean(., na.rm = TRUE), MEDIA_ACOT = mean(., na.rm = TRUE, trim = 0.05),
CANTIDAD = n()))# A tibble: 15 x 5
# Groups: Transaccion [3]
Transaccion Satisfaccion MEDIA MEDIA_ACOT CANTIDAD
<chr> <ord> <dbl> <dbl> <int>
1 Cobrar cheque (Cta del Bco) Muy Malo 186. 175. 505
2 Cobrar cheque (Cta del Bco) Malo 183. 174. 840
3 Cobrar cheque (Cta del Bco) Regular 188. 177. 1046
4 Cobrar cheque (Cta del Bco) Bueno 185. 174. 1423
5 Cobrar cheque (Cta del Bco) Muy Bueno 187. 176. 1593
6 Cobro/Pago (Cta externa) Muy Malo 272. 260. 238
7 Cobro/Pago (Cta externa) Malo 290. 271. 403
8 Cobro/Pago (Cta externa) Regular 307. 293. 556
9 Cobro/Pago (Cta externa) Bueno 309. 292. 851
10 Cobro/Pago (Cta externa) Muy Bueno 304. 287. 957
11 Deposito Muy Malo 113. 108. 2266
12 Deposito Malo 116. 110. 3231
13 Deposito Regular 120. 113. 3037
14 Deposito Bueno 118. 112. 3641
15 Deposito Muy Bueno 119. 114. 3712
Crear resúmenes para datos agrupados y filtrados
Para la Sucursal 62, obtener medidas de tendencia central para el tiempo de servicio para cada Transaccion y Nivel de Satisfaccion
Obtener medidas de tendencia central para el tiempo de servicio para cada Sucursal
data_banco %>% filter( Sucursal== 62) %>% group_by(Transaccion, Satisfaccion) %>% summarise_at( vars(Tiempo_Servicio_seg), funs ( MEDIA= mean(., na.rm=TRUE), MEDIA_ACOT= mean(., na.rm = TRUE, trim = 0.05), CANTIDAD= n() ) )
Tablas de Frecuencia - V. Numérica
library("fdth")
## tabl_frec <- fdt( data_banco$Tiempo_Servicio_seg , breaks='Sturges' ) ## Base R
tabl_frec <- data_banco %$% fdt(Tiempo_Servicio_seg, breaks = "Sturges")
tabl_frec Class limits f rf rf(%) cf cf(%)
[17.95045,117.9989) 11642 0.48 47.91 11642 47.91
[117.9989,218.0473) 7697 0.32 31.68 19339 79.59
[218.0473,318.0957) 2910 0.12 11.98 22249 91.56
[318.0957,418.1442) 1119 0.05 4.61 23368 96.17
[418.1442,518.1926) 454 0.02 1.87 23822 98.04
[518.1926,618.241) 241 0.01 0.99 24063 99.03
[618.241,718.2894) 114 0.00 0.47 24177 99.50
[718.2894,818.3379) 63 0.00 0.26 24240 99.76
[818.3379,918.3863) 34 0.00 0.14 24274 99.90
[918.3863,1018.435) 10 0.00 0.04 24284 99.94
[1018.435,1118.483) 7 0.00 0.03 24291 99.97
[1118.483,1218.532) 4 0.00 0.02 24295 99.98
[ reached 'max' / getOption("max.print") -- omitted 4 rows ]
Histograma
hist(data_banco$Tiempo_Servicio_seg, breaks = "Sturges", main = "Histograma para la variable Tiempo de respuesta")# Definiendo nosotros mismos los rangos tabl_frec <-
# fdt(data_banco$Tiempo_Servicio_seg, start = 0, end = 500, h = 50, right =
# FALSE) ## BaseR
tabl_frec <- data_banco %$% fdt(Tiempo_Servicio_seg, start = 0, end = 500, h = 50,
right = FALSE)
tabl_frec Class limits f rf rf(%) cf cf(%)
[0,50) 2464 0.10 10.14 2464 10.14
[50,100) 6990 0.29 28.77 9454 38.91
[100,150) 5378 0.22 22.13 14832 61.04
[150,200) 3507 0.14 14.43 18339 75.47
[200,250) 2281 0.09 9.39 20620 84.86
[250,300) 1280 0.05 5.27 21900 90.13
[300,350) 816 0.03 3.36 22716 93.49
[350,400) 515 0.02 2.12 23231 95.60
[400,450) 311 0.01 1.28 23542 96.88
[450,500) 213 0.01 0.88 23755 97.76
ini <- tabl_frec$breaks["start"]
fin <- tabl_frec$breaks["end"]
ancho <- tabl_frec$breaks["h"]
maxim <- max(data_banco$Tiempo_Servicio_seg)
breaks_histog <- c(seq(from = ini, to = fin, by = ancho), maxim)
hist(data_banco$Tiempo_Servicio_seg, breaks_histog)# Con ggplot2
ggplot(data = data_banco, aes(x = Tiempo_Servicio_seg)) + geom_histogram(aes(y = ..count..)) +
labs(title = "Histograma para Tiempo de Servicio (seg)", y = "Cantidad", x = "Tiempo") # Tablas de Frecuencia - V. Cualitativa
Cobrar cheque (Cta del Bco) Cobro/Pago (Cta externa)
5407 3005
Deposito
15887
Muy Malo Malo Regular Bueno Muy Bueno
3009 4474 4639 5915 6262
par(las = 2) # Poner horizontal los labels
par(mar = c(5, 12, 4, 2)) # Aumentar margen
barplot(table(data_banco$Transaccion), horiz = TRUE) ### Con ggplot2
ggplot(data = data_banco, aes(x = Satisfaccion)) + geom_bar() + labs(title = "Grafico de barra para Nivel de Satisfaccion",
y = "Cantidad", x = "Nivel de Satisfaccion")# Con ggplot2
ggplot(data = data_banco, aes(x = Satisfaccion)) + geom_bar() + coord_flip() + labs(title = "Grafico de barra para Nivel de Satisfaccion",
y = "Cantidad", x = "Nivel de Satisfaccion")Descriptivas - Summary
Obtiene las siguientes estadísticas descriptivas:
- Variables Numéricas: Min, Max, Cuartiles y Media
- Variables carácter: El total de datos
- Variables factor: frecuencias
- summary()
Min. 1st Qu. Median Mean 3rd Qu. Max.
18.13 75.69 122.45 155.58 197.73 1602.70
Sucursal Cajero ID_Transaccion Transaccion
Length:24299 Length:24299 Length:24299 Length:24299
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Tiempo_Servicio_seg Satisfaccion Monto Tiempo_Servicio_Min
Min. : 18.13 Muy Malo :3009 Min. : 53.82 Min. : 0.3022
1st Qu.: 75.69 Malo :4474 1st Qu.:1417.73 1st Qu.: 1.2615
Median : 122.45 Regular :4639 Median :2087.43 Median : 2.0409
Mean : 155.58 Bueno :5915 Mean :1996.16 Mean : 2.5930
3rd Qu.: 197.73 Muy Bueno:6262 3rd Qu.:2482.09 3rd Qu.: 3.2955
Max. :1602.70 Max. :6278.02 Max. :26.7116
Descriptivas - PrettyR
describe() Puede ser más completo que summary
library(prettyR)
describe(data_banco, num.desc = c("mean", "sd", "median", "min", "max", "valid.n"))Description of data_banco
Numeric
mean sd median min max valid.n
Tiempo_Servicio_seg 155.58 120.01 122.45 18.13 1602.70 24299
Monto 1996.16 816.15 2087.43 53.82 6278.02 24299
Tiempo_Servicio_Min 2.59 2.00 2.04 0.30 26.71 24299
Factor
Satisfaccion Muy Bueno Bueno Regular Malo Muy Malo
Count 6262.00 5915.00 4639.00 4474.00 3009.00
Percent 25.77 24.34 19.09 18.41 12.38
Mode Muy Bueno
Sucursal 85 443 267 62 586
Count 12044.00 4190.00 3329.0 2838.00 1898.00
Percent 49.57 17.24 13.7 11.68 7.81
Mode 85
Cajero 3983 472 3678 357 2503 4208 3732 2958
Count 4280.00 2764.00 1962.00 1832.00 1578.00 1471.00 1339.00 1327.00
Percent 17.61 11.37 8.07 7.54 6.49 6.05 5.51 5.46
Cajero 4796 4820 5286 56 5211 2556 70 299 4837
Count 1084.00 1067.00 1049.00 832.00 675.00 667.00 656.0 597.00 550.00
Percent 4.46 4.39 4.32 3.42 2.78 2.74 2.7 2.46 2.26
Cajero 2623 4424 63 2230 3023 5174 3327 4353 87 321
Count 182.00 94.00 81.00 53.00 51.00 47.00 37.00 14.00 7.00 3.00
Percent 0.75 0.39 0.33 0.22 0.21 0.19 0.15 0.06 0.03 0.01
Mode 3983
ID_Transaccion 3 10 2
Count 15887.00 5407.00 3005.00
Percent 65.38 22.25 12.37
Mode 3
Transaccion Deposito Cobrar cheque (Cta del Bco) Cobro/Pago (Cta externa)
Count 15887.00 5407.00 3005.00
Percent 65.38 22.25 12.37
Mode Deposito
Q25 <- function(x, na.rm = TRUE) {
quantile(as.numeric(x), 0.25, na.rm = na.rm, names = FALSE)
}
Q75 <- function(x, na.rm = TRUE) {
quantile(as.numeric(x), 0.75, na.rm = na.rm, names = FALSE)
}
describe(data_banco, num.desc = c("mean", "median", "sd", "min", "max", "Q25", "Q75",
"valid.n"))Description of data_banco
Numeric
mean median sd min max Q25 Q75
Tiempo_Servicio_seg 155.58 122.45 120.01 18.13 1602.70 75.69 197.73
Monto 1996.16 2087.43 816.15 53.82 6278.02 1417.73 2482.09
Tiempo_Servicio_Min 2.59 2.04 2.00 0.30 26.71 1.26 3.30
valid.n
Tiempo_Servicio_seg 24299
Monto 24299
Tiempo_Servicio_Min 24299
Factor
Satisfaccion Muy Bueno Bueno Regular Malo Muy Malo
Count 6262.00 5915.00 4639.00 4474.00 3009.00
Percent 25.77 24.34 19.09 18.41 12.38
Mode Muy Bueno
Sucursal 85 443 267 62 586
Count 12044.00 4190.00 3329.0 2838.00 1898.00
Percent 49.57 17.24 13.7 11.68 7.81
Mode 85
Cajero 3983 472 3678 357 2503 4208 3732 2958
Count 4280.00 2764.00 1962.00 1832.00 1578.00 1471.00 1339.00 1327.00
Percent 17.61 11.37 8.07 7.54 6.49 6.05 5.51 5.46
Cajero 4796 4820 5286 56 5211 2556 70 299 4837
Count 1084.00 1067.00 1049.00 832.00 675.00 667.00 656.0 597.00 550.00
Percent 4.46 4.39 4.32 3.42 2.78 2.74 2.7 2.46 2.26
Cajero 2623 4424 63 2230 3023 5174 3327 4353 87 321
Count 182.00 94.00 81.00 53.00 51.00 47.00 37.00 14.00 7.00 3.00
Percent 0.75 0.39 0.33 0.22 0.21 0.19 0.15 0.06 0.03 0.01
Mode 3983
ID_Transaccion 3 10 2
Count 15887.00 5407.00 3005.00
Percent 65.38 22.25 12.37
Mode 3
Transaccion Deposito Cobrar cheque (Cta del Bco) Cobro/Pago (Cta externa)
Count 15887.00 5407.00 3005.00
Percent 65.38 22.25 12.37
Mode Deposito
# Sólo columnas numéricas
describe(data_banco[, sapply(data_banco, is.numeric)], num.desc = c("mean", "sd",
"median", "min", "max", "valid.n"))Description of data_banco[, sapply(data_banco, is.numeric)]
Numeric
mean sd median min max valid.n
Tiempo_Servicio_seg 155.58 120.01 122.45 18.13 1602.70 24299
Monto 1996.16 816.15 2087.43 53.82 6278.02 24299
Tiempo_Servicio_Min 2.59 2.00 2.04 0.30 26.71 24299