silico.biotoul.fr
 

M2BBS - IDH

From silico.biotoul.fr

(Difference between revisions)
Jump to: navigation, search
m (Neo4j)
m (Modélisation, représentation et construction d'une base de connaissances sur E. coli puis exploitation)
 
(23 intermediate revisions not shown)
Line 1: Line 1:
-
=Prise en main de la librairie R/Bioconductor R-STRINGdb=
+
= Introduction et présentation des différentes approches d'intégration =
-
Sites et documentation :
+
Durée : 1/2 journée
-
* STRING : http://string-db.org/
+
-
* R-STRINGdb : https://bioconductor.org/packages/release/bioc/html/STRINGdb.html
+
-
* R-STRINGdb [[Media:RSTRINGdb.Vignette.pdf|Vignette]] et [[Media:RSTRINGdb.man.pdf|Man]]
+
-
Travail à réaliser :
+
* [[Media:M2BBS - Integration de Donnees Heterogenes - Generalites.pdf|Approches]] et généralités
-
* Installer la librairie (si nécessaire)
+
-
* Retrouver l'espèce ''Escherichia coli'' K12 MG1655, quel est son identifiant taxonomique/STRINGdb ?
+
-
* Quelle est la différence entre STRINGdb core et STRINGdb periphery ?
+
-
* Télécharger tout le graphe pour ''E. coli'' K12 pour un seuil de 400. A quoi correspond ce seuil ? combien d'interactions obtenez-vous ?
+
-
* Afficher le sous graphe pour les groupe de gènes <tt>ALAS ARGS ASNS ASPS CYSS GLTX GLYQ GLYS HISS ILES</tt>. A quoi correspond la p-valeur affichée ?
+
-
* Télécharger les annotations associées à chaque sommet.
+
-
= Enrichment analysis =
+
* Analyses préliminaires sur les données d'''E. coli'' : [https://silico.biotoul.fr/enseignement/m2bbs/idh/ppi.vs.coexp.html ppi.vs.coexp.html]
-
Dans cette partie, il s'agit d'analyser un groupe de gènes en le confrontant à des groupes de gènes obtenus selon différentes fonctions de regroupement.
+
= Modélisation, représentation et construction d'une base de connaissances sur ''E. coli'' puis exploitation =
-
La fonction de regroupement proposée est l'appartenance à une même voie métabolique dans la banque de données BioCyc. Ainsi, pour chaque ''pathway'', un groupe de gènes est formé.
+
Durée : 1 journée
-
Le script python [[Media:search_enriched_sets.py|search_enriched_sets.py]] permet de charger ces ensembles de gènes pré-formés [[Media:EcolA.biocyc.sets|EcolA.biocyc.sets]] et de chercher les plus similaires à un groupe de gènes d'intérêts. Essayez-le avec <tt>ALAS ARGS ASNS ASPS CYSS GLTX GLYQ GLYS HISS ILES</tt> par exemple pour vous faire une idée de son fonctionnement.
+
* [[Media:M2BBS - Integration de Donnees Heterogenes - NoSQL.pdf|Masses de données non structurées]]
-
'''Remarque :''' le script python utilise le module scipy.
+
* Prise en main de Neo4j et intégration des données sur le génome d'''E. coli'' : [https://silico.biotoul.fr/enseignement/m2bbs/idh/Ecoli.knowledge.base.html Ecoli.knowledge.base.html]
-
root> pip install scipy
+
** Intégration de données d'expression
 +
** Intégration de données d'interaction protéine-protéine
 +
** Intégration de données phylogénomiques
 +
** Gènes co-exprimés et interactions protéiques et lien de conservation du contexte génomique
-
Comparez les résultats avec ceux obtenus en recherchant parmi les ensembles formés des gènes annotés avec le même terme de la Gene Ontology ([[Media:EcolA.go.sets|EcolA.go.sets]]). Que constatez-vous ?
+
* [[Media:M2BBS - Integration de Donnees Heterogenes - Enrichissement.pdf|Recherche de caractéristiques sur-représentées]]
-
 
+
** Intégration de données d'annotation et recherche d'annotations sur-représentées chez les gènes/protéines partageant un lien de coexpression/interaction/phylogénomique
-
Travail à réaliser :
+
-
* Analyser le code source du script search_enriched_sets.py
+
-
* Pour chaque pathway biocyc, proposer le term GO le plus représentatif
+
-
* Visualisation des résultats avec [http://revigo.irb.hr/ REVIGO]
+
-
<!-- * Modifier le script pour utiliser une autre mesure d'enrichissement et comparer les résultats obtenus (ex: &chi;<sup>2</sup> d'indépendance). (Travail à réaliser <u>en dehors de cette séance</u>) -->
+
-
 
+
-
 
+
-
= Intégration dans une base de données orientée graphes =
+
-
 
+
-
Sites et documentations :
+
-
* https://neo4j.com/
+
-
* https://neo4j.com/developer/get-started/
+
-
* pilotes : [https://neo4j.com/developer/python/ python] ; [https://neo4j.com/developer/r/ R]
+
-
* Cypher reference card: https://neo4j.com/docs/cypher-refcard/current/
+
-
* et dans guest@intervenant:/home/Documents/eBooks
+
-
* exemples d'applications :
+
-
** graphe de co-expression : https://neo4j.com/graphgist/dba96ed2-2d3c-469c-a1a4-cda067c873fc
+
-
** réseau métabolique : https://neo4j.com/graphgist/563e4bfc-a3d8-479d-b065-1f9c9b84027e#listing_category=science
+
-
 
+
-
<!--
+
-
** (pas besoin mais pour info) R : Install RNeo4j using devtools. (from https://nicolewhite.github.io/2014/05/30/demo-of-rneo4j-part1.html)
+
-
install.packages("devtools")
+
-
devtools::install_github("nicolewhite/RNeo4j")
+
-
library(RNeo4j)
+
-
-->
+
-
 
+
-
Téléchargement linux https://neo4j.com/download-center/#releases (onglet Community server)
+
-
 
+
-
 
+
-
 
+
-
Installation (cf.https://neo4j.com/docs/operations-manual/current/installation/)
+
-
tar tf neo4j-community-3.4.7-unix.tar.gz
+
-
tar xf neo4j-community-3.4.7-unix.tar.gz
+
-
ln -s neo4j-community-3.4.7 neo4j-community
+
-
cd neo4j-community/
+
-
 
+
-
Démarrage et arrêt du serveur
+
-
./bin/neo4j console
+
-
 
+
-
Le processus est au premier plan donc pour arrêter le serveur il faut faire <tt>Ctrl + C</tt> dans le terminal.
+
-
 
+
-
Utilisation depuis le navigateur (vérifier le port renseigné lors de la précédente commande)
+
-
http://localhost:7474/
+
-
 
+
-
A la première connexion, le mot de passe est <tt>neo4j</tt>, le système demande ensuite de changer le mot de passe. Explorez l'interface Web de Neo4j browser, notamment le côté gauche avec les paramètres, et les informations sur la base de données.
+
-
 
+
-
Dans la partie favoris, suivre le premier exemple dans ''Example Graphs'' intitulé ''Movie Graph''.
+
-
 
+
-
Passer ensuite à l'exemple suivant ''Northwind Graph'' et adapter les commandes pour importer le modèle suivant :
+
-
* les termes de la Gene Ontology et leurs relations <tt>is_a</tt> et <tt>part_of</tt> qui ne sont pas "périmés" (<tt>obsolete</tt>) ; cf. http://geneontology.org/ et http://geneontology.org/page/download-ontology http://geneontology.org/page/lead-database-schema et http://archive.geneontology.org/latest-termdb/go_daily-termdb-data.gz
+
-
* les protéines annotés avec ces termes ; cf. STRINGdb
+
-
 
+
-
<!--
+
-
Pour cela, vous allez devoir :
+
-
* télécharger une extraction du modèle et des données de la GO pour les restaurer sur votre instance MySQL,
+
-
* récupérer les protéines d'''E.coli'' K12 et les termes GO qui les annotent.
+
-
 
+
-
Après reformatage des données GO en fichiers CSV à partir d'une requête SQL, créer les sommets et arcs ou arêtes correspondants.
+
-
-->
+
-
 
+
-
 
+
-
Requêtes Cypher depuis Neo4j browser ou depuis le shell :
+
-
cycli -u neo4j -p
+
-
 
+
-
 
+
-
 
+
-
Utilisation depuis python.
+
-
 
+
-
Utilisation depuis R.
+
-
 
+
-
= Données et scripts =
+
-
* enrichment analysis
+
-
** [[Media:search_enriched_sets.py|search_enriched_sets.py]]
+
-
** [[Media:EcolA.biocyc.sets|EcolA.biocyc.sets]]
+
-
** [[Media:EcolA.go.sets|EcolA.go.sets]]
+
-
* R-STRINGdb [[silico:enseignement/m2bbs/idh/R-StringDB-tuto.html|tutoriel]]
+
-
<!--
+
-
* graph db
+
-
** [[Media:go-2016-09-21-termdb.gz]]
+
-
** [[Media:go.rel.is_a.dump.txt]]
+
-
** [[Media:go.rel.part_of.dump.txt]]
+
-
* nécessaire pour installer RSTRINGdb
+
-
dnf install libcurl-devel.x86_64
+
-
-->
+
-
 
+
-
== Neo4j ==
+
-
Restauration de la base de données entière récupérée sur geneontology.org :
+
-
<source lang='bash'>
+
-
mysql -uroot -p -e 'create database go'
+
-
mysql -uroot -p go < go_daily-termdb-data
+
-
</source>
+
-
 
+
-
Extraction d'un fichier csv tabulé pour l'import dans neo4j (dans le répertoire import)
+
-
<source lang='bash'>
+
-
  mysql -uroot -p go -B -e "SELECT id, acc, term_type, name FROM term WHERE acc LIKE 'GO:%' AND is_obsolete=0" > neo4j-community/import/go.terms.csv
+
-
</source>
+
-
 
+
-
'''Remarque :''' utiliser la commande sed pour remplacer les <tt>\t</tt> par des <tt>,</tt>
+
-
 
+
-
Import des termes GO dans Neo4j :
+
-
LOAD CSV WITH HEADERS FROM "file:///go.terms.csv" AS row
+
-
CREATE (n:GOTerm)
+
-
SET n = row,
+
-
  n.id = row.id,
+
-
  n.acc = row.acc,
+
-
  n.term_type = row.term_type,
+
-
  n.name = row.name 
+
-
 
+
-
Création des index :
+
-
CREATE INDEX ON :GOTerm(id)
+
-
CREATE INDEX ON :GOTerm(acc)
+
-
+
-
Exploration :
+
-
MATCH (n:GOTerm) RETURN count(n)
+
-
MATCH (n:GOTerm) RETURN n LIMIT 10
+
-
MATCH (n:GOTerm {name: 'reproduction'} ) RETURN n
+
-
+
-
Ajout des relations de type <tt>is_a</tt>
+
-
<source lang='sql'>
+
-
SELECT * FROM term WHERE name = 'is_a' OR name = 'part_of';
+
-
</source>
+
-
 
+
-
<source lang='bash'>
+
-
# IS_A (1)
+
-
mysql -uroot -p go -B -e "SELECT term1_id, term2_id FROM term2term WHERE relationship_type_id = 1" > neo4j-community/import/go.rel.is_a.dump.txt
+
-
</source>
+
-
 
+
-
Commandes dans Neo4j pour l'import :
+
-
USING PERIODIC COMMIT 1000
+
-
LOAD CSV WITH HEADERS FROM "file:///go.rel.is_a.dump.txt" AS line
+
-
MATCH (t1:GOTerm),(t2:GOTerm)
+
-
WHERE t1.id=line.term1_id AND t2.id=line.term2_id
+
-
WITH t1,t2
+
-
CREATE UNIQUE (t1)-[:IS_A]->(t2)
+
-
+
-
* ajout des relations <tt>part_of</tt>
+
-
# PART_OF (27)
+
-
mysql -uroot -p go -B -e "SELECT term1_id, term2_id FROM term2term WHERE relationship_type_id = 27" > neo4j-community/import/go.rel.part_of.dump.txt
+
-
vi neo4j-community/import/go.rel.part_of.dump.txt
+
-
+
-
USING PERIODIC COMMIT 1000
+
-
LOAD CSV WITH HEADERS FROM "file:///go.rel.part_of.dump.txt" AS line
+
-
MATCH (t1:GOTerm),(t2:GOTerm)
+
-
WHERE t1.id=line.term1_id AND t2.id=line.term2_id
+
-
WITH t1,t2
+
-
CREATE UNIQUE (t1)-[:PART_OF]->(t2)
+
-
 
+
-
Ajout des sommets correspondants aux protéines
+
-
<source lang='rsplus'>
+
-
sdb = STRINGdb$new(version='10', species=511145, score_threshold=0, input_directory='repo_data')
+
-
g=sdb$get_graph()
+
-
sp=sdb$get_proteins()
+
-
</source>
+
-
 
+
-
<source lang='bash'>
+
-
cp repo_data/511145__proteins.tsv.gz neo4j-community/import/
+
-
gunzip neo4j-community/import/511145__proteins.tsv.gz
+
-
</source>
+
-
 
+
-
# remplacer les tabulations par des virgules (si besoin)
+
-
USING PERIODIC COMMIT 1000
+
-
LOAD CSV WITH HEADERS FROM "file:///511145__proteins.csv" AS row
+
-
CREATE (n:Protein)
+
-
SET n = row,
+
-
  n.id = toInt(row.protein_id),
+
-
  n.name = row.protein_external_id
+
-
 
+
-
Ajout de l'index
+
-
CREATE INDEX ON :Protein(name)
+
-
 
+
-
Test
+
-
MATCH (p:Protein) RETURN p LIMIT 10
+
-
 
+
-
Ajout des liens entre protéines et annotations
+
-
<source lang='rsplus'>
+
-
annot=sdb$get_annotations()
+
-
</source>
+
-
 
+
-
<source lang='bash'>
+
-
cp repo_data/annotations_511145.tsv.gz neo4j-community/import/
+
-
gunzip neo4j-community/import/annotations_511145.tsv.gz
+
-
# remplacer les tabulations par des virgules et rajouter les noms de colonnes
+
-
# prot,got,branch,iea
+
-
echo 'prot,got,branch,iea' > neo4j-community/import/go.annotations_511145.csv
+
-
grep 'GO:' neo4j-community/import/annotations_511145.tsv >> neo4j-community/import/annotations_511145.csv
+
-
</source>
+
-
 
+
-
USING PERIODIC COMMIT 1000
+
-
LOAD CSV WITH HEADERS FROM "file:///annotations_511145.csv" AS line
+
-
MATCH (p:Protein), (goterm:GOTerm)
+
-
WHERE p.name=line.prot AND goterm.acc=line.got
+
-
WITH p, goterm, line
+
-
CREATE UNIQUE (goterm)-[r:GOAnnotates { branch: line.branch }]->(p)
+
-
 
+
-
* Script python
+
-
<source lang='python'>
+
-
#!/usr/bin/python
+
-
 
+
-
from neo4j.v1 import GraphDatabase, basic_auth
+
-
 
+
-
driver = GraphDatabase.driver("bolt://localhost", auth=basic_auth("neo4j", "bioinfo"))
+
-
session = driver.session()
+
-
 
+
-
#~ session.run("CREATE (a:Person {name:'Arthur', title:'King'})")
+
-
 
+
-
result = session.run("MATCH (f:GOTerm)-[:IS_A]->(g:GOTerm) WHERE g.name='reproduction' RETURN f.acc AS acc, f.name AS name")
+
-
for record in result:
+
-
print "acc: %s, name: %s" % (record['acc'], record['name'])
+
-
print
+
-
 
+
-
session.close()
+
-
</source>
+
-
 
+
-
 
+
-
* R
+
-
<source lang='rsplus'>
+
-
library(RNeo4j)
+
-
 
+
-
graph = startGraph("http://localhost:7474/db/data/", 'neo4j','bioinfo')
+
-
 
+
-
graph = startGraph("http://localhost:7474/db/data/")
+
-
 
+
-
query = "match (g:GOTerm {name:'transport'})-[r:GOAnnotates]->(p:Protein) return p.name,p.protein_size"
+
-
 
+
-
cypher(graph,query)
+
-
 
+
-
# GOTerm les plus utilisés
+
-
query = "MATCH (:Protein)<-[:GOAnnotates]-(g:GOTerm)
+
-
        RETURN g.name AS GOTerm, COUNT(*) AS count
+
-
        ORDER BY count DESC
+
-
        LIMIT 50"
+
-
 
+
-
cypher(graph,query)
+
-
 
+
-
# GOTerm les plus utilisés dans Biological Process, ou autre
+
-
query = "MATCH (:Protein)<-[:GOAnnotates]-(g:GOTerm {term_type:{param}})
+
-
        RETURN g.name AS GOTerm, COUNT(*) AS count
+
-
        ORDER BY count DESC
+
-
        LIMIT 50"
+
-
 
+
-
cypher(graph, query, param = "biological_process")
+
-
 
+
-
# ou bien avec les attributs sur les arcs
+
-
query = "MATCH (g:GOTerm)-[:GOAnnotates  {branch:{param}}]->(:Protein)
+
-
        RETURN g.name AS GOTerm, COUNT(*) AS count
+
-
        ORDER BY count DESC
+
-
        LIMIT 50"
+
-
 
+
-
cypher(graph, query, param = "Process")
+
-
 
+
-
 
+
-
</source>
+
-
 
+
-
 
+
-
 
+
-
 
+
-
 
+
-
 
+
-
 
+
-
 
+
-
 
+
-
 
+
-
<!--
+
-
* biomart
+
-
** [[Media:M2BBS-IDH-gene.tar.bz2]]
+
-
* prioritization
+
-
** [[Media:Prioritization.py]]
+
-
** [[Media:mat.info.py]]
+
-
** [[Media:mat.init.py]]: initialize an empty matrix HDF5 file with the genes provided
+
-
** [[Media:prioritize.py]]
+
-
** [[Media:fuse.py]]
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.geo.h5|EcolA.geo.h5]]: gene-gene dissimilarity matrix based on GEO expression profiles
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.go.h5|EcolA.go.h5]]: gene-gene dissimilarity matrix based on Gene Ontology annotations
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.string.combined_score.h5|EcolA.string.combined_score.h5]]: gene-gene dissimilarity matrix based on STRING combined score
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.pp.0.7.jaccard.h5|EcolA.pp.0.7.jaccard.h5]]: gene-gene dissimilarity matrix based on phylogenetic profiles (selected strains)
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.pp.all.jaccard.h5|EcolA.pp.all.jaccard.h5]]: gene-gene dissimilarity matrix based on phylogenetic profiles (all available strains)
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.gn.0.7.h5|EcolA.gn.0.7.h5]]: gene-gene dissimilarity matrix based on genomic context (selected strains)
+
-
-->
+
-
<!--
+
-
* [[Media:M2BBS-IDH-go.tar.bz2]]
+
-
* [[Media:M2BBS-IDH-phyogenetic_profiles.tar.bz2]]
+
-
* [[Media:M2BBS-IDH-string.tar.bz2]]
+
-
* [[Media:M2BBS-IDH-transcriptome.BsubA.tar.bz2]]
+
-
* [[Media:M2BBS-IDH-transcriptome.EcolA.tar.bz2]]
+
-
* [[Media:M2BBS-IDH-transcriptome.PaerA.tar.bz2]]
+
-
* [[Media:M2BBS-IDH-biocyc.tar.bz2]]
+
-
* [[Media:M2BBS-IDH-DBConnection.pm]]
+
-
-->
+
-
 
+
-
 
+
-
 
+
-
<!-- ARCHIVES -->
+
-
 
+
-
<!--
+
-
= Prioritization =
+
-
Installation des bibliothèques requises :
+
-
dnf -y install hdf5.x86_64 hdf5-devel.x86_64 h5py python-matplotlib.x86_64
+
-
pip install scikit-learn
+
-
<!--
+
-
easy_install pip
+
-
pip list
+
-
pip search h5py
+
-
pip install h5py
+
-
yum -y install libpng-devel.x86_64
+
-
pip install matplotlib
+
-
-->
+
-
<!--
+
-
Prise en main des scripts
+
-
* librairie [[Media:Prioritization.py|Prioritization.py]]: classes pour la priorisation de gènes par fusion de données génomiques
+
-
** ScoreMatrix: matrice de dissimilarité/similarité/distance entre paires de gènes
+
-
** Identifiers et IdentifierMap: chargement et manipulation d'identifiant de gènes
+
-
** PrioritizedItem: représentation d'un candidat évalué (score, rank, ...)
+
-
** Prioritizer: priorisation et fusion à partir de différentes matrices
+
-
* script [[Media:mat.info.py|mat.info.py]]: affiche les informations contenues dans un fichier HDF5 représentant une matrice
+
-
* script [[Media:prioritize.py|prioritize.py]]: Chargement d'une matrice et priorisation des candidats par rapport aux gènes d'entrainement
+
-
* script [[Media:fuse.py|fuse.py]]: Fusion de priorisations obtenues avec le script précédent
+
-
 
+
-
Représentation d'une matrice de distance avec le format HDF5.
+
-
 
+
-
Jeu de données :
+
-
* Gènes impliqués dans la synthèse du peptidoglycane :
+
-
** core : MURA MURB MURC MURD MURE MURF MRAY MURG
+
-
** biosynthèse : MURA MURB MURC MURD MURE MURF MRAY MURG GLMU MRSA GLMS BACA YAES DDLA DDLB DADX MURI DAPF DAPE ARGD DAPD DAPB DAPA ASD LYSC
+
-
* Systèmes ABC expertisés : [[Media:EcolA.ncleandb12.training.abc|EcolA.ncleandb12.training.abc]] et candidats [[Media:EcolA.ncleandb12.candidates.abc|EcolA.ncleandb12.candidates.abc]]
+
-
* Matrices :
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.geo.h5|EcolA.geo.h5]]: gene-gene dissimilarity matrix based on GEO expression profiles
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.go.h5|EcolA.go.h5]]: gene-gene dissimilarity matrix based on Gene Ontology annotations
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.string.combined_score.h5|EcolA.string.combined_score.h5]]: gene-gene dissimilarity matrix based on STRING combined score
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.pp.0.7.jaccard.h5|EcolA.pp.0.7.jaccard.h5]]: gene-gene dissimilarity matrix based on phylogenetic profiles (selected strains)
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.pp.all.jaccard.h5|EcolA.pp.all.jaccard.h5]]: gene-gene dissimilarity matrix based on phylogenetic profiles (all available strains)
+
-
** [[silico:enseignement/m2BBS/idh/EcolA.gn.0.7.h5|EcolA.gn.0.7.h5]]: gene-gene dissimilarity matrix based on genomic context (selected strains)
+
-
 
+
-
Information sur un gène à partir de son identifiant dans ABCdb : https://www-abcdb.biotoul.fr/#/entry/findbestmatch/ID/EcolA.RBSA
+
-
-->
+
-
 
+
-
 
+
-
<!--
+
-
== Ajout de sources locales et édition de liens ==
+
-
* Télécharger le jeu de données ''gene'' (à la fin de cette page).
+
-
* Créer une base de données MySql pour héberger les tables gene et strain, avec le schéma suivant :
+
-
** gene(strain, gene, num, protein, start, end, function, uniprot)
+
-
** strain(strain, taxonomy_id, name, species)
+
-
* Alimenter ces tables avec les données téléchargées
+
-
* Ajouter le dataset ''gene'' à votre serveur BioMart et créer un ''Access point'' correspondant
+
-
* Ajouter un lien entre ''gene'' et ''strain''
+
-
* Ajouter un lien entre ''gene.uniprot'' et le jeu de données distant ''unimart''
+
-
 
+
-
== Autres sources de données ==
+
-
* Répartissez-vous le reste des données disponibles en fin de page (sauf BioCyc, donc GO, profils phylogénétiques, String, et transcriptome) pour créer les tables correspondantes, faire le lien avec ''gene'' sur le type de données que vous aurez choisi, puis faire le lien avec les types de données hébergés par les instances de vos collègues.
+
-
 
+
-
= Confrontation des données : approche ensembliste =
+
-
 
+
-
'''Algorithme :'''
+
-
# charger les ensembles de gènes correspondant à un critère biologique
+
-
# pour chacun de ces ensembles
+
-
## calculer la probabilité d'obtenir un intersection aussi importante avec l'ensemble d'intérêt
+
-
# trier les resultats
+
-
# afficher ceux qui sont significatifs (p-valeur <= seuil ou <= seuil ajusté par la FDR)
+
-
 
+
-
'''Rappel sur la FDR:'''
+
-
 
+
-
Pour ''m'' p-valeurs calculées (''m'' tests statistiques effectués), le seuil  ''alpha'' est ajusté de la manière suivante : tout d'abord les p-valeurs sont triées de manière croissante. Ensuite, elles sont déclarées significatives tant que ce qui suit est vérifié pour ''k'' allant de 1 à ''m'' :
+
-
<math>P_k \le \frac{k}{m} \times \alpha</math>
+
-
 
+
-
 
+
-
'''Quelques lignes de code utiles :'''
+
-
<source lang='perl'>
+
-
#!/usr/bin/perl
+
-
use strict;
+
-
use Data::Dumper;
+
-
use Getopt::Long;
+
-
use Class::Struct qw(struct);
+
-
use Math::NumberCruncher;
+
-
 
+
-
# COMMAND LINE PARAMETERS
+
-
# e.g. ./search_enriched_sets.pl --sets EcolA.biocyc.sets --query 'ALAS ARGS ASNS ASPS CYSS GLTX GLYQ GLYS HISS ILES'
+
-
my %params;
+
-
GetOptions(\%params,
+
-
        'sets=s',
+
-
        'query=s',
+
-
        'alpha=f',
+
-
        'adjust=s',
+
-
        'help'
+
-
);
+
-
 
+
-
my $defaults = {
+
-
'alpha'=> 0.05,
+
-
'adjust' => 'y'
+
-
};
+
-
 
+
-
sub usage {
+
-
print STDERR << "EOF";
+
-
 
+
-
  usage: $0 --sets str --query str [--alpha float] [--adjust y/n]
+
-
 
+
-
    parameters:
+
-
      --sets        str    sets file name
+
-
      --query      str    list of genes to investigate
+
-
     
+
-
      --alpha      float  threshold for p-value significance
+
-
                            (default: $defaults->{alpha})
+
-
      --adjust      str    adjust threshold for multiple testing (FDR)
+
-
                            (default: $defaults->{adjust})
+
-
 
+
-
EOF
+
-
}
+
-
 
+
-
if ($params{help} || !defined($params{sets}) || !defined($params{query}) ) {
+
-
usage;
+
-
exit(0);
+
-
}
+
-
 
+
-
 
+
-
 
+
-
# GLOBAL VARIABLES
+
-
my $sets; # reference sets to be search
+
-
my $population_size; # number of possible elements (= number of genes)
+
-
my %query; # query genes as keys
+
-
my $alpha = defined $params{alpha} ? $params{alpha} : $defaults->{alpha};
+
-
my $adjust = defined $params{adjust} ? $params{adjust} : $defaults->{adjust};
+
-
 
+
-
# LOAD SETS
+
-
sub load {
+
-
my ($filename) = @_;
+
-
open(F,$filename) || die "Cannot open $filename for input";
+
-
my $H;
+
-
my $version = 1.0;
+
-
my %pop;
+
-
while (<F>) {
+
-
($version) = $_ =~ /^#\s*version:\s*(\S+)\s*$/ if $_ =~ /#\s*version:/;
+
-
next if $_ =~ /^#/; # SKIP COMMENTS
+
-
chomp;
+
-
my ($id, @elements) = split /\t/;
+
-
next if ! defined $id;
+
-
my $desc = shift @elements if $version > 1.0;
+
-
$H->{$id}->{elements} = \@elements;
+
-
$H->{$id}->{description} = $desc if $version > 1.0;
+
-
@pop{@elements} = @elements;
+
-
}
+
-
return ($H, scalar keys %pop);
+
-
}
+
-
 
+
-
struct 'ComparedSet' => [
+
-
        id => '$',
+
-
        name => '$',
+
-
        common => '$',
+
-
        size => '$',
+
-
        pvalue => '$',
+
-
        elements => '@',
+
-
        commonElements => '@',
+
-
];
+
-
 
+
-
 
+
-
# MAIN #
+
-
########
+
-
 
+
-
# LOAD SETS
+
-
 
+
-
## TO DO ...
+
-
 
+
-
# EVALUATE SETs
+
-
 
+
-
##  TO DO ... (for each set, compute its pvalue)
+
-
 
+
-
# PRINT SIGNIFICANT RESULTS
+
-
 
+
-
## TO DO ...  (sort results and print them until pvalue > alpha or pvalue > adj_alpha)
+
-
 
+
-
</source>
+
-
 
+
-
Compléter le script ci-dessus afin de pouvoir analyser les ensembles suivants en utilisant le fichier [[Image:EcolA.biocyc.sets]]
+
-
 
+
-
* ALAS ARGS ASNS ASPS CYSS GLTX GLYQ GLYS HISS ILES
+
-
* PURC PURB PURH PURE PURK PURC PURB PURH PURE
+
-
* GLPC GLPB GLPA GLPD GLPK GLPQ UGPQ GLPC GLPB GLPA GLPD
+
-
* WRBA YIEF NUOB NUOC NUOI NUOE NUOF NUOG NUON NUOA NUOL NUOK NUOJ NUOH NUOA
+
-
* HISG HISI HISA HISF HISH HISB HISC HISD PURA PURB ADK  NRDB NRDA NRDD YGAD NRDE GUAB GUAA GMK  PURC PURH PURE PURK PURC PURD PURL PURM PURT PYRH PYRG NDK  CARA CARB PYRI PYRB PYRC PYRE PYRF PYRD PRSA PHNN DEOB HISG HISI HISA HISF HISH HISB HISC HISD PURA PURB ADK  NRDB NRDA NRDD YGAD NRDE GUAB GUAA GMK  PURC PURH PURE PURK PURC PURD PURL PURM PURT PYRH PYRG NDK CARA CARB PYRI PYRB
+
-
 
+
-
 
+
-
FIN confrontation des données -->
+
-
 
+
-
<!--
+
-
= Projets 2013-14 =
+
-
 
+
-
* [http://www.biomedcentral.com/1471-2105/8/332/abstract  Barriot, R., Sherman, D., Dutour, I., How to decide which are the most pertinent overly-represented features during gene set enrichment analysis (2007) BMC Bioinformatics, 8:332]
+
-
* [http://nar.oxfordjournals.org/cgi/content/short/gkn114v1 De Preter, K., Barriot, R., Speleman, F., Vandesompele, J., Moreau, Y., Positional gene enrichment analysis of gene sets for high resolution identification of overrepresented chromosomal regions (2008) Nucleic Acids Research]
+
-
 
+
-
----
+
-
== Préparation des données ==
+
-
 
+
-
Il s'agit de confronter des ensembles de gène obtenus par différents critères de regroupement. Pour chacune des sources de données, il faut créer un fichier représentant les ensembles de gènes obtenus.
+
-
 
+
-
* Profils phylogénétiques
+
-
 
+
-
Les profils fournis contiennent les informations de présence d'isorthologues (Iso), d'orthologues (Ort) ou de best hit (BeH) dans d'autres souches.
+
-
Il faut convertir cette matrice sous forme 0/1 pour ensuite effectuer un clustering des profils. Quelques commandes R permettent cette manipulation :
+
-
<source lang='rsplus'>
+
-
# chargement de la matrice originale
+
-
m=read.table("EcolA.phylogenetic_profiles", header=T, row.names=1)
+
-
# création d'une matrice de mêmes dimensions ne contenant que des 0
+
-
n=matrix(data=0, nrow=nrow(m), ncol=ncol(m), dimnames=dimnames(m))
+
-
# positionnement à 1 pour les Iso
+
-
n[m=='Iso']=1
+
-
# clustering
+
-
library(ade4)
+
-
n.dist=dist.binary(n,1) # 1: jaccard
+
-
n.dist[which(is.na(n.dist))] = 1 # si une paire de profils ne contient que des 0
+
-
hc=hclust(m, method='ave') # average linkage
+
-
# sauvegarde pour utiliser un script perl pour convertir au format newick
+
-
write.table(hc$merge, "EcolA.phylogenetic_profiles.01.hclust.merge", row.names=F, col.names=F)
+
-
write.table(hc$labels, "EcolA.phylogenetic_profiles.01.hclust.labels", row.names=F, col.names=F, quote=F)
+
-
</source>
+
-
 
+
-
 
+
-
* Transcriptome
+
-
 
+
-
Utiliser MeV (installé dans /opt/) pour effectuer un clustering hiérarchique des profils d'expression fournit et enregistrer le résultat au format newick (click droit sur l'arbre, puis save as newick).
+
-
 
+
-
 
+
-
* Gene Ontology
+
-
 
+
-
Utiliser le script fourni (convertGO_from_categories_closure.pl), pour combiner le dag de la Gene Ontology (gene_ontology.obo) avec des associations gènes--GOTerm.
+
-
 
+
-
* String
+
-
 
+
-
Effectuer un clustering avec MCL :
+
-
* Sélectionner un score de String (coexpression ou text mining par exemple)
+
-
* Eventuellement avec un seuil pour extraire les arêtes (>=500 par exemple)
+
-
* Générer un fichier pour MCL au format une arête par ligne : gene1 gene2 score
+
-
* Vérifier que le graphe est conséquent avec Cytoscape par exemple
+
-
* Utiliser MCL et vérifier le nombre de clusters obtenus (1 par ligne)
+
-
* Reformater le fichier pour qu'il soit lisible par sookoos (ajout d'un identifiant pour les clusters) :
+
-
echo '# format: sets' > EcolA.string.mcl.sets
+
-
cat -n out.EcolA.String.coexpression.edges.I20 | sed -r 's/^\s+/cluster_/'  >> EcolA.string.mcl.sets
+
-
 
+
-
== Recherche d'ensembles similaires ==
+
-
 
+
-
Utiliser le script <tt>sookoos</tt> pour analyser différentes relations, par exemple les clusters de String par rapport aux annotations de la Gene Ontology.
+
-
 
+
-
[scripts]$ ./sookoos
+
-
+
-
  Search for the most similar sets between 2 neighborhoods in terms of common elements.
+
-
+
-
  usage: ./sookoos [-h] [-d dissimilarity_index_type] [-a alpha_threshold] [-c multiple_adjustment_correction] -q query_file -t target_file
+
-
options:
+
-
-q file containing dag/tree/sets definition
+
-
-t file containing dag/tree/sets definition
+
-
+
-
-d dissimilarity index type
+
-
(default hypergeometric),
+
-
available indices : binomial, hypergeometric, ratio, mutual_coverage
+
-
+
-
-a threshold for significant results
+
-
(default 0.05)
+
-
-c perform multiple testing adjustment (FDR) (default YES)
+
-
+
-
-m maximum set size for performing comparison. Make it 0 for no limit.
+
-
(default 500)
+
-
+
-
-h display this help
+
-
 
+
-
FIN projets 2013-14 -->
+
-
 
+
-
 
+
-
<!--
+
-
= BioMart =
+
-
 
+
-
== Premier pas avec BioMart : Utilisation de l'interface Web ==
+
-
 
+
-
Allez sur le site de l'EBI, puis sur BioMart pour interroger UniProt.
+
-
 
+
-
A partir du formulaire (dataset, filters et attributes) et du bouton <tt>count</tt>, estimer la taille du protéome de <i>Escherichia coli</i> K12, <i>Bacillus subtilis</i> 168 et <i>Pseudomonas aeruginosa</i> PAO1.
+
-
 
+
-
Ensuite, faites une requête pour obtenir tous les attributs 'Protein' ainsi que 'Gene Ontology'.
+
-
 
+
-
Puis :
+
-
* Essayer différents filtres (ayant des termes GO, ou autre).
+
-
 
+
-
* Sélectionner certains attributs.
+
-
 
+
-
* Utiliser la fonctionnalité ''count'' puis ''results''.
+
-
 
+
-
* A quoi peuvent servir les boutons <tt>XML</tt> et <tt>Perl</tt> ?
+
-
 
+
-
== Installation locale ==
+
-
Aller sur le site de BioMart pour récupérer la dernière version. Pour cela, vous aurez besoin de <tt>git</tt> et <tt>ant</tt> (à installer avec <tt>yum</tt> donc s'ils ne sont pas déjà présents sur le système).
+
-
 
+
-
 
+
-
 
+
-
La suite correspond essentiellement à des extraits du manuel utilisateur (section Quick start, etc.) pour mettre à disposition des jeux de données distant depuis votre serveur. Vous n'hésiterez donc pas à vous y référer pour plus de détails. Le travail à réaliser :
+
-
* compilation du serveur avec <tt>ant</tt>
+
-
* intégration d'une source de données distante au serveur, configuration de point d'accès et lancement du serveur
+
-
* intégration d'une source de données locale (MySQL) et édition de lien avec la source de données précédente
+
-
* utilisation à partir de l'interface Web et à partir d'un client de services Web (script python)
+
-
 
+
-
Installation de git and ant :
+
-
dnf list git ant
+
-
 
+
-
Récupération de BioMart avec git :
+
-
git clone https://github.com/biomart/BioMart.git --branch 0.9.0
+
-
 
+
-
Compilation
+
-
cd BioMart
+
-
ant
+
-
# build successful ! (on vous le souhaite)
+
-
 
+
-
== Intégration d'une source de données distante ==
+
-
Prise en main rapide :
+
-
 
+
-
Lancer mart configurator et dans l'onglet <i>Source</i>, cliquer sur 'Add source'. Garder les paramètres par défaut pour accéder à l'étape 'choose source' où vous sélectionnerez unimart/uniprot.
+
-
 
+
-
Ajouter ensuite un <i>add access point</i>, garder les paramètres par défaut, et démarrer le serveur. Si tout va bien, l'interface de BioMart devrait s'ouvrir sous la forme d'une page Web dans le navigateur. A partir de là, vous pouvez accéder au <i>datasets</i> proposés.
+
-
 
+
-
Essayer de récupérer les mêmes informations que précédemment (bacteria; coli/... ; accession gene; go id; go name).
+
-
 
+
-
Démarrerou arrêter le serveur à partir de la ligne de commande :
+
-
Save as... ..../unimart_uniprot.xml
+
-
cd BioMart
+
-
./dist/scripts/biomart-server.sh start
+
-
./dist/scripts/biomart-server.sh stop
+
-
 
+
-
Il est aussi possible de changer différents paramètres comme par exemple le port utilisé par le serveur dans dist/biomart.properties (puis http.port = 9000 ou http.host = localhost).
+
-
 
+
-
== Intégration d'une source de données locale ==
+
-
 
+
-
Télécharger et restaurer, tout d'abord, la sauvegarde de la base [[Media:M2BBS-IDH-biomart_dbs.tar.bz2]] dans une base de données MySQL.
+
-
 
+
-
Ensuite, dans MartConfigurator, dans l'onglet 'Source', cliquer sur 'Add source' et sélectionner RDBMS à la palce de URL. Ensuite, renseigner les paramètres de connexion au serveur de bases de données (typiquement : localhost, port 3306). Sélectionner la base précédemment restaurée.
+
-
 
+
-
Ajouter ensuite un point d'accés et tester le résultat.
+
-
 
+
-
== Edition de lien entre les sources locales et distantes ==
+
-
 
+
-
# Faire un clic droit sur le point d'accès puis 'edit'
+
-
# cliquer sur 'import from source'
+
-
# la panneau de gauche correspond aux données à lier, et celui de droite au point d'accés auquel "ajouter" des données liées
+
-
# dans le panneau de gauche, prendre la source uniprot et l'attribut 'accession' et le glisser-déposer dans le panneau de droite dans la liste des attributs (gene_attribute), il devrait apparaitre une fenêtre pour éditer sur quels attributs faire la "jointure" : sélectionner accession à gauche (doucle clic) et uniprot à droite. Fermer la fenêtre d'édition de lien puis ajouter d'autres attributs (par exemple GO ID et GO Name).
+
-
 
+
-
== Services Web ==
+
-
 
+
-
WSDL: http://localhost:9000/martsoap?wsdl
+
-
 
+
-
liste des marts au format XML : http://localhost:9000/martservice/marts et au format JSON : http://localhost:9000/martservice/marts.json
+
-
 
+
-
filtres (nécessite un dataset appelé uniprot) : http://localhost:9000/martservice/filters?datasets=uniprot
+
-
 
+
-
attributs (nécessite aussi un dataset appelé uniprot) : http://localhost:9000/martservice/attributes?datasets=uniprot
+
-
 
+
-
 
+
-
 
+
-
Suivre l'exemple donné dans la documentation pour effectuer une requête sur votre instance BioMart afin de récupérer un jeu de données depuis un script python ou perl.
+
-
 
+
-
== Annexes ==
+
-
* http://biomart.org
+
-
* http://www.ebi.ac.uk/uniprot/biomart/martview
+
-
-->
+

Current revision as of 15:07, 27 August 2021

Introduction et présentation des différentes approches d'intégration

Durée : 1/2 journée

Modélisation, représentation et construction d'une base de connaissances sur E. coli puis exploitation

Durée : 1 journée

  • Prise en main de Neo4j et intégration des données sur le génome d'E. coli : Ecoli.knowledge.base.html
    • Intégration de données d'expression
    • Intégration de données d'interaction protéine-protéine
    • Intégration de données phylogénomiques
    • Gènes co-exprimés et interactions protéiques et lien de conservation du contexte génomique