• 新鲜事
  • 我从Sci-Hub上下载了一个数据集,但是对DOI这个东西感到迷茫

故事背景是酱紫的,我最近发现了一个很神奇的网站,名为 Sci-Hub,此网站作者提供了一些与网站浏览记录相关的数据集,我把其中一个下载下来,里面有一亿多条数据,差不多长这样:

                  time                                        doi  ip user country          city  latitude  longitude
1: 2017-01-01 00:01:16 10.4028/www.scientific.net/AMM.511-512.286 117  124   China   Nanjing Shi 32.060255 118.796877
2: 2017-01-01 00:02:06           10.1111/j.1755-6724.2011.00377.x 177  191   China Guangzhou Shi  23.12911 113.264385
3: 2017-01-01 00:02:19                         10.1093/jcr/ucw038 196  214   China     Wuhan Shi 30.593099 114.305393
4: 2017-01-01 00:03:27              10.1080/15567036.2015.1057657 271  298   China      Shanghai 31.230416 121.473701
5: 2017-01-01 00:03:29           10.1111/j.1755-6724.2011.00378.x 177  191   China Guangzhou Shi  23.12911 113.264385
6: 2017-01-01 00:04:48           10.1111/j.1755-6724.2011.00380.x 177  191   China Guangzhou Shi  23.12911 113.264385

其中,time 是指用户登录网站的时间,格式是“年月日 时分秒”;doi 是一个长字符串,网上搜说是一篇论文的唯一标识编码;ip 是用户IP的唯一标识;user 是用户的唯一标识;country 和 city 是根据GeoIP得到的用户所属国家和城市;latitude 和 longitude 是经度和纬度。

关于此网站的用法举个例子,在叼着钥匙的黑乌鸦下面的白方框中输入一个doi,比如“10.4028/www.scientific.net/AMM.511-512.286”,然后回车就会得到:https://sci-hub.se/10.4028/www.scientific.net/AMM.511-512.286,就能直接看到论文内容。

我想要分析一下这个数据集,但是不知道DOI这个字段应该怎么用,因为无法直接从这个字段得到对应文章的年份、作者、主题等信息。不然就是像https://sci-hub.se/10.1126/science.352.6285.508这篇只统计出下载量最高的前几篇文章。
请问各位路过的小伙伴们有没有什么思路?

    @yufree 关于根据 DOI 获取文章 meta data,我记得主编以前好像有一个方法。

      Cloud2016 我就是用的 rcrossref 来找的,不过 crossref 只是doi的几个注册机构之一,可能存在用crossref的 api 搜 doi 找不到 metadata 的情况,特别是很多非英语期刊用的是其他注册机构。刚刚我试了下doi2bib2好像是可以解析非英语论文的,推测可能调用了 doi 官方的api了。

        yufree 谢谢!
        yuanfan
        doi 官网的API 看能不能找到,然后用R调它检索信息,可能有点麻烦的是DOI 那么多,API调用会有并发量和总量的控制,不知道 API 调用免费额度会有多少?

        Cloud2016
        回头我就琢磨下怎么用 rcrossref 吧,我只会 R,不会 Python。我下载的是 Sci-Hub 2017年的数据集,里面DOI去重以后有28773939个,只看中国的也有8785828,量确实很大。
        另,这个数据集没有缺失,每一条数据都有一个DOI,说明可以默认全都是网站的有效浏览。我只取中国的,按城市汇总浏览量,如下:

        rank	city	freq
        1	Beijing	3807399
        2	Shanghai	2915865
        3	Dingxi Shi	2147668
        4	Guangzhou Shi	1365568
        5	Nanjing Shi	1305058
        6	Wuhan Shi	1050703
        7	Hangzhou Shi	962155
        8	Chengdu Shi	904620
        9	Changsha Shi	757669
        10	Tianjin	  670712
        11	Xian Shi	   669085
        12	Zhengzhou Shi	538862
        13	Hefei Shi	512964

        那个“Xian Shi”我想了一会,明白是“西安市”。理论上浏览量最高的都是教育大省的省会城市,为撒浏览量第三多的会是定西市咧?

          yuanfan 提供这么好的经纬度和时间信息,可以考虑从时间和空间两个角度先探索分析一波。

          分析文章metadata,可以再抽样,或者就某一地区全量分析 DOI 数据,DOI 确实挺多的

          yuanfan 这个现象挺有意思,定西市没有知名研究机构,不太可能是自然流量。这里有两种可能:定西IP访问scihub有某种优势,所以有些自动化的文献下载工具在遴选代理服务器时总是选那边IP;另一种可能就是某个定西熊孩子写了个自动生成doi然后自动下载全文的爬虫脚本,运行后忘记关了,不过这大概率会被scihub发现。我倾向于第一种,因为现在确实有 scihub 的桌面版工具可以直接通过doi找全文。不过这也好验证,因为这里也有时间戳,前者的时间流量应该是相对平滑的,后者应该是突然出现一个高流量。

            yufree
            按天统计浏览量的数据长下面这样。
            定西市的,看起来很像是自然流量,因为跟其他城市数据一样存在周期性,且在2017年1月底2月初春节假期的时候出现过波谷,都在2017年10.7-10.29日缺失数据。

            对比看下北京的:

            还有上海的:

            我猜也有可能定西市存在不知名的研究机构。但也有一点不自然的地方。
            按小时汇总浏览量,定西市的数据看起来在每天5点、11点、16点会出现峰值,如下:

            其他城市如北京、上海、广州、南京、武汉等都是只在每天5点、10/11点出现峰值,如下:

              yuanfan 这个自然流量有点不自然,圣诞节突然少了很多,这不太像国内研究人员能干出来的事,感觉可能所有地方都有部分海外代理流量。工作时间也确实有意思,因为凌晨5点起来读论文跟下班回家前读论文这么励志的事发生在碳基生物身上也不正常。10-11点这个应该是最正常的。
              这样我只能猜一下,早上四五点跟下午四五点的峰不是国内贡献的,而是其他时区10-11点的科研人员搞的,这些地方应该跟国内有5-6个小时时差,东三区我能想到的文献大国应该就是伊朗跟俄罗斯了,而另一侧则可能是国际日期变更线附近,这个我就不太理解了,早起读论文这事有点超出我这个夜猫子的认知范围了。不过,也有验证方法,不论哪个国家,法定节假日与周末搜索流量都会低,可以把各国法定节假日数据抽出来就能知道挂代理的人有多少,具体来自哪个国家,另外可以提取出国内周末的数据看看时间分布,应该也能给出些线索。

              感谢楼上几位的探索,感觉很有帮助。如果说这个问题有一个简单的解释,那我的猜想是 GeoIP2 的映射数据不准确。因为 IP 段的实际归属地可能被经常调整。这里的三个峰可能是很多本来属于其他来源城市数据的叠加。另外一个相关的可能性是附近的主要访问来源城市被错误映射,比如兰州。所以直接剔除这条应该影响不大。

              读文献这个时间确实反常,先天认为应该是上午和下午各一个波,据我所知各个国家作息差异没那么大,所以很有可能是

              1. 别的区域代理的论文下载,这个可能性我觉得不大,如果代理的话,真实地址分散分布的可能性更大,不大会出现凌晨五点读paper的聚集峰。

              2. nan.xiao所说的ip地理位置映射错误,这个我觉得可能性很大。
                2.1 从绝对数量来推测,定西的峰值在150,000, 北京在300,000,差一倍,考虑北京的高校和科研院所数量级人数,正确的城市差不多也要有同一个数量级的高校和科研院所。
                2.2 从时间来推测,凌晨5点这个峰很可能来自10点或者17点的峰,那就是跟北京时间相差6或者12个小时的时区,看了一眼地图,北京凌晨五点对应白令海峡早上十点和美国东海岸下午五点。

              所以答案呼之欲出了:那就是 瓦坎达

              需要先确认一下数据质量,比如北京地区的经纬度是不是真的都落在北京,GeoIP 解析出来可能不准。国内能上海盗湾,可能大部分挂了代理,这就可能有时差,经纬度是不是和城市一样也是靠 GeoIP 得来的等等

              现在定西之谜有两点:

              1. 定西市本身没有知名研究机构,为撒在 scihub 上浏览量那么高?
              2. 一般城市的自然流量在24小时内只出现2个峰值,为撒定西市有3个峰值?(PS.其实中国其他城市也是出现3个峰值,只是除了定西以外,其他城市16点的那个峰值没有那么大)

              综合楼上的观点们,有两种解释:

              1. 虽然数据集里记录的城市是定西市,但是可能是解析错误,那些流量本应属于其他城市的数据。
              2. 其他地方的人,甚至是其他时区的人挂的代理。

              我下载的数据是2017年的,现在是2022年,上 scihub 是毫无阻碍的,不知道2017年的时候是不是跟现在不一样。一般来说,只有访问不了此网站却需要访问时才需要代理,美国那边不是本来就没有访问障碍的嘛?


              2017年总浏览量排名最高的前三个国家分别是中国、印度、美国,接下来分别画下印度和美国浏览量最高的前两个城市哈。

              印度

              Gugal Pimpari


              新德里


              美国

              洛杉矶


              芝加哥


              综上,美国浏览量前2的城市大多数都是挂的代理,24小时浏览量差得不多;印度浏览量前2的城市看起来像是多数都是正常的自然流量,因为确实24小时内只有2个峰值。


              我觉得@yufree 说的有道理,定西市的流量里应该是既有自然流量,也有非自然的。照着思路把周末的拆出来看是这样的:

              取出那些日期对应一周的第几天,一周的第1天是星期日,第7天是星期六,看看这三个城市的。
              中国 定西:

              印度 Gugal Pimpari

              美国 洛杉矶


              只看国家的,为了使热力图有区分度,把中国的浏览量除以10000,把印度和美国的除以5000

              我觉得印度的流量最自然,周六周日休息。美国的流量最不自然……中国的流量自然中混合着不自然。

              还有一点,scihub 提供的数据中时间字段不带时区,我看中国各个城市24小时流量峰值时点都差不多,都是5/11/16,而印度的都是9/12-13,这是不是说明这个时间字段本身都是一个时区的,因此映射到不同国家的时候才会出现的峰值时点有差异。

              @"Cloud2016" 经纬度我在这里查了,定西市的经纬度确实是定西市,北京市的经纬度也确实是北京的。

                yuanfan 整理下投主站吧。
                我补充一点背景,scihub是哈萨克斯坦人创建的,但开始用得最多的是伊朗。因为漂亮国的制裁,伊朗人根本没法买文献数据库,scihub几乎是他们获取知识的唯一途径。感兴趣可以去某乎搜下伊朗人的科研战斗力,可以说勤奋的离谱。
                另一个背景是关于时区人口的,下图是各时区人口分布,可以看出如果一个网站均匀接收所有国家访问,其流量天生应该就有大概三个峰,分别对应中印人口区,非欧人口区跟美洲人口区。不过人口分布跟网民分布又不一样,美国人少但网民多,印度非洲人多但网民少,所以我也不知道咋矫正这个流量了。也许可以依赖全球性网站的访问数据,但因为众所周知的原因,全球流量靠前的网站几乎在某网民大国都访问不了,所以他们的流量图也没法参考。

                不过这样看美国的日均匀流量反而又不正常了,搞不好是加州有些血汗硅厂的机器人在日夜不停地吃文献训练模型,芝加哥那个流量也非常异常,难道中部人只在夏天读文献?scihub曾多次被搞下线,所以这流量数据里还混了些偶然因素。
                感觉这数据越挖坑越多,足够拍一部悬疑科幻片了,开心麻花拍的话片名应该是《定西游记》。

                yuanfan 关于数据校验,我觉得还可以再细致一些,以定西市为例,把这个城市所有的经纬度画个热力图,看看具体都在哪下的?有没有挨着学校,流量是不是集中在几个区域,还是分布均衡?

                统计了一下国内访问量排序前二十的城市,基本符合个人对国内各城市的研究实力认知= = 定西在上海广州之间,

                然后发现前20一线少了个深圳市,查了一下深圳访问量才64,考虑到深圳科技企业和研究所不少,显然不对。

                所以我再次猜测,估计深圳被认成了定西

                |V6            |       n|  n_user| reads_per_user|
                |:-------------|-------:|-------:|--------------:|
                |Beijing       | 3807399|  934768|       4.073095|
                |Shanghai      | 2915865| 1076290|       2.709182|
                |Dingxi Shi    | 2147668|  488722|       4.394457|
                |Guangzhou Shi | 1365568|  263516|       5.182107|
                |Nanjing Shi   | 1305058|  213053|       6.125509|
                |Wuhan Shi     | 1050703|  152398|       6.894467|
                |Hangzhou Shi  |  962155|  225101|       4.274326|
                |Chengdu Shi   |  904620|  124275|       7.279179|
                |Changsha Shi  |  757669|   94704|       8.000391|
                |Tianjin       |  670712|   94713|       7.081520|
                |Xian Shi      |  669085|   87706|       7.628725|
                |Zhengzhou Shi |  538862|  132860|       4.055863|
                |Hefei Shi     |  512964|   72574|       7.068151|
                |Jinan Shi     |  502566|   74484|       6.747301|
                |Chongqing     |  490612|   53388|       9.189556|
                |Changchun Shi |  457532|   49557|       9.232439|
                |Lanzhou Shi   |  408890|   39851|      10.260470|
                |Shenyang Shi  |  376430|   54880|       6.859147|
                |Haerbin Shi   |  373054|   52052|       7.166948|
                |Nanchang Shi  |  351555|   49536|       7.096960|