营销数据质量管理的最佳实践
dwm的Python项目详细描述
#dwm(数据洗衣机)
red hat维护营销数据质量的业务逻辑
通常,在考虑保持数据的高质量之前,人们会疯狂地匆忙收集尽可能多的数据。错误输入数据的一些示例包括:
-需要手动输入的数据收集工具(如兴趣或免费表单),而不是OAuth或picklists
-未经培训的数据输入或办公室工作人员
-从外部来源购买的不符合公司立场的数据ards
通过这些来源引入的不良数据可能会导致在手动更正方面投入大量时间,或者由于无法查询干净的数据而直接导致机会和收入的损失。显然,一个解决方案是确保所有数据收集源都符合您的数据库标准,但如果您能做到这一点,那么我就在这里坐独角兽飞行。
n联系人数据的质量,尽管这些原则适用于许多类型的数据库。
理论上,任何字符串字段都可以应用这些规则;但是,在配置dwm时,应该评估规则是否适合给定字段。
无论如何。这些数据通常是垃圾邮件机器人、收集工具中的错误(例如发布错误的html字符串)或有人上传错误的电子表格的结果。我们将验证分为两部分:泛型验证和字段特定验证。
以下是一般错误数据的示例:
```
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaary要清除任何与网站/url相关的字段,因此如果这出现在我们正在清除的某个字段中,则可能是错误数据
````
>dwm使用两种类型的通用验证:
-`genericlookup`:根据已知的错误数据列表(以前观察到的)删除'bad'值
-`genericregex`:删除基于正则表达式的"坏"值;也就是说,任何超过4个字符的单词都是相同的字符;或者包含"伟哥"的字符串
她。一个例子是由9个数字组成的字符串:``9493020093```。在电话号码字段中,这可能是很好的数据。在名字栏里,是垃圾。相反,"hi,this is a string of letters``在基于文本的字段中可能有用途,但它在电话号码字段中没有提供合理的数据。
dwm使用两种类型的字段特定验证:
-`field specific lookup`:根据已知的错误数据列表删除"bad"值(先前观察到的)
-`fieldspecificRegex`:基于正则表达式删除"坏"值;即对于字段"firstname",删除包含所有数字的任何值
例如,"proggrrammer/developer"几乎是一个有效的"作业角色"值"programmer/developer",但拼写错误。另一个例子是"programmer",它显然属于前一类,但不是精确的值匹配。ation通常不能应用于预期为自由文本的字段,例如"名字"或"公司名称"。如果需要对这些字段应用某些规则,建议使用用户定义函数。
-`normlookup`:根据已知的数据列表(以前观察到的)替换"几乎"值;即常见的拼写错误
-`normregex`:替换基于正则表达式的"几乎"值;即,对于"jobRole"字段,将包含"programmer"但不包含"manager"的任何值替换为"programmer/developer"
-"normIncludes":替换基于以下至少一项的"几乎"值:包含字符串,排除字符串,以字符串开头,以字符串结尾
一个例子是"超级区域"字段。虽然"country"是一个可能被收集的值,但数据库的用户可能只需要筛选到一个通用区域即可完成其工作。
-`derivevalue`:给定一个或多个字段的输入值,查找相应的输出值;即f或者"jobRole="manager"和"department="it",然后设置"persona="it decision maker"
-"copyValue":给定一个字段的输入值,将该值复制到目标字段
-"deriveRegex":给定一个字段的输入值,使用正则表达式导出目标字段值
-"eincludes`:给定一个字段的输入值,至少基于以下之一派生目标字段:包含字符串、排除字符串、以字符串开头、以字符串结尾在运行时配置中,派生规则在字典中排序以维护规则层次结构所以,如果规则1没有产生结果,那么规则2将被尝试。在其中一个派生规则产生新值后,进程将退出。
用户定义的功能旨在填补这一空白。例如,我们的zipcodes可以应用一些相当基本且一致的转换,以使数据更易于处理(即去掉后面的hypen/number组合,如果电子表格格式不正确,则用0填充左边的空白),但这些规则不属于上述任何类别。
还包括第三方数据丰富。例如,如果您与提供IP地址地理位置或基于电子邮件域提供其他公司信息的公司签订了API合同,则可以定义一个函数来与该API交互,并将其他数据拉入感兴趣的字段。
这将是运行上述清洗类型的最有效顺序。
1。一般验证
2.现场特定验证
3.标准化
4.派生数据(也称为"填充空白",具体取决于字段类型)
这包括以前的值是什么,新的/替换的值是什么,以及什么规则导致了更改。该记录有点类似于git提交,因为它只记录进行了更改的地方,而不保留任何保持不变的记录。虽然在这个包中是可选的,但是建议这些过程的任何自动化都为数据库的业务用户提供故障排除和透明性的记录。
/>
ficlookup',
"fieldspecificRegex","normLookup","normRegex","normIncludes"],
"派生":[
{
"类型":"deriveincludes",
"字段集":["字段2",
"选项":["覆盖",'blankifnomatch']
>
;初始化dwm实例
dwm实例=(
name='mydwm',
mongo=my'u mongo,
fields=field配置
field1'
field1''field1':'potentiallybaddata',
field2'field2'
":"潜在匹配"
}
#运行整个dwm并返回cleaned record=history/changes
clean_record,hist=dwm_instance.run(test_record)
`````
\lookups,derivation,and regex rules
datadictionary.md文件中有这些项的完整架构。还包括一个索引改进性能的建议。
并输出相同的两个(对"data"应用更改,对"histobj"进行任何相关更新)。用于记录历史记录的帮助函数包含在dwm包中。
udf理想情况下应在一个文件中定义,该文件与调用dwm函数的脚本分开,然后独立加载。
histobj):
fieldold=data['myfield']
data['myfield']=fieldnew
histobUpD=\u collectHistoryAgg(contactHist=histobj,fieldHistobj=change,
````
m实例
dwm_实例=(
name='mydwm',
mongo=我的mongo,
udfs=udf配置
)
````
red hat维护营销数据质量的业务逻辑
通常,在考虑保持数据的高质量之前,人们会疯狂地匆忙收集尽可能多的数据。错误输入数据的一些示例包括:
-需要手动输入的数据收集工具(如兴趣或免费表单),而不是OAuth或picklists
-未经培训的数据输入或办公室工作人员
-从外部来源购买的不符合公司立场的数据ards
通过这些来源引入的不良数据可能会导致在手动更正方面投入大量时间,或者由于无法查询干净的数据而直接导致机会和收入的损失。显然,一个解决方案是确保所有数据收集源都符合您的数据库标准,但如果您能做到这一点,那么我就在这里坐独角兽飞行。
n联系人数据的质量,尽管这些原则适用于许多类型的数据库。
理论上,任何字符串字段都可以应用这些规则;但是,在配置dwm时,应该评估规则是否适合给定字段。
无论如何。这些数据通常是垃圾邮件机器人、收集工具中的错误(例如发布错误的html字符串)或有人上传错误的电子表格的结果。我们将验证分为两部分:泛型验证和字段特定验证。
以下是一般错误数据的示例:
```
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaary要清除任何与网站/url相关的字段,因此如果这出现在我们正在清除的某个字段中,则可能是错误数据
````
>dwm使用两种类型的通用验证:
-`genericlookup`:根据已知的错误数据列表(以前观察到的)删除'bad'值
-`genericregex`:删除基于正则表达式的"坏"值;也就是说,任何超过4个字符的单词都是相同的字符;或者包含"伟哥"的字符串
她。一个例子是由9个数字组成的字符串:``9493020093```。在电话号码字段中,这可能是很好的数据。在名字栏里,是垃圾。相反,"hi,this is a string of letters``在基于文本的字段中可能有用途,但它在电话号码字段中没有提供合理的数据。
dwm使用两种类型的字段特定验证:
-`field specific lookup`:根据已知的错误数据列表删除"bad"值(先前观察到的)
-`fieldspecificRegex`:基于正则表达式删除"坏"值;即对于字段"firstname",删除包含所有数字的任何值
例如,"proggrrammer/developer"几乎是一个有效的"作业角色"值"programmer/developer",但拼写错误。另一个例子是"programmer",它显然属于前一类,但不是精确的值匹配。ation通常不能应用于预期为自由文本的字段,例如"名字"或"公司名称"。如果需要对这些字段应用某些规则,建议使用用户定义函数。
-`normlookup`:根据已知的数据列表(以前观察到的)替换"几乎"值;即常见的拼写错误
-`normregex`:替换基于正则表达式的"几乎"值;即,对于"jobRole"字段,将包含"programmer"但不包含"manager"的任何值替换为"programmer/developer"
-"normIncludes":替换基于以下至少一项的"几乎"值:包含字符串,排除字符串,以字符串开头,以字符串结尾
一个例子是"超级区域"字段。虽然"country"是一个可能被收集的值,但数据库的用户可能只需要筛选到一个通用区域即可完成其工作。
-`derivevalue`:给定一个或多个字段的输入值,查找相应的输出值;即f或者"jobRole="manager"和"department="it",然后设置"persona="it decision maker"
-"copyValue":给定一个字段的输入值,将该值复制到目标字段
-"deriveRegex":给定一个字段的输入值,使用正则表达式导出目标字段值
-"eincludes`:给定一个字段的输入值,至少基于以下之一派生目标字段:包含字符串、排除字符串、以字符串开头、以字符串结尾在运行时配置中,派生规则在字典中排序以维护规则层次结构所以,如果规则1没有产生结果,那么规则2将被尝试。在其中一个派生规则产生新值后,进程将退出。
用户定义的功能旨在填补这一空白。例如,我们的zipcodes可以应用一些相当基本且一致的转换,以使数据更易于处理(即去掉后面的hypen/number组合,如果电子表格格式不正确,则用0填充左边的空白),但这些规则不属于上述任何类别。
还包括第三方数据丰富。例如,如果您与提供IP地址地理位置或基于电子邮件域提供其他公司信息的公司签订了API合同,则可以定义一个函数来与该API交互,并将其他数据拉入感兴趣的字段。
这将是运行上述清洗类型的最有效顺序。
1。一般验证
2.现场特定验证
3.标准化
4.派生数据(也称为"填充空白",具体取决于字段类型)
这包括以前的值是什么,新的/替换的值是什么,以及什么规则导致了更改。该记录有点类似于git提交,因为它只记录进行了更改的地方,而不保留任何保持不变的记录。虽然在这个包中是可选的,但是建议这些过程的任何自动化都为数据库的业务用户提供故障排除和透明性的记录。
/>
ficlookup',
"fieldspecificRegex","normLookup","normRegex","normIncludes"],
"派生":[
{
"类型":"deriveincludes",
"字段集":["字段2",
"选项":["覆盖",'blankifnomatch']
>
;初始化dwm实例
dwm实例=(
name='mydwm',
mongo=my'u mongo,
fields=field配置
field1'
field1''field1':'potentiallybaddata',
field2'field2'
":"潜在匹配"
}
#运行整个dwm并返回cleaned record=history/changes
clean_record,hist=dwm_instance.run(test_record)
`````
\lookups,derivation,and regex rules
datadictionary.md文件中有这些项的完整架构。还包括一个索引改进性能的建议。
并输出相同的两个(对"data"应用更改,对"histobj"进行任何相关更新)。用于记录历史记录的帮助函数包含在dwm包中。
udf理想情况下应在一个文件中定义,该文件与调用dwm函数的脚本分开,然后独立加载。
histobj):
fieldold=data['myfield']
data['myfield']=fieldnew
histobUpD=\u collectHistoryAgg(contactHist=histobj,fieldHistobj=change,
````
m实例
dwm_实例=(
name='mydwm',
mongo=我的mongo,
udfs=udf配置
)
````