Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

8,563 views

Published on

  • Be the first to comment

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が書いたとこ

×