用于防御数据分析的python包。
bulwark的Python项目详细描述
防波堤文件
Bulwark是一个用于方便地对pandas数据帧进行基于属性的测试的包,支持Python3.5+
文档:https://bulwark.readthedocs.io/en/latest/index.html
这个项目受到不再受支持的Engarde库的严重影响 作者:Tom Augspurger(谢谢你的先发制人,Tom!),它本身就是模仿 R库assertr。
为什么?
数据杂乱无章,pandas是分析表格数据的常用库之一。 在现实世界中,数据分析师和科学家常常觉得自己没有时间 或者是思考和编写数据测试的能量堡垒的目标是让你检查 你的数据符合你对它在任何(和每一个)步骤中应该是什么样子的假设 在你的代码中,不要让你工作太辛苦。
安装
pip install bulwark
用法
Bulwark会检查您可能要验证的许多常见假设 用于组成ETL管道的函数,并允许您将这些支票作为装饰符丢弃 关于您正在编写的函数:
importbulwark.decoratorsasdc@dc.IsShape((-1,10))@dc.IsMonotonic(strict=True)@dc.HasNoNans()defcompute(df):# complex operations to determine result...returnresult_df
还想有更健壮的测试文件吗堡垒也为你提供了重要的功能
importbulwark.checksasckdf.pipe(ck.has_no_nans())
当我准备投入生产时,我不必去清理所有的装饰工人吗? 不-只需切换每个装饰器可用的内置“enabled”标志。
@dc.IsShape((3,2),enabled=False)defcompute(df):# complex operations to determine result...returnresult_df
如果我想要的测试不是图书馆的一部分呢?
使用内置的CustomCheck
来使用您自己的自定义函数!
deflen_longer_than(df,l):iflen(df)<=l:raiseAssertionError("df is not as long as expected.")returndf@dc.CustomCheck(len_longer_than,df=df,l=6)defappend_a_df(df,df2):returndf.append(df2,ignore_index=True)df=pd.DataFrame({"a":[1,2,3],"b":[4,5,6]})df2=pd.DataFrame({"a":[1,np.nan,3,4],"b":[4,5,6,7]})append_a_df(df,df2)
如果我想运行大量的测试并且想同时看到所有的错误怎么办?
您可以使用内置的MultiCheck
它将收集所有的错误,或者
显示基于warn
标志引发异常的警告消息。
您甚至可以将自定义函数与multicheck一起使用:
deflen_longer_than(df,l):iflen(df)<=l:raiseAssertionError("df is not as long as expected.")returndf# `checks` takes a dict of function: dict of params for that function.# Note that those function params EXCLUDE df.# Also note that when you use MultiCheck, there's no need to use CustomCheck - just feed in the function.@dc.MultiCheck(checks={ck.has_no_nans:{"columns":None},len_longer_than:{"l":6}},warn=False)defappend_a_df(df,df2):returndf.append(df2,ignore_index=True)df=pd.DataFrame({"a":[1,2,3],"b":[4,5,6]})df2=pd.DataFrame({"a":[1,np.nan,3,4],"b":[4,5,6,7]})append_a_df(df,df2)
请参见examples以了解更高级的用法。
贡献
Bulwark一直在寻找新的贡献者我们努力使贡献尽可能容易,以前的开源经验是不需要的!请参阅CONTRIBUTING.md了解如何开始。