2013-05-27 8 views

risposta

48

Ricordare che la riduzione della mappa riduce un set di dati per mezzo di una particolare dimensione. Ad esempio, consente di utilizzare un'istanza crossfilter con record:

[ 
    { 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" }, 
] 

e dimensioni nome, età, valore e genere. Ridurremo la dimensione di genere usando il metodo di riduzione.

Per prima cosa definiamo i metodi reducAdd, reduceRemove e riduciInitial callback.

reduceInitial restituisce un oggetto con la forma dell'oggetto ridotto e i valori iniziali. Non richiede parametri.

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

reduceAdd definisce cosa accade quando un record viene 'filtrata nel' oggetto ridotta per un determinato tasto. Il primo parametro è un'istanza transitoria dell'oggetto ridotto. Il secondo oggetto è il record corrente. Il metodo restituirà l'oggetto ridotto transitorio aumentato.

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

reduceRemove fa il contrario di reduceAdd (almeno in questo esempio). Prende gli stessi parametri di reduceAdd. È necessario perché le riduzioni di gruppo vengono aggiornate man mano che i record vengono filtrati e talvolta i record devono essere rimossi da una riduzione di gruppo precedentemente calcolata.

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

richiamando il metodo di ridurre sarebbe simile a questa:

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

dare un'occhiata ai valori ridotti, utilizzare il metodo all. Per vedere i primi valori n usare il metodo top(n).

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

La matrice restituita sarebbe (dovrebbe) essere simile:

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

Gli obiettivi di riduzione di una serie di dati è quello di ricavare un nuovo insieme di dati dai primi dischi di raggruppamento di chiavi comuni, quindi riducendo la dimensione quei raggruppamenti in un unico valore per ogni chiave. In questo caso, abbiamo raggruppato per genere e ridotto la dimensione del valore di tale raggruppamento aggiungendo i valori dei record che condividevano la stessa chiave.

Gli altri metodi reduceX sono metodi di convenienza per il metodo di riduzione.

Per questo esempio reduceSum sarebbe la sostituzione più appropriata.

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

Invocare all sul raggruppamento restituita sarebbe (dovrebbe) essere simile:

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

reduceCount conterà record

mycf.dimensions.gender.reduceCount(); 

Invocare all sul restituita raggruppamento sarebbe (dovrebbe) essere simile :

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

Spero che questo aiuti :)

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

+3

Grandi spiegazioni sulla parte superiore della documentazione , Grazie! – randunel

+0

Felice di essere d'aiuto –

+0

@IsiomaNnodum Posso aggiungere più argomenti per ridurreAggiungi e ridurreRimuovere le funzioni per alcune modifiche specifiche? –

6

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 } 
]); 

Per esempio, quante cose viventi sono in casa mia?

Per fare questo, chiameremo la funzione groupAll convenienza, che seleziona tutti record in un unico gruppo, e quindi la funzione reduceCount, che crea un conteggio dei record.

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

Ora prendiamo un conteggio di tutte le gambe nella mia casa. Ancora una volta, utilizzeremo la funzione groupAll per ottenere tutti i record in un singolo gruppo, ma poi chiameremo la funzione reduceSum. Questo sta per sommare i valori insieme. Quali valori? Bene, vogliamo gambe, quindi passiamo una funzione che estrae e restituisce il numero di gambe dal fatto.

// 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 La funzione crea un conteggio dei record.
reduceSum la funzione è i valori di somma di questi record.

Problemi correlati