Python 3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import pandas as pd
... import numpy as np
... import matplotlib.pyplot as plt
... import seaborn as sns
... import warnings
...
... # 忽略未来警告
... warnings.simplefilter(action='ignore', category=FutureWarning)
...
... # 设置字体为’SimHei‘,以显示中文标签
... plt.rcParams['font.sans-serif'] = ['SimHei']
... plt.rcParams['axes.unicode_minus'] = False
...
... # 导入给定的数据
... df1 = pd.read_excel('表1-患者列表及临床信息.xlsx')
... df2 = pd.read_excel('表2-患者影像信息血肿及水肿的体积及位置.xlsx')
... df3 = pd.read_excel('附表1-检索表格-流水号vs时间.xlsx')
...
... # 将附表进行转化
... ls1 = []
... ls2 = []
... ls3 = []
... ls4 = []
... ls5 = []
... ls6 = []
...
... for value in df3.values:
... ID = value[0]
... freq = value[1]
... for f in range(freq):
... ls1.append(ID)
... ls2.append(freq)
... ls3.append(value[f*2+2])
... ls4.append(value[f*2+3])
... ls5.append(f'第{f}次检查')
... ls6.append(value[3])
... df3 = pd.DataFrame({'ID': ls1, 'first_code': ls6, '重复次数': ls2, 'code': ls4, 'time': ls3, '检查次数': ls5})
df3['code'] = df3['code'].astype('int64')
# 调整df1中的入院首次影像检查流水号
ls = []
for i in df1['入院首次影像检查流水号'].values:
code = df3[df3.code == i]['first_code'].values[0]
ls.append(code)
n = 0
for i, o in zip(df1['入院首次影像检查流水号'].values, ls):
if i != o:
n += 1
df1['入院首次影像检查流水号'] = ls
print(n)
# 将df2转换为易读的dataframe
ls1 = []
ls2 = []
ls3 = []
for value in df2.values:
ID = value[0]
code = value[1]
freq = df3[df3.first_code == value[1]]['重复次数'].values[0]
for f in range(min(freq, 9)):
ls1.append(ID)
ls2.append(code)
ls3.append(f'第{f}次检查')
tem = pd.DataFrame({'ID': ls1, 'first_code': ls2, '检查次数': ls3})
# 添加时间代码
time_code = []
for value in df2.values:
freq = df3[df3.first_code == value[1]]['重复次数'].values[0]
for f in range(min(freq, 9)):
time_code.append(value[23*f + 1])
tem['code'] = time_code
# 逐列添加其它特征
columns = df2.columns
for delta in range(22):
ls = []
for value in df2.values:
freq = df3[df3.first_code == value[1]]['重复次数'].values[0]
for f in range(min(freq, 9)):
ls.append(value[23*f + 2 + delta])
tem[columns[2 + delta]] = ls
df2 = tem
# 合并df2和df3的特定列
df2 = pd.merge(df3[['code', 'time']], df2, on='code')
# 将df2中的HM_volume由10^-3ml转换成ml单位
df2['HM_volume'] = df2['HM_volume'] / 1000
# 计算每个患者是否发生血肿扩张及发生时间
ls1 = []
ls2 = []
ls3 = []
for code, ID in zip(df1['入院首次影像检查流水号'].values, df1['Unnamed: 0'].values):
delta = df1[df1.入院首次影像检查流水号 == code]['发病到首次影像检查时间间隔'].values[0]
first_code_time = df3[df3.code == code]['time'].values[0]
error_time = first_code_time - np.timedelta64(int(delta * 60), 'm')
max_time = error_time + np.timedelta64(int(48 * 60), 'm')
origin_value = df2[df2.code == code].values[0]
compare_value = df2[(df2.first_code == code) & (df2.time < max_time)][1:].values
condition = 0
for value in compare_value:
if value[5] - origin_value[5] >= 6 or (value[5] - origin_value[5]) / value[5] >= 0.33:
condition = 1
time = str(value[1] - origin_value[1]).split(' ')[2]
hours = int(time.split(':')[0])
minute = int(time.split(':')[1])
time_delta = hours + minute / 60
ls1.append(condition)
if condition == 0:
ls2.append(0)
else:
ls2.append(round(time_delta, 2))
ls3.append(ID)
result = pd.DataFrame({'ID': ls3, '是否扩张': ls1, '发生时间': ls2})
# 保存结果到Excel文件
result.to_excel('1a结果.xlsx', index=False)
# 绘制箱线图显示血肿扩张发生时间
plt.figure(figsize=(10, 6))
sns.boxplot(x='是否扩张', y='发生时间', data=result)
plt.xlabel('是否发生血肿扩张')
plt.ylabel('血肿扩张发生时间(小时)')
plt.title('血肿扩张发生时间分布')
plt.show()
# 绘制条形图显示各患者血肿扩张发生时间
plt.figure(figsize=(10, 6))
plt.bar(result['ID'], result['发生时间'])
plt.xlabel('患者编号')
plt.ylabel('血肿扩张发生时间(小时)')
plt.title('各患者血肿扩张发生时间')
plt.show()
2023年研究生数学建模竞赛E题第一问代码.zip
版权申诉
194 浏览量
2023-10-13
07:57:56
上传
评论
收藏 19KB ZIP 举报
Matlab科研辅导帮
- 粉丝: 1w+
- 资源: 7491
最新资源
- MEM2307-VB一款SOT23封装P-Channel场效应MOS管
- 逐次分半积分实验.wps
- MEM2303XG-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MEM2303-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 1_base.apk.1
- 基于FPGA深度学习的9I2C 读写 RTC 时钟实验,适合FPGA初学者
- MEM2303M3G-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MEM2302XG-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- manage.py 相对路径
- 数据库设计课程设计-高校选课管理系统免费提供
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈