药物副作用预测网络---------数据处理(1)

1.筛选需求的报告id

        基于REAC14Q4文件,筛选出需求报告的id,该文件格式如下,其中pt字段描述了患者在事件中所有的不良信息,注意此处一个报告id可以对应复数条信息。

        primaryid$caseid$pt$drug_rec_act

        初步统计约有4500种不良反应,总计60W条数据,其中绝大多数不良反应都是个例,由于当前网络暂时需求是预测常规副作用,这里取出现频率前100的症状作为预测目标,最后获取349252条数据,约占原数据集的55%,对应134954项报告,约占原报告数64%

删选原则:

        取出现频率最高的pt反应前100位,筛选包含这些pt的报告号,将这些报告号对应的其他非高频症状统一变更为rare symptoms字段,然后去除重复项。最后保存id文件以及涉及的pt字段文件。(ps:去除重复项我是用excel实现的,这个只需要导入生成的basedata.xlsx然后选择去除重复项就行)

df = pd.read_excel(r'E:\xml数据处理\data\exceldata\REAC14Q4.xlsx')
pt_counts = df['pt'].value_counts()
# 获取前100pt
top_50_pt = pt_counts.head(100).index.tolist()
with open("pt_data.txt", 'w') as file:for id in top_50_pt:file.write(str(id) + '\n')
# 筛选出具有前50高频率的"pt"对应的"primaryid"
get_id = df.loc[df['pt'].isin(top_50_pt), 'primaryid'].unique()
# 将"primaryid"写入文件
with open("getid.txt", 'w') as file:for id in get_id:file.write(str(id) + '\n')# 将非前50高的"pt"数据更改为"Rare symptoms"
df.loc[~df['pt'].isin(top_50_pt), 'pt'] = 'Rare symptoms'
# 筛选出具有前50高频率的"pt"对应的所有条目
filtered_data = df[df['primaryid'].isin(get_id)]
# 将筛选后的数据输出到Excel文件
filtered_data.to_excel('basedata.xlsx', index=False)

2.基于筛选出的id初步筛选7个txt文件的

        定义了一个函数来完成该功能,输入是getid.txt路径以及需要处理的文件路径

def clean_txt(path_getid:str,path_txt:str):with open(path_getid, 'r') as file:primaryid_list = [line.strip() for line in file]count = 0with open(path_txt, 'r') as file:first_line = file.readline().strip()filtered_data = pd.DataFrame(columns=first_line.split('$'))for line in file:count +=1if count%1000 == 0 : print(count)data = line.strip().split('$')data = [item.strip() for item in data]if data[0] in primaryid_list:filtered_data.loc[len(filtered_data)] = data[:25]filtered_data.to_excel('data_cleaned.xlsx', index=False, header=True)

        不过越到后面处理越慢,实验了几次发现是DataFrame格式产生了不少的开销,这专用list存储数据最后再转换成DataFrame格式,然后加上分块处理,清洗速度有了质的飞跃,当然list转换成DataFrame也需要一些时间(大概1-2分钟,10W条数据),可以考虑使用numpy或许会更快些。

        

def clean_txt2(path_getid: str, path_txt: str):# 读取getid.txt文件,获取需要筛选的primaryid列表with open(path_getid, 'r') as file:primaryid_list = [line.strip() for line in file]count = 0chunksize = 20000with open(path_txt, 'r') as file:first_line = file.readline().strip()headers = first_line.split('$')filtered_data = []while True:chunk = file.readlines(chunksize)if not chunk:breakfor line in chunk:count += 1if count % 1000 == 0:print(count)data = line.strip().split('$')data = [item.strip() for item in data]  # 移除换行符if data[0] in primaryid_list:filtered_data.append(data[:25])#list转DataFramefiltered_df = pd.DataFrame(filtered_data, columns=headers)filtered_df.to_excel('data_cleaned.xlsx', index=False, header=True)

明天继续

ps:

数据集见附件资源或下方网盘链接

链接:https://pan.baidu.com/s/1zJeFS48DvZydHk1SfuIQHg?pwd=6666 
提取码:6666

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【九日集训】第八天:二级指针

二级指针顾名思义就是指针又嵌套了一个指针; 常用的变量是这样的int p 1; 一级指针指向该变量 int * p1 &p; 二级指针指向一级指针 int ** p2 &p1; 解引用方法: 一级指针解引用是变量 int x * p1; 二级指针解引用是一级指针 int * x1 *p2;…

【开源】基于Vue和SpringBoot的快递管理系统

项目编号: S 007 ,文末获取源码。 \color{red}{项目编号:S007,文末获取源码。} 项目编号:S007,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快…

Linux配置Java多服务开机启动脚本(包含前置远程MySQL和NACOS)

因为公司内部原因导致服务器经常关机开机,每次重启就需要手动启动大量服务,所以决定将所有服务都配置到开机启动里面 正常的Java项目一般都会依赖MySQL和NACOS等服务,所以在配置开机启动的时候我们首先要考虑的是服务需不需要等待nacos等服务…

【读书笔记】微习惯

周日晚上尝试速读一本书《微习惯》,共七章看了下目录结构并不复杂,计划每章7-8分钟读完, 从20:15-21:00。读的时候,订下闹钟,催促着自己的进度。边读边记了一些要点和微信读书里面的划线。 第六章实践内容最为丰富&…

“此应用专为旧版android打造,因此可能无法运行”,问题解决方案

当用户在Android P系统上打开某些应用程序时,可能会弹出一个对话框,提示内容为:“此应用专为旧版Android打造,可能无法正常运行。请尝试检查更新或与开发者联系”。 随着Android平台的发展,每个新版本通常都会引入新的…

wvp gb28181 pro 平台国标级连功能说明

国标28181不同平台之间支持两种连接方式,平级和上下级,WVP目前支持向上级级联。 测试环境 测试平台上级:192.168.10.209(Alam centos8) 测试平台下级:192.168.10.206(ky10_x86) 下级…

C++11--类的新功能

目录 类的新功能 默认成员函数 类成员变量初始化 强制生成默认的关键子default 禁止生成默认成员函数关键字delete 继承和多态中final和override关键字 类的新功能 默认成员函数 八个默认成员函数 在C11之前,一个类中有如下六个默认成员函数: 构造函数析构函数拷贝构造…

2023-12-03 C语言最小二乘法备忘

点击 <C 语言编程核心突破> 快速C语言入门 C语言最小二乘法备忘 前言一、数学公式二、代码总结 前言 要解决问题: 最小二乘法实现线性回归的C语言实现, 这个数学公式转为C语言. 一、数学公式 设有 n n n 组数据 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) …

KDE环境文件夹user-dirs为英文

KDE环境文件夹user-dirs 修改KDE主页文件夹为英文 该文件路径 ~/.config/user-dirs.dirs打开后会发现里面的内容如下 # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line youre # interested in. All local …

openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表

文章目录 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表140.1 相关概念140.2 操作步骤140.3 维护建议 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表 为了保证数据库的有效运行&#xff0c;数据库必须在插入/删除操作后&#xff0c;基于…

Ant Design Pro 框架设置API Token拦截器的功能

分享记录一个解决方法&#xff0c;希望对大家有帮助。 找到文件&#xff0c;然后定义一个方法。最后调用一下即可。 代码我也给你贴上了。 // 获取token 拦截方法 const setTokenRequest (config: any) > {const token 30|eh5GNXWRe5rO4XLjbbnqy132RABfiKqI338EoIhqc790a…

思维模型 反馈效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。反馈促进改进。 1 反馈效应的应用 1.1 反馈效应在营销中的应用 1 “可口可乐与百事可乐之战” 在 20 世纪 80 年代&#xff0c;可口可乐公司是全球最大的饮料公司之一&#xff0c;其市场…

利用reddit的api进行爬虫

1 介绍 Reddit是一个社交新闻聚合网站&#xff0c;用户可以发布、评价和讨论各种话题。Reddit的内容涵盖了广泛的主题&#xff0c;可以从中获取大量的文本数据进行情绪分析。 2 注册 2.1 注册reddit 你需要先注册一个reddit的账号。 2.2 注册api https://www.reddit.com/…

文科专业和编程基础薄弱的女孩子做软件的神器——aardio学习资源入门

相关资源 aardio 开发桌面应用&#xff0c;这几点必须要掌握&#xff01; - 星安果的文章 - 知乎 https://zhuanlan.zhihu.com/p/430970376 从使用者角度来为aardio编程软件说句话 - popdes的文章 - 知乎 https://zhuanlan.zhihu.com/p/461290014 故事和情怀 优点 1 快捷 2 …

HarmonyOS开发(九):数据管理

1、概述 1.1、功能简介 数据管理为开发者提供数据存储、数据管理能力。 它分为两个部分&#xff1a; 数据存储&#xff1a;提供通用数据持久化能力&#xff0c;根据数据特点&#xff0c;分为用户首选项、键值型数据库和关系型数据库。数据管理&#xff1a;提供高效的数据管…

Bean的加载控制

Bean的加载控制 文章目录 Bean的加载控制编程式注解式ConditionalOn*** 编程式 public class MyImportSelector implements ImportSelector {Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {try {Class<?> clazz Class.forName("…

UCore-OS实验Lab0

实验内容&#xff1a;搭建ucore-os的实验环境 实验准备内容&#xff1a;vmware虚拟机&#xff0c;ubuntu22.04镜像&#xff0c;qemu7.0.0源码 ucore代码地址 GitHub - chyyuu/os_kernel_lab at x86-32 实验步骤&#xff1a; 在vmware中安装ubuntu&#xff0c;因为我个人喜欢…

★448. 找到所有数组中消失的数字

★448. 找到所有数组中消失的数字 使用数组本身当作哈希表 考虑让nums数组本身当作哈希表。 遍历nums&#xff0c;每遇到一个数x&#xff0c;就让在x-1位置处的数n。 再次遍历nums&#xff0c;如果遇到i位置上数nums[i]不大于n&#xff0c;则i1并没有出现。 eg&#xff1a; …

【智能家居】四、网络服务器线程控制功能点

网络控制 网络线程控制功能点代码 inputCommand.h&#xff08;输入控制指令&#xff09;socketControl.c&#xff08;socket网络控制指令&#xff09;main.c&#xff08;主函数&#xff09;编译运行结果 网络控制 Linux网络编程 “网络控制”&#xff08;Network Control&a…

openEuler学习04-ssl升级到openssl-1.1.1w

当前环境ssl的版本是 1.1.1f &#xff0c;计划升级到openssl-1.1.1w [roottest ~]# more /etc/os-release NAME"openEuler" VERSION"20.03 (LTS-SP3)" ID"openEuler" VERSION_ID"20.03" PRETTY_NAME"openEuler 20.03 (LTS-SP3)&q…