Heavy Watal

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

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

https://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", "description"))
マートで利用可能なアトリビュート列挙。 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

https://www.uniprot.org/

フィルタ列挙

> 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