viernes, 27 de diciembre de 2019

BigData

Por mas que suene muy de moda el término "BigData" no es mas que lo mismo de siempre: Análisis de datos que pueden venir en formatos cambiantes, no fijos, con sintáxis libre.

Ejemplo:
Debes colectar tweets, post de facebook e información de noticieros (esta ultima mediante lectura automatizada de websites de noticias), además debes colectar imagenes para ser analizadas. Todo debe ser analizado en un "contexto", según cierta "pregunta" realizada al sistema bigdata. Cada "pregunta" realizada al sistema requeriría modelar el mismo conjunto de datos origen ("source") con una optica distinta, dirigida por lo que se pretende buscar.

Hay dos problemas visibles acá:
  1. cómo almacenar objetos libres.
  2. cómo analizar objetos libres según un contexto y guardar el resultado, creando una asociación entre "source" y "analisis" que pueda ser cuantificada mas tarde.

Cómo Almacenar.

Cada fuente de datos (el post de twitter, de facebook y de noticias, imagenes) requieren ser almacenados en su forma original para poder realizarle diversos tipos de analisis individual según un contexto.

Que motor de datos sirve mejor ?

NO: Mysql/Postgre o cualquier "motor relacional". La mejor respuesta es un motor no relacional, como DynamoDB de Amazon Aws, en donde cada "record" es un objeto, con atributos variados, cada registro podria tener "campos" (atributos del objeto) que no existen en otro registro. Tambien tengo esta otra opcion: https://github.com/christiansalazar/omf, la fabriqué para este proposito años atrás de que se hiciera de moda el bigdata (artículo acá)

Preprocesar data y almacenar el resultado descartando el origen ? NO.

Alguien puede pensar en "preprocesar" cada post e insertar el resultado estructurado. Mala idea, porque si debemos analizar la sintaxis escrita por un humano, esta podria tener diferentes interpretaciones dependiendo del contexto que se quiere analizar, y esto es solo un ejemplo.

Analizemos un caso:

Un mismo post podria tener información de un evento en particular y junto a este una queja por mal servicio del hotel que hospedó a los visitantes al evento. Por tanto, el motor de "bigdata" quiere cierto dia analizar data de "eventos" y otro dia quiere analizar calidad de servicio. Por esto, no es bueno guardar solo cierta información del post, sino en cambio guardar todo el post. Los analisis se guardan en otro objeto que será asociado al objeto original ("source").

Debido a lo explicado en el ultimo parrafo entonces nos enfocamos en guardar todo el "post", y no solo su analisis, los analisis del post los categorizaremos y los guardaremos tambien, asociados al post y a un contexto de analisis. Por ejemplo: Un objeto es de tipo "analisis_calidad_servicio" y otro objeto es "evento_deportivo" o "evento_arte", cada objeto estará asociado al post origen, llamalo "source". Asi, tienes un grafo que asocia ciertos "sources" con ciertos "objetos de analisis". Ahora, cómo se crea esa relacion ?

La creación de la relación entre un "source" y un "objeto de analisis" es compleja porque cierto analisis puntual podria implicar analisis de texto con machine learning, analisis de imagen (un post trae imagenes, detectar caras sobre estas, detectar vehiculos chocados, camiones de cierto color etc), incluso podria haber un humano leyendo y categorizando. Debo recordar que "el analisis" no toca ni altera el objeto "source", sino en cambio el "analisis" se guarda en la db junto a una relación.

Hace unos 5 años atrás antes de la moda de "bigdata" fabriqué un pequeño motor PHP que es capaz de manejar objetos y relaciones entre estos, esta en github:

https://github.com/christiansalazar/omf

(ir al articulo relacionado)

En resumen, hay procesos maestros:

1. buscar relaciones existentes que respondan la pregunta realizada al sistema (lectura del sistema)

2. creacion de diferentes relaciones derivadas por el hecho de haber analizado los mismos objetos pero en cierto contexto distinto (escritura del sistema).

3. organizacion de contextos. Los contextos pueden ser vistos como las preguntas que se le hacen al sistema.