bioinformatics生物信息学入门


备注

生物信息学是一个跨学科领域,开发用于理解生物数据的方法和软件工具。

生物信息学的主题包括:

  • 序列分析
  • 系统发育
  • 分子模型
  • 基因和蛋白质表达分析

.GFF文件解析器(作为缓冲区),带过滤器,只保留行

""" A [GFF parser script][1] in Python for [www.VigiLab.org][2]

    Description: 
        - That performs buffered reading, and filtering (see: @filter) of .GFF input file (e.g. "[./toy.gff][3]") to keep only rows whose field (column) values are equal to "transcript"...
    
    Args:
        - None (yet)

    Returns:
        - None (yet)

    Related:
        - [1]: https://github.com/a1ultima/vigilab_intergeneShareGFF/blob/master/README.md
        - [2]: http://www.vigilab.org/
        - [3]: https://github.com/a1ultima/vigilab_intergeneShareGFF/blob/master/toy.gff

"""
gene_to_field = {}  # dict whose keys: genes represented (i.e. later slice-able/index-able) as 1..n, values, where n = 8 total #fields (cols) of a gff row, whose version is unknown but example is: https://github.com/a1ultima/vigilab_intergeneShareGFF/blob/master/toy.gff

gene_i = 0

with open("./toy.gff", "r") as fi:

    print("Reading GFF file into: gene_to_field (dict), index as such: gene_to_field[gene_i], where gene_i is between 1-to-n...")

while True: # breaks once there are no more lines in the input .gff file, see "@break"

    line = fi.readline().rstrip() # no need for trailing newline chars ("\n")

    if line == "":  # @break
        break
    
    line_split = line.split("\t") # turn a line of input data into a list, each element = different field value, e.g. [...,"transcript",...]

    if line_split[2] != "transcript": # @@filter incoming rows so only those with "transcript" are not skipped by "continue"
        continue

    gene_i += 1  # indexing starts from 1 (i.e. [1] = first gene) ends at n

    ##@TEST: sometimes 4.00 instead of 4.0 (trivial)   # some @deprecated code, but may be useful one day
    #if not (str(line_split[5])==str(float(line_split[5]))):
    #    print("oops")
    #    print("\t"+str(line_split[5])+"___"+str(float(line_split[5])))


    # create a dict key, for gene_to_field dict, and set its values according to list elements in line_split

    gene_to_field[gene_i] = { \
        "c1_reference_seq":line_split[0],# e.g. 'scaffold_150' \
        "c2_source":line_split[1],# e.g. 'GWSUNI' \
        "c3_type":line_split[2],# e.g. 'transcript' \
        "c4_start":int(line_split[3]),# e.g. '1372' \
        "c5_end":int(line_split[4]),# e.g. '2031' \
        "c6_score":float(line_split[5]),# e.g. '45.89' \
        "c7_strand":line_split[6],# e.g. '+' \
        "c8_phase":line_split[7],# e.g. '.' @Note: codon frame (0,1,2) \
        "c9_attributes":line_split[8]# e.g. <see @gff3.md> \
    }
 

定义

(维基百科)生物信息学是一个跨学科领域,开发用于理解生物数据的方法和软件工具。作为一门跨学科的科学领域,生物信息学将计算机科学,统计学,数学和工程学结合起来,以分析和解释生物数据。生物信息学已被用于使用数学和统计技术进行生物学查询的计算机分析。

使用DNA序列的映射来回答生物学问题

许多生物学问题可以转化为DNA测序问题。例如,如果您想知道基因的表达水平,您可以:将其mRNA复制到互补的DNA分子中,对每个产生的DNA分子进行测序,将这些序列映射回参考基因组,然后使用重叠的比对计数该基因作为其表达的代表(参见RNA-seq )。其他示例包括:确定基因组3D结构 ,定位组蛋白标记 ,以及映射RNA-DNA相互作用 。可以在此处找到通过巧妙的DNA测序方法解决的不是最新的生物学问题列表。

通常情况下,湿实验室的科学家(穿着白大褂和护目镜的人)将设计并进行实验以获得测序的DNA样本。然后,生物信息学家(使用计算机和喝咖啡的人)将这些序列 - 编码为FASTQ文件 - 并将它们映射到参考基因组,将结果保存为BAM文件

回到我们的基因表达示例,这就是生物信息学家如何从FASTQ文件(使用Linux系统)生成BAM文件:

STAR --genomeDir path/to/reference/genome --outSAMtype BAM --readFilesIn my_reads.fastq
 

其中STAR是剪接耐受的对准器(对于可能存在于mRNA上的外显子 - 内含子连接是必需的)。

PS:获得映射结果后,创意部分开始。在这里,生物信息学家设计了统计测试,以检查数据是否显示出生物学上有意义的模式或由噪声产生的虚假信号。