RとSQLiteで気軽にデータベース作成

6,552 views
6,285 views

Published on

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,552
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
46
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

RとSQLiteで気軽にデータベース作成

  1. 1. RとSQLiteで気軽に データベース作成antiplastics@Kashiwa.R#4 2012/9/28
  2. 2. テーブルデータの限界 4.39GBのデータを read.table()webから取得したシロイヌナズナの遺伝子発現データ 堅気の人はまず見る事が無いエラーメッセージ
  3. 3. データをどう管理するか RDBMS- リレーショナルデータベースマネージメントシステム- データを関係モデルで管理- MySQL, PostgreSQL, Oracle, SQLite等 テーブル2 テーブル3 テーブル1
  4. 4. データをどう管理するか NoSQL 最近注目されているRDBMSと異なる技術キー・バリュー型 : データを単純に“キー”と“値”を持つものとして管理- Cassandra(前までfacebookが使ってた), Google BigTable, AmazonDynamoDB等 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. 5. データを取得する言わずもがなの文献データベース 雑誌毎にフォルダ分けされており、XML形式で文献データを提供 中身は月毎にファイルを分けている(http://www.ncbi.nlm.nih.gov/pmc/tools/ftp/) (XML) ダウンロード 解凍 (7時間!) (34.1GB!!!)
  6. 6. 補足:スキーマ テーブルをどのように分割するか、 どのキー同士で参照するか、 どこにインデックスを貼るか…等 データベース全体のデザイン テーブル2 今回はI/Oが早くなればそれでいいので、 テーブル3 特にスキーマとか考えないテーブル1 (1個のでかいテーブル)
  7. 7. 補足:スキーマゲノムデータベースEnsemblのスキーマ あまりにアレだからBiomartがもっと簡単に データを取得できるようにしている
  8. 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. 9. XML→CSVlibrary(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.......
  10. 10. SQLiteにCSVをインポート> sqlite3 pubmed.sqlitesqlite> 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 ¥tsqlite> .import pubmed.txt pubmedsqlite> .exit
  11. 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. 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の事が書かれている
  13. 13. 集計してみるdbGetQuery(con,"SELECT COUNT(*) FROM pubmed WHERE abst like %RNA-Seq%;") アブストにRNA-Seqと書かれた論文は167件!
  14. 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年後半あたりにい きなり急増している!
  15. 15. 可視化“RNA-Seq”,“microarray”,“RT-PCR”,“Western blot”,“two-hybrid”,“GFP”の6実験手法のアブスト内での出現頻度(ノードの大きさ)と、共起頻度(エッジの短さ)をCytoscapeで可視化
  16. 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というキーワードがアブストにある文献を一度にダウンロード
  17. 17. その他• web上の既存のDBにアクセスもできる (Rパッケージガイドブック参照)
  18. 18. まとめ• 大規模データの扱いはRDBMS• データ解析はR• RSQLiteで美味しいとこどりできる• 書いたソースコードは以下にあるのでご自由に https://sites.google.com/site/scriptofbioinformatics/ sql-guan-xi/pubmednodetabesu-gou-zhu-r-sqlite
  19. 19. 参考二階堂さんのサイトhttp://cat.hackingisbelieving.org/bioinfo_tips/Learning-sqlite3.htmlDBOnlinehttp://www.dbonline.jp/sqlite/sqliteコマンド 基本的な使い方http://aaabbbkirai.sytes.net/wiki/tech/db/sqlite%A5%B3%A5%DE%A5%F3%A5%C9%20%B4%F0%CB%DC%C5%AA%A4%CA%BB%C8%A4%A4%CA%FD.html#p2994141RSQLite Reference manualhttp://cran.r-project.org/web/packages/RSQLite/RSQLite.pdfRパッケージガイドブックの@wakutekaが書いたとこ

×