Skip to main content

Lightweight WSPR analytics: DuckDB ingest + Streamlit dashboard.

Project description

📡 wspr-ai-lite

Lightweight WSPR analytics with DuckDB + Streamlit

Repository Workflow Staus

CI Made with Streamlit DuckDB pre-commit Docs

Python Package Publishing

PyPI version Python versions Publish License: MIT

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 !!
python pipelines/ingest.py --from 2014-07 --to 2014-07
  • Downloads compressed monthly CSVs (caches locally)
  • Normalizes into data/wspr.duckdb
  • Adds extra fields (band, reporter grid, tx grid)

3. Run the UI

streamlit run app/wspr_app.py

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:

pytest -q

Or via Makefile:

make test

🙌 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.1.8.tar.gz (25.8 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.1.8-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: wspr_ai_lite-0.1.8.tar.gz
  • Upload date:
  • Size: 25.8 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.1.8.tar.gz
Algorithm Hash digest
SHA256 443fdff57a0c6c046b2d636209b1b27fd171fee91209c3e9e71410e70cd07492
MD5 a3de1d0f8069f8892cc784f36e2abfe2
BLAKE2b-256 4f793b25e4721f9fb9676b172a5e7373c1e7848cdad48ade9d1ad7e110a1e84c

See more details on using hashes here.

Provenance

The following attestation bundles were made for wspr_ai_lite-0.1.8.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.1.8-py3-none-any.whl.

File metadata

  • Download URL: wspr_ai_lite-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 8.8 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.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 cd962c7c5a0f39a3753ca0a1f8551972a29c59a8f097d11467713f1902db4645
MD5 2e26c9c208c2af8ba9a2b6a9288c92a0
BLAKE2b-256 5f913735211c88ea1358b12b100f241d7cccef96f508a678935d8d05934da5ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for wspr_ai_lite-0.1.8-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