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).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nbviz_scientometric_tools-0.4.0.tar.gz.
File metadata
- Download URL: nbviz_scientometric_tools-0.4.0.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfa6dea36d9db017b5de729f3898a4005f88a56ae3242ba24e47f30fb4b79ae1
|
|
| MD5 |
33dfd4eb18bc0121cc2a0169c08562bf
|
|
| BLAKE2b-256 |
d0d7073d9112e96cfa2ee717eace85bc64807c5abc41877a3dcea56ec8c313a1
|
File details
Details for the file nbviz_scientometric_tools-0.4.0-py3-none-any.whl.
File metadata
- Download URL: nbviz_scientometric_tools-0.4.0-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
086773e869888fdc64e40b39aa226bb6de5869141e47e0390cba023784130264
|
|
| MD5 |
d643496c544d7193f00f271a2d58c008
|
|
| BLAKE2b-256 |
1b47ebff07e36db7f45ad2dd215a309b4677b65d85a61138eadea9255d8e2031
|