La preparación del ambiente contempla la carga de la librería tidyverse, junto con la carga de la data alojada en la dirección "https://goo.gl/Wy3GsU", y finalmente una revisión y descripción general del data frame.
# Cargar Librería
library(tidyverse)
## ── Attaching packages ──────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.0 ✔ purrr 0.2.5
## ✔ tibble 1.4.2 ✔ dplyr 0.7.7
## ✔ tidyr 0.8.2 ✔ stringr 1.3.1
## ✔ readr 1.1.1 ✔ forcats 0.3.0
## ── Conflicts ─────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
# Cargar Data
alumnos <- read_csv("https://goo.gl/Wy3GsU")
## Parsed with column specification:
## cols(
## dificultad = col_double(),
## satisfaccion = col_double(),
## grupo = col_character()
## )
# Visualizar Data
alumnos
## # A tibble: 3,000 x 3
## dificultad satisfaccion grupo
## <dbl> <dbl> <chr>
## 1 39.6 62.8 grp04
## 2 50.7 57.5 grp03
## 3 36.8 67.2 grp04
## 4 69.9 44.5 grp02
## 5 52.6 43.8 grp02
## 6 37 64.8 grp04
## 7 54.8 65.7 grp04
## 8 58.2 52.5 grp03
## 9 56.0 65.9 grp03
## 10 44 67.1 grp04
## # ... with 2,990 more rows
View(alumnos)
# Describir Data
dim(alumnos)
## [1] 3000 3
glimpse(alumnos)
## Observations: 3,000
## Variables: 3
## $ dificultad <dbl> 39.64, 50.66, 36.79, 69.86, 52.64, 37.00, 54.79, ...
## $ satisfaccion <dbl> 62.78, 57.49, 67.23, 44.47, 43.84, 64.77, 65.74, ...
## $ grupo <chr> "grp04", "grp03", "grp04", "grp02", "grp02", "grp...
ggplot(data = alumnos, aes(x = dificultad, y = satisfaccion)) +
geom_point()
De la gráfica anterior se aprecia que existe una relación entre el nivel de dificultad percibida por el alumno y su evaluación de satisfacción. Una idea general es que en la medida que aumenta la dificultad del curso menor es el nivel de satisfacción evaluado por los alumnos. Puede existir un argumento psicológico que arrastre esto ya que si el curso se te hizo fácil de entender no debería existir una intención de evaluarlo mal. Sin embargo, cabe destacar que existen alumnos para los cuales a pesar de evaluar el curso con una baja dificultad, igualmente tienen un indicador de satisfacción bajo y esto puede ser porque las expectativas del curso no estuvieron de acuerdo a lo que él esperaba. Para tranquilidad del profesor pareciera ser que son algunos casos especiales y no corresponden a una tendencia en su ramo.
Es interesante notar que existen diversas evaluaciones de satisfacción para un mismo nivel de dificultad, lo que conlleva a evaluar si la variable de agrupación de los alumnos tiene alguna injerencia en las evaluaciones. Otro punto interesante es que la escala de satisfacción no tiene evaluaciones de alumnos sobre los 90 puntos, lo que sería interesante de profundizar para ver si se trata de una problema en los alcances del curso o en la metodologìa utilizada para enseñar.
ggplot(data = alumnos, aes(x = dificultad, y = satisfaccion)) +
geom_point() +
geom_smooth(colour = 'red')
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
ggplot(data = alumnos, aes(x = dificultad, y = satisfaccion)) +
geom_point(aes(color = grupo))
ggplot(data = alumnos, aes(x = dificultad, y = satisfaccion)) +
geom_point(aes(color = grupo)) +
geom_smooth(colour = 'red') +
facet_wrap(vars(grupo), nrow = 2, ncol = 3)
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Al desarrollar el análisis a lo largo de los grupos se puede apreciar que existe una relación ímplicita entre la dificultad y la satisfacción. A diferencia del análisis anterior en el que se generaba una hipótesis de relación inversa para todos los alumnos (en la que se consideraba que a mayor dificultad se tiene una menor satisfacción) en este caso, en los grupos se aprecia que existe una relación directa entre dificultad y satisfacción. Sin embargo, esta relación subyacente puede estar condicionada según las características de agrupación que se consideran, ya que de la gráfica anterior se aprecian cortes con características que tienden a estar relacionado con la distribución de los grupos.
Más que cambiar la hipótesis, se debe considerar el sesgo de generalización ya que una mirada general de los alumnos conlleva a crear una mirada de relaciones entre dificultad y satisfacción. Sin embargo, en la evaluación por grupos (siempre considerando las variables que generan la agrupación) podría llevar a contradicciones.
La preparación del ambiente contempla la carga de la librería lubridate, junto con la carga de la data alojada en la dirección "https://goo.gl/3JUCma", y finalmente una revisión y descripción general del data frame.
# Cargar Librería
library(lubridate)
##
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
##
## date
# Cargar Data
temperatura <- read_csv("https://goo.gl/3JUCma")
## Parsed with column specification:
## cols(
## anio_mes = col_date(format = ""),
## mediana = col_double(),
## inferio = col_double(),
## superio = col_double(),
## decada = col_integer()
## )
## Warning in rbind(names(probs), probs_f): number of columns of result is not
## a multiple of vector length (arg 1)
## Warning: 120 parsing failures.
## row # A tibble: 5 x 5 col row col expected actual file expected <int> <chr> <chr> <chr> <chr> actual 1 1801 decada no trailing characters .00E+03 'https://goo.gl/3JUCma' file 2 1802 decada no trailing characters .00E+03 'https://goo.gl/3JUCma' row 3 1803 decada no trailing characters .00E+03 'https://goo.gl/3JUCma' col 4 1804 decada no trailing characters .00E+03 'https://goo.gl/3JUCma' expected 5 1805 decada no trailing characters .00E+03 'https://goo.gl/3JUCma'
## ... ................. ... ..................................................................... ........ ..................................................................... ...... ..................................................................... .... ..................................................................... ... ..................................................................... ... ..................................................................... ........ .....................................................................
## See problems(...) for more details.
# Visualizar Data
temperatura
## # A tibble: 1,992 x 5
## anio_mes mediana inferio superio decada
## <date> <dbl> <dbl> <dbl> <int>
## 1 1850-01-01 -0.702 -1.10 -0.299 1850
## 2 1850-02-01 -0.281 -0.673 0.117 1850
## 3 1850-03-01 -0.732 -1.08 -0.382 1850
## 4 1850-04-01 -0.569 -0.904 -0.237 1850
## 5 1850-05-01 -0.326 -0.662 0.005 1850
## 6 1850-06-01 -0.212 -0.515 0.085 1850
## 7 1850-07-01 -0.128 -0.457 0.199 1850
## 8 1850-08-01 -0.232 -0.595 0.132 1850
## 9 1850-09-01 -0.435 -0.808 -0.063 1850
## 10 1850-10-01 -0.452 -0.793 -0.104 1850
## # ... with 1,982 more rows
View(temperatura)
# Describir Data
dim(temperatura)
## [1] 1992 5
glimpse(temperatura)
## Observations: 1,992
## Variables: 5
## $ anio_mes <date> 1850-01-01, 1850-02-01, 1850-03-01, 1850-04-01, 1850...
## $ mediana <dbl> -0.702, -0.281, -0.732, -0.569, -0.326, -0.212, -0.12...
## $ inferio <dbl> -1.102, -0.673, -1.080, -0.904, -0.662, -0.515, -0.45...
## $ superio <dbl> -0.299, 0.117, -0.382, -0.237, 0.005, 0.085, 0.199, 0...
## $ decada <int> 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850,...
anio_mes y mediana.ggplot(data = temperatura, aes(x = anio_mes, y = mediana)) +
geom_line()
lubridate, y usando las funciones year y month sobre la columna anio_mes cree dos variables en la tabla temperatura y nómbrelas como anio y mes.El paquete lubridate fue cargado en la estructura definida preparación de ambiente.
temperatura <- temperatura %>%
mutate(anio = year(anio_mes), mes = month(anio_mes))
temperatura
## # A tibble: 1,992 x 7
## anio_mes mediana inferio superio decada anio mes
## <date> <dbl> <dbl> <dbl> <int> <dbl> <dbl>
## 1 1850-01-01 -0.702 -1.10 -0.299 1850 1850 1
## 2 1850-02-01 -0.281 -0.673 0.117 1850 1850 2
## 3 1850-03-01 -0.732 -1.08 -0.382 1850 1850 3
## 4 1850-04-01 -0.569 -0.904 -0.237 1850 1850 4
## 5 1850-05-01 -0.326 -0.662 0.005 1850 1850 5
## 6 1850-06-01 -0.212 -0.515 0.085 1850 1850 6
## 7 1850-07-01 -0.128 -0.457 0.199 1850 1850 7
## 8 1850-08-01 -0.232 -0.595 0.132 1850 1850 8
## 9 1850-09-01 -0.435 -0.808 -0.063 1850 1850 9
## 10 1850-10-01 -0.452 -0.793 -0.104 1850 1850 10
## # ... with 1,982 more rows
geom_raster para usarlo con los datos de anio, mes y mediana y comenta que observas.ggplot(data = temperatura, aes(as.factor(mes), anio)) +
geom_raster(aes(fill = mediana))
Se observa, aunque de manera dificultosa que en la medida que ha pasado el tiempo el valor de la mediana de la temperatura ha ido en ascenso, ya que visualmente los valores más cercanos al año 2000, son más claros. Por otro lado, pareciera ser que en los meses de Julio a Septiembre existe un mayor registro de termperaturas (mediana), ya que visualmente son màs claros que los otros meses.
Una mirada más clara es al considerar las decadas registradas para las temperaturas. Acá se aprecia de mejor manera lo antes expuesto.
ggplot(data = temperatura, aes(as.factor(mes), floor(anio/100)*100)) +
geom_raster(aes(fill = mediana))
temperatura_ag <- temperatura %>%
group_by(anio) %>%
summarise(promedio = mean(mediana))
temperatura_ag
## # A tibble: 166 x 2
## anio promedio
## <dbl> <dbl>
## 1 1850 -0.377
## 2 1851 -0.224
## 3 1852 -0.228
## 4 1853 -0.273
## 5 1854 -0.256
## 6 1855 -0.276
## 7 1856 -0.356
## 8 1857 -0.464
## 9 1858 -0.470
## 10 1859 -0.291
## # ... with 156 more rows
ggplot(data = temperatura_ag, aes(x = anio, y = promedio)) +
geom_line() +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Personalmente escogería este último gráfico para poder explicarlo ya que cotenmpla dos aspectos que me parecen relevantes. En primer lugar permite evaluar, de una manera simple (ya que en la medida que nos movemos hacia la derecha avanzamos en el tiempo), la evolución en el tiempo del valor promedio de la temperatura a lo largo de los años. Y en segundo lugar, permite hacer comparaciones a lo largo de diferentes años de una manera simple ya que todos los puntos están en una escala simple de comparar.
La preparación del ambiente contempla la carga de la librería tidyverse, junto con la carga de la data alojada en la dirección "https://goo.gl/Tigfaj" y "https://goo.gl/fT3jwT", y finalmente una revisión y descripción general del data frame.
# Cargar Librería
library(tidyverse)
# Cargar Data
miembros <- read_csv("https://goo.gl/Tigfaj")
## Parsed with column specification:
## cols(
## funcion = col_character(),
## nombre = col_character(),
## organizacion = col_character()
## )
movimientos <- read_csv("https://goo.gl/fT3jwT")
## Parsed with column specification:
## cols(
## nombre = col_character(),
## fecha = col_character(),
## hora = col_integer(),
## minuto = col_integer(),
## importe = col_double(),
## comercio = col_character(),
## actividad_completa = col_character(),
## actividad = col_character()
## )
# Visualizar Data
miembros
## # A tibble: 83 x 3
## funcion nombre organizacion
## <chr> <chr> <chr>
## 1 analista Alberto Recarte Garcia Andrade banco
## 2 analista Alejandro Couceiro Ojeda consultora
## 3 analista Angel Eugenio Gomez del Pulgar Perales banco
## 4 analista Angel Rizaldos Gonzalez banco
## 5 analista Antonio Camara Eguinoa banco
## 6 analista Antonio Rey de Vinas Sanchez-Majestad afp
## 7 analista Antonio Romero Lazaro banco
## 8 analista Arturo Luis Fernandez Alvarez consultora
## 9 analista Beltran Gutierrez Moliner banco
## 10 analista Candido Ceron Escudero banco
## # ... with 73 more rows
movimientos
## # A tibble: 77,202 x 8
## nombre fecha hora minuto importe comercio actividad_compl… actividad
## <chr> <chr> <int> <int> <dbl> <chr> <chr> <chr>
## 1 Albert… 2003-… 12 30 38.7 RCG OFI… CONFECCION TEXT… ROPA
## 2 Albert… 2003-… 12 32 14.6 MANZANI… HOTELES,MOTELES… HOTEL
## 3 Albert… 2003-… 19 7 95.6 REST RE… RESTAURANTES RE… RESTAURA…
## 4 Albert… 2003-… 15 31 49.1 ESTACON… GASOLINERAS COCHE
## 5 Albert… 2003-… 16 5 13.9 NISA (H… GASOLINERAS COCHE
## 6 Albert… 2003-… 15 27 80 HOSTAL … HOTELES,MOTELES… HOTEL
## 7 Albert… 2003-… 10 20 53.4 E S MON… GASOLINERAS COCHE
## 8 Albert… 2003-… 12 58 42 LA CASA… JUGUETES, ARTIC… COMPRA B…
## 9 Albert… 2003-… 15 25 263. ASADOR … RESTAURANTES RE… RESTAURA…
## 10 Albert… 2003-… 15 28 2.10 AUTOPIS… AUTOPISTAS (TER… COCHE
## # ... with 77,192 more rows
# Describir Data
dim(miembros)
## [1] 83 3
glimpse(miembros)
## Observations: 83
## Variables: 3
## $ funcion <chr> "analista", "analista", "analista", "analista", "...
## $ nombre <chr> "Alberto Recarte Garcia Andrade", "Alejandro Couc...
## $ organizacion <chr> "banco", "consultora", "banco", "banco", "banco",...
dim(movimientos)
## [1] 77202 8
glimpse(movimientos)
## Observations: 77,202
## Variables: 8
## $ nombre <chr> "Alberto Recarte Garcia Andrade", "Alberto ...
## $ fecha <chr> "2003-01-03 23:00:00 UTC", "2003-01-03 23:0...
## $ hora <int> 12, 12, 19, 15, 16, 15, 10, 12, 15, 15, 15,...
## $ minuto <int> 30, 32, 7, 31, 5, 27, 20, 58, 25, 28, 28, 2...
## $ importe <dbl> 38.70, 14.60, 95.62, 49.13, 13.94, 80.00, 5...
## $ comercio <chr> "RCG OFICINA", "MANZANIL AREA", "REST REAL ...
## $ actividad_completa <chr> "CONFECCION TEXTIL EN GENERAL", "HOTELES,MO...
## $ actividad <chr> "ROPA", "HOTEL", "RESTAURANTE", "COCHE", "C...
movimientos <- mutate(movimientos, fecha_new = as.Date(ymd_hms(fecha)))
movimientos_ag <- movimientos %>%
group_by(fecha_new) %>%
summarise(
importe_total = sum(importe),
operaciones = n()
)
movimientos_ag
## # A tibble: 3,338 x 3
## fecha_new importe_total operaciones
## <date> <dbl> <int>
## 1 2002-12-31 2618. 24
## 2 2003-01-01 8320. 32
## 3 2003-01-02 6898. 24
## 4 2003-01-03 2816. 21
## 5 2003-01-04 5607. 36
## 6 2003-01-05 583. 5
## 7 2003-01-06 1467. 8
## 8 2003-01-07 6931. 65
## 9 2003-01-08 2982. 23
## 10 2003-01-09 1618. 17
## # ... with 3,328 more rows
Entendiendo que son datos evolutivos por fecha, la mejor opción a mi parecer es un geom_line para evaluar continuidad de las medidas.
ggplot(movimientos_ag, aes(x = fecha_new, y = importe_total)) +
geom_line() +
geom_smooth()
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
ggplot(movimientos_ag, aes(x = fecha_new, y = operaciones)) +
geom_line() +
geom_smooth()
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Ahora bien, se puede considerar una visualización más agregada que permita evaluar los montos medios y el grado de variabilidad presentes por año. Para esto, recomiendo el uso de un geom_boxplot.
ggplot(movimientos_ag, aes(x = as.factor(year(as.Date(fecha_new))), y = importe_total)) +
geom_boxplot(color = rainbow(n=11)) +
xlab("Año")
ggplot(movimientos_ag, aes(x = as.factor(year(as.Date(fecha_new))), y = operaciones)) +
geom_boxplot(color = rainbow(n=11)) +
xlab("Año")
En esta mirada se aprecia que existe una alta variabilidad de los importes y operaciones a lo largo de los años, con una leve tendencia al alza del promedio. Otro punto interesante, que también se ve en los gráficos anteriores es la baja frecuencia de registros que existen para el 2012.
importes_p_actividad <- movimientos %>%
group_by(actividad) %>%
summarise(
importe_total = sum(importe)
)
ggplot(importes_p_actividad, aes(x = actividad, y = importe_total)) +
geom_col() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Utilicé el comando theme(axis.text.x = element_text(angle = 90, hjust = 1)) en función a una búsqueda para resolver que los nombres del eje x fueran escritos de forma horizontal para una mejor lectura.
importes_p_actividad_hora <- movimientos %>%
group_by(actividad, hora) %>%
summarise(
importe_total = sum(importe)
)
ggplot(importes_p_actividad_hora, aes(x = hora, y = actividad)) +
geom_tile(aes(fill = importe_total))
Del gráfico anterior se aprecia que la actividad de restaurante en el horario de las 15:00 es donde se presenta el mayor importe , lo que hace sentido por ser una actividad de alta demanda por la gente. Este comportamiento, aunque en menor medida se aprecia en los horarios de 10:00 PM a 01:00 AM, aunque es claro que a lo largo de todo el día se tiene registro de importes. Otra actividad interesante es el de la compra de bienes, que a primera vista pueden ser menos frecuentes pero involucran niveles de importe unitario muy elevados. Al parecer el horario de almuerzo es utilizado para la realización de algunos trámites ya que no es tan temprano ni tampoco muy tarde.
Otra mirada contempla el considerar es la relación de los horarios de atención con la concentración de los importes. Por ejemplo, en la actividad de banco no existen importes en los horarios donde habitualmente no hay atención. Al igual que el anterior, las actividades de business y deporte tienen muy marcados horarios de utilización.
dueño?ggplot(movimientos) +
geom_point(aes(importe, actividad), alpha = 0.5)
El gráfico anterior muestra los diversos niveles de importe que se tienen para cada actividad, cada punto representa una transacción realizada por los clientes en diferentes instantes de tiempo. Temas interesantes de evaluar acá sería el determinar si existen actividades en los que los importes son muy variables para identificar que tipo de transacción se realiza y fomentar el consumo de estos, o por otro lado identificar que actividades son rentables en terminos de frecuencia de transacción o importe unitario. Esta segmentación permite desarrollar estrategias de comunicación con los clientes diferenciadas: en el caso de un perfil transaccional, se puede asumir que el cliente generalmente lo hará, por lo que promociones serían un buen plan; por otro lado en temas que son poco frecuentes, pero que el perfil va por un concepto de importe unitario alto, se debe trabajar en un modelo de comunicación orientado al Top of Mind de tal manera que cuando un cliente desee optar por una transacción de alto costo, la tienda en cuestión sea la opción indicada.
En general, la revisión de la gráfica anterior permite identificar claramente dos aspectos: valores atípicos extremos, valores atípicos de baja frecuencia' yvalores negativos’. Estos últimos llaman la atención puesto que al hacer referencia a importes, la naturaleza de un valor menor que cero puede implicar una devolución por lo que se hace necesaria una auditoría respecto de los registros.
En este caso nos enfocamos en identificar el registro con el mayor importe. Este caso corresponde a una transacción realizada por Ildefonso Jose Sanchez Barcoj con un importe de 16922 USD (Supuesto) asociado a compra de bienes, y que fue realizado el 30/12/2009
VAE <- movimientos %>%
arrange(desc(importe)) %>%
filter(importe == max(importe)) %>%
select(nombre, importe, actividad, fecha_new, hora, minuto)
VAE
## # A tibble: 1 x 6
## nombre importe actividad fecha_new hora minuto
## <chr> <dbl> <chr> <date> <int> <int>
## 1 Ildefonso Jose Sanchez Bar… 16922. COMPRA BIEN… 2009-12-30 2 40
En este caso nos enfocamos en identificar el registro con la actividad con la menor frecuencia de transacciones.
VABF_Aux <- movimientos %>%
group_by(actividad) %>%
summarise(n = n()) %>%
arrange(n) %>%
filter(n == min(n))
El código anterior permite identificar aquellas actividades que tienen el menor número de transacciones. En este caso las actividades de Agricultura y Funeraria presentan solamente 1 registro. En la siguiente tabla se presentan los casos asociados a estas actividades.
VABF <- merge(VABF_Aux, movimientos, by = c("actividad")) %>%
select(nombre, importe, actividad, fecha_new, hora, minuto)
VABF
## nombre importe actividad fecha_new hora minuto
## 1 Miguel Blesa de la Parra 183.00 AGRICULTURA 2008-08-10 15 44
## 2 Mariano Perez Claver 4293.27 FUNERARIAS 2006-08-20 10 1
En este caso nos enfocamos en identificar el registro con un importe negativo.
VN <- movimientos %>%
arrange(importe) %>%
filter(importe < 0)
VN
## # A tibble: 656 x 9
## nombre fecha hora minuto importe comercio actividad_compl… actividad
## <chr> <chr> <int> <int> <dbl> <chr> <chr> <chr>
## 1 Ricar… 2007… 14 32 -11930 <NA> <NA> <NA>
## 2 Ildef… 2006… 12 51 -9785. <NA> <NA> <NA>
## 3 Ildef… 2009… 9 26 -8383. <NA> <NA> <NA>
## 4 Matia… 2007… 15 51 -7288. EXECUTI… AGENCIAS DE VIA… VIAJE
## 5 Maria… 2006… 14 17 -6648 MILLAN … AGENCIAS DE VIA… VIAJE
## 6 Matia… 2006… 15 33 -5763. <NA> BRITISH AIRWAYS… AVION
## 7 Matia… 2006… 15 33 -5763. <NA> BRITISH AIRWAYS… AVION
## 8 Franc… 2008… 15 23 -4641. AEROMEX… LINEAS AEREAS AVION
## 9 Carme… 2007… 17 7 -3730 EL CORT… EL CORTE INGLES COMPRA B…
## 10 Maria… 2010… 10 12 -3526 <NA> <NA> <NA>
## # ... with 646 more rows, and 1 more variable: fecha_new <date>
De los resultados anteriores, llama la atención que existen algunos registros en los cuales no se tienen una descripción del comercio y/o la actividad asociada a pesar de tener importes negativos. Estos valores llaman la atención puesto que es díficil poder hacer un seguimiento a qué transacción podría corresponder la devolución.
VN_NA <- movimientos %>%
arrange(importe) %>%
filter(importe < 0) %>%
filter(is.na(comercio), is.na(actividad_completa), is.na(actividad))
VN_NA
## # A tibble: 14 x 9
## nombre fecha hora minuto importe comercio actividad_compl… actividad
## <chr> <chr> <int> <int> <dbl> <chr> <chr> <chr>
## 1 Ricar… 2007… 14 32 -11930 <NA> <NA> <NA>
## 2 Ildef… 2006… 12 51 -9785. <NA> <NA> <NA>
## 3 Ildef… 2009… 9 26 -8383. <NA> <NA> <NA>
## 4 Maria… 2010… 10 12 -3526 <NA> <NA> <NA>
## 5 Carlo… 2003… 12 1 -3000 <NA> <NA> <NA>
## 6 Ildef… 2010… 11 6 -1295. <NA> <NA> <NA>
## 7 Carlo… 2004… 10 24 -731 <NA> <NA> <NA>
## 8 Jose … 2004… 10 51 -301. <NA> <NA> <NA>
## 9 Ildef… 2009… 13 12 -300 <NA> <NA> <NA>
## 10 Carlo… 2005… 16 4 -300 <NA> <NA> <NA>
## 11 Juan … 2010… 9 45 -273. <NA> <NA> <NA>
## 12 Ildef… 2007… 11 41 -152 <NA> <NA> <NA>
## 13 Pedro… 2003… 10 49 -150 <NA> <NA> <NA>
## 14 Ildef… 2007… 14 35 -110 <NA> <NA> <NA>
## # ... with 1 more variable: fecha_new <date>
Al revisar este último resultado se puede apreciar que existe una repetición no menor de algunos responsables.
VN_NA_Ag <- VN_NA %>%
group_by(nombre) %>%
summarise(n = n()) %>%
arrange(desc(n))
VN_NA_Ag
## # A tibble: 7 x 2
## nombre n
## <chr> <int>
## 1 Ildefonso Jose Sanchez Barcoj 6
## 2 Carlos Vela Garcia 3
## 3 Jose Maria Arteta Vico 1
## 4 Juan Jose Azcona Olondriz 1
## 5 Mariano Perez Claver 1
## 6 Pedro Bedia Perez 1
## 7 Ricardo Romero de Tejada y Picatoste 1
Se debería revisar el caso del señor Ildefonso Jose Sanchez Barcoj por tener el mayor número de inconsistencias, sin embargo debemos descartar que la concentración de casos anómalos no tenga relación con el nivel de transacciones que realizar.
T <- movimientos %>%
group_by(nombre) %>%
summarise(t = n()) %>%
arrange(desc(t))
T
## # A tibble: 83 x 2
## nombre t
## <chr> <int>
## 1 Antonio Camara Eguinoa 3358
## 2 Ruben Cruz Orive 3306
## 3 Miguel Angel Araujo Serrano 2854
## 4 Ildefonso Jose Sanchez Barcoj 2743
## 5 Ramon Espinar Gallego 2709
## 6 Antonio Romero Lazaro 2103
## 7 Ricardo Romero de Tejada y Picatoste 2038
## 8 Jose Maria Arteta Vico 1924
## 9 Antonio Rey de Vinas Sanchez-Majestad 1822
## 10 Pablo Abejas Juarez 1744
## # ... with 73 more rows
Finalmente, se debe agregar al análisis al señor Carlos Vela Garcia por tener la mayor tasas de inconsistencia según sus transacciones registradas.
R <- merge(T, VN_NA_Ag, by = c("nombre")) %>%
mutate(tasa = n/t)
R
## nombre t n tasa
## 1 Carlos Vela Garcia 807 3 0.0037174721
## 2 Ildefonso Jose Sanchez Barcoj 2743 6 0.0021873861
## 3 Jose Maria Arteta Vico 1924 1 0.0005197505
## 4 Juan Jose Azcona Olondriz 817 1 0.0012239902
## 5 Mariano Perez Claver 971 1 0.0010298661
## 6 Pedro Bedia Perez 622 1 0.0016077170
## 7 Ricardo Romero de Tejada y Picatoste 2038 1 0.0004906771