性味归经与功能的脚本(超过四元素)

脚本名称

censor_relation_xwgj2_functions.py

需要导入中药表excel

# -*- coding: utf-8 -*-
"""
Created on Thu Aug 25 10:06:52 2016

审核性味归经与功能的脚本(超过四元素)

@author: Administrator
"""

import xlrd,csv
import list_xwgj_function,chi_square,list_xwgj_function_multiElements

#多元素组合
thelist_xwgj_function=list_xwgj_function_multiElements.list_xwgj2_function
#数据处理,把[‘寒,苦,肝,胃‘, ‘清热‘]转换为[[‘寒‘,‘苦‘,‘肝‘,‘胃‘], ‘清热‘]
thelist_xwgj_function=[[i[0].split(","),i[1]] for i in thelist_xwgj_function]

fileName="性味归经_功能_关系_多元素.csv"
excelFilename="中药表.xlsx"
sheetName="Sheet1"
#打开excel数据
excelFile=xlrd.open_workbook(excelFilename)

sheet=excelFile.sheet_by_name(sheetName)

#表单行与列
number_rows=sheet.nrows
number_columns=sheet.ncols
#表单内数据
list_sheetData=[]
#
list_xingWeiFunction_relation=[]

#获取表格数据
def Get_sheetData():
    for row in range(1,number_rows):
        list_sheetData.append(sheet.row_values(row))
    return list_sheetData

list_sheetData=Get_sheetData()

#,卡方统计的a是否成立,实验组True,对照组True
#例如keyWord1=[‘寒‘, ‘苦‘, ‘肝‘, ‘胃‘],keyWord2=‘清热‘
#i为[‘苦,寒归胃经\r\n\t‘, ‘清热解毒,消痈,下乳,舒筋通脉。‘]
def True_a(keyWord1,keyWord2,i):

    #key为[‘寒‘, ‘苦‘, ‘肝‘, ‘胃‘]内元素
    for key in keyWord1:
        if key not in i[0]:
            return False
    if keyWord2 not in i[1]:
        return False

    return True

#,卡方统计的b是否成立,实验组True,对照组False
#例如keyWord1=[‘寒‘, ‘苦‘, ‘肝‘, ‘胃‘],keyWord2=‘清热‘
#i为[‘苦,寒归胃经\r\n\t‘, ‘清热解毒,消痈,下乳,舒筋通脉。‘]
def True_b(keyWord1,keyWord2,i):

    #key为[‘寒‘, ‘苦‘, ‘肝‘, ‘胃‘]内元素
    for key in keyWord1:
        if key not in i[0]:
            return False
    if keyWord2 in i[1]:
        return False
    return True    

#,卡方统计的c是否成立,实验组False,对照组True
#例如keyWord1=[‘寒‘, ‘苦‘, ‘肝‘, ‘胃‘],keyWord2=‘清热‘
#i为[‘苦,寒归胃经\r\n\t‘, ‘清热解毒,消痈,下乳,舒筋通脉。‘]
def True_c(keyWord1,keyWord2,i):
    #只要count不等于len(keyWord1),就表示keyWord1至少有一个元素不符合
    len_keyWord1=len(keyWord1)
    count=0

    #key为[‘寒‘, ‘苦‘, ‘肝‘, ‘胃‘]内元素
    for key in keyWord1:
        if key in i[0]:
            count+=1
    if len_keyWord1==count:
        return False

    if keyWord2 not in i[1]:
        return False
    return True    

#,卡方统计的d是否成立,实验组False,对照组False
#例如keyWord1=[‘寒‘, ‘苦‘, ‘肝‘, ‘胃‘],keyWord2=‘清热‘
#i为[‘苦,寒归胃经\r\n\t‘, ‘清热解毒,消痈,下乳,舒筋通脉。‘]
def True_d(keyWord1,keyWord2,i):
    #只要count不等于len(keyWord1),就表示keyWord1至少有一个元素不符合
    len_keyWord1=len(keyWord1)
    count=0

    #key为[‘寒‘, ‘苦‘, ‘肝‘, ‘胃‘]内元素
    for key in keyWord1:
        if key in i[0]:
            count+=1
    if len_keyWord1==count:
        return False

    if keyWord2 in i[1]:
        return False
    return True    

#卡方统计的keyWord1与keyWord2的关系
#三元素和多元素的脚本不一样,此函数需要修改
def Get_single_chiSquare(keyWord1,keyWord2):
    #记录包含卡方值a的uid号,方便逆向检测
    list_a=[]
    a=0
    b=0
    c=0
    d=0
    #统计包含a数量
    for k in range(len(list_sheetData)):
        i=list_sheetData[k]
        if True_a(keyWord1,keyWord2,i):
            a+=1
            list_a.append(k+2)

    #统计包含b数量
    for i in list_sheetData:
        if True_b(keyWord1,keyWord2,i):
            b+=1    

    #统计包含c数量
    for i in list_sheetData:
        if True_c(keyWord1,keyWord2,i):
            c+=1

    #统计包含d数量
    for i in list_sheetData:
        if True_d(keyWord1,keyWord2,i):
            d+=1
    #print("a:",a)
    #print("b:",b)
    #print("c:",c)
    #print("d:",d)
    k2=chi_square.value_independence(a,b,c,d)
    relation=chi_square.judge_independence(a,b,c,d)
    lis1=[[a,b,c,d],k2,relation,list_a]
    return lis1

#计算所有性味的相关性
def Get_all_chiSquare(thelist_xwgj_function):
    for i in thelist_xwgj_function:
        try:
            keyWord1,keyWord2=i[0],i[1]
            relation=Get_single_chiSquare(keyWord1,keyWord2)
            list1=[i,relation,relation[2]]
            list_xingWeiFunction_relation.append(list1)
        except:
            print("wrong at:",i)
            continue
    return list_xingWeiFunction_relation

def Write_table_to_csv(list1,fileName):
    #对列表格式修改,字符串写入的格式不对
    file=open(fileName,‘w‘,newline=‘‘)
    writer1=csv.writer(file)
    writer1.writerows(list1)
    file.close()  

list_xingWeiFunction_relation=Get_all_chiSquare(thelist_xwgj_function)
Write_table_to_csv(list_xingWeiFunction_relation,fileName)

‘‘‘
#测试数据
i=[‘苦,寒,胃经\r\n\t‘, ‘清热,解毒,消痈,下乳,舒筋通脉。‘]
b=thelist_xwgj_function[0]
keyWord1,keyWord2=b[0],b[1]
‘‘‘

结果

计算出细化的性味归经组合,从三万多组合中,得到472种组合

时间: 2024-08-11 16:42:42

性味归经与功能的脚本(超过四元素)的相关文章

性味归经与功能的脚本——3元素

# -*- coding: utf-8 -*- """ Created on Thu Aug 25 10:06:52 2016 审核性味归经与功能的脚本 @author: Administrator """ import xlrd,csv import list_xwgj_function,chi_square,list_xwgj_function_multiElements #三元素组合[寒,苦,肝] thelist_xwgj_function

LoadRunner测试下载功能点脚本(方法二)

在上一篇<LoadRunner下载功能点脚本(方法一)>中,实现的脚本仅是录制下载功能点的脚本,现在性能需求的场景更改如下: 性能需求:对系统某页面中,点击下载并将下载文件保存到本地电脑的功能做并发测试,以获取在并发下载文件的情况下系统的性能指标. 我们知道,LoadRunner录制的脚本是根据协议启用代理模拟浏览器发送请求,记录对服务器响应的相关数据,因此,保存下载文件需要手动编写代码插入在下载脚本前后. 代码如下: download() { //文件大小 int flen; //响应数据内

shell脚本(四)

shell脚本(四) (7)tr命令 #实现字符转换功能 #-c string:反选string字符集,即除了该字符串的所有字符集 #-d string:删除string中出现的所有字符 #-s:删除所有重复出现的字符序列,只保留一个 #删除所有数字 tr -d "[[:digit:]]" < name.txt tr -d 0-9 < name.txt #所有小写字母转换成大写字母 tr  "[a-z]" "[A-Z]" < n

【HTML5】用脚本控制交互元素details元素的使用

1.源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Con

由ORACLE_SID想到脚本的四种运行方法

以前学习脚本知道一个概念,关于脚本运行方式的问题,我们熟知的脚本运行方式有以下几种: (1)../script.sh (点斜线脚本) (2).sh script.sh (sh空格脚本) (3).source script.sh (source空格脚本) (4).. script.sh (点空格脚本) 先写个简单的脚本,把执行结果贴在下面,然后分别对这几种脚本运行方式作解释. script.sh内容如下: ------------------------------- #!/bin/bash ec

centos shell编程6一些工作中实践脚本 第四十节课

centos   shell编程6一些工作中实践脚本    第四十节课 上半节课 下半节课 f

VBS脚本操作网页元素

=================打开百度,点击百度按钮==================== Dim btn,ieSet ie = WScript.CreateObject("InternetExplorer.Application")ie.Visible = true '若为false,则不显示浏览器ie.navigate "www.baidu.com" DoWscript.Sleep 200Loop Until ie.readyState = 4 '等页面载

ARM上函数调用参数超过四个的时传递方法

众所周知,ARM架构下,函数参数是通过 r0~r4寄存器传递的:但是如果参数超过四个,就要借助于栈了. 下面以一个例子说明. int func(int a1, int a2, int a3, int a4, int a5, int a6) { return a1 + a2 + a3 + a4 + a5; } int main(void) { func(1, 2, 3, 4, 5, 6); return 0; } main()的汇编如下: 0x00010418 <+0>: push {r11,

shell脚本第四篇——常用小脚本

shell脚本第四篇--常用小脚本 1.将系统进程按内存占用大小排列显示出来 # ps -e  -o "%C   : %p : %z : %a"|sort -k5-nr 2.将系统进程按CPU占用大小排列显示 # ps -e  -o "%C   : %p : %z : %a"|sort   -nr 或# ps aux --sort -rss 3.查找当前目录下占用为0字节的文件并删除 # find ./ -type f -size 0 -exec rm -rf {}