Mais conteúdo relacionado Semelhante a RとSQLiteによるオミックス解析の促進 (20) RとSQLiteによるオミックス解析の促進8. なぜSQLite?
楽だから
MySQL, PostgreSQL, Oracle … SQLite
(イメージ) (イメージ)
.sqlite
サーバvsクライアント
サーバvsクライアントという概念が無い
管理者
自分しか使わない
DB DB DB 他人が途中アクセスしてくるという事
がそもそも無い
.sqliteというデータベースファイルが1
root権限、パスワード設定、起動、 個できるだけ
停止、再起動、Anonymousユーザ-、 いらなくなったら削除すればおしまい
セキュリティ、ロック、バックアップ…
ローカルで自分だけが使う場合、SQLiteで十分 8
9. 実際に内部でSQLiteを
利用しているパッケージ
DESCRIPTION
GO.db
NAMESPACE
R zzz.R
man ~.Rd
extdata GO.sqlite
9
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個)
アノテーションパッケージを中心に、大きいデータを提供
するパッケージでは、内部的にSQLiteを利用している
(ユーザーは気づかないが) 10
13. SQLiteの起動、終了、DB作成
/* 起動 */
sqlite3
/* 終了 */
.exit
/* DBファイルを作成 */
sqlite3 test.sqlite
カレントディレクトリに
ファイルができる
test.sqlite
1. SQLiteの基礎 / 13
test.sqlite
14. テーブル作成
gene_name control treatment /* テーブル作成 */
CREATE TABLE RNASEQ (
RNASEQ gene_name VARCHAR(50),
control NUMERIC,
treatment NUMERIC
);
*SQLiteは値の型を指定しなくても動い
てしまうが、指定したほうが良い
1. SQLiteの基礎 / 14
test.sqlite
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. データの更新
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. 削除に関して
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. 削除に関して
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. 削除に関して
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. 削除に関して
/* 行に対して */
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. 削除に関して
/* データベースに対して */
test.sqliteを削除すればいいだけ
(rm test.sqliteなり、右クリック→ゴミ箱なり)
1. SQLiteの基礎 / 21
22. SELECT
gene_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. SELECT
gene_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. SELECT
gene_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. SELECT
gene_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. 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. 余談:双方向ベストヒット
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 geneX
BBH: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. 補足:スキーマ
テーブルをどのように分割するか、
どのキー同士で参照するか、
どこにインデックスを貼るか…等
データベース全体のデザイン
テーブル2
今回はI/Oが早くなればそれでいいので、
テーブル3
特にスキーマとか深く考えない
テーブル1
1. SQLiteの基礎 / 28
29. 補足:スキーマ
ゲノムデータベースEnsemblのスキーマ
http://www.gramene.org/info/docs/api/funcgen/tri
mmed_funcgen_schema.png
1. SQLiteの基礎 / 29
30. 補足:スキーマ
cummeRbundパッケージのスキーマ
1. SQLiteの基礎 / 30
http://compbio.mit.edu/cummeRbund/manual_2_0.html
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. データを取得する
言わずもがなの文献データベース
雑誌毎にフォルダ分けされており、
XML形式で文献データを提供 中身は月毎にファイルを分けている
(http://www.ncbi.nlm.nih.gov/pmc/tools/ftp/) (XML)
解凍
ダウンロード (34.1GB!!!)
2. RSQLiteの利用 / 33
34. XML→TXT
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()
このようなtab区切りテーブルpubmed.txtができる
雑誌名 年代 タイトル アブスト (???GB)
PMCID URL
Nature 2012 hoge Hoge is... PMC2751374 http://www.ncbi.nlm.......
2. RSQLiteの利用 / 34
35. 279102行×6列 pubmed.txt
pubmed.txt
467.1MB
read.table
(“pubmed.txt”)
この程度でもR単独ではかなりきつい 2. RSQLiteの利用 / 35
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. pubmed.sqliteにRで接続
# R起動
>R
pubmed.sqlite
# パッケージロード
> library(“RSQLite”)
dbConnect() > library(“DBI”)
# コネクション
> driver <- dbDriver(“SQLite”)
> db <- “pubmed.sqlite”
> con <- dbConnect(driver, db)
2. RSQLiteの利用 / 37
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
40. 集計してみる
dbGetQuery(
con,
pubmed.sqlite "SELECT COUNT(*) FROM pubmed WHERE abst like '%RNA-Seq%';")
dbGetQuery()
アブストにRNA-Seqと書かれた論文は167件!
2. RSQLiteの利用 / 40
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
にいきなり急増している!
43. pdf根こそぎダウンロード
# キーワード
> keyword <- "RNA-Seq"
# 自前で作ったダウンロード関数
> pubmed.download(keyword)
RNA-Seqというキーワー
ドがアブストにある文献
を一度にダウンロード
RNA-Seqフォルダ
2. RSQLiteの利用 / 43
45. 遺伝子アノテーションとは
アノテーション = 注釈をつける
どんな転写因子結合
HNRNPR
サイトをもつか
ZNF436
RNA-Seq
TCEA3
Chip-Seq
ASAP3
DNA Microarray
E2F2
SNP-array
ID3
CAGE
GALE
SAGE どこのパスウェイか
HMGCL
…
FUCA1
ゲノムワイドな実験 CNR2
(数万遺伝子) …
遺伝子リスト どんな機能に関
(数百遺伝子?) わっているか
3. MeSHパッケージの紹介 / 45
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 Occupations
MeSH 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
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. 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. 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.643
ID3 55616 55616 Nervous systems 0.943
… … …
3. MeSHパッケージの紹介 / 56
57. MeSHパッケージ群の使い方
cummeRbundパッケージ内のテストデータ
iPS細胞 ES細胞
geneid : 全遺伝子(n=314)
sig.geneid : 発現変動遺伝子(n=104)
とする
3. MeSHパッケージの紹介 / 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=“Gen
95av2.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. MeSHパッケージ群の使い方
GOを利用したエンリッチメント解析
BP (144件) MF (6件) CC (5件)
cell differentiation structural molecule activity cell junction
cell development protein binding plasma membrane
cellular developmental binding cell periphery
process kinase activity cytosolic part
regulation of multicellular transferase activity, synapse
organismal development transferring phosphorus-
cell morphogenesis involved containing groups
in differentiation phosphotransferase activity,
chemotaxis alcohol group as acceptor
taxis
cellular component
organization
…
3. MeSHパッケージの紹介 / 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 aethiops
Chromosomes, Human, Pair 20 Transformation, Neoplastic
Cricetinae
Cell Amino Acid Sequence
Alzheimer Disease Division Amino Acid Sequence
Chromosomes, Human, 21-22 and Y Cell
Adenoviridae Breast Neoplasms Cell Division
Chromosomes, Human, Pair 22
Drosophila Brain Chemistry
Central 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. • 使い心地
– 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