显示你的论文引用地图

Page content

显示你的论文引用地图 by 方圆之处

在Web of Science里,你可以生成一个漂亮的论文引用地图。在这篇文章中,我将展示如何从Web of Science中下载引用数据和如何在R中绘制论文引用地图。

在Web of Science中,引用数据的链接并不好找。但是因为引用地图是展示在网页上的,那么其实引用数据会被浏览器下载到本地。因此现在的问题是如何找到引用数据。

在下文中,我只以Chrome浏览器为例。

第一步:登录到你的个人Web of Science上。

第二步:在Chrome中打开Developer Tools,有两种方法可以打开:

  1. 在网页上右击鼠标,然后选择"Inspect"。
  2. 在Chrome的菜单栏,View -> Developer -> Developer’s Tools。

第三步:在你的个人Web of Science中,点击“My research profile”.

第四步:在这个页面中,点击“Open dashboard”。

第五步:向下滚动网页,直至“Geographic Citation Map”,现在这里是模糊的,点击“Click to show map”。

第六步:在Developer Tool中,点击“Netowrk”标签(在最上面一行)。你可能会看到有很多的文件正在下载。当所有文件下载完毕,双击natigation_poin.svg上的那一个文件(路径名为?task_id=...,往往是文件大小最大的那一个)。

双击之后会打开一个网页,其中包含了一个json文件,这个json文件中包含了绘制引用地图的所有数据。

第七步:将此json保存到文件中,例如通过“Ctrl + s”。我们假设这个文件为citation.json。可惜这个json文件并不能直接被jsonlite或者rjson包导入(肯能它并不是真正的json文件)。我们需要对此进行一个简单的修改。

citation.json其实包含了合法的JavaScript命令。我们额外的将其赋予一个变量。在citation.json文件中,我们只需要简单的在开头加上citation = 。我们假设这个变量名为citation

第八步:现在我们可以通过使用V8包来执行citation.json中的JavaScript代码。

library(V8)
ct = v8()
ct$source("~/citation.json")
## [1] "[object Object]"

第九步:将JavaScript变量citation导入R中,这个以通过ctget()方法进行。

citation = ct$get("citation")

到现在为止,我们已经获取了引用数据,下面我们开始在R中对此数据进行处理。

在这里我不会展示citation变量的全部内容,因为这个有一点复杂。citation是一个列表,这个我只取其results的元素。results元素是一个数据框。同时我只取results的前四列,因为第五列包含了引用论文的详细信息,例如作者,论文标题,我们下面的可视化不需要这些。

results = citation$results[, 1:4]
head(results)
##                     address publicationCount       lat       lon
## 1             Putian, China                2  25.35331 119.05826
## 2 Blacksburg, United States               10  37.22957 -80.41394
## 3   Richmond, United States                7  37.55376 -77.46026
## 4           Toronto, Canada              328  43.64455 -79.40712
## 5  New Haven, United States               75  41.30815 -72.92816
## 6         Sydney, Australia              135 -33.86785 151.20732

现在在变量results中,其中有地理位置坐标(latlon)。这两列可以绘制到地图上。

下面的代码不是必须的。因为在同一个城市可能会有多所大学或者研究所,这只是将其汇集到一条记录里。如果你想区分不同的大学和研究所,你可以跳过下面这段代码,直接使用results.

tb = data.frame(address = tapply(results$address, results$address, function(x) x[1]),
                publicationCount = tapply(results$publicationCount, results$address, sum),
                lat = tapply(results$lat, results$address, mean),
                lon = tapply(results$lon, results$address, mean))

最后我们绘制引用地图。这里我参考了网上的一个绘制地理地图的教程(https://r-spatial.org/r/2018/10/25/ggplot2-sf.html).

library("sf")
library("rnaturalearth")
library("rnaturalearthdata")
world = ne_countries(scale = "medium", returnclass = "sf")

library(ggplot2)
library(ggrepel)
library(RColorBrewer)

ggplot(data = world) + geom_sf(color = "grey", fill = NA) + 
    geom_point(data = tb[order(tb$publicationCount), ], 
        aes(x = lon, y = lat, color = publicationCount, size = publicationCount)) + 
    scale_colour_gradientn(colours = rev(brewer.pal(9"Spectral"))) +
    scale_size(range = c(0.23)) +
    geom_text_repel(data = tb[order(-tb$publicationCount)[1:20], ], 
        mapping = aes(x = lon, y = lat, label = gsub(", .*$""", address)), 
        box.padding = 0.5, max.overlaps = Inf, min.segment.length = 0, size = 3)



原文链接