Например, если у нас есть данные для книг, авторов и даты. Можем ли мы построить перекрестный фильтр для того, сколько книг доступно для автора в месяц?Можно ли группировать по нескольким размерам в crossfilter?
ответ
В псевдо терминах SQL, что вы пытаетесь сделать, это:
SELECT COUNT(book)
GROUP BY author, month
Я так подходить к этому типу проблемы является «группа» поля вместе в одном измерении. Поэтому в вашем случае я объединил бы информацию месяца и автора вместе в измерение.
Пусть это будет наш тест данные:
var cf = crossfilter([
{ date:"1 jan 2014", author: "Mr X", book: "Book 1" },
{ date:"2 jan 2014", author: "Mr X", book: "Book 2" },
{ date:"3 feb 2014", author: "Mr X", book: "Book 3" },
{ date:"1 mar 2014", author: "Mr X", book: "Book 4" },
{ date:"2 apr 2014", author: "Mr X", book: "Book 5" },
{ date:"3 apr 2014", author: "Mr X", book: "Book 6"},
{ date:"1 jan 2014", author: "Ms Y", book: "Book 7" },
{ date:"2 jan 2014", author: "Ms Y", book: "Book 8" },
{ date:"3 jan 2014", author: "Ms Y", book: "Book 9" },
{ date:"1 mar 2014", author: "Ms Y", book: "Book 10" },
{ date:"2 mar 2014", author: "Ms Y", book: "Book 11" },
{ date:"3 mar 2014", author: "Ms Y", book: "Book 12" },
{ date:"4 apr 2014", author: "Ms Y", book: "Book 13" }
]);
Размерность определяется следующим образом:
var dimensionMonthAuthor = cf.dimension(function (d) {
var thisDate = new Date(d.date);
return 'month='+thisDate.getMonth()+';author='+d.author;
});
И теперь мы можем просто сделать сверток количества, чтобы подсчитать, сколько книг есть в автор, в месяц (т.е. на единицу измерения):
var monthAuthorCount = dimensionMonthAuthor.group().reduceCount(function (d) { return d.book; }).all();
И результаты следующие:
{"key":"month=0;author=Mr X","value":2}
{"key":"month=0;author=Ms Y","value":3}
{"key":"month=1;author=Mr X","value":1}
{"key":"month=2;author=Mr X","value":1}
{"key":"month=2;author=Ms Y","value":3}
{"key":"month=3;author=Mr X","value":2}
{"key":"month=3;author=Ms Y","value":1}
Я не нашел приемлемый ответ на все полезные.
Вместо этого я использовал следующее.
я первый сделал шпоночную группу (в вашем случае месяц)
var authors = cf.dimension(function (d) {
return +d['month'];
})
Далее я использовал карту метода сокращения на шпоночном наборе данных для вычисления средних
группирования вспомогательной функции:
var monthsAvg = authors.group().reduce(reduceAddbooks, reduceRemovebooks, reduceInitialbooks).all();
Карта-свертка функции:
function reduceAddbooks(p, v) {
p.author = v['author'];
p.books = +v['books'];
return p;
}
function reduceRemovebooks(p, v) {
p.author = v['author'];
p.books = +v['books'];
return p;
}
function reduceInitialbooks() {
return {
author:0,
books:0
};
}
Я хочу, чтобы обновить старый ответ с новой работой вокруг описанной в: https://github.com/dc-js/dc.js/pull/91
Эта работа не была опробована на больших наборов данных
var cf = crossfilter([
{ date:"1 jan 2014", author: "Mr X", book: "Book 1" },
{ date:"2 jan 2014", author: "Mr X", book: "Book 2" },
{ date:"3 feb 2014", author: "Mr X", book: "Book 3" },
{ date:"1 mar 2014", author: "Mr X", book: "Book 4" },
{ date:"2 apr 2014", author: "Mr X", book: "Book 5" },
{ date:"3 apr 2014", author: "Mr X", book: "Book 6"},
{ date:"1 jan 2014", author: "Ms Y", book: "Book 7" },
{ date:"2 jan 2014", author: "Ms Y", book: "Book 8" },
{ date:"3 jan 2014", author: "Ms Y", book: "Book 9" },
{ date:"1 mar 2014", author: "Ms Y", book: "Book 10" },
{ date:"2 mar 2014", author: "Ms Y", book: "Book 11" },
{ date:"3 mar 2014", author: "Ms Y", book: "Book 12" },
{ date:"4 apr 2014", author: "Ms Y", book: "Book 13" }
]);
var dimensionMonthAuthor = cf.dimension(function (d) {
var thisDate = new Date(d.date);
//stringify() and later, parse() to get keyed objects
return JSON.stringify ({ date: thisDate.getMonth() , author: d.author }) ;
});
group = dimensionMonthAuthor.group();
//this forEach method could be very expensive on write.
group.all().forEach(function(d) {
//parse the json string created above
d.key = JSON.parse(d.key);
});
return group.all()
Результаты в:
[ { key: { date: 0, author: 'Mr X' },
value: 2 },
{ key: { date: 0, author: 'Ms Y' },
value: 3 },
{ key: { date: 1, author: 'Mr X' },
value: 1 },
{ key: { date: 2, author: 'Mr X' },
value: 1 },
{ key: { date: 2, author: 'Ms Y' },
value: 3 },
{ key: { date: 3, author: 'Mr X' },
value: 2 },
{ key: { date: 3, author: 'Ms Y' },
value: 1 } ]
- 1. Сортировка по нескольким размерам в crossfilter.js
- 2. Можно ли группировать по нескольким полям с помощью Angular-Filter?
- 3. Группировать список списка по вложенным размерам в R
- 4. Можно ли группировать по списку без linq
- 5. Можно ли группировать AssetTrans по финансовым измерениям
- 6. Можно ли группировать объекты?
- 7. Группировать по нескольким столбцам и подсчитывать результаты
- 8. Как правильно группировать данные по нескольким столбцам?
- 9. Как группировать по нескольким обобщенным выражениям linq
- 10. Как группировать данные XML по нескольким значениям
- 11. Как группировать по нескольким элементам, используя underscore.js
- 12. Как группировать по нескольким столбцам, JQuery DataTables
- 13. Можно ли передать поток по нескольким методам?
- 14. Как dcast литая рамка данных по нескольким размерам?
- 15. Можно ли группировать столбец jqGrid?
- 16. Можно ли группировать переменные $ _POST?
- 17. Можно ли группировать комбинацию строк?
- 18. Можно ли группировать определенные значения?
- 19. Можно ли группировать строки дважды в MySQL?
- 20. Можно ли группировать электронные письма в Outlook по частям темы?
- 21. Являются ли массивы ковариантными по своим размерам?
- 22. не может Группировать по по нескольким столбцам и граф
- 23. Агрегация по размерам
- 24. Как группировать по нескольким столбцам и несколько значений в MongoDB
- 25. Как группировать по нескольким столбцам со сложными типами в Linq
- 26. Как группировать по нескольким столбцам в SQL Server
- 27. можно ли группировать по дням недели с помощью спящего режима?
- 28. crossfilter заказ по количеству
- 29. В Redis, можно ли отсортировать элемент по нескольким отсортированным наборам?
- 30. Можно ли суммировать по нескольким осям в numexpr?