Integre R, Tableau y Excel

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Introducción

En este artículo, mostraré cómo podemos ejecutar un análisis de regresión y optimizar el precio de alquiler en R, luego pegar el valor en Excel, que posteriormente se conectará a Tableau nuevamente para realizar más cálculos con otros campos en el conjunto de datos original.

Este tipo de integración perfecta entre 3 herramientas de análisis diferentes puede ayudar a los analistas de datos a ejecutar investigaciones estadísticas en R, luego migrar los resultados en Tableau y visualizarlos de manera digerible para los lectores de negocios.

Introducción sobre el conjunto de datos utilizado y los requisitos comerciales

El conjunto de datos de este ejemplo se extrae del proyecto Capstone dentro de «Excel a MySQL: Técnicas analíticas para empresas». Esta es una tabla que contiene información sobre las propiedades en alquiler de una empresa, con información sobre la tasa de ocupación del alquiler a corto plazo y el precio promedio del alquiler por noche. También tenemos datos sobre el precio en el percentil 10 y percentil 90 de propiedades similares en la misma región.

Nuestro requisito comercial es encontrar un precio optimizado para cada propiedad, de modo que se puedan maximizar los ingresos. Dado que los ingresos son una función de la tasa de ocupación * precio de alquiler por noche * 365 (asumiendo que la propiedad se puede alquilar durante todo el año), necesitamos expresar la tasa de ocupación como una función del precio de alquiler por noche, lo cual se puede hacer mediante regresión lineal simple

La siguiente tarea es ejecutar la función R optim, al igual que usamos Solver en Excel, para cada propiedad o cada fila del conjunto de datos.

Con el precio optimizado y la tasa de ocupación prevista, podemos calcular el beneficio bruto total de la empresa y hacer muchos otros análisis.

Conecte R con Tableau

26593capture-5554563

Primero debemos conectar Tableau con R.

Antes de conectar R con Tableau, asegúrese de que su consola R ya haya instalado Rserve.

library("Rserve")

Rserve()

Ahora, R debería imprimir ‘Iniciando Rserve …’. Si observa este resultado, entonces R se está comunicando con Tableau para establecer una conexión.

2) Abra Tableau y haga clic en Ayuda> Configuración y rendimiento> Administrar conexiones de servicios externos.
3) En el cuadro de diálogo que se abre, elija ‘localhost’ para Servidor y escriba ‘6311’ para Puerto.
4) Luego, haga clic en Probar conexión

Ahora, debería aparecer un cuadro de diálogo que diga: ‘Conectado con éxito al servicio R serve’. Significa que está listo para usar R con Tableau

Cree un campo calculado que ejecute código R en Tableau

Cree un campo calculado y pegue el siguiente código:

SCRIPT_REAL(
"df <- data.frame(.arg1,.arg2,.arg3,.arg4,.arg5)

model <-lm(data=df,.arg1 ~ .arg2)

Create revenue function. 
revenue <- function(data,par) {
par_vs_10th <- par-data$.arg3
normalized_price <-0.1+0.8*par_vs_10th/data$.arg5
fcst_occupancy <-coef(model)['(Intercept)']+coef(model)['.arg2']*normalized_price
fcst_st_revenue <-fcst_occupancy*365*par
fcst_st_revenue
}

Run optim for each row in df. Find the value of "par"-rent price-that can optimize revenue function
for (i in 1:nrow(df)) 
{df[i,'optimized_price'] <-optim(122,revenue,data=df[i,],method='L-BFGS-B', control=list(fnscale=-1),lower=df[i,'.arg3']) }

#return optimized price as output for calculated field
df$optimized_price",

sum([OccupancyRate]),
avg([sample_price_percentile]),
avg([Percentile10Th Price]),
avg([Percentile 90Th Price]),
avg([percentile_90th_vs_10th]),
attr([Ws Property Id]))

El código R debe escribirse en una función como SCRIPT_REAL, que devuelve valores numéricos. Hay otras funciones R similares en Tableau, como SCRIPT_BOOL y SCRIPT_INT, según los valores que desee recuperar.

Antes de ejecutar, debemos crear una tabla: df <-data.frame (.arg1, .arg2,…)

.arg1, .arg2… son los campos de fuentes de datos en Tableau. Son las palabras en negrita del código. .arg1 es la tasa de ocupación, .arg2 es el sample_price_percentile.

El R_code se escribirá entre corchetes (”“). La última línea de código: df $ optim_price determinará el valor de retorno para este cálculo.

Para obtener una explicación detallada sobre la ejecución de la regresión lineal y óptima en R, consulte el enlace a continuación:

https://nguyenkhoi6394.github.io/Excel-to-MySQL-Capstone-Project/Using_Optim_for_a_dataframe_in_R.html

Este cálculo es un cálculo de tabla. Asegúrese de que se calcule junto con el ID de propiedad.

89327pic1-3291782

Creemos una vista para ver esta medida.

46025pic2-7680083

Ahora hemos optimizado el precio de cada propiedad.

Sin embargo, ahora se produce un problema. Esta medida es un cálculo de tabla y solo podemos tener un único valor por propiedad al observarlo en una tabla. No podemos incrustarlo dentro de otro cálculo.

Por ejemplo, quiero normalizar el precio optimizado en un valor percentil usando la siguiente fórmula:

0,1 + 0,8 * (precio optimizado-percentil 10º precio) / (percentil 90º frente al 10º)

Tableau generará un error, diciendo que no podemos mezclar una medida agregada con un valor no agregado. Esto es realmente inconveniente e inflexible, ya que es posible que deseemos aprovechar un cálculo con código R para muchas más medidas.

81229pic3-1992674

Para mitigar este problema, se me ocurrió una solución alternativa: escriba los valores optimizados para R en un archivo csv o excel, luego una este nuevo conjunto de datos con la fuente de datos original en Tableau para la creación de otras visualizaciones o medidas.

Integración final

Creemos otro campo de cálculo en Tableau, llamado Script. Esta vez no devolveremos un valor numérico, sino que escribiremos las salidas en un archivo CSV externo. En mi ejemplo, escribo en CSV por simplicidad, pero también puede escribir en un archivo xlsx si lo prefiere.

SCRIPT_REAL(
"df <- data.frame(.arg1,.arg2,.arg3,.arg4,.arg5)
 model <-lm(data=df,.arg1 ~ .arg2)

revenue <- function(data,par){
 par_vs_10th <- par-data$.arg3
 normalized_price <-0.1+0.8*par_vs_10th/data$.arg5
 fcst_occupancy <-coef(model)['(Intercept)']+coef(model)['.arg2']*normalized_price
 fcst_st_revenue <-fcst_occupancy*365*par
 fcst_st_revenue
 }

 for (i in 1:nrow(df)) {df[i,'optimized_price'] <-optim(122,revenue,data=df[i,],method='L-BFGS-B', control=list(fnscale=-1),lower=df[i,'.arg3']) }
df$normalized_optimized_price<-0.1+0.8*(df$optimized_price-df$.arg3)/(df$.arg5)

#Create a new dataframe, replacing .arg2(sample_percentile_price) with the normalized optimized price
new <-data.frame(.arg2=df$normalized_optimized_price)

#Predict the occupancy rate based on optimized price and add as a new column to df
df['Forecast Occupancy']=predict.lm(model, newdata=new)

#Add Property ID to df
df['Ws Property Id']=.arg6

#Write df to a csv file
 write.table(df,'D:/Documents/Business Analytics/4. Visualization/Business Capstone/Blogathon/new.csv',sep=',',row.names=FALSE,quote=FALSE,col.names = TRUE)
 ",
sum([Occupancy Rate]),
avg([sample_price_percentile]),
avg([Percentile 10Th Price]),
avg([Percentile 90Th Price]),
avg([percentile_90th_vs_10th]),
attr([Ws Property Id]))

El siguiente paso es crear una nueva Hoja, llamada Hoja 2, por ejemplo. A continuación, arrastre ID de propiedad y medida de secuencia de comandos a Detalle en la tarjeta de marca.

Debería ver un mensaje como el siguiente:

59814pic4-2654978

Simplemente ignore ese mensaje de error. Abra la carpeta que especificó en el cálculo de la secuencia de comandos y verá que se acaba de crear un nuevo archivo CSV.

20200pic5-2674267
87604pic6-7481776

Nuestra siguiente tarea es más simple, simplemente conecte el libro de trabajo de Tableau con este archivo csv y combínelo con la fuente de datos original, según la clave externa: ID de propiedad WS.

71228pic7-8411117

Ahora, en el Panel de datos, hay un nuevo conjunto de datos disponible para su uso.

80811pic8-6387792

Dado que tenemos el precio optimizado y la tasa de ocupación prevista como campos normales, podemos usarlos para cálculos adicionales sin problemas relacionados con el nivel agregado como anteriormente.

Supongamos que quiero crear una medida llamada Ingresos brutos = Precio optimizado * Tasa de ocupación * 365. El cálculo ahora es válido.

74361pic9-9876650

En el futuro, en caso de que haya cambios en los datos de entrenamiento (muestra del precio por noche), o si agrega más funciones al modelo lineal. Simplemente abra la Hoja 2 nuevamente para reactivar el proceso y recuperar nuevos resultados.

Notas finales

La capacidad de escribir código en R en un cálculo hace que Tableau sea más flexible que su rival, Power BI, en términos de conexión con plataformas de análisis de datos externas. Al combinar Tableau, Excel y R, podemos utilizar el poder de muchas herramientas simultáneamente para nuestras prácticas analíticas.

¿Tiene otras ideas y casos de uso relacionados con el uso de Python y R en Tableau? No dudes en comentar este artículo..

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.