tutorial dcjs javascript crossfilter

javascript - dcjs - ¿Cuáles son las funciones reduceAdd, reduceSum, reduceRemove en el filtro cruzado? ¿Cómo deben ser utilizados?



crossfilter tutorial (2)

¿Puede alguien explicar en términos simples cómo reducir la función con sus argumentos reduceAdd, reduceSum, reduceRemove funciona en el filtro cruzado?


Recuerde que la reducción de mapa reduce un conjunto de datos por claves de una dimensión particular. Por ejemplo, vamos a usar una instancia de filtro cruzado con registros:

[ { name: "Gates", age: 57, worth: 72000000000, gender: "m" }, { name: "Buffet", age: 59, worth: 58000000000, gender: "m" }, { name: "Winfrey", age: 83, worth: 2900000000, gender: "f" }, { name: "Bloomberg", age: 71, worth: 31000000000, gender: "m" }, { name: "Walton", age: 64, worth: 33000000000, gender: "f" }, ]

y dimensiones nombre, edad, valor y género. Reduciremos la dimensión de género utilizando el método de reducción.

Primero definimos los métodos de reducción de llamada, reducción, eliminación y reducción de la llamada inicial.

reduceInitial devuelve un objeto con la forma del objeto reducido y los valores iniciales. No lleva parámetros.

function reduceInitial() { return { worth: 0, count: 0 }; }

reduceAdd define lo que sucede cuando un registro se "filtra" en el objeto reducido para una clave en particular. El primer parámetro es una instancia transitoria del objeto reducido. El segundo objeto es el registro actual. El método devolverá el objeto reducido transitorio aumentado.

function reduceAdd(p, v) { p.worth = p.worth + v.worth; p.count = p.count + 1; return p; }

reduceRemove hace lo contrario de reduceAdd (al menos en este ejemplo). Toma los mismos parámetros que reduceAdd . Es necesario porque las reducciones de grupo se actualizan a medida que los registros se filtran y, en ocasiones, los registros deben eliminarse de una reducción de grupo previamente calculada.

function reduceRemove(p, v) { p.worth = p.worth - v.worth; p.count = p.count - 1; return p; }

Invocar el método de reducción se vería así:

mycf.dimensions.gender.reduce(reduceAdd, reduceRemove, reduceInitial)

Para echar un vistazo a los valores reducidos, utilice el método all . Para ver los valores n superiores, use el método top(n) .

mycf.dimensions.gender.reduce(reduceAdd, reduceRemove, reduceInitial).all()

La matriz devuelta debería (debería) verse como:

[ { key: "m", value: { worth: 161000000000, count: 3 } }, { key: "f", value: { worth: 35000000000, count: 2 } }, ]

El objetivo de reducir un conjunto de datos es derivar un nuevo conjunto de datos agrupando primero los registros por claves comunes, y luego reduciendo una dimensión de esas agrupaciones en un solo valor para cada clave. En este caso, agrupamos por género y reducimos la dimensión de valor de esa agrupación al agregar los valores de los registros que compartieron la misma clave.

Los otros métodos de reduceX son métodos de conveniencia para el método de reducción.

Para este ejemplo, reduceSum sería el reemplazo más apropiado.

mycf.dimensions.gender.reduceSum(function(d) { return d.worth; });

Invocar all en la agrupación devuelta debería (debería) verse como:

[ { key: "m", value: 161000000000 }, { key: "f", value: 35000000000 }, ]

reduceCount contará los registros

mycf.dimensions.gender.reduceCount();

Invocar all en la agrupación devuelta debería (debería) verse como:

[ { key: "m", value: 3 }, { key: "f", value: 2 }, ]

Espero que esto ayude :)

Fuente: https://github.com/square/crossfilter/wiki/API-Reference


http://blog.rusty.io/2012/09/17/crossfilter-tutorial/

var livingThings = crossfilter([ // Fact data. { name: “Rusty”, type: “human”, legs: 2 }, { name: “Alex”, type: “human”, legs: 2 }, { name: “Lassie”, type: “dog”, legs: 4 }, { name: “Spot”, type: “dog”, legs: 4 }, { name: “Polly”, type: “bird”, legs: 2 }, { name: “Fiona”, type: “plant”, legs: 0 } ]);

Por ejemplo, ¿cuántos seres vivos hay en mi casa?

Para hacer esto, llamaremos a la función de conveniencia groupAll , que selecciona todos los registros en un solo grupo, y luego a la función reduceCount , que crea una cuenta de los registros.

// How many living things are in my house? var n = livingThings.groupAll().reduceCount().value(); console.log("There are " + n + " living things in my house.") // 6

Ahora vamos a contar todas las piernas en mi casa. Nuevamente, usaremos la función groupAll para obtener todos los registros en un solo grupo, pero luego llamamos a la función reduceSum . Esto va a sumar valores juntos. ¿Qué valores? Bueno, queremos piernas, así que vamos a pasar una función que extrae y devuelve el número de piernas del hecho.

// How many total legs are in my house? var legs = livingThings.groupAll().reduceSum(function(fact) { return fact.legs; }).value() console.log("There are " + legs + " legs in my house.")

reduceCount función reduceCount crea un conteo de los registros.
reduceSum función reduceSum es la suma de los valores de estos registros.