如何有效地确定两个 .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
错误。
我的初步猜测是:
因为 headers 的命名方式不同 - 也许这就是问题所在 --> 但生成它们是为了相互兼容,所以我对此表示怀疑。
新的比旧的大一点,是吗?
不幸的是,我对 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 文件具有层次结构,“,”作为字段分隔符,“|”作为子字段分隔符。
有没有办法快速确定为什么两个 .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
错误。
我的初步猜测是:
因为 headers 的命名方式不同 - 也许这就是问题所在 --> 但生成它们是为了相互兼容,所以我对此表示怀疑。
新的比旧的大一点,是吗?
不幸的是,我对 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 文件具有层次结构,“,”作为字段分隔符,“|”作为子字段分隔符。