从 javascript 数组计算平均值
Calculating an average from a javascript array
我正在尝试从一些支出数据中获取每月平均数字。我正在使用 d3.js 从 csv 导入和汇总数据,但在我继续计算平均支出之前,我似乎无法仅过滤掉结果数组中的值。
我是 Javascript 的新手,none 感觉非常直观。
// get filtered data (df)
d3.csv("/data/cic_data.csv", function (csv) {
// roll up and group data
var data = d3.nest()
.key(function(d) { return d.date; })
.rollup(function(d) {
return d3.sum(d, function(g) {return g.spend; });
}).entries(csv);
var valueData = data.filter(function(d) {
return d.values;
})
var sum = 0;
for( var i = 0; i < data.length; i++ ){
sum += parseInt( data[i], 10 ); //don't forget to add the base
}
var avg = sum/data.length;
console.log(avg)
这是我的 csv 示例:
entity,level1,level2,supplier,type,date,spend,year,sin
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-07-01,4001.50,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREENSPACE INFORMATION FOR GREATER LONDON CIC,OTHER,2014-07-01,2400.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-06-01,8995.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-05-01,640.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,PUBLIC HEALTH ACTION SUPPORT TEAM CIC,SMALL,2014-05-01,6480.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-04-01,7286.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-03-01,15659.50,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,THE SMALL BUSINESS CONSULTANCY LEICESTER CIC,OTHER,2014-03-01,6000.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-02-01,4001.50,2014,12
您只想要 csv 中所有值的平均值?
你的巢之后:
var avg = d3.sum(data, function(d){
return d.values;
}) / data.length;
或之前:
var avg = d3.sum(csv, function(d){
return +d.spend;
}) / csv.length;
或者为了避免在嵌套期间进行太多迭代:
var sum = 0;
var data = d3.nest()
.key(function(d) {
return d.date;
})
.rollup(function(d) {
return d3.sum(d, function(g) {
sum += +g.spend;
return g.spend;
});
}).entries(csv);
var avg = sum / data.length;
以下是对您的代码的一些评论:
- 如果代码如上所示是完整的,则缺少一些右括号。提示:使用适当的缩进来了解您的范围
- 变量 valueDate 不会为您做任何事情,因为您以后不会使用它。另请注意,过滤器函数需要 return 一个布尔值来决定是保留还是删除元素。
- 除了括号之外,您的代码仅因为求和计算而无法正常工作。您需要使用 data[i].values 而不仅仅是 data[i]
来访问您的每日值
请注意,在嵌套 csv 文件后,您将获得如下数组:
[{键:“2014-07-01”,值:6401.5},{键:“2014-06-01”,值:8995},...]
因此
data[0] = {key: "2014-07-01", values: 6401.5}
和
data[1] = {key: "2014-06-01", values: 8995}
这意味着您的数据数组包含对象作为元素。要访问值 属性,您需要
data[0].values
另见 https://github.com/mbostock/d3/wiki/Arrays。
这是完整的代码和一些中间输出,以了解您的数据发生了什么。
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
// get filtered data (df)
d3.csv("cic_data.csv", function (sv) {
// roll up and group data
console.log("Before nesting:");
console.log(csv);
var data = d3.nest()
.key(function(d) { return d.date; })
.rollup(function(d) {
return d3.sum(d, function(g) {return g.spend; });
}).entries(csv);
console.log("After nesting:");
console.log(data);
var sum = 0;
for( var i = 0; i < data.length; i++ ){
sum += parseInt( data[i].values, 10 ); //don't forget to add the base
}
var avg = sum/data.length;
console.log(avg);
})
</script>
</body>
</html>
我正在尝试从一些支出数据中获取每月平均数字。我正在使用 d3.js 从 csv 导入和汇总数据,但在我继续计算平均支出之前,我似乎无法仅过滤掉结果数组中的值。
我是 Javascript 的新手,none 感觉非常直观。
// get filtered data (df)
d3.csv("/data/cic_data.csv", function (csv) {
// roll up and group data
var data = d3.nest()
.key(function(d) { return d.date; })
.rollup(function(d) {
return d3.sum(d, function(g) {return g.spend; });
}).entries(csv);
var valueData = data.filter(function(d) {
return d.values;
})
var sum = 0;
for( var i = 0; i < data.length; i++ ){
sum += parseInt( data[i], 10 ); //don't forget to add the base
}
var avg = sum/data.length;
console.log(avg)
这是我的 csv 示例:
entity,level1,level2,supplier,type,date,spend,year,sin
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-07-01,4001.50,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREENSPACE INFORMATION FOR GREATER LONDON CIC,OTHER,2014-07-01,2400.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-06-01,8995.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-05-01,640.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,PUBLIC HEALTH ACTION SUPPORT TEAM CIC,SMALL,2014-05-01,6480.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-04-01,7286.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-03-01,15659.50,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,THE SMALL BUSINESS CONSULTANCY LEICESTER CIC,OTHER,2014-03-01,6000.00,2014,12
BARKING DAGENHAM LONDON BOROUGH COUNCIL,Local Government,LONDON,GREEN SHOES ARTS COMMUNITY INTEREST COMPANY,LARGE,2014-02-01,4001.50,2014,12
您只想要 csv 中所有值的平均值?
你的巢之后:
var avg = d3.sum(data, function(d){
return d.values;
}) / data.length;
或之前:
var avg = d3.sum(csv, function(d){
return +d.spend;
}) / csv.length;
或者为了避免在嵌套期间进行太多迭代:
var sum = 0;
var data = d3.nest()
.key(function(d) {
return d.date;
})
.rollup(function(d) {
return d3.sum(d, function(g) {
sum += +g.spend;
return g.spend;
});
}).entries(csv);
var avg = sum / data.length;
以下是对您的代码的一些评论:
- 如果代码如上所示是完整的,则缺少一些右括号。提示:使用适当的缩进来了解您的范围
- 变量 valueDate 不会为您做任何事情,因为您以后不会使用它。另请注意,过滤器函数需要 return 一个布尔值来决定是保留还是删除元素。
- 除了括号之外,您的代码仅因为求和计算而无法正常工作。您需要使用 data[i].values 而不仅仅是 data[i] 来访问您的每日值
请注意,在嵌套 csv 文件后,您将获得如下数组: [{键:“2014-07-01”,值:6401.5},{键:“2014-06-01”,值:8995},...]
因此
data[0] = {key: "2014-07-01", values: 6401.5}
和
data[1] = {key: "2014-06-01", values: 8995}
这意味着您的数据数组包含对象作为元素。要访问值 属性,您需要
data[0].values
另见 https://github.com/mbostock/d3/wiki/Arrays。 这是完整的代码和一些中间输出,以了解您的数据发生了什么。
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
// get filtered data (df)
d3.csv("cic_data.csv", function (sv) {
// roll up and group data
console.log("Before nesting:");
console.log(csv);
var data = d3.nest()
.key(function(d) { return d.date; })
.rollup(function(d) {
return d3.sum(d, function(g) {return g.spend; });
}).entries(csv);
console.log("After nesting:");
console.log(data);
var sum = 0;
for( var i = 0; i < data.length; i++ ){
sum += parseInt( data[i].values, 10 ); //don't forget to add the base
}
var avg = sum/data.length;
console.log(avg);
})
</script>
</body>
</html>