Hola! Para este pequeño tutorial sobre Rmarkdown usaré un notebook de
R. Los notebooks en Rmarkdown nos ayudan a combinar código y texto pero
de forma interactiva, de manera tal que puedas mostrar
(show) o esconder (hide) el código que
se está utilizando para generar el reporte en html.
La sintaxis es igual que en un archivo .rmd como te darás cuenta a
continuación. Por ejemplo, podemos crear encabezados de primer nivel,
segundo nivel, etc; agregando un número determinado de #. Pero a medida
que avance en el notebook, iré explicando sintaxis adicional sobre
Rmarkdown. En el siguiente párrafo crearé un encabezado de primer nivel
con un # para el título de la subsección.
Caso Data Banco: Tiempos de atención al cliente
Un Banco de la ciudad requiere mejorar los tiempos de atención al
cliente en ventanilla, para ello ha recolectado esta información
anónimamente para cada cajero y transacción realizada.
Entender la data
Para poder abordar el problema planteado por el Banco, es necesario
entender nuestra matriz de datos.
Se sabe que una matriz de datos es aquella compuesta por elementos
[i,j], es decir, la i-ésima fila con la j-ésima columna.
En este caso, cada fila representa a cada uno de los clientes que
realizaron una transacción y cada columna corresponde a las variables
medidas en dichos individuos.
Tipos de datos
Para realizar un análisis exploratorio de datos, es necesario saber
con cuántas observaciones cuenta la data así como el número y tipo de
variables medidas.
Para lo anterior debe importarse la data. Para diferenciar el nombre
de la data, la pondré en este texto como cursiva. La sintaxis para
volver cursiva una palabra es agregando un guión bajo al inicio y final
de la palabra como aquí; o también usando asteriscos como
en este ejemplo. Volviendo al caso de análisis, la data a usar
será el objeto data_banco.
data_banco<-read.xlsx(xlsxFile = "Data/Data_Banco.xlsx", sheet = "Data")
Revisando los tipos de datos por columnas (variables), se tiene la
función str:
str(data_banco)
'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 : chr "2889,3" "1670,69" "3172,49" "1764.92" ...
¿Por qué las variables Sucursal y Cajero, teniendo valores
observados numéricos, son tipo caracter? Nota que esta pregunta
la puse en negritas. La manera de poner un texto en negritas es poniendo
al inicio y final un doble guión bajo, así como estoy poniendo
esta oración. También puedes hacerlo usando doble asterisco
al inicio y final.
Nota: Si las variables no están clasificadas en la naturaleza que
le corresponde, es necesario someter a los datos a
transformaciones.
Mejorando la base
Como se comentó en clases, hay muchas estructuras de datos.
Recordemos cuáles son esas estructuras básicas, enumerándolas; para eso
crearemos viñetas no ordenadas en esta subsección. Puedes crear el
primer nivel con un “*“, el siguiente nivel con”-” y uno subsiguiente
con “+”:
Otra estructura importante de datos es tibble, que no es
nada más que un dataframe mejorado. Para poder convertir un dataframe a
tibble hay varios caminos, entre esos el usar la función
tbl_df() como sigue:
#transformando de dataframe a tibble
data_banco<-tbl_df(data_banco)
Análisis Exploratorio
Como es de interés saber qué sucede con el tiempo de servicio, se
inicia checando cuál es el tiempo promedio de atención en segundos y su
dispersión:
data_banco %>%
summarise(
MEDIA= mean(Tiempo_Servicio_seg, na.rm=TRUE),
VARIANZA= var(Tiempo_Servicio_seg, na.rm = TRUE),
DESVEST = sqrt(VARIANZA)
)%>%View()
Se desprende que el tiempo promedio de atención en segundos es de
155.58 segs. con una dispersión de 120 segs. Es decir que entre
transacciones, el tiempo de atención varía mediantamente respecto al
tiempo promedio.
Verificando lo anterior gráficamente se tiene:
ggplot(data = data_banco, aes(x= Tiempo_Servicio_seg)) +
geom_histogram( aes(y= ..count..),binwidth = 1 ) +
labs(title= 'Histograma para Tiempo de Servicio (seg)', y= "Cantidad", x= "Tiempo")+geom_vline(aes(xintercept = mean(Tiempo_Servicio_seg)), color= "red")

Nótese que la distribución de la variable es asimétrica a la derecha;
la recta roja representa la media del tiempo de servicio. Mediante ésta
última se puede apreciar lo que ocurre con la dispersión.
¿Qué sucede con los tiempos de atención por
transacción?
Explorando gráficamente el tiempo de servicio por transacción:
ggplot(data_banco, aes(x = Tiempo_Servicio_seg)) +
geom_histogram(aes(y = ..density.., fill= Transaccion), binwidth = 7,
position = "identity", alpha= 0.4)

Se aprecia que la transacción que requiere más tiempo por parte de
los clientes es la de Cobro/Pago. Los depósitos, al contrario, es la
transacción que tiene menor tiempo de demora en la atención.
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQphdXRob3I6ICJadWxlbW1hIEJhenVydG8iDQpkYXRlOiAnMjAyNC1BZ29zdG8nDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpIb2xhISBQYXJhIGVzdGUgcGVxdWXDsW8gdHV0b3JpYWwgc29icmUgUm1hcmtkb3duIHVzYXLDqSB1biBub3RlYm9vayBkZSBSLiBMb3Mgbm90ZWJvb2tzIGVuIFJtYXJrZG93biBub3MgYXl1ZGFuIGEgY29tYmluYXIgY8OzZGlnbyB5IHRleHRvIHBlcm8gZGUgZm9ybWEgaW50ZXJhY3RpdmEsIGRlIG1hbmVyYSB0YWwgcXVlIHB1ZWRhcyBtb3N0cmFyIChfX3Nob3dfXykgbyBlc2NvbmRlciAoX19oaWRlX18pIGVsIGPDs2RpZ28gcXVlIHNlIGVzdMOhIHV0aWxpemFuZG8gcGFyYSBnZW5lcmFyIGVsIHJlcG9ydGUgZW4gaHRtbC4NCg0KTGEgc2ludGF4aXMgZXMgaWd1YWwgcXVlIGVuIHVuIGFyY2hpdm8gLnJtZCBjb21vIHRlIGRhcsOhcyBjdWVudGEgIGEgY29udGludWFjacOzbi4gUG9yIGVqZW1wbG8sIHBvZGVtb3MgY3JlYXIgZW5jYWJlemFkb3MgZGUgcHJpbWVyIG5pdmVsLCBzZWd1bmRvIG5pdmVsLCBldGM7IGFncmVnYW5kbyB1biBuw7ptZXJvIGRldGVybWluYWRvIGRlICMuIFBlcm8gYSAgbWVkaWRhIHF1ZSBhdmFuY2UgZW4gZWwgbm90ZWJvb2ssIGlyw6kgZXhwbGljYW5kbyBzaW50YXhpcyBhZGljaW9uYWwgc29icmUgUm1hcmtkb3duLg0KRW4gZWwgc2lndWllbnRlIHDDoXJyYWZvIGNyZWFyw6kgdW4gZW5jYWJlemFkbyBkZSBwcmltZXIgbml2ZWwgY29uIHVuICMgcGFyYSBlbCB0w610dWxvIGRlIGxhIHN1YnNlY2Npw7NuLg0KDQojIENhc28gRGF0YSBCYW5jbzogVGllbXBvcyBkZSBhdGVuY2nDs24gYWwgY2xpZW50ZQ0KDQpVbiBCYW5jbyBkZSBsYSBjaXVkYWQgcmVxdWllcmUgbWVqb3JhciBsb3MgdGllbXBvcyBkZSBhdGVuY2nDs24gYWwgY2xpZW50ZSBlbiB2ZW50YW5pbGxhLCBwYXJhIGVsbG8gaGEgcmVjb2xlY3RhZG8gZXN0YSBpbmZvcm1hY2nDs24gYW7Ds25pbWFtZW50ZSBwYXJhIGNhZGEgY2FqZXJvIHkgdHJhbnNhY2Npw7NuIHJlYWxpemFkYS4NCg0KIyMgRW50ZW5kZXIgbGEgZGF0YQ0KUGFyYSBwb2RlciBhYm9yZGFyIGVsIHByb2JsZW1hIHBsYW50ZWFkbyBwb3IgZWwgQmFuY28sIGVzIG5lY2VzYXJpbyBlbnRlbmRlciBudWVzdHJhIG1hdHJpeiBkZSBkYXRvcy4NCg0KU2Ugc2FiZSBxdWUgdW5hIG1hdHJpeiBkZSBkYXRvcyBlcyBhcXVlbGxhIGNvbXB1ZXN0YSBwb3IgZWxlbWVudG9zIFtpLGpdLCBlcyBkZWNpciwgbGEgaS3DqXNpbWEgZmlsYSBjb24gbGEgai3DqXNpbWEgY29sdW1uYS4NCg0KRW4gZXN0ZSBjYXNvLCBjYWRhIGZpbGEgcmVwcmVzZW50YSBhIGNhZGEgdW5vIGRlIGxvcyBjbGllbnRlcyBxdWUgcmVhbGl6YXJvbiB1bmEgdHJhbnNhY2Npw7NuIHkgY2FkYSBjb2x1bW5hIGNvcnJlc3BvbmRlIGEgbGFzIHZhcmlhYmxlcyBtZWRpZGFzIGVuIGRpY2hvcyBpbmRpdmlkdW9zLg0KDQojIyMgVGlwb3MgZGUgZGF0b3MNClBhcmEgcmVhbGl6YXIgdW4gYW7DoWxpc2lzIGV4cGxvcmF0b3JpbyBkZSBkYXRvcywgZXMgbmVjZXNhcmlvIHNhYmVyIGNvbiBjdcOhbnRhcyBvYnNlcnZhY2lvbmVzIGN1ZW50YSBsYSBkYXRhIGFzw60gY29tbyBlbCBuw7ptZXJvIHkgdGlwbyBkZSB2YXJpYWJsZXMgbWVkaWRhcy4NCg0KUGFyYSBsbyBhbnRlcmlvciBkZWJlIGltcG9ydGFyc2UgbGEgZGF0YS4gUGFyYSBkaWZlcmVuY2lhciBlbCBub21icmUgZGUgbGEgZGF0YSwgbGEgcG9uZHLDqSBlbiBlc3RlIHRleHRvIGNvbW8gY3Vyc2l2YS4gTGEgc2ludGF4aXMgcGFyYSB2b2x2ZXIgY3Vyc2l2YSB1bmEgcGFsYWJyYSBlcyBhZ3JlZ2FuZG8gdW4gZ3Vpw7NuIGJham8gYWwgaW5pY2lvIHkgZmluYWwgZGUgbGEgcGFsYWJyYSBjb21vIF9hcXXDrV87IG8gdGFtYmnDqW4gdXNhbmRvIGFzdGVyaXNjb3MgY29tbyAqZW4gZXN0ZSBlamVtcGxvKi4NClZvbHZpZW5kbyBhbCBjYXNvIGRlIGFuw6FsaXNpcywgbGEgZGF0YSBhIHVzYXIgc2Vyw6EgZWwgb2JqZXRvICpkYXRhX2JhbmNvKi4NCg0KYGBge3J9DQojSW1wb3J0YW5kbyBsYSBkYXRhDQpkYXRhX2JhbmNvPC1yZWFkLnhsc3goeGxzeEZpbGUgPSAiRGF0YS9EYXRhX0JhbmNvLnhsc3giLCBzaGVldCA9ICJEYXRhIikNCmBgYA0KDQoNClJldmlzYW5kbyBsb3MgdGlwb3MgZGUgZGF0b3MgcG9yIGNvbHVtbmFzICh2YXJpYWJsZXMpLCBzZSB0aWVuZSBsYSBmdW5jacOzbiBfc3RyXzoNCg0KYGBge3J9DQpzdHIoZGF0YV9iYW5jbykNCmBgYA0KDQoqKsK/UG9yIHF1w6kgbGFzIHZhcmlhYmxlcyBTdWN1cnNhbCB5IENhamVybywgdGVuaWVuZG8gdmFsb3JlcyBvYnNlcnZhZG9zIG51bcOpcmljb3MsIHNvbiB0aXBvIGNhcmFjdGVyPyoqIE5vdGEgcXVlIGVzdGEgcHJlZ3VudGEgbGEgcHVzZSBlbiBuZWdyaXRhcy4gTGEgbWFuZXJhIGRlIHBvbmVyIHVuIHRleHRvIGVuIG5lZ3JpdGFzIGVzIHBvbmllbmRvIGFsIGluaWNpbyB5IGZpbmFsIHVuIGRvYmxlIGd1acOzbiBiYWpvLCBfX2Fzw60gY29tbyBlc3RveSBwb25pZW5kbyBlc3RhIG9yYWNpw7NuX18uIFRhbWJpw6luIHB1ZWRlcyBoYWNlcmxvIHVzYW5kbyBkb2JsZSBhc3RlcmlzY28gKiphbCBpbmljaW8geSBmaW5hbCoqLg0KDQoqTm90YTogU2kgbGFzIHZhcmlhYmxlcyBubyBlc3TDoW4gY2xhc2lmaWNhZGFzIGVuIGxhIG5hdHVyYWxlemEgcXVlIGxlIGNvcnJlc3BvbmRlLCBlcyBuZWNlc2FyaW8gc29tZXRlciBhIGxvcyBkYXRvcyBhIHRyYW5zZm9ybWFjaW9uZXMuKg0KDQoNCiMjIyBNZWpvcmFuZG8gbGEgYmFzZQ0KQ29tbyBzZSBjb21lbnTDsyBlbiBjbGFzZXMsIGhheSBtdWNoYXMgZXN0cnVjdHVyYXMgZGUgZGF0b3MuIFJlY29yZGVtb3MgY3XDoWxlcyBzb24gZXNhcyBlc3RydWN0dXJhcyBiw6FzaWNhcywgZW51bWVyw6FuZG9sYXM7IHBhcmEgZXNvIGNyZWFyZW1vcyB2acOxZXRhcyBubyBvcmRlbmFkYXMgZW4gZXN0YSBzdWJzZWNjacOzbi4gUHVlZGVzIGNyZWFyIGVsIHByaW1lciBuaXZlbCBjb24gdW4gIioiLCBlbCBzaWd1aWVudGUgbml2ZWwgY29uICItIiB5IHVubyBzdWJzaWd1aWVudGUgY29uICIrIjoNCg0KKiBWZWN0b3Jlcw0KICAtIE1hdHJpY2VzDQogIC0gRGF0YWZyYW1lDQogICAgKyBMaXN0YXMNCiAgICArIEFycmF5DQogICAgDQpPdHJhIGVzdHJ1Y3R1cmEgaW1wb3J0YW50ZSBkZSBkYXRvcyBlcyBfdGliYmxlXywgcXVlIG5vIGVzIG5hZGEgbcOhcyBxdWUgdW4gZGF0YWZyYW1lIG1lam9yYWRvLg0KUGFyYSBwb2RlciBjb252ZXJ0aXIgdW4gZGF0YWZyYW1lIGEgdGliYmxlIGhheSB2YXJpb3MgY2FtaW5vcywgZW50cmUgZXNvcyBlbCB1c2FyIGxhIGZ1bmNpw7NuIF90YmxfZGYoKV8gY29tbyBzaWd1ZToNCg0KYGBge3J9DQojdHJhbnNmb3JtYW5kbyBkZSBkYXRhZnJhbWUgYSB0aWJibGUNCmRhdGFfYmFuY288LXRibF9kZihkYXRhX2JhbmNvKQ0KYGBgDQoNCiMjIFRyYW5zZm9ybWFuZG8gbG9zIHRpcG9zIGRlIGRhdG9zIGRlIF9kYXRhX2JhbmNvXw0KDQpSZWNvcmRhcsOhcyBxdWUgZW4gY2xhc2UgaGljaW1vcyBlbiBlbCBzY3JpcHQgZXN0ZSBlamVyY2ljaW8uIEFob3JhIGxvIGhhcmVtb3MgZW4gZXN0ZSBub3RlYm9vayBwb25pw6luZG9sbyBkZW50cm8gZGUgdW4gY2h1bmsNCg0KYGBge3J9DQpkYXRhX2JhbmNvPC1kYXRhX2JhbmNvICU+JQ0KICBtdXRhdGUoTW9udG8gPSBzdHJfcmVwbGFjZShNb250bywgcGF0dGVybiA9ICIsIiwgcmVwbGFjZW1lbnQgPSAiLiIpKSAlPiUNCiAgbXV0YXRlKFN1Y3Vyc2FsID0gYXMuY2hhcmFjdGVyKFN1Y3Vyc2FsKSwNCiAgICAgICAgIENhamVybyA9IGFzLmNoYXJhY3RlcihDYWplcm8pLA0KICAgICAgICAgU2F0aXNmYWNjaW9uID0gcGFyc2VfZmFjdG9yKFNhdGlzZmFjY2lvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJNdXkgTWFsbyIsICJNYWxvIiwgIlJlZ3VsYXIiLCAiQnVlbm8iLCAiTXV5IEJ1ZW5vIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJlZCA9IFRSVUUpLA0KICAgICAgICAgTW9udG8gPSBwYXJzZV9udW1iZXIoTW9udG8sbG9jYWxlID0gbG9jYWxlKGRlY2ltYWxfbWFyayA9ICIuIikpKQ0KYGBgDQoNCiMgQW7DoWxpc2lzIEV4cGxvcmF0b3Jpbw0KQ29tbyBlcyBkZSBpbnRlcsOpcyBzYWJlciBxdcOpIHN1Y2VkZSBjb24gZWwgdGllbXBvIGRlIHNlcnZpY2lvLCBzZSBpbmljaWEgY2hlY2FuZG8gY3XDoWwgZXMgZWwgdGllbXBvIHByb21lZGlvIGRlIGF0ZW5jacOzbiBlbiBzZWd1bmRvcyB5IHN1IGRpc3BlcnNpw7NuOg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmRhdGFfYmFuY28gJT4lIA0KICBzdW1tYXJpc2UoIA0KICAgIE1FRElBPSBtZWFuKFRpZW1wb19TZXJ2aWNpb19zZWcsIG5hLnJtPVRSVUUpLCANCiAgICBWQVJJQU5aQT0gdmFyKFRpZW1wb19TZXJ2aWNpb19zZWcsIG5hLnJtID0gVFJVRSksDQogICAgREVTVkVTVCA9IHNxcnQoVkFSSUFOWkEpDQogICklPiVWaWV3KCkNCmBgYA0KDQpTZSBkZXNwcmVuZGUgcXVlIGVsIHRpZW1wbyBwcm9tZWRpbyBkZSBhdGVuY2nDs24gZW4gc2VndW5kb3MgZXMgZGUgMTU1LjU4IHNlZ3MuIGNvbiB1bmEgZGlzcGVyc2nDs24gZGUgMTIwIHNlZ3MuIEVzIGRlY2lyIHF1ZSBlbnRyZSB0cmFuc2FjY2lvbmVzLCBlbCB0aWVtcG8gZGUgYXRlbmNpw7NuIHZhcsOtYSBtZWRpYW50YW1lbnRlIHJlc3BlY3RvIGFsIHRpZW1wbyBwcm9tZWRpby4NCg0KVmVyaWZpY2FuZG8gbG8gYW50ZXJpb3IgZ3LDoWZpY2FtZW50ZSBzZSB0aWVuZToNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpnZ3Bsb3QoZGF0YSA9IGRhdGFfYmFuY28sIGFlcyh4PSBUaWVtcG9fU2VydmljaW9fc2VnKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0oIGFlcyh5PSAuLmNvdW50Li4pLGJpbndpZHRoID0gMSApICsNCiAgbGFicyh0aXRsZT0gJ0hpc3RvZ3JhbWEgcGFyYSBUaWVtcG8gZGUgU2VydmljaW8gKHNlZyknLCB5PSAiQ2FudGlkYWQiLCB4PSAiVGllbXBvIikrZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IG1lYW4oVGllbXBvX1NlcnZpY2lvX3NlZykpLCBjb2xvcj0gInJlZCIpDQpgYGANCg0KTsOzdGVzZSBxdWUgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSB2YXJpYWJsZSBlcyBhc2ltw6l0cmljYSBhIGxhIGRlcmVjaGE7IGxhIHJlY3RhIHJvamEgcmVwcmVzZW50YSBsYSBtZWRpYSBkZWwgdGllbXBvIGRlIHNlcnZpY2lvLiBNZWRpYW50ZSDDqXN0YSDDumx0aW1hIHNlIHB1ZWRlIGFwcmVjaWFyIGxvIHF1ZSBvY3VycmUgY29uIGxhIGRpc3BlcnNpw7NuLg0KDQojICoqwr9RdcOpIHN1Y2VkZSBjb24gbG9zIHRpZW1wb3MgZGUgYXRlbmNpw7NuIHBvciB0cmFuc2FjY2nDs24/KioNCg0KRXhwbG9yYW5kbyBncsOhZmljYW1lbnRlIGVsIHRpZW1wbyBkZSBzZXJ2aWNpbyBwb3IgdHJhbnNhY2Npw7NuOg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmdncGxvdChkYXRhX2JhbmNvLCBhZXMoeCA9IFRpZW1wb19TZXJ2aWNpb19zZWcpKSArIA0KICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IC4uZGVuc2l0eS4uLCBmaWxsPSBUcmFuc2FjY2lvbiksIGJpbndpZHRoID0gNywgICANCiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBhbHBoYT0gMC40KSArDQogIGxhYnModGl0bGU9ICdUaWVtcG8gZGUgc2VydmljaW8gcG9yIHRyYW5zYWNjacOzbicsIHg9ICJUaWVtcG8iKQ0KYGBgDQoNClNlIGFwcmVjaWEgcXVlIGxhIHRyYW5zYWNjacOzbiBxdWUgcmVxdWllcmUgbcOhcyB0aWVtcG8gcG9yIHBhcnRlIGRlIGxvcyBjbGllbnRlcyBlcyBsYSBkZSBDb2Jyby9QYWdvLiBMb3MgZGVww7NzaXRvcywgYWwgY29udHJhcmlvLCBlcyBsYSB0cmFuc2FjY2nDs24gcXVlIHRpZW5lIG1lbm9yIHRpZW1wbyBkZSBkZW1vcmEgZW4gbGEgYXRlbmNpw7NuLiANCg0KDQo=