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

how to effectively determine the significant differences between two .csv files

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

类似于 diff/validation 类型的关键评估机制。

我有一个 d3.js 地图,我正试图使一些数据可视化,当我使用我的 initial data set it works perfectly, but on the new set I created 它崩溃并出现 Uncaught RangeError: Maximum call stack size exceeded 错误。

我的初步猜测是:

不幸的是,我对 Web 开发不是很熟悉,也不使用这种性质的大型ish 数据集 - 我一直在寻找解决方案,但我不能似乎弄清楚了。

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

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

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

如果幸运的话,您可以通过跳过归一化步骤并简单地 运行:

来深入了解差异
 diff <(sort FILE1.csv) <(sort FILE2.csv)

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

对于 CSV(或规范化)文件的高级视图,查看字段数的直方图通常很有用,您的 ANCIENT 和 X .csv 文件确实如此。将它们转换为 .tsv 后,字段数的直方图明显不同。下面,它们以不需要在这里详细描述的格式水平显示,除了要注意直方图的每一行显示值、它的频率以及反映该频率的水平条:

$ awk -F\t '{print NF}' X.tsv | sort -n | histogram
9 57260 ##########################################################
10 3080 ===============================
11 2090 =====================
12 1103 ===========
13 632 =======
14 304 ------------------------------
15 69 ------
16 116 -----------
17 42 ----
18 17 -
19 10 -
21 2 

$ awk -F\t '{print NF}' ANCIENT*.tsv | sort -n | histogram
88 12633 #############

因此很明显,ANCIENT 文件是一个格式正确的矩形 CSV 文件,而 X 文件具有不同的格式。看起来 X 文件具有层次结构,“,”作为字段分隔符,“|”作为子字段分隔符。