Notebooks Procesando y representando datos en un mapa Leaflet con los Notebooks Sofia2

Los Notebooks Sofia2 (basados en el proyecto open-source Apache Zeppelin) permiten a los científicos de datos crear diferentes modelos y algoritmos desde el Control Panel de la plataforma Sofia2. Desde este entorno web los Data Scientists pueden cargar datos a HDFS, procesarlos con Spark, Spark o Python, consultarlos con HIVE, visualizarlos de diferentes formas y además de todo esto manejar las ontologías Sofia2 desde este entorno.

En este ejemplo de uso de los Notebooks vamos a ver cómo traernos un fichero de un sitio externo, procesarlo con Spark y representar los datos procesados en un mapa OpenStreetMap con Leaflet.

Concretamente estamos hablando de un fichero que ofrece el servicio OpenData del gobierno francés (https://www.data.gouv.fr/fr/) y que contiene los datos de las estaciones de recarga eléctrica de Francia

https://www.data.gouv.fr/fr/datasets/fichier-consolide-des-bornes-de-recharge-pour-vehicules-electriques-irve/

El fichero tiene este aspecto:

Comenzaremos por descargar el fichero hacia el directorio home de nuestro usuario:

Lo siguiente es subir este fichero de nuestro directorio local al sistema de ficheros HDFS de nuestro cluster Hadoop

Una vez en HDFS ya puedo manejar los datos con Spark, en este caso para procesar el CSV usaré la librería com.databricks.spark-csv. Para cargarla en el classpath de Spark lo más sencillo es hacer esto:

Y de esta forma tan sencilla puedo convertir el CSV almacenado en HDFS (load(“/examples/IRVE-201510.csv”)) a un DataFrame (df) y de ahí a una tabla persistente (df.write.saveAsTable)

Y una vez tengo la tabla ya puedo consultar los datos de esta de forma muy sencilla:

Además de representarlos en diferentes formatos:

Finalmente haremos la consulta que queremos representar en el mapa:

Tras esto voy a convertir los datos de la consulta a JSON para poder representarlos fácilmente, para esto usaré la librería Gson.

Haré la consulta, mapeando las columnas de los datos obtenidos a los nombres que quiero usar en el JSON:

Los datos tienen esta pinta:

Y ya solo me queda hacer el HTML+JS para pintar mi mapa, en Zeppelin para incrustar un HTML basta con empezar el párrafo con:

Mi HTML tiene este aspecto:

En él podemos ver que estamos usando Thunderforest como Layer (y un apikey que debéis generar en http://www.thunderforest.com/docs/apikeys/ para evitar la marca de agua).

El código que maneja mi JSON con las estaciones es este:

Que genera un botón Show me the map que al pulsar muestra el mapa con un marker para cada estación:

Además de ver la representación en el propio Notebook si en las opciones del párrafo selecciono Link this paragrah:

Esto me genera un URL en la que veo el mapa:

https://sofia2.com/console/notebook/#/notebook/2D1Y4DKY7/paragraph/20160519-175034_779917343?asIframe

y puedo ir pinchando sobre los diferentes markers:

Notebooks Procesando y representando datos en un mapa Leaflet con los Notebooks Sofia2

Nueva guía e IDE de desarrollo de soluciones sobre Plataforma Sofia2

image0172

 

Uno de los objetivos fundacionales de la Plataforma Sofia2 es el de simplificar y agilizar el desarrollo de todo tipo de aplicaciones, desde aplicaciones IoT en las que intervienen Gateways o dispositivos móviles a grandes sistemas Big Data, sin olvidar las aplicaciones web puras de gestión, para las que Sofia2 es un facilitador.

En este ámbito se ha añadido en la sección de Documentación  de la web sofia2.com una nueva guía que explica paso a paso cómo construir aplicaciones web (en la guía basadas en Spring Boot y Angular):

image0172

 

Complementando la guía se ha generado un entorno de desarrollo empaquetado como un ZIP que contiene todas las herramientas necesarias para construir estas soluciones (incluyendo JVM Java, IDE Eclipse, Maven, Apache Tomcat,…)

Nueva guía e IDE de desarrollo de soluciones sobre Plataforma Sofia2

Sofia2 Desktops

T_21

A área de trabalho da plataforma constitui o ponto de acesso de qualquer usuário da plataforma a qualquer um dos aplicativos fornecidos no projeto e a que o usuário tenha acesso.

No nível da plataforma, diferentes desktops podem ser criados para que um usuário possa acessar vários desktops, cada um com diferentes finalidades e aplicativos.

Escritórios são aplicativos da Web que atuam como contêineres para outras aplicações. Um administrador de plataforma controla e configura quais aplicativos são acessíveis a partir de cada mesa, associando-os à área de trabalho do próprio painel de controle da plataforma.

Ao mesmo tempo, cada administrador de aplicativos, dando-o como um projeto na própria plataforma, controlará quais usuários têm acesso ao aplicativo.

Para que cada mesa, realize o controle do acesso aos usuários da plataforma através de uma tela de login e dependendo das permissões que esse usuário tenha em cada um dos aplicativos registrados, terá acesso ou não aos aplicativos registrados como aplicativos de área de trabalho.

Em seguida, explicaremos como criá-los e usá-los.

Seguir leyendo “Sofia2 Desktops”

Sofia2 Desktops

SOFIA2 Desktops

T_21

The desktop of the platform constitutes the access point of any user of the platform to any of the applications provided in the project and to which the user has access.

At the platform level, different desktops can be created so that a user can access several desktops, each with different purposes and applications.

Desks are Web applications that act as containers for other applications. A platform administrator controls and configures which applications are accessible from each desk, associating them to the desktop from the platform’s own control panel.

At the same time each application administrator, giving it as a project on the platform itself, will control which users have access to the application.

So that each desk, performs the control of access to users of the platform through a login screen, and depending on the permissions that that user has on each of the applications registered, will have access or not to the registered applications as desktop applications.

Next, we will explain how to create and use them.

Seguir leyendo “SOFIA2 Desktops”

SOFIA2 Desktops

Escritorios SOFIA2

T_21

El escritorio de la plataforma constituye el punto de acceso de cualquier usuario de la plataforma a cualquiera de las aplicaciones provistas en el proyecto y a las que el usuario tuviera acceso.

A nivel de plataforma se pueden crear diferentes escritorios de manera que un usuario pueda tener acceso a varios escritorios, cada uno con propósitos y aplicaciones distintos.

Los escritorios son aplicaciones Web que actúan como contenedores de otras aplicaciones. Un administrador de la plataforma controla y configura qué aplicaciones son accesibles desde cada escritorio, asociándolas al escritorio desde el propio panel de control de la plataforma.

A su vez cada administrador de aplicación, dándola de alta como proyecto en la propia plataforma, controlará qué usuarios tienen acceso a la aplicación.

De manera que cada escritorio, realiza el control de acceso a los usuarios de la plataforma mediante una pantalla de login, y en función de los permisos de que disponga dicho usuario sobre cada una de las aplicaciones dadas de alta, tendrá acceso o no a las aplicaciones registradas como aplicaciones de escritorio.

A continuación explicaremos como crearlos y utilizarlos.

Seguir leyendo “Escritorios SOFIA2”

Escritorios SOFIA2

¿Cómo invocar a un API REST externa desde el motor de flujos Sofia2?

En este ejemplo vamos a invocar a un API Externa desde el motor de flujos integrado en la plataforma.

En la versión 3.4 de Sofia2 se integró Node-RED como motor de flujos (post aquí), una funcionalidad típica a implementar desde esta programación visual es la de invocar a un API REST externa para posteriormente procesarlo en la plataforma (almacenarlo en la BDTR, hacer analítica, representarlo,…)

En el ejemplo invocaremos al API de Análisis del Sentimiento de MeaningCloud (qué es MeaningCloud). MeaningCloud es un Servicio Web que ofrece APIs (https://www.meaningcloud.com/developer/apis) que pueden invocarse vía REST con el token que nos dan tras registrarnos. Queremos probar este API:

Para poder crear un flujo Node-RED en Sofia2 tengo que seguir estos pasos:

1. Primero debo crear un proyecto, para eso desde

selecciono

2. Dentro del proyecto debo ir a la opción y crear un dominio:

3. Una vez creado el dominio ya puedo ir a Mis Flujos:

Donde veré mi Dominio, que puedo arrancar o parar desde

4. Una vez arrancado el dominio abajo veré Mis Flujos:

Desde donde puedo ir a

5. Una vez dentro de mi dominio Node-red podré crear los flujos que necesite:

Hemos creado un flujo muy sencillo, que luego habría que completar con el procesamiento completo (que se ejecute en cierto momento y que guarde los datos).

El nodo principal es este: que realiza la llamada al API:

El nodo anterior se encarga de pasar los parámetros:

Entre ellos el key para poder invocarlo, el texto a analizar, lenguaje y las headers para poder invocarlo.

A la salida hemos puesto un nodo Debug que nos permite ver el resultado de la invocación:

Como podéis ver, el resultado me da esto:

{
"status":{
"code":"0",
"msg":"OK",
"credits":"1",
"remaining_credits":"19974"
},
"model":"general_es",
"score_tag":"P",
"agreement":"AGREEMENT",
"subjectivity":"OBJECTIVE",
"confidence":"100",
"irony":"NONIRONIC",
"sentence_list":[
{
"text":"A ver si esto te parece positivo",
"inip":"0",
"endp":"31",
"bop":"y",
"confidence":"100",
"score_tag":"P",
"agreement":"AGREEMENT",
"segment_list":[
{
"text":"A ver si esto te parece positivo",
"segment_type":"main",
"inip":"0",
"endp":"31",
"confidence":"100",
"score_tag":"P",
"agreement":"AGREEMENT",
"polarity_term_list":[
{
"text":"positivo",
"inip":"24",
"endp":"31",
"confidence":"100",
"score_tag":"P"
}
]
}
],
"sentimented_entity_list":[

],
"sentimented_concept_list":[

]
}
],
"sentimented_entity_list":[

],
"sentimented_concept_list":[

]
}

Podemos ver la documentación del API para entender bien el significado de los conceptos: https://www.meaningcloud.com/developer/sentiment-analysis/doc/2.1/response

¿Cómo invocar a un API REST externa desde el motor de flujos Sofia2?