在 JavaScript 数组中估算缺失值

Posted

技术标签:

【中文标题】在 JavaScript 数组中估算缺失值【英文标题】:Impute missing values in JavaScript array 【发布时间】:2016-10-31 15:34:34 【问题描述】:

我有以下 javascript 代码,它使用 sql.js 库与远程 SQL 数据库进行通信。

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://dl.dropboxusercontent.com/u/540963/test.sqlite', true);
xhr.responseType = 'arraybuffer';
var output = [];

xhr.onload = function(e) 
  var uInt8Array = new Uint8Array(this.response);
  var db = new SQL.Database(uInt8Array);
  var data = db.exec("SELECT year, weight FROM freq_data WHERE doi = 'D007266'");

  $.each(data[0].values, function(key, value) 
    output.push('year': value[0], 'weight': value[1]);
  );
;
xhr.send();

输出存储在output 数组中。例如,对于给定的数组,数据如下:

 year=1996,  weight=3
 year=1999,  weight=2
 year=2004,  weight=5
 year=2005,  weight=3
 year=2006,  weight=2

数据存在一些差距;例如,1997、1998、2000-2003 年没有条目。我想知道如何估算数据以用 0 值填充缺失的年份以结束:

 year=1996,  weight=3
 year=1997,  weight=0
 year=1998,  weight=0
 year=1999,  weight=2
...
 year=2006,  weight=2

最合适的方法是什么?

【问题讨论】:

在数组上循环,跟踪年份,为缺少的添加条目... 数据是否保证排序? @TimoSta 是的,我可以使用 SQL 对数据进行排序。 【参考方案1】:

假设数据将按年份排序,您可以像这样使用.reduce()

var data = [  year: 1996,  weight: 3,
     year: 1999,  weight: 2,
     year: 2004,  weight: 5,
     year: 2005,  weight: 3,
     year: 2006,  weight: 2 ];
    
var final = data.reduce(function(prev, curr, index, arr) 
  prev.push(curr);
  if (index < arr.length - 1) 
    var nextYearInData = arr[index + 1].year;
    var yearToAdd = curr.year + 1;
    while (yearToAdd < nextYearInData) 
      prev.push(year: yearToAdd, weight: 0);
      yearToAdd++;
    
  
  return prev;
, []);

console.log(final)

【讨论】:

以上是关于在 JavaScript 数组中估算缺失值的主要内容,如果未能解决你的问题,请参考以下文章

使用预测模型估算缺失值

在 R 中使用 ROLLING 平均值估算缺失值

有没有办法在机器学习中估算缺失值?

如何获取每个分区的最后一个值以在 Spark SQL 中估算缺失值

通过从现有分布中抽样来估算缺失值

使用特定列在 scikit-learn 中估算分类缺失值