1:1病例对照匹配的Python实现步骤详解

2023-11-02

这周接到一个活,因为某个课题研究需要,须把脑卒中患者的名单和一份健康人(对照)名单按照”性别相同,乡镇地址相同,年龄相差3岁以内“作为匹配条件进行1:1的匹配,现将思考及实现的过程逐一记录并在此分享,希望能给大家有所借鉴与帮助。

拿到这份数据后首要的工作是熟悉数据和提取关键信息。这两份数据都是保存于Excel中的单表结构的数据(没有复杂的表关联),脑卒中患者1300多条,健康人8200多条,做1:1匹配绰绰有余;主索引采用身份证号,关键信息有”姓名、性别、年龄和乡镇地址“。然后考虑输出的结果的格式,Excel,表单中列入脑卒中患者的全部数据,最后增加一列存放匹配的对照者身份证号。

接下来开始动手编程,第一步引用pandas导入数据。其中路径前的"r"和中文前的"u"不可少,可能是因为我还在用Python2的关系。

# -*- coding: gbk -*-
#!/usr/bin/env python
# __author__ = 'PanJin'

import pandas as pd
case=pd.read_excel(r'D:\并发症数据库(实验室检测筛选).xls',sheet_name=u'心脑')
ctrl=pd.read_excel(r'D:\并发症数据库(实验室检测筛选).xls',sheet_name=u'对照(不包含肿瘤)')

动手分析之前一直有个担心,作为索引的身份证号是否会有重复的记录,果然我的担心应验了,查重发现健康个案的身份证号有4组是重复的(在Excel里用公式查的,所以没有上代码),同时发现8000多人中有部分因为失访,检查结果有大量缺失,于是和重复的身份证号进行了删除。(代码中的身份证号进行了脱敏处理)

ctrl_=ctrl[(ctrl.sfzh !='33042119320221####') & (ctrl.sfzh !='33072219560522####') & (ctrl.sfzh !='33042119381031####') & (ctrl.sfzh !='33042119390824####') & (ctrl.HDLC2 !='#NULL!')]

刚开始打算用pandas里的merge直接解决战斗的,但是发现问题想的太简单了,因为根据匹配条件”性别相同,乡镇地址相同,年龄相差3岁以内“,直接merge的结果一定会有很多一对多甚至多对多的笛卡尔积产生,而对这些笛卡尔积好像没有太好的自动化处理方案,因此我在开始就放弃了这种尝试。所以我的计划是采用Python里的for循环来解决。

解题思路如下:

首先从脑卒中患者清单中取第一条,在健康对照中按条件匹配所有适合的名单,然后取第一条(或者调用random函数来随机一下),已匹配的健康对照从大名单中删除,然后进行再取第二条脑卒中患者重复以上过程直至循环到最后。最终将形成3个名单,1.匹配完成名单;2.患者未匹配名单;3.健康对照未匹配名单。

另外考虑匹配优化的问题,我把这个循环分成了两轮,第一轮中匹配条件为”性别相同,乡镇地址相同,年龄相等“,第二轮中为”性别相同,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1:1病例对照匹配的Python实现步骤详解 的相关文章

随机推荐

  • 4.20/21实习总结:k8s

    文章目录 什么是k8s 是个软件系统 容器集群管理工具 提供了应用部署 规划 更新 维护的一种机制 1 k8s组件 2 k8s对象 都可以在yaml文件中作为一种API类型来配置 3 namespace名称空间 通过名称空间在同一个物理集群
  • Android开发技巧(三)—— 创建定时任务

    每种手机都有自己的休眠策略 Android手机在长时间不操作时会自动让CPU进入睡眠状态 这就导致JAVA原生Timer的定时任务无法运行 所以我们需要借助Alarm唤醒CPU 一 Alarm机制 Alarm借助了AlermManager类
  • React 常用生命周期函数

    文章目录 React 生命周期图示 创建 constructor render componentDidMount 更新 render componentDidUpdate prevProps prevState 卸载 componentW
  • P2597 [ZJOI2012]灾难【支配树】

    题目链接 这是一道支配树的模板题了 然后写一下我初见支配树的理解 第一次碰到支配树是在昨天的多校第三场的1002 当时我推了个拓扑排序加上LCA的求差 dp a dp b dp lca a b 来解这个问题 然后为了处理出来每个的dp值 我
  • caret教程10:随机森林示例

    我们今天给大家演示下caret包做随机森林分类的一个小例子 同时也给大家看看做预处理和不做预处理两种情况下的模型表现 加载R包和数据 rm list ls library caret Loading required package ggp
  • Jmeter分布式测试的各种坑

    第一坑 启动压力机的时候 直接 jmeter server 会报如下错误 错误原因 127 0 0 1是本机 一个回路地址 没有指定地址 正确的启动方式 启动命令加一个参数 IP地址写压力机对应的地址 jmeter server D jav
  • python爬虫之逆向破解_Python爬虫:一个反爬 JS 逆向分析的例子

    挺久没发爬虫相关的教程啦 今天给大伙分享一下关于网站反爬对请求参数值的加密分析例子 主要还是看看思路 定位加密点 在某网站中进行登录请求 简单抓下包 点击登录按钮之后 可以在浏览器的控制台中看到相关的请求 接着往下拉 可以看到 POST 请
  • 实时CPU设计

    Patmos with Chisel https github com t crest patmos
  • Wireshark使用详解

    文章目录 wireshark简介 抓包原理 抓包 抓包窗口介绍 封包详细信息 Packet Details Pane 过滤信息介绍 显示过滤 抓包过滤 高级功能 数据流追踪 wireshark简介 wireshark是捕获机器上的某一块网卡
  • smart doc:自动生成接口文档拓展

    smart doc 作为一个接口文档生成工具 可以根据代码的java doc注释 生成接口文档 同时已经对接到Torna接口平台 鉴于大家用的接口平台五花八门 Torna的功能可能不符合大家的需求 研究下是否可以基于smart doc 拓展
  • 百度UE富文本编辑器设置自适应大小和滚动条等

    其实真特么简单 一开始还试着自己设置 弄来弄去都不合适 最后发现你想要的人家其实都有 你只需要设置就好了 后知后觉啊 你想要的效果可能在文件夹下config js里边都有 只需要在界面中实例化页面的那行代码里边设置就好了 代码如下 var
  • ubuntu下redis安装配置

    为什么80 的码农都做不了架构师 gt gt gt ubuntu下redis安装配置 一 redis介绍 redis是一个key value存储系统 与memcached类似 但是解决了断电后数据完全丢失的现象 支持数据类型有string
  • 数学-麦克劳林公式

    麦克劳林公式是泰勒公式 在 记 的一种特殊形式 在不需要余项的精确表达式时 n阶泰勒公式也可写成 由此得近似公式 误差估计式变为 在麦克劳林公式中 误差 R x 是当x 0时比x 高阶的无穷小 若函数f x 在开区间 a b 有直到n 1阶
  • DiffusionDet: Diffusion Model for Object Detection

    DiffusionDet Diffusion Model for Object Detection 论文概述 不同之处 整体流程 论文题目 DiffusionDet Diffusion Model for Object Detection
  • C#连接sql的两种方法

    数据库连接 方法1 using System using System Collections Generic using System Linq using System Text using System Threading Tasks
  • H - Nine Packs Kattis - ninepacks

    题目链接 题意就是在a数组中找出x个数 b数组中找出y个数 且x个数之和等于y个数之和 本想着用暴力的写法 但是出来之后不对 因为此题并不是连续的 还可以跳着取数 下面是WA的代码 include
  • 基于Web的网络在线考试系统

    基于Web的网络在线考试系统 一 系统简介 本系统是一种基于Web的网络在线考试系统 各个模块主要从JSP Servlet JDBC JavaBean四部分技术角度出发搭建框架 其中Servlet是运行在服务器端的程序 被Web服务器 To
  • YARN 状态机的原理和使用

    有了异步处理 为什么还需要状态机 可以保存对象当前的状态 当接收到一个事件后 可以根据不同的状态 可以方便的决定怎么处理 如接收到用户发送的KILL事件时 当Job的状态为正在初始化时 只要把启动的进程kill就可以 当Job的状态为正在运
  • 快手app sig3 42位、48位参数分析

    免责任声明 任何可操作性的内容与本文无关 文章内容仅供参考学习 如有侵权 损害贵公司利益 请联系作者 会立刻马上进行删除 在抓包的时候 会发现有几个非常重要的参数 sig 和 sig3 然后sig参数的计算逻辑大概就是对请求url 后面的参
  • 1:1病例对照匹配的Python实现步骤详解

    这周接到一个活 因为某个课题研究需要 须把脑卒中患者的名单和一份健康人 对照 名单按照 性别相同 乡镇地址相同 年龄相差3岁以内 作为匹配条件进行1 1的匹配 现将思考及实现的过程逐一记录并在此分享 希望能给大家有所借鉴与帮助 拿到这份数据