Closed ixxmu closed 1 year ago
R包安利 ② pubmed.mineR—又一个PubMed利器https://mp.weixin.qq.com/s/bndecTSABox2dcr7aoheig
1- pubmed在上述推文发表之后更新了检索界面
2- 检索式更丰富
3- 小结R包的用途,方便读者选择
这个包相较于esayPubMed更倾向于生物学科
以下是旧版的导出教程:
https://cloud.tencent.com/developer/article/1423450
在这个基础上探索
1-先按照关键词检索,选择send to 粘贴板2-选择要粘贴到粘贴板的内容,send3-到这粘贴板界面还可以精选4-创建文件文件如下:
#pubmed.mineR
rm(list=ls())
# install.packages("pubmed.mineR")
library(pubmed.mineR)
pubmed_abstracts <- readabs("pubmed_abstract.txt")
class(pubmed_abstracts)
printabs(pubmed_abstracts) ## 显示开头和结尾部分
结果:获取的对象长这样
pubmed_abstracts
提取 PMID#获取PMID
pmid <- pubmed_abstracts@PMID
pmid
class(pmid)
# -----结果
> pmid <- pubmed_abstracts@PMID
> pmid
[1] 37304267 35509519 35609877 35576168 35875359 36861033 34675792 36860552 33641171
[10] 33909398 33488462 33073437 33012687 32902122 32712060 32589076 32147856 31430115
[19] 31074953 30481087 30944451 33500908 28693812 28595091 28355064 28353419 28027842
[28] 27738953 28925894 27623625 27081746 28355839 24909775 24814524 23814868 23663408
[37] 23734133 22586414 22374898 21653522 21133799 21133797 19324333 19026670 18801719
[46] 18199908 17671349 17613705 16843701 16136557 15811229 15288343
> class(pmid)
[1] "numeric"
函数 pubtator_function() 只需输入 PMID(数字或上一步得到的 pmid), 就可以给出相应的信息,如 'Gene’, ’Chemical’, ’Disease’ 等。
新版的pubmed可以直接导出pmid
pubtator_output <- pubtator_function(pmid)
也可以直接输入PMID
pubtator_ot6 <- pubtator_function(36861033)
可以看到有基因这一项,但是没有基因相关数据,按照PMID查看原文
看标题和基因没有什么太大的关系,所以没有是正常的。
推文上还描述了一个报错
pubtator_ot1 <- pubtator_function(31158748)
但我这边正常
pubtator_output$Genes
pubtator_output$Genes[1]
通过代码可以选出其中某几项
但我这个没有基因选出来,输出的内容有点奇怪,可能和我基因数为0有关
没有成功复现的小伙伴没有关系,后面有更好的办法~
SentenceToken()
获取文献信息提取Abstract文件中的信息
# 查看第一篇文献的摘要
abstractstc <- pubmed_abstracts@Abstract
SentenceToken(abstractstc[1])
#查看第一篇文献的出版信息
Journalstc <- pubmed_abstracts@Journal
SentenceToken(Journalstc[1])
pubmed_abstracts 3.1.1里面有啥就能看啥
出版信息展示,能看到有些字符被异常提取了
使用该函数可以直接输出3.3.1的文件
sendabs(pubmed_abstracts,"mypba.txt")
输出的文件长这样:原本pubmed上下载下来的数据长这样:原本的文件就只是数据的陈列,但在sendabs()处理之后出现了列名,形成了表格。
该easyPubMed获取的代码如下:
#pubmed.mineR
rm(list=ls())
library(easyPubMed)
my_query <- "Andy Clark[AU]"
entrez_id <- get_pubmed_ids(my_query)
abstracts_txt <- fetch_pubmed_data(entrez_id, format = "xml")
print(abstracts_txt[1:16])
new_PM_df <- table_articles_byAuth(pubmed_data = abstracts_txt, included_authors = "last", max_chars = 500)
write.table(new_PM_df,file = "pubmed_result.txt")
怎么说呢,从列名来看easyPubMed获取的文献信息比sendabs()默认输出更多。
但pubmed.mineR可以抓文本中的基因哦,写在后方
函数 word_atomizations 可以将整个文本拆分成单词,除去空格、标点符号、常用单词,统计剩下的单词出现的频率。
p53_words <- word_atomizations(pubmed_abstracts)
p53_words[1:10,]
这个函数要求提供一个S4对象的pubmed文档但偶尔感觉识别还是有点问题,单个字母的重复也被识别出来了,当然我可以跳过不看,直接看后面单词的部分。
各位注意(敲黑板),抓基因了
函数 gene_atomization()
基于包内自带的 HGNC
数据库,可以从文本提取 Gene Symbol 和其出现的频率。
p53_gene <- gene_atomization(pubmed_abstracts)
p53_gene
结果展示:
以 ”关键词“ 和 "年份" 两个参数,得到 PubMed 中相关文章的数量,并可视化。代码是从公众号上粘贴修改的限定关键词lung cancer和quercetin
rm(list=ls())
library(RISmed)
library(dplyr)
library(ggplot2)
library(tidytext)
library(wordcloud)
# 修改检索关键词
query <- "(lung cancer[Title/Abstract]) AND (quercetin[Title/Abstract])"
result <- EUtilsSummary(query,
type = "esearch",
db = "pubmed",
datetype = "pdat",
retmax = 10000,
mindate = 2020,
maxdate = 2023)
fetch <- EUtilsGet(result, type = "efetch", db = "pubmed")
abstracts <- data.frame(title = fetch@ArticleTitle,
abstract = fetch@AbstractText,
journal = fetch@Title,
DOI = fetch@PMID,
year = fetch@YearPubmed)
abstracts <- abstracts %>% mutate(abstract = as.character(abstract))
# 注意修改年份
abstracts %>%
group_by(year) %>%
count() %>%
filter(year >= 2020) %>%
ggplot(aes(year, n)) +
geom_point() +
geom_line() +
labs(title = "Pubmed articles with search terms lung cancer AND quercetin \n2020-2023", hjust = 0.5,
y = "Articles")
绘制词云图:
cloud <- abstracts %>%
unnest_tokens(word, abstract) %>%
anti_join(stop_words) %>%
count(word, sort = TRUE)
cloud %>%
with(wordcloud(word, n, min.freq = 15, max.words = 500, colors = brewer.pal(8, "Dark2")), scale = c(8,.3), per.rot = 0.4)
1-pubmed.mineR包所需要的格式是从pubmed官网导出的格式,因为不直接通过网络,这样的优势在于可以正常使用pubmed官方所提供的用于搜索的API网页,检索式DIY范围大。
2-下载之后的数据被readabs()函数读取成为在R里面可以被识别的对象,可以直接@提取信息,通过SentenceToken()函数比@符号更细致地选择我们所需要的信息。通过sendabs()函数可以将readabs()函数的读取结果,直接输出整理成为新的格式txt格式并且保存,也就是帮助整理了一下文件格式。
3-在readabs()函数中我们可以批量获得PMID,然后pubtator_function()可以通过PMID获取如 'Gene’, ’Chemical’, ’Disease’ 等生物医学研究中常常用到的信息,按照网页浏览的习惯,原本是需要我们一个网页一个网页看的,但通过这个R包可以直接获取到目标信息,并且对目标信息有一个大致的了解。
4-可能是更倾向于字符处理和提取的缘故,相比于easypubmed,该包获取的pubmed txt文件稍显粗略。如果有想要按照文章名称批量详细阅读数据的需求的话,个人感觉easypubmed其实更好用一些。
5-RISmed包还要再看看,感觉其特长在可视化。
感谢生信技能树团队,感谢曾老师提供的公众号文章和练习的素材。
https://mp.weixin.qq.com/s/a6XfKFXzVWHd52TKeCDrIQ