Contenu connexe Similaire à RとSQLiteで気軽にデータベース作成 Similaire à RとSQLiteで気軽にデータベース作成 (20) RとSQLiteで気軽にデータベース作成2. テーブルデータの限界
4.39GBのデータを
read.table()
webから取得した
シロイヌナズナの
遺伝子発現データ
堅気の人はまず見る事が無いエラーメッセージ
3. データをどう管理するか
RDBMS
- リレーショナルデータベースマネージメントシステム
- データを関係モデルで管理
- MySQL, PostgreSQL, Oracle, SQLite等
テーブル2
テーブル3
テーブル1
4. データをどう管理するか
NoSQL
最近注目されているRDBMSと異なる技術
キー・バリュー型 : データを単純に“キー”と“値”を持つものとして管理
- Cassandra(前までfacebookが使ってた), Google BigTable, Amazon
DynamoDB等
keyX 124 keyX 526 keyX 9579
keyY ABAV keyY DHHD keyY DHAS ・・・
keyZ tes352 keyZ fsj574 keyZ sutr325
ドキュメント志向型 : データをXML, JSON等で書かれたドキュメントとして管理
- MongoDB, CouchDB, Xquery等
XML
XML
XML
XML
XML
5. データを取得する
言わずもがなの文献データベース 雑誌毎にフォルダ分けされており、
XML形式で文献データを提供 中身は月毎にファイルを分けている
(http://www.ncbi.nlm.nih.gov/pmc/tools/ftp/) (XML)
ダウンロード 解凍
(7時間!) (34.1GB!!!)
6. 補足:スキーマ
テーブルをどのように分割するか、
どのキー同士で参照するか、
どこにインデックスを貼るか…等
データベース全体のデザイン
テーブル2
今回はI/Oが早くなればそれでいいので、
テーブル3
特にスキーマとか考えない
テーブル1 (1個のでかいテーブル)
8. 補足:SQLite
RDBMSの一種で、サーバーvsクライアントという概念が無い
SQLの文法はMySQLとかと大体は同じ
→ 個人で気軽にローカルのデータベースを構築するのに最適
隠しファイル
Macだと Macだと
/Users/ユーザー名/Library/Application /Users/ユーザー名/Library/Application Macだと
Support/Firefox/Profiles/307dewum.default/ Support/Skype/アカウント名/ /Users/ユーザー名/.dropbox
他にもあらゆるアプリケーションが利用 (http://www.sqlite.org/famous.html)
9. XML→CSV
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.......
10. SQLiteにCSVをインポート
> sqlite3 pubmed.sqlite
sqlite> DROP TABLE IF EXISTS pubmed.sqlite;
sqlite> CREATE TABLE pubmed (
journal_name VARCHAR(30),
year INTEGER,
title VARCHAR(300), pubmed.sqlite
abst VARCHAR(5000),
pmcid CHAR(10),
url VARCHAR(100)
完成!!!
);
Sqlite> .separator ¥t
sqlite> .import pubmed.txt pubmed
sqlite> .exit
11. RSQLite
RでSQLiteを操作できるパッケージ
Rでコマンドを叩いても、実際は裏でSQLが走る
SQLがデータをとってきても、返ってくるのはRオブジェクト
SQL文
例: SELECT * FROM pubmed;
pubmed.sqlite
Rオブジェクト
(データフレーム)
DBI(データベースインターフェース)という
他の言語でも実装されている
例: PerlのDBD::Pg、JavaのJDBI、Rubyのruby-dbi
12. 検索してみる
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…
・
・
・ このタイトルのものは、アブストに
RNA-Seqの事が書かれている
14. 可視化
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年後半あたりにい
きなり急増している!
16. pdf根こそぎダウンロード
keyword <- "RNA-Seq"
url <- as.matrix(dbGetQuery(con,paste("SELECT url FROM pubmed WHERE abst
like '%",keyword,"%';",sep="")))
url <- sub(" ","",url)
d <- getwd()
dir.create(paste(d,"/",keyword,sep=""))
setwd(paste(d,"/",keyword,sep=""))
for(i in 1:length(url)){
call <- paste(i,"/",length(url), "is now downloading...",sep=" ")
print(call)
filename <- paste(i,".pdf",sep="")
download.file(url=url[i],destfile=filename,quiet=T)
}
setwd(d)
RNA-Seqというキーワードがアブストに
ある文献を一度にダウンロード
18. まとめ
• 大規模データの扱いはRDBMS
• データ解析はR
• RSQLiteで美味しいとこどりできる
• 書いたソースコードは以下にあるのでご自由に
https://sites.google.com/site/scriptofbioinformatics/
sql-guan-xi/pubmednodetabesu-gou-zhu-r-sqlite