luxin


Nameluxin JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryInteractive HTML tables with drill-down capabilities for exploring aggregated data
upload_time2025-10-09 21:48:29
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords dataframe visualization jupyter streamlit interactive drill-down
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Luxin

[![PyPI version](https://badge.fury.io/py/luxin.svg)](https://badge.fury.io/py/luxin)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Interactive HTML tables with drill-down capabilities for exploring aggregated data in Jupyter notebooks and Streamlit apps.

## Demo

<!-- Uncomment when demo.gif is created
![Luxin Demo](https://raw.githubusercontent.com/eddiethedean/luxin/master/assets/demo.gif)
-->

**Click on aggregated rows to instantly see the underlying detail data in an interactive side panel.**

Try it yourself: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/eddiethedean/luxin/master?filepath=examples/01_getting_started.ipynb)

## Overview

Luxin allows you to create interactive tables that let you click on aggregated rows to see the underlying detail data. Like the magical substance from the Lightbringer series that can be shaped and manipulated, Luxin helps you shape and explore your data at different levels of granularity.

## Features

- 🔍 **Drill-down exploration**: Click on aggregated rows to see source data
- 📊 **Automatic tracking**: TrackedDataFrame automatically tracks source rows during aggregations
- 🎯 **Manual API**: Link aggregated and detail data manually for any workflow
- 📓 **Jupyter support**: Works seamlessly in Jupyter notebooks
- 🚀 **Streamlit support**: Build interactive Streamlit apps
- 🎨 **Modern UI**: Clean, responsive interface with side panel display

## Installation

```bash
pip install luxin
```

For Streamlit support:
```bash
pip install luxin[streamlit]
```

For Polars support:
```bash
pip install luxin[polars]
```

## Quick Start

### Automatic Tracking

```python
from luxin import TrackedDataFrame
import pandas as pd

# Create a TrackedDataFrame
df = TrackedDataFrame({
    'category': ['A', 'A', 'B', 'B', 'C'],
    'sales': [100, 150, 200, 250, 300],
    'profit': [10, 15, 20, 25, 30]
})

# Aggregate data - tracking is automatic
agg = df.groupby(['category']).agg({'sales': 'sum', 'profit': 'sum'})

# Display with drill-down capability
agg.show_drill_table()
```

### Manual API

```python
from luxin import create_drill_table
import pandas as pd

# Your existing workflow
df = pd.DataFrame({
    'category': ['A', 'A', 'B', 'B', 'C'],
    'sales': [100, 150, 200, 250, 300],
    'profit': [10, 15, 20, 25, 30]
})

agg_df = df.groupby(['category']).sum()

# Create interactive drill-down table
create_drill_table(agg_df, df, groupby_cols=['category'])
```

## How It Works

When you aggregate data, Luxin tracks which source rows contribute to each aggregated row. When you click on a row in the displayed table, a side panel slides in showing all the detail rows that were aggregated to create that summary.

## Use Cases

- Exploring sales data by region, then drilling into individual transactions
- Analyzing error logs by error type, then viewing specific error instances
- Reviewing survey responses by category, then reading individual responses
- Investigating performance metrics by service, then examining individual requests

## Examples

Check out the interactive example notebooks:

- [Getting Started](examples/01_getting_started.ipynb) - Basic usage and introduction
- [Sales Analysis](examples/02_sales_analysis.ipynb) - Real-world sales data exploration
- [Multi-Column Grouping](examples/03_multi_column_groupby.ipynb) - Advanced grouping techniques

You can also run these examples interactively in your browser:

[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/eddiethedean/luxin/master?filepath=examples)

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

MIT License - see LICENSE file for details.


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "luxin",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "dataframe, visualization, jupyter, streamlit, interactive, drill-down",
    "author": null,
    "author_email": "Odos Matthews <odosmatthews@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/09/7b/3cc3cfd73605c311af43c707d4fea0f580a1d75e99ef862be92d208fd574/luxin-0.1.0.tar.gz",
    "platform": null,
    "description": "# Luxin\n\n[![PyPI version](https://badge.fury.io/py/luxin.svg)](https://badge.fury.io/py/luxin)\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nInteractive HTML tables with drill-down capabilities for exploring aggregated data in Jupyter notebooks and Streamlit apps.\n\n## Demo\n\n<!-- Uncomment when demo.gif is created\n![Luxin Demo](https://raw.githubusercontent.com/eddiethedean/luxin/master/assets/demo.gif)\n-->\n\n**Click on aggregated rows to instantly see the underlying detail data in an interactive side panel.**\n\nTry it yourself: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/eddiethedean/luxin/master?filepath=examples/01_getting_started.ipynb)\n\n## Overview\n\nLuxin allows you to create interactive tables that let you click on aggregated rows to see the underlying detail data. Like the magical substance from the Lightbringer series that can be shaped and manipulated, Luxin helps you shape and explore your data at different levels of granularity.\n\n## Features\n\n- \ud83d\udd0d **Drill-down exploration**: Click on aggregated rows to see source data\n- \ud83d\udcca **Automatic tracking**: TrackedDataFrame automatically tracks source rows during aggregations\n- \ud83c\udfaf **Manual API**: Link aggregated and detail data manually for any workflow\n- \ud83d\udcd3 **Jupyter support**: Works seamlessly in Jupyter notebooks\n- \ud83d\ude80 **Streamlit support**: Build interactive Streamlit apps\n- \ud83c\udfa8 **Modern UI**: Clean, responsive interface with side panel display\n\n## Installation\n\n```bash\npip install luxin\n```\n\nFor Streamlit support:\n```bash\npip install luxin[streamlit]\n```\n\nFor Polars support:\n```bash\npip install luxin[polars]\n```\n\n## Quick Start\n\n### Automatic Tracking\n\n```python\nfrom luxin import TrackedDataFrame\nimport pandas as pd\n\n# Create a TrackedDataFrame\ndf = TrackedDataFrame({\n    'category': ['A', 'A', 'B', 'B', 'C'],\n    'sales': [100, 150, 200, 250, 300],\n    'profit': [10, 15, 20, 25, 30]\n})\n\n# Aggregate data - tracking is automatic\nagg = df.groupby(['category']).agg({'sales': 'sum', 'profit': 'sum'})\n\n# Display with drill-down capability\nagg.show_drill_table()\n```\n\n### Manual API\n\n```python\nfrom luxin import create_drill_table\nimport pandas as pd\n\n# Your existing workflow\ndf = pd.DataFrame({\n    'category': ['A', 'A', 'B', 'B', 'C'],\n    'sales': [100, 150, 200, 250, 300],\n    'profit': [10, 15, 20, 25, 30]\n})\n\nagg_df = df.groupby(['category']).sum()\n\n# Create interactive drill-down table\ncreate_drill_table(agg_df, df, groupby_cols=['category'])\n```\n\n## How It Works\n\nWhen you aggregate data, Luxin tracks which source rows contribute to each aggregated row. When you click on a row in the displayed table, a side panel slides in showing all the detail rows that were aggregated to create that summary.\n\n## Use Cases\n\n- Exploring sales data by region, then drilling into individual transactions\n- Analyzing error logs by error type, then viewing specific error instances\n- Reviewing survey responses by category, then reading individual responses\n- Investigating performance metrics by service, then examining individual requests\n\n## Examples\n\nCheck out the interactive example notebooks:\n\n- [Getting Started](examples/01_getting_started.ipynb) - Basic usage and introduction\n- [Sales Analysis](examples/02_sales_analysis.ipynb) - Real-world sales data exploration\n- [Multi-Column Grouping](examples/03_multi_column_groupby.ipynb) - Advanced grouping techniques\n\nYou can also run these examples interactively in your browser:\n\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/eddiethedean/luxin/master?filepath=examples)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT License - see LICENSE file for details.\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Interactive HTML tables with drill-down capabilities for exploring aggregated data",
    "version": "0.1.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/eddiethedean/luxin/issues",
        "Homepage": "https://github.com/eddiethedean/luxin",
        "Repository": "https://github.com/eddiethedean/luxin"
    },
    "split_keywords": [
        "dataframe",
        " visualization",
        " jupyter",
        " streamlit",
        " interactive",
        " drill-down"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d538eb3ce9fa37c0a58b76cf2e1a27ee1b8a0d1ada9b5388adf9ebe5e78c2162",
                "md5": "e8cc76c8107696bc53d690bbc25f1246",
                "sha256": "086610f8c33646af31e86ee57d98b9db2c5204f1a5e5f0e790a5b344e34e3e0e"
            },
            "downloads": -1,
            "filename": "luxin-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e8cc76c8107696bc53d690bbc25f1246",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 12801,
            "upload_time": "2025-10-09T21:48:28",
            "upload_time_iso_8601": "2025-10-09T21:48:28.827428Z",
            "url": "https://files.pythonhosted.org/packages/d5/38/eb3ce9fa37c0a58b76cf2e1a27ee1b8a0d1ada9b5388adf9ebe5e78c2162/luxin-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "097b3cc3cfd73605c311af43c707d4fea0f580a1d75e99ef862be92d208fd574",
                "md5": "df38ea69688c1528194770ff82b6ff6a",
                "sha256": "03d28cf047f581619a5c641510f28f55ad6fba452cb5285bd1bd65318e6602a1"
            },
            "downloads": -1,
            "filename": "luxin-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "df38ea69688c1528194770ff82b6ff6a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 13483,
            "upload_time": "2025-10-09T21:48:29",
            "upload_time_iso_8601": "2025-10-09T21:48:29.816036Z",
            "url": "https://files.pythonhosted.org/packages/09/7b/3cc3cfd73605c311af43c707d4fea0f580a1d75e99ef862be92d208fd574/luxin-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-09 21:48:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "eddiethedean",
    "github_project": "luxin",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "luxin"
}
        
Elapsed time: 3.31963s