首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据分组到CSV文件中

将数据分组到CSV文件中
EN

Stack Overflow用户
提问于 2019-05-23 12:41:33
回答 2查看 73关注 0票数 2

我很难接近/理解如何用我的当前代码对数据进行分组。

最终的目标是创建一个沿x轴的几十年的密度图,然后是沿着y轴出现的次数。数据清理完数据集后,如下所示:

代码语言:javascript
复制
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年组,等等。

这是我当前清理我想要更新的数据的代码,这样它就可以将数据分组为几十年:

代码语言:javascript
复制
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 !== "";
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-23 13:04:30

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

代码语言:javascript
复制
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文件,否则您将需要这样做。

票数 0
EN

Stack Overflow用户

发布于 2019-05-23 12:53:48

您可以使用d3.nest()按十年对数据进行分组。要将您的first_appearance转换为十年,您可以简单地将它除以10,将其整成最接近的整数,然后再乘以10,这样您就可以得到如下的数据转换:

代码语言:javascript
复制
      /10          round down        *10
1965 —————→ 196.5 ————————————→ 196 —————→ 1960

因此,您与.key一起使用的d3.nest()将是转换的十年,根据first_appearance的值计算。

代码语言:javascript
复制
var dataByDecade = d3.nest()
  .key(function(d) { return Math.floor(d.first_appearance / 10) * 10; })
  .entries(data);

如果您的年未转换为数字,请记住使用+运算符将字符串转换为数字,例如在解析CSV时使用first_appearence: +d.YEAR。当然,您也可以在执行分组时在步骤中这样做,即

代码语言:javascript
复制
var dataByDecade = d3.nest()
  .key(function(d) { return Math.floor(+d.first_appearance / 10) * 10; })
  .entries(data);

见下文的概念证明:

代码语言:javascript
复制
var data = [{
	name: 'Dinah Laurel Lance',
	sex: 'Female',
	first_appearance: 1969,
	franchise: 'DC'
},
{
	name: 'GenderTest',
	sex: 'Female',
	first_appearance: 1956,
	franchise: 'DC'
},
{
	name: 'Barbara Gordon',
	sex: 'Female',
	first_appearance: 1967,
	franchise: 'DC'
},
{
	name: 'Lois Lane',
	sex: 'Female',
	first_appearance: 1938,
	franchise: 'DC'
}];

var dataByDecade = d3.nest()
  .key(function(d) { return Math.floor(d.first_appearance / 10) * 10; })
  .entries(data);
  
console.log(dataByDecade);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

更新:看起来您不想对数据进行分组,而是添加一个包含十年数据的列。这可以通过这样做来完成:

代码语言:javascript
复制
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,
        decade: Math.floor(+d.YEAR / 10) * 10;
        franchise: "DC"
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56275488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档