Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 在CSV文件中分组数据_Javascript - Fatal编程技术网

Javascript 在CSV文件中分组数据

Javascript 在CSV文件中分组数据,javascript,Javascript,我正在努力接近/理解如何使用当前代码对数据进行分组 最终目标是创建一个密度贴图,沿x轴显示几十年,然后沿y轴显示出现的次数。数据清理数据集后,看起来是这样的: name,sex,first_appearence,franchise Wonder Woman (Diana Prince),Female,1941,DC Dinah Laurel Lance,Female,1969,DC GenderTest,Female,1956,DC Barbara Gordon,Female,1967,DC L

我正在努力接近/理解如何使用当前代码对数据进行分组

最终目标是创建一个密度贴图,沿x轴显示几十年,然后沿y轴显示出现的次数。数据清理数据集后,看起来是这样的:

name,sex,first_appearence,franchise
Wonder Woman (Diana Prince),Female,1941,DC
Dinah Laurel Lance,Female,1969,DC
GenderTest,Female,1956,DC
Barbara Gordon,Female,1967,DC
Lois Lane,Female,1938,DC
我希望能够将另一列添加到csv文件中,并将该行指定为十年。例如,第一排在1940组,第二排在1960组,等等

这是我当前清理数据的代码,我希望更新这些数据,以便将数据分组为几十年:

var data = CSV.map(function(d) {
    return {
        name: d.name.replace(" (New Earth)", "").replace(" (Earth-One)", "").replace(" (Earth-Two)", "").replace(" (Earth-3)", ""),
        sex: d.SEX.replace(" Characters", ""),
        first_appearence: d.YEAR,
        franchise: "DC"
    }
});
females = data.filter(function (d) {
    return d.sex === "Female" && d.first_appearence !== "";
});
您可以使用按十年对数据进行分组。要将第一次出现的
转换为十年,只需将其除以10,四舍五入到最接近的整数,再乘以10,即可得到如下数据转换:

      /10          round down        *10
1965 —————→ 196.5 ————————————→ 196 —————→ 1960
因此,与
d3.nest()
一起使用的
.key
将是转换的十年,根据
首次出现的值计算得出:

var dataByDecade = d3.nest()
  .key(function(d) { return Math.floor(d.first_appearance / 10) * 10; })
  .entries(data);
如果您的年份未转换为数字,请记住在解析CSV时使用
+
运算符将字符串转换为数字,例如
首次出现:+d.year
。当然,您也可以在执行分组的步骤中执行,即

var dataByDecade = d3.nest()
  .key(function(d) { return Math.floor(+d.first_appearance / 10) * 10; })
  .entries(data);
见下面的概念证明:

var数据=[{
名字:“黛娜·劳雷尔·兰斯”,
性别:'女性',
第一次露面:1969年,
特许经营权:“DC”
},
{
名称:“性别测试”,
性别:'女性',
第一次露面:1956年,
特许经营权:“DC”
},
{
姓名:“芭芭拉·戈登”,
性别:'女性',
第一次露面:1967年,
特许经营权:“DC”
},
{
姓名:“路易斯巷”,
性别:'女性',
第一次亮相:1938年,
特许经营权:“DC”
}];
var dataByDecade=d3.nest()
.key(函数(d){return Math.floor(d.first_外观/10)*10;})
.条目(数据);
console.log(dataByDecade)

如果我正确理解您的问题,您可以在CSV.map函数中添加列,如下所示:

var data = CSV.map(function(d) {
return {
    name: d.name.replace(" (New Earth)", "").replace(" (Earth-One)", "").replace(" (Earth-Two)", "").replace(" (Earth-3)", ""),
    sex: d.SEX.replace(" Characters", ""),
    first_appearence: d.YEAR,
    franchise: "DC",
    decade: d.YEAR - (d.YEAR % 10)
}
});

这会将十年设置为年份,并减去一位数的年份(使用)。我假设您正在将CSV.map的结果保存回CSV文件,否则您需要这样做。

谢谢,伙计,这很好,但不是我想要的。我想在CSV中添加另一列名为group,如果该行的年份是1955年,那么它将位于group 1950中。Thanks@dumbquestionsbydumbpeople然后你就可以这样做:
decade:Math.floor(+d.YEAR/10)*10。请参阅更新的答案。