Heavy Watal

biomaRt — プログラム的にデータ取得

https://www.bioconductor.org/packages/release/bioc/html/biomaRt.html

http://qiita.com/yuifu/items/a757629506c1cd98156b

BioMartからプログラマチックにデータを取得するための Bioconductor 拡張。 ウェブアプリ MartView のGUIでひととおり慣れておくと良い。

クラス

Mart

@biomartensembl

@hosthttp://www.biomart.org:80/biomart/martservice

@datasetscerevisiae_gene_ensembl

@filters

$namechromosome_name, biotype, …
$options[ncRNA,protein_coding,pseudogene,rRNA,snoRNA,snRNA,tRNA], …
$operation=, >=, only,excluded, …
$description
$fullDescription
@attributes
$nameensembl_gene_id, entrezgene, …
$pagefeature_page, structure, homologs, snp, sequences
$description
$fullDescription

関数

listMarts(mart, host='www.biomart.org', ..., archive=FALSE, ...)
利用可能なマート列挙。 e.g. ensembl, fungi_mart_21, unimart
listDatasets(mart, verbose=FALSE)
マートで利用可能なデータセット列挙。 e.g. scerevisiae_gene_ensembl
attributePages(mart)
マートで利用可能なデータのカテゴリ分け(ページ)を列挙。 unique(mart@attributes$page) と同じ。 データを取得するときはこれらの間を跨がないようにアトリビュートを選ぶ。
listAttributes(mart, page, what=c('name', 'desciption'))
マートで利用可能なアトリビュート列挙。 mart@attributes へのアクセサ。
listFilters(mart, what=c('name', 'description'))
マートで利用可能なフィルター列挙。 mart@filters へのアクセサ。
useMart(martname, dataset, host='www.biomart.org', ..., archive=FALSE, ...)
利用するマート(とデータセット)を指定して Mart オブジェクトを作る。 データセットを決めずにも作れる。 e.g. mart = useMart('ensembl', 'scerevisiae_gene_ensembl')
useDataset(dataset, mart, verbose=FALSE)
データセットを決めた Mart オブジェクトを作る。 でもこれって useMart() にもできるので不要…? e.g. mart = useDataset('scerevisiae_gene_ensembl', mart)
getBM(attributes, filters='', values='', mart, curl=NULL, checkFilters=TRUE, verbose=FALSE, uniqueRows=TRUE, bmHeader=FALSE)

このパッケージのメイン関数。 フィルターは名前付きリストで渡す。 filter に渡すと AND 結合:

getBM(c('ensembl_gene_id', 'sgd_gene'),
      filters=list(chromosome_name='IV', biotype='tRNA'),
      mart=ensembl)
# 第四染色体上のtRNA遺伝子

values に渡すと OR 結合:

getBM(c('ensembl_gene_id', 'sgd_gene'),
      values=list(chromosome_name='IV', biotype='tRNA'),
      mart=ensembl)
# 第四染色体上の遺伝子とtRNA遺伝子

このへんとか useDataset() らへんとか、 インターフェイスがあまり洗練されてない印象だなぁ…。

getSequence(chromosome, start, end, id, type, seqType, upstream, downstream, mart)

Sequencesページのデータをダウンロードすることに特化した getBM() ラッパー。 結果は2列(配列とID)の data.frame。
seqType: gene_exon, transcript_exon, transcript_exon_intron, gene_exon_intron, cdna, coding, coding_transcript_flank, coding_gene_flank, transcript_flank, gene_flank, peptide, 3utr, 5utr

getGene(id, type, mart)

IDを指定して遺伝子情報をダウンロードすることに特化した getBM() ラッパー。 得られるdata.frameは9列: 指定したID, external_gene_id, description, chromosome_name, band, strand, start_position, end_position, ensembl_gene_id

select(mart, keys, columns, keytype)

getBM() を生のSQLっぽくした感じ。 keytype(フィルター)は1つしか使えない。 dplyr::select() と名前が衝突する。

columns(mart)

mart@attributes$name と同じ

keytypes(mart)

mart@filters$name と同じ

keys(mart, keytype)

subset(mart@filters, name==keytype)$options をちゃんと要素ごとに切った文字列ベクタで。

exportFASTA(sequences, file)

使用例

Ensembl

マートとデータセットの決定

library(biomaRt)
ensembl = useMart('ensembl', 'scerevisiae_gene_ensembl')

## あるいは
listMarts()
ensembl = useMart('ensembl')
listDatasets(ensembl)
ensembl = useDataset('scerevisiae_gene_ensembl', ensembl)

どんなデータやフィルタが利用可能か調べる

attributePages(ensembl)
listAttributes(ensembl, 'feature_page')
subset(ensembl@filters, select=c(name, description, type, operation))

フィルタの選択肢を調べる

> subset(ensembl@filters, name=='biotype')$options
[1] "[ncRNA,protein_coding,pseudogene,rRNA,snoRNA,snRNA,tRNA]"
> keys(ensembl, 'biotype')
[1] "ncRNA" "protein_coding" "pseudogene" "rRNA" "snoRNA" "snRNA" "tRNA"
> keys(ensembl, 'go_evidence_code')
[1] "IBA" "IC"  "IDA" "IEA" "IEP" "IGI" "IMP" "IPI" "ISA" "ISM" "ISS" "NAS" "ND"  "TAS"

近いミラーを使う

> listMarts(host='asia.ensembl.org')
               biomart               version
1 ENSEMBL_MART_ENSEMBL      Ensembl Genes 75
2     ENSEMBL_MART_SNP  Ensembl Variation 75
3 ENSEMBL_MART_FUNCGEN Ensembl Regulation 75
4    ENSEMBL_MART_VEGA               Vega 55
5                pride        PRIDE (EBI UK)
> ensembl = useMart('ENSEMBL_MART_SNP', 'scerevisiae_snp', host='asia.ensembl.org')

UniProt

フィルタ列挙

> unimart = useMart('unimart', 'uniprot')
> subset(unimart@filters, select=c(name, description, type, operation))
               name       description    type operation
1  superregnum_name  Superregnum name    list         =
2     proteome_name Complete proteome    list         =
3         accession         Accession    text         =
4      protein_name           Protein    text         =
5    length_greater          Length >    text         >
6    length_smaller          Length <    text         <
7  protein_evidence Protein existence    list         =
8           embl_id          EMBL IDs id_list      =,in
9   arrayexpress_id  ArrayExpress IDs id_list      =,in
10       ensembl_id       Ensembl IDs id_list      =,in
11        pdbsum_id        PDBSum IDs id_list      =,in
12        intact_id        IntAct IDs id_list      =,in
13      interpro_id      InterPro IDs id_list      =,in
14            go_id Gene Ontology IDs id_list      =,in
15        gene_name         Gene name    text         =
16       entry_type        Entry type    list         =
17        organelle         organelle    list         =
18        plasmid_f           Plasmid    text         =

フィルタの選択肢

> subset(unimart@filters, 3 < nchar(options) & nchar(options) < 120, select=c(name, options))
               name                                                                                                            options
1  superregnum_name                                                                               [Eukaryota,Bacteria,Archaea,Viruses]
7  protein_evidence [1: Evidence at protein level,2: Evidence at transcript level,3: Inferred from homology,4: Predicted,5: Uncertain]
16       entry_type                                                                                                [Swiss-Prot,TrEMBL]

“Complete proteome” の選択肢(すげえ長い)を抜き出す

proteome_name = biomaRt::keys(unimart, 'proteome_name')
grep('Sac.* cer.*', proteome_name, value=TRUE)

アトリビュート列挙 (ただし embl_id 以降の項目はほとんど使えない)

> listAttributes(unimart)
                      name       description
1                accession         Accession
2                     name        Entry name
3             protein_name      Protein name
4                gene_name         Gene name
5                 organism          Organism
6         protein_evidence Protein existence
7               entry_type            Status
8                    go_id             GO ID
9                  go_name           GO name
10  db2go_p__dm_primary_id          GO ID(p)
11 db2go_p__dm_description           GO name
12 db2go_f__dm_description       GO name (F)
13  db2go_f__dm_primary_id         GO ID (F)
14  db2go_c__dm_primary_id         GO ID (C)
15 db2go_c__dm_description       GO name (C)
16                 embl_id          EMBL IDs
17              ensembl_id       Ensembl IDs
18             interpro_id      InterPro IDs
19               pdbsum_id        PDBSum IDs
20                  pdb_id           PDB IDs
21            arrayexpress  ArrayExpress IDs
22                pride_id         PRIDE IDs
23             interact_id        IntAct IDs
24                comments          Comments
25               ec_number         Ec number
26                 keyword           Keyword
27            plasmid_name      Plasmid name
28          organelle_name    organelle name

RとBioconductorを用いたバイオインフォマティクス Rによるバイオインフォマティクスデータ解析 第2版 -Bioconductorを用いたゲノムスケールのデータマイニング- トランスクリプトーム解析 (シリーズ Useful R 7)