使用关键字发表的 NCBI 出版物数量,按年份分组
Number of NCBI publications published with a keyword, grouped by year
我想制作一个字典,以年份为键,包含该年发表的关键字的出版物数量作为值。
我写了这个脚本:
from Bio import Entrez
from Bio import Medline
from metapub import PubMedFetcher
fetch = PubMedFetcher()
from collections import Counter
pmids = fetch.pmids_for_query('cancer',retmax=100000000)
year_dict = {}
print(len(pmids))
for pmid in pmids:
pubmed_rec = Entrez.efetch(db='pubmed',id=pmid,retmode='text',rettype='medline')
records = Medline.parse(pubmed_rec)
for rec in records:
if rec.get('DP'):
pub_date = rec.get('DP')
split_date = pub_date.split()[0]
if split_date not in year_dict:
year_dict[split_date] = 1
else:
year_dict[split_date] +=1
print(year_dict)
当我做一些测试设置 retmax = 100 时它起作用了,输出是:
{'2021': 98}
但现实中论文太多(>100万),速度慢得让人望而却步。任何人都可以建议一种替代方法(我输入一个关键字,它会 return 年的字典和当年用该关键字发表的论文数量)?我需要查询词 ('cancer') 实际上是论文的关键字,而不仅仅是论文中任何地方提到的词。
我想知道是否以某种方式将其作为过滤器和计数器更容易,即使用 Efetch 过滤所有带有关键字 X 和出版年份 Y 的词,并从 2021 年开始重复 100 次 100 年,而不是比我遍历每个的方法。但是还没想出办法。
您可以直接查询发布日期,而不是从每条记录中读取发布日期。
演示:
from metapub import PubMedFetcher
fetch = PubMedFetcher()
from time import sleep
year_dict = {}
for year in range(2000, 2022):
pmids = fetch.pmids_for_query('cancer '+str(year)+'/01/01[MDAT] : '+str(year)+'/12/31[MDAT]',retmax=10000000)
year_dict[year] = len(pmids)
print(str(year)+":", len(pmids))
sleep(3)
输出:
2000: 2808
2001: 287
2002: 169
2003: 9722
2004: 149017
2005: 39909
2006: 166419
2007: 89953
2008: 61164
2009: 73170
2010: 40381
2011: 53915
2012: 46640
2013: 189352
2014: 72613
2015: 157995
2016: 247184
2017: 139309
2018: 818714
2019: 1101298
2020: 484091
2021: 420468
我想制作一个字典,以年份为键,包含该年发表的关键字的出版物数量作为值。
我写了这个脚本:
from Bio import Entrez
from Bio import Medline
from metapub import PubMedFetcher
fetch = PubMedFetcher()
from collections import Counter
pmids = fetch.pmids_for_query('cancer',retmax=100000000)
year_dict = {}
print(len(pmids))
for pmid in pmids:
pubmed_rec = Entrez.efetch(db='pubmed',id=pmid,retmode='text',rettype='medline')
records = Medline.parse(pubmed_rec)
for rec in records:
if rec.get('DP'):
pub_date = rec.get('DP')
split_date = pub_date.split()[0]
if split_date not in year_dict:
year_dict[split_date] = 1
else:
year_dict[split_date] +=1
print(year_dict)
当我做一些测试设置 retmax = 100 时它起作用了,输出是:
{'2021': 98}
但现实中论文太多(>100万),速度慢得让人望而却步。任何人都可以建议一种替代方法(我输入一个关键字,它会 return 年的字典和当年用该关键字发表的论文数量)?我需要查询词 ('cancer') 实际上是论文的关键字,而不仅仅是论文中任何地方提到的词。
我想知道是否以某种方式将其作为过滤器和计数器更容易,即使用 Efetch 过滤所有带有关键字 X 和出版年份 Y 的词,并从 2021 年开始重复 100 次 100 年,而不是比我遍历每个的方法。但是还没想出办法。
您可以直接查询发布日期,而不是从每条记录中读取发布日期。
演示:
from metapub import PubMedFetcher
fetch = PubMedFetcher()
from time import sleep
year_dict = {}
for year in range(2000, 2022):
pmids = fetch.pmids_for_query('cancer '+str(year)+'/01/01[MDAT] : '+str(year)+'/12/31[MDAT]',retmax=10000000)
year_dict[year] = len(pmids)
print(str(year)+":", len(pmids))
sleep(3)
输出:
2000: 2808
2001: 287
2002: 169
2003: 9722
2004: 149017
2005: 39909
2006: 166419
2007: 89953
2008: 61164
2009: 73170
2010: 40381
2011: 53915
2012: 46640
2013: 189352
2014: 72613
2015: 157995
2016: 247184
2017: 139309
2018: 818714
2019: 1101298
2020: 484091
2021: 420468