模拟时间数据变得容易!
mojito-mock的Python项目详细描述
莫吉托
模拟时间数据变得容易!
python中有很多数据模拟框架。但没有一个真正的目标是 统计上同质的数据,尤指时间事件。mojito就是为这个设计的!
如何使用
首先安装mojitopip install git+https://github.com/PPACI/mojito.git
。
fromdatetimeimportdatetimefrompprintimportpprintfrommojitoimportDateGenerator,EventComposer,FixedValueGenerator,NumberGenerator,PropertyEventGenerator, \ RandomChoiceGeneratorevent1=PropertyEventGenerator(properties={"timestamp":DateGenerator(center=datetime(2018,5,2,0,0,0),deviation=3*3600),"age":NumberGenerator(mean=15,deviation=3,return_int=True),"gender":RandomChoiceGenerator(['M','F']),"label":FixedValueGenerator(1)})event2=PropertyEventGenerator(properties={"timestamp":DateGenerator(center=datetime(2018,5,10,0,0,0),deviation=3*3600,skew=0),"age":NumberGenerator(mean=30,deviation=3,return_int=True),"gender":RandomChoiceGenerator(['M','F'],weights=[2,1]),"label":FixedValueGenerator(0)})composer=EventComposer()composer.add_generator(event1,3)# 3 samples from this generatorcomposer.add_generator(event2,2)# 2 samples from this generatorpprint(composer.generate(shuffle=True))
将输出
[{'age':16.0,'gender':'M','label':1,'timestamp':datetime.datetime(2018,5,1,22,23,1,450298)},{'age':19.0,'gender':'F','label':1,'timestamp':datetime.datetime(2018,5,1,21,0,11,583775)},{'age':30.0,'gender':'M','label':0,'timestamp':datetime.datetime(2018,5,9,22,57,30,441924)},{'age':15.0,'gender':'F','label':1,'timestamp':datetime.datetime(2018,5,2,5,59,54,96498)},{'age':32.0,'gender':'M','label':0,'timestamp':datetime.datetime(2018,5,10,0,15,55,676862)}]
API
mojito使用一个模型,其中propertyeventgenerator将用于生成示例事件。 event是发生的事情,其特征是它所表示的样本的统计分布。 sample是生成的数据。它可能代表访问你的网站,或者有人购买特定的商品 或者别的什么。 请记住,如果要从两个统计分布生成样本,则必须创建两个事件和 如示例所示编写它们。 目前,用于生成数据的主要分布是正态分布 很多是现实生活中的分配。
事件生成器
propertyeventgenetator将用{“name”:propertygenerator}字典实例化。 此事件生成器将位于模拟任务的中心,因为它描述事件的外观。
产热器
您可以访问以下propertygenerator
真实模型是多个不同事件的集合。要模拟这种情况,可以使用eventcomposer。 添加eventgenerator和每个生成器想要生成的事件数。
也可以使用skew=0
获得非倾斜正态分布scale
在第二位,因此deviation=3600
将在提供的日期时间前后产生1小时的标准偏差weights=[a, b]
对列表进行相应的加权skew=0
获得非倾斜正态分布return_int=True
来生成integer而不是floatmu
,这是时间段内事件的平均数return_int=True
来生成integer而不是float成分
composer=EventComposer()composer.add_generator(event1,3)# 3 samples from this generatorcomposer.add_generator(event2,2)# 2 samples from this generator
.remove_generator(event1)
删除一个。.generate()
会将生成的事件列表作为字典返回给您
.to_csv("output.csv")
将把生成的事件保存为csv,为您的进程做好准备!推荐PyPI第三方库