Created
June 27, 2022 14:42
-
-
Save rafaelpezzuto/ca58d32f7c996488f2604494b31a58c1 to your computer and use it in GitHub Desktop.
Gera arquivos CSV de bibliometria
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "18be05de", | |
"metadata": {}, | |
"source": [ | |
"### SciELO Bibliometrics\n", | |
"Este notebook lê dados de referências citadas enriquecidas com os códigos ISSN-L citados e gera as seguintes tabelas:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "2684d918", | |
"metadata": {}, | |
"source": [ | |
"__A. Tabela de citações recebidas por periódico e ano__\n", | |
"\n", | |
"_Exemplo de tabela de citações recebidas pelo periódico Biota Neotrópica (1676-0603) no ano de 2020_ \n", | |
"\n", | |
"|ISSN|Título|Citações recebidas|\n", | |
"|----|------|-----------------:|\n", | |
"|1676-0603|BIOTA NEOTROPICA|202|\n", | |
"|0031-1049|PAPEIS AVULSOS DE ZOOLOGIA|36|\n", | |
"|0001-3765|ANAIS DA ACADEMIA BRASILEIRA DE CIENCIAS|32|\n", | |
"|1679-6225|NEOTROPICAL ICHTHYOLOGY|26|\n", | |
"|0073-2877|HOEHNEA|18|\n", | |
"|1984-4670|ZOOLOGIA|17|\n", | |
"|0370-6583|RODRIGUESIA|16|\n", | |
"|0102-6712|ACTA LIMNOLOGICA BRASILIENSIA|14|\n", | |
"|1415-0980|FLORESTA E AMBIENTE|13|\n", | |
"\n", | |
"_Significado das colunas_\n", | |
"- ISSN: código identificador do periódico que citou a revista Biota Neotrópica\n", | |
"- Título: título do periódico que citou a revista Biota Neotrópica\n", | |
"- Citações recebidas: número de citações que o periódico Biota Neotrópica recebeu no ano" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "b0ff7716", | |
"metadata": {}, | |
"source": [ | |
"__B. Tabela de citações concedidas por periódico e ano__\n", | |
"\n", | |
"_Exemplo de tabela de citações concecidas pelo periódico Biota Neotrópica (1676-0603) no ano de 2020_\n", | |
"\n", | |
"|ISSN|Título|Citações concedidas|\n", | |
"|----|------|------------------:|\n", | |
"|1676-0603|BIOTA NEOTROPICA|121|\n", | |
"|0101-8175|REVISTA BRASILEIRA DE ZOOLOGIA|74|\n", | |
"|0006-3606|BIOTROPICA|57|\n", | |
"|0034-7108|REVISTA BRASILEIRA DE BIOLOGIA|47|\n", | |
"|0012-9658|ECOLOGY|46|\n", | |
"|0045-8511|COPEIA|39|\n", | |
"|1175-5326|ZOOTAXA|39|\n", | |
"|1519-6984|BRAZILIAN JOURNAL OF BIOLOGY|38|\n", | |
"|0100-8404|REVISTA BRASILEIRA DE BOTANICA|33|\n", | |
"\n", | |
"_Significado das colunas_\n", | |
"- ISSN: código identificador do periódico que recebeu a citação da revista Biota Neotrópica\n", | |
"- Título: título do periódico que recebeu a citação da revista Biota Neotrópica\n", | |
"- Citações concedidas: número de citações que o periódico Biota Neotrópica concedeu" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "875c6310", | |
"metadata": {}, | |
"source": [ | |
"__C. Tabela de PIDs citantes por periódico e ano__\n", | |
"\n", | |
"_Exemplo de tabela de PIDs que citaram o periódico Biota Neotrópica (1675-0603)_\n", | |
"\n", | |
"|Código de documento citante|Coleção de documento citante|Ano de documento citado|\n", | |
"|---------------------------|----------------------------|----------------------:|\n", | |
"|S0001-37652020000100714|scl|2011|\n", | |
"|S0001-37652020000100720|scl|2010|\n", | |
"|S0001-37652020000100722|scl|2006|\n", | |
"|S0001-37652020000100725|scl|2006|\n", | |
"|S0001-37652020000100725|scl|2011|\n", | |
"|S0001-37652020000100725|scl|2005|\n", | |
"|S0001-37652020000100725|scl|2011|\n", | |
"|S0001-37652020000100728|scl|2015|\n", | |
"|S0001-37652020000300603|scl|2006|\n", | |
"\n", | |
"_Significado das colunas_\n", | |
"- Código de documento citante: código PID do documento que citou a revista Biota Neotrópica\n", | |
"- Coleção de documento citante: acrônimo de coleção do documento que citou a revista Biota Neotrópica\n", | |
"- Ano de documento citante: ano de publicação do documento citante" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "b9c66026", | |
"metadata": {}, | |
"source": [ | |
"__D. Tabela de citações padronizadas por periódico e ano__\n", | |
"\n", | |
"_Exemplo de tabela de citações padronizadas para o periódico Biota Neotrópica (1676-0603) no ano de 2020_\n", | |
"\n", | |
"|Coleção citante|ISSN|Código do documento citante|Código da referência citada|Ano da referência citada|Título citado|Volume citado|Código do método de correção|\n", | |
"|---------------|----|---------------------------|---------------------------|-----------------------:|-------------|------------:|---------------------------:|\n", | |
"|scl|0001-3765|S0001-37652020000100714|S0001-3765202000010071400061|2011|Biota Neotrop|11|0|\n", | |
"|scl|0001-3765|S0001-37652020000100720|S0001-3765202000010072000029|2010|Biota Neotrop|10|0|\n", | |
"|scl|0001-3765|S0001-37652020000100722|S0001-3765202000010072200007|2006|Biota Neotrop|6|0|\n", | |
"|scl|0001-3765|S0001-37652020000100725|S0001-3765202000010072500046|2006|Biota Neotrop|6|0|\n", | |
"|scl|0001-3765|S0001-37652020000100725|S0001-3765202000010072500055|2011|Biota Neotrop|11|0|\n", | |
"|scl|0001-3765|S0001-37652020000100725|S0001-3765202000010072500078|2011|Biota Neotrop|11|0|\n", | |
"|scl|0001-3765|S0001-37652020000100725|S0001-3765202000010072500094|2005|Biota Neotrop|5|0|\n", | |
"|scl|0001-3765|S0001-37652020000100728|S0001-3765202000010072800002|2015|Biota Neotropica|11|0|\n", | |
"|scl|0001-3765|S0001-37652020000300603|S0001-3765202000030060300031|2006|Biota Neotrop|6|0|\n", | |
"\n", | |
"_Significado das colunas_\n", | |
"- Coleção citante: coleção da Rede SciELO em que a citação foi realizada\n", | |
"- ISSN: código do periódico que citou a revista Biota Neotrópica\n", | |
"- PID do documento citante: código do documento que citou a revista Biota Neotrópica\n", | |
"- Ano do documento citante: ano de publicação do documento citante\n", | |
"- PID da referência citada: código da referência citada\n", | |
"- Ano da referência citada: ano da referência citada\n", | |
"- Título citado: título do periódico citado Biota Neotrópica como foi grafado\n", | |
"- Volume citado: volume do periódico citado Biota Neotrópica como foi grafado\n", | |
"- Código do método de correção: código que identifica como a citação foi padronizada" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "96fbab2e", | |
"metadata": {}, | |
"source": [ | |
"__E. Tabela de formas citadas por periódico e ano__\n", | |
"\n", | |
"_Exemplo de tabela de formas citadas para o periódico Biota Neotrópica (1676-0603) no ano de 2020_\n", | |
"\n", | |
"|Título citado|Título padronizado|Frequência|\n", | |
"|-------------|------------------|---------:|\n", | |
"|Biota Neotropica|BIOTA NEOTROPICA|279|\n", | |
"|Biota Neotrop|BIOTA NEOTROP|180|\n", | |
"|Biota Neotrop.|BIOTA NEOTROP|63|\n", | |
"|Biota Neotrópica|BIOTA NEOTROPICA|2|\n", | |
"|\"Biota Neotropica\"|BIOTA NEOTROPICA|2|\n", | |
"|Biota. Neotrop.|BIOTA NEOTROP|1|\n", | |
"\n", | |
"_Significado das colunas_\n", | |
"- Título citado: forma que o título da revista Biota Neotrópica foi grafada\n", | |
"- Título padronizado: forma para a qual o título grafado foi padronizado\n", | |
"- Frequência: número de vezes que a forma grafada foi citada" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "27528559", | |
"metadata": {}, | |
"source": [ | |
"### 1. Configurações" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "194f2fd1", | |
"metadata": {}, | |
"source": [ | |
"#### 1.1 Importa bibliotecas" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "77c58bdc", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import csv\n", | |
"import json\n", | |
"import pandas\n", | |
"import os\n", | |
"\n", | |
"from scielo_scholarly_data import standardizer" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "87a3e56c", | |
"metadata": {}, | |
"source": [ | |
"#### 1.2 Configuração de diretórios e arquivos" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "a7808481", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Diretórios\n", | |
"DIR_DATA = 'data/'\n", | |
"DIR_DATA_BASES = os.path.join(DIR_DATA, 'bases')\n", | |
"DIR_DATA_RESULTS = os.path.join(DIR_DATA, 'results')\n", | |
"\n", | |
"# Caminho da arquivo em formato CSV contendo os códigos ISSN associados a diversos dados de perídocos (nome de periódico, ano de início, etc)\n", | |
"FILE_ISSN_TO_ALL = os.path.join(DIR_DATA_BASES, 'base_issnl2all_v0.6.csv')\n", | |
"\n", | |
"# Caminho de arquivo em formato CSV contendo os ISSNs SciELO\n", | |
"# Colunas:\n", | |
"# collection\n", | |
"# scielo_issn\n", | |
"# journal title\n", | |
"FILE_JOURNALS = os.path.join(DIR_DATA_BASES, 'journals.csv')\n", | |
"\n", | |
"# Caminho de arquivo de citações enriquecidas\n", | |
"FILE_CITED_REFS_ENRICHED = os.path.join(DIR_DATA, 'data/enriched_citations.txt')\n", | |
"\n", | |
"# Anos de início e fim da série temporal\n", | |
"MIN_YEAR, MAX_YEAR = 1941, 2023\n", | |
"\n", | |
"# Janela temporal (em anos) a ser considerada na análise\n", | |
"RANGE_YEARS = range(MIN_YEAR, MAX_YEAR + 1)\n", | |
"\n", | |
"# Variável de controle de códigos ISSN ausentes na base issn2all\n", | |
"missing_issns = set()\n", | |
"\n", | |
"# Variável para inclusão de periódicos que estavam ausentes\n", | |
"missing_journals = {\n", | |
" '0379-3962': {'issns': set(['0379-3962']), 'title': 'TECNOLOGIA EN MARCHA', 'collection': set(['cri'])},\n", | |
" '2683-2623': {'issns': set(['2683-2623']), 'title': 'VERTICE UNIVERSITARIO', 'collection': set(['mex'])}\n", | |
"}\n", | |
"\n", | |
"os.makedirs(DIR_DATA_BASES, exist_ok=True)\n", | |
"os.makedirs(DIR_DATA_RESULTS, exist_ok=True)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "6393c8ad", | |
"metadata": {}, | |
"source": [ | |
"### 2. Definição de funções" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "c8738aa0", | |
"metadata": {}, | |
"source": [ | |
"#### 2.1 Funções auxilares" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "73b069c1", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def _get_collection(citing_ref_pid_and_acronym):\n", | |
" '''\n", | |
" Obtém coleção a partir de código citing_ref_pid\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" citing_ref_pid_and_acronym: str\n", | |
"\n", | |
" Returns\n", | |
" -------\n", | |
" str\n", | |
" Acrônimo de coleção\n", | |
" '''\n", | |
" return citing_ref_pid_and_acronym.split('^c')[-1]\n", | |
"\n", | |
"\n", | |
"def _get_citing_issn(citing_ref_pid_and_acronym):\n", | |
" '''\n", | |
" Obtém código ISSN a partir de código citing_ref_pid\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" citing_ref_pid_and_acronym: str\n", | |
"\n", | |
" Returns\n", | |
" -------\n", | |
" str\n", | |
" código ISSN\n", | |
" '''\n", | |
" return citing_ref_pid_and_acronym.split('^c')[0][1:10]\n", | |
"\n", | |
"\n", | |
"def _get_citing_year(citing_ref_pid_and_acronym):\n", | |
" '''\n", | |
" Obtém ano de publicação a partir de código citing_ref_pid\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" citing_ref_pid_and_acronym: str\n", | |
"\n", | |
" Returns\n", | |
" -------\n", | |
" str\n", | |
" Ano de publicação\n", | |
" '''\n", | |
" return citing_ref_pid_and_acronym.split('^c')[0][10:14]\n", | |
"\n", | |
"\n", | |
"def _get_citing_pid(citing_ref_pid_and_acronym):\n", | |
" '''\n", | |
" Obtém código PID de documento citante a partir de código citing_ref_pid\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" citing_ref_pid_and_acronym: str\n", | |
"\n", | |
" Returns\n", | |
" -------\n", | |
" str\n", | |
" Código PID de documento citante\n", | |
" '''\n", | |
" return citing_ref_pid_and_acronym.split('^c')[0][:23]\n", | |
"\n", | |
"\n", | |
"def _get_citing_ref_pid(citing_ref_pid_and_acronym):\n", | |
" '''\n", | |
" Obtém código de referência citada a partir de código citing_ref_pid\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" citing_ref_pid_and_acronym: str\n", | |
"\n", | |
" Returns\n", | |
" -------\n", | |
" str\n", | |
" Código de referência citada\n", | |
" '''\n", | |
" return citing_ref_pid_and_acronym.split('^c')[0]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "751ce0f4", | |
"metadata": {}, | |
"source": [ | |
"#### 2.2. Funções de leitura de metadados de periódicos" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "64d8256c", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def load_issn_to_attrs(path):\n", | |
" '''\n", | |
" Gera um dicionário que mapeia código ISSN a diversos atributos\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" path: str\n", | |
" Caminho do arquivo que contém códigos ISSN e diversos atributos\n", | |
"\n", | |
" Returns\n", | |
" -------\n", | |
" dict\n", | |
" Dicionário que mapeia código ISSN a título e outros atributos\n", | |
" '''\n", | |
" issn_to_attrs = {}\n", | |
"\n", | |
" with open(path) as fin:\n", | |
" csv_reader = csv.DictReader(fin, delimiter='|')\n", | |
"\n", | |
" for item in csv_reader:\n", | |
" issnl = item['ISSNL']\n", | |
" issns = sorted(set([issnl] + item['ISSNs'].split('#')))\n", | |
"\n", | |
" tmp_main_title = [ti for ti in item['MAIN_TITLE'].split('#') if len(ti) > 0]\n", | |
" tmp_abbrev_title = [ti for ti in item['MAIN_ABBREV_TITLE'].split('#') if len(ti) > 0]\n", | |
" tmp_other_titles = [ti for ti in item['OTHER_TITLEs'].split('#') if len(ti) > 0]\n", | |
"\n", | |
" if len(tmp_main_title) > 0:\n", | |
" title = tmp_main_title[0]\n", | |
" elif len(tmp_abbrev_title) > 0:\n", | |
" title = tmp_abbrev_title[0]\n", | |
" elif len(tmp_other_titles) > 0:\n", | |
" title = tmp_other_titles[0]\n", | |
" else:\n", | |
" print(f'{issnl} não possui título válido')\n", | |
" continue\n", | |
"\n", | |
" for i in issns:\n", | |
" if i not in issn_to_attrs:\n", | |
" if i in issn_to_attrs:\n", | |
" print(f'{i} já está no dicionário issn_to_attrs')\n", | |
" continue\n", | |
"\n", | |
" issn_to_attrs[i] = {\n", | |
" 'main_issn': issnl,\n", | |
" 'main_title': title,\n", | |
" 'issns': issns,\n", | |
" }\n", | |
"\n", | |
" return issn_to_attrs\n", | |
"\n", | |
"\n", | |
"def load_scielo_journals(path):\n", | |
" '''\n", | |
" Gera dicionário de periódicos SciELO\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" path: str\n", | |
" Caminho do arquivo de periódicos SciELO\n", | |
"\n", | |
" Returns\n", | |
" -------\n", | |
" dict\n", | |
" Dicionário contendo os periódicos SciELO no formato:\n", | |
" {\n", | |
" '0000-0000': {\n", | |
" 'title': 'Nome do periódico',\n", | |
" 'issns': {\n", | |
" '0000-0000',\n", | |
" '0001-0001',\n", | |
" },\n", | |
" 'collection': {\n", | |
" 'scl',\n", | |
" 'ssp',\n", | |
" }\n", | |
" }\n", | |
" }\n", | |
" '''\n", | |
" scielo_journals = {}\n", | |
" \n", | |
" with open(path) as fin:\n", | |
" creader = csv.DictReader(fin, delimiter=',', fieldnames=['issn', 'title', 'issns'])\n", | |
" for row in creader:\n", | |
" j_issn = standardizer.journal_issn(row['issn'])\n", | |
" j_title = standardizer.journal_title_for_deduplication(row['title'].lower()).upper()\n", | |
" \n", | |
" if j_issn not in scielo_journals:\n", | |
" scielo_journals[j_issn] = {\n", | |
" 'title': j_title,\n", | |
" 'issns': set([j_issn]),\n", | |
" }\n", | |
"\n", | |
" return scielo_journals\n", | |
"\n", | |
"\n", | |
"def _enrich_scielo_journals(scielo_journals, issn_to_attrs):\n", | |
" '''\n", | |
" Adiciona códigos ISSN em periódicos SciELO usando dados da base de títulos\n", | |
" \n", | |
" Params\n", | |
" ------\n", | |
" scielo_journals: dict\n", | |
" issn_to_attrs: dict\n", | |
" '''\n", | |
" for i in scielo_journals:\n", | |
" for ei in issn_to_attrs.get(i, {}).get('issns', []):\n", | |
" scielo_journals[i]['issns'].add(ei)\n", | |
"\n", | |
"\n", | |
"def _extract_scielo_issns(scielo_journals):\n", | |
" '''\n", | |
" Extrai set de códigos ISSN pertencentes a periódicos SciELO\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" scielo_journals: dict\n", | |
"\n", | |
" Returns\n", | |
" -------\n", | |
" scielo_issns: Set\n", | |
" '''\n", | |
" scielo_issns = set()\n", | |
" \n", | |
" for j_attrs in scielo_journals.values():\n", | |
" for i in j_attrs['issns']:\n", | |
" scielo_issns.add(i)\n", | |
"\n", | |
" return scielo_issns" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "5a783781", | |
"metadata": {}, | |
"source": [ | |
"#### 2.3. Funções de agrupamento de dados de citações" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "e58c2dd7", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def add_json_line_to_cited_issn2citations(json_line, cited_key, data, issn_to_attrs):\n", | |
" '''\n", | |
" Mapeia citação do tipo json_line a um ISSN citado existente em data\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" json_line: dict\n", | |
" Citação em formato json\n", | |
" cited_key: str\n", | |
" Nome do campo que contém o código ISSN citado padronizado\n", | |
" data: dict\n", | |
" Dicionário que mapeia ISSN a lista de citações:\n", | |
" {\n", | |
" '1995': {\n", | |
" ('0000-0000', 'Título padronizado do periódico'): [\n", | |
" {'REF1'},\n", | |
" {'REF2'},\n", | |
" ],\n", | |
" },\n", | |
" }\n", | |
" issn_to_attrs: dict\n", | |
" Dicionário de periódicos\n", | |
" '''\n", | |
" cited_issn = json_line.get(cited_key, '')\n", | |
" if cited_issn:\n", | |
" cited_issn_std = standardizer.journal_issn(cited_issn)\n", | |
" cited_issn_main = issn_to_attrs[cited_issn_std]['main_issn']\n", | |
" cited_journal = issn_to_attrs[cited_issn_main]['main_title']\n", | |
"\n", | |
" else:\n", | |
" cited_issn_main = ''\n", | |
" cited_journal = standardizer.journal_title_for_deduplication(json_line.get('cited_journal').lower()).upper()\n", | |
"\n", | |
" if not cited_issn_main and not cited_journal:\n", | |
" return\n", | |
"\n", | |
" journal_issn_and_title = (cited_issn_main, cited_journal)\n", | |
"\n", | |
" citing_year = _get_citing_year(json_line['citing_pid'])\n", | |
" if not citing_year.isdigit():\n", | |
" return\n", | |
"\n", | |
" if citing_year not in data:\n", | |
" data[citing_year] = {}\n", | |
"\n", | |
" if journal_issn_and_title not in data[citing_year]:\n", | |
" data[citing_year][journal_issn_and_title] = []\n", | |
" data[citing_year][journal_issn_and_title].append(json_line)\n", | |
"\n", | |
"\n", | |
"def add_json_line_to_citing_issn2citations(json_line, data, issn_to_attrs):\n", | |
" '''\n", | |
" Mapeia citação do tipo json_line a um ISSN citante existente em data\n", | |
"\n", | |
" Params\n", | |
" ------\n", | |
" json_line: dict\n", | |
" Citação em formato json\n", | |
" data: dict\n", | |
" Dicionário que mapeia ISSN a lista de citações:\n", | |
" {\n", | |
" '1995': {\n", | |
" '0000-0000': [\n", | |
" {'REF1'},\n", | |
" {'REF2'},\n", | |
" ],\n", | |
" },\n", | |
" }\n", | |
" issn_to_attrs: dict\n", | |
" Dicionário de periódicos\n", | |
" '''\n", | |
" citing_issn = _get_citing_issn(json_line.get('citing_pid'))\n", | |
" if not citing_issn:\n", | |
" return\n", | |
"\n", | |
" citing_issn_std = standardizer.journal_issn(citing_issn)\n", | |
" if not citing_issn_std:\n", | |
" return\n", | |
"\n", | |
" try:\n", | |
" citing_issn_main = issn_to_attrs[citing_issn_std]['main_issn']\n", | |
" except KeyError:\n", | |
" print(f'{citing_issn} não está na base de títulos issn_to_attrs')\n", | |
" missing_issns.add(citing_issn)\n", | |
" return\n", | |
"\n", | |
" citing_year = _get_citing_year(json_line.get('citing_pid'))\n", | |
" if not citing_year or not citing_year.isdigit():\n", | |
" return\n", | |
"\n", | |
" if citing_year not in data:\n", | |
" data[citing_year] = {}\n", | |
"\n", | |
" if citing_issn_main not in data[citing_year]:\n", | |
" data[citing_year][citing_issn_main] = []\n", | |
"\n", | |
" data[citing_year][citing_issn_main].append(json_line)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "d7fe1911", | |
"metadata": {}, | |
"source": [ | |
"### 3. Leitura de metadados de periódicos" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "f280e3c1", | |
"metadata": {}, | |
"source": [ | |
"#### 3.1 Dados de periódicos SciELO" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "c85c2a87", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"scielo_journals = load_scielo_journals(FILE_JOURNALS)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "e3658d02", | |
"metadata": {}, | |
"source": [ | |
"#### 3.2. Dados de base de títulos" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "81b51e41", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"issn_to_attrs = load_issn_to_attrs(FILE_ISSN_TO_ALL)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "ac18faa0", | |
"metadata": {}, | |
"source": [ | |
"#### 3.3. Dados de base de títulos e periódicos SciELO" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "5d9522cf", | |
"metadata": {}, | |
"source": [ | |
"##### 3.3.1. Adiciona periódicos ausentes" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "015bef9f", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"for mj in missing_journals:\n", | |
" if mj not in issn_to_attrs:\n", | |
" issn_to_attrs[mj] = {'main_issn': mj, 'issns': missing_journals[mj]['issns'], 'main_title': missing_journals[mj]['title']}" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "c6c6ab73", | |
"metadata": {}, | |
"source": [ | |
"##### 3.3.2. Enrique periódicos com códigos ISSN" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "286445df", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"_enrich_scielo_journals(scielo_journals, issn_to_attrs)\n", | |
"scielo_issns = _extract_scielo_issns(scielo_journals)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "d1c2f502", | |
"metadata": {}, | |
"source": [ | |
"### 4. Leitura de referências citadas" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "b488ab23", | |
"metadata": {}, | |
"source": [ | |
"#### 4.1. Dados de citações enriquecidas" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "768eebfb", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"year_to_cited_issn_to_citations = {}\n", | |
"year_to_citing_issn_to_citations = {}\n", | |
"\n", | |
"counter = 1\n", | |
"\n", | |
"with open(FILE_CITED_REFS_ENRICHED) as fin:\n", | |
" for line in fin:\n", | |
" if counter % 250000 == 0:\n", | |
" print(counter)\n", | |
" json_line = json.loads(line)\n", | |
"\n", | |
" add_json_line_to_cited_issn2citations(json_line, 'cited_issnl', year_to_cited_issn_to_citations, issn_to_attrs)\n", | |
" add_json_line_to_citing_issn2citations(json_line, year_to_citing_issn_to_citations, issn_to_attrs)\n", | |
" \n", | |
" counter += 1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "1b8e2cef", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"all_years = [int(y) for y in list(year_to_cited_issn_to_citations.keys()) + list(year_to_citing_issn_to_citations.keys())]\n", | |
"min_year = min(all_years)\n", | |
"max_year = max(all_years)\n", | |
"print(f'Menor ano é {min_year}')\n", | |
"print(f'Maior ano é {max_year}')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "5b780a37", | |
"metadata": {}, | |
"source": [ | |
"### 5. Geração de arquivos CSV" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "8a402c9c", | |
"metadata": {}, | |
"source": [ | |
"#### 5.1. Citações recebidas (count) " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "dcb5381f", | |
"metadata": {}, | |
"source": [ | |
"##### 5.1.1. Funções de agregação de citações recebidas (count)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "d3f9aec3", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def citations_received_count(min_year, max_year, main_issn, issn_to_attrs, year_to_cited_issn_to_citations, save_to_disk=True):\n", | |
" all_data = {}\n", | |
" std_data = {}\n", | |
"\n", | |
" main_key = (main_issn, issn_to_attrs[main_issn]['main_title'])\n", | |
"\n", | |
" for y in range(min_year, max_year + 1):\n", | |
" year = str(y)\n", | |
" std_data = {}\n", | |
"\n", | |
" for c in year_to_cited_issn_to_citations.get(year, {}).get((main_key), []):\n", | |
" citing_issn = _get_citing_issn(c['citing_pid'])\n", | |
" citing_issn_std = standardizer.journal_issn(citing_issn)\n", | |
" citing_issn_main = issn_to_attrs[citing_issn_std]['main_issn']\n", | |
"\n", | |
" if citing_issn_main not in std_data:\n", | |
" citing_journal_std = issn_to_attrs[citing_issn_main]['main_title']\n", | |
" std_data[citing_issn_main] = {'Título': citing_journal_std, 'Citações recebidas': 0}\n", | |
" std_data[citing_issn_main]['Citações recebidas'] += 1\n", | |
"\n", | |
" if std_data:\n", | |
" df = pandas.DataFrame.from_dict(std_data, orient='index')\n", | |
" df.sort_values('Título', inplace=True)\n", | |
" df.sort_values('Citações recebidas', ascending=False, inplace=True)\n", | |
" \n", | |
" if save_to_disk:\n", | |
" dir_results_issn = os.path.join(DIR_DATA_RESULTS, f'{main_issn}')\n", | |
" if not os.path.exists(dir_results_issn):\n", | |
" os.makedirs(dir_results_issn)\n", | |
" df.to_csv(os.path.join(dir_results_issn, f'{main_issn}_citations_received_count_{year}.csv'), index_label='ISSN')\n", | |
"\n", | |
" all_data[y] = std_data\n", | |
" \n", | |
" return all_data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "85b9ff0d", | |
"metadata": {}, | |
"source": [ | |
"##### 5.1.2. Geração de dados agregados de citações recebidas (count)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "18eca718", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"for sj in scielo_journals:\n", | |
" citations_received_count(min_year, max_year, sj, issn_to_attrs, year_to_cited_issn_to_citations)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "b8d45388", | |
"metadata": {}, | |
"source": [ | |
"#### 5.2. Citações recebidas (citing_pids)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "30c5d3c4", | |
"metadata": {}, | |
"source": [ | |
"##### 5.2.1. Função de agregação de citações recebidas (citing_pids)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "5d05512f", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def citations_received_citing_pids(min_year, max_year, main_issn, issn_to_attrs, year_to_cited_issn_to_citations, save_to_disk=True):\n", | |
" all_data = {}\n", | |
" main_key = (main_issn, issn_to_attrs[main_issn]['main_title'])\n", | |
"\n", | |
" for y in range(min_year, max_year + 1):\n", | |
" year = str(y)\n", | |
" std_data = []\n", | |
"\n", | |
" for c in year_to_cited_issn_to_citations.get(year, {}).get(main_key, []):\n", | |
" citing_pid = _get_citing_pid(c['citing_pid'])\n", | |
" citing_collection = _get_collection(c['citing_pid'])\n", | |
" cited_year = c['cited_year']\n", | |
"\n", | |
" std_data.append(\n", | |
" {\n", | |
" 'Código de documento citante': citing_pid, \n", | |
" 'Coleção de documento citante': citing_collection, \n", | |
" 'Ano de documento citado': cited_year\n", | |
" }\n", | |
" )\n", | |
"\n", | |
" if std_data:\n", | |
" df = pandas.DataFrame.from_dict(std_data)\n", | |
" df.sort_values('Código de documento citante', inplace=True)\n", | |
"\n", | |
" if save_to_disk:\n", | |
" dir_results_issn = os.path.join(DIR_DATA_RESULTS, f'{main_issn}')\n", | |
" if not os.path.exists(dir_results_issn):\n", | |
" os.makedirs(dir_results_issn)\n", | |
" df.to_csv(os.path.join(dir_results_issn, f'{main_issn}_citations_received_citing_pids_{year}.csv'), index=False)\n", | |
"\n", | |
" all_data[y] = std_data\n", | |
"\n", | |
" return all_data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "1ff0fd8b", | |
"metadata": {}, | |
"source": [ | |
"##### 5.2.2. Geração de agregação de citações recebidas (citing_pids)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "29adfed7", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"for sj in scielo_journals:\n", | |
" citations_received_citing_pids(min_year, max_year, sj, issn_to_attrs, year_to_cited_issn_to_citations)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "0425b301", | |
"metadata": {}, | |
"source": [ | |
"#### 5.3. Citações recebidas (standardized)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "4f077edb", | |
"metadata": {}, | |
"source": [ | |
"##### 5.3.1. Função de agregação de citações recebidas (standardized)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def citations_received_standardized(min_year, max_year, main_issn, issn_to_attrs, year_to_cited_issn_to_citations, save_to_disk=True):\n", | |
" all_data = {}\n", | |
" main_key = (main_issn, issn_to_attrs[main_issn]['main_title'])\n", | |
" \n", | |
" for y in range(min_year, max_year + 1):\n", | |
" year = str(y)\n", | |
" std_data = []\n", | |
"\n", | |
" for c in year_to_cited_issn_to_citations.get(year, {}).get(main_key, []):\n", | |
" citing_pid = _get_citing_pid(c['citing_pid'])\n", | |
" citing_collection = _get_collection(c['citing_pid'])\n", | |
" citing_ref_pid = _get_citing_ref_pid(c['citing_pid'])\n", | |
"\n", | |
" cited_year = c['cited_year']\n", | |
" cited_journal = c['cited_journal']\n", | |
"\n", | |
" citing_issn = _get_citing_issn(c['citing_pid'])\n", | |
" citing_issn_std = standardizer.journal_issn(citing_issn)\n", | |
" citing_issn_main = issn_to_attrs[citing_issn_std]['main_issn']\n", | |
"\n", | |
" cited_volume = c.get('cited_vol', '')\n", | |
"\n", | |
" correction_method = c['result_code']\n", | |
"\n", | |
" std_data.append({\n", | |
" 'Código da coleção citante': citing_collection,\n", | |
" 'ISSN': citing_issn_main,\n", | |
" 'Código do documento citante': citing_pid,\n", | |
" 'Código da referência citada': citing_ref_pid,\n", | |
" 'Ano da referência citada': cited_year,\n", | |
" 'Título citado': cited_journal,\n", | |
" 'Volume citado': cited_volume,\n", | |
" 'Código do método de correção': correction_method\n", | |
" })\n", | |
"\n", | |
" if std_data:\n", | |
" df = pandas.DataFrame.from_dict(std_data)\n", | |
" df.sort_values('Código da referência citada', inplace=True)\n", | |
"\n", | |
" if save_to_disk:\n", | |
" dir_results_issn = os.path.join(DIR_DATA_RESULTS, f'{main_issn}')\n", | |
" if not os.path.exists(dir_results_issn):\n", | |
" os.makedirs(dir_results_issn)\n", | |
" df.to_csv(os.path.join(dir_results_issn, f'{main_issn}_citations_received_standardized_{year}.csv'), index=False)\n", | |
"\n", | |
" all_data[y] = std_data\n", | |
"\n", | |
" return all_data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "83b12319", | |
"metadata": {}, | |
"source": [ | |
"##### 5.3.2. Geração de agregação de citações recebidas (standardized)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "3c6fc26b", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"for sj in scielo_journals:\n", | |
" citations_received_standardized(min_year, max_year, sj, issn_to_attrs, year_to_cited_issn_to_citations)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "f6174211", | |
"metadata": {}, | |
"source": [ | |
"#### 5.4. Citações recebidas (cited_forms)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "30cf389d", | |
"metadata": {}, | |
"source": [ | |
"##### 5.4.1. Função de agregação de citações recebidas (cited_forms)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "2869b81a", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def citations_received_cited_forms(min_year, max_year, main_issn, issn_to_attrs, year_to_cited_issn_to_citations, save_to_disk=True):\n", | |
" all_data = {}\n", | |
" main_key = (main_issn, issn_to_attrs[main_issn]['main_title'])\n", | |
"\n", | |
" for y in range(min_year, max_year + 1):\n", | |
" year = str(y)\n", | |
" std_data = {}\n", | |
"\n", | |
" for c in year_to_cited_issn_to_citations.get(year, {}).get(main_key, []):\n", | |
" cited_journal = c['cited_journal']\n", | |
"\n", | |
" if cited_journal not in std_data:\n", | |
" cited_journal_std = standardizer.journal_title_for_deduplication(cited_journal)\n", | |
" std_data[cited_journal] = {'Título padronizado': cited_journal_std.upper(), 'Frequência': 0}\n", | |
" std_data[cited_journal]['Frequência'] += 1\n", | |
"\n", | |
" if std_data:\n", | |
" df = pandas.DataFrame.from_dict(std_data, orient='index')\n", | |
" df.sort_values('Frequência', ascending=False, inplace=True)\n", | |
"\n", | |
" if save_to_disk:\n", | |
" dir_results_issn = os.path.join(DIR_DATA_RESULTS, f'{main_issn}')\n", | |
" if not os.path.exists(dir_results_issn):\n", | |
" os.makedirs(dir_results_issn)\n", | |
" df.to_csv(os.path.join(dir_results_issn, f'{main_issn}_citations_received_cited_forms_{year}.csv'), index_label='Título citado')\n", | |
"\n", | |
" all_data[y] = std_data\n", | |
"\n", | |
" return all_data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "dde0b369", | |
"metadata": {}, | |
"source": [ | |
"##### 5.4.2. Geração de agregação de citações recebidas (cited_forms)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "3ffaa387", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"for sj in scielo_journals:\n", | |
" citations_received_cited_forms(min_year, max_year, sj, issn_to_attrs, year_to_cited_issn_to_citations)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "870e410d", | |
"metadata": {}, | |
"source": [ | |
"#### 5.5. Citações concecidas (count)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "9586259a", | |
"metadata": {}, | |
"source": [ | |
"##### 5.5.1. Função de agregação de citações concedidas (count)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "316c071c", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def citations_granted_count(min_year, max_year, main_issn, issn_to_attrs, year_to_citing_issn_to_citations, save_to_disk=True):\n", | |
" all_data = {}\n", | |
"\n", | |
" for y in range(min_year, max_year + 1):\n", | |
" year = str(y)\n", | |
" std_data = {}\n", | |
"\n", | |
" for c in year_to_citing_issn_to_citations.get(year, {}).get(main_issn, []):\n", | |
" cited_issn = c.get('cited_issnl', '')\n", | |
" cited_issn_std = standardizer.journal_issn(cited_issn)\n", | |
" if cited_issn_std:\n", | |
" cited_issn_main = issn_to_attrs[cited_issn_std]['main_issn']\n", | |
" cited_journal_std = issn_to_attrs[cited_issn_std]['main_title']\n", | |
" else:\n", | |
" cited_issn_main = ''\n", | |
" cited_journal_std = standardizer.journal_title_for_deduplication(c.get('cited_journal').lower()).upper()\n", | |
"\n", | |
" if cited_issn_main or cited_journal_std:\n", | |
" key_cited_journal = (cited_issn_main, cited_journal_std)\n", | |
" if key_cited_journal not in std_data:\n", | |
" std_data[key_cited_journal] = {\n", | |
" 'Citações concedidas': 0,\n", | |
" }\n", | |
"\n", | |
" std_data[key_cited_journal]['Citações concedidas'] += 1\n", | |
"\n", | |
" if std_data:\n", | |
" df = pandas.DataFrame.from_dict(std_data, orient='index')\n", | |
" df.sort_values('Citações concedidas', ascending=False, inplace=True)\n", | |
"\n", | |
" if save_to_disk:\n", | |
" dir_results_issn = os.path.join(DIR_DATA_RESULTS, f'{main_issn}')\n", | |
" if not os.path.exists(dir_results_issn):\n", | |
" os.makedirs(dir_results_issn)\n", | |
" df.to_csv(os.path.join(dir_results_issn, f'{main_issn}_citations_granted_count_{year}.csv'), index_label=['ISSN', 'Título'])\n", | |
"\n", | |
" all_data[y] = std_data\n", | |
"\n", | |
" return all_data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "ee3eb545", | |
"metadata": {}, | |
"source": [ | |
"##### 5.5.2. Geração de agregação de citações concedidas (count)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "6c850d20", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"for sj in scielo_journals:\n", | |
" citations_granted_count(min_year, max_year, sj, issn_to_attrs, year_to_citing_issn_to_citations)" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3.9.7 ('scielo-cited-references')", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.9.7" | |
}, | |
"vscode": { | |
"interpreter": { | |
"hash": "fda8a88b6a134bc64e7f47eb787831199f0bdc9bd15c443221a5978bbdc2215d" | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment