【MIMIC数据库教程】十二、使用Python提取所有患者的高密度脂蛋白(HDL)指标
- 【MIMIC数据库教程】一、MIMIC-IV3.1表格与字段详解(一):Hosp和ICU模块表格整体介绍
- 【MIMIC数据库教程】二、MIMIC-IV3.1表格与字段详解(二):Hosp住院模块表格详解(上)
- 【MIMIC数据库教程】三、MIMIC-IV3.1表格与字段详解(三):Hosp住院模块表格详解(中)
- 【MIMIC数据库教程】四、MIMIC-IV3.1表格与字段详解(四):Hosp住院模块表格详解(下)
- 【MIMIC数据库教程】五、MIMIC-IV3.1表格与字段详解(五):ICU模块表格详解
- 【MIMIC数据库教程】六、使用Python读取MIMIC-IV3.1数据库
- 【MIMIC数据库教程】七、使用Python提取MIMIC-IV患者的真实年龄
- 【MIMIC数据库教程】八、使用Python读取心电信号并绘制
- 【MIMIC数据库教程】九、使用Python提取所有患者的尿酸指标(上)
- 【MIMIC数据库教程】十、使用Python提取所有患者的尿酸指标(下)
- 【MIMIC数据库教程】十一、使用Python提取所有患者的高敏C反应蛋白指标
- 【MIMIC数据库教程】十二、使用Python提取所有患者的高密度脂蛋白(HDL)指标
文章目录
- 【MIMIC数据库教程】十二、使用Python提取所有患者的高密度脂蛋白(HDL)指标
- 检索HOSP模块中高密度脂蛋白检查的itemid
- 从labevents中提取所有存在高密度脂蛋白检查的患者
- 检索ICU模块中高密度脂蛋白检查的itemid
- 从chartevents中提取所有存在高密度脂蛋白的患者
- 合并Hosp和ICU模块的尿酸指标
【MIMIC数据库教程】十二、使用Python提取所有患者的高密度脂蛋白(HDL)指标
检索HOSP模块中高密度脂蛋白检查的itemid
hosp模块高密度脂蛋白检查的详细信息包含在d_labitem表中,表中itemid字段表示检查项目,label字段表示检查名称,高密度脂蛋白的标准英文是Cholesterol, HDL或者缩写为HDL,我们检索d_items表中label字段包含Cholesterol, HDL的itemid, 代码如下:
# 查找hosp模块下的高敏C反应蛋白itemid
import pandas as pd
# 读取CSV文件
df = pd.read_csv('d_labitems.csv')
# 检索label中包含'Cholesterol, HDL'的行
filtered_df = df[df['label'].str.contains('Cholesterol, HDL', case=False, na=False)]
# 将DataFrame转换为Markdown表格
markdown_output = filtered_df.to_markdown(index=False)
# 显示Markdown格式的输出
print(markdown_output)
检索结果如下,因此确定itemid为50904。
itemid | label | fluid | category |
---|---|---|---|
50904 | “Cholesterol, HDL” | Blood | Chemistry |
从labevents中提取所有存在高密度脂蛋白检查的患者
在确定高密度脂蛋白检测的itemid=50904后,从labevents表中提取所有存在高密度脂蛋白检查的患者,代码如下:
import pandas as pd
# 定义每次读取的块大小
chunksize = 10**6 # 根据内存情况可以调整
file_path = 'labevents.csv' # 表格文件路径
output_file = 'HOSP_高密度脂蛋白.csv' # 输出文件路径
# 初始化一个空的DataFrame,用于存储结果
filtered_data = pd.DataFrame()
# 分块读取CSV文件
for chunk in pd.read_csv(file_path, chunksize=chunksize):
# 筛选出itemid等于50904的行
filtered_chunk = chunk[chunk['itemid'] == 50904]
filtered_data = pd.concat([filtered_data, filtered_chunk], ignore_index=True)
# 将筛选结果保存到新的CSV文件
filtered_data.to_csv(output_file, index=False)
# 输出新文件的行数
print(f"筛选结果已保存到 {output_file}")
print(f"高密度脂蛋白检测记录数:{filtered_data.shape[0]}")
最后得到315909条高密度脂蛋白数据,labevents表格非常的大。文件大小达到了18.4GB,因此需要分块读取,分块读取可以查看之前的文章,每次读取1000000行的数据,然后筛选出itemid等于50904的行,最后将筛选结果保存到新的CSV文件中。
检索ICU模块中高密度脂蛋白检查的itemid
ICU模块高密度脂蛋白检查的详细信息包含在d_items表中,表中itemid字段表示检查项目,label字段表示检查名称,高密度脂蛋白在这个表格中是HDL缩写,我们检索d_items表中label字段包含HDL的itemid, 代码如下:
import pandas as pd
# 读取CSV文件
df = pd.read_csv('d_items.csv')
# 检索label中包含'HDL'的行
filtered_df = df[df['label'].str.contains('HDL', case=False, na=False)]
# 将DataFrame转换为Markdown表格
markdown_output = filtered_df.to_markdown(index=False)
# 显示Markdown格式的输出
print(markdown_output)
检索结果如下,因此确定itemid为220624。
itemid | label | abbreviation | linksto | category | unitname | param_type | lownormalvalue | highnormalvalue |
---|---|---|---|---|---|---|---|---|
220624 | HDL | HDL | chartevents | Labs | nan | Numeric | nan | nan |
从chartevents中提取所有存在高密度脂蛋白的患者
在确定高密度脂蛋白的itemid=220624后,从chartevents中提取所有存在高密度脂蛋白检查的患者,代码如下:
import pandas as pd
# 定义每次读取的块大小
chunksize = 10**6 # 根据内存情况可以调整
file_path = 'chartevents.csv' # 表格文件路径
output_file = 'icu高密度脂蛋白.csv' # 输出文件路径
# 初始化一个空的DataFrame,用于存储结果
filtered_data = pd.DataFrame()
# 分块读取CSV文件
for chunk in pd.read_csv(file_path, chunksize=chunksize):
# 筛选出itemid等于220624的行
filtered_chunk = chunk[chunk['itemid'] == 220624]
filtered_data = pd.concat([filtered_data, filtered_chunk], ignore_index=True)
# 将筛选结果保存到新的CSV文件
filtered_data.to_csv(output_file, index=False)
# 输出新文件的行数
print(f"筛选结果已保存到 {output_file}")
print(f"高密度脂蛋白检测记录数:{filtered_data.shape[0]}")
最后得到6551条高密度脂蛋白数据,chartevents表格非常的大。文件大小达到了41.9GB,因此需要分块读取,分块读取可以查看之前的文章,每次读取1000000行的数据,然后筛选出itemid等于220624的行,最后将筛选结果保存到新的CSV文件中。
合并Hosp和ICU模块的尿酸指标
最后将Hosp和ICU模块的高密度脂蛋白指标合并为一个表,并保存为CSV文件,代码如下:
import pandas as pd
# 读取表格 A 和 B
df_A = pd.read_csv('icu高密度脂蛋白.csv')
df_B = pd.read_csv('HOSP_高密度脂蛋白.csv')
# 选择指定字段
df_A = df_A[['subject_id', 'hadm_id', 'charttime', 'storetime', 'value', 'valuenum', 'valueuom', 'warning']]
df_B = df_B[['subject_id', 'hadm_id', 'charttime', 'storetime', 'value', 'valuenum', 'valueuom', 'flag']]
# 将 flag 字段转换为 warning 字段
df_B['warning'] = df_B['flag'].apply(lambda x: 1 if x == 'abnormal' else 0)
# 删除原 flag 字段
df_B = df_B.drop(columns=['flag'])
# 合并两个表格(纵向拼接)
df_merged = pd.concat([df_A, df_B], ignore_index=True)
# 保存合并后的表格
df_merged.to_csv('所有高密度脂蛋白记录.csv', index=False)
print("合并完成,结果保存在所有高密度脂蛋白记录.csv文件中。")
ICU模块和HOSP模块对高密度脂蛋白的字段名称略有不同,因此需要将flag字段转换为warning字段,最后将两个表合并为一个表,并保存为CSV文件。