Я пытаюсь преобразовать CSV с данными в формате месяца в формате четверть (в среднем за квартал, а не подводить ..)d3.js: Преобразование Месяцы в квартале
Выходной сигнал мне нужно, это Вложенный массив, как показано ниже в течение месяцев, только для кварталов. Я уже рассчитал каждый квартал за месяц, используя функцию d3.nest, но я не могу заставить его преобразовать его в четверти.
Вот CSV с данными:
x,January,February,March,April,May,June,July
Overall,3635,3371,3474,4212,4815,5544,4464
A,1689,1489,1588,2231,2419,2889,2304
B,316,266,267,323,337,354,435
C,622,537,629,614,766,720,616
Вот код, который гнездится данные:
nest = d3.nest().key(function(d) { return d.x; })
.rollup(function(leaves) { var a = []; d3.entries(leaves[0]).forEach(function (k) { if (k.key != "x") a.push({x: k.key, y: k.value, month: k.key, quater: (Math.floor((new Date(Date.parse(k.key + "1, 2013")).getMonth()+1)/3+1))}); }); return a; });
data = nest.entries(data);
что приводит (stipped, чтобы соответствовать ..):
[
{
"key":"Overall",
"values":[
{
"x":"January",
"y":"3635",
"month":"January",
"quater":1
},
{
"x":"February",
"y":"3371",
"month":"February",
"quater":1
},
{
"x":"March",
"y":"3474",
"month":"March",
"quater":2
},
{
"x":"April",
"y":"4212",
"month":"April",
"quater":2
},
{
"x":"May",
"y":"4815",
"month":"May",
"quater":2
},
{
"x":"June",
"y":"5544",
"month":"June",
"quater":3
},
{
"x":"July",
"y":"4464",
"month":"July",
"quater":3
}
]
},
{
"key":"A",
"values":[
{
"x":"January",
"y":"1689",
"month":"January",
"quater":1
},
{
"x":"February",
"y":"1489",
"month":"February",
"quater":1
},
{
"x":"March",
"y":"1588",
"month":"March",
"quater":2
},
{
"x":"April",
"y":"2231",
"month":"April",
"quater":2
},
{
"x":"May",
"y":"2419",
"month":"May",
"quater":2
},
{
"x":"June",
"y":"2889",
"month":"June",
"quater":3
},
{
"x":"July",
"y":"2304",
"month":"July",
"quater":3
}
]
},
{
"key":"B",
"values":[
{
"x":"January",
"y":"316",
"month":"January",
"quater":1
},
{
"x":"February",
"y":"266",
"month":"February",
"quater":1
},
{
"x":"March",
"y":"267",
"month":"March",
"quater":2
},
{
"x":"April",
"y":"323",
"month":"April",
"quater":2
},
{
"x":"May",
"y":"337",
"month":"May",
"quater":2
},
{
"x":"June",
"y":"354",
"month":"June",
"quater":3
},
{
"x":"July",
"y":"435",
"month":"July",
"quater":3
}
]
},
{
"key":"C",
"values":[
{
"x":"January",
"y":"622",
"month":"January",
"quater":1
},
{
"x":"February",
"y":"537",
"month":"February",
"quater":1
},
{
"x":"March",
"y":"629",
"month":"March",
"quater":2
},
{
"x":"April",
"y":"614",
"month":"April",
"quater":2
},
{
"x":"May",
"y":"766",
"month":"May",
"quater":2
},
{
"x":"June",
"y":"720",
"month":"June",
"quater":3
},
{
"x":"July",
"y":"616",
"month":"July",
"quater":3
}
]
}
]
Заранее благодарим за помощь!
Я использую d3.csv, и, похоже, у нас есть решение! Спасибо, что собрали это. Однако, несмотря на то, что вывод, который я ищу, имеет 2 массива, разделенных на месяцы и кварталы, что означает arr1 = [{ключ: «В целом», значения: месяцы ...}, {ключ: ...}] и arr2 = [{key: "Overall", values: quarters ...}, {key: ...}] <--- Каким будет лучший способ для этого? Я знаю простой способ, просто пробегая массив в функции обратного вызова и создавая 2 дополнительных массива, но я думаю, что это не очень эффективно. – natiz
Я обновил так, что массивы месяцев и кварталов находятся в том же формате, если вам действительно нужны два отдельных массива, которые вам, вероятно, потребуется перебрать через них, чтобы создать два массива. Но, будучи в том же формате, будет легче повторно использовать код в вашей визуализации. – redmallard