elasticsearch Cookbook, obtener la media, desviación estándar y la varianza de los valores de un campo

Elasticsearch

Tenemos una forma directa y fácil de conseguirlo. Utilizaremos agregaciones, concretamente la agregación extended_stats. Solo tenemos que indicar el nombre de la agregaciób y el campo sobre el que necesitamos obtener estos valores.

En el ejemplo, hemos dado de alta 10 documentos, con los valores del campo valor a 1, 2, 3, 4, 5, 6, 7, 8, 9 y 10. Los valores que nos proporciona esta agregación son los siguientes:

  • count: 10, es el número total de documentos o valores analizados.
  • min: 1, el valor mínimo encontrado
  • max: 10, el valor máximo encontrado
  • avg: 5.5,, la media
  • sum: 55, la suma total de todos los valores
  • sum_of_squares: 385, la suma total de todos los valores al cuadrado
  • variance: 8.25, la varianza
  • std_deviation: 2.8722813232690143, la desviación estandar
  • std_deviation_bounds: son límites por encima y debajo de los valores devueltos para poder representarlos correctamente, en, por ejemplo, una gráfica

Relación entre varianza y desviación estándar

La desviación estándar sirve para identificar de una muestra de datos, cuales son los valores normales y los que sobresalen por encima o por debajo. Es decir, dada la media de la muestra, los valores comprendidos entre (la media + desviación estándar) y (la media – desviación estándar) son los valores normales, y los que se encuentren fuera de ese rango son los valores menos normales de la muestra. Así que nos informa de como se separan los valores respecto a toda la muestra.

La desviación estándar es la raíz cuadrada de la varianza. Y la varianza es la media de las diferencias con la media elevadas al cuadrado.

Por ejemplo, para los valores de la muestra 3, 7 y 8 vamos a calcular cada uno de estos valores

Media
media = (3+7+8)/3 = 6

Varianza
varianza = ((3 – 6)^2 + (7 – 6)^2 + (8 – 6)^2)/3 = (-3^2 + 1^2 + 2^2)/3 = (9 + 1 + 4)/3 = 4.66

Desviación estádar
desviación estándar= Raiz Cuadrada(4.66)= 2.15

Utilización de la agregación extended_stats

Ejemplo API Rest

POST pruebas/numeros/_search?search_type=count
{
  "aggs": {
    "estadisticas": {
      "extended_stats": {
        "field": "valor"
      }
    }
  }
}

Respuesta

{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 10,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "estadisticas": {
         "count": 10,
         "min": 1,
         "max": 10,
         "avg": 5.5,
         "sum": 55,
         "sum_of_squares": 385,
         "variance": 8.25,
         "std_deviation": 2.8722813232690143,
         "std_deviation_bounds": {
            "upper": 11.244562646538029,
            "lower": -0.24456264653802862
         }
      }
   }
}