2008/06/18 Bio/Info2008.R 1. Typographical Conventions for R Script



Documents pareils
Extraction d information des bases de séquences biologiques avec R

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Module Analyse de Génomes Master 2 module FMBS 326 Immunoinformatique

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

SEMIN- Gestion des couleurs sous R. Michel BAYLAC. MNHN Département Systématique et Evolution OSEB

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Cours 1. I- Généralités sur R II- Les fonctions de R et autres objets III-Les vecteurs

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Structure fonctionnelle d un SGBD

Once the installation is complete, you can delete the temporary Zip files..

Initiation à l analyse en composantes principales

Introduc)on à Ensembl/ Biomart : Par)e pra)que

TP Bases de données réparties

Le Langage SQL version Oracle

Introduction à JDBC. Accès aux bases de données en Java

Langage SQL : créer et interroger une base

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Présentation Windows Azure Hadoop Big Data - BI

Le langage SQL Rappels

Gestion des données avec R

Lire ; Compter ; Tester... avec R

CREATION WEB DYNAMIQUE

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

OpenPaaS Le réseau social d'entreprise

Perl Orienté Objet BioPerl There is more than one way to do it

Mysql avec EasyPhp. 1 er mars 2006

Corrigé de l'atelier pratique du module 3 : Récupération d'urgence

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

PHP 4 PARTIE : BASE DE DONNEES

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Phone Manager Soutien de l'application OCTOBER 2014 DOCUMENT RELEASE 4.1 SOUTIEN DE L'APPLICATION

BIRT (Business Intelligence and Reporting Tools)

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Corrigé de l'atelier pratique du module 8 : Implémentation de la réplication

Séance 0 : Linux + Octave : le compromis idéal

Gestion de stock pour un magasin

PHP 5. La base de données MySql. A. Belaïd 1

Exercices sur SQL server 2000

SAS BI DASHBOARD 4.3 : POUR LE MEILLEUR ET POUR LE FILTRE

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

Comment Créer une Base de Données Ab Initio

TP1 : LOGICIEL R ET PRÉDICTION DE L EFFLORESCENCE ALGALE

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Bases de données relationnelles

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Sommaire. I.1 : Alimentation à partir d un fichier Access (.mdb)...2

Département Génie Informatique

Vanilla : Virtual Box

Les Utilisateurs dans SharePoint

Gestion de base de données

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

INTRODUCTION AU DATA MINING

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Stockage du fichier dans une table mysql:

Sécurité des applications web. Daniel Boteanu

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

VMware ESX : Installation. Hervé Chaudret RSI - Délégation Centre Poitou-Charentes

Guide d utilisation commandes des pièces de rechange Rev.1.0.3

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

1 Introduction - Qu est-ce que le logiciel R?

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Introduction à R. Florence Yerly. Dept. de mathématiques, Université de Fribourg (CH) SP 2011

Introduction à la B.I. Avec SQL Server 2008

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

Oracle Database SQL Developer Guide D'Installation Release 4.0 E

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

France SMS+ MT Premium Description

et Active Directory Ajout, modification et suppression de comptes, extraction d adresses pour les listes de diffusion

Évaluation des compétences. Identification du contenu des évaluations. Septembre 2014

Gestion Electronique de Document (ECM/GED)

Cours Bases de données 2ème année IUT

WEB page builder and server for SCADA applications usable from a WEB navigator

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

CHAPITRE 3 LA SYNTHESE DES PROTEINES

Connexion à une base de données. Connexion à une base de données. Connexion à une base de données Développement d'une application

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

STAGE IREM 0- Premiers pas en Python

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

TUTORIEL D INSTALLATION D ORACLE ET DE SQL DEVELOPPER TUTORIEL D INSTALLATION D ORACLE...1 ET DE SQL DEVELOPPER...1

Espace Numérique Régional de Santé Formation sur la messagerie sécurisée. Version Auteur : Nathalie MEDA

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Transcription:

2008/06/18 Bio/Info2008.R 1 Typographical Conventions for R Script R Script:Normal Text R Script:Symbol R Script:Keyword R Script:Identifier R Script:String R Script:Headline R Script:Comment R Script:Assign R Script:Control Structure R Script:Reserved Words R Script:Error R Script:Operator R Script:String Char R Script:Float R Script:Int Formation ISEM "Initiation à R" ############ ########################### Récupération de séquences ############################# ############ # 1/ Méthodes Manuelles sur des données dans un fichier ########### ################ On n'a pas le fichier en local #ex1 : depuis le site ftp de ncbi pour quelques genomes #////////////////////////////////////////////////////// myfileloc </ "ftp://ftp.ncbi.nih.gov/genbank/genomes/bacteria/halobacterium_sp/ae004437.faa" download.file(myfileloc, "AE004437.faa"); #ex2 : on a une liste de regions de chromosomes d'un genome sur le site d'ensembl #////////////////////////////////////////////////////// #l'url est du type http://www.ensembl.org/mus_musculus/exportview?seq_region_name=1&type1=bp&anchor1=9955874... #lecture du fichier contenant une liste de slices du genome de la souris à récuperer sur le site d'ensembl slices = read.table("liste.txt", header=t, sep="\t") #fichier avec entête "chr deb fin" séparés par des tabulations # construction de l'url pour la 1 région req = paste("http://www.ensembl.org/mus_musculus/exportview?seq_region_name=",slices$chr[1], "&type1=bp&anchor1=", slices$deb[1],"&type2=bp&anchor2=",slices$fin[1],"&downstream=&upstream=&format=fasta&action=export&_format=text&output=txt&submit=continue+%3e%3e", sep = "") download.file(req, "seq1.txt"); #sauvegarde dans le ficher seq1.txt #généraliser à toutes les regions contenues dans le fichier. Ajouter toutes les seq dans le même fichier #construire la liste des url avec les differentes coordonnées urls = sapply(1:nrow(slices), function(x) paste("http://www.ensembl.org/mus_musculus/exportview?seq_region_name=",slices$chr[x], "&type1=bp&anchor1=", slices$deb[x],"&type2=bp&anchor2=",slices$fin[x],"&downstream=&upstream=&format=fasta&action=export&_format=text&output=txt&submit=continue+%3e%3e", sep = "") ) sapply(urls, function(x) download.file(x, "big_seq.fa", mode = "a") ); #ex3 : #////////////////////////////////////////////////////// utiliser la même technique pour récuperer des alignements depuis la base de données OrthoMaM (alignement d'exons de 25 mammifères) ex. http://www.orthomam.univ/montp2.fr/orthomam/data/aligndna/ensg00000005812_fbxl3_003_sh.fasta (identifiant d'ensembl + HGNC symbol (Hugo gene nomencl. comitee) +??? + sh.fasta download.file("http://www.orthomam.univ/montp2.fr/orthomam/data/aligndna/ensg00000005812_fbxl3_003_sh.fasta ", "exon_orthomam.fa") Trouver un moyen de récuperer des alignements connaissant uniquement l'id ensembl et le HGNC symbol?! ################ On a le fichier en local on veut le lire #à l'aide du package ape library(ape) read.dna("seq1.txt") #seqinr library(seqinr) read.fasta("seq1.txt") # également write.fasta() read.alignment

2008/06/18 Bio/Info2008.R 2 #quand les fichiers sont trop gros (genomes entiers), il faut écrire sa propre fonction de lecture #en utilisant les routines de base de R (readlines) voir fonction lect_fasta plus bas # 2/ Méthodes faisant appel à des accessions numbers, des filtres des bases de données Mysql... ####### #Depuis GeneBank avec des accessions numbers #/////////////////////////////////////////// ref</c("nm_005368") #réference du gene de la myoglobine myoglobin</read.genbank(ref) #Depuis une des bases de données du système ACNUC à l'aide du package seqinr #/////////////////////////////////////////////////////////////////////////// choosebank("genbank") query("mitcatscds", "sp=felis catus AND t=cds AND o=mitochondrion") #tous les cds de la mitochondrie du chat MitCatsCDS # Info sur l'objet de la requette MitCatsCDS$req # liste avec détails sur les résultats de la requette MitCatsCDS$req[[1]] # la première séquence de la liste getsequence(mitcatscds$req[[1]]) # en extraire la séquence #voir plus bas pour un exemple de calcul de GC sur un chromosome de la souris #Depuis une des bases de données structurée selon le système BioMart (biomart.org) et le package biomart #/////////////////////////////////////////////////////////////////////////////////////////////////////// library(biomart) listmarts() # lister toutes les bases de données disponibes ens_mart = usemart("ensembl") # choisir les données d'ensembl listdatasets(ens_mart) # lister tous les jeux de données d'ensembl mus_ens_mart = usedataset("mmusculus_gene_ensembl", ens_mart) # choisir le jeux de données des genes de la souris # Définir les nom des filtres, les valeurs prises par ces filtres et les attributs à récuperer # Filtres = les genes du chromosome 10 qui codent pour des proteines monfiltre = c("chromosome_name", "biotype"); # nom des filtres filtreval = list(chromosome_name ="10", biotype="protein_coding"); #valeurs des filtres # Attributs = récuperer les identifiants Ensembl (gene et transcrits) et MGI, la description ainsi que la position debut et position de fin sur le chr mesattrib = c("description", "ensembl_gene_id", "ensembl_transcript_id", "mgi_symbol", "start_position","end_position"); mus_chr10_genes = getbm(attributes = mesattrib, filters = monfiltre, values = filtreval, mart = mus_ens_mart) #voir plus bas pour un exemple avec des snips #Requette sur les bases de données de genomes du site d'ensembl à l'aide du package RMySQL (et DBI) #/////////////////////////////////////////////////////////////////////////////////////////////////// library('rmysql') m </ dbdriver("mysql") #specifier le type de base de données relationnelle # Connexion en anonyme au site d'ensembl et à la base Mus musculus core con </ dbconnect(m, host="ensembldb.ensembl.org", user="anonymous",password="", dbname="mus_musculus_core_45_36f") dblisttables(con) #lister les tables dblistfields(con, "repeat_feature") # lister les champs de la table des élements repétés dblistfields(con, "gene") # idem pour la table des genes #Quelques requettes sql qui retournent des data.frame dbgetquery(con, "select count(*) from gene") #compter tous les genes dbgetquery(con, "select * from gene LIMIT 5") #recup. des infos sur les 5 premiers genes dbgetquery(con, "select * from gene where description LIKE '%meiosis%'") #tous les genes avec le mot clef "meiosis" dbgetquery(con, "select * from seq_region LIMIT 10") #recup des infos sur les dix premières regions de sequences ###########################################

2008/06/18 Bio/Info2008.R 3 ############################ manipulation des séquences ############### ########################################### ## Reverse et/ou Complement Function ## rev_comp </ function(seq=mystr, rev=t, comp=t) if(rev==t) seq </ as.vector(unlist(strsplit(seq, split=""))) seq </ rev(seq) seq </ paste(seq, collapse="") if(comp==t) seq </ gsub("a", "1", seq, ignore.case = T) seq </ gsub("t", "2", seq, ignore.case = T) seq </ gsub("c", "3", seq, ignore.case = T) seq </ gsub("g", "4", seq, ignore.case = T) seq </ gsub("1", "T", seq, ignore.case = T) seq </ gsub("2", "A", seq, ignore.case = T) seq </ gsub("3", "G", seq, ignore.case = T) seq </ gsub("4", "C", seq, ignore.case = T) seq #ex. seq="tcgatcgtacgttcagcttactacgttcgttc" rev_comp(seq, rev=t, comp=t) #ex avec seqinr v_seq = s2c(seq) # pour transformer en vecteur de caractères comp(v_seq ) # complémenter comp( rev( v_seq ) ) #reverser et complémenter ## Taux de GC ## #ape GC.content(as.DNAbin(v_seq) ) #seqinr GC( v_seq) ## frequences en base ## #ape base.freq(as.dnabin(v_seq)) # multiplier par length(v_seq) pour obtenir les comptes #seqinr obs = count(v_seq, 1) # 2, 3 pour les dimères trimères... #test d'equi/fréquence de la composition en bases chisq.test(obs,p=c(0.25,0.25,0.25, 0.25)) ####### ## Recherche de motifs ####### find_pattern </ function(seq, motif, rev=f, comp=f) seq = rev_comp(seq, rev, comp); pos </ gregexpr(motif, as.character(seq));#liste des positions où le motif est trouvé unlist(pos) #exemple find_pattern(seq="tcgatcgtacgttcagct", motif="cgt", rev=f, comp=f)

2008/06/18 Bio/Info2008.R 4 ####### ## Aligner des seq. à l'aide d'un programme externe ####### library(ape) #quelques accession numbers de Ramphocelus (Passereaux) as used in Paradis (1997) ref </ c("u15717", "U15718", "U15719", "U15720","U15721", "U15722", "U15723", "U15724") meseq </ read.genbank(ref) # Ecriture dans un fichier au format = "interleaved", "sequential", or "fasta" write.dna(meseq, format = "fasta", "Ramphocelus.fas") system("clustalw Ramphocelus.fas") # lancer clustal en local t = read.tree("ramphocelus.dnd") #lire l'arbre produit par clustalw plot(t) #le dessiner # au fait les seq sont déjà alignées ####### ## calcul des distances génétiques par paires et phylogenie ####### # ape # différents modèles de substitution "JC69", "K80" (the default), "F81", "K81", "F84", "BH87", "T92", "TN93", "GG95", "logdet", "paralin". d_kim = dist.dna(meseq) #model Kimura 2/p (defaut) print(d_kim) njtree_kim = nj(d_kim) # Un arbre nj à partir de ces distances write.tree(njtree_kim) #Affichage au format Newick plot( njtree_kim, "u" ) #On le dessine avec l'option unrooted #Changer la couleur du nom d'un taxon couleurs = rep("black",8) couleurs[1] = "red" plot( njtree_kim, "u", tip.color = couleurs ) #Ajout d'un histogramme de données sur les 8 taxons mesure = rnorm(8, 0.25, sd=0.1)/10 max = max(mesure) names(mesure) = njtree_kim$tip.label plot(njtree_kim, x.lim=0.14, font=1, cex = 0.8) axisphylo() deb= 0.08 segments(rep(deb,8),1:8,rep(deb,8) + mesure, 1:8, lwd=3, col="red") axis(1,at=c(deb, deb+(max/2), deb+max), labels= format(c(0, (max/2),max ),digits=3) ) mtext("mesure / espèces", at=deb+(max/2), side=1, line=2) #illustrer l'incertitude sur un neoud nodelabels(node=14,"?",adj=1, bg="red") #Arbre de maximum de vraisemblence mod = DNAmodel("F84") #modèle d'evolution des sequences selon Felsenstein 1984 (tr tv et freq variables) tree_f84 = mlphylo(model = mod, meseq, phy = njtree_kim) #pas sûr que cela marche! # from ape "This function calls the software PHYML and fits successively 28 models of DNA evolution. The results are saved on disk, as PHYML # usually does, and returned in R as a vector with the log/likelihood value of each model." #sous windows pour éviter les problèmes de chemin de recherche d'exécutables #setwd("c://program file//phyml_v2.4//exe")

2008/06/18 Bio/Info2008.R 5 # Ecriture dans un fichier au format = "interleaved" write.dna(meseq, format = "interleaved", "Ramphocelus.fas") # X </ phymltest("ramphocelus.fas", execname="phyml_linux") X summary(x) plot(x) ########### Quelques fonctions ############### lect_seq_fasta </ function(myfilename) filecon</file(myfilename, "r") #Pour compter les lignes du fichier : # cat myfilename wc /l # pour compter le nombre de seq. # cat myfilename grep ">" wc /l commande = paste("cat", myfilename," wc /l", sep = " ") nb_lines = system(commande, intern = TRUE) commande = paste("cat", myfilename," grep '^>' wc /l", sep = " ") nb_seqs = system(commande, intern = TRUE) #construire un dataframe pour les seq data = data.frame(numseq=1:nb_seqs, nomseq=i("x"), seq = I("x")) #I pour éviter le codage en Factor cur_seq = 0; seq = ""; tt = ""; name = ""; for(i in 1: as.integer(nb_lines) ) tt</readlines(filecon, n=1) #grep retourne un vecteur dont la longueur est nulle quand pas de présence if (length(grep("^>", tt) ) ) # nom d'une seq cur_seq = cur_seq + 1; if (cur_seq > 1) #cat( cur_seq / 1,name, seq,"\n", sep ="\t" ); data[cur_seq / 1, 2] = name data[cur_seq / 1, 3] = seq seq = ""; name = tt; else # un morceau de seq seq = paste(seq, tt, sep = ""); #pos</seek(filecon, rw="r") # pour la dernière seq #cat( cur_seq,name, seq,"\n", sep ="\t" ); data[cur_seq, 2] = name data[cur_seq, 3] = seq close.connection(filecon); data;

2008/06/18 Bio/Info2008.R 6 # Download sample proteome from NCBI in fasta format. The chosen example is from Halobacterium sp. which contains 2058 proteins: myfileloc </ "ftp://ftp.ncbi.nih.gov/genbank/genomes/bacteria/halobacterium_sp/ae004437.faa" download.file(myfileloc, "AE004437.faa"); Halobact </ lect_seq_fasta(myfilename="ae004437.faa") ########## # Analyse de données SNP depuis BioMart ########## snpmart = usemart("snp", "mmusculus_snp") attribs = c("refsnp_id", "allele", "chrom_start", "chrom_strand") filtres = c("chr_name", "chrom_start", "chrom_end") deb = 41282706 fin = 41382706 filtreval = list(8, deb, fin) snips = getbm(attributes = attribs, filters = filtres, values = filtreval, mart = snpmart) nbsnips = nrow(snips) plot(x </ snips[,3], y </ rep(1,times=nbsnips), type="h", col="blue", xaxt="n", yaxt="n", bty="n", main = "SNIPs du chromosome 8", xlab=paste("positions ",deb, "/",fin,sep=""), ylab=""); abline(h=0.78, col="green", lwd=12); #distinguer les changements de type C/T lines(a </ snips[snips[,2]=="c/t",3], b </ rep(1,times=length(snips[snips[,2]=="c/t",3]) ), type="h", col="red", lwd=2) ########## # Analyse de la composition en GC du chr 19 adaptée de seqinr ########## library(seqinr) choosebank() # pour lister toutes les bd choosebank("ensembl") #données de seq. des genomes d'ensembl banknamesocket #afficher les infos sur la bd Esembl query("mm", "sp=mus musculus")# selection du genome de la souris mm # Info sur l'objet de la requette mm$req # Infos sur les résultats de la requette frags_names= getname(mm$req) #Nom de tous les fragments résultats de la requette frags_lengths = getlength(mm$req) # Longueur de tous les fragments chr19 = frags_names[grep("mouse19", frags_names)] #tous les fragments du chromosme 19 chr19_lengths = frags_lengths[grep("mouse19", frags_names)] gfrag(chr19[2], 1, 1000) #pour récuperer les 1000 premières bases du 2 fragment du chromosome 19 n </ length(chr19) res </ rep(/1, 10 * n) i </ 1 f </ 1 for (frag in chr19) myseq </ gfrag(frag, 1, chr19_lengths[f]) for (w in seq(1, nchar(myseq), by = 10^5)) #fenetres disjointes de 10^5 bases res[i] </ GC(s2c(substr(myseq, start = w, stop = w + 10^5 / 1))) i </ i + 1

2008/06/18 Bio/Info2008.R 7 f </ f + 1 res </ res[res >= 0] res[res == 0] </ NA #Les fenêtres où il n'y a que des N renvoient 0 res </ 100 * res closebank() #save(res, file = "chr19.rdata") n </ length(res) xx </ seq_len(n)/10 # en Mb plot(xx, res, type = "l", las = 1, ylab = "Contenu en G+C [%]", main = "Isochores du chromosome 19 de la souris", xlab = "Position sur le chromosome [Mb]") breaks </ c(0, 37.5, 42.5, 47.5, 52.5, 100) #quelques niveaux de GC pour le découpage des données abline(h = breaks, lty = 3) lev </ cut(res, breaks = breaks, labels = c("darkblue", "blue", "yellow", "orange", "red"), ordered = T) segments(x0 = xx, y0 = min(res, na.rm = TRUE), x1 = xx, y1 = res,col = as.character(lev)) #Pour les segments contenant des NA (GC = 0) segments(x0 = xx[is.na(res)], y0 = min(res, na.rm = T), x1 = xx[is.na(res)], y1 = max(res, na.rm = T), col = "gray", lty=3) lines(xx, res)