├── #linshi5-WebCrawlerCNKIjournal.R ├── README.md ├── demo014_JournalInfo.R ├── journal2018.csv ├── journal2022.csv ├── journal2022category.csv ├── journalchinese.csv ├── msyh.ttc ├── server.R ├── timeconsuming.png ├── ui.R └── www ├── gaba.png └── pmgh.ico /#linshi5-WebCrawlerCNKIjournal.R: -------------------------------------------------------------------------------- 1 | library(XML) 2 | library(RSelenium) 3 | library(rvest) 4 | library(stringr) 5 | library(data.table) 6 | library(magrittr) 7 | library(RCurl) 8 | library(rlist) 9 | 10 | 11 | ########## 统计信息部分 ########## 12 | # 爬虫环境配置,安装java环境,下载selenium放在如下所用目录 13 | system("java -jar d:/selenium-server-standalone-3.12.0.jar", wait=F, invisible=T, minimized=T) 14 | 15 | # 关闭无头模式,chrome和chromedriver版本要一致, 16 | # chromedriver下载地址:http://npm.taobao.org/mirrors/chromedriver/ 17 | eCaps <- list(phantomjs.page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0") 18 | remDr <- remoteDriver(browserName = "chrome", extraCapabilities = eCaps) 19 | remDr$open() 20 | url <- 'https://navi.cnki.net/knavi/all/index?uniplatform=NZKPT#' 21 | remDr$navigate(url) 22 | # 注意,在浏览器窗口中设置显示为表格模式,并手动切换期刊分类,每个分类模式下运行如下部分 23 | jtable <- data.table() 24 | while (T) { 25 | opage <- remDr$getPageSource()[[1]] %>% htmlParse() 26 | jname <- xpathSApply(opage, "//span[@class='tab_1']//@title") 27 | jurl <- xpathSApply(opage, "//span[@class='tab_1']//@href") %>% 28 | str_extract("eid=\\w+") %>% 29 | str_remove("eid=") %>% 30 | paste0("https://navi.cnki.net/knavi/journals/",.,"/detail?uniplatform=NZKPT") 31 | jorganizer <- xpathSApply(opage, "//span[@class='tab_2']", xmlValue) %>% 32 | str_remove_all("\n") %>% 33 | str_trim() %>% 34 | .[-1] 35 | jcif <- xpathSApply(opage, "//span[@class='tab_3']", xmlValue) %>% 36 | str_remove_all("\n") %>% 37 | str_trim() %>% 38 | .[-1] 39 | jsif <- xpathSApply(opage, "//span[@class='tab_4']", xmlValue) %>% 40 | str_remove_all("\n") %>% 41 | str_trim() %>% 42 | .[-1] 43 | jct <- xpathSApply(opage, "//span[@class='tab_5']", xmlValue) %>% 44 | str_remove_all("\n") %>% 45 | str_trim() %>% 46 | .[-1] 47 | 48 | tjtable <- data.table(name = jname, 49 | organizer = jorganizer, 50 | cif = jcif, 51 | sif = jsif, 52 | ct = jct, 53 | jurl = jurl) 54 | 55 | jtable <- rbind(jtable, tjtable) 56 | 57 | # 找到下一页的按钮并点击它,若没有,会出错,说明这一系列爬完 58 | nextpage <- remDr$findElement(using = "xpath", value = "//a[@class='next']") 59 | nextpage$clickElement() 60 | Sys.sleep(runif(1, min=1, max = 2)) 61 | } 62 | # jtable为爬取的数据,数据处理部分省略(注意同一期刊可能归属不同类别,汇总后需剔除重复数据) 63 | 64 | 65 | ########## 详细信息部分 ########## 66 | # 配置爬虫环境 67 | system("java -jar d:/selenium-server-standalone-3.12.0.jar", wait=F, invisible=T, minimized=T) 68 | # 使用非无头模式,无头模式不稳定有时无页面内容? 69 | eCaps <- list(phantomjs.page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0") 70 | # 使用chromedriver无头模式,chrome和chromedriver版本要一致, 71 | # eCaps = list(chromeOptions = list( 72 | # args = c('--headless', 73 | # '--no-sandbox', 74 | # '--disable-dev-shm-usage', 75 | # '--disable-blink-features=AutomationControlled', 76 | # 'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' 77 | # ) 78 | # )) 79 | remDr <- remoteDriver(browserName = "chrome", extraCapabilities = eCaps) 80 | remDr$open() 81 | 82 | # 整理要爬取的页面 83 | detj <- fread("./jisummary.csv") 84 | detj <- fread("./app/Journal/备份/jisummary.csv") 85 | 86 | urlall <- detj$jurl 87 | 88 | jiall <- data.table() 89 | eiall <- data.table() 90 | 91 | testurl <- urlall 92 | # testurl <- urlall[-(1:11764)] 93 | # testurl <- urlall[sample(1:12081, 10, replace = F)] 94 | 95 | 96 | system.time({ 97 | n <- 1 98 | for(turl in testurl){ 99 | tsta <- Sys.time() 100 | # url <- 'https://navi.cnki.net/knavi/journals/YNDZ/detail?uniplatform=NZKPT' 101 | remDr$navigate(turl) 102 | opage <- remDr$getPageSource()[[1]] %>% htmlParse() 103 | 104 | # 基本信息 105 | na1 <- xpathApply(opage, "//h3[@class='titbox titbox1']", xmlValue) %>% str_trim() 106 | na2 <- xpathApply(opage, "//dd[@class='infobox']/p", xmlValue)[[1]] 107 | 108 | biitem <- xpathSApply(opage, "//ul[@id='JournalBaseInfo']/li//label", xmlValue) 109 | bivalue <- xpathSApply(opage, "//ul[@id='JournalBaseInfo']/li//span", xmlValue) 110 | bi <- data.table(item = biitem, value = bivalue) 111 | 112 | # 发行信息 113 | piitem <- xpathSApply(opage, "//ul[@id='publishInfo']/li//label", xmlValue) 114 | pivalue <- xpathSApply(opage, "//ul[@id='publishInfo']/li//span", xmlValue) 115 | pi <- data.table(item = piitem, value = pivalue) 116 | 117 | # 评价信息 118 | eiitem <- xpathSApply(opage, "//p[@class='journalType journalType2']//span", xmlValue) %>% 119 | str_trim() %>% 120 | paste0(collapse = "/") 121 | tei <- xpathSApply(opage, "//ul[@id='evaluateInfo']//p[@class='database']", xmlValue) %>% 122 | str_split(" ") %>% 123 | list.rbind() %>% 124 | as.data.table() 125 | 126 | # 信息汇总 127 | bis <- data.table(item = c("出版周期","ISSN","CN","出版地","语种","开本","邮发代号","创刊时间","目前状态","曾用刊名")) 128 | pis <- data.table(item = c("专辑名称","专题名称","出版文献量","总下载次数","总被引次数")) 129 | if(nrow(bi) == 0) {bi <- data.table(item=NA, value=NA); Sys.sleep(10)} 130 | if(nrow(pi) == 0) {pi <- data.table(item=NA, value=NA); Sys.sleep(10)} 131 | 132 | bic <- bi[bis, on = "item"] 133 | pic <- pi[pis, on = "item"] 134 | 135 | if(length(na1) == 0) na1 <- NA_character_ else na1 <- na1 136 | if(length(na2) == 0) na2 <- NA_character_ else na2 <- na2 137 | if(length(eiitem) == 0) ei <- NA_character_ else ei <- eiitem 138 | 139 | tji <- data.table( 140 | name1 = na1, 141 | name2 = na2, 142 | oldname = bic[item == "曾用刊名", value], 143 | frequency = bic[item == "出版周期", value], 144 | ISSN = bic[item == "ISSN", value], 145 | CN = bic[item == "CN", value], 146 | place = bic[item == "出版地", value], 147 | language = bic[item == "语种", value], 148 | format = bic[item == "开本", value], 149 | postalcode = bic[item == "邮发代号", value], 150 | firstissue = bic[item == "创刊时间", value], 151 | status = bic[item == "目前状态", value], 152 | category1 = pic[item == "专辑名称", value], 153 | category2 = pic[item == "专题名称", value], 154 | publishNO = str_extract(pic[item == "出版文献量", value], "\\d+"), 155 | downNO = str_extract(pic[item == "总下载次数", value], "\\d+"), 156 | citeNO = str_extract(pic[item == "总被引次数", value], "\\d+"), 157 | evaluate = ei 158 | ) 159 | 160 | jiall <- rbind(jiall, tji) 161 | eiall <- rbind(eiall, tei) 162 | 163 | curn <- n 164 | alln <- length(testurl) 165 | curc <- n/alln*100 166 | tend <- Sys.time() 167 | tspe <- as.numeric(tend-tsta) 168 | message(sprintf("当前页【%d】,已完成【%.2f%%】,剩余页【%d】,剩余【%.2f%%】,当前速度【%.4f sec/page】,剩余【%.0f sec, i.e. %.2 fmin】", 169 | n, curc, alln-n, 100-curc, tspe, (alln-n)*tspe, (alln-n)*tspe/60)) 170 | n <- n+1 171 | Sys.sleep(runif(1, min = 0.1, max = 0.5)) 172 | } 173 | }) 174 | 175 | # 经过去重,剩余11373种期刊, 详细数据处理过程略 176 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Journal 2 | 3 | 学术期刊质量查询系统 (shinyapp在线版:[Journal](http://lcpmgh.com/Journal)) 4 | 5 | 收集中英文学术期刊信息,制作具有交互界面的查询系统,直观了解不同学术期刊的影响因子、分区、收录等信息,用于读文献时判断论文质量、投稿时选择目标期刊。此外本程序采用R语言编程,涉及爬虫和shiny等功能,可作为案例学习相关编程技能。 6 | 7 | 关于项目数据:中文期刊信息和2018年英文期刊信息采用R爬虫获取,分别源自知网和LetPub;2022JCR数据源自网络下载。 8 | 9 | **所有代码和数据,切勿用于商业用途;适度使用爬虫工具,小心违法!** 10 | 11 | ===== 2022.08.13更新===== 12 | 13 | + 增加了选择期刊以进行对比的页面,使用时注意: 14 | 15 | + 在1~3页浏览时,单击表格中的期刊,可进行选择,选择结果将展示在第4页 16 | 17 | + 1~3页侧边栏,是对数据进行刷新,会重置第四页选择的结果,而search框中的选择,不改变数据,因此不会重置结果 18 | 19 | + 第四页仅做展示,没有可修改的参数项,为了期刊间对比,默认表格一页展示100条 20 | 21 | + 更改了原始数据journal2018.csv和journalchinese.csv中的url列,利用html语法定义为链接,则表格展示时仅出现“Link”字样,从而减小表格的占用的宽度 22 | 23 | ===== 2022.07.16更新===== 24 | 25 | 增加了中文期刊的质量信息 26 | 27 | 对于中文爬虫,有几点需要注意: 28 | 29 | + 此次爬虫代码文件为#linshi5-WebCrawlerCNKIjournal.R 30 | + 本次爬虫采用selenium,所用R语言爬虫技巧可以应付绝大部分使用场景。 31 | + 对于爬虫环境搭建,主要包括Java环境、selenium-server、chromedriver三部分,网上相应教程较多。 32 | + Chromedriver无头模式不稳定,常有页面信息无反馈的情况,频率约2/1000,若是否用无头模式速度差别不大,则推荐不用headless。 33 | 34 | ===== 2022.07.13更新===== 35 | 36 | 更新了JCR2022影响因子数据,由于该数据与LetPub的条目差异较大,因此并未删除原数据,两组数据同时展示。 37 | 38 | ===== 2022.02.30更新 ===== 39 | 40 | 修改了shinyapp,并将其部署在我自己的阿里云上,欢迎访问:[Journal](http://lcpmgh.com/Journal),再也不用受制于shinyapps.io了。但是这个数据还是2018年的影响因子,实际上已经过时了,仅做参考吧,有时间再去更新数据。 41 | 42 | ===== 2019.03.12更新 ===== 43 | 用了几天Excel版,筛选和排序太过繁琐,查询起来也让人头疼,因此做了个shinyapp解决以上问题,此次将ui.r和server.r上传在23_journal_info文件夹中。 44 | 45 | 对于github上的网络版,配置好环境,在R中通过```shiny::runGitHub("Journal","lcpmgh",subdir="23_journal_info")```打开。本来想部署在shinyapps.io上,但是有中文乱码的bug,这里做了一个大幅度阉割的英文版[24_journal_info_en](https://lcpmgh.shinyapps.io/24_journal_info_en/),就看看就行,连学科分类和期刊分区的筛选都没办法实现,等有机会把数据译成全英文的,再部署完整版。 46 | 47 | 本地使用时,建议将r加入环境变量,建立bat文件,代码类似```Rscript -e "library(shiny);runApp('D:/23_journal_info',launch.browser=T)"```(注意server.r中默认读取github上的数据),这样只需运行bat文件,省的每次都打开R,体验上更类似于一款独立的软件。 48 | 49 | ===== 以下为原readme内容 ===== 50 | 起因是想找一下优质期刊的论文看,然而查询中科院jcr分区太麻烦了,有个网站LetPub还能用,但是在我看来也不好用,看了下这个网站超级简陋,没有任何的反爬虫机制,还不如豆瓣电影,所以就写了个代码跑一下、 51 | 52 | ### **几个说明:** 53 | 54 | 1. 此次上传的内容包括,R爬虫脚本demo014_JournalInfo.r,以及抓取到的数据文件**Journal.csv**,**Journa_info.xlsx**,两个文件内容相同,都是LetPub全站的10235个期刊的23项信息。 55 | 2. 文件Journal.csv是代码直接输出的结果,Journa_info.xlsx是为了方便使用,在Excel中对csv文件进行转换,然后简单美化后的结果(R直接写入Excel要调用Java,效率太低了)。 56 | 3. 由于网站排版不是很规范,而且样本量太大,具体信息可能有误,参考时请慎重,若对某一项有疑问,可根据对应的Url核实,Url会连接到LetPub上该期刊的详情页面。 57 | 4. 特别说明,网络爬虫很容易触犯法律,因此 **本项目仅供学习交流,切勿作商业用途,由此造成的一切后果请自行承担!** 58 | 59 | 另外,之前电脑刚好重装系统,于是所有的东西都需要重新配置,在此也说明下此次R爬虫的准备工作: 60 | 61 | 1. r和rstudio,目前r v3.5.2,rstudio v1.1.463,r3.5版不能用3.4的旧包,所有都要重装,此版本rstudio不时会有bug,重启下就行了 62 | 2. jdk v11.0.2,windows10专业版1809,之前1703不能装最新的jdk,这次1809又不能用之前的jdk8,另外1809的桌面新建功能卡顿,貌似目前还没有解决办法 63 | 3. phantomjs和chromedriver,去网上下载,加入环境变量中使用,由于此次爬虫过于简单,用phantomjs就行,并且因为不显示内容,速度比chrome要快不少 64 | 4. selenium server,v2.50.1,一个java的脚本,高版本的不支持phantomjs了,这个还能用 65 | 5. 此次所用r包,都位于CRAN上,直接装 66 | 67 | 此次运行只记录了第二个函数的时间,耗时两个多小时…… 68 | ![函数crawler_jcr_2运行时间](https://github.com/lcpmgh/Journal/blob/master/timeconsuming.png "函数crawler_jcr_2运行时间") 69 | -------------------------------------------------------------------------------- /demo014_JournalInfo.R: -------------------------------------------------------------------------------- 1 | # letput journal 2 | # 2019-03-08 3 | 4 | library(XML) 5 | library(RSelenium) 6 | library(rvest) 7 | library(stringr) 8 | library(data.table) 9 | library(magrittr) 10 | library(xlsx) 11 | 12 | ####################========== PART 1 Create the crawler function ==========#################### 13 | crawler_jcr_1 <- function(){ 14 | # Do not read string as a factor! 15 | options(stringsAsFactors=F) 16 | # load selenium service 17 | system("java -jar d:/selenium-server-standalone-2.50.1.jar", wait=F, invisible=T, minimized=T) 18 | # Configure the browser 19 | eCap <- list(phantomjs.page.settings.userAgent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0") 20 | # remDr <- remoteDriver(browserName="chrome", extraCapabilities=eCap) 21 | remDr <- remoteDriver(browserName="phantomjs", extraCapabilities=eCap) 22 | # Open and parse the initial page 23 | remDr$open() 24 | u <- 'https://www.letpub.com.cn/index.php?page=journalapp&fieldtag=&firstletter=¤tpage=1#journallisttable' 25 | remDr$navigate(u) 26 | opage <- remDr$getPageSource()[[1]] %>% read_html(encoding ="UTF-8") %>% htmlParse(encoding='UTF-8') 27 | nurl <- xpathSApply(opage,"//form[@name='jumppageform']",xmlValue) %>% str_extract('\\d+') %>% as.numeric() %>% 1:. 28 | aurl <- paste0('https://www.letpub.com.cn/index.php?page=journalapp&fieldtag=&firstletter=¤tpage=',nurl,'#journallisttable') 29 | tn <- 1 30 | an <- length(aurl) 31 | atabl1 <- NULL 32 | tablcol <- c('ISSN','Journal','IF2018','Division','Category','Discipline','Is_SCI','OA','Employment','Refereeing','View') 33 | for(turl in aurl){ 34 | remDr$navigate(turl) 35 | tpage <- remDr$getPageSource()[[1]] %>% read_html(encoding ="UTF-8") %>% htmlParse(encoding='UTF-8') 36 | ttabl <- xpathSApply(tpage,"//table[@class='table_yjfx']")[[2]] %>% readHTMLTable(header=T) %>% set_colnames(.[1,]) %>% data.table() %>% .[c(-1,-.N),-11] 37 | names(ttabl) <- tablcol 38 | tabbr <- ttabl$Journal 39 | ttabl$Journal <- xpathSApply(tpage,"//table[@class='table_yjfx']/tbody/tr/td/a[@target='_blank']",xmlValue) %>% .[as.logical(1:length(.)%%2)] 40 | ttabl$Abbr_Name <- str_remove(tabbr,ttabl$Journal) 41 | ttabl$Url <- xpathSApply(tpage,"//table[@class='table_yjfx']/tbody/tr/td/a[@target='_blank']/@href") %>% str_remove('./') %>% paste0('https://www.letpub.com.cn/',.) %>% .[as.logical(1:length(.)%%2)] 42 | ttabl[Is_SCI=='SCISCIE',Is_SCI:='SCI/SCIE'] 43 | atabl1 <- rbind(atabl1,ttabl) 44 | cat(sprintf("Summary page, [%d] pages has been crawled, a total of %d, [%.4f%%] completed",tn,an,tn/an*100),'\n') 45 | tn <- tn+1 46 | } 47 | return(atabl1) 48 | } 49 | crawler_jcr_2 <- function(atabl1){ 50 | # for detail page 51 | options(stringsAsFactors=F) 52 | system("java -jar d:/selenium-server-standalone-2.50.1.jar", wait=F, invisible=T, minimized=T) 53 | eCap <- list(phantomjs.page.settings.userAgent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0") 54 | # remDr <- remoteDriver(browserName="chrome", extraCapabilities=eCap) 55 | remDr <- remoteDriver(browserName="phantomjs", extraCapabilities=eCap) 56 | remDr$open() 57 | ttabl2 <- data.table(Self_citing=NA, 58 | IF_5year=NA, 59 | H_Index=NA, 60 | CiteScore=NA, 61 | Region=NA, 62 | Publication_Cycle=NA, 63 | Publication_year=NA, 64 | Article_NO._per_year=NA, 65 | IsTop=NA, 66 | IsReview=NA) 67 | atabl2 <- ttabl2 68 | tn <- 1 69 | an <- length(atabl1$Url) 70 | for(tdurl in atabl1$Url){ 71 | remDr$navigate(tdurl) 72 | dpage <- remDr$getPageSource()[[1]] %>% read_html(encoding ="UTF-8") %>% htmlParse(encoding='UTF-8') 73 | ddpage_val <- xpathSApply(dpage,"//table[@class='table_yjfx']/tbody/tr",xmlValue) 74 | ddpage_xml <- xpathSApply(dpage,"//table[@class='table_yjfx']/tbody/tr") 75 | try({ttabl2$Self_citing <- ddpage_val[str_detect(ddpage_val,'2017-2018自引率')] %>% str_extract("\\n\\d.+\\n") %>% str_trim() %>% str_remove("\\%") %>% as.numeric()},silent=T) 76 | try({ttabl2$IF_5year <- ddpage_val[str_detect(ddpage_val,'五年IF')] %>% str_extract("\\n\\d.+\\n") %>% str_trim() %>% as.numeric()},silent=T) 77 | try({ttabl2$H_Index <- ddpage_val[str_detect(ddpage_val,'h-index')] %>% str_extract("\\n\\d.+\\n") %>% str_trim() %>% as.numeric()},silent=T) 78 | try({ttabl2$CiteScore <- ddpage_val[str_detect(ddpage_val,'CiteScore')] %>% str_extract("排名\\n.+\\n") %>% str_extract("\\d.+\\d$") %>% as.numeric()},silent=T) 79 | try({ttabl2$Region <- ddpage_val[str_detect(ddpage_val,'出版国家或地区')] %>% str_extract("\\n.+\\n") %>% str_trim()},silent=T) 80 | try({ttabl2$Publication_Cycle <- ddpage_val[str_detect(ddpage_val,'出版周期')] %>% str_extract("\\n.+\\n") %>% str_trim()},silent=T) 81 | try({ttabl2$Publication_year <- ddpage_val[str_detect(ddpage_val,'出版年份')] %>% str_extract("\\n.+\\n") %>% str_trim() %>% as.numeric()},silent=T) 82 | try({ttabl2$Article_NO._per_year <- ddpage_val[str_detect(ddpage_val,'年文章数')] %>% str_extract("\\n\\d+") %>% str_trim()},silent=T) 83 | try({ttabl2$IsTop <- ddpage_xml[str_detect(ddpage_val,'中科院SCI期刊分区')][[1]] %>% readHTMLTable(header=T) %>% .[1,'Top期刊']},silent=T) 84 | try({ttabl2$IsReview <- ddpage_xml[str_detect(ddpage_val,'中科院SCI期刊分区')][[1]] %>% readHTMLTable(header=T) %>% .[1,'综述期刊']},silent=T) 85 | if(is.null(ttabl2$Self_citing)) ttabl2$Self_citing <- NA 86 | if(is.null(ttabl2$IF_5year)) ttabl2$IF_5year <- NA 87 | if(is.null(ttabl2$H_Index)) ttabl2$H_Index <- NA 88 | if(is.null(ttabl2$CiteScore)) ttabl2$CiteScore <- NA 89 | if(is.null(ttabl2$Region)) ttabl2$Region <- NA 90 | if(is.null(ttabl2$Publication_Cycle)) ttabl2$Publication_Cycle <- NA 91 | if(is.null(ttabl2$Publication_year)) ttabl2$Publication_year <- NA 92 | if(is.null(ttabl2$Article_NO._per_year)) ttabl2$Article_NO._last_year <- NA 93 | if(is.null(ttabl2$IsTop)) ttabl2$IsTop <- NA 94 | if(is.null(ttabl2$IsReview)) ttabl2$IsReview <- NA 95 | atabl2 <- rbind(atabl2,ttabl2) 96 | cat(sprintf("Details page,[%d] pages has been crawled, a total of %d, [%.4f%%] completed",tn,an,tn/an*100),'\n') 97 | tn <- tn+1 98 | } 99 | atabl2 <- atabl2[-1,] 100 | atabl <- cbind(atabl1,atabl2) 101 | return(atabl) 102 | } 103 | 104 | 105 | ####################========== PART 2 Run crawler function and store the data ==========#################### 106 | dataset <- crawler_jcr_1() 107 | write.csv(dataset, 'dataset.csv', row.names=F) 108 | system.time({gds <- crawler_jcr_2(dataset[])}) 109 | # Colnames sort 110 | cona <- c("ISSN","Journal","Abbr_Name","Is_SCI","IF2018","IF_5year","Self_citing","H_Index","CiteScore","Division","Category", 111 | "Discipline","IsTop","IsReview","Publication_Cycle","Article_NO._per_year","Publication_year","Region","OA", 112 | "Employment","Refereeing","View","Url") 113 | gds <- gds[,..cona] 114 | write.csv(gds,'Journal.csv',row.names=F) 115 | # write.xlsx(gds,'Journal.xlsx',row.names=F) #Inefficiency 116 | -------------------------------------------------------------------------------- /journal2022category.csv: -------------------------------------------------------------------------------- 1 | cate 2 | ONCOLOGY 3 | MEDICINE 4 | GENERAL 5 | INTERNAL 6 | CELL BIOLOGY 7 | PHARMACOLOGY 8 | PHARMACY 9 | BIOTECHNOLOGY 10 | APPLIED MICROBIOLOGY 11 | IMMUNOLOGY 12 | RESPIRATORY SYSTEM 13 | CRITICAL CARE MEDICINE 14 | RESEARCH 15 | EXPERIMENTAL 16 | BIOCHEMISTRY 17 | MOLECULAR BIOLOGY 18 | INFECTIOUS DISEASES 19 | MICROBIOLOGY 20 | PSYCHIATRY 21 | NANOSCIENCE 22 | NANOTECHNOLOGY 23 | MATERIALS SCIENCE 24 | MULTIDISCIPLINARY 25 | GASTROENTEROLOGY 26 | HEPATOLOGY 27 | PUBLIC 28 | ENVIRONMENTAL 29 | OCCUPATIONAL HEALTH 30 | CHEMISTRY 31 | MULTIDISCIPLINARY SCIENCES 32 | ENERGY 33 | FUELS 34 | CLINICAL NEUROLOGY 35 | GENETICS 36 | HEREDITY 37 | PSYCHOLOGY 38 | PHYSICS 39 | CARDIAC 40 | CARDIOVASCULAR SYSTEMS 41 | BIOCHEMICAL RESEARCH METHODS 42 | PHYSICAL 43 | APPLIED 44 | CONDENSED MATTER 45 | ENDOCRINOLOGY 46 | METABOLISM 47 | PHYSIOLOGY 48 | PARTICLES 49 | FIELDS 50 | UROLOGY 51 | NEPHROLOGY 52 | PERIPHERAL VASCULAR DISEASE 53 | OPTICS 54 | ENGINEERING 55 | CHEMICAL 56 | ENVIRONMENTAL SCIENCES 57 | NEUROSCIENCES 58 | PEDIATRICS 59 | TRANSPORTATION 60 | ASTRONOMY 61 | ASTROPHYSICS 62 | GEOSCIENCES 63 | MEDICAL INFORMATICS 64 | RHEUMATOLOGY 65 | THERMODYNAMICS 66 | MECHANICAL 67 | TELECOMMUNICATIONS 68 | COMPUTER SCIENCE 69 | INFORMATION SYSTEMS 70 | ELECTRICAL 71 | ELECTRONIC 72 | ELECTROCHEMISTRY 73 | PATHOLOGY 74 | VIROLOGY 75 | PARASITOLOGY 76 | POLYMER SCIENCE 77 | HEMATOLOGY 78 | BIOMEDICAL 79 | RADIOLOGY 80 | NUCLEAR MEDICINE 81 | MEDICAL IMAGING 82 | ENVIRONMENTAL STUDIES 83 | METEOROLOGY 84 | ATMOSPHERIC SCIENCES 85 | PLANT SCIENCES 86 | ROBOTICS 87 | GREEN 88 | SUSTAINABLE SCIENCE 89 | TECHNOLOGY 90 | GEOGRAPHY 91 | INTERDISCIPLINARY APPLICATIONS 92 | ARTIFICIAL INTELLIGENCE 93 | MYCOLOGY 94 | MECHANICS 95 | FLUIDS 96 | PLASMAS 97 | CELL 98 | TISSUE ENGINEERING 99 | GEOCHEMISTRY 100 | GEOPHYSICS 101 | DENTISTRY 102 | ORAL SURGERY 103 | INORGANIC 104 | NUCLEAR 105 | BEHAVIORAL SCIENCES 106 | ENTOMOLOGY 107 | CLINICAL 108 | BIOLOGICAL 109 | EVOLUTIONARY BIOLOGY 110 | ECOLOGY 111 | FOOD SCIENCE 112 | BIOPHYSICS 113 | OPHTHALMOLOGY 114 | MANAGEMENT 115 | BUSINESS 116 | CYBERNETICS 117 | AUTOMATION 118 | CONTROL SYSTEMS 119 | HARDWARE 120 | ARCHITECTURE 121 | SOFTWARE ENGINEERING 122 | SURGERY 123 | ZOOLOGY 124 | INTERNATIONAL RELATIONS 125 | NURSING 126 | INTEGRATIVE 127 | COMPLEMENTARY MEDICINE 128 | OBSTETRICS 129 | GYNECOLOGY 130 | VETERINARY SCIENCES 131 | AREA STUDIES 132 | POLITICAL SCIENCE 133 | STATISTICS 134 | PROBABILITY 135 | FISHERIES 136 | MARINE 137 | FRESHWATER BIOLOGY 138 | DERMATOLOGY 139 | SOCIOLOGY 140 | SOCIAL SCIENCES 141 | DEMOGRAPHY 142 | LANGUAGE 143 | LINGUISTICS 144 | MATHEMATICS 145 | LAW 146 | AEROSPACE 147 | AGRICULTURAL ENGINEERING 148 | ECONOMICS 149 | MATHEMATICAL METHODS 150 | FINANCE 151 | EDUCATION 152 | EDUCATIONAL RESEARCH 153 | CERAMICS 154 | OPERATIONS RESEARCH 155 | MANAGEMENT SCIENCE 156 | INDUSTRIAL 157 | PHILOSOPHY 158 | LOGIC 159 | CRIMINOLOGY 160 | PENOLOGY 161 | PUBLIC ADMINISTRATION 162 | ANTHROPOLOGY 163 | THEORY 164 | METHODS 165 | LEGAL 166 | MATHEMATICAL 167 | HORTICULTURE 168 | HUMANITIES 169 | INFORMATION SCIENCE 170 | LIBRARY SCIENCE 171 | DEVELOPMENTAL 172 | ANATOMY 173 | MORPHOLOGY 174 | HEALTH CARE SCIENCES 175 | SERVICES 176 | COMPUTATIONAL BIOLOGY 177 | GEOLOGY 178 | HISTORY 179 | PHILOSOPHY OF SCIENCE 180 | ASIAN STUDIES 181 | SPECTROSCOPY 182 | ATOMIC 183 | MOLECULAR 184 | INSTRUMENTS 185 | INSTRUMENTATION 186 | ETHICS 187 | ORNITHOLOGY 188 | METALLURGY 189 | METALLURGICAL ENGINEERING 190 | QUANTUM SCIENCE 191 | SOCIAL WORK 192 | ANALYTICAL 193 | URBAN STUDIES 194 | HISTORY OF SOCIAL SCIENCES 195 | FAMILY STUDIES 196 | EDUCATIONAL 197 | SOIL SCIENCE 198 | CRYSTALLOGRAPHY 199 | ORGANIC 200 | SOCIAL 201 | CONSTRUCTION 202 | BUILDING TECHNOLOGY 203 | CIVIL 204 | MEDICAL LABORATORY TECHNOLOGY 205 | CHARACTERIZATION 206 | TESTING 207 | BIOLOGY 208 | OCEANOGRAPHY 209 | MUSIC 210 | TROPICAL MEDICINE 211 | COMMUNICATION 212 | WOMENS STUDIES 213 | NUTRITION 214 | DIETETICS 215 | REPRODUCTIVE BIOLOGY 216 | CULTURAL STUDIES 217 | FORESTRY 218 | REHABILITATION 219 | REMOTE SENSING 220 | ACOUSTICS 221 | GERIATRICS 222 | GERONTOLOGY 223 | HEALTH POLICY 224 | ANESTHESIOLOGY 225 | TOXICOLOGY 226 | SCIENTIFIC DISCIPLINES 227 | AGRONOMY 228 | DEVELOPMENT STUDIES 229 | HOSPITALITY 230 | LEISURE 231 | SPORT 232 | TOURISM 233 | COMPOSITES 234 | MEDICINAL 235 | MINING 236 | MINERAL PROCESSING 237 | SUBSTANCE ABUSE 238 | TRANSPORTATION SCIENCE 239 | SPORT SCIENCES 240 | BIOMATERIALS 241 | BIODIVERSITY CONSERVATION 242 | ORTHOPEDICS 243 | DEVELOPMENTAL BIOLOGY 244 | WATER RESOURCES 245 | ALLERGY 246 | NEUROIMAGING 247 | COATINGS 248 | FILMS 249 | AGRICULTURE 250 | RELIGION 251 | NUCLEAR SCIENCE 252 | SPECIAL 253 | INTERDISCIPLINARY 254 | PALEONTOLOGY 255 | PETROLEUM 256 | TEXTILES 257 | DAIRY 258 | ANIMAL SCIENCE 259 | ETHNIC STUDIES 260 | TRANSPLANTATION 261 | SOCIAL ISSUES 262 | MINERALOGY 263 | OTORHINOLARYNGOLOGY 264 | AUDIOLOGY 265 | SPEECH-LANGUAGE PATHOLOGY 266 | INDUSTRIAL RELATIONS 267 | LABOR 268 | GEOLOGICAL 269 | PAPER 270 | WOOD 271 | PSYCHOANALYSIS 272 | LIMNOLOGY 273 | EMERGENCY MEDICINE 274 | OCEAN 275 | ARCHAEOLOGY 276 | LITERATURE 277 | ART 278 | IMAGING SCIENCE 279 | PHOTOGRAPHIC TECHNOLOGY 280 | ERGONOMICS 281 | AGRICULTURAL ECONOMICS 282 | POLICY 283 | MEDICAL ETHICS 284 | PRIMARY HEALTH CARE 285 | MANUFACTURING 286 | ANDROLOGY 287 | FILM 288 | RADIO 289 | TELEVISION 290 | THEATER 291 | MEDIEVAL 292 | RENAISSANCE STUDIES 293 | ROMANCE 294 | LITERARY THEORY 295 | CRITICISM 296 | BRITISH ISLES 297 | AMERICAN 298 | POETRY 299 | LITERARY REVIEWS 300 | GERMAN 301 | DUTCH 302 | SCANDINAVIAN 303 | FOLKLORE 304 | AFRICAN 305 | AUSTRALIAN 306 | CANADIAN 307 | CLASSICS 308 | DANCE 309 | REGIONAL 310 | URBAN PLANNING 311 | SLAVIC 312 | MICROSCOPY 313 | -------------------------------------------------------------------------------- /msyh.ttc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcpmgh/Journal/c80cec49fe70dd7558e9276bd6508f0911955e3d/msyh.ttc -------------------------------------------------------------------------------- /server.R: -------------------------------------------------------------------------------- 1 | ##########===== server =====########## 2 | server <- function(input, output, session) { 3 | #### 0. Preparation #### 4 | 5 | showtext_auto() 6 | font_add("msyh", "./msyh.ttc") 7 | 8 | #### 1. Load dataset #### 9 | jd18 <- fread('./journal2018.csv', stringsAsFactors=F, encoding = "UTF-8") 10 | jd22 <- fread('./journal2022.csv', stringsAsFactors=F, encoding = "UTF-8") 11 | jdch <- fread('./journalchinese.csv', stringsAsFactors=F, encoding = "UTF-8") 12 | 13 | cate22 <- fread("./journal2022category.csv", header = T, sep = ",")$cate 14 | 15 | catech1 <- jdch$category1 %>% unique() %>% str_split(";") %>% unlist() %>% unique() %>% .[order(.)] 16 | catech2 <- jdch$category2 %>% unique() %>% str_split(";") %>% unlist() %>% unique() %>% .[order(.)] 17 | evalch <- jdch$evaluation %>% str_split("/") %>% unlist() %>% unique() %>% .[order(.)] %>% .[-1] %>% append("-") 18 | freqch <- jdch$frequency %>% unique() %>% .[order(.)] %>% .[-1] %>% append("-") 19 | 20 | item18 <- names(jd18) 21 | item22 <- names(jd22) 22 | itemch <- names(jdch) %>% .[-1] 23 | ######################## 24 | #### 2. Sidebar1 #### 25 | output$ui_sidebar1 <- renderUI({ 26 | tagList( 27 | pickerInput(inputId = "inp1_item", 28 | label = "展示条目", 29 | choices = item18, 30 | selected = item18, 31 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), 32 | multiple = TRUE), 33 | h4(strong("属性筛选")), 34 | checkboxGroupButtons(inputId = "inp1_coll", 35 | label = "1.收录情况", 36 | choices = c("SCI", "SCIE", "SCI/SCIE", "无数据"), 37 | status = "primary", 38 | checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon("remove",lib = "glyphicon")), size = 'xs'), 39 | checkboxGroupButtons(inputId = "inp1_divi", 40 | label = "2.中科院分区", 41 | choices = c("1区", "2区", "3区", "4区", "未录"), 42 | status = "primary", 43 | checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon("remove",lib = "glyphicon")), size = 'xs'), 44 | pickerInput(inputId = "inp1_cate", 45 | label = "3.分类", 46 | choices = sort(unique(jd18$Category)), 47 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), multiple = TRUE), 48 | pickerInput(inputId = "inp1_disc", 49 | label = "4.学科", 50 | choices = sort(unique(jd18$Discipline)), 51 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), multiple = TRUE), 52 | checkboxGroupButtons(inputId = "inp1_topj", 53 | label = "5.Top期刊", 54 | choices = c("是", "否", "无数据"), 55 | status = "primary", 56 | checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon("remove",lib = "glyphicon")), size = 'xs'), 57 | checkboxGroupButtons(inputId = "inp1_revi", 58 | label = "6.综述期刊", 59 | choices = c("是", "否", "无数据"), 60 | status = "primary", 61 | checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon("remove",lib = "glyphicon")), size = 'xs'), 62 | pickerInput(inputId = "inp1_freq", 63 | label = "7.出版周期", 64 | choices = sort(unique(jd18$PublicationCycle)), 65 | options = list(`selected-text-format`="count > 3",`actions-box`=TRUE), multiple = TRUE), 66 | pickerInput(inputId = "inp1_loac", 67 | label = "8.出版地区", 68 | choices = sort(unique(jd18$Region)), 69 | options = list(`selected-text-format`="count > 3",`actions-box`=TRUE), multiple = TRUE) 70 | ) 71 | }) 72 | 73 | #### 3. Main1 #### 74 | output$ui_main1 <- renderUI({ 75 | tagList( 76 | h3("英文期刊信息(LetPub 2018年数据)"), 77 | tags$hr(), 78 | DT::dataTableOutput("table1") 79 | )}) 80 | output$table1 <- DT::renderDataTable({ 81 | if(length(input$inp1_item) != 0) ip1_item <- input$inp1_item else ip1_item <- item18 82 | if(length(input$inp1_coll) != 0) ip1_coll <- input$inp1_coll else ip1_coll <- unique(jd18$IsSCI) 83 | if(length(input$inp1_divi) != 0) ip1_divi <- input$inp1_divi else ip1_divi <- unique(jd18$CASRanking) 84 | if(length(input$inp1_cate) != 0) ip1_cate <- input$inp1_cate else ip1_cate <- unique(jd18$Category) 85 | if(length(input$inp1_disc) != 0) ip1_disc <- input$inp1_disc else ip1_disc <- unique(jd18$Discipline) 86 | if(length(input$inp1_topj) != 0) ip1_topj <- input$inp1_topj else ip1_topj <- unique(jd18$IsTop) 87 | if(length(input$inp1_revi) != 0) ip1_revi <- input$inp1_revi else ip1_revi <- unique(jd18$IsReview) 88 | if(length(input$inp1_freq) != 0) ip1_freq <- input$inp1_freq else ip1_freq <- unique(jd18$PublicationCycle) 89 | if(length(input$inp1_loac) != 0) ip1_loac <- input$inp1_loac else ip1_loac <- unique(jd18$Region) 90 | showdt <- jd18[IsSCI %in% ip1_coll & 91 | CASRanking %in% ip1_divi & 92 | Category %in% ip1_cate & 93 | Discipline %in% ip1_disc & 94 | IsTop %in% ip1_topj & 95 | IsReview %in% ip1_revi & 96 | PublicationCycle %in% ip1_freq & 97 | Region %in% ip1_loac,] 98 | session$userData$showdt18 <- showdt 99 | DT::datatable(showdt[, .SD, .SDcols = ip1_item], 100 | escape = FALSE, 101 | options = list(pageLength = 10, autoWidth = TRUE, scrollX = TRUE), 102 | selection = list(mode = "multiple", target = "row")) 103 | }) 104 | 105 | ######################## 106 | #### 4. Sidebar2 #### 107 | output$ui_sidebar2 <- renderUI({ 108 | tagList( 109 | pickerInput(inputId = "inp2_item", 110 | label = "展示条目", 111 | choices = item22, 112 | selected = item22, 113 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), 114 | multiple = TRUE), 115 | h4(strong("属性筛选")), 116 | checkboxGroupButtons(inputId = "inp2_coll", 117 | label = "1.收录情况", 118 | choices = c("SCIE", "SSCI", "AHCI", "ESCI"), 119 | status = "primary", 120 | checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon("remove",lib = "glyphicon")), size = 'xs'), 121 | checkboxGroupButtons(inputId = "inp2_quar", 122 | label = "2.JCR分区", 123 | choices = c("Q1", "Q2", "Q3", "Q4", "N"), 124 | status = "primary", 125 | checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon("remove",lib = "glyphicon")), size = 'xs'), 126 | pickerInput(inputId = "inp2_cate", 127 | label = "3.分类", 128 | choices = sort(cate22), 129 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), multiple = TRUE) 130 | ) 131 | }) 132 | 133 | #### 5. Main2 #### 134 | output$ui_main2 <- renderUI({ 135 | tagList( 136 | h3("英文期刊信息(JCR 2022年数据)"), 137 | tags$hr(), 138 | DT::dataTableOutput("table2") 139 | )}) 140 | output$table2 <- DT::renderDataTable({ 141 | if(length(input$inp2_item) != 0) ip2_item <- input$inp2_item else ip2_item <- item22 142 | if(length(input$inp2_coll) != 0) ip2_coll <- input$inp2_coll else ip2_coll <- c("SCIE", "SSCI", "AHCI", "ESCI") 143 | if(length(input$inp2_quar) != 0) ip2_quar <- input$inp2_quar else ip2_quar <- c("Q1", "Q2", "Q3", "Q4", "N") 144 | if(length(input$inp2_cate) != 0) ip2_cate <- input$inp2_cate else ip2_cate <- cate22 145 | 146 | if(length(ip2_coll) < 4){ 147 | sig1 <- seq(T, nrow(jd22)) 148 | for(i in ip2_coll){ 149 | sig1 <- sig1&str_detect(jd22$collection, i) 150 | } 151 | } else{ 152 | sig1 <- seq(T, nrow(jd22)) 153 | } 154 | 155 | if(length(ip2_cate) < length(cate22)){ 156 | sig2 <- seq(T, nrow(jd22)) 157 | for(i in ip2_cate){ 158 | sig2 <- sig2&str_detect(jd22$category, i) 159 | } 160 | } else{ 161 | sig2 <- seq(T, nrow(jd22)) 162 | } 163 | 164 | showdt <- jd22[sig1&sig2,] %>% .[rank %in% ip2_quar,] 165 | session$userData$showdt22 <- showdt 166 | DT::datatable(showdt[, .SD, .SDcols = ip2_item], 167 | escape = FALSE, 168 | options = list(pageLength = 10, autoWidth = TRUE, scrollX = TRUE), 169 | selection = list(mode = "multiple", target = "row")) 170 | }) 171 | 172 | ######################## 173 | #### 6. Sidebar3 #### 174 | output$ui_sidebar3 <- renderUI({ 175 | tagList( 176 | pickerInput(inputId = "inp3_item", 177 | label = "展示条目", 178 | choices = itemch, 179 | selected = itemch[c(3,6,7,8,10,13,21)], 180 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), 181 | multiple = TRUE), 182 | h4(strong("属性筛选")), 183 | # radioButtons(inputId = "AorO", 184 | # label = "多项属性关系", 185 | # choices = list("OR" = "o", "AND" = "a"), 186 | # inline = T), 187 | pickerInput(inputId = "inp3_cate1", 188 | label = "1.一级分类", 189 | choices = catech1, 190 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), multiple = TRUE), 191 | pickerInput(inputId = "inp3_cate2", 192 | label = "2.二级分类", 193 | choices = catech2, 194 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), multiple = TRUE), 195 | pickerInput(inputId = "inp3_eval", 196 | label = "3.收录情况", 197 | choices = evalch, 198 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), multiple = TRUE), 199 | pickerInput(inputId = "inp3_freq", 200 | label = "4.出版周期", 201 | choices = freqch, 202 | options = list(`selected-text-format` = "count > 3", `actions-box` = TRUE), multiple = TRUE), 203 | checkboxGroupButtons(inputId = "inp3_lang", 204 | label = "5.期刊语言", 205 | choices = c("中文", "英文", "日文", "韩文"), 206 | status = "primary", 207 | checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon("remove",lib = "glyphicon")), size = 'xs'), 208 | checkboxGroupButtons(inputId = "inp3_stat", 209 | label = "6.出版状态", 210 | choices = c("发行", "停刊", "合并"), 211 | status = "primary", 212 | checkIcon = list(yes = icon("ok", lib = "glyphicon"), no = icon("remove",lib = "glyphicon")), size = 'xs'), 213 | ) 214 | }) 215 | #### 7. Main3 #### 216 | output$ui_main3 <- renderUI({ 217 | tagList( 218 | h3("中文期刊信息(CNKI 2022年数据)"), 219 | tags$hr(), 220 | DT::dataTableOutput("table3") 221 | )}) 222 | output$table3 <- DT::renderDataTable({ 223 | if(length(input$inp3_item) != 0) ip3_item <- input$inp3_item else ip3_item <- itemch 224 | if(length(input$inp3_cate1) != 0) ip3_cate1 <- input$inp3_cate1 else ip3_cate1 <- catech1 225 | if(length(input$inp3_cate2) != 0) ip3_cate2 <- input$inp3_cate2 else ip3_cate2 <- catech2 226 | if(length(input$inp3_eval) != 0) ip3_eval <- input$inp3_eval else ip3_eval <- evalch 227 | if(length(input$inp3_freq) != 0) ip3_freq <- input$inp3_freq else ip3_freq <- freqch 228 | if(length(input$inp3_lang) != 0) ip3_lang <- input$inp3_lang else ip3_lang <- c("中文", "英文", "日文", "韩文") 229 | if(length(input$inp3_stat) != 0) ip3_stat <- input$inp3_stat else ip3_stat <- c("发行", "停刊", "合并") 230 | 231 | sig_cate1 <- sig_cate2 <- sig_eval <- sig_freq<- sig_lang <- sig_stat <- rep(T, nrow(jdch)) 232 | 233 | if(length(ip3_cate1) < length(catech1)){ 234 | sig_cate1 <- rep(F, nrow(jdch)) 235 | for(i in ip3_cate1) sig_cate1 <- sig_cate1|str_detect(jdch$category1, i) 236 | } 237 | 238 | if(length(ip3_cate2) < length(catech2)){ 239 | sig_cate2 <- rep(F, nrow(jdch)) 240 | for(i in ip3_cate2) sig_cate2 <- sig_cate2|str_detect(jdch$category2, i) 241 | } 242 | 243 | if(length(ip3_eval) < length(evalch)){ 244 | sig_eval <- rep(F, nrow(jdch)) 245 | for(i in ip3_eval) sig_eval <- sig_eval|str_detect(jdch$evaluation, i) 246 | } 247 | 248 | if(length(ip3_freq) < length(freqch)) sig_freq <- jdch$frequency %in% ip3_freq 249 | 250 | if(length(ip3_lang) < 4){ 251 | sig_lang <- rep(F, nrow(jdch)) 252 | for(i in ip3_lang) sig_lang <- sig_lang|str_detect(jdch$language, i) 253 | } 254 | 255 | if(length(ip3_stat) < 3) sig_stat <- jdch$status %in% ip3_stat 256 | 257 | sig <- sig_cate1&sig_cate2&sig_eval&sig_freq&sig_lang&sig_stat 258 | 259 | showdt <- jdch[sig,] 260 | # names(showdt) <- c("ISSN", "CN", "刊名", "译名", "曾用刊名", 261 | # "一级分类", "二级分类", "复合IF", "综合IF", "出版量", 262 | # "下载量", "引用量", "收录", "主办单位", "出版地", 263 | # "出版周期", "语言", "开本", "邮发代号", "创刊时间", 264 | # "当前状态", "知网链接") 265 | session$userData$showdtch <- showdt 266 | DT::datatable(showdt[, .SD, .SDcols = ip3_item], 267 | escape = FALSE, 268 | options = list(pageLength = 10, autoWidth = TRUE, scrollX = TRUE), 269 | selection=list(mode = "multiple", target = "row")) 270 | }) 271 | 272 | ######################## 273 | #### 8. Mains #### 274 | output$ui_main_selected <- renderUI({ 275 | tagList( 276 | h3("已选期刊"), 277 | hr(), 278 | h4("英文LetPub版:"), 279 | DT::dataTableOutput("dataselect18"), 280 | hr(), 281 | h4("英文JCR版:"), 282 | DT::dataTableOutput("dataselect22"), 283 | hr(), 284 | h4("中文CNKI版:"), 285 | DT::dataTableOutput("dataselectch") 286 | ) 287 | }) 288 | 289 | row18 <- reactive({input$table1_rows_selected}) 290 | row22 <- reactive({input$table2_rows_selected}) 291 | rowch <- reactive({input$table3_rows_selected}) 292 | 293 | output$dataselect18 <- DT::renderDT( 294 | datatable(session$userData$showdt18[row18(),], 295 | escape = FALSE, 296 | options = list(pageLength = 100, 297 | autoWidth = TRUE, 298 | scrollX = TRUE, 299 | searching = FALSE, 300 | lengthChange = FALSE)) 301 | ) 302 | 303 | output$dataselect22 <- DT::renderDT( 304 | datatable(session$userData$showdt22[row22(),], 305 | escape = FALSE, 306 | options = list(pageLength = 100, 307 | autoWidth = TRUE, 308 | scrollX = TRUE, 309 | searching = FALSE, 310 | lengthChange = FALSE)) 311 | ) 312 | output$dataselectch <- DT::renderDT( 313 | datatable(session$userData$showdtch[rowch(), -1], 314 | escape = FALSE, 315 | options = list(pageLength = 100, 316 | autoWidth = TRUE, 317 | scrollX = TRUE, 318 | searching = FALSE, 319 | lengthChange = FALSE)) 320 | ) 321 | 322 | 323 | 324 | } 325 | -------------------------------------------------------------------------------- /timeconsuming.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcpmgh/Journal/c80cec49fe70dd7558e9276bd6508f0911955e3d/timeconsuming.png -------------------------------------------------------------------------------- /ui.R: -------------------------------------------------------------------------------- 1 | # Visualization of Journal information 2 | 3 | ##########===== ui =====########## 4 | # load packages 5 | library(DT) 6 | library(shiny) 7 | library(stringr) 8 | library(magrittr) 9 | library(data.table) 10 | library(shinyWidgets) 11 | library(showtext) 12 | 13 | ui <- fluidPage( 14 | tags$head(tags$title("journal")), 15 | tags$head(tags$link(rel = "shortcut icon", href = "pmgh.ico")), 16 | titlePanel("学术期刊质量查询系统"), 17 | tabsetPanel(id = "mainPanel", 18 | type = "pills", 19 | tabPanel(title = "英文LetPub版", 20 | sidebarLayout( 21 | sidebarPanel(width=3, uiOutput("ui_sidebar1")), 22 | mainPanel(uiOutput("ui_main1")) 23 | )), 24 | tabPanel(title = "英文JCR版", 25 | sidebarLayout( 26 | sidebarPanel(width = 3, uiOutput("ui_sidebar2")), 27 | mainPanel(uiOutput("ui_main2")) 28 | )), 29 | tabPanel(title = "中文CNKI版", 30 | sidebarLayout( 31 | sidebarPanel(width = 3, uiOutput("ui_sidebar3")), 32 | mainPanel(uiOutput("ui_main3")) 33 | )), 34 | tabPanel(title = "已选项目", 35 | uiOutput("ui_main_selected") 36 | )), 37 | 38 | # h3("期刊信息查询系统",align="center"), 39 | # tags$hr(), 40 | # sidebarLayout( 41 | # sidebarPanel(width=3, uiOutput("ui_sidebar")), 42 | # mainPanel(uiOutput("ui_main")) 43 | # ), 44 | tags$hr(), 45 | tags$div(align = "center", 46 | tags$p("\ua9 2021-2022, LIANG Chen, Institute of Mountain Hazards and Environment, CAS. All rights reserved.", style="height:8px"), 47 | actionLink(inputId = "", label = "Github", icon = icon("github"), onclick ="window.open('https://github.com/lcpmgh/Journal')"), 48 | tags$p(" ", style = "display:inline;white-space:pre"), 49 | tags$p("Email: lcpmgh@gmail.com", style="display:inline;white-space:pre"), 50 | tags$div(align = "center", 51 | tags$a("冀ICP备2022003075号", target="_blank", href="https://beian.miit.gov.cn", style="color:#06c; display:inline;"), 52 | tags$p(" ", style = "display:inline;white-space:pre"), 53 | tags$img(src="gaba.png"), 54 | tags$a("川公网安备51010702002736", target="_blank", href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=51010702002736", style="color:#06c; display:inline;") 55 | ) 56 | ) 57 | ) 58 | -------------------------------------------------------------------------------- /www/gaba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcpmgh/Journal/c80cec49fe70dd7558e9276bd6508f0911955e3d/www/gaba.png -------------------------------------------------------------------------------- /www/pmgh.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcpmgh/Journal/c80cec49fe70dd7558e9276bd6508f0911955e3d/www/pmgh.ico --------------------------------------------------------------------------------