2016-08-25 1 views
0

У меня есть следующие данныеСравните элемент данных с частичной среднем в d3

[{"devcount" : 1 , "dayofweek" :0, "hour" : 1 }, 
    {"devcount" : 2 , "dayofweek" :0, "hour" : 2 }, 

    {"devcount" : 3 , "dayofweek" :1, "hour" : 2 }, 
    {"devcount" : 4 , "dayofweek" :1, "hour" : 3 }, 
    {"devcount" : 6 , "dayofweek" :1, "hour" : 4 }, 
    {"devcount" : 5 , "dayofweek" :1, "hour" : 5 }, 

    {"devcount" : 7 , "dayofweek" :2, "hour" : 5 }, 
    {"devcount" : 8 , "dayofweek" :2, "hour" : 6 }, 
    {"devcount" : 9 , "dayofweek" :2, "hour" : 7 }, 
    {"devcount" : 10 , "dayofweek" :2, "hour" : 9 }] 

Требуется сравнить devcount со средней групповой devcount для каждого dayofweek. т. Е. Для первой строки, devcoun t = 1 следует сравнить со средним числом устройств для dayofweek -0 (= 1,5) и «да» для возврата, если devcount меньше. Остальное «Нет» должно быть возвращено.

Я закодировал, как показано ниже.

smry=d3.nest() 
.key(function(d) { return d.dayofweek;}) 
.rollup(function(d) {return d3.mean(d, function(g) {return g.devcount; })})   
.entries(result); 

Я не уверен, как сравнить данные smry и исходные данные. Исходные данные будут использоваться в selectAll для создания прямоугольников и результатов после сравнения для определения цвета прямоугольника

+2

Это хорошая идея, чтобы показать, что вы пытались так толст (с 'map',' 'filter', d3.mean' или что-нибудь еще). В противном случае, кажется, вы хотите, чтобы люди бесплатно писали код для вас. В таком случае я ухожу. –

+1

Как подсказка, я предлагаю вам изучить d3.nest и d3.mean, которые вам помогут. – Cyril

+0

Спасибо Херардо и Кирилл. Я не знаю, как это сделать. Я не эксперт в d3. Я попытался с d3.nest(), но не смог объединить результирующие данные с этими данными –

ответ

1

Вы можете сделать это, как показано в фрагменте ниже.

test = [{ 
 
    "devcount": 1, 
 
    "dayofweek": 0, 
 
    "hour": 1 
 
    }, { 
 
    "devcount": 2, 
 
    "dayofweek": 0, 
 
    "hour": 2 
 
    }, 
 

 
    { 
 
    "devcount": 3, 
 
    "dayofweek": 1, 
 
    "hour": 2 
 
    }, { 
 
    "devcount": 4, 
 
    "dayofweek": 1, 
 
    "hour": 3 
 
    }, { 
 
    "devcount": 6, 
 
    "dayofweek": 1, 
 
    "hour": 4 
 
    }, { 
 
    "devcount": 5, 
 
    "dayofweek": 1, 
 
    "hour": 5 
 
    }, 
 

 
    { 
 
    "devcount": 7, 
 
    "dayofweek": 2, 
 
    "hour": 5 
 
    }, { 
 
    "devcount": 8, 
 
    "dayofweek": 2, 
 
    "hour": 6 
 
    }, { 
 
    "devcount": 9, 
 
    "dayofweek": 2, 
 
    "hour": 7 
 
    }, { 
 
    "devcount": 10, 
 
    "dayofweek": 2, 
 
    "hour": 9 
 
    } 
 
]; 
 

 
//make the summary using nest 
 
smry = d3.nest() 
 
    .key(function(d) { 
 
    return d.dayofweek; 
 
    }) 
 
    .rollup(function(d) { 
 
    return d3.mean(d, function(g) { 
 
     return g.devcount; 
 
    }) 
 
    }) 
 
    .entries(test); 
 
test.forEach(function(t) { 
 
    //find the value from summary for dayofweek 
 
    var k = smry.find(function(s) { 
 
     return (s.key == t.dayofweek) 
 
    }); 
 
    //check the day of week with the mean, set the flag in the data 
 
    if(k.values<t.devcount){ 
 
     t.flag = true; 
 
    } else { 
 
     t.flag = false; 
 
    } 
 
}); 
 

 
console.log(test);//this now has the flag to determine the color
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

Смежные вопросы