临床 Python 进阶路线图
⌕ /
路线图 › 开始

第 00 章 · 学习路线图与如何使用本项目

读者画像:你是一名有 SAS 编程经验的临床统计程序员(SDTM/ADaM/TLF 日常), Python 只学过一遍语法、现在大部分已经遗忘。 目标:用最短路径把 Python 变成你的第二生产工具,并具备开发 AI Agent 的基础能力。


0.1 先给你一个好消息:你不是从零开始

大多数 Python 教程把初学者当作"什么都不会的人",于是花了大量篇幅讲变量是什么、循环是什么。 对你来说那是浪费时间——你早就掌握了编程思维,只是换了一套语法和运行环境。

先看清楚你已有的资产:

你已经掌握的 SAS 能力 在 Python 世界的对应物 迁移难度
DATA 步逐行处理、if/then/else、output for 循环 + if;进阶:np.where / df.loc ★★☆
数据集(数据集 = 行 + 列 + 标签 + 格式) pandas DataFrame ★☆☆
PROC SQL pandas query / merge / groupby;或 SQLite / duckdb ★☆☆
PROC SORT / nodupkey df.sort_values() / df.drop_duplicates() ★☆☆
PROC MEANS / PROC FREQ df.groupby().agg() / value_counts() / crosstab ★★☆
PROC TRANSPOSE df.pivot() / df.melt() ★★☆
MERGE / SET pd.merge() / pd.concat() ★★☆
%MACRO / %LET 函数(def)+ f-string + 配置文件 ★★★
FORMAT / label pd.Categorical / pyreadstat 的 metadata ★★☆
数组 ARRAY numpy 数组 / 列表推导式 ★★☆
自动宏变量 _N_ &sysdate 内置函数 / datetime / enumerate ★☆☆
SAS 日志与 %put 调试 logging 模块、print、pdb / 断点 ★★☆

真正需要重新建立的只有三件事:

  1. 向量化思维——Python 不是"逐行循环",而是"整列一起算"。这是最大的思维转换。
  2. 对象与方法——SAS 里 PROC MEANS data=a; 是"过程作用在数据集上"; Python 里是 a.groupby(...).mean(),"数据自己会做事情"。主语变了。
  3. 工程化习惯——虚拟环境、包管理、Git、单元测试。SAS 世界里通常不需要你操心这些, Python 世界里不管好这些寸步难行。

📌 本章之后,请先读 速查表—— 它是一页纸的语法映射,遇到不认识的写法随时回来查,比翻教程快。


0.2 为什么现在就必须学 Python(而不是"以后有空再说")

不是"多一门语言多条路"这种安慰剂,而是三条已经发生的行业事实:

  1. 监管口子已经打开。 FDA 2021 年的 Statistical Software Clarifying Statement 明确表示:提交中使用经验证的开源工具是可以接受的。这意味着"只能用 SAS"不再是硬约束。
  2. 岗位描述在变。 近两年 PharmaSUG / PHUSE 上关于 Python 的论文从"为什么学" 变成了"怎么落地"——例如 PharmaSUG 2026 的 ET-223 Python as a Cost-Effective Solution for Clinical Statistical Programming 已经在演示完整的 ADaM → TFL 报表工作流。
  3. AI Agent 只能长在 Python 上。 你后续想做的 Agent 开发, 生态(LangChain、OpenAI SDK、MCP、各类向量库)几乎清一色 Python。 SAS 里没有这条路,这是硬边界。

0.3 路线图:四个阶段,18 章

文本
┌──────────────────────────────────────────────────────────────────────┐
│ 阶段 1 · 重新长出语法肌肉(第 1–5 章)   投入最少,回报最快            │
│   环境搭建 → 语法速通 → 数据结构 → 控制流/函数 → 文件与批处理自动化    │
│   交付物:能写出自动重命名/批量比对/汇总文件的 Python 小脚本           │
├──────────────────────────────────────────────────────────────────────┤
│ 阶段 2 · 数据分析核心(第 6–10 章)     这是你 80% 的日常工作         │
│   NumPy 向量化 → pandas 入门 → DATA步/PROC SQL 对照 → 合并重塑 →      │
│   日期/缺失值/格式/数据质量                                            │
│   交付物:能把一段 PROC SQL + DATA 步重写成 pandas                    │
├──────────────────────────────────────────────────────────────────────┤
│ 阶段 3 · 临床实战(第 11–14 章)        真正"能上手干活"             │
│   读 XPT/SAS7BDAT → SDTM 处理实战 → ADaM 衍生与 TFL → 统计与可视化    │
│   交付物:用 CDISC 试点数据跑出 Table 1 / AE SOC-PT 表 / 移位表       │
├──────────────────────────────────────────────────────────────────────┤
│ 阶段 4 · 进阶与 Agent(第 15–17 章)    差异化竞争力                 │
│   AI 辅助编程与 SAS→Python 迁移 → Agent 开发入门 → 工程化与合规考量   │
│   交付物:一个能读临床数据、做 QC 检查、给出结论的 Agent              │
└──────────────────────────────────────────────────────────────────────┘

章节清单与预估投入

章 标题 核心产出 建议投入
00 学习路线图与如何使用本项目 — 20 min
01 环境搭建与思维转换 可运行的 Python 环境 1.5 h
02 基础语法速通(SAS 对照) 读懂并写出基础脚本 2 h
03 核心数据结构:list / dict / str 组织复杂数据 2.5 h
04 控制流、函数、模块与异常 可复用的函数 2.5 h
05 文件与批处理自动化 自动化脚本 2 h
06 NumPy 与向量化思维 摆脱逐行循环 2.5 h
07 pandas 入门:DataFrame 就是数据集 数据读取与探查 3 h
08 数据操作对照:DATA 步 / PROC SQL → pandas 完整重写日常逻辑 4 h
09 合并、重塑与分组汇总 复刻 MERGE/TRANSPOSE/MEANS 3 h
10 日期、缺失值、格式与数据质量 处理真实脏数据 3 h
11 读取 XPT/SAS7BDAT 与临床数据结构 不装 SAS 也能读数据 2 h
12 SDTM 数据处理实战 SDTM 体检与衍生 4 h
13 ADaM 衍生与 TFL 报表生成 产出可用报表 4 h
14 统计分析与可视化 描述统计与图形 3 h
15 AI 辅助编程与 SAS→Python 迁移 让 LLM 帮你干活 2 h
16 Agent 开发入门:从 API 到临床 QC Agent 一个能跑的 Agent 5 h
17 工程化与后续进阶 可维护的项目 2 h

不要按顺序每一章都读完再动手。 建议节奏: 第 1–5 章连续过一遍(打地基),第 6–10 章每章都跟着敲代码, 第 11 章之后直接进 cases/ 目录,卡住了再回查对应章节。


0.4 项目的目录结构与查阅方式

文本
clinical-python-roadmap/
├── README.md                  ← 项目主页:定位、快速开始、导航
├── docs/                      ← 教程正文(你正在读第 00 章)
│   ├── 00-...md ... 17-...md
├── cheatsheets/
│   └── SAS-to-Python速查表.md ← 一页纸映射表,日常最高频
├── cases/                     ← 实战案例(可运行的 .py + 说明)
│   ├── case01_数据体检.py
│   ├── case02_人口学表.py
│   ├── case03_不良事件汇总表.py
│   ├── case04_实验室移位表.py
│   ├── case05_ADSL衍生.py
│   ├── case06_批处理自动化.py
│   └── case07_临床数据QC_Agent.py
├── resources/                 ← 权威资料索引(GitHub / PharmaSUG / PHUSE / …)
├── data/
│   ├── samples/               ← 已转好的小 CSV(开箱即用,无需下载)
│   └── raw/                   ← XPT 原始数据(运行下载脚本得到,不入库)
├── scripts/
│   └── download_data.py       ← 多通道数据集下载器(含国内镜像降级)
└── requirements.txt

三种使用方式:

你想… 去哪里
系统学习 docs/ 按顺序读
快速查语法 cheatsheets/SAS-to-Python速查表.md
直接抄能用的代码 cases/,每个案例都独立可运行

0.5 关于数据集:为什么用 CDISC 试点数据

本项目全部实战案例基于 CDISC Pilot Project(CDISCPILOT01)——

  • 2007 年 CDISC 公开发布的经 FDA 审阅的完整电子提交包;
  • 阿尔茨海默症双盲试验,含完整 SDTM(DM/AE/CM/EX/LB/VS/QS…) 与 ADaM(ADSL/ADAE/ADTTE/ADLBC…);
  • 文件格式为 SAS v5 传输格式(.xpt),Python 可直接读取,不需要安装 SAS;
  • 完全公开、可自由使用,不涉及任何真实受试者隐私(已去标识化)。

仓库地址:https://github.com/cdisc-org/sdtm-adam-pilot-project

本项目 data/samples/ 已提供转换好的 CSV 小样本, 克隆下来就能直接跑案例,不需要联网下载。 需要完整数据时运行 python scripts/download_data.py --core。


0.6 学习原则(比内容更重要)

  1. 必须动手敲。 读懂代码和写出代码之间的差距,比你想象的大 5 倍。 每章的代码请自己敲一遍,不要复制粘贴。
  2. 以"重写"代替"学习"。 最有效的练习是:找一段你熟悉的 SAS 程序, 用 Python 重写一遍,然后对比结果是否一致。这也正是第 08 章的作业。
  3. 允许自己忘记。 你的目标是"知道有这个东西 + 知道去哪查", 而不是背下所有 API。速查表和官方文档才是你的长期记忆。
  4. 不要纠结于完美。 Python 有很多"更好的写法", 但在你只求完成任务时,能跑通且结果正确的写法就是好写法。 优化是第三遍重写时才做的事。

0.7 学完之后,你应该能做到

  • [ ] 用 pandas 把一个 SDTM 域读进来、体检、清洗、衍生新变量
  • [ ] 把一段 PROC SQL + DATA 步逻辑用 Python 等价实现,结果可对照
  • [ ] 从 ADaM 数据生成一张符合行业惯例的人口学特征表(Table 1)
  • [ ] 写脚本批量处理上百个文件(重命名、比对、汇总)
  • [ ] 用 LLM API 搭一个能读临床数据、做检查、写结论的 Agent
  • [ ] 在 Git 上管理自己的分析代码,做到可复现

下一章 → 第 01 章 · 环境搭建与思维转换