开发者问题收集

如何有效地确定两个 .csv 文件之间的显著差异

2016-01-28
84

有没有办法快速确定为什么两个应该可以互换的 .csv 文件却不能互换?

类似于用于批判性评估的差异/验证类型机制。

我有一个 d3.js 地图,我想让它可视化一些数据,当我使用我的 初始数据集 时,它运行良好,但在 我创建的新数据集 上,它崩溃并出现 Uncaught RangeError: Maximum call stack size reached 错误。

我最初的猜测是:

  • 由于标题的名称不同 - 这可能是问题所在 -> 但它们是为了彼此兼容而生成的,所以我对此表示怀疑。

  • 新的比旧的大一点,可能是因为这个吗?

不幸的是,我不太熟悉 Web 开发,也不熟悉处理这种性质的大型数据集 - 我一直在寻找解决方案,但似乎找不到。

2个回答

完成这项任务的正确方法是规范化两个 CSV 文件(例如,使用其中一个 csv2tsv 工具),然后比较它们。假设字段的顺序相同,则可以在 bash 环境中进行比较,如下所示:

 diff <(sort FILE1.tsv) <(sort FILE2.tsv)

(或者您可能想要使用 -bw 选项:diff -bw ....)

如果幸运的话,您可能能够通过跳过规范化步骤并直接运行来深入了解差异:

 diff <(sort FILE1.csv) <(sort FILE2.csv)

如果列的顺序不同,那么您显然必须在执行 diff 之前重新对它们进行排序。如何最好地做到这一点部分取决于您尚未提供的一些详细信息(有关 CSV 文件)。

peak
2016-01-28

对于CSV(或归一化)文件的高级视图,查看字段数量的直方图通常很有用,就像您的古代和x .csv文件一样。 将它们转换为.tsv后,字段数的直方图明显不同。 下面,它们以在此处不需要详细描述的格式水平显示,只是指出直方图的每一行显示了反映该频率的值,频率和水平栏:

806696429

因此,很明显,古代文件是一个良好的矩形CSV文件,而X文件的格式不同。 看起来X文件具有层次结构布局,“”为字段 - 分离器,并且“ |”作为子场分离器。

peak
2016-01-29