zd200572的个人博客分享 http://blog.sciencenet.cn/u/zd200572

博文

使用R语言读取pubmed存入mysql数据库

已有 3766 次阅读 2018-3-14 13:40 |个人分类:biology|系统分类:科研笔记| pubmed

 

最近,在科研狗网站看到了一个有趣的项目,使用R语言读取pubmed存入mysql数据库,之前报名没有报上,还是决心要跟着做一下,无奈R语言水平比较渣渣,只能复制别人的代码来用,悲剧的是,原代码复制过来还是报错,来一个小目标,把这段代码运行起来。花了两三天的功夫,终于实现了目标。

原代码参考自R科研作图学习小组组长:木萱小主的作业:  http://group.keyangou.com/RGraph/topic/952

这个项目的难点在于要用R语言和MySQL数据库,两者都是初学,加大了难度,搞不定R函数。首先这个任务的准备工作是安装数据库和phpmyadmin(当然这只是一个选项,还有好多的图形数据库管理软件,据说大牛都是命令行操作的),这个不表。

主要步骤就是第一,用你要查询的关键词或条件获得pubmed-id,标题和摘要,然后格式化一下,放入数据库。代码如下:

01library(RISmed)
02cell2017<-EUtilsSummary("cell[TA] AND 2017[DP]")
03data<-QueryId(cell2017)
04data #获得全部的ID
05pmids<-paste(data,sep = "",collapse=",")
06#pmids
07library(RMySQL)
08library(xml2)
09library(httr)
10postFetchUrl<-'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?'
11r2 <- POST(postFetchUrl,body = list(db='pubmed',id=pmids,retmode='xml'))
12stop_for_status(r2)
13data2=content(r2, "parsed")
14article=xml_children(data2)
15count=length(article)
16cnt=1
17a<-list()
18b<-list()
19while(cnt<=count){title=xml_find_first(article[cnt],".//ArticleTitle")
20abstract=xml_find_first(article[cnt],".//AbstractText")
21#write.table(xml_text(title),file='a.txt', row.names=F,quote=F,append=T)
22a<-c(a,xml_text(title))
23#write.table(print(xml_text(abstract)),file='b.txt',row.names=F,quote=F,append=T)
24b<-c(b,xml_text(abstract))
25#break
26cnt = cnt + 1
27}
28pmid<-data
29title=a
30abstract<-b
31title = gsub("'","",title)
32abstract = gsub("'","",abstract)
33article<-data.frame(pmid,title,abstract)
34con<-dbConnect(MySQL(),host="127.0.0.1",dbname="rdb",user="root",password="")
35dbSendQuery(con,'SET NAMES utf8')
36dbWriteTable(con,"article",article,append=TRUE)
37dbDisconnect(con)

用另外一种解决方法,不用RISmed包,用httpr包,也能运行,但是到第6行就会报错,只好作罢。不管怎样,上边那个方法是最简单的,用做实际应用足够了。

这里还要补充一下,如果边数据库次数太多而没有关闭会报错,有个哥们定义的函数很有用,一起放这。

01#数据库连接删除函数,每个任务之前最好先清理所有的连接,调用此函数就可以
02killDbConnections <- function () {
03  all_cons <- dbListConnections(MySQL())
04  print(all_cons)
05  for(con in all_cons)
06      dbDisconnect(con)
07  print(paste(length(all_cons), " connections killed."))
08}
09
10killDbConnections()

代码github地址:https://github.com/zd200572/R/blob/master/科研狗

我的博客:https://jiawen.zd200572.comwww.zd200572.com

发现在百度上搜不到,看科学网搜索百优化好,放这试试。

欢迎交流,推销勿扰!

微博@zd200572

微信:Zhaoink                                 个人公众号:科技记者

2g内存用户的福音,推荐个小内存占用的浏览器                 




https://wap.sciencenet.cn/blog-623545-1103863.html

上一篇:uBiome肠道微生物报告学习
下一篇:ASA芯片的探索
收藏 IP: 222.95.12.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-29 02:04

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部