《Python Essentials for Biomedical Data Analysis: An Introductory Textbook》
药代动力学(PK)建模可描述并预测药物在体内的吸收、分布、代谢与排泄过程。这类模型为理解药物在血浆和组织中浓度随时间变化的规律提供了定量框架,帮助研究者优化给药方案,并预测治疗效应与毒性反应 [28]。Python提供了一系列工具用于实现和模拟PK模型,能高效可视化并阐释药物的体内行为。
本节将介绍房室PK模型、药物吸收-分布-代谢-排泄(ADME)过程建模,演示如何使用Python模拟一级动力学与零级动力学,并提供示例代码说明PK模型的实现方法。
11.4.1 房室模型
房室模型将人体抽象为一个或多个相互连通的房室,假设每个房室内的药物浓度均匀分布 [29-31]。该类模型将复杂的生物过程简化为可处理的数学表达形式,其复杂度取决于房室数量:
- 单室模型:最简单的模型,将整个机体视为单一均匀房室 [32]。药物给药后进入该房室,均匀分布并最终被消除。此模型适用于在体内快速达到分布平衡的药物。
- 双室模型:将人体分为中央室(如血浆、高灌注器官)和外周室(如肌肉、脂肪组织) [33]。药物在两室间以不同速率转运,能更精准地描述存在缓慢分布相的药物。
- 多室模型:针对分布不均或动力学特征复杂的药物,需采用多于两个房室的模型 [34]。每个新增房室代表一组具有相似药代动力学特性的组织。
11.4.2 吸收、分布、代谢与排泄(ADME)建模
ADME建模聚焦于决定药物体内命运的核心过程,包括:
- 吸收:药物进入体循环的过程。可采用一级动力学(吸收速率与药物浓度成正比)或零级动力学(吸收速率恒定)建模。
- 分布:药物在全身体液和组织中的扩散过程。影响因素包括血流量、组织通透性、血浆蛋白结合率等。
- 代谢:药物的生化转化过程(主要发生在肝脏),将药物转化为水溶性更高的代谢产物,便于排泄。
- 排泄:药物及其代谢产物从体内清除的过程,主要通过肾脏(尿液)或胆道系统(粪便)完成。
对这些过程建模,可模拟不同条件下药物的浓度-时间曲线。
11.4.3 一级动力学与零级动力学
代码示例:GitHub:https://github.com/sn-code-inside/BioPy11.4.3
药物的吸收与消除动力学可通过不同方程建模:
一级动力学
药物吸收或消除速率与药物浓度成正比,是大多数药物的动力学特征。数学表达式为:
其中, 为药物浓度, 为时间, 为速率常数。
求解该方程可得:
其中, 为初始浓度。
模拟一级消除过程可呈现药物浓度随时间呈指数衰减的特征(见图11.1)。

图11.1 一级消除动力学模拟图:药物浓度随时间呈指数下降。该曲线展示了一级消除条件下,中央室药物浓度(mg/L)随时间(小时)的衰减过程。消除速率与剩余药物浓度成正比,最终呈现平滑的指数下降趋势。
代码:
import numpy as npimport matplotlib.pyplot as plt# 参数设置kel = 0.3# 消除速率常数(每小时)C0 = 50# 初始浓度(mg/L)time = np.linspace(0, 10, 100)# 计算不同时间点的药物浓度concentration = C0 * np.exp(-kel * time)# Plottingplt.figure(figsize=(8, 5))plt.plot(time, concentration, label='First-Order Elimination')plt.xlabel('Time (hours)')plt.ylabel('Concentration (mg/L)')plt.title('First-Order Kinetics Simulation')plt.legend()plt.grid(True)plt.show()
零级动力学
药物吸收或消除速率恒定,与药物浓度无关 [35]。该动力学特征常见于限速过程达到饱和的情况(如药物吸收受制剂限制)。数学表达式为:
零级动力学方程的解为:
零级动力学虽不常见,但可出现在恒速输注给药或代谢通路饱和的场景中。模拟零级消除过程可呈现药物浓度线性衰减的特征(见图11.2)。

图11.2 零级消除动力学模拟图:药物浓度随时间呈线性下降。该曲线展示了零级消除条件下,药物浓度(mg/L)随时间(小时)的变化过程,其消除速率恒定且与剩余药物浓度无关。这种线性衰减是零级过程的典型特征,常见于饱和动力学或通过固定容量机制消除的场景。
代码:
import numpy as npimport matplotlib.pyplot as plt# 参数设置k0 = 5# 零级速率常数(mg/L·小时)C0 = 50# 初始浓度(mg/L)time = np.linspace(0, 10, 100)# 计算不同时间点的药物浓度concentration = C0 - k0 * timeconcentration[concentration < 0] = 0# 浓度不能为负值# Plottingplt.figure(figsize=(8, 5))plt.plot(time, concentration, label='Zero-Order Elimination')plt.xlabel('Time (hours)')plt.ylabel('Concentration (mg/L)')plt.title('Zero-Order Kinetics Simulation')plt.legend()plt.grid(True)plt.show()
11.4.4 药代动力学模型的实现
代码示例:GitHub:https://github.com/sn-code-inside/BioPy11.4.4
本节将使用Python实现一个简化的单室药代动力学模型,该模型包含一级吸收和一级消除过程,用于模拟口服给药后药物的浓度-时间曲线,同时考虑药物吸收入血和体内消除两个过程(均遵循一级动力学)。
单室模型假设机体为单一均匀房室,药物在房室内均匀分布。对于口服给药,药物首先从胃肠道吸收入体循环,随后被消除。
中央室(血浆)中药物浓度的变化速率由以下微分方程描述:
吸收阶段:
其中: = 胃肠道内剩余药物量 = 一级吸收速率常数
消除阶段:
其中: = 血浆药物浓度 = 表观分布容积 = 一级消除速率常数
本模型假设:吸收和消除均遵循一级动力学;单次给药;药物完全吸收(生物利用度F=1)。
示例代码:口服给药的单室模型
import numpy as npfrom scipy.integrate import odeintimport matplotlib.pyplot as plt# 定义包含一级吸收和消除的单室模型defone_compartment_model(y, t, ka, ke): A_gut, C_plasma = y dA_gut_dt = -ka * A_gut # 胃肠道房室药物量变化速率 dC_plasma_dt = (ka * A_gut) / Vd - ke * C_plasma # 血浆房室药物浓度变化速率return [dA_gut_dt, dC_plasma_dt]# 模型参数Dose = 500# 给药剂量(mg)ka = 1.0# 吸收速率常数(1/小时)ke = 0.5# 消除速率常数(1/小时)Vd = 50# 表观分布容积(L)# 初始条件A_gut0 = Dose # 胃肠道初始药物量(mg)C_plasma0 = 0# 初始血浆药物浓度(mg/L)y0 = [A_gut0, C_plasma0]# 时间点(小时)time = np.linspace(0, 24, 1000)# 使用odeint求解微分方程solution = odeint(one_compartment_model, y0, time, args=(ka, ke))A_gut = solution[:, 0] # 提取胃肠道药物量C_plasma = solution[:, 1] # 提取血浆药物浓度# 绘制浓度-时间曲线# Plot the concentration vs. time curveplt.figure(figsize=(10, 6))plt.plot(time, C_plasma, label='Plasma Concentration')plt.xlabel('Time (hours)')plt.ylabel('Concentration (mg/L)')plt.title('One-Compartment PK Model with Oral Administration')plt.legend()plt.grid(True)plt.show()
本示例生成的图表展示了单次口服给药后24小时内的血浆药物浓度变化(见图11.3):
- 吸收阶段:药物从胃肠道吸收入血,血浆浓度初始上升;
- 达峰时刻:吸收速率与消除速率相等时,血浆浓度达到峰值;
- 消除阶段:随着吸收过程逐渐减弱,消除速率超过吸收速率,血浆浓度开始下降。

图11.3 口服给药、一级吸收和消除的单室PK模型模拟血浆浓度-时间曲线。该曲线显示药物吸收阶段血浆浓度初始上升,达到峰值浓度(Cmax)后,因消除过程逐渐下降。这一特征曲线反映了单室系统中药物吸收、分布和消除的动态过程。X轴为时间(小时),Y轴为血浆药物浓度(mg/L)。