Created
May 11, 2012 20:27
-
-
Save solenoid/2662212 to your computer and use it in GitHub Desktop.
Example of raw Yieldbot js code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var _ = require('underscore'), | |
d3 = require('d3'); | |
// This is an example of some functional heavy code used at Yieldbot | |
// prepare raw data into 20 minute buckets and | |
// return data along with relevant max info and scale functions | |
var prep = function (data) { | |
var total = 0; | |
var prepared = _.map(_.keys(data), function (hour) { | |
var buckets = _.reduce(_.keys(data[hour]), function (memo, minute) { | |
var m = parseInt(minute, 10); | |
if (m < 20) { | |
memo[0] += data[hour][minute]; | |
} | |
if (m >= 20 && m < 40) { | |
memo[1] += data[hour][minute]; | |
} | |
if (m >= 40 && m < 60) { | |
memo[2] += data[hour][minute]; | |
} | |
return memo; | |
}, [0, 0, 0]); | |
var h = parseInt(hour, 10); | |
total = total + buckets[0] + buckets[1] + buckets[2]; | |
return [ | |
{x: (60 * h), y: buckets[0] }, | |
{x: (60 * h + 20), y: buckets[1] }, | |
{x: (60 * h + 40), y: buckets[2] } | |
]; | |
}); | |
prepared = _.flatten(prepared); | |
var yMax = d3.max(prepared, function (d) { return d.y; }); | |
var yScale = d3.scale.linear() | |
.domain([0, yMax]) | |
.range([0, 60]); | |
return { total: total, prepared: prepared, yMax: yMax, yScale: yScale }; | |
}; | |
// below is sample data, example usage and the output of that usage logged out | |
// raw data for 2 hours, more likely up to 24hrs at a time | |
var raw_data = { | |
// first level is hours | |
"0": { | |
// second level is minute in hour | |
"25": 12, | |
"45": 12, | |
"15": 8, | |
"10": 16, | |
"55": 3, | |
"30": 8, | |
"50": 20, | |
"35": 8, | |
"0": 2, | |
"5": 5, | |
"40": 26, | |
"20": 13 | |
}, | |
"1": { | |
"25": 9, | |
"45": 5, | |
"15": 14, | |
"10": 9, | |
"55": 13, | |
"30": 15, | |
"50": 3, | |
"35": 5, | |
"0": 3, | |
"5": 9, | |
"40": 18, | |
"20": 13 | |
} | |
}; | |
var results = prep(raw_data); | |
console.log(results.total); | |
console.log(results.yMax); | |
console.log(results.prepared); | |
// The above three console.logs will output the following: | |
// $ node functional.js | |
// 249 | |
// 61 | |
// [ { x: 0, y: 31 }, | |
// { x: 20, y: 41 }, | |
// { x: 40, y: 61 }, | |
// { x: 60, y: 35 }, | |
// { x: 80, y: 42 }, | |
// { x: 100, y: 39 } ] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment