问题标签 [record-linkage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - Jaro-Winkler 的包之间的区别
我正在使用模糊匹配来清理用户输入的药物数据,并且我正在使用 Jaro-Winkler 的距离。当我注意到默认设置没有给出相同的值时,我正在测试哪个包与 Jaro-Winkler 的距离更快。谁能帮我理解差异来自哪里?例子:
我假设它与权重有关,我知道我在两者上都使用了默认值。但是,如果有更多经验的人可以阐明正在发生的事情,我将不胜感激。谢谢!
文档:
https://cran.r-project.org/web/packages/stringdist/stringdist.pdf https://cran.r-project.org/web/packages/RecordLinkage/RecordLinkage.pdf
r - 比较和链接具有不同字序/字数的字符串
我正在尝试使用 recordLinkage 包将两个数据集链接在一起,其中一个数据集倾向于给出多个姓氏/中间名,另一个只给出一个姓氏。目前正在使用的字符串比较函数是 Jaro-Winkler 函数,但是返回的分数取决于字符串如何偶然匹配,而不是较短字符串的内容是否包含在较长字符串中的任何位置。这导致创建了许多质量较差的链接。错误权重的可重现示例如下:
我希望 id 的 2 和 3 获得与 id #1 大致相同的权重,但目前它们要低得多,因为它们的姓在两个数据集中的位置并不完全相同(尽管内容是一致的)。有没有办法可以修改此处使用的字符串比较函数/数据结构,以便考虑不同的顺序?
补充说明:
这两个数据集都有数百万行,因此内存效率在这里绝对重要!
有时,另一个数据集可能不仅仅是一个姓氏,所以我们将 3 个单词与 2 个单词进行比较 - 可能最好先解决简单的情况
- 两个数据集之间的名称通常会存在拼写差异
- 目前我们正在使用 IBM 的质量阶段进行此链接,他们使用“MULT_UNCERT”比较功能(https://www.ibm.com/support/knowledgecenter/en/SSZJPZ_11.7.0/com.ibm.swg.im.iis .ds.design.help.doc/topics/r_qresfgde_MULT_UNCERT_comparison.html)。我想在 R 中复制它。
python - 在单个数据框中显示所有匹配对 - Python Record Linkage
我有一个熊猫 MultiIndex 对象:
这个 MultiIndex 对象定义了以下 8 对:(1,10), (1,11), (2,10), (2,11), (3,10), (3,11), (8,10) , (8,11)。
级别中列出的元素对应于 DataFrame 的索引:
我想要的是创建一个新的 DataFrame 来显示上面定义的所有对。看起来像:
有没有有效的方法来实现这一点?(如果可能,不要使用 for 循环)
提前致谢
r - R:记录链接问题,所有字段组合在 1 列中
我必须将数据集 A 中的 a 列与数据集 B 中的 b 列相匹配。但是不同的变量不在单独的字段(a、b、c 列)中,而是在同一个字段中。
我一直在研究RecordLinkage和fastLink包,它们在分隔字段时效果很好。
单独的字段:
快速链接示例
记录链接示例
组合字段的问题:
我希望无论在同一字段中以及无论姓名、城市和出生日期的顺序如何,记录都能匹配。
matching - 记录与多个数据集的链接
问题
fastLink和RecordLinkage包在匹配从数据库 A 到数据库 B 的记录(行)方面做得非常好,反之亦然。开发人员正在努力从仅匹配 2 个数据库扩展到多个数据库。
我在这里给出了一个简单的例子。
同时,我们将如何匹配多个数据帧?例如,我有多个诊所 A、B、C、D、E、F 患者的医疗记录,我想将它们合并为一个。
一个可重现的例子:
预期结果 :
最后,我想要唯一标识的记录:
即使结果不像上面那样干净,也没关系。目标是从所有 6 条记录中找到一条统一的记录,并且属于同一个实体。fastLink和RecordLinkage都负责重复数据删除(删除重复项)。
在这种情况下,我如何开发一种方法来处理两个以上的数据库?
r - 在 R 中跨多个“脏”列匹配两个数据集
我经常需要通过多个匹配列来匹配两个数据集,原因有两个。首先,这些特征中的每一个都是“脏”的,这意味着即使应该(对于真正匹配的行),单个列也不会始终匹配。其次,特征不是唯一的(例如,男性和女性)。像这样的匹配对于跨时间匹配(前测与后测分数)、不同数据模式(观察到的特征和实验室值)或研究参与者的多个数据集很有用。
我需要一个选择最佳匹配的启发式方法。然后我可以一起对两者进行分析,如this question中所述。请注意,有许多匹配列和许多 ID,因此必须将它们都指定为列表或向量。例如,我在下面创建了两个数据集进行匹配。在示例中,DT1 第 1 行 (ID 1) 是 DT2 第 1 行 (ID 55) 的最佳匹配,即使只有“match4”列匹配;这是因为 DT2 第 2 行和第 3 行更适合 DT1 第 2 行和第 3 行。奖励:DT1 第 7 行同样匹配 DT2 第 7 行和第 8 行,但与 DT2 第 7 行有部分匹配,因此理想情况下会被选中。
问题:对于 DT1,从 DT2 中选择匹配行的“最佳猜测”,并且仅使用 DT2 中的每一行一次。在 R 中执行此操作的最佳方法是什么(以有效和“最佳实践”的惯用方式)?
我的初步方法:我创建了第三个 data.table,其中包含来自 DT1 的一列 ID,称为 DTmatch。所有后续列都是来自 DT2 的 ID。对于 DTmatch 的第二列(以 DT2 的第一个 ID 命名),每个值应表示匹配列的计数(在本例中为 0 到 4)。接下来,在匹配表中找到对每一行和每一列唯一的最高匹配值。最后,创建最后一列,指定与 DT1 ID 匹配的 DT2 ID(DTmatch 中的第 1 列)。
r - 根据 2 列中的值 + 模糊匹配对表进行重复数据删除
我有一个从Zotero导出的 CSV 文件,其中包含我的图书馆条目的元数据。我知道它包含很多重复项,但要摆脱它们并不容易:
并非所有具有相似标题的项目实际上都是重复的,例如
/li>并非所有实际上相似的项目都具有 100% 相同的元数据字符串,例如
/li>
这是一个极端的例子(差异通常不是那么大),但正如您所见,预清洁并不能完全解决这个问题;所以这个想法是消除在两列以上包含相似值的行 - 例如,“作者”和“标题”。
到目前为止我尝试过/浏览过的内容:
- OpenRefine - 几乎不熟悉它,因此无法想出或找到任何可行的方法。
- Excel 模糊查找扩展- 并没有真正按照我需要的方式工作。
- Python - 再说一次,我不擅长这种语言;我找不到任何相关的解决方案/指南。
- R:尝试了一些想法:
首先在“作者”列的 for 循环中使用 agrep 来获取重复行的索引;然后对“标题”列执行相同的操作;然后比较向量并对值重合的行进行重复数据删除。不用说,我不能超越第 1 步:
结果是(几乎)完全是胡言乱语;另外我收到警告消息:
我还通读了fuzzywuzzyR文档,但没有找到任何可以提供帮助的函数。
最后,我尝试了 RecordLinkage包。尽管如此,我还是无法超越基础知识。文档相当繁重,对所有事情都没有明确说明;指南很少,我发现的那些(例如this)使用已经准备好身份向量的示例数据集 - 所以我无法弄清楚如何在我的数据上复制它。
所以在这一点上,我不在乎是否在 OpenRefine/R/Py/SQL/whatever 中进行,只是以任何方式进行。
r - 使用 R 中的 compare.linkage 比较两个数据帧并创建对来输入数据
我正在尝试在基于另一个数据的数据集中输入一些数据。但是,要做到这一点,我需要比较几个变量,每个变量都有一个权重。此外,我需要使用 KEY 变量形成对,这些变量是我数据中的 id。
我试图使用compare.linkage
,但我找不到插入我想要的权重的方法,例如 40% 到Age
、 40% 到CHBORN
和 20% 到URBAN
。
我想找到类似这样的结果:
通常,我使用埃默里大学的软件 FRIL 来执行此操作,但我试图将所有内容集中在R
.
最好的,
特丽莎
r - R 中的 RecordLinkage 包 - 为各个链接变量添加权重
我正在关注RPubs的优秀教程,它使用了宏伟的 RecordLinkage 包。我将其应用于我自己的数据,但我只会使用本教程来解释我的问题。
在用于比较的两个数据集中,链接中使用了许多常见字段:
然后使用 compare.linkage() 函数比较这些字段:
这将创建一个名为“a”的大型 RecLinkData 对象,其中包含一堆比较对。
下一步是使用期望最大化 (EM) 算法计算 M 和 U 权重(协议权重):
我认为这基本上是在创建一个整体协议权重,它是所有单个链接变量的产物。
我的问题是如何增加单个链接变量之一的重要性?
例如,我可能知道“姓氏”字段在两个数据集中都是可靠且准确的,所以如果姓氏完全一致,那么在整体一致得分中给予更大的权重。
即使是一些关于在哪里寻找的指示也会有所帮助,我对此有点迷茫,甚至不知道在代码方面要尝试什么。
r - 在 R 的 RecordLinkage 包中使用 RLBigData 类时的错误输出
使用 R 包RecordLinkage
时,后面的一些输出epiClassify()
或emClassify()
函数(可以对RLBigDataLinkage
类对象进行操作)会输出错误。当我使用为较小的数据比较设计的函数时,这些错误不会出现,例如compare.linkage()
. 可以在此处的包小插曲中找到描述此内容的文档。
我的总体目标是在两个表之间“模糊匹配”数据;一旦我知道基于其他变量的表之间哪些行相似,我就可以使用索引从一个表中的列中获取另一个表中缺少的唯一 ID。
数据:这是一些用于重现错误的虚拟数据...
当我在函数中使用上述数据进行较小的比较时,它工作正常,没有错误:
但是,在我使用RLBigData
该类之后(如下面的代码所示),在以下情况下会出现错误:
我尝试在以下情况下访问该对象
result
:emClassify()
nrow中的错误(object@pairs):对于“RLResult”类的这个对象,没有名称“pairs”的插槽尝试通过以下方式获取摘要
summary(result)
:dbGetQuery(object@con, "select count( ) from data1") 中的错误:对于“RLBigDataLinkage”类的这个对象,没有名称为“con”的插槽*试图通过以下方式获取比较表
getTable(result)
:table.ff(object@data@pairs$is_match, object@prediction, useNA = "ifany") 中的错误:当前仅允许 vmodes 整数 - 你确定 ... 仅包含因子或整数?RLBigDataLinkage()
首次运行该函数时也会引发警告:警告消息:1:在 result_fetch(res@ptr, n = n) 中:不需要为语句调用 dbFetch(),仅用于查询
以下代码应重现这些错误
我不确定为什么代码在第二种情况下会吐出这些错误。在移动到更大的数据集之前,我想对小数据集上的代码进行故障排除。如果有人能阐明这个包输出的这些错误和警告,我将不胜感激。