0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby から BioMart を使ってみる

Last updated at Posted at 2018-10-18

BioMartとは

BioMart とは、統一されたインターフェースで様々な生命科学のデータベースからデータを検索できる仕組みでだそうです。Ruby から BioMart にアクセスできるGemがあるか探してみたら、ありました。

biomart の Gem を使ってみる

dazoakley/biomart
https://github.com/dazoakley/biomart

残念ながら2012年が最終更新となり、開発は終了しています。
README に掲載されているサンプルコードは、リンク切れのためか私の環境では動きません。
しかし、url を指定を新しいものに変更すれば動作します。

インストールする

gem install biomart

接続する

require 'biomart'

biomart = Biomart::Server.new("http://asia.ensembl.org/biomart/martservice")

ちゃんと接続できているか確認しましょう。

biomart.alive?
# => true

接続できていれば true が返されるようです。

利用可能なマートを選ぶ

マートのリストを表示させてみます。

puts biomart.list_databases

次のようなリストが表示されます。

ENSEMBL_MART_ENSEMBL
ENSEMBL_MART_MOUSE
ENSEMBL_MART_SEQUENCE
ENSEMBL_MART_ONTOLOGY
ENSEMBL_MART_GENOMIC
ENSEMBL_MART_SNP
ENSEMBL_MART_FUNCGEN

ここでは一番上の ENSEMBL_MART_ENSEMBL を選びます。

mart = biomart.databases["ENSEMBL_MART_ENSEMBL"]

リストからデータセットを選ぶ

データセットのリストを表示します。

mart.list_datasets

大量に表示されてしまうので、目的のリストを検索します。ここではホモ・サピエンス、すなわち人間を検索してみます。こういうとき grep は便利です。

mart.list_datasets.grep(/sapiens/)
# => ["hsapiens_gene_ensembl"]

人間を選択します。

hsaset = mart.datasets["hsapiens_gene_ensembl"]

念のため接続が生きていることを確認しておきましょう。

hsaset.alive?
# => true

接続できることが確認されました。

アトリビュートや、フィルターのリストを列挙する

実際にデータベースに検索をするまえに、アトリビュートやリストを列挙して観察します。
コマンドラインから閲覧するのは、検索するのには便利です。
しかし一覧性が悪いと感じる場合は、本家のWebサイトから確認する方が効率がよいかもしれません。
http://asia.ensembl.org/biomart/martview

# アトリビュートの一覧を列挙する
hsaset.list_attributes
# フィルターの一覧を列挙する
hsaset.list_filters

実際に使う

R で BioMart を使用する下記のサイトを参考にして、実際に検索してみます。
https://bi.biopapyrus.jp/rnaseq/annotation/r-biomart.html

いくつかの Ensembl ID から、染色体名、遺伝子の開始位置と終了位置を検索してみる。

ensid = ["ENSG00000000003", "ENSG00000000457", "ENSG00000000938",
         "ENSG00000006327", "ENSG00000011405", "ENSG00000001497"]

検索する際には、filtersと、attributesを指定します。

res = hsaset.search(
  filters: { "ensembl_gene_id" => ensid },
  attributes: ["ensembl_gene_id", "chromosome_name", "start_position", "end_position"]
)

pp res

こんな感じで検索結果が表示されれば成功です。

{:headers=>
  ["ensembl_gene_id", "chromosome_name", "start_position", "end_position"],
 :data=>
  [["ENSG00000000003", "X", "100627109", "100639991"],
   ["ENSG00000000457", "1", "169849631", "169894267"],
   ["ENSG00000000938", "1", "27612064", "27635277"],
   ["ENSG00000001497", "X", "65512582", "65534775"],
   ["ENSG00000006327", "16", "3018445", "3022383"],
   ["ENSG00000011405", "11", "17077730", "17207983"]]}

Ensembl ID から GO term を検索する

res = hsaset.search(
  filters: { "ensembl_gene_id" => ensid },
  attributes: ["ensembl_gene_id", "go_id"]
)

pp res
[["ENSG00000000003", "GO:0016020"],
 ["ENSG00000000003", "GO:0016021"],
 ["ENSG00000000003", "GO:0007166"],
 ["ENSG00000000003", "GO:0005887"],
 ["ENSG00000000003", "GO:0005515"],
 ["ENSG00000000003", "GO:0070062"],
 ["ENSG00000000003", "GO:0043123"],
 ["ENSG00000000003", "GO:0039532"],
 ["ENSG00000000003", "GO:1901223"],
 ["ENSG00000000003", nil],
 ["ENSG00000000457", "GO:0005737"],
 ["ENSG00000000457", "GO:0005524"],
 ["ENSG00000000457", "GO:0006468"],
 ["ENSG00000000457", "GO:0005794"],
 ["ENSG00000000457", "GO:0042995"],
 ["ENSG00000000457", "GO:0005515"],
 ["ENSG00000000457", "GO:0030027"],
 ["ENSG00000000457", "GO:0016477"],
 ["ENSG00000000457", "GO:0004672"],
 ["ENSG00000000457", nil],
 ["ENSG00000000938", "GO:0005737"],
 ["ENSG00000000938", "GO:0016020"]]
以下省略

nilが入ったりして、ちょっとあやしいところもありますが、R版のbiomaRtでやっても同じような感じになりますので、これでよいのでしょう。

まとめ

Ruby を用いて BioMart を検索する方法を示しました。各種IDの変換などにご活用ください。

参考資料

R から BioMart を利用する方法
https://bi.biopapyrus.jp/rnaseq/annotation/r-biomart.html

biomaRt — プログラム的にデータ取得
https://heavywatal.github.io/rstats/biomart.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?