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 } } } }