RとSQLiteによるオミックス解析の促進

5,029 views
4,893 views

Published on

「第2回Rでつなぐ次世代オミックス情報統合解析研究会」で使用した発表資料

Published in: Technology

RとSQLiteによるオミックス解析の促進

  1. 1. RとSQLiteによるオミックス解析の促進 東京理科大学 薬学研究科 薬科学専攻 博士後期課程1年 露崎 弘毅
  2. 2. read.tableの限界 4.39GB read.tablewebから取得したシロイヌナズナの遺伝子発現データ 堅気の人はまず見る事が無いエラーメッセージ 2
  3. 3. 3
  4. 4. !!注意!!・“ビッグデータ”の話しではありません (そういうのは、Hadoop、NOSQL等で)・あくまでR(とRのパッケージ)を最後まで使いたい人・データが数GB程度で、もうちょっとRで頑張りたい人・スパコン使わずにローカルPCでなんとかしたい人を想定・ff、bigmemoryの利用など別のアプローチもある 4
  5. 5. RとSQLiteの組み合わせGBレベルのデータ read.table 5
  6. 6. RとSQLiteの組み合わせGBレベルのデータ 一度SQLiteに 格納 Input / Output こうすればまだまだ頑張れるはず!? 6
  7. 7. SQLiteとの併用のメリット・元々ある程度大きいデータを扱う事を想定している言語・インデックス、トランザクション、型指定等、高速化のための技術が豊富・SQL言語(RDBMS)はデータの検索、集計等大雑把な操作に適している・Rは検定、可視化等、データの詳細な解析に適している・共にテーブル形式のデータを想定している→ RDBMSとRは相性が良い 7
  8. 8. なぜSQLite? 楽だから MySQL, PostgreSQL, Oracle … SQLite (イメージ) (イメージ) .sqlite サーバvsクライアント サーバvsクライアントという概念が無い 管理者 自分しか使わない DB DB DB 他人が途中アクセスしてくるという事 がそもそも無い .sqliteというデータベースファイルが1root権限、パスワード設定、起動、 個できるだけ停止、再起動、Anonymousユーザ-、 いらなくなったら削除すればおしまいセキュリティ、ロック、バックアップ… ローカルで自分だけが使う場合、SQLiteで十分 8
  9. 9. 実際に内部でSQLiteを 利用しているパッケージ DESCRIPTIONGO.db NAMESPACE R zzz.R man ~.Rd extdata GO.sqlite 9
  10. 10. 実際に内部でSQLiteを 利用しているパッケージMacの場合ls /Library/Frameworks/R.framework/Resources/library/*/extdata/*.sqliteDECIPHER/extdata/Bacteria_175seqs.sqliteDO.db/extdata/DO.sqliteGO.db/extdata/GO.sqliteGenomicFeatures/extdata/Biomart_Ensembl_sample.sqliteIlluminaHumanMethylation450k.db/extdata/IlluminaHumanMethylation450k.sqliteKEGG.db/extdata/KEGG.sqlite…(.sqliteは23個、.sqlは1個、.dbは2個) アノテーションパッケージを中心に、大きいデータを提供 するパッケージでは、内部的にSQLiteを利用している (ユーザーは気づかないが) 10
  11. 11. 1. SQLiteの基礎 1. SQLiteの基礎 / 11
  12. 12. SQLiteの起動、終了、DB作成 /* 起動 */ sqlite3 /* 終了 */ .exit 1. SQLiteの基礎 / 12
  13. 13. SQLiteの起動、終了、DB作成 /* 起動 */ sqlite3 /* 終了 */ .exit /* DBファイルを作成 */ sqlite3 test.sqlite カレントディレクトリに ファイルができる test.sqlite 1. SQLiteの基礎 / 13 test.sqlite
  14. 14. テーブル作成gene_name control treatment /* テーブル作成 */ CREATE TABLE RNASEQ ( RNASEQ gene_name VARCHAR(50), control NUMERIC, treatment NUMERIC ); *SQLiteは値の型を指定しなくても動い てしまうが、指定したほうが良い 1. SQLiteの基礎 / 14 test.sqlite
  15. 15. データ追加gene_name control treatment /* データ追加 */ INSERT INTO RNASEQ VALUES(“gene1”, 0, 0) gene1 0 0 INSERT INTO RNASEQ VALUES(“gene2”, 12, 25) gene2 12 25 INSERT INTO RNASEQ VALUES(“gene3”, 100, 203) gene3 100 203 INSERT INTO RNASEQ VALUES(“gene4”, 0, 0) INSERT INTO RNASEQ VALUES(“gene5”, 230, 13) gene4 0 0 gene5 230 13 RNASEQ 1. SQLiteの基礎 / 15 test.sqlite
  16. 16. データの更新gene_name control treatment /* データ更新 */ UPDATE RNASEQ SET control = 10 gene1 0 0 WHERE gene_name == “gene4”; gene2 12 25 gene3 100 203 gene4 10 0 gene5 230 13 RNASEQ 1. SQLiteの基礎 / 16 test.sqlite
  17. 17. 削除に関してgene_name control treatment /* 行に対して */ DELETE FROM RNASEQ gene1 0 0 WHERE gene_name == “gene1”; gene2 12 25 gene3 100 203 gene4 10 0 gene5 230 13 RNASEQ 1. SQLiteの基礎 / 17 test.sqlite
  18. 18. 削除に関してgene_name control treatment /* 行に対して */ DELETE FROM RNASEQ gene2 12 25 WHERE gene_name == “gene1”; gene3 100 203 gene4 10 0 /* 列に対して */ CREATE TABLE TMP( gene5 230 13 gene_name VARCHAR(50), treatment ); RNASEQ INSERT INTO TMP SELECT gene_name, treatment FROM RNASEQ; DROP TABLE RNASEQ; ALTER TABLE TMP RENAME TO RNASEQ; 1. SQLiteの基礎 / 18 test.sqlite
  19. 19. 削除に関してgene_name treatment /* 行に対して */ DELETE FROM RNASEQ RNASEQ WHERE gene_name == “gene1”; /* 列に対して */ CREATE TABLE TMP( gene_name VARCHAR(50), treatment ); INSERT INTO TMP SELECT gene_name, treatment FROM RNASEQ; DROP TABLE RNASEQ; ALTER TABLE TMP RENAME TO RNASEQ; /* 全データに対して */ DELETE FROM RNASEQ; 1. SQLiteの基礎 / 19 test.sqlite
  20. 20. 削除に関して /* 行に対して */ DELETE FROM RNASEQ WHERE gene_name == “gene1”; /* 列に対して */ CREATE TABLE TMP( gene_name VARCHAR(50), treatment ); INSERT INTO TMP SELECT gene_name, treatment FROM RNASEQ; DROP TABLE RNASEQ; ALTER TABLE TMP RENAME TO RNASEQ; /* 全データに対して */ DELETE FROM RNASEQ; /* テーブルに対して */test.sqlite DROP TABLE RNASEQ; 1. SQLiteの基礎 / 20
  21. 21. 削除に関して /* データベースに対して */ test.sqliteを削除すればいいだけ (rm test.sqliteなり、右クリック→ゴミ箱なり) 1. SQLiteの基礎 / 21
  22. 22. SELECTgene_name control treatment /* テーブルのデータ全て */ SELECT * FROM RNASEQ; gene1 0 0 gene2 12 25 gene3 100 203 * : 全てという意味(ワイルドカード) gene4 10 0 gene5 230 13 RNASEQ < SELECT文の基本 > SELECT 列名 FROM テーブル名 WHERE 条件式; 1. SQLiteの基礎 / 22 test.sqlite
  23. 23. SELECTgene_name control treatment /* テーブルのデータ全て */ SELECT * FROM RNASEQ; gene1 0 0 gene2 12 25 /* gene3, gene4の行のみ */ gene3 100 203 SELECT * FROM RNASEQ WHERE gene_name == “gene3” gene4 10 0 OR gene_name == “gene4”; gene5 230 13 RNASEQ 1. SQLiteの基礎 / 23 test.sqlite
  24. 24. SELECTgene_name control treatment /* テーブルのデータ全て */ SELECT * FROM RNASEQ; gene1 0 0 gene2 12 25 /* gene3, gene4の行のみ */ gene3 100 203 SELECT * FROM RNASEQ WHERE gene_name == “gene3” gene4 10 0 OR gene_name == “gene4”; gene5 230 13 /* controlもtreatmentも0では無い行を取り出 RNASEQ す */ SELECT * FROM RNASEQ WHERE control != 0 AND treatment != 0; 1. SQLiteの基礎 / 24 test.sqlite
  25. 25. SELECTgene_name control treatment /* テーブルのデータ全て */ SELECT * FROM RNASEQ; gene1 0 0 gene2 12 25 /* gene3, gene4の行のみ */ gene3 100 203 SELECT * FROM RNASEQ WHERE gene_name == “gene3” gene4 10 0 OR gene_name == “gene4”; gene5 230 13 /* controlもtreatmentも0では無い行を取り出 RNASEQ す */ SELECT * FROM RNASEQ WHERE control != 0 AND treatment != 0; /* controlもtreatmentも0では無い行の gene_nameを取り出す */ SELECT gene_name FROM RNASEQ WHERE control != 0 AND treatment != 0; 1. SQLiteの基礎 / 25 test.sqlite
  26. 26. SELECT (結合、JOIN)gene_name control treatment /* ある転写因子TF1の結合箇所 */ CREATE TABLE TF1BIND ( gene1 0 0 gene_name VARCHAR(50), gene2 12 25 TF1 NUMERIC gene3 100 203 ); INSERT INTO TF1BIND VALUES(“gene1”, 104); gene4 10 0 INSERT INTO TF1BIND VALUES(“gene2”, -12; gene5 230 13 /* 2テーブルに跨った検索 */ RNASEQ SELECT A.gene_name, A.control, A.treatment, B.TF1 FROM RNASEQ AS A, TF1BIND AS B gene_name WHERE A.gene_name == B.gene_name; TF1 gene1 +104 gene_name control treatment TF1 gene5 -12 gene1 0 0 +104 TF1BIND gene5 230 13 -12 1. SQLiteの基礎 / 26 test.sqlite
  27. 27. 余談:双方向ベストヒット A2B B2A Agenes Bgenes Bgenes Agenes オーソログ収集をしたい geneA geneD geneG geneO (パラログを除外したい) geneV geneU geneR geneR geneX geneX geneY geneX geneX 生物種A geneS geneL geneT geneF geneD geneY geneX geneX BBH BBH geneE geneH geneD geneA geneX geneY 生物種B geneX geneXBBH:BLAST BEST HIT SELECT A2B.Agenes, A2B.Bgenes FROM A2B, B2A WHERE A2B.Agenes == B2A.Agenes AND A2B.Bgenes == B2A.Bgenes;Reciprocal Blast best hitの抽出 1. SQLiteの基礎 / 27 JOINはなにかと便利
  28. 28. 補足:スキーマ テーブルをどのように分割するか、 どのキー同士で参照するか、 どこにインデックスを貼るか…等 データベース全体のデザイン テーブル2 今回はI/Oが早くなればそれでいいので、 テーブル3 特にスキーマとか深く考えないテーブル1 1. SQLiteの基礎 / 28
  29. 29. 補足:スキーマ ゲノムデータベースEnsemblのスキーマhttp://www.gramene.org/info/docs/api/funcgen/trimmed_funcgen_schema.png 1. SQLiteの基礎 / 29
  30. 30. 補足:スキーマ cummeRbundパッケージのスキーマ 1. SQLiteの基礎 / 30http://compbio.mit.edu/cummeRbund/manual_2_0.html
  31. 31. 2. RSQLiteの利用 2. RSQLiteの利用 / 31
  32. 32. RSQLite RでSQLiteを操作できるパッケージ Rでコマンドを叩いても、実際は裏でSQLが走るSQLがデータをとってきても、返ってくるのはRオブジェクト SQL文 例: SELECT * FROM pubmed; .sqlite Rオブジェクト (データフレーム)DBI(データベースインターフェース)という他の言語でも実装されている 例: PerlのDBD::Pg、JavaのJDBI、Rubyのruby-dbi、PHP … 2. RSQLiteの利用 / 32
  33. 33. データを取得する言わずもがなの文献データベース 雑誌毎にフォルダ分けされており、XML形式で文献データを提供 中身は月毎にファイルを分けている(http://www.ncbi.nlm.nih.gov/pmc/tools/ftp/) (XML) 解凍 ダウンロード (34.1GB!!!) 2. RSQLiteの利用 / 33
  34. 34. XML→TXTlibrary(XML)d <- xmlToList(“XMLファイル名”) みたいなのを毎回走らせるA <- d$front$’journal-meta’$’journal-id’$text のは面倒だから、B <- d$front$’article-meta’$’pub-date’$year 実際はシェルスクリプトでC <- d$front$’article-meta’$’title-group’$’article-title’D <- d$front$’article-meta’$’abstract$pE <- paste(“PMC”,d$front$’article-meta’$’article-id’$text,sep=“”)F <-paste(“http://www.ncbi.nlm.nih.gov/pmc/articles/”,E,”/pdf/”,sep=“”)…result <- c(A,B,C,D,E,F)sink(file=“pubmed.txt”,append=T)cat(result)sink() このようなtab区切りテーブルpubmed.txtができる 雑誌名 年代 タイトル アブスト (???GB) PMCID URL Nature 2012 hoge Hoge is... PMC2751374 http://www.ncbi.nlm....... 2. RSQLiteの利用 / 34
  35. 35. 279102行×6列 pubmed.txtpubmed.txt467.1MB read.table (“pubmed.txt”) この程度でもR単独ではかなりきつい 2. RSQLiteの利用 / 35
  36. 36. SQLiteにTXTをインポート pubmed.txt > sqlite3 pubmed.sqlite sqlite> DROP TABLE IF EXISTS pubmed.sqlite; sqlite> CREATE TABLE pubmed ( journal_name VARCHAR(30), 467.1MB year INTEGER, title VARCHAR(300), abst VARCHAR(5000), pmcid CHAR(10), url VARCHAR(100) );pubmed.sqlite sqlite> .separator ¥t sqlite> .import pubmed.txt pubmed 完成!!! sqlite> .exit 2. RSQLiteの利用 / 36
  37. 37. pubmed.sqliteにRで接続 # R起動 >Rpubmed.sqlite # パッケージロード > library(“RSQLite”) dbConnect() > library(“DBI”) # コネクション > driver <- dbDriver(“SQLite”) > db <- “pubmed.sqlite” > con <- dbConnect(driver, db) 2. RSQLiteの利用 / 37
  38. 38. 検索してみる dbGetQuery( con,pubmed.sqlite "SELECT title FROM pubmed WHERE abst like %RNA-Seq%;") dbGetQuery() Microarrays, deep sequencing and the true… Maintaining RNA integrity in a … Microarrays and RNA-Seq identify molecular mechanisms… 2. RSQLiteの利用 / 38
  39. 39. 検索中 …(検索も数秒) 2. RSQLiteの利用 / 39
  40. 40. 集計してみる dbGetQuery( con,pubmed.sqlite "SELECT COUNT(*) FROM pubmed WHERE abst like %RNA-Seq%;") dbGetQuery() アブストにRNA-Seqと書かれた論文は167件! 2. RSQLiteの利用 / 40
  41. 41. 可視化paper <- rep(0:0,length=85)for(i in 1928:2012){command <- paste("SELECT COUNT(*) FROM pubmed WHERE abst like %RNA-Seq%AND year = ",i,";",sep="")prepaper <- dbGetQuery(con,command)if(as.numeric(prepaper)!=0){ paper[i-1928] <- as.numeric(prepaper)}}jpeg(file="paper.jpeg")plot(1928:2012,paper,"l",ylab="Frequency",xlab="Year")dev.off()論文の本数が2000年後半あたり 2. RSQLiteの利用 / 41にいきなり急増している!
  42. 42. 可視化“RNA-Seq”,“microarray”,“RT-PCR”,“Western blot”,“two-hybrid”,“GFP”の6実験手法のアブスト内での出現頻度(ノードの大きさ)と、共起頻度(エッジの太さ)をCytoscapeで可視化 2. RSQLiteの利用 / 42
  43. 43. pdf根こそぎダウンロード# キーワード> keyword <- "RNA-Seq"# 自前で作ったダウンロード関数> pubmed.download(keyword) RNA-Seqというキーワー ドがアブストにある文献 を一度にダウンロード RNA-Seqフォルダ 2. RSQLiteの利用 / 43
  44. 44. 3. MeSHパッケージの紹介 3. MeSHパッケージの紹介 / 44
  45. 45. 遺伝子アノテーションとは アノテーション = 注釈をつける どんな転写因子結合 HNRNPR サイトをもつか ZNF436RNA-Seq TCEA3Chip-Seq ASAP3DNA Microarray E2F2SNP-array ID3CAGE GALESAGE どこのパスウェイか HMGCL… FUCA1ゲノムワイドな実験 CNR2(数万遺伝子) … 遺伝子リスト どんな機能に関 (数百遺伝子?) わっているか 3. MeSHパッケージの紹介 / 45
  46. 46. MeSH(Medical Subject Headings) 論文にあてがわれた注釈情報 3. MeSHパッケージの紹介 / 46
  47. 47. MeSH(Medical Subject Headings) Gene Ontology(GO)よりも ボキャブラリーが多い Nakazato et al. (2008) 3. MeSHパッケージの紹介 / 47
  48. 48. MeSH(Medical Subject Headings) GOよりも階層が幅広い BP: Biological ProcessGO CC: Cellular Component MF: Molecular Function 3階層 3. MeSHパッケージの紹介 / 48
  49. 49. MeSH(Medical Subject Headings) A : Anatomy B : Organisms C : Diseases D : Chemicals and Drugs E : Analytical, Diagnostic and Therapeutic Techniques and Equipment F : Psychiatry and Psychology G : Phenomena and Processes H : Disciplines and OccupationsMeSH I : Anthropology, Education, Sociology and Social Phenomena J : Technology and Food and Beverages K : Humanities L : Information Science M : Persons N : Health Care 16階層 V : Publication Type Z : Geographical Locations 3. MeSHパッケージの紹介 / 49
  50. 50. MeSH(Medical Subject Headings) GOよりも階層が浅いGO(BP) 上位(有意になりづらい) 下位(有意になりやすい) 3. MeSHパッケージの紹介 / 50
  51. 51. MeSH(Medical Subject Headings)MeSH(A) 浅く広い階層 3. MeSHパッケージの紹介 / 51
  52. 52. GOよりも好ましい性質を多くもつ→MeSHを遺伝子アノテーションに利用 3. MeSHパッケージの紹介 / 52
  53. 53. Nature Medicine 18, 766-773 (2012)3. MeSHパッケージの紹介 / 53
  54. 54. 既存のMeSH⇔GeneIDの対応 pubmed2mesh gene2pubmed MeSH Pubmed Gene ID http://gendoo.dbcls.jp/ http://gene2mesh.ncibi.org/ http://cbrc.musc.edu/homepage/jani/genemesh/index.htmlこれらは全てWebアプリケーション→ Rでも使えるようにしたい 3. MeSHパッケージの紹介 / 54
  55. 55. BioCHackathon 2012 仲里猛 : DBCLS @chalkless Gendooを開発(2008)二階堂愛: RIKEN CDB@dritoshi担当:gendoo.Hs.db( https://github.com/dritoshi/gendoo.Hs.db) 師田郷太: UW-Madison @chikudaisei 担当:meshr (https://github.com/morota/meshr)露崎弘毅 : Tokyo University of Science@antiplastics 目的担当:MeSH.db MeSHをRで使えるようにする(https://github.com/kokitsuyuzaki/MeSH.db) 3. MeSHパッケージの紹介 / 55
  56. 56. MeSHパッケージ群の使い方 MeSH.db gendoo.Hs.db (MeSHのデータ本体) (Gene IDとMeSH IDの対応) 呼び出し meshr (検定パッケージ)なんらかの遺伝子 に対するID Gene ID , MeSH Term, Fisher’s p-value Gene ID (gene synbol)HNRNPR 10236 10236 Cancer 0.0467 エンリッチメントZNF436 80818 80818 Cell division 0.031 解析TCEA3 6920 6920 Leukocyte 0.643ID3 55616 55616 Nervous systems 0.943… … … 3. MeSHパッケージの紹介 / 56
  57. 57. MeSHパッケージ群の使い方 cummeRbundパッケージ内のテストデータiPS細胞 ES細胞 geneid : 全遺伝子(n=314) sig.geneid : 発現変動遺伝子(n=104) とする 3. MeSHパッケージの紹介 / 58
  58. 58. MeSHパッケージ群の使い方 GOによる遺伝子アノテーション MeSHによる遺伝子アノテーション# ライブラリロード # ライブラリロードlibrary(“GO.db”) library(“MeSH.db”)library(“hgu95av2.db”) library(“gendoo.Hs.db”)library(“Gostats”) library(“meshr”)# パラメーター設定 # パラメーター設定paraBP <- new(“GOHyperGParams”, paraA <- new(“MeSHHyperGparams”,geneIds=sig.geneid[,2], geneIds=sig.geneid[,2],universeGeneIds=geneid[,2],annotation=“hgu universeGeneIds=geneid[,2],annotation=“Gen95av2.db”, ontology=”BP”, pvalueCutoff=0.05, dooMeSHA”, pvalueCutoff=0.05,conditional=F, testDirection=“over”) pAdjust=“none”)# エンリッチメント解析 # エンリッチメント解析BP <- hyperGTest(paraBP) A <- meshHyperGTest(paraA)# 結果集計 # 結果集計summary(BP) summary(A) 3. MeSHパッケージの紹介 / 59
  59. 59. MeSHパッケージ群の使い方 GOを利用したエンリッチメント解析 BP (144件) MF (6件) CC (5件)cell differentiation structural molecule activity cell junctioncell development protein binding plasma membranecellular developmental binding cell peripheryprocess kinase activity cytosolic partregulation of multicellular transferase activity, synapseorganismal development transferring phosphorus-cell morphogenesis involved containing groupsin differentiation phosphotransferase activity,chemotaxis alcohol group as acceptortaxiscellular componentorganization… 3. MeSHパッケージの紹介 / 60
  60. 60. MeSHパッケージ群の使い方 MeSHを利用したエンリッチメント解析 A : Anatomy B : Organisms (5件) C : Diseases D : Chemicals (10件) G : Phenomena and (7件) and Drugs (13件)Cilia Processes (13件) Cercopithecus aethiopsChromosomes, Human, Pair 20 Transformation, Neoplastic Cricetinae Cell Amino Acid Sequence Alzheimer Disease Division Amino Acid SequenceChromosomes, Human, 21-22 and Y Cell Adenoviridae Breast Neoplasms Cell DivisionChromosomes, Human, Pair 22 Drosophila Brain ChemistryCentral Nervous System Carcinoma, Non-Small-Cell Lung Chemistry Brain Binding, Competitive Competitive Chimera Carcinoma, Renal Cell Binding, Cricetulus Chromosomes, Human, Pair 20 Astrocytoma Cell Survival Chromosomes, Human, Pair 20 Cattle Cleft Palate Cell Survival Chickens Chromosomes, Human, 21-22 and Y 21-22 and Y Chromosomes, Human, Saccharomyces cerevisiae Chemotaxis Chemotaxis Haplorhini Cell Membrane Permeability Permeability Cell Membrane Cell Cycle Cell Cycle Chromosomes, Human, Pair 22 Chromosomes, Human, Pair 22 Autophagy Autophagy Algorithms Algorithms 3. MeSHパッケージの紹介 / 61
  61. 61. • 使い心地 – GOと似たようなものがヒットする – A(Anatomy)はCC、D(Chemicals and Drugs)はMF、 G(Phenomena and Processes)はBPと少し似ている? – B(Organisms), C(Diseases),Aの臓器等、GOでは見れ ないタームがあり、そこに強みがあると思われる – 1階層あたりのターム数はGOの方が多い (MeSHの方が広く浅いから)• 展望 – 他の階層への拡張 – 他の生物種への拡張 (マイナーな生物種への対応も) 3. MeSHパッケージの紹介 / 62
  62. 62. 第7回 Kashiwa.R バイオ実験系ラボ支援回 +日時:2013 / 3 / 19 15:00~18:00場所:東京理科大学野田キャンパス 薬学部校舎(14号館) 1411教室 63

×