Initiation à la bioinformatique

Utiliser la cartographie des séquences d’ADN pour répondre aux questions biologiques

De nombreuses questions biologiques peuvent être traduites en un problème de séquençage de l’ADN. Par exemple, si vous voulez connaître le niveau d’expression d’un gène, vous pouvez : copier ses ARNm dans des molécules d’ADN complémentaires, séquencer chacune des molécules d’ADN résultantes, mapper ces séquences sur le génome de référence, puis utiliser le nombre d’alignements qui se chevauchent. le gène comme proxy de son expression (voir [RNA-seq][1]). D’autres exemples incluent : la détermination de la [structure 3D du génome][2], la localisation des [marques d’histone][3] et la cartographie des [interactions ARN-ADN][4]. Une liste non à jour des questions biologiques abordées par des méthodes intelligentes de séquençage de l’ADN peut être trouvée [ici][5].

En règle générale, les scientifiques du laboratoire humide (les personnes portant des blouses blanches et des lunettes) concevront et réaliseront les expériences pour obtenir les échantillons d’ADN séquencés. Ensuite, un bioinformaticien (les personnes utilisant des ordinateurs et buvant du café) prendra ces séquences –codées sous forme de [fichiers FASTQ][6]– et les mappera sur un génome de référence, en enregistrant les résultats sous forme de [fichiers BAM][7] .

Pour en revenir à notre exemple d’expression génique, voici comment un bioinformaticien générerait un fichier BAM à partir d’un fichier FASTQ (en utilisant un système Linux) :

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

Où [STAR][8] est un aligneur tolérant à l’épissage (nécessaire pour les jonctions exon-intron qui peuvent être présentes sur l’ARNm).

PS : Une fois les résultats du mapping obtenus, la partie créative commence. C’est là que les bioinformaticiens ont conçu un test statistique pour vérifier si les données montrent des modèles biologiquement significatifs ou des signaux parasites nés du bruit.

[1] : http://www.nature.com/nmeth/journal/v5/n7/full/nmeth.1226.html [2] : http://science.sciencemag.org/content/326/5950/289 [3] : http://science.sciencemag.org/content/316/5830/1497 [4] : http://dx.doi.org/10.1016/j.cub.2017.01.011 [5] : https://liorpachter.wordpress.com/seq/ [6] : https://en.wikipedia.org/wiki/FASTQ_format [7] : http://software.broadinstitute.org/software/igv/bam [8] : https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4631051/

Analyseur de fichiers .GFF (comme tampon) avec filtre pour ne conserver que les lignes

""" 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> \
    }

Définition

(Wikipedia) La bioinformatique est un domaine interdisciplinaire qui développe des méthodes et des outils logiciels pour comprendre les données biologiques. En tant que domaine scientifique interdisciplinaire, la bioinformatique combine l’informatique, les statistiques, les mathématiques et l’ingénierie pour analyser et interpréter les données biologiques. La bioinformatique a été utilisée pour des analyses in silico de requêtes biologiques à l’aide de techniques mathématiques et statistiques.