import re
import pandas as pd
import numpy as np
import os
import matplotlib.pyplot as plt
import copy
def data_parameter_xls(name, idex_dead, idex_alive):
print("文件名开始获取")
sheets_name = pd.ExcelFile(name).sheet_names
print("文件名已获取完")
D_dead = {}
D_alive = {}
for i in range(len(sheets_name)):
print(sheets_name[i],"开始获取")
data = pd.read_excel(name,sheets_name[i])
data = np.array(data).tolist()
if '过世' in sheets_name[i]:
for i in range(len(data)):
data[i][0] = str(data[i][0])
if data[i][0] in D_dead:
if data[i][idex_dead] in D_dead[data[i][0]]:
D_dead[data[i][0]][data[i][idex_dead]].append(data[i])
else:
D_dead[data[i][0]][data[i][idex_dead]] = [data[i]]
else:
D_dead[data[i][0]] = {}
D_dead[data[i][0]][data[i][idex_dead]] = [data[i]]
else:
for i in range(len(data)):
data[i][0] = str(data[i][0])
if data[i][0] in D_alive:
if data[i][idex_alive] in D_alive[data[i][0]]:
D_alive[data[i][0]][data[i][idex_alive]].append(data[i])
else:
D_alive[data[i][0]][data[i][idex_alive]] = [data[i]]
else:
D_alive[data[i][0]] = {}
D_alive[data[i][0]][data[i][idex_alive]] = [data[i]]
return [D_dead, D_alive]
def data_parameter_ME_xls(name):
print("文件名开始获取")
sheets_name = pd.ExcelFile(name).sheet_names
print("文件名已获取完")
D_dead = {}
D_alive = {}
for i in range(len(sheets_name)):
print(sheets_name[i],"开始获取")
data = pd.read_excel(name,sheets_name[i])
data = np.array(data).tolist()
if '过世' in sheets_name[i]:
for i in range(len(data)):
if data[i][0] in D_dead:
D_dead[data[i][0]].append(data[i])
else:
D_dead[data[i][0]] = [data[i]]
else:
for i in range(len(data)):
if data[i][0] in D_alive:
D_alive[data[i][0]].append(data[i])
else:
D_alive[data[i][0]] = [data[i]]
return [D_dead, D_alive]
def merge(data_A, data_DHD, data_FC, data_FVR, data_HV, data_SC):
data = [data_A, data_DHD, data_FC, data_FVR, data_HV, data_SC]
D_dead = {}
D_alive = {}
for i in range(len(data)):
for j in data[i][0].keys():
if j not in D_dead:
D_dead[j] = {}
for k in data[i][0][j].keys():
D_dead[j][k] = data[i][0][j][k]
for j in data[i][1].keys():
if j not in D_alive:
D_alive[j] = {}
for k in data[i][1][j].keys():
D_alive[j][k] = data[i][1][j][k]
return [D_dead, D_alive]
def data_filter(data, Threshold_coefficient):
#把所有键出现过的次数记录下来
key_all = {}
for peo in data[0].keys():
for key in data[0][peo].keys():
if key in key_all:
key_all[key] += 1
else:
key_all[key] = 1
for peo in data[1].keys():
for key in data[1][peo].keys():
if key in key_all:
key_all[key] += 1
else:
key_all[key] = 1
key_1 = {}
for key in key_all.keys():
if key_all[key] >= (len(data[0]) + len(data[1]))*Threshold_coefficient:
key_1[key] = key_all[key]
print("数据量大于",Threshold_coefficient*100,"%的特征如下:")
for key in key_1.keys():
print(key, key_1[key])
D_dead = {}
D_alive = {}
for peo in data[0].keys():
D_dead[peo] = {}
for key in key_1.keys():
if key in data[0][peo]:
D_dead[peo][key] = data[0][peo][key]
else:
D_dead[peo][key] = 0
for peo in data[1].keys():
D_alive[peo] = {}
for key in key_1.keys():
if key in data[1][peo]:
D_alive[peo][key] = data[1][peo][key]
else:
D_alive[peo][key] = 0
return [D_dead, D_alive]
def quantification(data):
D_dead = data[0]
D_alive = data[1]
"""
#暂时不用的两份数据
#体检结果
data_ME = data_parameter_ME_xls('data\\MedicalExam20190108.xls')
#过世会员数据
data_M = np.array(pd.read_excel("data\\Members20190102.xls")).tolist()
"""
#可利用的6份数据
data_A = data_parameter_xls('data\\Activity20190109.xls', 4, 3)
data_DHD = data_parameter_xls('data\\DailyHealthData20190108.xls', 4, 3)
data_FC = data_parameter_xls('data\\FamilyCommunication20190108.xls', 6, 5)
data_FVR = data_parameter_xls('data\\FamilyVisitRecord20190104.xls', 4, 3)
data_HV = data_parameter_xls('data\\HospitalVisit20190108.xls', 5, 4)
data_SC = data_parameter_xls('data\\SocialClub20190109.xls', 4, 3)
#合并
data = merge(data_A, data_DHD, data_FC, data_FVR, data_HV, data_SC)
#根据数据量选取阈值筛选
data = data_filter(data, 0.1)
快乐活动 | 次数 | ||||||||||
见面 | 次数 | ||||||||||
其他 | 次数 | ||||||||||
短信 | 次数 | ||||||||||
健康活动 | 次数 | ||||||||||
生活活动 | 次数 | ||||||||||
亲友 | 次数 | ||||||||||
亲戚 | 次数 | ||||||||||
电话 | 次数 | ||||||||||
朋友 | 次数 | ||||||||||
眼科 | 次数 | ||||||||||
养生 | 次数 | ||||||||||
儿子 | 次数 | ||||||||||
内科 | 次数 | ||||||||||
女儿 | 次数 | ||||||||||
外科 | 次数 | ||||||||||
骨科 | 次数 | ||||||||||
内科-其他 | 次数 | ||||||||||
客人 | 次数 | ||||||||||
唱歌 | 次数 | ||||||||||
胸片 | 钙化灶 | 心室增大 | 高密度影 | 主动脉硬化 | 病灶 | 纹理增多 | |||||
肝功能 | 总胆红素 | 直接胆红素 | 谷丙转氨酶 | 谷草转氨酶 | 碱性磷酸酶 | ||||||
血糖(空腹) | 血糖值 | ||||||||||
血脂 | 胆固醇 | 甘油三酯 | 低密度脂蛋白 | 高密度脂蛋白 | |||||||
肾功能 | 血肌酐 | 血尿素氮 | 血尿酸 | ||||||||
血常规 | 白细胞 | 血红蛋白 | 血小板 | 淋巴细胞比率 | 中性细胞比率 | ||||||
尿常规 | 白细胞 | 阴性 | 蛋白质 | 阴性 | 隐血 | 阴性 | 镜检白细胞 | 未见 | 镜检红细胞 | 未见 | 其它 |
血压 | 收缩压 | 舒张压 | |||||||||
矫正视力 | 左 | 右 | |||||||||
眼疾 | 屈光不正 | 眼底动脉硬化 | 白内障 | 眼底血管硬化 | 青光眼 | 视网膜变性 | |||||
咽 | 有咽炎 | 无咽炎 | |||||||||
喉 | 有文字 | 无文字 | |||||||||
呼吸 | 呼吸次数 | ||||||||||
脉搏 | 脉搏次数 | ||||||||||
身高 | 身高 | ||||||||||
体重 | 体重 | ||||||||||
皮肤 | 无,可剔除 | ||||||||||
淋巴结 | 无,可剔除 | ||||||||||
头、颈 | 无,可剔除 | ||||||||||
甲状腺 | 甲状腺结节 | ||||||||||
脊柱 | 无,可剔除 | ||||||||||
四肢 | 小儿麻痹症 | 大隐静脉曲张 | 老烂脚 | ||||||||
肛门 | 前列腺增生 | 便秘 | 混合痔 | 肛门下垂 | 外痔 | 内痔 | |||||
生殖器 | 前列腺增生 | ||||||||||
心电图 | 窦性心动过速 | 窦性心动过缓 | III呈QR型 | 轻度ST-T改变 | 快速心房颤动 | 不纯性心房扑动 | 不完全性右束支传导阻滞 | 心电轴右偏 | 窦性心律 | 电轴右偏 | |
彩色多普勒超声(腹部) | |||||||||||
癌胚抗原(CEA) | |||||||||||
心率 | |||||||||||
CT | |||||||||||
裸眼视力 | |||||||||||
前列腺肿瘤标志物测定 | |||||||||||
甲胎蛋白(AFP) | |||||||||||
糖类抗原199(CA199) | |||||||||||
糖类抗原125(CA125) | |||||||||||
B超 | |||||||||||
听力 | |||||||||||
耳疾 | |||||||||||
鼻及鼻窦 | |||||||||||
发育及营养 | |||||||||||
神经及精神 | |||||||||||
肺及呼吸道 | |||||||||||
心脏及血管 | |||||||||||
肝、脾、双肾 | |||||||||||
腹部包块 | |||||||||||
糖化血红蛋白 | |||||||||||
甲状腺功能测定1 | |||||||||||
甲状腺功能测定2 | |||||||||||
nan | |||||||||||
X线检查 | |||||||||||
核磁共振 | |||||||||||
血粘度 | |||||||||||
彩色多普勒超声(甲状腺) | |||||||||||
血糖(餐后2小时) | |||||||||||
24小时动态心电图 | |||||||||||
支气管镜 |