用于自动清除文件的dativa洗涤器
dativascrubber的Python项目详细描述
达蒂瓦洗涤器
scruber类在传递给它的pandas数据框上运行一组在config参数中指定的清理规则。
它可以对外部引用列表运行基本数据类型验证、会话验证、重复检查和验证。当数据不符合验证规则时,库可以尝试自动修复数据或隔离数据以供以后调查。
库返回一个报表对象,该对象包含在数据帧上进行清理的详细信息。此报表中的条目可以在本地记录,用于创建电子邮件报表,也可以集中记录到一个集中的日志堆栈中,如弹性堆栈或CloudWatch。
基本用法
您可以在没有参数的情况下实例化一个scruber类,然后使用合适的配置调用run()函数,并调用要清理的数据帧:
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())
config参数包含一个json样式的对象,其结构如下:
- 规则-包含规则的数组
- 规则-包含每个规则配置的对象
- 字段-将此规则应用于单个字段规则的字段的编号或名称
- 规则类型-规则的类型
- 追加结果-如果规则的结果应作为新列追加到源数据帧,则设置为true
- 参数-特定于规则的参数
- 规则-包含每个规则配置的对象
处理名为"name"的单个字段并删除空白记录的示例规则如下所示:
config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]},
参数根据规则的类型而变化。支持"rule_type"的以下值:
- 单列规则
- "string"-验证字符串数据
- "number"-验证数字
- "date"-验证日期
- "查找"-根据单独的数据集检查字段
- 多列规则
- "session"-验证会话数据
- "唯一性"-验证字段的唯一性
验证基本数据类型
基本数据类型验证规则包括字符串、数字和日期。
规则类型:"字符串"
字符串规则根据字段的长度并可选地使用正则表达式,将字段验证为字符串。
它采用以下参数:
- 最小长度-字符串的最小长度,默认为0
- 最大长度-字符串的最大允许长度,默认为1024
- regex-要应用于验证字符串的正则表达式。这是使用标准的python正则表达式处理器处理的,并且支持这里记录的所有语法。默认为".*"
下面的示例验证字符串是否在1到40个字符之间,并且只包含字母数字字符:
config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1,"regex":"\w*"},}]},
规则类型:"数字"
数字规则根据小数位数及其大小将字段验证为数字。
它采用以下参数:
- 最小值-数字的最小允许值,默认为0
- 最大值-数字的最大允许值,默认为65535
- 小数位数-数字应包含的小数位数,必需
- 固定小数位数-如果设置为true(默认值),则规则将自动将所有记录固定为相同的小数位数, 而不是在小数位数为位置不匹配。
下面的示例验证数字是否介于0和255之间,并且不包含小数位数。任何无效的小数位都会自动修复。
config={"rules":[{"rule_type":"Number","field":"Name","params":{"fallback_mode":"remove_record","minimum_value":0,"maximum_value":255,"decimal_places":0,"fix_decimal_places":True},}]},
规则类型:"日期"
日期规则将字段验证为日期、日期格式和日期范围。
它采用以下参数:
- 日期格式-日期参数的格式。这是基于标准的strftime参数加上格式'%s'表示以秒为单位的整数纪元时间。
- 范围检查-可设置为以下值:
- 无-在这种情况下,不检查日期
- 固定的-在这种情况下,验证字段是否位于两个固定日期之间
- 滚动在这种情况下,字段将根据天的滚动窗口进行验证。
- 范围最小值-如果范围检查设置为"固定",则这表示日期范围的开始。如果范围检查设置为"滚动",则表示与当前时间(以天为单位)的偏移量,该偏移量应用作范围中的最早点。默认值为"2000-01-01 00:00:00"
- range_maximum-如果range_check设置为"fixed",则表示日期范围的结束。如果范围检查设置为"滚动",则表示与当前时间(以天为单位)的偏移,该偏移应用作范围中的最新点。默认值为"2020-01-01 00:00:00"
下面的示例验证日期是否在epoch时间内,并且在运行规则的最后一周内:
config={"rules":[{"rule_type":"Date","field":"Name","params":{"fallback_mode":"remove_record","date_format":"%s","range_check":"rolling","range_minimum":-7,"range_maximum":0},}]},
报告
方法返回reportEntry对象的字典。报表条目对象包含许多不同的对象:
- reportentry.date-创建条目时的python datetime对象
- reportentry.field-表示已处理字段的名称的字符串
- reportentry.number_records-受影响的记录数
- reportEntry.category-对应用于行的操作类型进行分类的字符串
- reportEntry.description-一个字符串,包含所采取操作的详细信息
- reportentry.df-包含未通过验证的任何记录的pandas数据帧,以及它们被替换为
reportentry类序列化为人类可读的日志文件,但更常见的是将其后期处理为机器可读格式,并将数据帧保存到磁盘以供以后查看。
处理无效数据
如果数据不有效,则根据以下参数的规格应用回退选项:
- 回退模式-指定数据不符合规则时应执行的操作,并可以采用以下值:
- "remove_entry"-在发送到传递给洗涤器类的logger对象的数据帧中删除和隔离记录
- "使用默认值"-记录将被删除并替换为"默认值"字段中指定的内容
- "请勿替换"-记录保持不变,但仍记录到记录器对象。
- 默认值-如果回退模式设置为使用默认值,则应将未验证的记录的值设置为。默认为""。
对于字符串、数字和日期字段,有两种附加方法可用于处理无效数据。
最佳匹配选项搜索字段中满足验证规则的其他值,并用一个足够相似的值替换无效值。这由以下两个参数控制:
- 尝试最接近的匹配alidate应替换为数据集中最接近匹配记录的值。如果未找到字符串距离阈值指定的足够接近的匹配,则仍应用回退模式。默认为false
- string_distance_threshold-这指定要应用的最接近匹配的默认距离阈值。这是jaro的变体,默认为0.7
如果无效数据为空,则无法进行最佳匹配。在这种情况下,可以使用一个附加选项将字段替换为记录中与其其他字段最相似的值。这被称为外观相似的模型,对于填充空白记录最为有用。
它由单个参数启用:
- lookalike_match-这指定是否应将未验证的条目替换为与其他记录最相似的记录中的值。这实现了一种基于数据集中其他字段相似性的最近邻算法。它对于填写空白记录非常有用,默认值为false
匿名数据
支持两种不同形式的数据匿名:
- 散列-使用带有可自定义salt的sha512散列算法将数据替换为散列
- 加密-使用公共证书加密数据的位置
哈希为匿名化提供了第二种不可逆机制,但可能会发生冲突,因此无法保证哈希是唯一的。应用于哈希的盐也可以从日期开始键入,使哈希只在有限的时间内保持不变。
加密为拥有私有证书的用户提供完全可逆的匿名化。加密支持pkcs1算法最优非对称加密填充"oaep"。填充增加了加密输出的随机性,我们可以使用一个真正的随机数来连续更改加密值,使用一个固定值来固定静态加密值,或者使用一个基于数据字段的固定值来允许伪旋转令牌,每个令牌具有不同的加密值。时间段。
散列
通过将hash参数设置为true,可以对字符串字段进行散列。散列是根据sha512散列算法构造的,并添加了高达16个字节的salt。盐可以从日期字段构造,以允许旋转散列。
以下规则将散列电子邮件地址:
rules={"rule_type":"String","field":"email_address","params":{"minimum_length":5,"maximum_length":1024,"regex":"[^@]+@[^\\.]..*[^\\.]","fallback_mode":"remove_record","hash":True,"salt":"XY@4242SSS"}}
此规则将使用每天更改的salt散列电子邮件地址:
rules={"rule_type":"String","field":"from","params":{"minimum_length":5,"maximum_length":1024,"regex":"[^@]+@[^\\.]..*[^\\.]","fallback_mode":"remove_record","hash":True,"salt":"XY@4242SSS%y%m%d","salt_date_field":"date","salt_date_format":"%Y-%m-%d %H:%M:%S"}},
散列的完整参数是:
- 散列-指定是否对字段进行散列
- 哈希长度-要使用的哈希长度,默认为16个字符。最多可以包含128个字符。散列越长,发生的散列冲突就越少。
- salt-哈希中要使用的salt,最长16字节。它可以包含strftime数据格式参数以创建旋转的salt
- salt_date_字段-如果指定,则使用数据格式从该字段解析日期,并使用strftime格式应用于salt。这允许旋转散列
- salt\u date\u格式-如果指定了salt\u date\u字段,则必须指定。此日期格式用于分析salt_date_字段中的日期
加密
可以通过在字符串规则上设置encrypt参数来启用加密。加密使用oaep填充来确保加密是不可逆的。如果希望源值的加密值一致,请将random字符串设置为固定值,或对该值应用按时间顺序旋转以创建旋转加密。
- 加密-指定IES是否应散列字段
- 公钥-要用于加密的公钥
- 随机字符串-默认为"随机",在这种情况下,根据标准PKCS1 AOEP算法生成随机字符串。如果设置了此值,则此字符串(填充为20字节)将用作pkcs1 aoep算法中的随机字符串。如果这是固定的,则它将导致始终一致的值。
- random_string_date_字段-如果指定,则使用数据格式从该字段中分析日期,并使用strftime格式应用于random。这允许旋转加密
- 如果指定了random_string_date_字段,则必须指定random_string_date_格式。此日期格式用于分析随机字符串"日期"字段中的日期
以下规则将在每次加密电子邮件地址时用不同的值对其进行加密:
rules={"rule_type":"String","field":"email_address","params":{"minimum_length":5,"maximum_length":1024,"regex":"[^@]+@[^\\.]..*[^\\.]","fallback_mode":"remove_record","encrypt":True,"public_key":"""-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDmPPm5UC8rXn4uX37m4tN/j4T MAhUVyxN7V7QxMF3HDg5rkl/Ju53DPJbv59TCvlTCXw1ihp9asVyyYpCqrsKCh10 sZI0kIrkizlKaB/20Q4P1kYOCgv4Cwds7Iu2y0TFwDosK9a7MPR9IksL7QRWKjD0 DoNemKEpyCt2dZTaQwIDAQAB -----END PUBLIC KEY-----"""}}
以下规则将加密每天具有不同值的电子邮件地址:
rules={"rule_type":"String","field":"email_address","params":{"minimum_length":5,"maximum_length":1024,"regex":"[^@]+@[^\\.]..*[^\\.]","fallback_mode":"remove_record","encrypt":True,"public_key":"""-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDmPPm5UC8rXn4uX37m4tN/j4T MAhUVyxN7V7QxMF3HDg5rkl/Ju53DPJbv59TCvlTCXw1ihp9asVyyYpCqrsKCh10 sZI0kIrkizlKaB/20Q4P1kYOCgv4Cwds7Iu2y0TFwDosK9a7MPR9IksL7QRWKjD0 DoNemKEpyCt2dZTaQwIDAQAB -----END PUBLIC KEY-----""","random_string":"XY@4242SSS%y%m%d","random_string_date_field":"date","random_string_date_format":"%Y-%m-%d %H:%M:%S"}}
根据单独的数据集进行验证
有些字段可以参照已知的数据集进行验证。这包括唯一标识符、数据库ETL中的主键和分类数据集。
为了实现这一点,需要向df_dict参数中的scruber.run()传递额外的引用数据帧,并使用rule_type="lookup"规则。
查找规则具有以下参数:
- 原始参考-指定包含参考数据帧的DF DICT字典中的条目
- 引用字段-引用数据框中包含该字段应验证的值的列的名称或编号。
- 尝试最近匹配-指定是否应将未验证的条目替换为引用数据框中最近匹配记录的值。如果未找到字符串距离阈值指定的足够接近的匹配,则仍应用回退模式。默认为false
- string_distance_threshold-这指定要应用的最接近匹配的默认距离阈值。这是jaro的变体,默认为0.7
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())0
注意在上面的例子中,df dict中数据帧的键与原始参考值字段的值相同。
检查重复性
可以通过设置参数is unique来检查字符串、数字和日期字段的重复性:
- 是否唯一-指定此列是否应仅包含唯一值,默认值为false
此外,还可以设置唯一性规则,用于检查多个列集之间的唯一性。它们具有"唯一性"规则类型,并自动隔离不符合条件的任何数据。
它们采用以下参数:
- 唯一字段-应检查唯一性的字段的逗号分隔列表,例如"设备ID,日期"
- 使用最后一个值-指定是否应获取第一个或最后一个重复值。默认为false
注意"rule_type":"unique"不使用"field"参数:
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())1
处理空白
有时在文件中使用空格是可以的,在这种情况下,可以在配置中指定skip_blank参数:
- 跳过空白-指定是否应选中此字段中的空白值或是否可以跳过它们,默认为false
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())2
如果分类数据中有显著空白,可以使用lookalike matcH字段自动填充:
- lookalike_match-这指定是否应将未验证的条目替换为与其他记录最相似的记录中的值。这实现了一种基于数据集中其他字段相似性的最近邻算法。它对于填写空白记录非常有用,默认值为false
使用会话数据
由于会话数据在物联网应用中很常见,我们有一个特殊的规则来验证会话数据,消除重叠会话并填补任何空白。规则类型="会话"提供处理会话数据的特殊功能:
- 键字段-指定为会话设置键的字段。对于大多数物联网应用程序来说,都是th设备id。如果两个会话在相同的key_字段值上重叠,则它们将被截断。默认为无
- 开始字段-指定控制会话开始的字段。默认为无
- 结束字段-指定控制会话结束的字段。默认为无
- 日期格式-日期参数的格式。这是基于标准的strftime参数加上格式'%s'表示以秒为单位的整数纪元时间
- 重叠选项-指定应如何处理重叠:
- "忽略"-不处理重叠
- "截断开始"-通过截断下一个会话的开始来解决重叠
- "截断结束"-通过截断前一个会话的结束来解决重叠问题
- 间隙选项-指定应如何处理重叠:
- "忽略"-忽略间隙
- "扩展开始"-通过扩展下一个会话的开始来解决差距
- "延长结束时间"-通过延长上一个会话的结束时间来解决差距
- "插入新会话"-通过插入"template\u for\u new"参数中指定的新会话来解决间隙
- template_for_new-包含一个逗号分隔的值列表,该列表将用作数据框中新行的模板,以填补空白。关键字字段、开始字段和结束字段将替换为适当的值以填补任何空白。
- 允许间隔秒数-指定在间隔选项实现之前允许间隔秒数,默认为1
- 允许重叠秒数-指定在实现重叠选项之前允许重叠秒数,默认值为1
- 删除长度为零的会话-指定是否应删除长度为零的会话。默认为真
更改配置文件
文件处理器包含一个配置文件,指定可以处理的记录数,默认值如下:
- 最大记录数=2000000-单个数据帧中要处理的最大记录数
- maximum_records_closest_matches=5000-在一次运行中应用最接近匹配的最大记录数
- maximum_records_lookalike=5000-将由lookalike在单个数据帧中固定的最大记录数
- maximum_file_records_lookalike=500000-数据帧中的最大记录数
- lookalike\u number\u记录=5-lookalike匹配用于完成lookalike匹配的记录数
这些默认值可以根据服务器上可用的内存和CPU轻松调整,并通过传递自定义配置文件进行自定义到洗涤器类:
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())3
自定义报告
默认情况下,scruber类使用DefaultReportWriter()类来聚合ReportEntry()类,并在项目结束时在列表中返回它们。
为了编写您自己的自定义报表类,您需要实现一个具有两个接口的类:log history和get report。
下面是一个简单地将所有信息记录到stdout的示例:
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())4
示例配置
下面是一个更复杂的配置,演示如何处理多个字段。此配置包含在软件包的测试套件中。
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())5
配置参考
字符串规则
- 最小长度-字符串的最小长度,必需
- 最大长度-字符串的最大允许长度,必需
- regex-要应用于验证字符串的正则表达式。这是使用标准的python正则表达式处理器处理的,并且支持这里记录的所有语法。默认为".*"
- 是否唯一-指定此列是否应仅包含唯一值,默认值为false
- 跳过空白-指定是否应选中此字段中的空白值或是否可以跳过它们,默认为false
- 回退模式-指定数据不符合规则时应执行的操作,并可以采用以下值:
- "remove_record"-默认值,在发送到传递给洗涤器类的记录器对象的数据帧中删除和隔离记录
- "使用默认值"-记录将被删除并替换为"默认值"字段中指定的内容
- "请勿替换"-记录保持不变,但仍记录到记录器对象。
- 默认值-如果回退模式设置为使用默认值,则应将未验证的记录的值设置为。默认为""。
- 尝试最近匹配-指定是否应将未验证的条目替换为数据集中最近匹配记录的值。如果未找到字符串距离阈值指定的足够接近的匹配,则仍应用回退模式。默认为false
- string_distance_threshold-这指定要应用的最接近匹配的默认距离阈值。这是jaro winkler distance的变体,默认为0.7
- lookalike_match-这指定是否应将未验证的条目替换为与其他记录最相似的记录中的值。这实现了一种基于数据集中其他字段相似性的最近邻算法。它对于填写空白记录非常有用,默认值为false
数字规则
- 最小值-数字的最小允许值,默认为0
- 最大值-数字的最大允许值,默认为65535
- 小数位数-该数字应包含的小数位数,默认为0
- 固定小数位数-如果设置为true(默认值),则规则将自动将所有记录固定为相同的小数位数
- 是否唯一-指定此列是否应仅包含唯一值,默认值为false
- 跳过空白-指定是否应选中此字段中的空白值或是否可以跳过它们,默认为false
- 回退模式trong>-指定数据不符合规则时应执行的操作,并可以采用以下值:
- "remove_record"-默认值,在发送到传递给洗涤器类的记录器对象的数据帧中删除和隔离记录
- "使用默认值"-记录将被删除并替换为"默认值"字段中指定的内容
- "请勿替换"-记录保持不变,但仍记录到记录器对象。
- 默认值-如果回退模式设置为使用默认值,则应将未验证的记录的值设置为。默认为""。
- 尝试最近匹配-指定是否应将未验证的条目替换为数据集中最近匹配记录的值。如果未找到字符串距离阈值指定的足够接近的匹配,则仍应用回退模式。默认为false
- string_distance_threshold-这指定要应用的最接近匹配的默认距离阈值。这是jaro的变体,默认为0.7
- lookalike_match-这指定是否应将未验证的条目替换为与其他记录最相似的记录中的值。这实现了一种基于数据集中其他字段相似性的最近邻算法。它对于填写空白记录非常有用,默认值为false
日期规则
- 日期格式-日期参数的格式。这是基于标准的strftime参数加上格式'%s'表示以秒为单位的整数纪元时间。
- 范围检查-可设置为以下值:
- 无-在这种情况下,不检查日期
- 固定的-在这种情况下,验证字段是否位于两个固定日期之间
- 滚动在这种情况下,字段将根据天的滚动窗口进行验证。
- 范围最小值-如果范围检查设置为"固定",则这表示日期范围的开始。如果范围检查设置为"滚动",则表示与当前时间(以天为单位)的偏移量,该偏移量应用作范围中的最早点。默认值为"2000-01-01 00:00:00"
- range_maximum-如果range_check设置为"fixed",则表示日期范围的结束。如果范围检查设置为"滚动",则表示与当前时间(以天为单位)的偏移,该偏移应用作范围中的最新点。默认值为"2020-01-01 00:00:00"
- 是否唯一-指定此列是否应仅包含唯一值,默认值为false
- 跳过空白-指定是否应选中此字段中的空白值或是否可以跳过它们,默认为false
- 回退模式-指定数据不符合规则时应执行的操作,并可以采用以下值:
- "remove_record"-默认值,在发送到传递给洗涤器类的记录器对象的数据帧中删除和隔离记录
- "使用默认值"-记录将被删除并替换为"默认值"字段中指定的内容
- "请勿替换"-记录保持不变,但仍记录到记录器对象。
- 默认值-如果回退模式设置为使用默认值,则应将未验证的记录的值设置为。默认为""。 < < < >g>尝试最近匹配-指定是否应将未验证的条目替换为数据集中最近匹配记录的值。如果未找到字符串距离阈值指定的足够接近的匹配,则仍应用回退模式。默认为false
- string_distance_threshold-这指定要应用的最接近匹配的默认距离阈值。这是jaro的变体,默认为0.7
- lookalike_match-这指定是否应将未验证的条目替换为与其他记录最相似的记录中的值。这实现了一种基于数据集中其他字段相似性的最近邻算法。它对于填写空白记录非常有用,默认值为false
查找规则
- 原始参考-指定包含参考数据帧的DF DICT字典中的条目
- 引用字段-引用数据框中包含该字段应验证的值的列的名称或编号。
- 尝试最近匹配-指定是否应将未验证的条目替换为引用数据框中最近匹配记录的值。如果未找到字符串距离阈值指定的足够接近的匹配,则仍应用回退模式。默认为真
- string_distance_threshold-这指定要应用的最接近匹配的默认距离阈值。这是jaro的变体,默认为0.7
- 跳过空白-指定是否应选中此字段中的空白值或是否可以跳过它们,默认为false
- 回退模式-指定数据不符合规则时应执行的操作,并可以采用以下值:
- "remove_record"-默认值,在发送到传递给洗涤器类的记录器对象的数据帧中删除和隔离记录
- "使用默认值"-记录将被删除并替换为"默认值"字段中指定的内容
- "请勿替换"-记录保持不变,但仍记录到记录器对象。
- 默认值-如果回退模式设置为使用默认值,则应将未验证的记录的值设置为。默认为""。
- lookalike_match-这指定是否应将未验证的条目替换为与其他记录最相似的记录中的值。这实现了一种基于数据集中其他字段相似性的最近邻算法。它对于填写空白记录非常有用,默认值为false
唯一性规则
- 唯一字段-应检查唯一性的字段的逗号分隔列表,例如"设备ID,日期"
- 使用最后一个值-指定是否应获取第一个或最后一个重复值。默认为false
会话规则
- 键字段-指定为会话设置键的字段。对于大多数物联网应用程序来说,都是th设备id。如果两个会话在相同的key_字段值上重叠,则它们将被截断。默认为无
- 开始字段-指定控制会话开始的字段。默认为无
- 结束字段-指定控制会话结束的字段。默认为无 <>>日期格式-基于strftime参数的必需参数
- 重叠选项-指定应如何处理重叠:
- "忽略"-不处理重叠
- "截断开始"-通过截断下一个会话的开始来解决重叠
- "截断结束"-通过截断前一个会话的结束来解决重叠问题
- 间隙选项-指定应如何处理重叠:
- "忽略"-忽略间隙
- "扩展开始"-通过扩展下一个会话的开始来解决差距
- "延长结束时间"-通过延长上一个会话的结束时间来解决差距
- "插入新会话"-通过插入"template\u for\u new"参数中指定的新会话来解决间隙
- template_for_new-包含一个逗号分隔的值列表,该列表将用作数据框中新行的模板,以填补空白。关键字字段、开始字段和结束字段将替换为适当的值以填补任何空白。
- 允许间隔秒数-指定在间隔选项实现之前允许间隔秒数,默认为1
- 允许重叠秒数-指定在实现重叠选项之前允许重叠秒数,默认值为1
- 删除长度为零的会话-指定是否应删除长度为零的会话。默认为真
dativa文件分析器
文件分析器提供分析csv文件的工具,特别是创建与dativa洗涤器一起使用的配置。
安装
您可以使用下列方法之一安装
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())6
命令行toool
文件分析器安装一个命令行工具fanalyzer,它接受一个csv文件,并为洗涤器生成字段和配置的描述:
示例
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())7
位置参数
- csv_文件:要分析的文件
可选参数
- CSV分隔符CSV分隔符:CSV分隔符(默认值:,)
- 最大字符串长度最大字符串长度:允许的字符串最大长度(默认值:1024)
- large_sample_size large_sample_size:要采样的行数(默认值:10000)
- small_sample_size small_sample_size:要为内存密集型操作采样的行数(默认值:1000)
- 清除阈值清除阈值:必须满足条件的行百分比(默认值:0.95)
- 异常值阈值异常值阈值:要忽略的异常值的标准偏差数(默认值:2)
- 最小发生次数最小发生次数:必须将项目视为查找项目的最小次数(默认值:5)
- min_references min_references:要分类为查找的最小项目数,低于此数将使用regex处理(默认值:20)
- max_references max_references:要分类为查找的最大项目数(默认值:1000)
在程序中使用
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())8
PersistentFieldLogger
persistentfieldlogger可以像python记录器一样使用,但使用关键字参数。这些关键字参数记录为json对象。创建PersistentFieldLogger时指定的任何关键字参数都将被持久化。
fromdativa.scrubberimportScrubberimportpandasaspdscrubber=Scrubber()df=pd.read_csv("path/to/file.csv")report=scrubber.run(df,config={"rules":[{"rule_type":"String","field":"Name","params":{"fallback_mode":"remove_record","maximum_length":40,"minimum_length":1},}]})forentryinreport:print(entry)print(entry.df.describe())9
这应该记录: 信息-{"文件":"测试","消息":"骑士"} 信息-{"file":"test","message":"who say ni"}
持久字段记录器通常与LoggingReportWriter类一起使用