Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何找到数据集中每个成员的频率_Javascript_D3.js_Lambda_Bigdata - Fatal编程技术网

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

Javascript 如何找到数据集中每个成员的频率,javascript,d3.js,lambda,bigdata,Javascript,D3.js,Lambda,Bigdata,我正在获取和分析一个大型数据集。 我想知道每个值在数据集中出现了多少 让我们举一个小例子来说明问题 [ {"Year": "1997", "Company": "Ford", "Model": "E350", "Length": "2.34"}, {"Year": "2000", "Company": "Mercury", "Model": "Cougar", "Length": "2.38"} {"Year": "2001", "Company": "Ford", "Model":

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

让我们举一个小例子来说明问题

[
  {"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;
                });
但是,我有一个非常大的数据集(900MBO),我需要以一种非常动态的方式进行这个过程

更新

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]++;
  }
var数据集={}
d3.csv(链接、功能(数据){
数据集=数据;
});
//获取数据
var频率={};
var datasetlength=dataset.length;
对于(var i=0;i
您可以循环遍历所有条目,并将它们收集到一个对象中,其中键是名称,值是计数。初始数据如下所示:

{
  "Ford" : 2,
  "Mercury" : 1
}
您可以通过一个对象执行
减少

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]++;
}



在过去的几个月里,我做了一个类似的壮举,你的浏览器的调试器对于这项工作来说是一个非常方便的工具,尤其是CPU分析器。您可以确定哪些操作实际导致了延迟。

我不确定这是否是处理这么多数据的最有效方法(再说一遍,Javascript不是为大数据而设计的,所以效率不应该放在您的脑海中)

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


谢谢!我收到了这样一条消息:uncaughttypeerror:Object#没有“reduce”方法@user3147036您需要一个数组才能使用
reduce
。我认为您使用的数组与示例中的数组相似。我使用的是对象!在第二种解决方案中,我认为我们将得到重复,并且每次都忘记保存值名。@user3147036。只需选择JS和控制台面板。
var chartData = Object.keys(frequency).map(function(company){
  var value = frequency[company];
  return {
    Value : company,
    Frequency : value
  }
});