SkyRank: a unified toolkit for Skyline ranking, benchmarking, and visualization
SkyRank: a unified toolkit for Skyline ranking, benchmarking, and visualization - Published in JOSS (2026)
Science Score: 87.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
○codemeta.json file
-
○.zenodo.json file
-
✓DOI references
Found 4 DOI reference(s) in README and JOSS metadata -
✓Academic publication links
Links to: joss.theoj.org, zenodo.org -
○Academic email domains
-
○Institutional organization owner
-
✓JOSS paper metadata
Published in Journal of Open Source Software
Last synced: 16 days ago
·
JSON representation
Repository
Basic Info
- Host: GitHub
- Owner: Turlure-Nael-23018992
- License: mit
- Language: Python
- Default Branch: main
- Size: 30.8 MB
Statistics
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 7
- Releases: 3
Created about 1 year ago
· Last pushed 23 days ago
Metadata Files
Readme
Contributing
License
Code of conduct
Authors
README.rst
📦 SkyRank — Installation Guide
===============================
.. image:: https://joss.theoj.org/papers/5f3289355fa004bf243ef2533b3d2117/status.svg
:target: https://joss.theoj.org/papers/5f3289355fa004bf243ef2533b3d2117
:alt: JOSS status
.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.18936993.svg
:target: https://doi.org/10.5281/zenodo.18936993
:alt: Zenodo DOI
.. image:: https://img.shields.io/badge/version-v1.1.1-blue.svg
:alt: Version v1.1.1
SkyRank is an open-source benchmarking and visualization framework for multi-dimensional Skyline algorithms.
It provides a modular architecture to run, compare, and visualize advanced preference queries over large datasets.
✨ Features
----------
* **Multiple Algorithms**: Implementation of ``SkyIR``, ``RankSky``, ``CoSky``, and ``DP-IDP-DH`` (with dominance hierarchy).
* **Visual Exploration**: Built-in PyQt5 and Tkinter GUIs for 2D and 3D data visualization.
* **Flexible Data Inputs**: Supports Python dictionaries, JSON files, and SQLite databases.
* **Scientific Readiness**: Export tools to generate publication-ready LaTeX graphs.
* **High Accessibility**: Clean Python code with extensive documentation and minimal technical barriers for new researchers.
🚀 Minimal Working Example (MWE)
--------------------------------
A minimal working example has been incorporated to illustrate a comprehensive fundamental workflow.
SkyRank provides a unified ``App`` class that serves as the primary entry point for all algorithms.
To use it, you wrap your raw data in a **Data Object** (like ``DictObject``) and choose an algorithm.
.. note::
Make sure to run your scripts from the **root of the SkyRank project** (where this README is located) so that the Python imports (``Core``, ``Algorithms``, etc.) are resolved correctly.
.. code-block:: python
# Mandatory core import
from Core.App import App
# Algorithms: Choose the one you want to run
from Algorithms.SkyIR import SkyIR
from Algorithms.CoskySql import CoskySQL
# Data Objects: Choose the one matching your input format
from Utils.DataTypes.DictObject import DictObject
from Utils.DataTypes.JsonObject import JsonObject
# Preferences: Only required for Cosky and RankSky variants
from Utils.Preference import Preference
# --- Scenario 1: Quick Start with a Dictionary ---
# Basic ranking without specific column preferences
raw_data = {"P1": (10, 20), "P2": (5, 15), "P3": (20, 10)}
data = DictObject(raw_data)
app = App(data, SkyIR)
print(f"SkyIR execution: {app.execution_time}s")
print(app.result) # Simple formatted string: ID | Coords | Score
# --- Scenario 2: Preference-Based Ranking from JSON ---
# Advanced ranking where you specify MIN (lower is better) or MAX
data_json = JsonObject("Assets/AlgoExecution/JsonFiles/RTuples8.json")
prefs = [Preference.MIN, Preference.MAX, Preference.MIN]
app_advanced = App(data_json, CoskySQL, preferences=prefs)
print(f"\nCoskySQL execution: {app_advanced.execution_time}s")
print(app_advanced.result)
💡 Why Use Data Objects?
-----------------------
SkyRank uses wrapper classes (``DictObject``, ``JsonObject``, ``DbObject``) to provide a consistent interface to the ``App`` class. This abstraction allows the ``App`` to automatically handle file loading, database connections, and format conversions without you worrying about the underlying storage.
🔄 Switching Data Sources
-------------------------
Depending on where your data is stored, you only need to change the object passed to the ``App``:
* **From a JSON file**:
.. code-block:: python
from Utils.DataTypes.JsonObject import JsonObject
data = JsonObject("path/to/your_data.json")
app = App(data, SkyIR)
* **From a SQLite database**:
.. code-block:: python
from Utils.DataTypes.DbObject import DbObject
data = DbObject("path/to/database.db")
app = App(data, SkyIR)
*(Note: Databases must contain a table named 'Pokemon' with columns A1, A2, etc. See* `Data Formats Guide `_ *)*
🔧 App Parameters
----------------
The ``App`` constructor accepts several parameters to customize its behavior:
.. list-table::
:widths: 20 80
:header-rows: 1
* - Parameter
- Description
* - ``data``
- A ``DictObject``, ``JsonObject``, or ``DbObject`` instance.
* - ``algo``
- The algorithm class to run (e.g., ``SkyIR``, ``RankSky``, ``DpIdpDh``, ``CoskyAlgorithme``, ``CoskySQL``).
* - ``preferences``
- (Optional) A list of ``Preference.MIN`` or ``Preference.MAX`` for each dimension. Required for ``RankSky``, ``CoskySQL`` and ``CoskyAlgorithme``.
* - ``exporter``
- (Optional) An instance of an exporter (e.g., ``CsvExporter``) to automatically save results.
⚙️ Requirements
---------------
- Git installed
- Python 3.8 installed (https://www.python.org/downloads/release/python-380/)
- Internet connection
- (On Windows) Python launcher ``py``
📥 Clone the Repository with Submodules
---------------------------------------
SkyRank depends on nested Git submodules for external algorithms:
- ``external/BBS/`` → `BBS-Python-3.x- `__
- ``external/BBS/RTree/`` → `R-Tree-Python-3.x- `__
To clone the full project with all submodules in one step:
.. code-block:: bash
git clone --recurse-submodules https://github.com/Turlure-Nael-23018992/SkyRank.git
If you already cloned it without ``--recurse-submodules``, run:
.. code-block:: bash
git submodule update --init --recursive
🚀 Installation on Linux/macOS
------------------------------
Run the provided shell script:
.. code-block:: bash
chmod +x install.sh
./install.sh
This script will:
- Use ``python3.8`` to create a virtual environment in ``.venv``
- Install all dependencies
- Initialize Git submodules
- Make the ``skyrank-gui`` and ``skyrank-gui2`` commands available inside the virtual environment
�️ Troubleshooting & Common Failure Modes
-----------------------------------------
The following guide addresses common issues and technical "paper cuts" that may occur during setup or execution.
**1. ModuleNotFoundError (BBS or RTree)**
If you see an error related to missing modules inside ``external/``, it means the Git submodules were not correctly initialized. Run:
.. code-block:: bash
git submodule update --init --recursive
**2. GUI Dependencies (Linux)**
If you encounter ``ModuleNotFoundError: No module named '_tkinter'`` or PyQt5 library errors, install the missing system packages:
.. code-block:: bash
sudo apt update
sudo apt install python3-tk libxcb-cursor0
**3. Data Structure Errors**
SkyRank expects specific naming conventions for SQLite databases:
* The table must be named **'Pokemon'**.
* Numerical columns must be named **'A1', 'A2', 'A3', ...**.
* If your columns are named differently, the algorithm will fail to find the attributes.
* See the `Data Formats Guide `_ for details.
**4. Execution Time / Performance**
For very large datasets, algorithms like ``RankSky`` (which uses a square matrix for PageRank) may require significant memory.
If the application crashes or hangs, try using a smaller sample or a more pruning-efficient algorithm like ``CoskySQL``.
🐧 Installing on Ubuntu 23 and newer versions
---------------------------------------------
Ubuntu 23 and later no longer provide Python 3.8 in the default repositories.
If you try to run ``install.sh``, you may see an error saying **“Python 3.8 not found.”**
You have two simple options:
**Option 1 — Install Python 3.8 from deadsnakes PPA**
.. code-block:: bash
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.8 python3.8-venv python3.8-dev python3.8-distutils
Then create and activate a virtual environment:
.. code-block:: bash
python3.8 -m venv .venv
source .venv/bin/activate
bash install.sh
**Option 2 — Install Python 3.8 with pyenv (no system changes)**
.. code-block:: bash
curl https://pyenv.run | bash
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
pyenv install 3.8.18
pyenv local 3.8.18
python -m venv .venv
source .venv/bin/activate
bash install.sh
🚀 Installation on Windows
--------------------------
SkyRank provides an installation script that does everything for you:
1. Checks for Python 3.8
2. Creates ``.venv`` with CPython 3.8
3. Installs all dependencies
4. Initializes submodules
5. Exposes CLI commands: ``skyrank-gui``, ``skyrank-gui2``
To launch it:
.. code-block:: bash
install.bat
If you encounter a permissions issue, try running the terminal **as administrator**.
🧪 Manual Setup (Alternative)
-----------------------------
If you prefer setting it up manually:
On **Linux/macOS**:
.. code-block:: bash
python3.8 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
git submodule update --init --recursive
On **Windows**:
.. code-block:: bash
py -3.8 -m venv .venv
.\.venv\Scripts\activate
python -m ensurepip --upgrade
python -m pip install --upgrade pip
python -m pip install -e .
git submodule update --init --recursive
🏁 Usage
--------
Once installed, launch one of the interfaces:
On **Linux/macOS**:
.. code-block:: bash
source .venv/bin/activate
skyrank-gui # PyQt5 GUI with Skyline visualizations
skyrank-gui2 # Tkinter GUI (alternative interface)
skyrank-graph # LatexMaker (create your own graphs)
On **Windows**:
.. code-block:: bash
.\.venv\Scripts\activate
skyrank-gui # PyQt5 GUI with Skyline visualizations
skyrank-gui2 # Tkinter GUI (alternative interface)
skyrank-graph # LatexMaker (create your own graphs)
📂 Project Structure
--------------------
SkyRank is structured as a modular Python project relying on several Git repositories:
- `SkyRank-Client `_ serves as the main interface and execution environment for SkyRank, allowing it to be used as a Python API.
- `SkyRank `_ is the core backend containing the main algorithms (``dp-idp`` improved with dominance hierarchy, ``RankSky``, ``CoSky``, etc.), benchmarking tools, data handling modules, export systems, and UI apps.
- `BBS-Python-3.x- `_ is a dedicated submodule that implements the Branch-and-Bound Skyline (BBS) algorithm.
- `R-Tree-Python-3.x- `_ provides the spatial indexing structures used internally by BBS.
These repositories are embedded hierarchically:
::
SkyRank-Client
└── SkyRank
└── BBS-Python-3.x-
└── R-Tree-Python-3.x-
This structure enables clean separation of features, modular development, and reusability across different Skyline-related components.
📖 Documentation
----------------
The full Python documentation is available online via GitHub Pages:
https://turlure-nael-23018992.github.io/SkyRank/
The source files for the documentation are available in the repository:
`docs `_
For a step-by-step guide on using the graphical interface, see:
`GUI Usage Guide `_
🤝 Community Guidelines
----------------------
We welcome contributions from the community and encourage users to get involved in the development and improvement of SkyRank.
**Contributing**
Guidelines for contributing to the project (code, documentation, bug fixes, feature requests) are described in the
`CONTRIBUTING `_ file.
**Reporting issues**
Bugs, unexpected behavior, and feature requests can be reported via the GitHub issue tracker:
https://github.com/Turlure-Nael-23018992/SkyRank/issues
**Support and questions**
For general questions, usage help, or discussions, please open a GitHub issue with the *question* label.
This allows the discussion to remain public and useful to the community.
📄 License
----------
``SkyRank`` is a free software made available under the MIT License.
For details see the `LICENSE `_ file.
👥 Contributors
---------------
See the `AUTHORS.rst `_ file for a complete list of contributors to the project.
Owner
- Name: Turlure-Nael-23018992
- Login: Turlure-Nael-23018992
- Kind: user
- Repositories: 1
- Profile: https://github.com/Turlure-Nael-23018992
JOSS Publication
SkyRank: a unified toolkit for Skyline ranking, benchmarking, and visualization
Published
March 25, 2026
Volume 11, Issue 119, Page 8834
Authors
Tags
skyline multi-criteria decision making ranking information retrieval pagerankGitHub Events
Total
- Member event: 1
- Pull request event: 1
- Issues event: 4
- Issue comment event: 1
- Push event: 88
- Create event: 3
Last Year
- Member event: 1
- Pull request event: 1
- Issues event: 4
- Issue comment event: 1
- Push event: 88
- Create event: 3
Issues and Pull Requests
Last synced: about 1 month ago
All Time
- Total issues: 0
- Total pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Total issue authors: 0
- Total pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels
Dependencies
.github/workflows/draft-pdf.yml
actions
- actions/checkout v4 composite
- actions/upload-artifact v4 composite
- openjournals/openjournals-draft-action master composite
pyproject.toml
pypi
- GPUtil *
- PyQt5 ==5.15.10
- colorama *
- humanize *
- matplotlib ==3.5.3
- numpy ==1.22.4
- psutil *
- scikit-learn ==1.0.2
- tabulate *
requirements.txt
pypi
- GPUtil *
- PyQt5 *
- colorama *
- humanize *
- matplotlib *
- numpy *
- pillow *
- pip *
- psutil *
- scikit-learn *
- scipy *
- six *
- tabulate *
