Files
jupyter/数据处理.ipynb
T
2023-09-05 16:28:09 +08:00

54 KiB

基础知识

正则表达式分割文本

In [ ]:
import json
import openpyxl
import re

file_name = 'data/药食材性味归经.xlsx'
wb = openpyxl.load_workbook(file_name)
sheet = wb.active
#sheets = wb.sheetnames

list1 = []
dict1 = {}
mo =r'[。入归].+经$'
mo1 = r'[二]'
mo2 = r'[,、;]'
for n in range(2,sheet.max_row):
    name = sheet.cell(n,1).value
    content = re.findall(mo,sheet.cell(n,2).value)
    if len(content) > 0:
        l = len(content[0])
        gj = re.sub(mo1, '', content[0][1:l-1])        
        list_gj = re.split(mo2,gj)
        dict1[sheet.cell(n,1).value ] = list_gj
        #dict1['guijing'] = list_gj
        
filename = './data/药食材归经.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl,ensure_ascii=False) 

#print(list1)
In [ ]:
import re

s = '消化不良、胃下垂、急性胃炎、慢性胃炎、萎缩性胃炎、神经性呕吐、胆囊炎、胆石症、胆道蛔虫症、胸胁痛等'
ss = '健中和胃,消食止呕,理气疏郁,清热利胆。'
mo = '等$'
mo2 = r'[,、;。]'
s1 = re.sub(mo, '', s) 
list1 = re.split(mo2,s1)
if '' in list1:
    list1.remove('')
print(list1)
In [ ]:
import re
t = '5小时10分48秒'
m = re.match(r'(.*)小时(.*)分(.*)秒', t)
m.groups()
In [ ]:
import re
t = '10分48秒'
list1 = []
if '小时' in t and '分' in t:
    m = re.match(r'(.*)小时(.*)分(.*)秒', t)
    list1 = [m[1],m[2],m[3]]
elif '小时' in t:
    m = re.match(r'(.*)小时(.*)秒', t)
    list1 = [m[1],0,m[2]]
elif '分' in t:
    m = re.match(r'(.*)分(.*)秒', t)
    list1 = [0,m[1],m[2]]
print(list1)
#m.group()
In [ ]:
import re

s = '2022-09-28-《气郁组》-视频学习详情_155229'
m = re.findall(r'《(.+)》',s)
print(m)

日期计算

In [ ]:
import time

birth = '1989-01-25'
t_birth = time.strptime(birth,'%Y-%m-%d')
days = (time.time() -time.mktime(t_birth))//(365*24*60*60)
print(int(days))

字符串转换

In [1]:
import binascii

gbs = 'D4C0CDAF'
bs = binascii.a2b_hex(gbs)
print('bs', bs)
print('decode-bs:', bs.decode('gbk'))

s = '马立亚'
gbcode = s.encode('gbk') # 先转成 bytes格式
print('gbcode:', gbcode)
gbs = "".join([hex(ch)[2:] for ch in gbcode])  #
print('gbs:', gbs)
bs b'\xd4\xc0\xcd\xaf'
decode-bs: 岳童
gbcode: b'\xc2\xed\xc1\xa2\xd1\xc7'
gbs: c2edc1a2d1c7

医药体测

药膳归经明细文件生成

In [ ]:
import json

filename = 'data/药膳210927.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
filename = 'data/药食材归经.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
k_zy = dict2.keys()
dict3 = {}
list1 = []
for item in dict1:
    print(item['name'])
    list1 = []
    #print(i,item['zy'])
    for m_zy in item['zy']:
        if m_zy in k_zy:
            dict4 = {}
            print(m_zy,dict2[m_zy])
            dict4[m_zy] = dict2[m_zy]
            list1.append(dict4)
    dict3[item['name']] = list1
filename = './data/药膳药食材.json'
with open(filename,'w') as fl:
    json.dump(dict3, fl,ensure_ascii=False)             
   

药膳归经权重生成

In [ ]:
import json
import openpyxl
import os,sys,shutil

filename = './data/药膳药食材.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
for k, v in dict1.items():
    if len(v) > 0 :
        dict2 = {}
        #print(k,v)
        ys_name = k
        dict2.setdefault(ys_name,{})
        for item in v:
            for k1, v1 in item.items():
                for item1 in v1:
                    dict2[ys_name].setdefault(item1,0)
                    dict2[ys_name][item1] += 1
        list1.append(dict2)                    
    
dict_qz = {}
for item in list1:
    for k, v in item.items():
        qz = sorted(v.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)
        dict_qz[k] = qz
#print(dict_qz)
qz_key = dict_qz.keys()
filename = 'data/药膳210927.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
#print(dict1)
wb = openpyxl.Workbook()
sheet = wb.active
sheet['A1'] = '药膳名称'
sheet['B1'] = '来源'
sheet['C1'] = '配方'
sheet['D1'] = '做法'
sheet['E1'] = '功效'
sheet['F1'] = '中药成分'
sheet['G1'] = '归经权重'

i =2
for item in dict1:
    sheet[f'A{i}'] = item['name']
    sheet[f'B{i}'] = item['source']
    sheet[f'C{i}'] = item['pf']
    sheet[f'D{i}'] = item['zf']
    sheet[f'E{i}'] = item['gx']
    sheet[f'F{i}'] = ','.join(item['zy'])
    if item['name'] in qz_key:
        s = ''
        for m_gj in dict_qz[item['name']]:
            s = s+ m_gj[0] +'('+str(m_gj[1])+')'
        sheet[f'G{i}'] = s
    else:
        sheet[f'G{i}'] = '暂无归经'
    i += 1

wb.save('data/test4.xlsx')    

体质数据处理

体质对应数据导入

In [9]:
import json

filename = 'data/tijianbingzheng.txt'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
m_key = set()
for k, v in dict1.items():
    for item in v.keys():
        m_key.add(item)
print(dict1)
{'C-14呼气试验阳性': {'病症对应中医辨证': ['湿热内盛', '脾胃虚弱'], '病症分析': 'C-14呼气试验是一种用于检测幽门螺杆菌感染的方法,通过摄入C-14标记的尿素,然后呼出含有C-14的二氧化碳进行检测。如果呼出的C-14二氧化碳含量高于正常水平即为阳性,表示感染了幽门螺杆菌。'}, 'C反应蛋白(CRP)升高': {'病症对应中医辨证': ['湿热内盛', '气血不畅'], '病症分析': 'C反应蛋白是一种血液中的蛋白质,常常用于衡量炎症的程度。当身体遭受感染、炎症、创伤等影响时,会出现CRP升高的现象。'}, 'V1呈QS型': {'病症对应中医辨证': ['气滞血瘀', '气血不足'], '病症分析': '心电图上V1导联呈现QS型,通常是一种正常的变异,也可能表示心肌损伤或心肌缺血等问题。'}, '癌胚抗原(定量)(CEA)增高': {'病症对应中医辨证': ['气滞血瘀', '痰湿阻滞', '外邪入侵'], '病症分析': 'CEA是一种蛋白质,当人体某些器官、如胃、肝、肺、乳腺、结肠等出现癌变时,会释放出更多的CEA,因此血液中CEA的浓度可能会增加。'}, '胆囊息肉样病变': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '痰湿阻滞'], '病症分析': '指在胆囊内部发现了一些类似于息肉的突起,可能会引起胆囊炎、胆管阻塞等问题,需要注意观察和治疗。'}, '动脉血管弹性稍下降': {'病症对应中医辨证': ['气滞血瘀', '气血不畅'], '病症分析': '指动脉血管的弹性略有下降,可能是因为年龄、高血压、高血脂等原因导致,需要注意预防和控制血压和血脂。'}, '动脉血管弹性下降': {'病症对应中医辨证': ['气滞血瘀', '气血不畅', '气血不足'], '病症分析': '动脉血管弹性下降是指血管壁的弹性降低,即血管失去了正常的伸缩性。通常是由于动脉硬化引起的,这会增加心血管疾病的风险。'}, '窦性心动过缓': {'病症对应中医辨证': ['气滞血瘀', '痰湿阻滞'], '病症分析': '这是指心脏的节律过缓,心率在每分钟60次以下,可能会导致头晕、乏力、心慌等症状。'}, '肥胖': {'病症对应中医辨证': ['气滞血瘀', '脏腑失调', '肾气不足', '脾虚湿阻', '痰湿阻滞'], '病症分析': '指身体的脂肪组织过多,体重超过正常范围,可能会导致一些心血管疾病、糖尿病、关节疼痛等问题。'}, '肺大疱': {'病症对应中医辨证': ['肺气不足', '痰湿阻滞', '外邪入侵'], '病症分析': '肺组织内一个或多个气腔突出,通常由于肺泡壁的破裂或肺组织的破坏所致。它们可能会导致肺功能下降等问题。'}, '肺结节': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '痰湿阻滞'], '病症分析': '指肺部出现大小不一的结节,可能是良性的肺结节,也有可能是恶性的肺癌。'}, '肺少许慢性炎症': {'病症对应中医辨证': ['气血不畅', '肺气不足', '外邪入侵'], '病症分析': '指肺部有轻微的慢性炎症反应,可能由于吸入异物、感染等原因引起,如果不及时治疗可能会加重。'}, '肺少许炎症': {'病症对应中医辨证': ['肝气郁结', '脾胃虚弱', '肾气不足', '外邪入侵'], '病症分析': '表示肺部存在炎症反应,可能是由于细菌、病毒或其他病原体引起的。'}, '肝囊肿': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结'], '病症分析': '指肝脏内出现液体充填的囊肿,多数为良性病变。肝囊肿通常不会引起明显的症状,但如果囊肿过大或者数量过多时,可能会压迫周围的组织或器官,引起腹痛、不适等症状。'}, '肝实质光点密集': {'病症对应中医辨证': ['气滞血瘀', '情志不畅'], '病症分析': '指在肝脏的超声检查中发现了一些密集的、光点状的区域,可能提示肝脏存在一些异常变化,如脂肪肝等。'}, '肝实质光点稍密集': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '湿热内盛', '脾虚湿阻'], '病症分析': '指在肝脏的超声检查中发现了一些密集的、光点状的区域,可能提示肝脏存在一些异常变化,如脂肪肝等。'}, '肝血管瘤': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '外邪入侵'], '病症分析': '肝血管瘤是一种良性的肝脏肿瘤,由肝脏内的毛细血管扩张形成。大多数病人无症状,但在少数情况下可能会出现疼痛、肝功能异常等症状。'}, '骨量减少': {'病症对应中医辨证': ['气滞血瘀', '气血不足', '肝肾不足'], '病症分析': '指骨骼中的骨量逐渐减少,骨密度下降,导致骨质疏松症等疾病。骨量减少通常会增加骨折的风险,特别是在老年人群体中,更容易发生危险。'}, '骨质疏松': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '湿热内盛', '脾胃虚弱', '气血不足', '肝肾不足'], '病症分析': '指骨密度下降,骨质变薄、变弱,易于骨折。常见于老年人、女性、长期服用激素等情况,可能导致骨折等'}, '甲胎蛋白(AFP)增高': {'病症对应中医辨证': ['气血不足', '情志不畅', '肝肾不足'], '病症分析': '甲胎蛋白是胎儿发育过程中产生的一种蛋白质,成人血液中含量极低。在某些疾病(如肝癌、睾丸癌、卵巢癌等)或正常生理状态下,甲胎蛋白的水平会异常增高。'}, '甲状腺低回声结节': {'病症对应中医辨证': ['气血不畅', '情志不畅', '肝肾不足', '痰湿阻滞'], '病症分析': '指甲状腺内出现低回声的结节,可能是由于甲状腺内的肿瘤、炎症、结节等因素引起的。甲状腺低回声结节通常需要进一步检查,以确定结节的性质。'}, '甲状腺结节': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛'], '病症分析': '甲状腺是一个位于颈部的内分泌腺体,结节是指甲状腺内部出现了一些小的肿块,这些结节可以是良性的,也可能是恶性的。'}, '空腹血糖增高': {'病症对应中医辨证': ['肝气郁结', '湿热内盛', '肾气不足', '脾虚湿阻'], '病症分析': '指在空腹状态下测量的血糖水平。如果空腹血糖水平高于正常范围,可能存在糖尿病或糖尿病前期等情况。'}, '卵巢囊肿': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结'], '病症分析': '卵巢囊肿是一种由于卵巢上皮细胞异常生长引起的囊性病变,通常为单侧性,可能会引起腹部不适、疼痛等症状。'}, '尿潜血阳性': {'病症对应中医辨证': ['湿热内盛', '脾胃虚弱', '肝火旺盛', '气血不畅'], '病症分析': '可能是由于泌尿系统出血所致,提示可能存在尿路感染、泌尿系统结石等问题。'}, '尿糖阳性': {'病症对应中医辨证': ['湿热内盛', '脾虚湿阻', '痰湿阻滞'], '病症分析': '尿糖阳性可能表示糖尿病或其他糖代谢紊乱问题。'}, '前列腺钙化灶': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '肾气不足'], '病症分析': '指前列腺组织中出现钙化物质,可能是前列腺炎、前列腺增生等疾病的表现。'}, '前列腺囊肿': {'病症对应中医辨证': ['湿热内盛', '情志不畅'], '病症分析': '前列腺囊肿是一种在前列腺组织内形成的液体囊袋,可能会导致排尿不畅或疼痛等症状。'}, '前列腺稍大并钙化灶': {'病症对应中医辨证': ['气血不畅', '肾气不足', '情志不畅'], '病症分析': '指前列腺体积稍大,并且在前列腺内出现钙化灶。前列腺稍大通常是正常的生理变化,但如果前列腺增生过快,可能会压迫尿道,引起排尿不畅等症状。前列腺钙化灶可能是前列腺炎、前列腺癌等病变的表现。'}, '前列腺特异抗原(PSA)增高': {'病症对应中医辨证': ['湿热内盛', '肾气不足', '痰湿阻滞'], '病症分析': '前列腺特异抗原是一种由前列腺细胞产生的蛋白质,在一些疾病(如前列腺癌、前列腺增生等)或正常生理状态下会出现异常增高。'}, '前列腺增大': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '肾气不足'], '病症分析': '前列腺增生是男性普遍面临的问题,随着年龄的增长,前列腺组织逐渐增生,压迫尿道,导致排尿困难等症状。'}, '屈光不正': {'病症对应中医辨证': ['肝气郁结', '脾胃虚弱', '肝火旺盛'], '病症分析': '指眼睛的折射状态不正常,导致近视、远视等视力问题。'}, '乳腺囊肿': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '肾气不足', '情志不畅'], '病症分析': '乳腺组织内因液体聚集而形成的一种良性肿块,可能由于荷尔蒙变化等因素引起。一般无症状,可在体检时发现。'}, '肾错构瘤': {'病症对应中医辨证': ['湿热内盛', '痰湿阻滞'], '病症分析': '一种肾部常见的良性肿瘤,由于肾脏某些细胞错构而发生。一般无症状,大多在体检时无意间发现。'}, '肾钙乳症': {'病症对应中医辨证': ['肾气不足'], '病症分析': '肾钙乳症是指肾脏中的某些管道出现结晶,引起尿液中钙的排泄增加,并且与蛋白质、尿酸等物质混合形成小结石。病人通常无症状,但在尿液中发现结石或在X光检查中发现肾结石时会被诊断。'}, '肾结石': {'病症对应中医辨证': ['湿热内盛', '脾胃虚弱', '肾气不足', '情志不畅'], '病症分析': '肾结石是在肾脏内形成的固体结晶,通常由尿中过多的矿物质和盐类组成。它们可能会导致尿路梗阻、尿路感染和肾功能损伤等问题。'}, '肾囊肿': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '肾气不足'], '病症分析': '肾囊肿是肾脏结构的一种变异,一般情况下不需要治疗。如果囊肿较大或症状明显,需要考虑治疗。'}, '视力低常': {'病症对应中医辨证': ['肝气郁结', '脾胃虚弱', '肝火旺盛', '肾气不足'], '病症分析': '指近视或远视等屈光不正的状况,导致眼球不能正确聚焦,造成眼睛看不清楚远近的事物,需要佩戴眼镜或隐形眼镜来矫正。'}, '舒张压低': {'病症对应中医辨证': ['脾胃虚弱', '气血不足', '情志不畅', '肝肾不足'], '病症分析': '血压测量时,舒张压指心脏舒张期(心脏放松时)的血压值,低于正常范围可能表示存在低血压、心脏功能不全等问题。'}, '糖化血红蛋白(HbA1c)增高': {'病症对应中医辨证': ['肝气郁结', '脾胃虚弱', '脏腑失调', '气血不足'], '病症分析': 'HbA1c是指红细胞内的血红蛋白与葡萄糖结合后形成的化合物,用于反映过去2-3个月内血糖水平的控制情况。HbA1c增高意味着血糖长期控制不好,可能存在糖尿病或糖尿病前期等情况。'}, '体重偏低': {'病症对应中医辨证': ['湿热内盛', '气血不足'], '病症分析': '体重偏低通常是指身体体重低于正常水平,可能与营养不良、消化吸收障碍、某些疾病等有关。'}, '天门冬氨酸氨基转移酶(AST)增高': {'病症对应中医辨证': ['湿热内盛', '脾胃虚弱', '情志不畅'], '病症分析': '天门冬氨酸氨基转移酶是一种酶,在肝脏和其他器官中都有存在。AST升高可能是由于肝脏、心脏、肌肉等组织受损导致的,提示可能存在相应的疾病。'}, '听力下降': {'病症对应中医辨证': ['肾气不足', '肝肾不足', '肝气郁结', '脾虚湿阻'], '病症分析': '指听觉感受器官和神经系统发生异常,引起听觉功能下降的症状。'}, '心脏杂音': {'病症对应中医辨证': ['气血不畅', '情志不畅'], '病症分析': '指心脏内血流速度、方向或路径发生改变,产生异常的心脏声音。可能由心脏瓣膜异常、心肌病变、先天性心脏疾病等引起。'}, '血肌酐增高': {'病症对应中医辨证': ['肝肾不足'], '病症分析': '血肌酐是由肌肉代谢产生的废物,主要通过肾脏排泄。如果肾脏功能不好,肾脏无法有效清除血液中的肌酐,导致血肌酐水平升高,反映肾功能异常。'}, '血尿酸增高': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '脾胃虚弱', '气血不畅', '肝肾不足'], '病症分析': '指血液中尿酸含量超过正常范围,可能会导致痛风等疾病。'}, '血清γ-谷氨酰基转移酶(GGT)增高': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结'], '病症分析': 'GGT和ALT都是肝功能指标,它们的升高可能提示肝脏存在一些病变或损伤,如肝炎、酒精性肝病等。'}, '血清丙氨酸氨基转移酶(ALT)增高': {'病症对应中医辨证': ['肝气郁结', '气血不畅'], '病症分析': 'GGT和ALT都是肝功能指标,它们的升高可能提示肝脏存在一些病变或损伤,如肝炎、酒精性肝病等。'}, '血压高': {'病症对应中医辨证': ['脾胃虚弱', '肝火旺盛', '肝肾不足', '脾虚湿阻', '痰湿阻滞'], '病症分析': '指血液在血管内流动时对血管壁的压力过高,通常会出现头痛、头晕、视力模糊等症状,长期高血压会增加心血管疾病、脑血管疾病等疾病的风险。'}, '血脂异常': {'病症对应中医辨证': ['气滞血瘀', '肝肾不足', '脾虚湿阻'], '病症分析': '当人体内的脂质代谢出现异常时,就会出现血脂异常的情况。这可能是由于遗传、生活方式、饮食习惯、药物影响、疾病等多种因素造成的,会增加心脑血管疾病的风险,引发心脑血管疾病。'}, '咽部充血': {'病症对应中医辨证': ['肝火旺盛', '情志不畅', '外邪入侵'], '病症分析': '咽部充血通常是由于病原体感染引起的一种症状,可能与上呼吸道感染、扁桃体炎等相关。'}, '子宫体结节': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '脾胃虚弱'], '病症分析': '子宫体结节是子宫内膜异位症的一种表现,通常位于子宫体的肌层内或外,具有增生性病变的特点。'}}

穴位数据导入

简单导出简介、内容

In [ ]:
import json
import re
dict1 = {}
filename = 'file/zhongyi/xuewei.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        dict2 = dict(zip(list1, list2))
        #print(line1['title'],dict1)
        #print(dict1.keys())
        #print(line1)
        dict1.setdefault(line1['title'][0],{})
        dict1[line1['title'][0]]['简介'] = line1['jj'] 
        dict1[line1['title'][0]]['内容'] = dict2
filename = './file/穴位1.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)        

数据导入文件中

In [ ]:
import json
import re

dict1 = {}
filename = 'file/zhongyi/xuewei.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']
        dict2 = dict(zip(list1, list2))
        dict1.setdefault(line1['title'][0],{})
        if len(list3) > 0:
            
            dict1[line1['title'][0]]['about'] = list3
        dict1[line1['title'][0]].setdefault('content',{})
        for k, v in dict2.items():
            dict1[line1['title'][0]]['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
filename = './file/穴位1.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)        

穴位数据导入数据库中

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
#dblist = myclient.list_database_names()
mydb = myclient['dayi']
mycol = mydb["xuewei"]
db_list = []
filename = 'file/zhongyi/xuewei.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        dict1 = {}
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']
        dict2 = dict(zip(list1, list2))
        dict1['name'] = line1['title'][0]
        if len(list3) > 0:
            dict1.setdefault('about',{})
            for s in list3:
                item = s.strip().split(':')
                dict1['about'][item[0].strip()] = item[1].strip()
        dict1.setdefault('content',{})
        for k, v in dict2.items():
            dict1['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
        db_list.append(dict1)
x = mycol.insert_many(db_list)
print('ok!')

中医症状数据导入数据库中

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["zhongyizhengzhuang"]
db_list = []
filename = 'file/zhongyi/zhongyizhengzhuang.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        dict1 = {}
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']
        dict2 = dict(zip(list1, list2))
        dict1['name'] = line1['title'][0]
        if len(list3) > 0:
            dict1.setdefault('about',{})
            for i in range(0,int(len(list3)/2)):
                dict1['about'][list3[2*i]] = list3[2*i+1]
        dict1.setdefault('content',{})
        for k, v in dict2.items():
            dict1['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
        db_list.append(dict1)
x = mycol.insert_many(db_list)
print('ok!')

疾病数据导入数据库中

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["jibing"]
db_list = []
filename = 'file/zhongyi/jibing.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        dict1 = {}
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']
        dict2 = dict(zip(list1, list2))
        dict1['name'] = line1['title'][0]
        if len(list3) > 0:
            dict1.setdefault('about',{})
            for i in range(0,int(len(list3)/2)):
                dict1['about'][list3[2*i]] = list3[2*i+1]
        dict1.setdefault('content',{})
        for k, v in dict2.items():
            dict1['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
        db_list.append(dict1)
x = mycol.insert_many(db_list)
print('ok!')

术语数据导入数据库中

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
#dblist = myclient.list_database_names()
mydb = myclient['dayi']
mycol = mydb["shuyu"]
db_list = []
filename = 'file/zhongyi/shuyu.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        dict1 = {}
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']
        dict2 = dict(zip(list1, list2))
        dict1['name'] = line1['title'][0]
        if len(list3) > 0:
            dict1.setdefault('about',{})
            for s in list3:
                item = s.strip().split(':')
                dict1['about'][item[0]] = item[1]
        dict1.setdefault('content',{})
        for k, v in dict2.items():
            dict1['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
        db_list.append(dict1)
x = mycol.insert_many(db_list)
print('ok!')

西医症状数据导入数据库中

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["xiyizhengzhuang"]
db_list = []
filename = 'file/zhongyi/xiyizhengzhuang.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        dict1 = {}
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']
        dict2 = dict(zip(list1, list2))
        dict1['name'] = line1['title'][0]
        if len(list3) > 0:
            dict1.setdefault('about',{})
            for i in range(0,int(len(list3)/2)):
                dict1['about'][list3[2*i]] = list3[2*i+1]
        dict1.setdefault('content',{})
        for k, v in dict2.items():
            dict1['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
        db_list.append(dict1)
x = mycol.insert_many(db_list)
print('ok!')

药剂数据导入数据库中

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
#dblist = myclient.list_database_names()
mydb = myclient['dayi']
mycol = mydb["yaoji"]
db_list = []
filename = 'file/zhongyi/yaoji.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        dict1 = {}
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']        
        dict2 = dict(zip(list1, list2))        
        if len(list3) > 0: 
            jj = {}
            for s in list3:
                item = s.strip().split(':')
                jj[item[0]] = item[1]        
        dict1['name'] = jj['名称']
        dict1['about'] = jj
        dict1.setdefault('content',{})
        for k, v in dict2.items():
            dict1['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
        db_list.append(dict1)
x = mycol.insert_many(db_list)
print('ok!')

药膳数据导入数据库中

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
#dblist = myclient.list_database_names()
mydb = myclient['dayi']
mycol = mydb["yaoshan"]
db_list = []
filename = 'file/zhongyi/yaoshan.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        dict1 = {}
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']
        dict2 = dict(zip(list1, list2))
        dict1['name'] = line1['title'][0]
        if len(list3) > 0:
            dict1.setdefault('about',{})
            for s in list3:
                item = s.strip().split(':')
                dict1['about'][item[0]] = item[1]
        dict1.setdefault('content',{})
        for k, v in dict2.items():
            dict1['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
        db_list.append(dict1)
x = mycol.insert_many(db_list)
print('ok!')

中草药数据导入数据库中

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["zhongcaoyao"]
db_list = []
filename = 'file/zhongyi/zhongcaoyao.json'
with open(filename,'r',encoding='utf-8') as fl:
    for line in fl:
        dict1 = {}
        line1 = json.loads(re.sub(r'\xa0','',line))
        list1 = line1['tables']
        list2 = line1['contents']
        list3 = line1['jj']
        dict2 = dict(zip(list1, list2))
        dict1['name'] = line1['title'][0]
        if len(list3) > 0:
            dict1.setdefault('about',{})
            for i in range(0,int(len(list3)/2)):
                dict1['about'][list3[2*i]] = list3[2*i+1]
        dict1.setdefault('content',{})
        for k, v in dict2.items():
            dict1['content'][k] = v 
        #dict1[line1['title'][0]]['内容'] = dict2
        db_list.append(dict1)
x = mycol.insert_many(db_list)
print('ok!')

穴位隶属整理

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["xuewei"]
dict1 = {}
list1 = []
for x in mycol.find({},{ "_id": 0,"name":1,"about.隶属":1 }):
    if 'about' in x.keys():
        m_ls = x['about']['隶属']
        dict1.setdefault(m_ls,[])
        dict1[m_ls].append(x['name'])
'''
filename = './file/穴位隶属.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)     
'''
for item in dict1.keys():
    print(item)

穴位功能、主治统计

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["xuewei"]

dict1 = {}
mo = '等$'
mo2 = r'[,、;。]'

for x in mycol.find({},{ "_id": 0,"name":1,"about":1 }):
    dict1.setdefault(x['name'],{})
    if '主治' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        s = x['about']['主治']
        s1 = re.sub(mo, '', s)
        list1 = re.split(mo2,s1)
        if '' in list1:
            list1.remove('')
        dict1[x['name']]['主治'] = list1
    if '功能' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        s = x['about']['功能']
        s1 = re.sub(mo, '', s)
        list1 = re.split(mo2,s1)
        if '' in list1:
            list1.remove('')
        dict1[x['name']]['功能'] = list1
        

filename = './file/穴位主治功能统计.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)     

穴位数据导出Excel表

In [ ]:
import json
import openpyxl

filename = 'file/穴位.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
filename = 'file/穴位简要情况表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet['A1'] = '穴位名称'
sheet['B1'] = '隶属'
sheet['C1'] = '位置'
sheet['D1'] = '主治'
sheet['E1'] = '功能'
sheet['F1'] = '操作'
sheet['G1'] = '主要配伍'
i = 2
for k, v in dict1.items():
    sheet[f'A{i}'] = k
    sheet[f'B{i}'] = v['简介'][0].split(':')[1]
    sheet[f'C{i}'] = v['简介'][1].split(':')[1]
    sheet[f'D{i}'] = v['简介'][2].split(':')[1]
    sheet[f'E{i}'] = v['简介'][3].split(':')[1]
    sheet[f'F{i}'] = v['简介'][4].split(':')[1]
    sheet[f'G{i}'] = v['简介'][5].split(':')[1]      
    i += 1
wb.save(filename)   
print('ok!')


术语数据处理

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["shuyu"]
dict1 = {}
list1 = []
for x in mycol.find({},{ "_id": 0,"name":1,"about":1 }):
    if '类别' in x['about'].keys():
        m_lb = x['about']['类别'].replace(' ','')
    else:
        m_lb = '无类别'
    dict1.setdefault(re.sub('\xa0+','',m_lb),[])
    dict1[m_lb].append(x['name'])
filename = './file/术语类别.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)   

疾病数据处理

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["jibing"]
dict1 = {}
list1 = []
for x in mycol.find({},{ "_id": 0,"name":1,"about":1 }):
    if '疾病分类' in x['about'].keys():
        m_lb = x['about']['疾病分类'].replace(' ','')
    else:
        m_lb = '无类别'
    dict1.setdefault(re.sub('\xa0+','',m_lb),[])
    dict1[m_lb].append(x['name'])
filename = './file/疾病类别.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)   

中草药数据处理

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["zhongcaoyao"]

dict1 = {}
mo = '等$'
mo2 = r'[,、;。]'

for x in mycol.find({},{ "_id": 0,"name":1,"about":1 }):
    dict1.setdefault(x['name'],{})
    if '别名' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        s = x['about']['别名']
        s1 = re.sub(mo, '', s)
        list1 = re.split(mo2,s1)
        if '' in list1:
            list1.remove('')
        dict1[x['name']]['别名'] = list1
    if '功能' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        s = x['about']['功能']
        s1 = re.sub(mo, '', s)
        list1 = re.split(mo2,s1)
        if '' in list1:
            list1.remove('')
        dict1[x['name']]['功能'] = list1
    if '主治' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        dict1[x['name']]['主治'] = s = x['about']['主治']
        

filename = './file/中草药主治功能统计.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)     

药剂数据处理

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["yaoji"]

dict1 = {}
mo = '等$'
mo2 = r'[,、;。]'

for x in mycol.find({},{ "_id": 0,"name":1,"about":1 }):
    dict1.setdefault(x['name'],{})
    if '功用' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        s = x['about']['功用']
        s1 = re.sub(mo, '', s)
        list1 = re.split(mo2,s1)
        if '' in list1:
            list1.remove('')
        dict1[x['name']]['功用'] = list1
    if '主治' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        dict1[x['name']]['主治'] = s = x['about']['主治']
        

filename = './file/药剂主治功用统计.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)     

药膳数据处理

In [ ]:
import json
import re
import pymongo

myclient = pymongo.MongoClient('mongodb://10.147.17.6:27017/')
mydb = myclient['dayi']
mycol = mydb["yaoshan"]

dict1 = {}
mo = '等$'
mo2 = r'[,、;。]'

for x in mycol.find({},{ "_id": 0,"name":1,"about":1 }):
    dict1.setdefault(x['name'],{})
    if '功效' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        s = x['about']['功效']
        s1 = re.sub(mo, '', s)
        list1 = re.split(mo2,s1)
        if '' in list1:
            list1.remove('')
        dict1[x['name']]['功效'] = list1
    if '相关疾病' in x['about'].keys():
        #dict1[x['name']].setdefault('主治',[])
        s = x['about']['相关疾病']
        s1 = re.sub(mo, '', s)
        list1 = re.split(mo2,s1)
        if '' in list1:
            list1.remove('')
        dict1[x['name']]['相关疾病'] = list1    
        

filename = './file/药膳功能统计.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl)     

北海炼化体检数据提取

In [ ]:
import json
import openpyxl
import os,sys,shutil

file_name = 'file/中石化北海炼化2020年团体体检报告.xlsx'
wb = openpyxl.load_workbook(file_name)
sheet = wb.active
dict1 = {}
for n in range(1,sheet.max_row+1):
    bh = sheet.cell(n,2).value
    name = sheet.cell(n,3).value
    xb = sheet.cell(n,4).value
    nl = sheet.cell(n,5).value
    bz = sheet.cell(n,7).value
    dict1.setdefault(bh,{})
    dict1[bh]['姓名'] = name
    dict1[bh]['性别'] = xb
    dict1[bh]['年龄'] = nl
    dict1[bh].setdefault('病症',[])
    dict1[bh]['病症'].append(bz.strip())
wb.close()
#print(dict1)
    
        
filename = 'file/中石化北海炼化2020年体检人员情况表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet['A1'] = '体检编号'
sheet['B1'] = '姓名'
sheet['C1'] = '性别'
sheet['D1'] = '年龄'
sheet['E1'] = '异常名称'

i =2
for k, v in dict1.items():
    sheet[f'A{i}'] = k
    sheet[f'B{i}'] = v['姓名']
    sheet[f'C{i}'] = v['性别']
    sheet[f'D{i}'] = v['年龄']
    sheet[f'E{i}'] = ','.join(v['病症'])    
    i += 1
wb.save(filename)

excel数据读取

In [ ]:
import openpyxl
import json

filename = 'data/长岭全成绩.xlsx'
wb = openpyxl.load_workbook(filename)
sheet = wb.active
data1 =list(sheet.values)
del data1[0]
print(data1)
#for data in data1:
#    print(data)

图表生成

高考一分一段表生成

In [ ]:
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
from pyecharts import options as opts
from pyecharts.charts import Bar,Line
import pyecharts.options as opts
from pyecharts.faker import Faker
import json

list_x = []
list_y = []
filename = 'data/17-21年一分一段表.json'
with open(filename,'r') as fl:
    m_xx = json.load(fl)
dict1 =m_xx['2020']['z']
for i in sorted(dict1,reverse=True): #降序
    list_x.append(i)
    list_y.append(dict1[i]['num_person'])
    #print(i,dict1[i]['num_person'])
bar = (
    Bar()
    .add_xaxis(list_x)
    .add_yaxis("2020年一分一段表", list_y, category_gap=0, color=Faker.rand_color())
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-直方图"))
    .render("bar_histogram2020.html")
#    .set_global_opts(title_opts=opts.TitleOpts(title="运动步幅及步频", subtitle="户外运动"),)
)
#bar.load_javascript()
In [ ]:
bar.render_notebook()
In [ ]:
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
from pyecharts import options as opts
from pyecharts.charts import Bar,Line
import pyecharts.options as opts
from pyecharts.faker import Faker
import json

x_2021 = []
y_2021 = []
x_2020 = []
y_2020 = []
filename = 'data/17-21年一分一段表.json'
with open(filename,'r') as fl:
    m_xx = json.load(fl)
dict1 =m_xx['2021']['z']
for i in sorted(dict1,reverse=True): #降序
    x_2021.append(i)
    y_2021.append(dict1[i]['num_person'])
dict1 =m_xx['2020']['z']
for i in sorted(dict1,reverse=True): #降序
    x_2021.append(i)
    y_2021.append(dict1[i]['num_person'])
    #print(i,dict1[i]['num_person'])
bar = (
    Bar()
    .add_xaxis(list_x)
    .add_yaxis("人数", list_y, category_gap=0, color=Faker.rand_color())
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-直方图"))
    .render("bar_histogram.html")
In [ ]: