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.1

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.1
File Size Uploaded Provenance Actions
nbviz_scientometric_tools-0.5.1.tar.gz 8.7 kB Without provenance Details for nbviz_scientometric_tools-0.5.1.tar.gz

Built distribution (wheel)

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

Total release size: 17.2 kB

Release files / nbviz_scientometric_tools-0.5.1.tar.gz

Download URL nbviz_scientometric_tools-0.5.1.tar.gz
Size 8.7 kB
Tags Source
SHA-256 checksum
How to use checksums
a2394f9ed1beb41c2e7b4c2b3ed753627514f81a0228fd27e1bd82c6198f16eb
BLAKE2b-256 checksum
How to use checksums
48ade034e8247945736fe79b531c955018f131984a6a7e3057b9bd517d983360
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.1-py3-none-any.whl

Download URL nbviz_scientometric_tools-0.5.1-py3-none-any.whl
Size 8.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2af090cd0f7e24a903db14a696ac35820d041b9b0d85fd764a0b934e6e80a4ec
BLAKE2b-256 checksum
How to use checksums
27a44fd6986851ae02419f4ab208c6285c3f4664b5446d6f55e490adc0ba270d
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.1

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