Archivo de la etiqueta: Big data

idea

Recomendación de productos a traves de machine learning usando ElasticSearch

Elasticsearch nos proporciona una herramienta muy eficaz para la recomendación de productos para el comercio electrónico.

¿Qué sabemos sobre nuestros clientes?

Es relativamente fácil saber en qué productos nuestros clientes han mostrado interés o comprado en el pasado.  Utilizando elasticsearch podemos aprovechar esta información para recomendar otros productos que han sido comprados por otros usuarios que han mostrado interés en los mismos productos.

Por ejemplo si nuestro usuario ha clickeado sobre un libro sobre la historia de la Francia medieval, entonces parece obvio que podemos mostrar al usuario los libros más populares en la categoría de historia medieval de Francia.   Sin embargo este enfoque de repetir productos de la misma categoría puede llegar a ser aburrido, y podemos perder muchas posibilidades interesantes de ofrecer productos de los usuarios de otras categorias.  Por ejemplo si el usuario compra una cámara, podriamos ofrecer un libro de fotografía.

Recomendación de producto a traves de machine learning

Elasticsearch nos ofrece la posibilidad de recomendar productos a los usuarios basándose en lo que otros usuarios que compraron los mismos productos han comprado.

Term Aggregation

Por ejemplo tenemos un índice que contiene todos nuestros usuarios, con todos los productos que han adquirido como se muestra en el mapping abajo:

Si un usuario ha comprado una cámara polaroid, entonces podemos buscar los productos más populares adquiridos por otros usuarios que compraron la misma cámara polaroid.  Esta lista es probable que incluya los productos que se relacionan directamente con una cámara polaroid (como película polaroid) e indirectamente relacionados (libros de fotografía).

Significative Term Aggregation

La “term aggregation” puede indicar productos que son populares entre los usuarios de polaroid, pero es posible que algunos de estos productos no tengan relación con cámaras polaroid, (eg. Teléfonos móviles). Estos productos aparecen simplemente porque son populares con todo el mundo (incluyendo a personas que compran cámaras polaroid).  Si queremos evitar esto, podemos utilizar la agregación de términos significativos, que devolverá los productos que son significativamente más populares entre los compradores de camara polaroid en comparación con el conjunto de todos nuestros clientes.

El siguiente ejemplo muestra esta posibilidad:


 

 

Este enfoque es interesante porque en la medida que nuestro historial de datos aumenta, mejoramos la calidad de nuestras recomendaciones: aprendemos mas sobre nuestros usuarios individualmente y en su conjunto.

 

 

 

 

autocomplete

Crear su propio motor de búsqueda con elasticsearch

En este artículo enseñamos cómo crear un motor de búsqueda rápido capaz de búsqueda de texto profundo, trabajando con terabytes de datos utilizando elasticsearch.

Vamos a construir un motor de búsqueda basado en la categoría de wikipedia “living persons”, almacenar los datos en elasticsearch, probar la velocidad y la relevancia de nuestras consultas y también crear una consulta de autocompletado.

Requisitos previos

Ya tienes elasticsearch y kibana instalado.

Instalar Pywikibot

Pywikibot permite descargar el contenido de artículos de wikipedia.  Si tienes acceso a otra fuente de datos,  puede utilizarlo en su lugar.

Instrucciones para instalar el pywikibot están aqui : https://www.mediawiki.org/wiki/Manual:Pywikibot

Configurar pywikibot para usar  wikipedia.

Esto se hace ejecutando el script de configuración de pywikibot

Python pwb.py generate_user_files

El script es interactivo y permite definir el tipo de wiki que quieras.  En nuestro caso, elegimos wikipedia.

Instalar bibliotecas de Python
PIP instalar elasticsearch
Crear un mapping en Elasticsearch

El mapping define qué tipo de datos se guardan en cada campo, y cómo debe ser indexada.

El siguiente comando se puede pegar directamente en la consola Kibana Dev Tools

Esto crea una asignación de tipo de documento “wiki_page” en el índice “wikipeople” con cuatro categorías de texto ( url, título, categorías, texto) y un campo especial llamado “suggestion” que se utilizará para la función de autocompletar (explicamos más adelante).  Tenga en cuenta también que hemos especificado que el campo de texto utiliza un analizador de lengua inglesa.   (en lugar de francés, español o cualquier otro idioma).

Crear script  Pywikibot

En el directorio donde se instaló Pywikibot, encontrará un subdirectorio “/ pywikibot/core/scripts”

En el directorio de scripts se debe crear un nuevo script llamado wikipeopleloader.py

Se puede ejecutar el script utilizando la instrucció siguiente  (desde directorio/pywikibot/core)

Python pwb.py wikipeopleloader.py

La salida de la pantalla indicará  si hay algun error.  Si todo va bien, veremos cómo el script descarga las páginas de wikipedia y los carga en la base de datos de elasticsearch.   La velocidad de descarga depende de tu conexión a internet-  en mi caso una o dos páginas por segundo.  Para realizar las pruebas puedes abortar el proceso (ctrl Z) después de 60 segundos.

Ejemplo de consulta Elasticsearch para motor de búsqueda

A continuación encontrará una consulta y parte de su respuesta.

La parte de “source” de la consulta especifica que datos queremos excluir de la respuesta para reducir su tamaño.

La consulta busca “american football bearcats” en el título, categoría y cuerpo del texto.  Sin embargo da mayor peso a la valoración (score) si estos términos se encuentran en el campo  “categoría” o “título” (según lo determinado por los valores de “boost” en la consulta).

La consulta “highlight” devuelve el detalle de donde se ha encontrado el término de búsqueda.   Esto se puede ver en la respuesta con la etiqueta “highlight”.  De esta manera es fácil mostrar el contexto del término de búsqueda al usuario para que pueda valorar si le interesa los resultados.

Sugerencias de autocompletar usando ElasticSearch y Jquery

En nuestro  mapping creamos un campo especial llamado “suggest” basado en el título de la página.  Esto nos permite mostrar una propuesta de  “Autocompletar” a la medida que el usuario vaya introduciendo el texto.   Consultas de tipo autocompletar estan optimizadas para esta finalidad.    Se ve un ejemplo de esta consulta a continuación:

En nuestro caso, la consulta devuelve sugerencias cuando el título de la página comienza con las letras que hemos introducido en nuestra consulta.    Esto nos permitiría crear la funcionalidad autocompletar en una página web  con jquery o similar.

bigdata

Analizar Big Data de IoT con open source. MQTT y ElasticSearch – Tutorial

¿Por qué ElasticSearch?

  • open source
  • altamente escalable
  • Ideal para datos que varian durante el tiempo

Forma parte del  elasticsearch stack que puede proporcionar las funcionalidades siguientes:

  • Gráficos (Kibana)
  • Analytics (Kibana)
  • Alarmas (Logstash)

Lo que explicamos en este artículo

Vamos a configurar un nodo único elasticsearch en un servidor Linux Ubuntu 16.04 y lo vamos a usar para recopilar datos publicados en un servidor de MQTT Mosquitto.  (Se supone que ya tienes tu servidor MQTT instalado).

Instalar ElasticSearch

Crear un nuevo directorio  myElasticSearch

mkdir myElasticSearch
cd myElasticSearch

Download el tar Elasticsearch:

curl -L -O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.1/elasticsearch-2.4.1.tar.gz

A continuación extraerlo como sigue:

tar -xvf elasticsearch-2.4.1.tar.gz

Luego creará un montón de archivos y carpetas en el directorio actual. Luego entramos en el directorio bin :

CD elasticsearch-2.4.1/bin

Y ahora estamos listos para comenzar nuestro nodo :

. / elasticsearch

Para almacenar los datos podemos utilizar el comando

curl -XPOST 'localhost:9200/customer/external?pretty' -d '
{
"name": "Jane Doe"
}'

Para leer los mismos datos , podemos utilizar

curl -XGET 'localhost:9200/customer/external/1?pretty'

Si ves los datos que creó, entonces elasticSearch ya está en marcha!

Instalar al cliente de Python para elasticsearch

Instalar al cliente de mqtt de PAHO y elasticsearch en el servidor

pip install elasticsearch
pip install paho-mqtt

Crear un script de cliente Python MQTT para incorporar los datos publicados en MQTT en elasticSearch

Use el script mqttToElasticSearch.py que utiliza los libraries MQTT PAHO y ElasticSearch  de python.  Tendrás que modificar las líneas en la parte superior dependiendo del puerto y dirección IP de la instalación de MQTT.

Se puede descargar el fichero desde

https://github.com/mattfield11/MQTT-elasticSearch

O si tienes GIT instalado:

git clone https://github.com/mattfield11/mqtt-elasticSearch.git

El script debería ser instalado en un directorio en el mismo servidor que tengas ElasticSearch funcionando.

Editar el script mqttToElasticSearch para incluir la dirección de tu servidor MQTT y el puerto.

Ejecutar al cliente de Python MQTT que acaba de descargar

Python mqttToElasticSearch.py

Para ver los datos que acabamos de crear en elasticsearch

curl 'localhost:9200/my-index/_search?q=*&pretty'

¡Ahora los datos publicados en MQTT se guardan  en elasticsearch ( en función de los topicos que tenemos configurado en el fichero)!
En los próximos días explicamos cómo ver datos MQTT en Kibana donde se puede hacer gráficos y análisis de los datos MQTT.

Para obtener más información

ElasticSearch

https://www.elastic.co/

https://www.elastic.co/Guide/en/elasticsearch/Reference/Current/Setup-Service.html#Using-systemd

Python ElasticSearch cliente

https://www.elastic.co/Guide/en/elasticsearch/Client/Python-API/Current/index.html

Business Intelligence sin necesidad de cambiar su ERP

Las herramientas de Business Intelligence ( BI) están evolucionando a gran velocidad.   Big data está de moda y las empresas buscan herramientas para explotar los datos que tienen escondidos en sus servidores y PCs.   Si bien muchos fabricantes llevan años vendiendo “Business Intelligence” como una forma flexible de acceder a los datos de su ERP, creemos especialmente de interés las herramientas que son capaces de importar datos de una gran variedad de fuentes(como excel, ERP, bases de datos o incluso documentos word) y permitir usuarios con poco o ningún conocimiento informático analizar y sacar conclusiones para la toma de decisiones.        Si bien un cierto grado de conocimiento técnico puede ser necesario para configurar estas herramientas y entender cómo sus datos están (o no) estructurados, estas herramientas son una solución económica y de gran utilidad para cualquier gestor tanto en ventas, finanzas o fabricación.