问题引入:
1.每种伏邪,对应方剂所出现的次数(部分数据如下)
2.每种伏邪,对应中草药出现的次数
代码及实现(问题1)
话不多说直接代码,数据文件github浏览
(初学菜鸟一个,轻喷)
问题一:
import numpy as np
from collections import Counter
data=np.loadtxt(open('D:\sta.csv'),delimiter=',',skiprows = 1, encoding='utf8',dtype=str) #读取数据
n=int(input("输入伏邪代码,“风\寒\湿\热\瘀\毒”分别为“0/1/3/5/6/7” :")) #n为不同伏邪对应的序列
a=0 #记录行数
count=0 #记录满足条件的数量
fangji=[] #用于储存满足条件的数据
for tof in data[:,n]: #判断是否满足某种伏邪,如果满足则将该行数据加入fangji[]
if tof=='1':
fangji.append(data[a,8]) #8为方剂所在的.csv序列
a=a+1 #行数加一
count=count+1
else:
a=a+1 #无论满不满足条件,均对行数加一
print("符合条件的数据有:%d"%count)
Result=Counter(fangji)
print("结果为",Result)
运行后结果如下:
输入的伏邪代码为0.
知识提炼(问题1):
- 对于a的运用,当对首列的0,1进行判断时,是对第一列的迭代判断,不是行数,所以设立a方便记录行数,以便直接对行末尾的方剂进行读取,记录.
- Counter(List):用于统计某个元素在List中出现的次数
- skiprows = 1,读取文件时跳过第一行
.csv文件部分数据传至github
代码及实现(问题2)
import numpy as np
data=np.loadtxt(open('D:\drugs.csv'),delimiter=',', encoding='utf8',dtype=str) #读取数据
#print(data)打印数据
a=0 #记录行数
count=0 #记录满足条件的数量
zy=[] #List储存满足条件的数据
dict={} #字典储存最终统计结果
index=data[0,:][6:] #储存第一行中药名称,作为字典的seq
counter=[] #储存中药数量,不是Counter()方法!!!!
result=dict.fromkeys(index) #将index中的数据作为字典的key,且value默认为NONE
#判断是否满足某种伏邪,如果满足则提取数据存入zy[]
n=int(input("输入伏邪代码,“风\寒\湿\热\瘀\毒”分别为“0/1/2/3/4/5” :"))
for tof in data[:,n]: #[:,n]表示所选的伏邪列数
if tof=='1':
zy.append(data[a,:][6:]) #[a,:]表示第a行数据,[6:]表示第a行数据从第七列开始的数据,将其存入zy[]
a=a+1
else:
a=a+1
#统计每种药材的数量
sum=0 #用于药材计数
j=0
for i in range(len(result)): #len(result)为药材名称数量
sum=0
for j in zy:
if j[i] =='1': #zy[]中的第j个数据行中第i个药材名称
sum=sum+1
counter.append(sum) #存入counter[]
num=0
for key in result: #将counter中的数据作为value,赋值给result{}中的key,满足一一对应关系
result[key]=counter[num]
num=num+1
print(result)
结果如下:
代码输入为0:
知识提炼(问题2):
- len(dict):计算字典元素个数,即键的总数。
- fromkeys() 方法语法:dict.fromkeys(seq[, value]) seq – 字典键值列表。value – 可选参数, 设置键序列(seq)对应的值,默认为 None。
注意:若是直接将List赋值给某个字典,结果中list的值和dic中的键不是一一对应关系!
数据文件及源代码地址,注意路径
注意
本博客数据文件版权归河南中医药大学信息技术学院及河南中医药大学第一附属医院所有,未经允许禁止用于非学习用途.