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