・お題:NCBIからデータをとってきたい。Rで自動化できると嬉しい。
・Rを使ってNCBIからデータをとって来るライブラリを調べてみると、rentrezというライブラリを見つけた。正しいことはそちらをご覧いただきたい。
・あまりにアクセスしまくるとNCBIに迷惑が掛かるので、利用する際は規約を確認して、自己責任で節度を持って利用していただきたい。
・とりあえずやってみる。インストールは割愛し、ライブラリを読み込む。
> library(rentrez)
・NCBIといえばいろいろなデータベースを対象に調べることができる。
・このライブラリでどのデータベースを利用可能か調べてみる。
> entrez_dbs()
・データベースのサマリを見てみる。
> entrez_db_summary("pubmed")
・検索可能な項目を見てみる。なんだかたくさんある。
> entrez_db_searchable("pubmed")
・例えば、pubmedでcovid-19で検索した際の結果を引っ張ってみる。今回設定していないが、変数retmaxに数値を与えると、引っ張ってくるIDの上限を指定できる。
> r_search <-
+ entrez_search(db = "pubmed",
+ term = "COVID-19")
> r_search
Entrez search result with 377308 hits (object contains 20 IDs and no web_history object)
Search term (as translated): "covid 19"[All Fields] OR "covid 19"[MeSH Terms] O ...
・38万件弱引っ掛かってきた。IDを見てみる。
> r_search$ids
[1] "37515834" "37515805" "37515802" "37515801" "37515796" "37515794" "37515792" "37515791" "37515789" "37515788" "37515743"
[12] "37515735" "37515734" "37515731" "37515710" "37515684" "37515617" "37515485" "37515477" "37515449"
・pubmedで同様にCOVID-19を検索すると以下のような感じ。ヒット件数はぴったり一致している。IDはトップに表示されたものとは違うっぽい。
・最初の文献を覗いてみる。
> summ <-
+ entrez_summary(db = "pubmed",
+ id = r_search$ids[1])
> summ
・いろいろな情報が入っている。
> str(summ)
・出版年とタイトルをとって来る。
> ext_summ <-
+ extract_from_esummary(summ, c("pubdate", "title"))
> ext_summ
$pubdate
[1] "2023 Jul 27"
$title
[1] "Responsible design and implementation of technologies for the prevention of infectious diseases: towards a values-based assessment framework for the Dutch government."
・複数の文献でまとめてやってみる。
> summ2 <-
+ entrez_summary(db = "pubmed",
+ id = r_search$ids[1:10])
> summ2 #titleは長くて見づらいので、他の項目を選んでみる。
> df <-
+ data.frame(pubdate = extract_from_esummary(summ2, "pubdate"),
+ journal = extract_from_esummary(summ2, "fulljournalname"))
> df
・idから遺伝子の情報をとって来るならこんな感じで行けるかも。
> summ_gene <-
+ entrez_summary(db = "gene",
+ id = c("59272", "183", "1636"))
> summ_gene
> df_gene <-
+ data.frame(pubdate = extract_from_esummary(summ_gene, "name"),
+ journal = extract_from_esummary(summ_gene, "currentid"),
+ aliases = extract_from_esummary(summ_gene, "otheraliases"))
> df_gene
おわり