Skip to content

Instantly share code, notes, and snippets.

@rafaelpezzuto
Created June 27, 2022 14:42
Show Gist options
  • Save rafaelpezzuto/ca58d32f7c996488f2604494b31a58c1 to your computer and use it in GitHub Desktop.
Save rafaelpezzuto/ca58d32f7c996488f2604494b31a58c1 to your computer and use it in GitHub Desktop.
Gera arquivos CSV de bibliometria
Display the source blob
Display the rendered blob
Raw
{
"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