第1章:Python基础与环境搭建
各位朋友,咱们开始聊《Python批次质控工具详解》这门课。第一件事儿,就是把Python这个吃饭的家伙给拾掇好。你想想看,做质控处理成百上千个批次文件,如果没有一个趁手的工具,那得累死。
Python为什么适合干这个?说白了,它语法简单、生态强大,尤其处理文本和表格数据,真的是天生神力。我个人第一次接触Python是在处理一批测序数据的时候,当时用Perl写脚本写了一周,后来同事用Python两天搞定,我当场就服了。
1.1 Python简介
Python诞生于1991年,作者是Guido van Rossum。这哥们儿希望创造一门易读、易写、功能强大的语言。事实证明他做到了。
做批次质控,我们主要用到Python这几个特长:
- 文本处理:正则表达式、字符串操作、文件读写,一条龙。
- 数据分析:pandas、numpy这类库,处理表格跟玩儿似的。
- 自动化脚本:用Python遍历几百个文件,几行代码就搞定。
- 可视化:matplotlib、seaborn,出图汇报必备。
其实很多生物信息学工具,比如FastQC、MultiQC,底层都用到了Python。你学会了基础,后面看这些工具的内部逻辑,也不会觉得神秘。
1.2 安装Python
好,咱们动手安装。去官网 python.org 下载对应版本。我建议用Python 3.8以上版本,3.11、3.12都行。
安装步骤很简单,但有一个地方要特别留意——
安装时一定要勾选:
☑ Add Python to PATH
这个勾选上了,你才能在命令行直接敲 python 命令。我当时第一次装的时候就忘了勾,结果怎么敲都提示找不到命令,气得够呛。
验证安装是否成功,打开命令行(Windows用cmd,macOS/Linux用终端),敲:
python --version
Python 3.11.5
能看到版本号,说明装对了。
py -0(Windows)或 python3 --version(macOS/Linux)来区分管理。
1.3 IDE选择:Jupyter vs VS Code
写Python代码,总得有个编辑器。我个人习惯在不同场景用不同工具。你想想看,锯木头用锯子,拧螺丝用改锥,工具选对了,干活才顺手。
| 特性 | Jupyter Notebook | VS Code |
|---|---|---|
| 适合场景 | 数据分析、探索性开发、教学 | 大型项目、脚本开发、调试 |
| 代码执行方式 | 按单元格执行,结果即时展示 | 全文件执行或逐行调试 |
| 可视化支持 | 内置图表展示,非常方便 | 需要插件或外部窗口 |
| 版本控制 | 不太友好(.ipynb是JSON格式) | 原生支持Git,差异对比清晰 |
| 上手难度 | 极低,5分钟上手 | 中等,需要配置一下 |
做批次质控的时候,我推荐这样搭配:
- 探索阶段:用Jupyter。看看数据长什么样,哪些样本有问题,画几张分布图。
- 生产阶段:用VS Code。写成可复用的脚本或模块,配上参数解析,一劳永逸。
咱们课程里的代码,两种环境都能跑。我会尽量提供完整的脚本文件,方便你们直接复用。
1.3.1 安装Jupyter
如果你用的是Anaconda发行版,Jupyter已经预装了。否则,用pip安装:
pip install jupyter notebook
jupyter notebook
执行后浏览器会自动打开,出现文件列表界面。新建一个Python 3笔记本,就可以写代码了。
为什么要学Jupyter?
做质控分析时,你经常需要反复试错:过滤阈值设多少合适?异常值怎么判定?Jupyter的交互式体验,可以让你边改边看结果,效率非常高。
1.3.2 配置VS Code
VS Code是微软出品的免费编辑器,现在已经是Python开发的标配了。安装好之后,装几个插件:
- Python(微软官方,提供语法高亮、代码补全、调试)
- Jupyter(可以在VS Code里直接打开.ipynb文件)
- Code Runner(一键运行代码,按
Ctrl+Alt+N就行)
然后设置一下Python解释器路径。按 Ctrl+Shift+P,输入 Python: Select Interpreter,选择你刚安装的Python版本。
1.4 基本语法快速回顾
咱们不是零基础教程,但一些关键语法还是要快速过一遍。毕竟后面写质控脚本会反复用到。
1.4.1 变量与数据类型
Python是动态类型语言,变量不需要声明类型,直接赋值就行。
# 数值
sample_count = 96
mean_quality = 35.8
# 字符串
sample_name = "SAMPLE_001"
fastq_path = "/data/raw/sample.fastq"
# 布尔值
is_pass = True
is_fail = False
# 列表
samples = ["S001", "S002", "S003"]
qualities = [35.2, 36.1, 34.8]
# 字典
sample_info = {
"S001": {"reads": 1500000, "q30": 92.5},
"S002": {"reads": 1200000, "q30": 88.3}
}
1.4.2 条件与循环
这两个结构是写质控脚本的核心。你会经常用到:
# 条件判断
if mean_quality >= 30:
print(f"{sample_name} 质控通过")
is_pass = True
elif mean_quality >= 20:
print(f"{sample_name} 需要复查")
is_pass = False
else:
print(f"{sample_name} 不合格")
is_pass = False
# for循环遍历样本
for sample in samples:
print(f"正在处理:{sample}")
# while循环(用得少,但某些轮询场景有用)
retry = 0
while retry < 3:
try:
process_sample(sample)
break
except Exception:
retry += 1
嗯,这里要注意:列表推导式在批量处理时特别好用。比如过滤掉不合格的样本:
pass_samples = [s for s in samples if qual_dict[s] >= 30]
一行代码替代一个for循环加if判断,简洁又高效。
1.4.3 函数与模块
写质控脚本,一定要学会封装函数。不要把所有代码都堆在全局作用域里,那样调试起来会非常痛苦。
def check_quality(fastq_path, min_q=30):
"""
检查单个fastq文件的碱基质量
返回:达标率
"""
# 这里的代码我们会后续章节实现
pass
# 调用
result = check_quality("/data/S001.fastq", min_q=30)
print(result)
check_、parse_、compute_。参数加上类型提示,以后自己看也明白。
模块就是 .py 文件,里面可以放多个函数。用 import 引入其他文件或第三方库。
import os
import json
import pandas as pd
from pathlib import Path
pathlib 是Python 3.4之后的路径处理神器,建议你们尽快熟悉。比原来的 os.path 好用不止一倍。
1.4.4 文件读写
做质控,读写文件是基本功。咱们最常用的是读取CSV、TSV这类表格文件:
# 传统方式(用内置csv模块)
import csv
with open("qc_results.csv", "r") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["sample_id"], row["q30"])
# 推荐方式(用pandas)
import pandas as pd
df = pd.read_csv("qc_results.csv")
print(df.head())
# 写入结果
df.to_csv("filtered_results.csv", index=False)
我建议你从现在开始,所有表格读写都用pandas。它不仅能读,还能做各种筛选、分组、统计,后面章节我们会大量使用。
1.5 本章总结要点
好啦,第一章的内容就到这里。说白了,这一章就是给你铺好路:
- 环境搭好:Python 3.8+,配好PATH,能跑就行。
- 工具选对:Jupyter用于探索,VS Code用于开发。
- 语法过一遍:变量、循环、函数、文件读写,后面每天都要用。
- 别怕踩坑:版本不对、路径不对、解释器选错,都是正常的。遇到问题就用搜索引擎,基本都能解决。
我个人的建议是:把这章的代码都亲手敲一遍,别复制粘贴。敲的时候想想每行代码是干什么的。这样做完第一章,你后面学起来会快一倍。