def simple_t_test(x,miu):
n=len(x)
if n<=30 or n>=47:
return'请输入31-46长度的样本'
T=[71,55,19,24,9,96,83,71,60,49,39,29,20,11,2,94]
it=iter(T)
for i in range(len(T)):
T[i]=next(it)/10000+1.69
#构造t分布表,显著性水平0.05,自由度从30到45
mean=0;
for i in x:
mean+=i
mean=mean/n
#求样本均值
ss=0
for i in x:
ss=(i-mean)**2+ss
ss=ss/n
#求样本方差
t=(mean-miu)/ss*(n-1)**(1/2)
#构造t统计量
if t<T[n-31] and t>-T[n-31]:
return '不拒绝原假设'
else:
return '拒绝原假设'
程序很短,也很简单,但是一开始写碰到的坑不少。
1.调用时用import加载模块后,调用函数失败,用from import加载就可以调用,至于为什么暂时不研究了。同时注意路径的添加。
2.函数参数一个是列表,一个是浮点数,列表是可变数据类型,不知该不该在函数里复制一下再用,或本该用元组类型。
3.python的程序段结构里缩进是有意义的,所以写的时候格外注意,还有冒号,有个好用的编辑器很重要啊。。
4.这里t分布表算是手动输入的,循环里用了个迭代器(iter),暂时也不知道迭代器威力何在,先随便玩玩喽。
5.循环里一开始老忘i是在遍历x,老想着从一到n,还有python是从0计数的。
6.python函数调用时,参数有好几种传递方式,关键字参数方式挺好用的。
下面是调用实验
import sys
sys.path.append('D:\python\pythondata')
from jjj import simple_t_test
print(simple_t_test(range(34),17))
结果是
=================== RESTART: D:\python\pythondata\jjjj.py ===================
不拒绝原假设
这段程序没用pandas,也没用调用数据库数据实验,下一步可以考虑改进。用的统计分析方法也很简单,也可以考虑升级。