Library for extracting, normalizing and processing global financial and economic data — including market data from exchanges worldwide, regulatory filings, company fundamentals and historical quotes; optimized for high-performance storage and analysis (e.g., Parquet).
Project description
📊 Global-Data-Finance
Biblioteca Python profissional para extração e processamento de dados financeiros globais com arquitetura limpa e alto desempenho.
Documentação Oficial • Instalação • Quick Start • API Reference • Contribuir
🎯 Sobre
Global-Data-Finance é uma solução robusta e de alto desempenho para engenharia de dados financeiros. Projetada para desenvolvedores, cientistas de dados e analistas quantitativos, a biblioteca abstrai a complexidade de extrair e normalizar dados de fontes regulatórias (CVM) e de mercado (B3).
A API pública é deliberadamente estreita (apenas duas classes: FundamentalStocksDataCVM e HistoricalQuotesB3), e cada fonte de dados é implementada internamente em um layout plano de módulos nomeados por papel (core.py (ou modelos granulares), client.py, http.py, extract.py, errors.py). O resultado é código direto, fácil de ler e fácil de estender com uma nova fonte.
🌟 Por que escolher Global-Data-Finance?
- 🚀 Performance: Downloads assíncronos com
httpx[http2], retry/back-off exponencial próprio (core/utils/retry_strategy.py) e concorrência adaptativa monitorada por CPU/RAM (psutil). - 🛡️ Robustez: Validação de integridade após download, rollback atômico na extração e defesa contra path-traversal em paths sensíveis.
- 💾 Formato Colunar: Saída canônica em Parquet (via
pyarrow), pronto para Pandas/Polars. - 🧩 Layout Plano por Fonte: Adicionar uma fonte = criar uma pasta-irmã com 5–8 arquivos nomeados por papel. Sem cerimônia de Clean Architecture, sem ABCs sem polimorfismo real.
- ✨ Developer Experience: Type hints completos, logging estruturado, markers de teste estritos (
unit,integration,slow,asyncio).
✨ Funcionalidades
📈 Fontes de Dados Suportadas
| Fonte | Tipo de Dado | Detalhes | Status |
|---|---|---|---|
| CVM | Documentos Regulatórios | DFP, ITR, FRE, FCA, CGVN, VLMO, IPE | ✅ Produção |
| B3 | Cotações Históricas | Ações, ETFs, BDRs, Opções, Termo, Futuros | ✅ Produção |
⚙️ Destaques Técnicos
- Download Manager Assimétrico:
- Gerenciamento automático de concorrência.
- Backoff exponencial para falhas de rede.
- Validação de integridade de arquivos (ZIP/MD5).
- Processamento de Cotações (B3):
- Parser otimizado para arquivos posicionais legados.
- Modos de execução:
fast(in-memory) eslow(low-memory). - Filtragem avançada por tipo de ativo (Ações, Opções, etc.).
🚀 Instalação
Requer Python 3.12+.
Via Pip (consumir como dependência)
pip install globaldatafinance
Via uv (desenvolvimento)
uv é o gestor canônico do projeto. Para hackear localmente:
git clone https://github.com/jor0105/Global-Data-Finance.git
cd Global-Data-Finance
uv sync # cria .venv e instala todas as deps + dev deps
uv run pytest # testes
uv run pre-commit run --all-files # lint + typecheck + bandit + etc.
💡 Quick Start
1. Dados Fundamentais (CVM)
Baixe demonstrações financeiras (DFP, ITR) e formulários de referência de forma massiva e resiliente.
from globaldatafinance import FundamentalStocksDataCVM
import logging
# (Opcional) Configurar logging para ver o progresso detalhado
logging.basicConfig(level=logging.INFO)
# Inicializar cliente
cvm = FundamentalStocksDataCVM()
# Baixar e extrair automaticamente para Parquet
result = cvm.download(
destination_path="./dados_cvm",
list_docs=["DFP", "ITR"], # Tipos de documentos
initial_year=2023, # Ano inicial
last_year=2024, # Ano final
automatic_extractor=True # Converte ZIP -> Parquet
)
print(f"Downloads com sucesso: {result.success_count_downloads}")
2. Cotações Históricas (B3)
Processe a série histórica da B3, transformando arquivos de texto complexos em DataFrames prontos para análise.
from globaldatafinance import HistoricalQuotesB3
# Inicializar cliente
b3 = HistoricalQuotesB3()
# Extrair cotações de Ações e ETFs
result = b3.extract(
path_of_docs="./dados_brutos_b3", # Onde estão os ZIPs da B3 (COTAHIST_A2023.ZIP)
destination_path="./dados_processados",
assets_list=["ações", "etf"],
initial_year=2023,
processing_mode="fast" # Modo otimizado
)
print(f"Processamento concluído! Registros extraídos: {result['total_records']:,}")
print(f"Arquivo salvo em: {result['output_file']}")
3. Analisando os Dados
Os dados são salvos em formato Parquet, ideal para análise com Pandas ou Polars.
import pandas as pd
# Ler o arquivo gerado
df = pd.read_parquet("./dados_processados/cotahist_extracted.parquet")
# Analisar
print(df.head())
print(df.groupby("cod_negociacao")["preco_fechamento"].mean())
🏗️ Arquitetura
Duas camadas explícitas:
- Facade público (
application/) — superfície semver-relevante. Cada fonte é exposta por uma classe top-level (FundamentalStocksDataCVM,HistoricalQuotesB3) e um formatter dedicado. - Implementação por fonte (
brazil/<país>/<fonte>/) — layout plano de módulos nomeados por papel.
graph TD
User[Usuário / Script] --> Facade
subgraph "globaldatafinance"
Facade["Facade<br/>FundamentalStocksDataCVM<br/>HistoricalQuotesB3"]
Facade --> Source["Fonte (brazil/<país>/<fonte>/)<br/>módulos planos por papel<br/>(client.py, models.py, errors.py...)"]
Source --> Cross["Cross-cutting<br/>core/ (logging, config, retry, resource_monitor)<br/>macro_infra/ · macro_exceptions/"]
end
Source --> External[Web / File System / Parquet]
Estrutura de Diretórios
src/
└── globaldatafinance/
├── application/ # Facade público
│ ├── cvm_docs/fundamental_stocks_data.py
│ └── b3_docs/historical_quotes.py
├── brazil/
│ ├── cvm/
│ │ └── fundamental_stocks_data/ # ~7 módulos planos
│ │ ├── core.py · client.py · errors.py
│ │ ├── http.py · extract.py
│ │ └── download_validation.py · download_extraction.py
│ └── b3_data/
│ └── historical_quotes/ # ~11 módulos planos
│ ├── models.py · filesystem.py · assets.py · processing.py · years.py
│ ├── client.py · zip_reader.py · errors.py
│ ├── cotahist_parser.py
│ ├── parquet_writer/ # subpacote (writer/schema/streaming/...)
│ └── extraction_service/ # subpacote (service/batch_parser/...)
├── core/ # logging, config, retry, resource monitor
├── macro_infra/ # adapters HTTP/IO genéricos
└── macro_exceptions/ # exceções de base
Detalhes em docs/dev-guide/architecture.md e AGENTS.md.
📊 API Reference
FundamentalStocksDataCVM
Gerenciador de downloads de documentos da CVM.
| Método | Assinatura | Descrição |
|---|---|---|
download |
(destination_path: str, list_docs: list[str]=None, initial_year: int=None, last_year: int=None, automatic_extractor: bool=False) -> DownloadResultCVM |
Realiza o download e opcionalmente a extração dos documentos. |
async_download |
(destination_path: str, list_docs: list[str]=None, initial_year: int=None, last_year: int=None, automatic_extractor: bool=False) -> DownloadResultCVM |
Variante assíncrona do método download. |
get_available_docs |
() -> dict[str, str] |
Retorna lista de documentos disponíveis e suas descrições. |
get_available_years |
() -> AvailableYearsInfoCVM |
Retorna o intervalo de anos disponíveis para download. |
HistoricalQuotesB3
Extrator de cotações históricas da B3.
| Método | Assinatura | Descrição |
|---|---|---|
extract |
(path_of_docs: str, assets_list: list[str], initial_year: int=None, last_year: int=None, destination_path: str=None, output_filename: str="cotahist_extracted", processing_mode: str="fast", verbose: bool=True) -> ExtractionResultB3 |
Processa arquivos ZIP da B3 e gera um arquivo Parquet consolidado. |
extract_async |
(path_of_docs: str, assets_list: list[str], initial_year: int=None, last_year: int=None, destination_path: str=None, output_filename: str="cotahist_extracted", processing_mode: str="fast", verbose: bool=True) -> ExtractionResultB3 |
Variante assíncrona do método extract. |
get_available_assets |
() -> list[str] |
Retorna tipos de ativos suportados (ex: 'ações', 'opções'). |
get_available_years |
() -> dict[str, int] |
Retorna o intervalo de anos disponíveis para os dados históricos. |
🤝 Contribuindo
Contribuições são muito bem-vindas! Se você deseja adicionar novas fontes de dados, melhorar a performance ou corrigir bugs:
- Fork o projeto.
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature). - Implemente suas mudanças.
- Execute os testes e linters:
uv run pre-commit run --all-files uv run pytest
- Abra um Pull Request.
Consulte o Guia de Contribuição para mais detalhes.
📄 Licença
Este projeto é distribuído sob a licença Apache 2.0. Consulte o arquivo LICENSE para mais informações.
📞 Suporte e Contato
- Autor: Jordan Estralioto
- GitHub: @jor0105
- Email: estraliotojordan@gmail.com
- Issues: Reportar Bug
Project details
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 globaldatafinance-0.1.3.tar.gz.
File metadata
- Download URL: globaldatafinance-0.1.3.tar.gz
- Upload date:
- Size: 83.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd1b6bb42f460f5ed2bdfad5be04e26b255126282d5afa4c39fd3620bba0f3e1
|
|
| MD5 |
eba2b62e481790faff8791b38f82f979
|
|
| BLAKE2b-256 |
715ca8a8eef42f9105eb721c56866bb6ad849b3020495537da961dee8879b6eb
|
Provenance
The following attestation bundles were made for globaldatafinance-0.1.3.tar.gz:
Publisher:
publish.yml on jor0105/Global-Data-Finance
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
globaldatafinance-0.1.3.tar.gz -
Subject digest:
cd1b6bb42f460f5ed2bdfad5be04e26b255126282d5afa4c39fd3620bba0f3e1 - Sigstore transparency entry: 1649713885
- Sigstore integration time:
-
Permalink:
jor0105/Global-Data-Finance@25c96903a9263d7852450010e265bdffb0aa0e3b -
Branch / Tag:
refs/tags/0.1.3 - Owner: https://github.com/jor0105
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@25c96903a9263d7852450010e265bdffb0aa0e3b -
Trigger Event:
release
-
Statement type:
File details
Details for the file globaldatafinance-0.1.3-py3-none-any.whl.
File metadata
- Download URL: globaldatafinance-0.1.3-py3-none-any.whl
- Upload date:
- Size: 103.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1cd1118417c1e7df5535922a08ec1bdfae553a5b115732fe4a1204db6019136b
|
|
| MD5 |
de304814e798eaafd5cbcf6401143b32
|
|
| BLAKE2b-256 |
66d5ef93131777ab4a38874dedf968ec1b36ba2dcfd4d006885c9c5a573c68cc
|
Provenance
The following attestation bundles were made for globaldatafinance-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on jor0105/Global-Data-Finance
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
globaldatafinance-0.1.3-py3-none-any.whl -
Subject digest:
1cd1118417c1e7df5535922a08ec1bdfae553a5b115732fe4a1204db6019136b - Sigstore transparency entry: 1649713956
- Sigstore integration time:
-
Permalink:
jor0105/Global-Data-Finance@25c96903a9263d7852450010e265bdffb0aa0e3b -
Branch / Tag:
refs/tags/0.1.3 - Owner: https://github.com/jor0105
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@25c96903a9263d7852450010e265bdffb0aa0e3b -
Trigger Event:
release
-
Statement type: