使用 Ensembl API 查询 SNP 在不同人群中的分布
Ensembl REST API 的端点和测试用例可以在[这里](https://rest.ensembl.org/)找到。本文以 R 语言为例,介绍如何使用 Ensembl API 查询特定单核苷酸多态性(SNP)的分布情况,包括单个和批量查询的实现过程。
为什么要查询 SNP 的分布?
SNP(单核苷酸多态性)是基因组中常见的变异形式,对研究基因与表型的关系、疾病关联分析和个性化医疗至关重要。SNP 在不同人群中的分布往往因种群历史、地理分布和自然选择而异,因此理解这些分布特征是遗传学研究的重要任务。
准备工作
需要加载几个 R 包来完成请求和数据处理:
单个 SNP 的查询
API 调用和数据处理
以下代码实现了查询单个 SNP (`rs3762444`) 的频率分布:
代码解析
- **API URL 构建:**
- `server` 是 Ensembl API 的基础 URL。
- `ext` 是指定资源的扩展路径,包括要查询的 SNP ID(`rs3762444`)和额外参数(`pops=1` 表示返回人群频率信息)。
- **发送 GET 请求:**
- 使用 `GET` 方法向服务器发送请求,并确保请求成功(`stop_for_status`)。
- **数据解析:**
- `response` 包含服务器返回的 JSON 数据。
- 提取 `populations` 字段(包含频率数据)并将其转换为数据框格式。
输出结果
查询结果 `pg` 是一个数据框,展示了 `rs3762444` 在不同人群中的频率分布。例如:
| Population Name | Allele | Frequency | | --------------- | ------ | --------- | | 1000GENOMES:AFR | T | 0.123 | | 1000GENOMES:EUR | C | 0.789 |
批量查询多个 SNP
当需要查询多个 SNP 时,可以使用 POST 请求。以下代码实现了批量查询:
代码解析
- **构建请求体:**
- 使用一个列表 `body` 指定要查询的多个 SNP ID。
- 将列表转换为 JSON 格式(`toJSON`)。
- **发送 POST 请求:**
- 使用 `POST` 方法发送请求,并指定 `body`。
- 设置 HTTP headers,包括 `content_type` 和 `accept`。
- **解析结果:**
- `response` 是一个列表,包含每个 SNP 的查询结果。
- 遍历结果,提取 `populations` 字段并转换为数据框。
输出结果
批量查询结果 `pg` 是一个列表,其中每个元素对应一个 SNP 的频率数据。例如:
- `pg[[1]]` 是 `rs3762444` 的频率分布。
- `pg[[2]]` 是 `rs284262` 的频率分布。
每个数据框的结构类似于单个查询的结果。
完整代码
Loading...


