いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【R】NCBIからデータをとってきたい

・お題:NCBIからデータをとってきたい。Rで自動化できると嬉しい。

 

・Rを使ってNCBIからデータをとって来るライブラリを調べてみると、rentrezというライブラリを見つけた。正しいことはそちらをご覧いただきたい。

cran.r-project.org

・あまりにアクセスしまくると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



おわり