基因突变VCF分析系统 📅 2026/6/30 23:32:21 项目背景ANU研究生专题项目给定VCF基因突变文件和评分算法写Python脚本分析致病风险开发包括数据库、ETL管道、API服务和前端看板的数据平台。GitHub 仓库https://github.com/LuckLuffy/gene-mutation-platform项目流程读取VCF文件并解析每个文件里记录的基因突变信息然后用指定算法计算每个患者的疾病风险评分最后用 Z-Score 分出是健康还是患病。核心问题解析并记录VCF文件数据实现查筛改比等功能开发网页前端检查数据质量记录运行结果关键词ETL、数据库、API、前端整体结构├── 数据库层 (db/) ← 把结果存进数据库 ├── ETL管道 (etl/) ← 把处理流程拆成 Extract → Transform → Load ├── API服务 (api/) ← 用FastAPI暴露接口浏览器就能访问 ├── 前端看板 (frontend/) ← 用图表展示数据 └── Docker部署 ← 用docker-compose一键启动所有服务第1步数据存储解析VCF文件数据结果存到数据库里。-- 6张表的ER关系patients-- 每个VCF文件对应一个患者├── gene_mutations-- 一个患者有多条基因突变记录 (外键 → patients)├── predictions-- 一个患者有一条预测结果 (外键 → patients)└── subnetwork_burdens-- 基因互作网络中的突变负荷 (外键 → patients)data_quality_logs-- 每次质量检查的记录 (独立表)etl_pipeline_logs-- 管道每次运行的记录 (独立表)为什么分6张表而不是1张大宽表如果不分表把所有信息塞一起患者的名字在每一行突变里都要重复一遍。更新一个患者信息要改N个地方。分表之后每张表只描述一个实体患者是谁、有哪些突变、预测结果是什么、质量检查怎么样。表之间通过外键关联。支持三种数据库开发的时候用 SQLite — 不需要装任何东西一个文件就是数据库。生产环境可以切到 PostgreSQL同时做了 MySQL 的兼容因为 Flink CDC 演示需要 MySQL 作为源端。# db/connection.py 的核心逻辑ifdb_typesqlite:engine_urlfsqlite:///{database}.dbelifdb_typepostgresql:engine_urlfpostgresql://{user}:{password}{host}:{port}/{database}SQLAlchemy 做的抽象层切数据库只改配置文件不用动业务代码。第2步ETL管道实现三层分离的ETL管道Extract Transform Load ┌──────────┐ ┌──────────────────┐ ┌──────────┐ │ 读VCF文件 │ → │ 1.清洗 (去脏) │ → │ 写patients│ │ 解析INFO │ │ 2.校验 (质量检查) │ │ 写mutations│ │ 返回字典 │ │ 3.特征 (算评分) │ │ 写predictions│ └──────────┘ └──────────────────┘ │ 写质量日志 │ └──────────┘对应代码结构etl/ ├── extractors/vcf_extractor.py → Extract ├── transformers/data_cleaner.py → Transform: 清洗 ├── transformers/data_validator.py → Transform: 校验 ├── transformers/feature_engineer.py → Transform: 特征工程 ├── loaders/db_loader.py → Load └── pipeline.py → 编排这5步YAML 配置驱动致病阈值放到pipeline_config.yamlscoring:cadd_threshold:20sift_threshold:0.05polyphen_threshold:0.85primateai_threshold:0.7想调试模型效果改YAML就行不用碰代码。第3步数据质量设置DataValidator对清洗后的数据做5项检查classDataValidator:defvalidate(self,data):checks{null_check:self._check_nulls(data),# CADD等字段是否缺失range_check:self._check_ranges(data),# AF是否在[0,1]、CADD是否≥0duplicate_check:self._check_duplicates(data),# 有没有重复突变记录distribution_check:...,# 各字段分布是否合理completeness_check:...,# 必要字段是否齐全}检查结果-- 每次检查的结果写入 data_quality_logs 表永久可追溯INSERTINTOdata_quality_logs(table_name,check_type,failed_rows,total_rows,pass_rate)VALUES(gene_mutations,null_check,3,1616,0.998);跑完管道后在数据库里能看到哪次检查、查了什么、多少条没过、通过率多少。管道运行日志同理记录到etl_pipeline_logs表里。实现数据溯源。第4步API服务用 FastAPI 暴露 RESTful 接口后浏览器打开http://localhost:8000/docs就能调所有功能。api/ ├── main.py ← FastAPI入口注册路由 ├── routers/ ← 每个资源一个router文件 │ ├── patients.py → /api/v1/patients │ ├── mutations.py → /api/v1/mutations │ ├── predictions.py → /api/v1/predictions │ └── data_quality.py → /api/v1/data-quality ├── schemas/ ← Pydantic数据模型自动校验请求格式 └── services/ ← 业务逻辑预测服务、查询服务为什么分 router 和 service 两层router 只负责收HTTP请求、调service、返回响应。service 负责具体的业务逻辑。好处是——测预测逻辑时不需要启动服务器直接调prediction_service.py改预测算法也只改 service不影响 router 的接口格式Swagger 文档FastAPI 自带 Swagger UI访问/docs就能看到所有接口支持在线调试自动生成接口文档无需手动维护。第5步前端看板纯静态 HTML/CSS/JS不需要构建工具直接浏览器打开。5个Tab标签页标签展示内容仪表盘统计卡片(患者数/突变数/预测数/质量等级) Chart.js渲染的环图柱状图患者管理患者列表、分页、按组筛选、点开展示详情突变浏览1616条突变分页表格、按基因搜索、统计面板风险预测表单输入患者编号 → 调用API → 展示预测结果(评分/等级/置信度)数据质量质量概览、检查历史、ETL管道运行记录怎么和后端通信前端通过 HTTP 请求调 FastAPI 的接口// frontend/js/api.jsconstAPI_BASEhttp://localhost:8000;asyncfunctiongetPatients(page1,limit20){consturl${API_BASE}/api/v1/patients/?page${page}limit${limit};constresponseawaitfetch(url);constdataawaitresponse.json();returndata;}因为是跨域请求file://访问http://localhost:8000后端需要加 CORS 中间件否则浏览器会拦截。第6步Docker部署用 Docker Compose 把整套环境打包# docker-compose.yml 核心服务services:api:# FastAPI 应用frontend:# Nginx 托管前端静态文件postgres:# 数据仓库mysql:# CDC 源端演示用docker-composeup-d# 一条命令启动所有服务Dockerfile实现装 Python 依赖、复制代码、暴露端口。核心算法简述评分算法由老师指定。1. 共识评分四个预测工具CADD、PolyPhen、SIFT、PrimateAI各自给一个分数如果四个都认为有害总分×3consensus0.25*CADD_norm0.25*PolyPhen0.25*(1-SIFT)0.25*PrimateAIif四个都达标:consensus*3.0SIFT 要反转1-SIFT是因为它越小越有害和其他三个方向相反。2. 线性回归score0.05*(1-AF)0.12*(10-constraint)0.28*consensus1.0*phenotypic表型(phenotypic)的系数最大(1.0)因为已知致病优先级最高。3. Z-Score 分类不设绝对阈值而是算这个人的分数离哪组健康/疾病更近z_healthy|个人分-健康组均值|/健康组标准差 z_disease|个人分-疾病组均值|/疾病组标准差# 哪个Z-score小就分到哪组技术栈清单模块用的什么为什么选它数据库SQLite(开发) / PostgreSQL(生产) / MySQL(CDC源)SQLite零配置方便开发数据处理Python (纯标准库sklearn)个人习惯API框架FastAPI写代码少、自动生成文档、性能够用前端纯HTML/CSS/JS Chart.js不用学框架能跑就行容器化Docker Docker Compose环境打包便于移动项目反思ETL三层分离开发便利后期改动— 换个数据源只改提取层调算法只改转换层YAML配置外置— 改阈值不用翻代码FastAPI Pydantic— 自动校验减少逻辑冗余Docker Compose— 打包便于移动如果对你有帮助可以给个 Star ⭐欢迎提 Issue 讨论。GitHubhttps://github.com/LuckLuffy/gene-mutation-platform