Skip to main content

scientometric_tools

Biblioteca Python para processamento de dados bibliométricos exportados do Scopus e Web of Science (WoS). Desenvolvida para o projeto NBVIZ, mas projetada para uso independente em qualquer pipeline de análise cienciométrica.

pip install nbviz_scientometric_tools

Funcionalidades

  • Padronização e limpeza de dados do Scopus (.csv) e WoS (.txt)
  • Normalização de nomes de autores
  • Formatação de referências citadas
  • Remoção de duplicatas por DOI com preservação de registros sem DOI
  • Geração de contagens para visualizações (autores, keywords, fontes, anos)
  • Formatação de grafos de co-ocorrência (nós e arestas ponderadas)

Uso

Leitura e padronização

import scientometric_tools as st

# WoS (.txt)
wos = st.read_wos_file("savedrecs.txt")

# Scopus (.csv)
scopus = st.read_scopus_file("scopus.csv")

header_txt = [("AU",0),("TI",1),("PY",2),("SO",3),("DI",4),("AB",5),("DE",6),("CR",7)]
header_csv = [("Authors",0),("Title",1),("Year",2),("Source title",3),
              ("DOI",4),("Abstract",5),("Author Keywords",6),("References",7)]

wos    = st.keep_columns(wos, header_txt)
scopus = st.keep_columns(scopus, header_csv)

Processamento

# Processa WoS — normaliza autores, remove aspas de keywords e referências
wos_processed = st.process_wos_data(wos, header_txt)

# Processa Scopus — trata abstracts e formata referências citadas
scopus_processed = st.process_scopus_data(scopus, header_csv)

Merge de arquivos de mesma base

Se você possui vários arquivos exportados da mesma plataforma (por exemplo, múltiplos arquivos .csv da Scopus ou vários .txt da Web of Science) e deseja unificá-los de forma extremamente performática utilizando o motor Lazy do Polars:

import scientometric_tools as st

# 1. Carregue os arquivos na memória (modo Eager)
arquivos_scopus = ["scopus_part1.csv", "scopus_part2.csv", "scopus_part3.csv"]
dfs = [st.read_scopus_file(arq) for arq in arquivos_scopus]

# 2. Converta os DataFrames para LazyFrames para otimização de memória
lazy_frames = [df.lazy() for df in dfs]

# 3. Funde todas as bases de uma só vez de forma otimizada
# (Gera um LazyFrame unificado)
unificado_lazy = st.merge_same_database(lazy_frames)

# 4. Grave o resultado direto no disco usando sink_csv
# (Isso processa a fusão sem estourar a memória RAM do servidor/máquina)
unificado_lazy.sink_csv("scopus_completo.csv", separator=",")

Merge entre bases

wos_to_scopus = {
    "AU": "Authors", "TI": "Title", "PY": "Year",
    "SO": "Source title", "DI": "DOI", "AB": "Abstract",
    "DE": "Author Keywords", "CR": "References"
}

# Remove duplicatas por DOI, preserva registros sem DOI
# e aplica deduplicação final por título + ano
merged = st.merge_and_process(
    scopus_processed,
    wos_processed,
    mapping=wos_to_scopus,
    subset_cols=["Title", "Year"]
)

Contagens para gráficos

# Autores mais produtivos
authors = st.get_counts(merged, "Authors", "author")
# [{"author": "Silva J.", "count": 12}, ...]

# Keywords com múltiplos separadores
keywords = st.get_counts(merged, "Author Keywords", "keyword",
                         separators=[";", ",", " and "])
# [{"keyword": "bibliometrics", "count": 8}, ...]

# Fontes / periódicos
sources = st.get_counts(merged, "Source title", "source")

# Produção por ano
years = st.get_counts(merged, "Year", "year")

Grafo de co-ocorrência

# Gera nós e arestas ponderadas para visualização em rede
graph = st.graph_formatter(merged, "Authors")

# Estrutura retornada:
# {
#   "nodes": [{"data": {"id": "Silva J.", "label": "Silva J."}}, ...],
#   "edges": [{"data": {"source": "Silva J.", "target": "Costa M.", "weight": 5}}, ...]
# }

Referência da API

Função Descrição
read_wos_file(file) Lê o arquivo extraído da base de dados Web of Science
read_scopus_file(file) Lê o arquivo extraído da base de dados Scopus
keep_columns(df, columns) Seleciona colunas, normaliza strings e trata nulos
process_wos_data(df, header) Processa e padroniza dados do Web of Science
process_scopus_data(df, header) Processa e padroniza dados do Scopus
merge_same_database(lazyframes) Funde múltiplos LazyFrames da mesma base de dados de forma otimizada
merge_and_process(target, visitor, mapping, subset_cols) Merge entre bases com deduplicação por DOI
get_counts(df, column, output_key, separators) Contagem de termos para gráficos
graph_formatter(df, column, separators) Gera estrutura de grafo de coautoria ou co-ocorrência

Requisitos

  • Python 3.10+
  • polars
  • unidecode

Projeto

Desenvolvido por Leonardo Neves Bolfarini sob orientação do prof. Rafael Gutierres Castanha na Universidade de Marília (UNIMAR).

Metadata

Release files for nbviz-scientometric-tools 0.5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nbviz-scientometric-tools 0.5.2
File Size Uploaded Provenance Actions
nbviz_scientometric_tools-0.5.2.tar.gz 8.7 kB Without provenance Details for nbviz_scientometric_tools-0.5.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for nbviz-scientometric-tools 0.5.2
File Interpreter ABI Platform Actions
nbviz_scientometric_tools-0.5.2-py3-none-any.whl Python 3 none any Details for nbviz_scientometric_tools-0.5.2-py3-none-any.whl

Total release size: 17.2 kB

Release files / nbviz_scientometric_tools-0.5.2.tar.gz

Download URL nbviz_scientometric_tools-0.5.2.tar.gz
Size 8.7 kB
Tags Source
SHA-256 checksum
How to use checksums
a254d19a3083791960fb37aa68d02a22bec1b78cae0c862b81f1eaca65efba56
BLAKE2b-256 checksum
How to use checksums
3d1b82aeda179f9ee4815d7715f5ae793746a28cda78aa38f8a6a3cefea2944d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / nbviz_scientometric_tools-0.5.2-py3-none-any.whl

Download URL nbviz_scientometric_tools-0.5.2-py3-none-any.whl
Size 8.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
83f778ba3ec76adfd4b0927b22bf7ece6830fc69b6c77e3f8b7f329df22c02e6
BLAKE2b-256 checksum
How to use checksums
78f7c6cab058785db31d71ccac531c665f00e6ed372000c4c717e32e823f65f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for nbviz-scientometric-tools 0.5.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page