Czy ktoś może wyjaśnić w prosty sposób, w jaki sposób zredukować funkcję za pomocą argumentów reduceAdd, reduceSum, reduceRemove works in crossfilter?Jakie są funkcje reduceAdd, reduceSum, reduceRemove w filtrze crossfilter? Jak powinny być stosowane?
Odpowiedz
Należy pamiętać, że funkcja map reduce zmniejsza zbiór danych o klucze o określonym wymiarze. Na przykład użyj instancji filtru krzyżowego z rekordami:
[
{ 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" },
]
oraz nazwa wymiaru, wiek, wartość i płeć. Zredukujemy wymiar płci za pomocą metody redukcji.
Najpierw definiujemy metody wywołania zwrotnego reduceAdd, reduceRemove i reduceInitial.
reduceInitial
zwraca obiekt w postaci zredukowanego obiektu i wartości początkowych. Nie wymaga żadnych parametrów.
function reduceInitial() {
return {
worth: 0,
count: 0
};
}
reduceAdd
określa, co się dzieje, gdy płyta jest „filtrowane w” zredukowanej obiektu do określonego klucza. Pierwszy parametr jest przejściową instancją zredukowanego obiektu. Drugi obiekt to aktualny rekord. Metoda zwróci wzmocniony, przejściowy obiekt zredukowany.
function reduceAdd(p, v) {
p.worth = p.worth + v.worth;
p.count = p.count + 1;
return p;
}
reduceRemove
nie przeciwnego reduceAdd
(przynajmniej w tym przykładzie). Ma takie same parametry jak reduceAdd
. Jest to konieczne, ponieważ redukcje grup są aktualizowane, ponieważ rekordy są filtrowane, a czasami trzeba usunąć rekordy z poprzednio obliczonej redukcji grupy.
function reduceRemove(p, v) {
p.worth = p.worth - v.worth;
p.count = p.count - 1;
return p;
}
Wywoływanie metody redukcji będzie wyglądać następująco:
mycf.dimensions.gender.reduce(reduceAdd, reduceRemove, reduceInitial)
Aby rzucić okiem na obniżonych wartościach, użyj metody all
. Aby zobaczyć najwyższe wartości n, użyj metody top(n)
.
mycf.dimensions.gender.reduce(reduceAdd, reduceRemove, reduceInitial).all()
zwrócona tablica będzie (powinien) wyglądać tak:
[
{ key: "m", value: { worth: 161000000000, count: 3 } },
{ key: "f", value: { worth: 35000000000, count: 2 } },
]
celów redukcji zestawu danych jest w celu uzyskania nowego zestawu danych przez pierwszych zapisów Grupowanie według wspólnych kluczy, a następnie zmniejszenie wymiaru tych ugrupowań w jedną wartość dla każdego klucza. W tym przypadku pogrupowaliśmy według płci i zmniejszyliśmy wartość tego grupowania, dodając wartości rekordów, które dzieliły ten sam klucz.
Pozostałe metody redukcji X są metodami convience dla metody redukcji.
Dla tego przykładu najodpowiedniejszym zamiennikiem będzie reduceSum
.
mycf.dimensions.gender.reduceSum(function(d) {
return d.worth;
});
Wywoływanie all
na zwróconej zgrupowania będzie (powinien) wyglądać tak:
[
{ key: "m", value: 161000000000 },
{ key: "f", value: 35000000000 },
]
reduceCount
liczą rekordy
mycf.dimensions.gender.reduceCount();
powołując all
on zwrócony grupowania będzie (powinien) wyglądać :
[
{ key: "m", value: 3 },
{ key: "f", value: 2 },
]
Nadzieja to pomaga :)
Źródło: https://github.com/square/crossfilter/wiki/API-Reference
Wielkie wyjaśnień w górnej części dokumentacji , dzięki! – randunel
Cieszę się, że pomogę. –
@IsiomaNnodum Czy mogę dodać więcej argumentów do funkcji reduceAdd i reduceRemove dla niektórych konkretnych modyfikacji? –
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 }
]);
Na przykład, jak wiele rzeczy istota są w moim domu?
Aby to zrobić, będziemy nazywać funkcję groupAll
wygodę, które wybiera wszystkie rekordy w jednej grupie, a następnie funkcję reduceCount
, który tworzy liczbę rekordów.
// 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
Teraz policzmy wszystkie nogi w moim domu. Ponownie użyjemy funkcji groupAll
, aby uzyskać wszystkie rekordy w jednej grupie, ale następnie wywołujemy funkcję reduceSum
. To będzie sumować wartości razem. Jakie wartości? Cóż, chcemy nogi, więc miejmy funkcję, która wyodrębnia i zwraca liczbę nóg z faktu.
// 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
Funkcja tworzy liczbę rekordów.
reduceSum
funkcja to suma wartości tych rekordów.
- 1. Jak powinny być stosowane typy w klasach typu Haskell?
- 2. Kiedy w montażu powinny być stosowane wyraźne dyrektywy wyrównania?
- 3. Jakie dokumenty powinny być przechowywane w kontroli wersji i jak powinny być przechowywane?
- 4. Jakie są nieudokumentowane funkcje Angular?
- 5. Jakie pliki projektów nie powinny być sprawdzane w SVN
- 6. jakie są wzorce projektowe stosowane w systemie Android?
- 7. Jakie funkcje Lisp są obecne w Ruby?
- 8. jakie funkcje są zawarte w JVM
- 9. Jakie funkcje ES6 są obsługiwane w JSX?
- 10. Jak złożone powinny być modele?
- 11. Operator && nie mogą być stosowane
- 12. Realistycznie, jakie funkcje pthreads są zazwyczaj używane?
- 13. Czy adnotacje na poziomie metody sprężynowania powinny być stosowane w warstwie kontrolera lub w warstwie usługi?
- 14. Jakie są nowe funkcje Eclipse Helios?
- 15. Jakie funkcje są uważane za zaawansowane python?
- 16. Jakie są interesujące funkcje kodu źródłowego EveryBlock.com?
- 17. Moduły testowania jednostek - Jakie są kluczowe funkcje
- 18. Jakie są "nowe funkcje skrótu" w haszu z kukułką?
- 19. Jakie funkcje Scala nie mogą być tłumaczone na język Java?
- 20. Jak różne powinny być losowe nasiona?
- 21. Kiedy są stosowane powiązania danych?
- 22. Jakie pakiety/funkcje są domyślnie importowane w Kotlin?
- 23. Czy języki programowania powinny być intuicyjne?
- 24. Funkcje powinny zaczynać się od "Get"?
- 25. Tylko właściwości powinny być usunięte
- 26. Dlaczego powinny być zwracane nazwy parametrów?
- 27. Filtr wielu dyskretnych wartości w filtrze poprzecznym
- 28. Jakie są teoretyczne i/lub eksperymentalne funkcje programowania języka?
- 29. Czy istnieje przypadek, w którym funkcje vararg powinny być preferowane w stosunku do szablonów variadic?
- 30. Gdzie powinny być dodane wtyczki w ServiceStack
chciałbym wiedzieć, co zrobić funkcje reduceAdd, reduceRemove, konkretnie i jakie argumenty przekazywane do nich określenie –