biomaRt — プログラム的にデータ取得
https://www.bioconductor.org/packages/release/bioc/html/biomaRt.html
https://qiita.com/yuifu/items/a757629506c1cd98156b
BioMartからプログラマチックにデータを取得するための Bioconductor 拡張。 ウェブアプリ MartView のGUIでひととおり慣れておくと良い。
クラス
Mart@biomart—ensembl@host—http://www.biomart.org:80/biomart/martservice@dataset—scerevisiae_gene_ensembl@filters$name—chromosome_name,biotype, …
$options—[ncRNA,protein_coding,pseudogene,rRNA,snoRNA,snRNA,tRNA], …
$operation—=,>=,only,excluded, …
$description
$fullDescription
…@attributes$name—ensembl_gene_id,entrezgene, …
$page—feature_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
フィルタ列挙
> 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