Skip to main content

A Python package for working with Quantec EasyData.

Project description

Quantec

A Python package for working with Quantec EasyData API. Fetch economic time series data with support for caching and advanced filtering.

⚠️ Early Development Notice: This package is in early development and may undergo breaking changes without backwards compatibility until version 1.0 is reached.

Features

  • 🎯 Multiple Data Access: Time series codes, selections, and grid/pivot data
  • 📊 Format Support: CSV for time series, CSV/Parquet for grid data
  • 📈 Multiple Frequencies: Monthly (M), Quarterly (Q), and Annual (A) frequencies
  • 🔍 Advanced Filtering: Dimension-based filtering for grid data
  • Performance Caching: Optional caching for grid data
  • 🛡️ Error Handling: Comprehensive network and API error handling
  • 🔧 Flexible Configuration: Environment variables and parameter setup

Installation

pip install quantec

Quick Start

from quantec.easydata.client import Client

# Initialize client
client = Client()

# Get time series data (CSV format only)
data = client.get_data(time_series_codes="NMS-EC_BUS,NMS-GA_BUS")
print(data.head())

Configuration

Environment Variables

export EASYDATA_API_KEY="your-api-key-here"
export EASYDATA_API_URL="https://www.easydata.co.za/api/v3/"

Client Options

from quantec.easydata.client import Client

# Basic client (uses environment variables)
client = Client()

# With caching enabled
client = Client(
    use_cache=True,          # Enable caching for grid data
    cache_dir="./cache"      # Cache directory path
)

Time Series Data

Direct Access with Codes

# Single time series
data = client.get_data(time_series_codes="NMS-EC_BUS")

# Multiple time series
data = client.get_data(time_series_codes="NMS-EC_BUS,NMS-GA_BUS")

# With date filtering and frequency
data = client.get_data(
    time_series_codes="NMS-EC_BUS,NMS-GA_BUS",
    freq="Q",           # Quarterly data
    start_year="2020",  # Year format only
    end_year="2023"
)

Discovery-Based Access

# Find available selections
selections = client.get_selections(status="PSO")  # Private, Shared, Open

# Extract selections list (format depends on response)
if isinstance(selections, dict) and "selections" in selections:
    selections_list = selections["selections"]
else:
    selections_list = selections

# Use selection for data retrieval
if len(selections_list) > 0:
    selection = selections_list[0]
    data = client.get_data(selection_pk=selection['pk'])

Grid/Pivot Data

Basic Grid Data Access

# Get available recipes
recipes = client.get_recipes()

# Basic grid data retrieval
if len(recipes) > 0:
    recipe_id = recipes[0]['id']
    grid_data = client.get_grid_data(recipe_pk=recipe_id)

Grid Data with Filtering

# Filter by dimension levels only
filters = {"dimension": "d3", "levels": [2], "codes": []}
grid_data = client.get_grid_data(recipe_pk=53, selectdimensionnodes=filters)

# Filter by levels and specific codes
filters = {"dimension": "d3", "levels": [1], "codes": ["TRD01-R_FI"]}
grid_data = client.get_grid_data(recipe_pk=53, selectdimensionnodes=filters)

Format Options (CSV/Parquet only)

# CSV format (default)
csv_data = client.get_grid_data(recipe_pk=53, resp_format="csv")

# Parquet format (recommended for large datasets)
parquet_data = client.get_grid_data(recipe_pk=53, resp_format="parquet")

Caching (Grid Data Only)

# Initialize client with caching
cached_client = Client(use_cache=True, cache_dir="./cache")

# First call - fetches from API and caches
grid_data = cached_client.get_grid_data(recipe_pk=53)

# Subsequent calls - loads from cache (faster)
grid_data = cached_client.get_grid_data(recipe_pk=53)

Error Handling

import requests
from quantec.easydata.client import Client

client = Client()

try:
    data = client.get_data(time_series_codes="INVALID_CODE")
except requests.HTTPError as e:
    print(f"API Error: {e}")
except ValueError as e:
    print(f"Parameter Error: {e}")

Complete Example

from quantec.easydata.client import Client

# Initialize client with caching
client = Client(use_cache=True, cache_dir="./cache")

# 1. Get time series data
ts_data = client.get_data(
    time_series_codes="NMS-EC_BUS,NMS-GA_BUS",
    freq="Q",
    start_year="2020"
)

# 2. Get available recipes and grid data
recipes = client.get_recipes()
if len(recipes) > 0:
    grid_data = client.get_grid_data(
        recipe_pk=recipes[0]['id'],
        resp_format="parquet"
    )

# 3. Get selections for discovery
selections = client.get_selections(status="PSO")

Important Notes

  • Time series data: Only supports CSV format
  • Grid data: Only supports CSV and Parquet formats (no JSON)
  • Date parameters: Use year format only (e.g., "2020", not "2020-01-01")
  • Caching: Only available for grid data
  • Dimension filtering: Must provide at least one of: codes, levels, children, or children_include_self

License

MIT License - see the LICENSE file for details.

Support

For support, contact Quantec

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

quantec-0.2.0.tar.gz (92.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quantec-0.2.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file quantec-0.2.0.tar.gz.

File metadata

  • Download URL: quantec-0.2.0.tar.gz
  • Upload date:
  • Size: 92.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.8

File hashes

Hashes for quantec-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b19bf5ad2f10ba5415d0f3a830bb4bf5fd5d262c0dbd10e94d04cffce04d3954
MD5 34244796edbbe72148cab2ecd54913be
BLAKE2b-256 c357c016003f31c897793d26c17347e635e23152ed25dbe4e3f3aaa593ad7cdc

See more details on using hashes here.

File details

Details for the file quantec-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: quantec-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.8

File hashes

Hashes for quantec-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4063381a630bc1b1cc1a082cb2f74c7ad5e5a4c769123d7311ee5d729dc58c58
MD5 6a7c2a6907890a6b4663727dd4aa80df
BLAKE2b-256 dee5b5630afa1bf3d0f11559afeb3e6bcb2f63be922661cd86c7c309d42f4197

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page