两个 CSV 文件的相似性(或更多?)

计算科学 数据分析 数据集
2021-12-25 10:35:50

一个 CSV 文件的特征是一个标题,描述了即将到来的 n 个数据行。标头是由分隔符分隔的文本字符串。CSV 标头可能看起来像 (C1)

Date;Time;ZIP-Code;Address;Temperature

假设我们有第二个具有这种结构的 CSV 文件 (C2):

Date;ZIP-Code;Address;Temperature

C1和C2相似,但又不一样:C2缺少“时间”

假设另一个 C3:

Time;Date;Address;ZIP-Code;Temperature

这里存在与 C1 中相同的项目,但顺序不同。

我所追求的是一个指标,它会给我两组之间的相似性,包括这两组项目的相对接近程度。换句话说,如果一个集合中项目的顺序不同,但基数相同,则与不同基数相比,相似度值应该更大,或者如果基数相同但项目本身不同。

我想出了这个初步的心理测量。我可以在矩阵中绘图

             Date;Time;ZIP-Code;Address;Temperature
Date           1 
Time                1
ZIP-Code                    1
Address                            1
Temperature                                 1


             Date;Time;ZIP-Code;Address;Temperature
Time           0    1     0         0       0
ZIP-Code       0    0     1         0       0
Address        0    0     0         1       0
Temperature    0    0     0         0       1


             Date;Time;ZIP-Code;Address;Temperature
Temperature    0    0      0       0        1
Address        0    0      0       1        0
ZIP-Code       0    0      1       0        0
Time           0    1      0       0        0
Date           1    0      0       0        0



             Date;Time;ZIP-Code;Address;Temperature
Head1           0   0       0       0       0
Head2           0   0       0       0       0
Head3           0   0       0       0       0
Head4           0   0       0       0       0

我的相似感是“矩阵中的结构/模式越多”,两个 CSV 标题就越相似。

我想知道是否有像 Dice-Distance、Cosine-Similarity、Jaccard-Index 这样的度量值会有所帮助?

1个回答

有用的包含度量取决于您是要检查成对相似性还是包含性。为了相似,Jaccard 指数很直观。对于遏制,我会对其进行调整,what ratio of columns of my 'gold standard file' are in the file to check这是自然语言问题中使用的常见特征。

对于文件中列的顺序,一个想法是找到列的重叠序列。假设两个文件具有完全相同的列,但它们被重新排序。您可以找到重叠的部分,然后计算重叠的总和(部分的长度-1,因为重叠 1 是没有重叠)并归一化到可能的最大值。请参见下面的示例。

File 1: A | B | C | D | E
File 2: D | E | C | A | B
overlapping sections: (D, E), (C), (A, B)
normalisation: sum of overlaps / max possible overlap
result: ( 1 + 0 + 1 ) / 4 = 0.5

这两者的组合(总和,乘积?)将涵盖您的矩阵中的一些模式,但在人类可以识别的其他模式上失败,即所有列以相反的顺序导致第二个指标为 0。

另一个问题是列名不一致。如果字符串名称不完全匹配,则上述所有内容都会崩溃。在这种情况下,您可能需要先查看匹配函数(匹配依赖项)以进行数据清理。