跳转至

00-Python在生信中的应用

​ Python是一种通用编程语言,广泛应用于生物信息学领域。其易读性、灵活性和丰富的生物信息学库使其成为该领域的流行选择。以下是Python在生物信息学中的一些应用:

  1. 数据处理和文件格式转换:在生物信息学中,需要处理大量不同格式的生物数据,如FASTA、FASTQ、SAM/BAM、VCF等。Python可以方便地解析、修改和转换这些文件格式。如使用BioPython库,可以轻松地读取和处理各种生物信息学数据格式。
  2. 序列比对与处理:Python可用于执行序列比对、剪接、翻译等操作。例如,BioPython库提供了PairwiseAligner和多序列比对功能,可以进行序列比对和处理。
  3. 基因组注释:Python可用于处理基因组注释信息,包括基因坐标、外显子、转录起始位点等。例如,GFFutils库可以用于解析和操作GFF/GTF格式的注释文件。
  4. 数据可视化:Python提供了丰富的数据可视化库,如Matplotlib、Seaborn和Plotly等,可以创建各种生物信息学相关的图表和图像,如热图、火山图、PCA图等。
  5. 生物统计学和机器学习:Python提供了大量的统计学和机器学习库,如SciPy、NumPy、Pandas、Scikit-learn等。这些库可用于执行各种生物信息学相关的统计分析和预测模型。
  6. 网络分析:Python可用于构建和分析生物分子网络,如蛋白质互作网络、基因调控网络等。例如,NetworkX库可以用于创建、分析和可视化复杂的网络结构。
  7. 结构生物信息学:Python可以用于处理和分析蛋白质和核酸的三维结构信息。例如,BioPython的PDB模块提供了处理PDB文件的功能,而PyMOL和NGLview库可用于可视化分子结构。
  8. 生物信息学工作流程开发:Python可以用于构建自动化的生物信息学分析工作流程,整合各种生物信息学工具。例如,Snakemake和Nextflow是两个流行的基于Python的工作流程管理系统。

​ 这些应用仅为Python在生物信息学中的一部分用途,实际上其潜力远不止于此。随着生物信息学领域的不断发展,Python将继续发挥其在数据处理、分析和可视化等方面的重要作用。

1、数据处理和文件格式转换的python示例代码

以下是一个简单的Python代码示例,用于处理FASTA格式文件并将其转换为CSV格式。我们将使用BioPython库来解析FASTA文件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from Bio import SeqIO
import csv

# 读取FASTA文件
input_file = "sequences.fasta"
sequences = list(SeqIO.parse(input_file, "fasta"))

# 将FASTA转换为CSV
output_file = "sequences.csv"
with open(output_file, "w", newline='') as csvfile:
    csv_writer = csv.writer(csvfile)
    # 写入CSV文件的标题行
    csv_writer.writerow(["ID", "Sequence", "Length"])

    # 遍历序列并将ID、序列和长度写入CSV文件
    for seq_record in sequences:
        csv_writer.writerow([seq_record.id, str(seq_record.seq), len(seq_record)])

​ 此代码将读取名为"sequences.fasta"的FASTA文件,并将序列ID、序列和长度写入名为"sequences.csv"的CSV文件中。请确保将"sequences.fasta"替换为您要处理的FASTA文件的实际文件名。

2、序列比对与处理的python示例代码

以下是使用Python和BioPython库进行序列比对和处理的示例代码。我们将执行两个DNA序列的pairwise序列比对。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from Bio import SeqIO
from Bio import pairwise2
from Bio.SubsMat import MatrixInfo as matlist

# 两个待比对的DNA序列
seq1 = "ATGCTAGCTAGCTAGCTGAC"
seq2 = "ATGCTTGCTAGCTTGCTGAC"

# 使用BLOSUM62得分矩阵
matrix = matlist.blosum62

# 设置gap penalties
gap_open = -10
gap_extend = -0.5

# 计算全局pairwise序列比对
alignments = pairwise2.align.globalds(seq1, seq2, matrix, gap_open, gap_extend)

# 获取最佳比对结果
best_alignment = alignments[0]
aligned_seq1, aligned_seq2, score, begin, end = best_alignment

# 打印比对结果
print("序列1: {}\n序列2: {}\n得分: {}".format(aligned_seq1, aligned_seq2, score))

​ 此代码将计算给定的两个DNA序列(seq1和seq2)的全局pairwise序列比对,并使用BLOSUM62矩阵作为得分矩阵。最后,它将打印出最佳比对结果。

3、基因组注释python示例代码

以下是一个使用Python和gffutils库处理GFF3格式基因组注释文件的示例代码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import gffutils

# 读取GFF3文件并创建数据库
input_file = "annotations.gff3"
db = gffutils.create_db(input_file, dbfn="annotations.db", force=True, keep_order=True)

# 查询所有基因
genes = db.features_of_type("gene")

# 打印基因ID及其坐标
for gene in genes:
    print("基因ID: {}, 染色体: {}, 起始坐标: {}, 结束坐标: {}".format(
        gene.id, gene.chrom, gene.start, gene.end))

# 查询某个基因的所有外显子
gene_id = "example_gene_id"
exons = db.children(gene_id, featuretype="exon")

# 打印外显子ID及其坐标
for exon in exons:
    print("外显子ID: {}, 染色体: {}, 起始坐标: {}, 结束坐标: {}".format(
        exon.id, exon.chrom, exon.start, exon.end))

​ 此代码将读取名为"annotations.gff3"的GFF3文件,并将其导入到名为"annotations.db"的SQLite数据库中。之后,它将查询并打印所有基因的ID和坐标,以及某个指定基因的所有外显子的ID和坐标。请确保将"annotations.gff3"替换为您要处理的GFF3文件的实际文件名,以及将"example_gene_id"替换为您感兴趣的基因ID。

​ 这只是一个简单的示例,实际上,Python和gffutils库可以用于执行更复杂的基因组注释处理任务,例如提取转录本序列、基因本体功能分析等。

4、数据可视化的python示例代码

以下是一个使用Python和matplotlib库创建简单柱状图的示例代码。我们将使用matplotlib和numpy库来生成数据并绘制图形。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import numpy as np
import matplotlib.pyplot as plt

# 示例数据
genes = ["Gene1", "Gene2", "Gene3", "Gene4", "Gene5"]
expression_values = [10, 15, 7, 12, 4]

# 创建柱状图
fig, ax = plt.subplots()
index = np.arange(len(genes))
bar_width = 0.5

rects = ax.bar(index, expression_values, bar_width, label="Expression")

# 设置图表标题和坐标轴标签
ax.set_xlabel("Genes")
ax.set_ylabel("Expression Values")
ax.set_title("Gene Expression Levels")
ax.set_xticks(index)
ax.set_xticklabels(genes)

# 添加数据标签
for rect in rects:
    height = rect.get_height()
    ax.annotate("{}".format(height),
                xy=(rect.get_x() + rect.get_width() / 2, height),
                xytext=(0, 3),  # 3 points vertical offset
                textcoords="offset points",
                ha="center", va="bottom")

# 显示图形
plt.show()

​ 此代码将创建一个简单的柱状图,显示五个基因的表达水平。请注意,这只是一个简单的示例,实际上,Python和matplotlib库可以用于创建更复杂的生物信息学相关图形,如热图、火山图、PCA图等。还可以使用其他可视化库,如Seaborn和Plotly,根据需求创建更丰富的图形。

5、生物统计学和机器学习的python示例代码

以下是一个使用Python和Scikit-learn库进行基因表达数据的主成分分析(PCA)和聚类分析的示例代码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans

# 示例数据:10个样本,每个样本5个基因的表达值
gene_expression_data = np.array([
    [10, 15, 7, 12, 4],
    [9, 14, 8, 11, 5],
    [11, 16, 6, 13, 3],
    [30, 35, 27, 32, 24],
    [29, 34, 28, 31, 25],
    [31, 36, 26, 33, 23],
    [50, 55, 47, 52, 44],
    [49, 54, 48, 51, 45],
    [51, 56, 46, 53, 43],
    [12, 17, 5, 14, 2]
])

# PCA降维
pca = PCA(n_components=2)
pca_result = pca.fit_transform(gene_expression_data)

# K-means聚类
kmeans = KMeans(n_clusters=3, random_state=0).fit(pca_result)

# 绘制PCA散点图,颜色表示聚类结果
plt.scatter(pca_result[:, 0], pca_result[:, 1], c=kmeans.labels_, cmap='viridis')

# 设置图表标题和坐标轴标签
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.title("PCA and Clustering of Gene Expression Data")

# 显示图形
plt.show()

​ 此代码首先使用PCA对示例基因表达数据进行降维,将其从5个基因的表达值降为2个主成分。接着,使用K-means聚类方法对降维后的数据进行聚类分析。最后,绘制一个PCA散点图,其中颜色表示聚类结果。

​ 请注意,这只是一个简单的示例,实际上,Python和Scikit-learn库可以用于执行更复杂的生物统计学和机器学习任务,如回归分析、分类、特征选择等。还可以使用其他机器学习库,如TensorFlow和PyTorch,实现深度学习模型。

6、网络分析的python示例代码

以下是一个使用Python和NetworkX库创建和分析生物网络的示例代码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import networkx as nx
import matplotlib.pyplot as plt

# 创建一个空的有向图
G = nx.DiGraph()

# 添加节点(这里我们使用基因名称作为节点)
genes = ["Gene1", "Gene2", "Gene3", "Gene4", "Gene5"]
G.add_nodes_from(genes)

# 添加边(表示基因间的相互作用关系)
edges = [("Gene1", "Gene2"), ("Gene1", "Gene3"), ("Gene2", "Gene3"),
         ("Gene3", "Gene4"), ("Gene3", "Gene5"), ("Gene4", "Gene5")]
G.add_edges_from(edges)

# 计算每个节点的入度和出度
in_degrees = G.in_degree()
out_degrees = G.out_degree()

# 打印节点的入度和出度
for gene in genes:
    print("基因: {}, 入度: {}, 出度: {}".format(gene, in_degrees[gene], out_degrees[gene]))

# 绘制网络图
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_color="skyblue", font_size=10, font_weight="bold")
plt.title("Gene Interaction Network")
plt.show()

​ 此代码首先创建一个空的有向图,然后添加了五个基因作为节点,并定义了它们之间的相互作用关系。接着,计算并打印每个节点的入度和出度。最后,使用matplotlib绘制网络图。

​ 请注意,这只是一个简单的示例,实际上,Python和NetworkX库可以用于执行更复杂的网络分析任务,如寻找最短路径、计算聚类系数、社区检测等。还可以使用其他网络分析库,如igraph和Graph-tool,根据需求创建和分析复杂的生物网络。

7、结构生物信息学的python示例代码

​ 以下是一个使用Python和Biopython库处理PDB(蛋白质数据银行)文件的示例代码。我们将使用Biopython的Bio.PDB模块来读取和分析蛋白质结构。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from Bio.PDB import PDBParser

# 读取PDB文件
pdb_file = "example.pdb"
parser = PDBParser()
structure = parser.get_structure("example_protein", pdb_file)

# 遍历蛋白质结构中的链、残基和原子
for model in structure:
    for chain in model:
        print("链: ", chain.id)
        for residue in chain:
            print("  残基: ", residue.resname, residue.id[1])
            for atom in residue:
                print("    原子: ", atom.name, atom.coord)

​ 此代码将读取名为"example.pdb"的PDB文件,并将其解析为蛋白质结构。之后,它将遍历蛋白质结构中的链、残基和原子,并打印它们的信息。请确保将"example.pdb"替换为您要处理的PDB文件的实际文件名。

​ 请注意,这只是一个简单的示例,实际上,Python和Biopython库可以用于执行更复杂的结构生物信息学任务,例如计算原子距离、结构比对、蛋白质表面分析等。还可以使用其他结构生物信息学库,如MDAnalysis和ProDy,根据需求处理和分析蛋白质结构数据。

8、生物信息学工作流程开发的python示例代码

​ 以下是一个使用Python和Snakemake库创建生物信息学工作流程的示例代码。在这个示例中,我们将构建一个简单的RNA-seq分析工作流程,包括序列质量控制、比对和表达量计算。

首先,请确保已安装Snakemake库。您可以使用以下命令安装:

1
pip install snakemake

接下来,我们将创建一个名为Snakefile的文件,该文件是Snakemake工作流程的核心定义文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Snakefile
import os

# 定义输入文件夹,输出文件夹和样本
input_dir = "raw_data"
output_dir = "results"
samples = ["sample1", "sample2", "sample3"]

# 定义规则:FastQC质量控制
rule fastqc:
    input:
        os.path.join(input_dir, "{sample}.fastq")
    output:
        os.path.join(output_dir, "fastqc", "{sample}_fastqc.html")
    shell:
        "fastqc {input} --outdir={output_dir}/fastqc"

# 定义规则:比对到参考基因组
rule align:
    input:
        os.path.join(input_dir, "{sample}.fastq")
    output:
        os.path.join(output_dir, "aligned", "{sample}.sam")
    shell:
        "hisat2 -x path/to/reference_genome -U {input} -S {output}"

# 定义规则:计算表达量
rule quantification:
    input:
        os.path.join(output_dir, "aligned", "{sample}.sam")
    output:
        os.path.join(output_dir, "counts", "{sample}.txt")
    shell:
        "htseq-count -f sam {input} path/to/annotation.gtf > {output}"

# 定义工作流程的目标
rule all:
    input:
        expand(os.path.join(output_dir, "counts", "{sample}.txt"), sample=samples)

​ 在这个Snakefile中,我们定义了三个规则:fastqc用于执行FastQC质量控制,align用于将测序数据与参考基因组进行比对,quantification用于计算基因的表达量。最后,我们定义了一个名为all的规则,用于指定工作流程的目标输出。

​ 要运行此工作流程,请确保在您的终端中已安装并设置好相应的工具(如FastQC、hisat2和htseq-count),并将上述代码保存为Snakefile。然后,在Snakefile所在的目录中运行以下命令:

1
snakemake --cores 4

​ 这将使用4个核心运行工作流程。请注意,这只是一个简单的示例,实际上,Python和Snakemake库可以用于创建更复杂的生物信息学工作流程,涵盖从原始数据预处理到高级分析的整个过程。还可以使用其他工作流程管理工具,如Nextflow和CWL,根据需求创建和管理复杂的生物信息学工作流程。