这个库分为两个部分RangeType和DataType
可以用指定误差或给出多次测量得到的误差所给出带有误差的数据,可以在输出时对数据进行修约
可以通过输入数据字典和处理函数输出处理后的数据所产生的表格
首先,在cmd中输入以下命令安装
pip install DataConsumer
其应当下载最新版本的DataConsumer,但请加以检查
其依赖库有typing
,pandas
,numpy
和collections
在安装完成后,使用
from DataConsumer import *
导入所需的类型(已经包含了RangeType和DataType)
如果不希望安装numpy等依赖,可以只使用RangeType部分,此时,在导入时会有警告信息
这个类储存一个带有误差的数据.
为了初始化一个RangeNumber对象,需要提供以下信息:量的值,上误差,下误差
例如,以下代码初始化了一个量值为10,上误差0.01,下误差-0.02的RangeNumber对象
RangeNumber(10,0.01,-0.02)
同时,一般上误差的值等于下误差的值,故我们可以忽略下误差,只输入上误差
例如,以下代码初始化了一个量值为10,上下误差绝对值均为0.01的RangeNumber对象
RangeNumber(10,0.1)
而在运算时,如果遇到了准确数,可以直接省去误差单参数初始化一个RangeNumber对象
(0.0.13添加)err_str设为False,则不显示误差大小,只进行修约
考虑到在使用时经常会遇到一批数据有相同的误差,所以可以使用RangeNumber.fromlist方法从浮点数列表直接获得RangeNumber的列表例如以下代码会返回一个RangeNumber列表
RangeNumber.fromlist([1,2,3,4,5],0.01,-0.02)
你可以读取一个RangeNUmber实例中的wholedata
属性,其会储存完整的数据,以(downerr,mainnumber,uperr)的方式组织,但是你不可以修改它们
RangeNumber重载了加,减,乘,除和乘方运算符,但需要保证RangeNumber为左操作符,右操作符为RangeNumber或float均可
同时,RangeNumber.log(x,base)方法对RangeNumber可以求对数,用法与math.log相同,但x为一个RangeNumber对象
注意以上方法虽然也会对误差进行调整,并且目前可以对上下误差相同的情况做出准确的判断
但在上下误差不同的时候可能会出错
如果用一个RangeNumber强制转换为float,这个float中会储存RangeNumber中的主值,因此你可以将RangeNumber直接用于math库中注意此时其行为与float一致
str(RangeNumber)会返回一个Latex字符串,例如以下代码
a=RangeNumber(10,0.01,-0.2)
print(a)
会输出:$(10.0)^{0.01}_{-0.2}$
在Latex环境下,为$(10.0)^{0.01}_{-0.2}$
其自带数字修约
(0.0.13添加)err_str设为False,则不显示误差大小,只进行修约
该类为RangeNumber的子类,有所不同的是其初始化方式
RangeFromList使用一个float或RangeNumber列表实现对同一量的多次测量,例如:
RangeFromList([0.1,0.3,0.2])
但在单次测量亦存在误差的情况下,可以结合使用fromlist方法,例如:
RangeFromList(RangeNumber.fromlist([0.1,0.2,0.2],0.1))
即可实现单次测量误差0.1,测量三次的效果
该类型用于储存数据的相关参数,目前仅含有对于单位和名称(及其缩写)的储存
其初始化函数需要按序接受:数据全称,数据的简称,单位 例如以下代码初始化了一个DataConfig类
DataConfig("转动惯量","J","kgm^2")
数据简称和单位支持Latex语法
tabular_format方法可以将一个数据信息形成一个表头格式的Latex风格字符串 例如上文所提到数据可以被转化为如下形式
转动惯量$J$(
但该操作主要是用于DataConsumer类型
该类型储存输入数据的词典和用于处理的函数,对数据进行格式化
初始化时,需要包括一个输入数据简称的字典(键为数据简称,值为数据列表)
一个用于处理数据的函数(参数名称为输入数据简称,对一条数据进行处理,返回一个包含以输出数据为值,输出数据简称为键的字典如果希望将输入数据保留,则需要将输入数据的字典整合于其中)
一个包括输入输出数据信息的字典(键为输入输出数据简称,值为输入输出数据的信息的DataConfig类实例)
(0.0.13添加)err_str设为False,则不显示误差大小,只进行修约
该类型的字符串转换方法可以输出一个Markdown风格的表格 使用latexstr可以输出一个Latex风格表格
可以对函数进行拟合与画图,见get_fitted和draw_fitted的注释
该实例使用的为3.13瑞利盘测量细线扭力系数的数据
from DataConsumer.DataType import *
m2=RangeFromList([1.80,1.78,1.81])
m1=RangeFromList([1.43,1.43,1.41])
m3=RangeFromList([2.24,2.25,2.25])#对质量的三次测量
mlist=[m1,m2,m3]#不同质量圆片
rlist=RangeNumber.fromlist([40,45,50],0.01)#从已有数据得到半径
t1=RangeFromList([27.58/2,41.69/3])
t2=RangeFromList([59.5/4,57.07/4,62.41/4,58.88/4,53.46/5,46.5/3])
t3=RangeFromList([56.98/3,60.00/3,60.03/3])#对周期的多次测量
tlist=[t1,t2,t3]#不同质量圆片周期
idict={"m":mlist,"r":rlist,"t":tlist,"n":[1,2,3]}#输入数据内容
confd={"m":DataConfig("质量","m","kg"),\
"n":DataConfig("编号","n"),\
"r":DataConfig("半径","r","m"),\
"T":DataConfig("周期","T","s"),\
"J":DataConfig("转动惯量","J","kgm^2"),\
"k":DataConfig("测得扭力系数","k","kgm^2s^{-2}")}#数据信息
def con(m,r,t,n):#处理函数
pis=math.pi**2*4
m/=1000
r/=1000
i=r*r*m/4
k=(i/(t*t))*pis
sigma=m/(r*r)
return {"n":n,"m":m,"r":r,
"T":t,"J":i,
"k":k}
print(DataConsumer(idict,con,confd))#输出结果
运行该段代码,即可得到如下表格(需要支持Latex环境)
编号$n$ | 质量$m$( |
半径$r$( |
周期$T$( |
转动惯量$J$( |
测得扭力系数$k$( |
---|---|---|---|---|---|
1 | |||||
2 | |||||
3 |