Accéder au contenu principal

Introduction à Bioconductor

Apprenez à réaliser des analyses informatiques et statistiques sur les résultats de vos expériences biologiques.
Actualisé 19 sept. 2026  · 8 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Dans ce tutoriel, vous allez découvrir l’univers de Bioconductor. Vous serez ainsi en mesure d’effectuer des analyses informatiques et statistiques sur les résultats de vos expériences biologiques, étape indispensable pour démontrer la solidité de vos conclusions. En d’autres termes, vous pourrez vérifier si vos données sont cohérentes avec votre hypothèse à l’aide de ce projet. Vous pourrez aussi valider votre question scientifique de façon statistique, sans y consacrer trop de temps ni de budget.

En bref, ce tutoriel clarifiera :

  • Qu’est-ce que Bioconductor ?
  • Que recouvrent les packages R Bioconductor ?
  • Comment l’utiliser concrètement ?

Bref aperçu

Bioconductor : analyse et compréhension des données génomiques à haut débit

Bioconductor est un écosystème logiciel ouvert dédié à la biologie computationnelle et à la bioinformatique. Il s’agit d’un projet open source et en développement ouvert pour la communauté de la biologie computationnelle : open source, car chacun peut lire et modifier le code, et en développement ouvert, car chacun peut contribuer et participer à son évolution. Il s’appuie sur le langage R, largement utilisé en data science pour sa flexibilité, notamment en analyse de données. R offre également des capacités graphiques de haute qualité et s’interface facilement avec d’autres langages. Bioconductor donne accès à de puissantes méthodes statistiques et graphiques pour l’analyse de données génomiques. Il facilite aussi l’intégration de métadonnées biologiques comme GenBank, GO, LocusLink et PubMed dans l’analyse de données expérimentales.

Par ailleurs, il permet de développer rapidement des logiciels extensibles, interopérables et évolutifs. Bioconductor favorise également une documentation de qualité et la recherche reproductible, et constitue un support de formation aux méthodes statistiques et informatiques. En résumé, Bioconductor se décline en trois volets complémentaires :

Analyse statistique Compréhension Haut débit
Grandes volumétries Contexte biologique Séquençage
Artéfacts technologiques Visualisation Micropuces
Expériences planifiées Reproductibilité Cytométrie en flux

En biologie computationnelle, répondre à une question précise nécessite presque toujours d’assembler de nombreux outils. Cela conduit souvent à créer un package réutilisable par d’autres chercheurs. Bioconductor est ainsi aussi un dépôt de packages R avec des règles et des principes directeurs. La version 3.7 compte plus de 1 500 packages, utilisés par des milliers de chercheurs dans le monde, et généralement très bien documentés. Comme chacun peut contribuer, plusieurs packages peuvent coexister pour résoudre un même problème, ce qui stimule une saine émulation entre développeurs.

Le site web propose tout le nécessaire pour installer, apprendre, utiliser et contribuer aux projets Bioconductor. Lancé à l’automne 2001, le projet réunit plus de 20 développeurs principaux aux États‑Unis, en Europe et en Australie.

bioconductor

En résumé, Bioconductor se concentre sur l’analyse statistique et la compréhension des données génomiques à haut débit. L’accent mis sur l’analyse statistique découle de la nature même des données : les méthodes modernes génèrent des volumes massifs qui exigent des synthèses statistiques. En tant que chercheurs, nous devons mener des expériences ciblées et conçues dans un cadre statistique. La technologie qui produit les données génétiques modernes et les protocoles de laboratoire employés induisent des artéfacts qu’il faut traiter avec des techniques statistiques. Enfin, les enjeux d’intégration de données hétérogènes nous obligent à considérer attentivement les conséquences statistiques de chaque étape.

Packages R Bioconductor

Le logiciel Bioconductor est constitué de packages additionnels pour R. Un package R est un ensemble structuré de code (R, C, ou autre), de documentation et/ou de données pour réaliser des analyses spécifiques (par ex. : affy, cluster, graph). Il fournit des implémentations de méthodes statistiques et graphiques dédiées.

Dans la dernière version de Bioconductor, plus de 1 500 packages sont disponibles. On peut les regrouper en quatre catégories :

• Packages d’analyse : outils pour analyser des données génomiques à haut débit, par ex. : IMMAN, limma

• Packages d’annotation : bases statiques de correspondances d’identifiants, modèles de gènes, voies métaboliques, etc. ; par ex. : TxDb.Hsapiens.UCSC.hg19.knownGene

• Packages de données d’expériences illustratives : jeux de données servant à démontrer les fonctionnalités logicielles, par ex. : airway

• Packages de workflows : documents décrivant un enchaînement bioinformatique impliquant plusieurs packages Bioconductor pour éclairer des domaines précis de la biologie (comme la protéomique), par ex. : highthroughputassays

Principaux packages Bioconductor

Utilisation de Bioconductor

Installation

Pour une première utilisation de Bioconductor, installez la dernière version de R puis la dernière version de Bioconductor en démarrant R et en saisissant les commandes suivantes :

## try http:// if https:// URLs are not supported
source("https://bioconductor.org/biocLite.R")
biocLite()

Ces commandes installent tous les packages cœur de la dernière version de Bioconductor. Pour installer des packages spécifiques comme IMMAN et GenomicRanges disponibles dans le dépôt Bioconductor, suivez les instructions de la page du package, par exemple :

source("https://bioconductor.org/biocLite.R")
biocLite(c( "Biostrings", "GenomicRanges", "IMMAN"))

La fonction biocLite() du package BiocInstaller est utilisée pour l’installation des packages à la place de la fonction standard install.packages() de R. En effet, Bioconductor possède un dépôt distinct de CRAN et un calendrier de publication différent de celui de R, ce qui peut entraîner des décalages. La version identifiée par install.packages() n’est donc pas toujours la plus récente « release » disponible.

Exemples d’utilisation

Après l’installation initiale, cette section vous propose quelques exemples simples pour vous familiariser avec l’environnement Bioconductor. Deux illustrations de composantes variées du projet (séquençage à haut débit, analyse statistique et compréhension) sont réunies ici.

Pour commencer, afin de vous familiariser avec les données à haut débit, vous allez manipuler des séquences d’ADN. Pour cela, utilisez Biostrings, package de référence pour manipuler de grandes séquences biologiques. Vous pouvez notamment recourir à DNAStringSet() pour stocker un ensemble de DNAString (chaînes basées sur l’alphabet ADN selon l’alphabet génétique étendu IUPAC). Cette fonction convertit l’entrée en un objet XStringSet de type ADN. Les lettres sont encodées pour optimiser les algorithmes de recherche rapide.

library(Biostrings)

## Loading required package: BiocGenerics

## Loading required package: parallel

##
## Attaching package: 'BiocGenerics'

## The following objects are masked from 'package:parallel':
##
##     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
##     clusterExport, clusterMap, parApply, parCapply, parLapply,
##     parLapplyLB, parRapply, parSapply, parSapplyLB

## The following objects are masked from 'package:stats':
##
##     IQR, mad, sd, var, xtabs

## The following objects are masked from 'package:base':
##
##     anyDuplicated, append, as.data.frame, basename, cbind,
##     colMeans, colnames, colSums, dirname, do.call, duplicated,
##     eval, evalq, Filter, Find, get, grep, grepl, intersect,
##     is.unsorted, lapply, lengths, Map, mapply, match, mget, order,
##     paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind,
##     Reduce, rowMeans, rownames, rowSums, sapply, setdiff, sort,
##     table, tapply, union, unique, unsplit, which, which.max,
##     which.min

## Loading required package: S4Vectors

## Loading required package: stats4

##
## Attaching package: 'S4Vectors'

## The following object is masked from 'package:base':
##
##     expand.grid

## Loading required package: IRanges

##
## Attaching package: 'IRanges'

## The following object is masked from 'package:grDevices':
##
##     windows

## Loading required package: XVector

##
## Attaching package: 'Biostrings'

## The following object is masked from 'package:base':
##
##     strsplit

dnaSequence <- DNAStringSet( c("AAACTG", "CCCAACCA") )
dnaSequence

##   A DNAStringSet instance of length 2
##     width seq
## [1]     6 AAACTG
## [2]     8 CCCAACCA

Vous pouvez ensuite utiliser la fonction complement() pour calculer le complément des séquences d’ADN.

complement(dnaSequence)

##   A DNAStringSet instance of length 2
##     width seq
## [1]     6 TTTGAC
## [2]     8 GGGTTGGT

Apprendre à utiliser des packages comme DNAStringSet et Biostrings vous servira dans bien d’autres packages.

Dans un autre exemple, utilisons le package GenomicRanges, dédié à la représentation des positions génomiques dans le cadre de Bioconductor. Il constitue une base pour l’analyse génomique au travers de trois classes (GRanges, GPos et GRangesList) représentant respectivement des intervalles génomiques, des positions génomiques et des groupes d’intervalles.

La classe GRanges sert à décrire un ensemble d’intervalles génomiques, chacun ayant un début et une fin sur le génome. Elle stocke l’emplacement de caractéristiques génomiques telles que sites de liaison contigus, transcrits et exons. On crée ces objets avec le constructeur GRanges comme suit :

library(GenomicRanges)

## Loading required package: GenomeInfoDb

grangeObj <-
  GRanges(seqnames =
            Rle(c("chr1", "chr2", "chr1", "chr3"), c(1, 3, 2, 4)),
          ranges =
            IRanges(1:10, end = 7:16, names = head(letters, 10)),
          strand =
            Rle(strand(c("-", "+", "*", "+", "-")),
                c(1, 2, 2, 3, 2)),
          score = 1:10,
          GC = seq(1, 0, length=10))

grangeObj

## GRanges object with 10 ranges and 2 metadata columns:
##     seqnames    ranges strand |     score                GC
##        <Rle> <IRanges>  <Rle> | <integer>         <numeric>
##   a     chr1       1-7      - |         1                 1
##   b     chr2       2-8      + |         2 0.888888888888889
##   c     chr2       3-9      + |         3 0.777777777777778
##   d     chr2      4-10      * |         4 0.666666666666667
##   e     chr1      5-11      * |         5 0.555555555555556
##   f     chr1      6-12      + |         6 0.444444444444444
##   g     chr3      7-13      + |         7 0.333333333333333
##   h     chr3      8-14      + |         8 0.222222222222222
##   i     chr3      9-15      - |         9 0.111111111111111
##   j     chr3     10-16      - |        10                 0
##   -------
##   seqinfo: 3 sequences from an unspecified genome; no seqlengths

Le résultat est un objet GRanges contenant 10 intervalles génomiques. Comme on le voit, l’affichage sépare les informations en une zone gauche et droite, séparées par le symbole |. Les coordonnées génomiques (seqnames, ranges et strand) se trouvent à gauche, les colonnes de métadonnées (annotations) à droite. Ici, les métadonnées incluent un score et la teneur en GC. Toutefois, on peut stocker à peu près tout type d’information dans la partie métadonnées d’un objet GRanges.

Les fonctions d’accès seqnames(), ranges() et strand() permettent d’extraire les composants des coordonnées génomiques d’un objet GRanges. Par exemple :

seqnames(grangeObj)

## factor-Rle of length 10 with 4 runs
##   Lengths:    1    3    2    4
##   Values : chr1 chr2 chr1 chr3
## Levels(3): chr1 chr2 chr3

ranges(grangeObj)

## IRanges object with 10 ranges and 0 metadata columns:
##         start       end     width
##     <integer> <integer> <integer>
##   a         1         7         7
##   b         2         8         7
##   c         3         9         7
##   d         4        10         7
##   e         5        11         7
##   f         6        12         7
##   g         7        13         7
##   h         8        14         7
##   i         9        15         7
##   j        10        16         7

strand(grangeObj)

## factor-Rle of length 10 with 5 runs
##   Lengths: 1 2 2 3 2
##   Values : - + * + -
## Levels(3): + - *

Dernier exemple : un aperçu de la partie « analyse statistique » du projet avec la classification Gene Ontology (GO). GO est un ensemble de concepts (fonction moléculaire, composant cellulaire, processus biologique) décrivant la fonction des gènes et les relations entre ces concepts. Plus précisément, GO classe gènes et produits géniques de façon hiérarchique dans un graphe appelé ontologie. Pour illustrer cela, trois packages Bioconductor peuvent être utilisés : clusterProfiler, DOSE et org.Hs.eg.db.

library("clusterProfiler")

##

## clusterProfiler v3.8.1  For help: https://guangchuangyu.github.io/software/clusterProfiler
##
## If you use clusterProfiler in published research, please cite:
## Guangchuang Yu, Li-Gen Wang, Yanyan Han, Qing-Yu He. clusterProfiler: an R package for comparing biological themes among gene clusters. OMICS: A Journal of Integrative Biology. 2012, 16(5):284-287.

library("DOSE")

## DOSE v3.6.1  For help: https://guangchuangyu.github.io/DOSE
##
## If you use DOSE in published research, please cite:
## Guangchuang Yu, Li-Gen Wang, Guang-Rong Yan, Qing-Yu He. DOSE: an R/Bioconductor package for Disease Ontology Semantic and Enrichment analysis. Bioinformatics 2015, 31(4):608-609

library("org.Hs.eg.db")

## Loading required package: AnnotationDbi

## Loading required package: Biobase

## Welcome to Bioconductor
##
##     Vignettes contain introductory material; view with
##     'browseVignettes()'. To cite Bioconductor, see
##     'citation("Biobase")', and for packages 'citation("pkgname")'.

##

Le package clusterProfiler regroupe des méthodes pour analyser et visualiser des profils fonctionnels (comme GO) de gènes et de clusters de gènes. Il permet, par exemple, de regrouper des gènes selon leurs similarités. Pour illustrer la démarche, l’ensemble de données geneList utilisé dans le package DOSE est un bon point de départ : il contient des informations de contenu pour des identifiants de gènes. De son côté, le package org.Hs.eg.db fournit des annotations à l’échelle du génome humain, c’est‑à‑dire une représentation des séquences enrichie d’informations de positionnement génomique.

data(geneList, package="DOSE")

gene <- names(geneList)[abs(geneList) > 2]

La fonction enrichGO() réalise une analyse d’enrichissement GO sur un vecteur de gènes. L’analyse d’enrichissement vise à identifier des groupes de gènes associés à des catégories prédéfinies en fonction de leurs caractéristiques fonctionnelles. Les résultats peuvent inclure des termes très généraux. Pour utiliser cette fonction, vous devez renseigner l’argument « OrgDb ». Pour cela, le package org.Hs.eg.db (annotation du génome humain) est requis. Ce package fournit une représentation des séquences enrichie d’informations de position génomique.

ego <- enrichGO(gene          = gene,
                universe      = names(geneList),
                OrgDb         = org.Hs.eg.db,
                ont           = "CC",
                pAdjustMethod = "BH",
                pvalueCutoff  = 0.01,
                qvalueCutoff  = 0.05,
        readable      = TRUE)
head(ego)

##                    ID                              Description GeneRatio
## GO:0005819 GO:0005819                                  spindle    25/201
## GO:0000779 GO:0000779 condensed chromosome, centromeric region    15/201
## GO:0072686 GO:0072686                          mitotic spindle    14/201
## GO:0000775 GO:0000775           chromosome, centromeric region    18/201
## GO:0000776 GO:0000776                              kinetochore    15/201
## GO:0000793 GO:0000793                     condensed chromosome    18/201
##              BgRatio       pvalue     p.adjust       qvalue
## GO:0005819 256/11817 1.353146e-12 3.897060e-10 3.546666e-10
## GO:0000779  91/11817 3.013479e-11 3.393318e-09 3.088217e-09
## GO:0072686  77/11817 3.534706e-11 3.393318e-09 3.088217e-09
## GO:0000775 156/11817 1.429309e-10 1.029103e-08 9.365738e-09
## GO:0000776 106/11817 2.849245e-10 1.406873e-08 1.280378e-08
## GO:0000793 163/11817 2.970249e-10 1.406873e-08 1.280378e-08
##                                                                                                                                                         geneID
## GO:0005819 CDCA8/CDC20/KIF23/CENPE/ASPM/DLGAP5/SKA1/NUSAP1/TPX2/TACC3/NEK2/CDK1/MAD2L1/KIF18A/BIRC5/KIF11/TTK/AURKB/PRC1/KIFC1/KIF18B/KIF20A/AURKA/CCNB1/KIF4A
## GO:0000779                                                            CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/CDT1/BIRC5/NCAPG/AURKB/AURKA/CCNB1
## GO:0072686                                                                KIF23/CENPE/ASPM/NUSAP1/TPX2/TACC3/CDK1/MAD2L1/KIF18A/KIF11/AURKB/KIFC1/KIF18B/AURKA
## GO:0000775                                           CDCA8/CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/KIF18A/CDT1/BIRC5/TTK/NCAPG/AURKB/AURKA/CCNB1
## GO:0000776                                                             CENPE/NDC80/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/KIF18A/CDT1/BIRC5/TTK/AURKB/CCNB1
## GO:0000793                                          CENPE/NDC80/TOP2A/NCAPH/HJURP/SKA1/NEK2/CENPM/CENPN/ERCC6L/MAD2L1/CDT1/BIRC5/NCAPG/AURKB/CHEK1/AURKA/CCNB1
##            Count
## GO:0005819    25
## GO:0000779    15
## GO:0072686    14
## GO:0000775    18
## GO:0000776    15
## GO:0000793    18

Pour visualiser la carte d’enrichissement, utilisez la fonction emapplot(). Elle représente les ensembles de gènes sous forme de réseau. En simplifiant, des ensembles de gènes qui se recoupent forment des clusters.

emapplot(ego)
enrichment map

Obtenir de l’aide

Lors de l’utilisation des packages Bioconductor, si vous avez besoin d’aide, vous pouvez recourir aux commandes suivantes :

class(dnaSequence) # Indique la classe de l'objet en entrée

## [1] "DNAStringSet"
## attr(,"package")
## [1] "Biostrings"

methods(class = "DNAStringSet") # Liste toutes les méthodes disponibles pour une fonction ou classe générique S3/S4

##   [1] !                               !=                             
##   [3] $                               $<-                            
##   [5] %in%                            [                              
##   [7] [[                              [[<-                           
##   [9] [<-                             <                              
##  [11] <=                              ==                             
##  [13] >                               >=                             
##  [15] aggregate                       alphabetFrequency              
##  [17] anyNA                           append                         
##  [19] as.character                    as.complex                     
##  [21] as.data.frame                   as.env                         
##  [23] as.factor                       as.integer                     
##  [25] as.list                         as.logical                     
##  [27] as.matrix                       as.numeric                     
##  [29] as.raw                          as.vector                      
##  [31] by                              c                              
##  [33] cbind                           chartr                         
##  [35] coerce                          compact                        
##  [37] compareStrings                  complement                     
##  [39] concatenateObjects              consensusMatrix                
##  [41] consensusString                 countOverlaps                  
##  [43] countPattern                    countPDict                     
##  [45] dinucleotideFrequencyTest       do.call                        
##  [47] droplevels                      duplicated                     
##  [49] elementMetadata                 elementMetadata<-              
##  [51] elementNROWS                    elementType                    
##  [53] eval                            expand                         
##  [55] expand.grid                     extractAt                      
##  [57] extractROWS                     Filter                         
##  [59] findOverlaps                    getListElement                 
##  [61] hasOnlyBaseLetters              head                           
##  [63] ifelse2                         intersect                      
##  [65] is.na                           is.unsorted                    
##  [67] isEmpty                         isMatchingEndingAt             
##  [69] isMatchingStartingAt            lapply                         
##  [71] length                          lengths                        
##  [73] letterFrequency                 match                          
##  [75] matchPattern                    matchPDict                     
##  [77] mcols                           mcols<-                        
##  [79] merge                           metadata                       
##  [81] metadata<-                      mstack                         
##  [83] names                           names<-                        
##  [85] nchar                           neditEndingAt                  
##  [87] neditStartingAt                 NROW                           
##  [89] nucleotideFrequencyAt           oligonucleotideFrequency       
##  [91] order                           overlapsAny                    
##  [93] PairwiseAlignments              PairwiseAlignmentsSingleSubject
##  [95] parallelSlotNames               parallelVectorNames            
##  [97] pcompare                        pcompareRecursively            
##  [99] PDict                           PWM                            
## [101] rank                            rbind                          
## [103] Reduce                          relist                         
## [105] relistToClass                   rename                         
## [107] rep                             rep.int                        
## [109] replaceAt                       replaceLetterAt                
## [111] replaceROWS                     rev                            
## [113] revElements                     reverse                        
## [115] reverseComplement               ROWNAMES                       
## [117] sapply                          seqinfo                        
## [119] seqinfo<-                       seqlevelsInUse                 
## [121] seqtype                         seqtype<-                      
## [123] setdiff                         setequal                       
## [125] setListElement                  shiftApply                     
## [127] show                            showAsCell                     
## [129] sort                            split                          
## [131] split<-                         stack                          
## [133] stringDist                      strsplit                       
## [135] subseq                          subseq<-                       
## [137] subset                          subsetByOverlaps               
## [139] table                           tail                           
## [141] tapply                          threebands                     
## [143] toString                        transform                      
## [145] translate                       trimLRPatterns                 
## [147] twoWayAlphabetFrequency         union                          
## [149] unique                          uniqueLetters                  
## [151] unlist                          unsplit                        
## [153] unstrsplit                      updateObject                   
## [155] values                          values<-                       
## [157] vcountPattern                   vcountPDict                    
## [159] vmatchPattern                   vwhichPDict                    
## [161] which.isMatchingEndingAt        which.isMatchingStartingAt     
## [163] whichPDict                      width                          
## [165] window                          window<-                       
## [167] windows                         with                           
## [169] within                          xtabs                          
## [171] xvcopy                          zipdown                        
## see '?methods' for accessing help and source code

?complement # Affiche la page d'aide de la fonction

## starting httpd help server ... done

browseVignettes(package="Biostrings") # Liste toutes les vignettes disponibles du package

En complément, de nombreuses pages d’aide et workflows sont disponibles sur les sites Bioconductor :

Pour conclure

En lisant ce tutoriel, vous avez découvert le projet Bioconductor et son rôle clé dans la recherche en biologie. Nous avons passé en revue les différents types de packages Bioconductor et certains des plus importants. Vous avez ensuite vu comment installer et utiliser le projet. Vous avez appris à travailler avec les packages Biostrings et GenomicRanges, et vous vous êtes ainsi familiarisé avec les séquences d’ADN et les intervalles génomiques. Dans un autre exemple, vous avez appliqué une analyse d’enrichissement à un ensemble de gènes humains, ce qui vous a permis de comprendre les principes de l’analyse d’enrichissement et de GO. Enfin, nous avons recensé différentes façons d’obtenir de l’aide lors de l’utilisation de Bioconductor. Pour aller plus loin, n’hésitez pas à consulter Bioconductor_courses.

Si vous souhaitez approfondir R, suivez le cours Experimental Design in R de DataCamp.

Sujets
R
Science des données

Cours R

Cours

Introduction à R

4 h
3.1M
Maîtrisez les bases de l’analyse de données en R et pratiquez les vecteurs, listes et data frames avec des données réelles.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow