画一些小的表达图;使之被黑客攻击。
expr的Python项目详细描述
在small datasets上创建数学运算的简单可视化 通过呈现一个expression graph,显示您的朋友或序列化它以备以后使用。
内容
使用量
下面的示例使用python交互式shell
开始
从模块中导入一些内容
fromexprimportExpr,NumExpr
构造表达式
expr=Expr(operation_name='+',arguments=[NumExpr(number=1),Expr(operation_name='/',arguments=[NumExpr(number=2),NumExpr(number=3),])])
得到答案
>>expr.resolve()1.6666666666666665
绘制图表
>>graph=expr.graph()>>graph.write_png('example.png')True
example.png
不太冗长
使用as导入内容,通过对输入手指的别名 人物离开。在python中,我们不需要关心函数是否指定 关键字或位置签名,所以我们不必为那些冗长的 关键词,嘿。
>>>fromexprimportExprasE,NumExprasN>>>expr=E('/',[N(22),N(7)])>>>expr.resolve()3.142857142857143>>>expr.graph().write_png('pi.png')True
pi.png
涉及熊猫
我们可以创建不仅仅涉及数字的表达式…
>>>importpandas>>>fromexprimport(...ExprasE,...NumExprasN,...DataFrameExprasD,...)
创建一些愚蠢的数据集
>>>deftwo_by_four():...data=[(n+1,n+1)forninrange(4)]...returnpandas.DataFrame.from_records(data=data,columns=['a','b'])>>>df_A=two_by_four()>>>df_B=two_by_four()>>>df_Aab011122233344
创建expression对象,即DataFrameExpr对象(此处为别名 因为D)接受一个可选参数name,如果 显示,否则将应用自动生成的标签。
>>>expr=E('*',[N(3),E('+',[D(df_A,'A'),D(df_B,'B')])])>>>expr.graph().write_png('dataframe.png')True>>>expr.resolve()01066112122181832424
dataframe.png
串行化
让我们使用json序列化上面的示例,任何传递给 serialise方法在应用serialiser函数时使用。
>>>importjson>>>print(expr.serialise(json.dumps,indent=4)){"__type__":"Expr","operation_name":"*","arguments":[{"__type__":"NumExpr","number":3.0},{"__type__":"Expr","operation_name":"+","arguments":[{"__type__":"DataFrameExpr","name":"A","dataframe":{"a":{"0":1,"1":2,"2":3,"3":4},"b":{"0":1,"1":2,"2":3,"3":4}}},{"__type__":"DataFrameExpr","name":"B","dataframe":{"a":{"0":1,"1":2,"2":3,"3":4},"b":{"0":1,"1":2,"2":3,"3":4}}}]}]}
获得功能
这个包中提供的最后一个表达式是FuncExpr,它适用于 提供的参数的任意函数(应该是对象 实现一个resolve方法)。关键字也被应用,可能用于 指定不必是表达式对象的选项。做作的 下面是FuncExpr用法的示例。
进行一些智能导入
importpandasfromexprimport(ExprasE,NumExprasN,DataFrameExprasD,FuncExprasF,)
定义用于创建DataFrame对象的工厂函数
defx_by_y(x,y,columns=False):data=[[a+bforbinrange(x)]forainrange(y)]ifcolumnsisFalse:columns=[chr(97+c)forcinrange(x)]returnpandas.DataFrame.from_records(data=data,columns=columns)
制作一些测向仪以备日后使用
df_A=x_by_y(3,4)df_B=x_by_y(3,4)df_C=x_by_y(3,4)
现在设置表达式并查看其图表
expr=E('+',[E('*',[N(3),F('pandas.concat',[D(x_by_y(1,4,['a'])),D(x_by_y(1,4,['b'])),D(x_by_y(1,4,['c'])),],axis=1)]),D(x_by_y(3,4))])G=expr.graph()G.write_png('func.png')
func.png
疯狂的
为什么不笨拙地想象一个调用堆栈来满足听众的需求呢?
已知问题
如果您喜欢yaml,序列化pandas对象,may是problematic,但是 json应该没问题。
也
颜色由clrs.cc
提供