t检验怎么分析结果python_使用python 批量 配对t检验 医学 基础研究 数据分析

需要excel数据源文件的请去http://download.csdn.net/download/camelbrand/10216783下载,只保留少数列的数据,剩余的2000多个数据已经被我删除了。

帮学医的同学弄完一个python数据处理的程序,怕以后忘记了,记录下来

t检验是计量资料的假设检验中最为简单常用的,当样本含量n较小时,比如n小于60。配对t检验又称成对t检验,适用于配对设计的计量资料。配对设计是将受试对象按照某些重要特征,如可疑混杂因素性别等配成对子,每对中的两个受试对象随机分配到两处理组。

要计算的部分数据如下,从列LINC01587开始,一共有2027列数据:

775436-20180121152005615-1882363907.png

其中Solid Tissue Normal和Primary Tumor是一对,如第2行和第3行是一对,第4行和第5行是一对,以此类推。需要完成的工作是从LINC01587开始,计算该列的数据的差异有无统计学意义。通常使用的spss工具来计算,安装IBM SPSS Statics之后,先来个demo学习计算LINC01587演示下。

1.启动IBM SPSS Statics,选择输入数据,点击确定

775436-20180121154820146-1223068150.png

2.弹出界面中,新建变量视图,如下图所示填入参数Solid代表Solid Tissue Normal

Primary代表Primary Tumor,然后点击数据视图

775436-20180121155200474-658207091.png

按照上面的表格数据,将列LINC01587以此填入,如下图所示,其中0E-13表示为0

775436-20180121155911912-975358140.png

3.点击分析,选择比较均值,然后选择配对样本T检验

775436-20180121160020349-1267240091.png

弹出界面中,按下键盘上的Ctrl键,然后依次选中左边红色框内的Solid和Primary,然后点击右边红框内的的箭头

775436-20180121160129303-1625060536.png

775436-20180121160304428-1097771587.png

如上图所示,点击确定,SPSS输出计算结果如下,其中右下角红色框内的是我们需要的结果。

775436-20180121160428646-261616826.png

上图计算得到的p值是0.188。

第一个表格是数据的基本描述。

第二个是数据前后变化的相关系数,那个概率P值是相关系数的概率值,概率大于显著性水平0.05,则说明数据变化前后没有显著的线性变化,线性相关程度较弱。

第三个表格是数据相减后与0的比较,通过概率值为0,小于显著性水平0.05,则拒绝原假设,相减的差值与0有较大差别,则表明数据变化前后有显著的变化。

但是数据源有2027列数据都需要计算,工作量巨大,可以考虑使用python来完成这部分工作。

那么我们设计python程序需要完成的工作包括:

1.打开excel数据文件,并读取文件数据

2.依次对所有列数据进行计算,并输出p值计算结果。

地址为http://blog.csdn.net/hjh00/article/details/48530183的博客,最后一部分内容给出了如何使用python完成配对t检验的程序

使用python开发程序,首先需要安装python,本人的电脑上已经安装了python的开发环境,具体配置参考python教程(按照这个教程一步一步来学习入门)https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

配置好python之后,在windows CMD命令行输入python,显示我的python版本号是 Python 3.6.1

775436-20180121161706271-1592805867.png

上面博客给出的配对t检验计算程序如下图,但是安装好python之后,可能电脑上并没有scipy.stats,为了安装scipy(后面部门的excel处理功能可能也没有安装),可以参考网址:

https://www.cnblogs.com/babyfei/p/7080047.html?utm_source=itdadao&utm_medium=referral

775436-20180121161846428-1378245034.png

安装好python开发环境之后,要完成上面SPSS计算的工作,我们只需要列出下,加了#号的都是注释,不会执行,我的程序只是把列表变量a和b替换成列LINC01587的数据,其中a是Solid Tissue Normal,b代表Primary Tumor

# http://blog.csdn.net/hjh00/article/details/48530183

from scipy.stats import ttest_rel

#a = [3,4,1,1,1,3,3,6,5,1,4,5,4,4,3,6,7,7,7,8]

#b = [7,6,7,8,7,6,5,6,4,2,5,4,3,6,7,5,4,3,8,7]

a = [0.1934107598010,0.0894060200161,0.0718704187628,0.3608183477340,0.0367125061353,0,0.1279727464080,0]

b= [0,0.0736396246482,0.0427039152731,0,0.0701365405069,0.0104761411961,0.1097963382500,0.0093947227584]

t,p=ttest_rel(a,b)

print (t )

print (p )

执行上面的程序,分别打印t和p,红色框内的p值与上面SPSS计算的p值结果一致:

775436-20180121162458896-192609703.png

那么接下来的工作只需要设计使用python对excel文件进行处理的部分了,我的代码如下(实际调试我使用了软件Geany作为编辑器,可以很方便的编辑和运行python程序):

1 #-*- coding: utf-8 -*-

2 importxdrlib ,sys3 importxlrd4 from scipy.stats importttest_rel5

6 #打开excel文件

7 def open_excel(file= 'test.xlsx'):8 try:9 data =xlrd.open_workbook(file)10 returndata11 exceptException as e:12 print(str(e))13

14 #根据名称获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的索引 ,by_name:Sheet1名称

15 def excel_table_byname(file= 'test.xlsx', colnameindex=0, by_name=u'Sheet1'):16 data = open_excel(file) #打开excel文件

17 table = data.sheet_by_name(by_name) #根据sheet名字来获取excel中的sheet

18 nrows = table.nrows #行数

19 nCol = table.ncols #列数

20 print("row count is",nrows)21 print("colume count is",nCol)22 colnames = table.row_values(colnameindex) #某一行数据

23 list =[] #装读取结果的序列

24 for rownum in range(0, nrows): #遍历每一行的内容

25 row = table.row_values(rownum) #根据行号获取行

26 if row: #如果行存在

27 app = [] #一行的内容

28 for i in range(len(colnames)): #一列列地读取行的内容

29 app.append(row[i])30 list.append(app) #装载数据

31

32 returnlist33

34 defget_col(table,col,fstStr):35 listdata =[]36 #sprint(col,type(col))

37 for row intable:38 if(row[0]==fstStr):39 listdata.append(row[col])40 returnlistdata41

42 #主函数

43 defmain():44 tables =excel_table_byname()45 f = open("./excel.txt", 'w+')46 print("main function", file=f)47 print(type(tables), file=f)48 TotalCol =len(tables[0])49 #for row in tables:

50 #print (row)

51 p_result =[];52 for n in range(8,TotalCol):53 print("calculate",n, file=f)54 list1 = get_col(tables,n,"Solid Tissue Normal")55 list2 = get_col(tables,n,"Primary Tumor")56 t,p=ttest_rel(list1,list2)57 p_result.append(p)58 print("calc over", file=f)59 print(p_result, file=f)60 if __name__=="__main__":61 main()

针对其他格式不一致的表格,改程序未必生效,比较关键的参数是38行row[0]中的0,以及52行的数字8,都是根据excel表内容自定义写入的。

print(xxx,file=f)的结果会输出到python程序文件所在目录的excel.txt文本文档中,输出结果如下,最后一行就是从LINC01587列开始计算的p值,nan表示该列数据计算的p无效

main function

calculate 8

calculate 9

calculate 10

calculate 11

calculate 12

calculate 13

calc over

[0.18763370952460945, 0.6178834746354206, 0.45183198301444494, nan, nan, 0.3665736965096091]

后续还可以直接使用python将计算结果写入excel表中,我这里只做到了通过txt文本打印输出。如果有时间,可以继续开发研究一下。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

my mail:shaw2321@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值