【问题标题】:How to make a summary list of one column in a large CSV file?如何在大型 CSV 文件中制作一列的摘要列表?
【发布时间】:2018-02-26 18:52:23
【问题描述】:

我在使用 d3 加载的 CSV 中有 20,000 行。在这个 CSV 中,大约有 4,000 个唯一的类别名称(每个都在不同数量的行中重复)。

我想从我的 CSV 中列出所有约 4,000 个类别名称的列表(一个数组或对象),以便能够过滤掉我不想使用的类别。

请参阅下面的代码和数据示例;类别列称为feature_id

var rowConverter = function(d){
    return{
        event_date: parseTime(d.event_date),
        claim_number: d.claim_number,
        cause: d.cause,
        detail_cause: d.detail_cause,
        paid_total: parseFloat(d.paid_total),
        feature_id: d.feature_id,
        id: parseFloat(d.id)
    };
}


d3.csv('claims_cwy.csv', rowConverter, function(dataset) {
    console.log(dataset);
}

【问题讨论】:

标签: javascript csv d3.js


【解决方案1】:

您可以创建一个空数组,迭代此数据集,并为每次迭代检查此类别是否存在。如果没有,请添加到数组中。比如:

const categories = []
dataset.forEach( item => {
  if ( categories.indexOf(item.category) <= 0)
    categories.push(item.category)
})

PS:我不知道行中的这个属性中哪个代表类别,不清楚。

【讨论】:

  • 感谢您的回复,您能澄清一下我在哪里替换了我的 feature_id 吗?我想这将是您所谓的“项目”或“类别”......可能是基本问题,对不起,我是初学者!类别都对应日期,上图没有(表很大)
【解决方案2】:

有多种方法可以实现您想要的。如果您想保留它 D3-ish 您可以使用 d3.set() 不仅保证其值的唯一性,还允许您提供一个访问器来提取类别的值,即字段feature_id,来自您的数据。

const categories = d3.set(dataset, d => d.feature_id);

但是请注意,这需要对您的数据进行额外的循环。由于您声称拥有大量数据,因此您可能希望通过adding 逐步完成行转换器功能中的集合。

const categories = d3.set();
const rowConverter = function(d) {
  categories.add(d.feature_id);
};

无论您喜欢哪种方法,都可以致电 d3.values() 获得唯一类别值。

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多