繁体   English   中英

如何找到数据集中每个成员的频率

[英]How can I find the frequency of each member in my data set

我正在努力获取和分析大型数据集。 我想知道每个值出现在数据集中多少个。

让我们举一个小例子来澄清问题。

[
  {"Year": "1997", "Company": "Ford", "Model": "E350", "Length": "2.34"},
  {"Year": "2000", "Company": "Mercury", "Model": "Cougar", "Length": "2.38"}
  {"Year": "2001", "Company": "Ford", "Model": "Cougar", "Length": "2.38"}
]

我不确切知道我拥有什么值,但是我想对其进行哈希处理以这种方式获得结果。

[
  {"Value": "Ford", "Frequency": 2},
  {"Value": "Mercury", "Frequency": 1},
]

如果它不是动态的,并且我知道值,我将以这种方式进行操作:

 var filteredCompany = data.filter(function(a) {
                    return /Ford/i.test(a.Company).lenght;
                });

但是,我有一个非常大的数据集(900 Mbo),我需要以非常动态的方式进行此过程。

更新

var dataset = {}
d3.csv(link, function(data) {
    dataset = data;
});

//Fetch data 

var frequency = {};
var datasetlength = dataset.length;

  for(var i = 0; i < datasetlength; i++){
    var current = dataset[i];
    if(!frequency.hasOwnProperty(current.company)) frequency[current.company] = 0;
    frequency[current.company]++;
  }

您可以做的是遍历所有条目,并将它们收集到一个对象中,其中键是名称,值是计数。 初始数据将如下所示:

{
  "Ford" : 2,
  "Mercury" : 1
}

您可以通过对象进行reduce

var frequency = hugeData.reduce(function(freq,current){
  var currentCompany = current.Company;
  if(!freq.hasOwnProperty(currentCompany)) freq[currentCompany] = 0;
  freq[currentCompany]++;
  return freq;
},{});

但是reduce是ES5有时是缓慢的。 您可以执行一个普通循环:

var frequency = {};
var hugeDataLength = hugeData.length;

for(var i = 0; i < hugeDataLength; i++){
  var current = hugeData[i];
  var currentCompany = current.Company;
  if(!frequency.hasOwnProperty(currentCompany)) frequency[currentCompany] = 0;
  frequency[currentCompany]++;
}

现在我们已经将数据缩减为更易于管理的大小,您可以遍历频率数据并将其转换为数组,将键和值向下移动到对象中。

var chartData = Object.keys(frequency).map(function(company){
  var value = frequency[company];
  return {
    Value : company,
    Frequency : value
  }
});

可以在此处查看正在运行的演示。


在过去的几个月中,我也做了类似的壮举,您的浏览器调试器是完成此工作的非常方便的工具,尤其是CPU分析器。 您可以确定哪些操作实际上导致了延迟。

我不确定这是否是处理大量数据的最有效方法(然后,Java并不是针对大数据编写的,因此效率不应该放在您的脑海中)。

基本上,我将使用跟踪频率的关联数组来遍历所有数据。 如果当前data.Company不在关联数组中,它将作为键将其添加到数组中,然后输入频率1。 如果在数组中找到它作为键,它将使频率增加1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM