Python 入门学习¶
Python 是团队开展数据整理、生物信息学分析、流程开发和人工智能研究时最常用的编程语言之一。新生入组后,应优先掌握 Python 的基本用法,能够独立编写、运行和修改简单的数据处理脚本。
入门阶段不要求系统掌握 Python 的全部内容,也不建议同时学习过多教材。选择一套适合自己的材料,在较短时间内完成基础学习,并尽快通过实际任务巩固即可。
建议完成时间
Python 基础学习建议控制在 2—4 周,原则上不要超过一个月。
一、学习目标¶
完成本阶段学习后,应能够:
- 在 Linux 环境中运行 Python 程序;
- 理解变量、列表、字典、条件判断和循环;
- 编写和调用简单函数;
- 读取和写入文本文件;
- 使用 Pandas 处理表格数据;
- 根据报错信息定位常见问题;
- 将分析过程整理为可以重复运行的脚本;
- 使用虚拟环境管理项目依赖;
- 使用 Git 保存和管理代码;
- 独立完成简单的生物信息学数据处理任务。
二、学习资料¶
下面的材料不需要全部学习。根据自己的习惯,选择其中一套作为主线即可。
1. 书籍¶
推荐书目:
- 《Python 编程:从入门到实践(第 3 版)》
- 《Python 学习手册(第 4 版)》
- 《流畅的 Python》
对于没有编程基础的新生,建议优先选择《Python 编程:从入门到实践》。
《Python 学习手册》内容较全面,可以作为后续查询资料使用。
《流畅的 Python》不适合作为第一本入门教材,建议具备一定基础后再阅读。
2. 在线教程¶
在线教程适合边看边练。遇到不理解的语法时,可以返回相应章节查询,不必逐字阅读全部内容。
3. 视频课程¶
可以参考以下视频,也可以自行检索其他资源:
选择视频课程时,建议注意:
- 使用 Python 3;
- 包含基本语法、函数和文件读写;
- 包含 NumPy 和 Pandas 的基础内容;
- 课程时间不宜过长;
- 尽量跟随课程独立完成示例,而不是只观看视频。
视频只是辅助材料,不能代替实际编程。
三、学习建议¶
1. 选择一套主线材料¶
书籍、在线教程和视频课程选择其中一种作为主要学习材料即可。
不要在多套课程之间反复切换,否则容易花费大量时间比较课程,却没有真正开始编程。
遇到不清楚的内容时,再使用其他资料补充查询。
2. 基础学习时间不宜过长¶
Python 入门学习建议控制在两到四周,最长不要超过一个月。
入门阶段的目标是能够使用 Python 解决实际问题,而不是记住所有语法。许多知识只有在真正使用时才能理解。
3. 每学习一个知识点都要动手¶
学习过程中,建议按照以下方式进行:
- 阅读或观看一个知识点;
- 手动输入示例代码;
- 修改代码中的变量和参数;
- 观察输出结果;
- 独立完成一个类似的小练习。
不要直接复制整段代码而不理解其作用。
4. 尽早进入实际任务¶
完成变量、判断、循环、函数和文件读写后,就可以开始处理简单的科研数据。
例如:
- 统计 FASTA 文件中的序列数量;
- 计算 DNA 序列的 GC 含量;
- 从文本中提取指定列;
- 合并多个表格文件;
- 根据样本信息表批量生成命令;
- 统计表达矩阵中的缺失值;
- 筛选满足条件的 SNP 或基因。
实际任务通常比反复学习语法更有效。
5. 不求甚解并不是坏事¶
入门阶段不必一次性理解所有底层原理。
有些知识可以先学会使用,在后续项目中逐步理解。例如:
- 装饰器;
- 生成器;
- 上下文管理器;
- 面向对象;
- 异步编程;
- Python 内部对象模型。
这些内容不是新生阶段的重点。
四、基本编程习惯¶
1. 文件和变量名称应清楚¶
推荐:
sample_count = 100
expression_matrix = "expression.tsv"
不推荐:
a = 100
x = "expression.tsv"
变量名称应能够说明其含义,但也不必写得过长。
2. 不要直接修改原始数据¶
原始数据原则上只读保存。程序生成的结果应写入单独的输出目录。
project/
├── raw_data/
├── processed_data/
├── scripts/
├── results/
└── logs/
3. 不要在脚本中保存密码¶
禁止将以下信息直接写入代码并提交到 Gitea:
- 账号密码;
- SSH 私钥;
- API Token;
- 数据库密码;
- 云服务密钥。
敏感信息应通过环境变量或受控配置文件管理。
4. 不要写死个人路径¶
不推荐:
input_file = "/home/zhangsan/project/data/sample.tsv"
推荐:
from pathlib import Path
input_file = Path("data/sample.tsv")
更进一步,可以通过命令行参数指定输入文件。
5. 保留必要的运行记录¶
正式分析至少应记录:
- 输入文件;
- 输出文件;
- 软件版本;
- 运行参数;
- 参考基因组版本;
- 运行日期;
- 代码版本。
6. 不要忽略报错信息¶
程序报错时,应首先阅读最后几行内容。
常见错误包括:
| 错误类型 | 常见原因 |
|---|---|
SyntaxError | 语法错误 |
IndentationError | 缩进错误 |
NameError | 变量未定义 |
FileNotFoundError | 文件或路径不存在 |
KeyError | 字典键或表格列名不存在 |
TypeError | 数据类型不符合要求 |
ValueError | 数值或格式不符合要求 |
ModuleNotFoundError | 缺少软件包 |
PermissionError | 没有文件或目录权限 |
提问时,应提供完整命令、完整报错和相关输入信息,不要只截取报错的最后一行。
五、AI 辅助学习¶
可以使用 Claude Code、Codex 或其他 AI 工具辅助:
- 解释语法和报错;
- 生成简单示例;
- 检查代码逻辑;
- 补充注释和文档;
- 将重复操作整理为脚本;
- 编写测试用例。
使用时应注意:
- 不要直接执行自己无法理解的命令;
- 不要向外部服务提交未公开数据;
- 不要上传账号密码、Token 和私钥;
- AI 生成的代码必须经过实际测试;
- 涉及统计方法和研究结论时必须自行核实;
- 修改正式项目代码前,应先通过 Git 保存当前版本;
- 提交练习时,应能够说明代码的主要逻辑。
比较有效的提问应包含:
- 要解决的问题;
- 输入文件格式;
- 预期输出;
- 已有代码;
- 完整报错;
- 运行环境和 Python 版本。
例如:
我有一个制表符分隔的样本信息文件,包含 sample、species 和 tissue 三列。
我希望筛选 species 为 pig 的记录,并统计每种 tissue 的样本数量。
请使用 Pandas 编写脚本,输入和输出文件通过命令行参数指定。
六、阶段练习¶
下面四道练习按照难度逐步增加,覆盖 Python 基础语法、文件读写、数据清洗和生物信息学分析。
建议学习顺序:
- 完成基本语法学习后完成 Q1;
- 完成字符串和文件读写学习后完成 Q2;
- 完成字典或 Pandas 学习后完成 Q3;
- 掌握 Linux、GTF/BED 格式和基本生物信息学知识后完成 Q4。
通用要求¶
每道题应提交:
- Python 脚本;
- 运行产生的结果文件;
- 一份简短的
README.md; - 必要的测试数据或测试说明。
所有程序应满足以下要求:
- 使用 Python 3;
- 能够在 Linux 终端中运行;
- 输入和输出路径尽量通过命令行参数指定;
- 不在代码中写死个人目录的绝对路径;
- 不直接修改原始输入文件;
- 遇到异常输入时给出清楚的报错信息;
- README 中说明运行命令、输入文件、输出文件和依赖环境。
推荐目录结构:
python_practice/
├── Q1/
│ ├── README.md
│ └── q1.py
├── Q2/
│ ├── README.md
│ ├── q2.py
│ └── seq.fa
├── Q3/
│ ├── README.md
│ ├── q3.py
│ ├── S1.csv
│ ├── S2.csv
│ └── S3.csv
└── Q4/
├── README.md
└── q4.py
Q1:组合计数与浮点数精度¶
背景¶
在群体遗传学、生态学和参数模拟中,经常需要枚举一组参数的不同取值组合。看似简单的数值比较,也可能受到浮点数表示方式的影响。
任务一:浮点数枚举¶
有四个变量 a、b、c、d,每个变量均可从以下 11 个数中取值:
values = [
0, 0.1, 0.2, 0.3, 0.4, 0.5,
0.6, 0.7, 0.8, 0.9, 1.0,
]
统计满足以下条件的**有序四元组** (a, b, c, d) 的数量:
a + b + c + d = 1.0
“有序”表示:
(0.1, 0.2, 0.3, 0.4)
和:
(0.4, 0.3, 0.2, 0.1)
被视为不同结果。
至少使用以下两种方法完成:
- 直接枚举浮点数,并使用
math.isclose()判断总和是否接近1.0; - 将所有数乘以 10,转换成整数后再进行枚举。
比较两种方法得到的结果是否一致。
任务二:整数枚举¶
令 a、b、c、d 均从以下整数中取值:
values = list(range(11))
统计满足以下条件的有序四元组数量:
a + b + c + d = 10
输出要求¶
生成 Q1_result.txt,至少包含:
float_enumeration_count: ...
integer_scaled_count: ...
integer_enumeration_count: ...
results_consistent: True
思考题¶
在 README 中简要回答:
- 为什么不推荐直接使用以下判断?
a + b + c + d == 1.0
完成标准¶
- 正确理解“有序四元组”;
- 能够使用嵌套循环和条件判断;
- 能够使用
math.isclose(); - 理解浮点数不能总是精确表示十进制小数;
- 两种实现方式得到一致结果;
- 能够解释结果,而不是只输出一个数字。
Q2:FASTA 序列处理与文件读写¶
输入文件¶
给定文件 seq.fa 下载地址,其格式如下:
>sequence_1 an example
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
>sequence_2 another example
GATTACAAGATTTGTGAATTTTTTATGTTTATTCTTTTTTATACATTTGTACTTTGTATGGAGGTTTACT
程序不能假定一条序列只占一行。下面这种多行序列也应能够正确解析:
>sequence_1 an example
AGCTTTTCATTCTGACTGCA
ACGGGCAATATGTCTCTGT
GTGGATTAAAAAAAGAGTGT
CTGATAGCAGC
FASTA 标题中,第一个空格之前的内容作为序列编号。
例如:
>sequence_1 an example
其序列编号为:
sequence_1
本题建议首先使用 Python 标准库自行解析 FASTA,不使用 Biopython。完成后,可以再使用 Biopython 验证结果。
任务一:读取 FASTA¶
将 seq.fa 中的全部序列读入程序,并保存为类似以下结构:
{
"sequence_1": "AGCT...",
"sequence_2": "GATT...",
}
解析时应:
- 忽略空行;
- 合并同一条序列的多行内容;
- 将序列统一转换为大写;
- 保持序列在原文件中的顺序;
- 检查序列编号是否重复;
- 检查是否存在标题之前的序列内容。
任务二:计算反向互补序列¶
提取 sequence_1,计算其反向互补序列。
碱基互补关系为:
| 原碱基 | 互补碱基 |
|---|---|
| A | T |
| T | A |
| C | G |
| G | C |
| N | N |
如果出现表格中没有定义的字符,程序应给出明确错误,而不是静默忽略。
将结果保存为 Q2.1_revcomp.fa:
>sequence_1_revcomp
反向互补序列
任务三:碱基计数¶
统计反向互补序列中 A、T、C、G 和 N 的数量。
将结果保存为 Q2.2_counts.tsv:
base count
A ...
T ...
C ...
G ...
N ...
同时检查:
A + T + C + G + N
是否等于反向互补序列长度。
任务四:截取每条序列的前 10 个碱基¶
提取每条序列前 10 个碱基,保存为 Q2.3_head10.tsv:
sequence_id head10
sequence_1 AGCTTTTCAT
sequence_2 GATTACAAGA
如果某条序列不足 10 bp,保留其完整序列,并在程序运行时输出警告。
任务五:序列去重¶
根据 head10 进行去重,并统计每个片段出现在哪些序列中。
输出文件为 Q2.4_unique_heads.tsv:
head10 sequence_count sequence_ids
AGCTTTTCAT 1 sequence_1
GATTACAAGA 1 sequence_2
如果多个序列具有相同的前 10 个碱基,应将序列编号用英文逗号连接。
思考题¶
在 README 中简要回答:
- 为什么不能简单地把 FASTA 文件每一行都当成一条序列?
- 字符串反转和反向互补有什么区别?
- 字典和集合在本题中分别适合解决什么问题?
- 使用集合去重时,是否一定能够保留原始顺序?
完成标准¶
- 能够解析单行和多行 FASTA;
- 能够正确提取序列编号;
- 能够完成字符串反转和碱基互补;
- 能够使用字典进行碱基计数;
- 能够使用字符串切片;
- 能够处理重复序列和异常字符;
- 输出文件包含清楚的表头。
Q3:表达量数据合并与清洗¶
背景¶
在高通量测序项目中,经常需要合并多个样本的表达量结果。实际数据文件可能存在重复记录、格式不统一或文件扩展名与真实格式不一致等问题。
现有三个文件下载地址:
S1.csv
S2.csv
S3.csv
分别代表三个样本的 miRNA 表达量。
虽然文件扩展名为 .csv,但文件内容实际使用**制表符**分隔。程序应根据文件的真实格式读取,而不能仅根据扩展名判断分隔符。
示例:
#miRNA read_count precursor total seq seq(norm)
ssc-let-7a 116100.15 ssc-let-7a-1 116100.15 116100.15 15000.30
ssc-let-7a 116294.65 ssc-let-7a-2 116294.65 116294.65 15025.43
ssc-let-7b 85000.20 ssc-let-7b 85000.20 85000.20 10981.34
本题只需要使用以下两列:
#miRNAread_count
任务一:读取和检查文件¶
分别读取 S1.csv、S2.csv 和 S3.csv。
程序应检查:
- 是否存在
#miRNA列; - 是否存在
read_count列; read_count是否能够转换为数值;- 是否存在空的 miRNA 名称;
- 同一个 miRNA 是否重复出现。
对缺失列、非法数值等问题应给出明确报错,不建议静默跳过。
任务二:处理重复 miRNA¶
如果同一个 miRNA 在同一个文件中出现多次,使用其所有 read_count 的平均值作为该样本的最终表达量。
例如:
ssc-let-7a 116100.15
ssc-let-7a 116294.65
应合并为:
ssc-let-7a 116197.40
结果统一保留两位小数。
任务三:筛选共有 miRNA¶
只保留同时出现在 S1、S2 和 S3 三个样本中的 miRNA。
注意区分:
- 并集:至少出现在一个样本中;
- 交集:同时出现在所有样本中。
本题要求使用交集。
任务四:生成表达矩阵¶
将结果保存为 merged_counts.tsv:
miRNA S1_count S2_count S3_count
ssc-let-7a 116197.40 ... ...
ssc-let-7b 85000.20 ... ...
输出要求:
- 使用制表符分隔;
- 包含表头;
- 每个 miRNA 只出现一次;
- 表达量保留两位小数;
- 按 miRNA 名称排序,以保证每次运行结果顺序一致。
任务五:输出数据处理摘要¶
生成 merge_summary.txt,记录:
S1 raw rows: ...
S1 unique miRNAs: ...
S2 raw rows: ...
S2 unique miRNAs: ...
S3 raw rows: ...
S3 unique miRNAs: ...
Shared miRNAs: ...
实现要求¶
建议首先使用 Python 标准库和字典完成。
可以使用的数据结构示例:
{
"ssc-let-7a": [116100.15, 116294.65],
"ssc-let-7b": [85000.20],
}
完成后,可以再使用 Pandas 实现一次,并比较两个版本的结果是否完全一致。
思考题¶
在 README 中简要回答:
- 为什么不能仅根据
.csv扩展名判断文件使用逗号分隔? - 为什么重复 miRNA 不能直接保留第一条记录?
- 交集和并集分别适用于什么分析场景?
- 如果某个样本中缺少某个 miRNA,是否可以填充为 0?这样做需要什么前提?
- 如何验证纯 Python 版本与 Pandas 版本的结果一致?
完成标准¶
- 能够读取带表头的制表符文件;
- 能够检查必要列;
- 能够使用字典聚合重复数据;
- 能够正确计算平均值;
- 能够计算三个集合的交集;
- 能够生成规范的 TSV 文件;
- 能够输出数据清洗摘要;
- 理解文件扩展名不一定代表真实文件格式。
Q4:GTF 解析、基因组坐标和外部工具¶
难度说明
本题属于进阶练习。建议在掌握 Python 文件处理、Linux 命令、GTF/BED 格式和基本基因组学知识后完成。
背景¶
在功能基因组学研究中,经常需要从基因注释中提取基因坐标、计算启动子区域,并判断不同基因组区间之间是否重叠。
本题使用猪参考基因组:
Sscrofa11.1
为保证分析结果可重复,固定使用 Ensembl release 114。
任务一:准备数据¶
下载猪的 GTF 注释文件以及基因组文件:
https://ftp.ensembl.org/pub/release-116/gff3/sus_scrofa/Sus_scrofa.Sscrofa11.1.116.gff3.gz
https://ftp.ensembl.org/pub/release-116/fasta/sus_scrofa/dna/Sus_scrofa.Sscrofa11.1.dna_sm.toplevel.fa.gz
samtools faidx Sus_scrofa.Sscrofa11.1.dna.toplevel.fa
从 FASTA 索引中提取染色体长度:
cut -f1,2 \
Sus_scrofa.Sscrofa11.1.dna.toplevel.fa.fai \
> chrom.sizes
不能混用不同参考基因组版本的 GTF、FASTA 和染色体长度文件。
任务二:使用 Python 解析压缩 GTF¶
使用 Python 标准库中的 gzip 模块直接读取 .gtf.gz 文件,不要求先完整解压到磁盘。
程序应:
- 跳过以
#开头的注释行; - 按制表符拆分每一行;
- 检查每行是否包含 9 列;
- 解析第 9 列 attributes 字段;
- 提取
gene_id、gene_name和gene_biotype; - 只保留 feature 类型为
gene的记录; - 只保留
gene_biotype为protein_coding的基因。
如果某条记录没有 gene_name,仍应保留该基因,并使用 gene_id 作为名称。
任务三:生成 protein-coding 基因 BED 文件¶
将筛选后的基因转换为 BED6 格式,保存为 genes.bed。
BED6 包含以下六列:
chrom start end name score strand
本题规定:
name使用gene_id;score固定为0;strand为+或-。
需要注意:
- GTF 使用 1-based、闭区间;
- BED 使用 0-based、左闭右开区间。
对于 GTF 坐标:
start = GTF_start
end = GTF_end
对应 BED 坐标为:
BED_start = GTF_start - 1
BED_end = GTF_end
例如,GTF 中:
3 3
表示第 3 个碱基,对应 BED:
2 3
任务四:计算 TSS 上游 2000 bp 区域¶
基于每个 protein-coding 基因的转录起始位点,计算其上游 2000 bp 区域。
对于正链基因:
promoter_start = gene_BED_start - 2000
promoter_end = gene_BED_start
对于负链基因:
promoter_start = gene_BED_end
promoter_end = gene_BED_end + 2000
本题定义的启动子区域不包含 TSS 所在碱基。
只保留满足以下条件的区域:
0 <= promoter_start < promoter_end <= chromosome_length
因此:
- 正链基因靠近染色体起点时,可能不足 2000 bp;
- 负链基因靠近染色体末端时,也可能不足 2000 bp;
- 两种情况都需要结合
chrom.sizes判断。
将结果保存为 promoters.bed,同样使用 BED6 格式。
所有保留的 promoter 长度都必须恰好为 2000 bp:
end - start = 2000
任务五:检查 promoter 与基因区域重叠¶
使用 bedtools intersect 找出与任意 protein-coding 基因区域发生重叠的 promoter。
命令示例:
bedtools intersect \
-a promoters.bed \
-b genes.bed \
-wa \
-wb \
> promoter_gene_overlap.bed
输出中应同时包含 promoter 和与其重叠的 gene 信息。
也可以在 Python 中使用 subprocess.run() 调用 bedtools:
import subprocess
with open("promoter_gene_overlap.bed", "w") as output_handle:
subprocess.run(
[
"bedtools",
"intersect",
"-a",
"promoters.bed",
"-b",
"genes.bed",
"-wa",
"-wb",
],
stdout=output_handle,
check=True,
text=True,
)
使用 check=True,确保 bedtools 执行失败时,Python 程序不会继续产生看似正常的结果。
任务六:结果检查¶
程序运行结束后,生成 Q4_summary.txt:
protein_coding_genes: ...
positive_strand_genes: ...
negative_strand_genes: ...
valid_promoters: ...
discarded_boundary_promoters: ...
promoters_overlapping_genes: ...
同时完成以下检查:
genes.bed中所有start均不小于 0;- 所有记录满足
start < end; promoters.bed中所有区域长度均为 2000 bp;- 所有 promoter 均未超出对应染色体边界;
- 正链和负链 promoter 方向正确;
- 随机人工检查至少 5 个正链和 5 个负链基因;
- BED 文件按染色体和起始坐标排序。
排序示例:
sort -k1,1 -k2,2n \
genes.bed \
> genes.sorted.bed
sort -k1,1 -k2,2n \
promoters.bed \
> promoters.sorted.bed
选做内容¶
- 不使用 bedtools,使用 Python 实现区间重叠判断;
- 比较 Python 和 bedtools 的结果;
- 统计每个 promoter 重叠的基因数量;
- 区分 promoter 与自身基因、其他基因的重叠;
- 比较不同 promoter 长度,例如 500 bp、1000 bp 和 2000 bp;
- 将脚本改写为可以接受物种、GTF、FASTA 索引和 promoter 长度参数的通用程序。
思考题¶
在 README 中简要回答:
- 为什么 GTF 转 BED 时只需要对起始坐标减 1?
- 为什么正链和负链基因的上游方向不同?
- 为什么计算负链 promoter 时必须知道染色体长度?
- 为什么不能混用不同版本的参考基因组和注释文件?
bedtools intersect -wa -wb中的-wa和-wb分别表示什么?- promoter 与其他基因重叠是否一定代表计算错误?
完成标准¶
- 能够使用
gzip读取压缩文本; - 能够解析 GTF 的九列结构和 attributes 字段;
- 能够筛选 protein-coding gene;
- 能够正确完成 GTF 到 BED 的坐标转换;
- 能够分别计算正链和负链 promoter;
- 能够使用染色体长度过滤越界区域;
- 能够调用 bedtools 完成区间重叠分析;
- 能够对结果进行基本质量检查;
- 能够说明关键坐标计算的依据。
七、练习提交¶
完成练习后,将代码提交到个人 Gitea 仓库。
建议每道题使用一次或多次独立提交,提交信息应说明具体修改内容。
推荐:
完成Q1整数枚举
增加Q1浮点数精度比较
支持多行FASTA解析
完成三个样本miRNA表达矩阵合并
修正负链启动子坐标计算
不推荐:
update
修改代码
final
test
README 应包含的内容¶
每道题的 README 至少应说明:
### Q1
#### 题目说明
简要说明本题需要完成的任务。
#### 运行环境
- Python 版本
- 依赖软件
- 外部工具版本
#### 运行方法
```bash
python q1.py
输入文件¶
说明输入文件名称和格式。
输出文件¶
说明输出文件名称和内容。
实现思路¶
简要说明程序的主要处理流程。
结果检查¶
说明如何确认结果正确。
思考题¶
回答题目中提出的思考题。
## 代码检查重点
代码提交后,可以请师兄师姐进行简单检查。检查重点包括:
- 程序结果是否正确;
- 是否存在写死的路径;
- 输入异常时是否有明确提示;
- 代码是否能够重复运行;
- README 是否能够让其他人理解和运行程序;
- 是否记录了软件版本和关键参数;
- 是否真正理解代码中的每一步。
允许使用 AI 工具辅助解释问题、检查代码和排查报错,但提交者应能够说明程序的主要逻辑。
不能解释的代码,不应直接作为练习答案提交。
---
## 八、Linux 和 R 学习建议
## Linux
Linux 不建议与 Python 完全分开学习。
在学习 Python 的同时,应逐步掌握:
- 文件和目录操作;
- 文本查看和检索;
- 文件权限;
- SSH 登录;
- 软件环境;
- 管道和重定向;
- Shell 脚本;
- Slurm 作业提交。
很多 Python 程序最终需要在 Linux 服务器上运行,因此 Linux 是使用 Python 开展科研工作的基础。
## R
没有编程基础的新生,建议先完成 Python 基础学习,再开始学习 R,暂时不学亦可。
R 可以在后续用于:
- 统计分析;
- 数据可视化;
- 差异表达分析;
- 富集分析;
- 单细胞分析;
- 生物统计建模。
入门阶段不建议同时系统学习 Python 和 R,以免分散精力。
---
## 九、学习完成要求
完成以下内容后,可以认为已经具备基本的 Python 使用能力:
- [ ] 完成一套 Python 基础课程或教材的核心章节;
- [ ] 独立编写至少 5 个简单程序;
- [ ] 能够读取和处理 CSV、TSV 文件;
- [ ] 能够使用函数组织代码;
- [ ] 能够在 Linux 终端运行 Python 脚本;
- [ ] 能够创建并使用虚拟环境;
- [ ] 能够阅读常见报错;
- [ ] 能够使用 Git 管理代码;
- [ ] 完成 Q1;
- [ ] 完成 Q2;
- [ ] 完成 Q3;
- [ ] 开始或完成 Q4;
- [ ] 将练习代码提交到个人 Gitea 仓库;
- [ ] 为每道练习编写 README。
!!! note "关于学习进度"
没有必要等到“全部学完”才开始处理实际数据。
掌握基本语法和文件读写后,就应尽快进入实际任务。在使用过程中遇到不熟悉的知识,再针对性学习和补充。
!!! warning "数据安全"
练习时优先使用公开数据、模拟数据或经过批准的示例数据。
未经允许,不得将团队内部数据、未发表结果、服务器配置信息、账号密码和访问密钥上传到公开平台或外部 AI 服务。
本站总访问量 次