实验1-下载基因组数据并统计内容

🧪 实验 1:下载一个基因组数据压缩包并解压;统计文件行数与字符数

🎯 实验目标

  1. 熟悉 macOS 终端常用命令
  2. 学会下载、解压并查看基因组 FASTA 文件
  3. 统计行数、字符数、序列数,理解 DNA 序列的基本结构

🧰 实验环境准备(macOS)

✅ 步骤 1:打开终端

你可以在两种方式中任选其一:

  • 用 Spotlight 搜索 “Terminal”
  • 或使用快捷键:Command + Space → 输入 terminal → 回车

终端打开后,你会看到一个提示符,例如:

MacBook-Air:~ username$

✅ 步骤 2:创建实验目录

mkdir -p ~/bioinfo_lab/week1
cd ~/bioinfo_lab/week1

这将在你的“用户目录”中创建一个名为 bioinfo_lab/week1 的文件夹,并进入其中。


✅ 步骤 3:安装 wget(如果还没有)

macOS 默认没有 wget,我们使用 Homebrew 安装:

# 如果你还没有 Homebrew,先执行这一行:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 然后安装 wget
brew install wget

💡 Homebrew 是 macOS 的软件包管理工具,非常实用。


🧩 实验步骤

Step 1:下载大肠杆菌基因组文件

wget https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/005/845/GCF_000005845.2_ASM584v2/GCF_000005845.2_ASM584v2_genomic.fna.gz

你会看到类似:

Saving to: ‘GCF_000005845.2_ASM584v2_genomic.fna.gz’

Step 2:查看文件

ls -lh

输出示例:

-rw-r--r--@ 1 user  staff   4.6M Nov  2 14:20 GCF_000005845.2_ASM584v2_genomic.fna.gz

Step 3:解压文件

gunzip GCF_000005845.2_ASM584v2_genomic.fna.gz

现在文件变成:

GCF_000005845.2_ASM584v2_genomic.fna

Step 4:查看前几行

head -n 10 GCF_000005845.2_ASM584v2_genomic.fna

输出:

>NC_000913.3 Escherichia coli str. K-12 substr. MG1655, complete genome
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC...

💡 “>” 开头的是序列名称,后面是 DNA 碱基序列(A/T/C/G)。


Step 5:统计行数、字符数

wc -l GCF_000005845.2_ASM584v2_genomic.fna   # 行数
wc -m GCF_000005845.2_ASM584v2_genomic.fna # 字符数

示例结果:

 93118 GCF_000005845.2_ASM584v2_genomic.fna
4641652 GCF_000005845.2_ASM584v2_genomic.fna

👉 表示此基因组长度约 4.6 Mbp(460 万个碱基)。


Step 6:统计序列数量

grep -c "^>" GCF_000005845.2_ASM584v2_genomic.fna

输出:

1

说明文件中仅有一条完整的基因组序列。


🧭 思考题

  1. 为什么 DNA 文件只包含 A、T、C、G 四种字符?
  2. 为什么压缩文件体积更小?
  3. 4.6 Mbp 的序列大约代表了几千个基因?

🧾 实验记录模板

项目 结果
文件名 GCF_000005845.2_ASM584v2_genomic.fna
下载链接 wget https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/005/845/GCF_000005845.2_ASM584v2/GCF_000005845.2_ASM584v2_genomic.fna.gz
文件大小 4.5M
行数 58022
字符数 4699745
序列数 1
实验总结 大肠杆菌基因组文件大概4.5M,共58022行,4699745个字符。

🔗 推荐拓展练习

内容 链接
Rosalind:统计 DNA 碱基数量 https://rosalind.info/problems/dna/
NCBI 基因组浏览器 https://www.ncbi.nlm.nih.gov/genome/
免费 Linux 命令速查表 https://www.freecodecamp.org/news/the-linux-commands-handbook/

📒实验记录

命令行记录

booboowei@[25-11-14  5:49PM] [week1]$ wget https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/005/845/GCF_000005845.2_ASM584v2/GCF_000005845.2_ASM584v2_genomic.fna.gz
--2025-11-14 17:50:07-- https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/005/845/GCF_000005845.2_ASM584v2/GCF_000005845.2_ASM584v2_genomic.fna.gz
正在解析主机 ftp.ncbi.nlm.nih.gov (ftp.ncbi.nlm.nih.gov)... 130.14.250.13, 130.14.250.31, 130.14.250.10, ...
正在连接 ftp.ncbi.nlm.nih.gov (ftp.ncbi.nlm.nih.gov)|130.14.250.13|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1379902 (1.3M) [application/x-gzip]
正在保存至: “GCF_000005845.2_ASM584v2_genomic.fna.gz”

GCF_000005845.2_A 100%[============>] 1.32M 213KB/s 用时 6.6s

2025-11-14 17:50:15 (204 KB/s) - 已保存 “GCF_000005845.2_ASM584v2_genomic.fna.gz” [1379902/1379902])

booboowei@[25-11-14 5:50PM] [week1]$ ll -h
total 4144
-rw-r--r-- 1 booboowei staff 1.3M Nov 1 2014 GCF_000005845.2_ASM584v2_genomic.fna.gz

booboowei@[25-11-14 5:51PM] [week1]$ which gunzip
/usr/bin/gunzip
booboowei@[25-11-14 5:51PM] [week1]$ gunzip GCF_000005845.2_ASM584v2_genomic.fna.gz
booboowei@[25-11-14 5:52PM] [week1]$ ll
total 9184
-rw-r--r-- 1 booboowei staff 4.5M Nov 1 2014 GCF_000005845.2_ASM584v2_genomic.fna

booboowei@[25-11-14 5:52PM] [week1]$ head GCF_000005845.2_ASM584v2_genomic.fna
>NC_000913.3 Escherichia coli str. K-12 substr. MG1655, complete genome
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCTTCTGAACTG
GTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAATATAGGCATAGCGCACAGAC
AGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACCATTACCACCACCATCACCATTACCACAGGT
AACGGTGCGGGCTGACGCGTACAGGAAACACAGAAAAAAGCCCGCACCTGACAGTGCGGGCTTTTTTTTTCGACCAAAGG
TAACGAGGTAACAACCATGCGAGTGTTGAAGTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGTGTTGCCG
ATATTCTGGAAAGCAATGCCAGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCACCTGGTG
GCGATGATTGAAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGTATTTTTGCCGAACTTTT
GACGGGACTCGCCGCCGCCCAGCCGGGGTTCCCGCTGGCGCAATTGAAAACTTTCGTCGATCAGGAATTTGCCCAAATAA
AACATGTCCTGCATGGCATTAGTTTGTTGGGGCAGTGCCCGGATAGCATCAACGCTGCGCTGATTTGCCGTGGCGAGAAA

booboowei@[25-11-14 5:52PM] [week1]$ wc -l GCF_000005845.2_ASM584v2_genomic.fna
58022 GCF_000005845.2_ASM584v2_genomic.fna

booboowei@[25-11-14 5:53PM] [week1]$ wc -m GCF_000005845.2_ASM584v2_genomic.fna
4699745 GCF_000005845.2_ASM584v2_genomic.fna

booboowei@[25-11-14 5:53PM] [week1]$ grep -c "^>" GCF_000005845.2_ASM584v2_genomic.fna
1

回答思考题

Q1: 为什么 DNA 文件只包含 A、T、C、G 四种字符?

因为 DNA 分子本质上就是由 四种核苷酸组成,它们分别用字母代表:

字母 核苷酸 全名
A 腺嘌呤 Adenine
T 胸腺嘧啶 Thymine
C 胞嘧啶 Cytosine
G 鸟嘌呤 Guanine

实际测序时,仪器识别的本质是这四种碱基的信号(荧光、离子电流等)。
最终导出的 FASTA、FASTQ 文件只是把生物大分子的化学结构,抽象成一个字符串

你可以把它理解成“生命的源代码”,而 A、T、C、G 就是 4 个字符的编程语言。
——是的,这语言的语法巨简单,但运行出来的生物体复杂得可怕。

Q2:为什么压缩文件体积更小?

因为 DNA 序列不是随机的,它有大量 重复、模式化偏好性

比如:

  • 人类基因组中有超过 50% 是重复序列(LINE、SINE、转座子等)。
  • FASTQ 文件里每一条 reads 的质量分数(30、31、32……)也非常模式化。
  • 同一种细菌的基因组会高度相似。

压缩算法(如 gzip、xz、bzip2)会:

  • 把重复模式替换成短编码
  • 用变长编码存储高频字符
  • 消除冗余结构

因此文件越重复、越模式化 → 越好压缩

DNA 数据恰好是压缩算法的“完美猎物”。

4.6 Mbp 的序列大约代表了几千个基因?

你这数字一看就像大肠杆菌(E. coli)的基因组大小:
E. coli ≈ 4.6 Mbp(4.6 million base pairs)

经验规律:

典型原核生物 → 1000 bp 左右编码一个蛋白质基因

当然这是非常粗略,但够用。

计算一下:

4.6 Mbp ÷ 1000 bp/基因 ≈ 4600 个基因

这和真实情况很接近:

  • 大肠杆菌 K-12 有 ~4300–4500 个基因

所以你的直觉没错:

4.6 Mbp 的原核生物基因组通常对应约 4000–5000 个基因。

拓展问题回答

Q1:DNA核苷酸计数问题

>>> a='AGCTTTTCATTCTGACTGCAACGGGCAATAGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC'
>>> for i in ['A','T','C','G']:
... print(i+': '+str(a.count(i)))
...
A: 20
T: 20
C: 12
G: 17



>>> from collections import Counter
>>> Counter(a)
Counter({'A': 20, 'T': 20, 'G': 17, 'C': 12})

📌 million base pairs = 百万个碱基对

  • base pair (bp) = 1 个碱基对
    (A–T 或 C–G,一对就是 1 bp)
  • million base pairs (Mbp) = 1,000,000 bp
    就是一百万个碱基对

所以:

  • 1 Mbp = 1,000,000 bp
  • 4.6 Mbp = 4,600,000 bp

你可以把它理解成:

基因组序列长度的计量单位,类似于“字节”“千米”,只是测 DNA 的。