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

如何有效地确定两个.csv文件之间的显著差异,csv,dictionary,d3.js,visualization,Csv,Dictionary,D3.js,Visualization,有没有一种方法可以快速确定为什么两个应该可以互换的.csv文件不能互换 类似于用于关键评估的差异/验证类型机制 我有一个d3.js映射,当我使用它时,我试图使它可视化一些数据,它工作得很好,但是在一个未捕获的范围错误中,它崩溃了:超过了最大调用堆栈大小错误 我最初的猜测是: 由于标题的命名不同——也许这就是问题所在-->但它们是为了彼此兼容而生成的,所以我对此表示怀疑 新的比旧的大一点,是吗 不幸的是,我不太熟悉web开发,也不太熟悉这种性质的大型数据集——我一直在寻找解决方案,但似乎无法找

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

类似于用于关键评估的差异/验证类型机制

我有一个d3.js映射,当我使用它时,我试图使它可视化一些数据,它工作得很好,但是在一个
未捕获的范围错误中,它崩溃了:超过了最大调用堆栈大小
错误

我最初的猜测是:

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

  • 新的比旧的大一点,是吗


不幸的是,我不太熟悉web开发,也不太熟悉这种性质的大型数据集——我一直在寻找解决方案,但似乎无法找到它

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

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

diff对于CSV(或规范化)文件的高级视图,查看字段数量的直方图通常很有用,就像您的古代和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 #############

因此,很明显,古代文件是格式良好的矩形CSV文件,而X文件的格式不同。看起来X文件具有层次结构布局,其中“,”作为字段分隔符,“|”作为子字段分隔符。

如果不看到代码,就无法判断发生了什么。我注意到新的CSV在逗号之前有空格(这将成为代码中字段名称的一部分),因此这可能是需要查看的内容。如何删除它?用正则表达式
perl
还是什么?同样,这取决于你用它做什么。你可以正确地处理这个问题,或者根本不重要。我正在尝试使它适合可视化,它是在Excel还是LibreOffice中打开的?它是带有标题的CSV,所以我认为它应该。
$ 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 #############