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()

程序就会返回一张图:

example
示例图

这张图中,名为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中反馈拟合的相关数据。

评论