Python操纵 Excel 文件实现复杂数据分析

一、明确功能需求

  • 项目功能需求如下图所示,假设有1000行数据即1000名患者,已知每名患者的西医指标值和医生给出的证候结果。

enter image descriptionhere

  • 共有3个证候结果:气虚证、肾虚证、阳虚证,列序号分别为1、2、3列;值为1表示患者存在该证候,值为0表示不存在该证候,一个患者可以同时存在多个证候,证候起始和终止序号为2-4。
  • 共有12个西医指标:白细胞、红细胞、血红蛋白等,列序号分别为4、5、6…,指标值为浮点数值。西医指标起始和终止序号为5-16。
  • 需求:对所有数据,考虑每个证候,计算出存在证候和不存在该证候的两组数据,首先判断这些数据是否属于正态分布,正态分布是用Ttest检验,非正态分布时用非参数Kruskal-Wallis检验,然后对比该两组数据的均值、标准差、检验t值、p值,从而分析出西医指标对存在该证候的影响、相关性。

每个证候输出一个结果文件,文件中显示所有西医指标的计算结果值,按照p值从小到大排序,前几个指标即是对该证候影响较大的指标。以气虚证和非气虚证为例,检验两组数据有无差异性,通过均值和标准差可以看出来气虚和非气虚的指标的高低,
通过p值可以看出有无统计学意义,若p<0.05差异显著,否则差异不显著;通过p值最小的几个指标,可以看出这些指标对于判断是否属于气虚证候的影响。

可使用任何语言解决,我们前期介绍了使用java解决,设计了算法框架。这里使用python实现,python解决时代码更为简洁,也更简单。

二、设计算法

充分理解需求的情况下,设计算法框架。

要求遍历所有证候,,每个证候单独输出一个文件; 在这个文件中, 对所有西医指标进行考虑,即遍历所有西医指标;
对于每个西医指标,要考虑所有行的记录(即遍历所有行), 分别计算证候为0和为1时的西医指标值。

通过上述分析,整体的算法框架需要三层循环, 第一层为遍历每个证候, 第二层为遍历每个西医指标, 第三层为遍历每行记录,伪代码如下:

    > For 证候 synIndex 1:6  //假设有6个证候
    >    创建证候文件, 待输出数据
    >    For 西医指标med 7:56 //假设有50个西医指标
    >        创建动态数组, 存储指标值以及证候值 
    >        For 每行记录row 
    >            将西医指标值,根据证候值分别加入不同的动态数组
    >        End 每行记录row 
    >        依据数组中的值, 计算p值、t值、均值等等.
    >        将该指标名称、p值、t值等信息作为一行,追加写入文件. 
    >     End 西医指标med 
    >     关闭csv文件,考虑下一个证候
    > End For 证候 

三、设计细节

3.1 分组存储西医指标值,由于证候0和1的个数不确定, 所以它们数组大小也不确定,
需要使用动态数组分别存储证候0和1对应的西医指标值,可采用ist等数据结构来创建动态数组,用于存储西医指标值。

3.2 读入及操作xls文件,采用 pandas 读取xls文件数据,tcm_data =
pd.read_excel(‘data_expert.xls’), 读取出所有列名measures =
tcm_data.columns.values.tolist()。并按照算法来操作数据,进行运算处理。

3.3 使用stats.ttest_ind函数来进行Ttest检验,test_res = stats.ttest_ind(group2, group1,
equal_var =
False),group2为证候为1的指标组,group1为证候为0的指标组;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值