Skip to main content

Lightweight WSPR analytics: DuckDB ingest + Streamlit dashboard.

Project description

📡 wspr-ai-lite

Lightweight WSPR analytics rendering tool employing DuckDB + Streamlit

Resources

Made with Streamlit DuckDB Docs License: MIT

Workflows and Packaging

CI pre-commit PyPI version Python versions Publish smoke

Explore Weak Signal Propagation Reporter (WSPR) data with an easy, local dashboard:

  • 📊 SNR distributions & monthly spot trends
  • 👂 Top reporters, most-heard TX stations
  • 🌍 Geographic spread & distance/DX analysis
  • 🔄 QSO-like reciprocal reports
  • ⏱ Hourly activity heatmaps & yearly unique counts
  • 🚀 Works on Windows, Linux, macOS — no heavy server required.

✨ Features

  • Local DuckDB storage with efficient ingest + caching
  • Streamlit UI for interactive exploration
  • Distance/DX analysis with Maidenhead grid conversion
  • QSO-like reciprocal finder with configurable time window
  • Ready-to-run on modest hardware

Quickstart

1. Clone & Setup

git clone git@github.com:KI7MT/wspr-ai-lite.git
cd wspr-ai-lite

# optional venv
python3 -m venv .venv && source .venv/bin/activate

pip install -r requirements.txt

2. Ingest Data

Fetch WSPRNet monthly archives and load them into DuckDB:

# adjust to whatever range you wish, but be reasonable !!
wspr-ai-lite ingest --from 2014-07 --to 2014-07 --db data/wspr.duckdb
  • Downloads compressed monthly CSVs (caches locally in .cache/)
  • Normalizes into data/wspr.duckdb
  • Adds extra fields (band, reporter grid, tx grid)

3. Run the UI

wspr-ai-lite ui --db data/wspr.duckdb --port 8501

Then open http://localhost:8501 in your browser.

Example Visualizations

  • SNR Distribution by Count
  • Monthly Spot Counts
  • Top Reporting Stations
  • Most Heard TX Stations
  • Geographic Spread (Unique Grids)
  • Distance Distribution + Longest DX
  • Best DX per Band
  • Activity by Hour × Month
  • TX/RX Balance and QSO Success Rate

Development

For contributors and developers:

  • docs/dev-setup.md --> Development setup guide
  • docs/testing.md --> Testing instructions (pytest + Makefile)
  • docs/troubleshooting.md --> Common issues & fixes
make setup-dev   # create venv and install deps
make ingest      # run ingest pipeline
make run         # launch Streamlit UI
make test        # run pytest suite

Testing

Run unit tests for ingest and utilities:

Makefile Usage

There is an extensive list of Makefile targets that simplify operations. See make help for a full list of available targets.

make help

# sample output

Available Make Targets
-------------------------------------------------------------------------------
build                Build PyPi Pyjon Package
clean                Clean temporary files, caches, local DBs, and MkDocs site/
dist-clean-all       Deep clean + remove smoke artifacts
distclean            More thorough clean: includes venv, packaging artifacts, temp dirs
docs-deploy          Deplot docs to hh-pages
docs-serve           Docs tasks (MkDocs)
ingest               Ingest a sample month (2014-07)
install-dev          Install dev dependencies (requirements-dev.txt)
install              Install runtime dependencies (requirements.txt)
lint-docs            Docstring checks: coverage (interrogate) + style (pydocstyle)
precommit-install    Install git pre-commit hooks
publish-test         Pulublish Package to PyPi Test Repository
publish              Pulublish Package to PyPi Production Repository
reset                Full reset: distclean + recreate venv + install deps + ingest sample
run                  Run Streamlit UI
setup-dev            Create venv, install dev deps, install pre-commit hooks
smoke-build          Build wheel+sdist for smoke test
smoke-clean          Remove smoke-test artifacts (venv + tmp DB)
smoke-ingest         Ingest a single month into a temporary DuckDB
smoke-install        Create isolated smoke venv and install the built wheel
smoke-test-pypi      Install from PyPI and run verify+ui-check
smoke-test           Full end-to-end smoke test
smoke-ui-check       Check UI presence and streamlit availability
smoke-verify         Verify the DuckDB contains rows
test                  Run pytest
venv                 Create Python virtual environment (.venv)

Acknowledgements

  • WSPRNet community for providing global weak-signal data
  • Joe Taylor, K1JT, and the WSJT-X Development Team
  • Contributors to DuckDB and Streamlit
  • Amateur radio operators worldwide who share spots and keep the network alive

Contributing

Pull requests are welcome! If you have feature ideas (e.g., new metrics, visualizations, or AI integrations), open an issue first to discuss.

Roadmap

  • Phase 1: wspr-ai-lite (this project)
  • Lightweight, local-only DuckDB + Streamlit dashboard
  • Phase 2: wspr-ai-analytics
  • Full analytics suite with ClickHouse, Grafana, AI Agents, and MCP integration
  • Designed for heavier infrastructure and richer analysis

📜 License

This project is licensed under the MIT License. Open and free for amateur radio and research use.

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

wspr_ai_lite-0.2.4.tar.gz (30.3 kB view details)

Uploaded Source

Built Distribution

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

wspr_ai_lite-0.2.4-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file wspr_ai_lite-0.2.4.tar.gz.

File metadata

  • Download URL: wspr_ai_lite-0.2.4.tar.gz
  • Upload date:
  • Size: 30.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for wspr_ai_lite-0.2.4.tar.gz
Algorithm Hash digest
SHA256 5db4134660123eab76df2111eb7166b110a5c90f7edb432913fa76a02f5931a6
MD5 4b86724c49e3f7db9ab86de9f68f00c4
BLAKE2b-256 7417c8316a0e7893dd449ae23c5ed12da789796e20a46b13bece8b31b5b01a1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for wspr_ai_lite-0.2.4.tar.gz:

Publisher: release.yml on KI7MT/wspr-ai-lite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wspr_ai_lite-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: wspr_ai_lite-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for wspr_ai_lite-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 451290c4865d9c32c6a78ccac70cd497d053f36fb0dbb66bbd02738b0e5c91ba
MD5 1e472d64bcfbf734efe52dd82238af1a
BLAKE2b-256 68d4cefada56de0cb8f4c5eb583c90223667d002cb66b4e1a3d71617add5d350

See more details on using hashes here.

Provenance

The following attestation bundles were made for wspr_ai_lite-0.2.4-py3-none-any.whl:

Publisher: release.yml on KI7MT/wspr-ai-lite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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