CiteSpace中统计各个国家的发文量(以第一作者的国籍为准)

        本来想在citespace中进行各个国家的发文量进行统计,本来天真的以为citespace中可以直接统计,以为可以通过这个按钮进行实现👇

        然后点击运行,直接得出各个国家的发文量(最开始我以为这个按钮是这个作用) ,得到下图。

        我一看,很好,直接得到了各个国家的总发文量(上图中的PEOPLES R CHINA的修改看我另外一个文章),直接美滋滋的用这个数据做图,我做了个国家发文量前十的图,好家伙,前十国家的发文量有6000余篇,我数据总量才5700余篇,然后我就发现了不对劲。去研究了一下,发现这个得到的是一个文章中有几个作者的国籍关系(我的理解是,一个文章有多个作者的国籍不一样时,会将一个文章定义为多个国家发表的,就可能出现前十国家的发表数量多出我总的数据的情况)。

        然后我就去看原始数据,即citespace已经预处理过的txt文件。以下图为例,有三个作者,两个作者为巴西,一个作者为美国,巴西和美国两个国家,则巴西发表数量加一,美国发表数量加一(个人理解,如果有不对就请指正,但是我肯定的是直接通过citespae中的county国家按钮不能得到各个国家的发表数量)

        然后我就以第一作者的国籍对文章的归属国进行划分,以上图为例,第一作者的国籍是巴西,那我就把这篇文章归为巴西发表的,与第三作者的美国无关。 

编写代码

#读取各个国家的发文量

import re
from collections import Counter
import pandas as pd


def extract_first_author_country(file_paths):
    country_counts = Counter()
    for file_path in file_paths:
        with open(file_path, 'r', encoding='utf-8') as file:
            content = file.read()        
            c1_matches = re.findall(r"C1\s+([^\n]+)", content)
            a=0
            d=0
            b=len(c1_matches)
            for a in range(b):
                    first_author_address = c1_matches[a]
                    first_author_address = first_author_address[::-1]
                    match = re.match(r"^[^\s]+", first_author_address)
                    reversed_match=match.group(0)[::-1]
                    country_counts.update([reversed_match.strip()])
            print(country_counts)

file_paths = [

    'D:/temp22/11/data/download2022u646.txt',
    'D:/temp22/11/data/download2023u546.txt',
]
 

extract_first_author_country(file_paths)

 得到的结果为两个,因为我们输入文件也是两个,同理,输入的越多,输出的越多(但是只用看最后一个的数据就行,这个结果的第一个数据就是2022年的数据,第二个数据就是2022+2023年的数据)

把全部数据导入之后进行输出,得到的数据的最后一个就是各个国家的发文量 (想得到逐年的发文量也很简单,后一个数据减去上一个数据就是当年的发文量)

注意,此方法并不是100%准确,因为我在看1998年之前的txt时,并没有C1(作者)这一关键词,所以在1998年前的文章我都是人工筛选的。其次,从上述结果中也会有一些乱码,比如'10.5067/MODIS/MOD13C1.006': 2,'WOS:001005025900001': 1。然后我去看了看,好像没啥影响,这几个乱码删除就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值