datagod
datagod是一个用来『伪造』数据的python库,已经提交到了pypi上了,可以使用pip install datagod
来安装使用,项目的地址在https://github.com/gaocegege/Data-God,请各位菊苣请拍~
想法来源
曾经在参加数学建模比赛的时候,苦于绘图无力,曾经向队友抱怨过。队友提到,如果有现成的工具,可以直接拿来造出一些漂亮的图,那就再好不过了。当时觉得很有趣,但是一直以来都没有时间去写,最近刚刚过完几个Deadline,有时间去跳坑了。根据wakatime的记录,大概一共花了九个小时在这上面,还是挺浪费时间的Orz。总之希望能在有生之年再参加一次数学建模比赛,让它派上用场~
使用
datagod想实现的功能是,给定一个函数,以及相应的参数,比如作用域之类的。首先,程序会根据函数的图像,在其周围产生一些点,然后根据这些点,再去拟合,这样拟合得到的数据,既有原函数的大致性质,又有一些拟合参数的属性可以得到,就可以用在MCM的论文中了^_^
示例
比如说,给定一个函数y = x
,作用域为[-10, 10],代码如下所示:
from datagod import *
def main():
testcase = DataGodBuilder()
testcase.setType(GraphType.getPolynomialType())\
.setTermList([0, 1])\
.setLowRange(-10)\
.setHighRange(10)\
.build()\
.draw()
main()
程序就会返回一张图:
这张图中,名为raw data的就是根据给定的函数生成的数据,而fitting curve就是根据生成的数据拟合的曲线,同样会得到一些拟合参数:
Info: coff: [-0.03219724 0.99218986]
Info: residuals: [ 6.13295169]
Info: rank: 2
Info: singular_values: [ 1. 1.]
Info: rcond: 1.11022302463e-14
其中coff是函数的参数,y = coff[0] * 1 + coff[1] * x
,其他则是一些拟合的误差等等的数据。
说了这么多,那该如何给定输入呢。
输入格式
datagod有一个主构造器类型,所有的所有都需要DataGodBuilder
对象来构建。用户通过调用构造器的诸多set方法来设定参数,并在设定完所有参数后调用build函数来构建对象,构建出来的对象会有draw方法,负责绘制相应图像。
目前呢,datagod一共支持两种类型的函数,一种是多项式类型的,一种是对数类型的,还在完善中。
多项式类型
对于一个多项式类型的函数而言,可以表示成:y = p[0] * 1 + p[1] * x + p[2] * x ** 2 + ... + p[n] * x ** n
,那如果给定了参数数组p,就可以唯一地确定这个函数,所以如果要构建多项式类型的函数,需要有以下的设定:
setType(GraphType.getPolynomialType())
用来确定函数类型。setTermList(termlist: float List)
用来确定函数参数,termlist里面的元素是项数,比如[1, 2, 3]
,那就意味着函数是1 + 2*x + 3*x**2
。
对数类型
对于一个对数类型的函数而言,可以表示成:y = term * log(base)[x] + intercept
,所以需要的设定为:
setType(GraphType.getLogType())
setLogTerm(term: float)
setBase(base: float)
setIntercept(intercept: float)
ToBeContinued
输出
所有的draw方法的输出,都是一张使用matplotlib绘制出来的图像,同时会在terminal中反馈拟合的相关数据。