Muchos analistas de datos estadísticos y científicos de datos utilizan la Lenguaje de programación R para hacer sus números fuera de una base de datos. Del mismo modo, los analistas de bases de datos intentan hacer todo en la misma base de datos siempre que sea posible para mantener una única fuente. Couchbase proporciona una base común para tender puentes entre conjuntos de datos JSON, potentes lenguajes de consulta y herramientas analíticas como R.
Su naturaleza distribuida y tolerante a fallos y su esquema flexible son sólo algunas de las razones por las que las empresas recurren a Couchbase. Más información Por qué las empresas utilizan NoSQL para ofrecer productos de nueva generación.
En SDK de Couchbase cubre los lenguajes de programación más populares: Java, .NET, Node.js, Go y más. Pero no necesita proporcionar una unidad específica para R porque puede utilizar fácilmente la API REST.
En este post, resucito un tutorial de programación en R de un blog anterior y veo cómo funciona R con la última versión de Couchbase. Los ejemplos muestran cómo ejecutar una consulta tabular N1QL/SQL sobre los datos JSON, así como mapear las ubicaciones resultantes de algunos de los datos geoespaciales.
¿Qué es R?
R satisface la necesidad de disponer de un conjunto de herramientas gráficas y de cálculo estadístico de código abierto similar a productos patentados como SAS y SPSS. Abarca el análisis estadístico y la visualización gráfica, y está especialmente indicado para gráficos de documentación científica listos para su publicación.
¿Es R mejor que Python para el análisis estadístico? Eso está abierto a debate, y sin embargo hay muchos defensores. De hecho, para muchos desarrolladores, puede ser el entorno analítico más popular que hayan nunca utilizado. En un proyecto global de búsqueda de empleo en programación Rel autor encontró la programación en R en 5º lugar detrás de Python, SQL, Java y Amazon ML. Se situó moderadamente por encima de C/C++, Tableau, Hadoop e incluso SAS en cuanto a conjuntos de herramientas de análisis estadístico de datos.
El ecosistema que generó proporciona decenas de miles de paquetes que añaden potentes capacidades de análisis, análisis de series temporales, visualización y mucho más. Existen varios IDE para crear soluciones; en este artículo utilizaré Estudio R (que he utilizado fácilmente por primera vez mientras escribía este artículo).
Configuración de Couchbase
La instalación por defecto del servidor Couchbase tiene todo lo necesario para este tutorial. Sugiero instalarlo en un único nodo, idealmente el PC que estés usando con R Studio para que la URL de conexión sea localhost. Estoy usando la versión beta de Couchbase 7.x.
Una vez instalado, configure un nuevo cubo con el viaje-muestra conjunto de datos y crear un nuevo usuario que tenga acceso a ese bucket.
Configuración de R Studio
Siguiente, instalar R y luego R Studio Desktop (versión gratuita) con todas las opciones predeterminadas. Una vez finalizada la instalación, inicie R Studio y seleccione Herramientas -> Instalar paquetes e instalar estos cuatro: httr, jsonlite, ggplot2, leaflet.
Alternativamente, puede ejecutar el siguiente código en la consola de codificación de R:
|
1 |
instale.paquetes(c("httr", "jsonlite", "ggplot2", "folleto")) |
R Studio se irá e instalará un montón de dependencias subyacentes para usted. Mientras tanto, continúa con el siguiente paso mientras eso se ejecuta.
Prueba de consulta N1QL en Couchbase
Antes de empezar con el código de programación en R, vamos a probar la consulta utilizando la pestaña Consulta de la ventana Consola web de Couchbase.
|
1 2 3 4 5 6 7 8 9 |
SELECCIONE a.nombre, cuente(*) como total_vuelos DESDE Viajar-muestra r ÚNASE A Viajar-muestra a EN TECLAS r.airlineid DONDE r.tipo ="ruta" Y a.tipo="aerolínea" GRUPO POR a.nombre ORDENAR POR total_vuelos DESC LÍMITE 20 |
Si has tenido que trabajar con JSON antes, verás lo sencillo que puede ser consultar documentos en Couchbase usando una sintaxis familiar.
El resultado muestra las 20 principales compañías aéreas y el número de vuelos que tiene cada una en la base de datos de la muestra.
R Codificación Consulta N1QL
Configure su proyecto R estableciendo los requisitos de la biblioteca en la parte superior del script en la consola:
|
1 2 3 4 |
biblioteca(httr) biblioteca(jsonlite) biblioteca(ggplot2) biblioteca(folleto) |
Para construir la consulta y manejar las respuestas de datos, creamos algunas variables.
En primer lugar, se proporciona la información de conexión para Couchbase, incluyendo la URL, el puerto y el nombre de usuario y la contraseña que creó anteriormente:
|
1 |
cbServidor <- "http://localhost:8093/query/service" |
A continuación, codifique también la consulta en su propia variable. Tenga en cuenta las comillas dobles escapadas que son necesarias (\").
|
1 |
consulta <- "SELECT a.name, count(*) as total_flights FROM `muestra-de-viajes` r JOIN `muestra-de-viajes` a ON KEYS r.airlineid WHERE r.type =\"route\" AND a.type="airline\" GROUP BY a.name ORDER BY total_flights DESC LIMIT 20". |
Lo siguiente es configurar la petición HTTP:
|
1 |
consulte <- httr::POST(cbServidor, httr::add_headers("Tipo de contenido" = "application/x-www-form-urlencoded;charset=UTF-8"), cuerpo = pegar("statement=", consulta), autenticación("público","público")) |
Y luego recibir la respuesta real de la solicitud y asignarla a una variable para contener los datos:
|
1 2 |
res <- fromJSON(httr::contenido(consulte, "texto")) compañía aéreaVuelos <- res$resultados |
¡Eso es!
Visualización de resultados de consultas desde Couchbase
Ahora podemos ver los resultados de la consulta introduciendo la variable de datos:
R-Studio, con la extensión ggplot y unos pocos ajustes, es una forma sencilla de visualizar rápidamente los datos de una variable:
|
1 |
ggplot(datos=compañía aéreaVuelos, aes(x=nombre, y=total_vuelos)) + tema(eje.texto.x=elemento_texto(ángulo=90,hjust=1)) + geom_bar(stat="identidad") |
Ahora puedes modificar la consulta o el código ggplot y experimentar con otros enfoques.
Mapear datos geoespaciales desde Couchbase usando R Coding
La potencia de algunos de los otros paquetes es increíble. Para el siguiente ejemplo, utilizamos la codificación R que aprovecha el paquete Biblioteca cartográfica en línea Leaflet.
Modifiquemos la consulta para listar los hoteles que admiten mascotas. Como los datos del hotel incluyen un objeto geográfico de latitud y longitud ("geo"), podemos hacer fácilmente una consulta de tipo mapa de los resultados.
Ajusta tu consulta para incluir el nombre, la latitud y la longitud junto con un par de filtros sencillos:
|
1 2 3 |
SELECCIONE nombre,geo.lat como lat,geo.lon como largo DESDE Viajar-muestra DONDE tipo="hotel" Y city="Londres" Y mascotas_ok=verdadero |
Pruébalo en la consola web de Couchbase y obtendrás 37 resultados. Luego pon la consulta en las variables como antes:
|
1 2 3 |
consulta <- "SELECT name, geo.lat as lat, geo.lon as long FROM `travel-sample` WHERE type="hotel\" AND city="London\" AND pets_ok=true" consulte <- httr::POST(cbServidor, httr::add_headers("Tipo de contenido" = "application/x-www-form-urlencoded;charset=UTF-8"), cuerpo = pegar("statement=", consulta), autenticación("público","público")) res <- fromJSON(httr::contenido(consulte, "texto")) PetFriendlyHotelsLondon <- res$resultados |
Los resultados serán similares a los siguientes:
Para hacer el mapa, utilizamos el paquete de folletos y proporcionamos algunos ajustes para identificar los campos que se utilizarán para ubicar los símbolos de los marcadores en el mapa.
|
1 |
folleto(datos = PetFriendlyHotelsLondon) %>% addTiles() %>% addMarkers(~largo, ~lat, ventana emergente = ~como.carácter(nombre), etiqueta = ~como.carácter(nombre)) %>% addProviderTiles(proveedores$OpenStreetMap) |
R Studio es un gran IDE rico en información que permite la edición de código, consola interactiva, y componentes de visualización incorporados, incluyendo el mapa, al igual que ggplot hizo con el gráfico anterior.
Naturalmente, puede ampliar cualquiera de los cristales en consecuencia:
Conclusión
La flexibilidad de Couchbase y R, con su potente conjunto de paquetes de terceros, son una gran combinación. Los desarrolladores de aplicaciones pueden dejar los datos en la base de datos central y aprovechar la conmutación por error, el procesamiento distribuido, la búsqueda de texto completo y la analítica SQL.
Mientras tanto, la misma base de datos puede servir a los analistas que necesitan una API fácil de usar para acceder a los datos sin tener que hacer múltiples copias fuera de línea.
Este enfoque integral de la plataforma de datos sigue atrayendo a empresas de todos los tamaños que necesitan simplificar su arquitectura y, al mismo tiempo, hacerla más estable y escalable.





Gracias por esta útil introducción. Cómo se envía el signo de porcentaje, por ejemplo, como en:
…
where meta(d).id LIKE '1TP1Algo%'
…
Las consultas que contienen % fallan todas indicando que no hay declaración. Escapar con \ y doble %% tampoco parece resolverlo. ¿Es algo de R y no hay forma de evitarlo?
Content-Type="application/x-www-form-urlencoded", por lo que el cuerpo/consulta debe estar codificado en url.