Metadata-Version: 2.1
Name: VisCARS
Version: 1.0.1
Summary: VisCARS: Knowledge Graph-based Context-Aware Recommender System for Visualizations
Home-page: https://github.com/predict-idlab/VisCARS
Keywords: recommender system,visualizations,context-aware
Author: Pieter Moens
Author-email: pieter.moens@ugent.be
Requires-Python: >=3.9,<4.0
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Requires-Dist: fast-pagerank (>=0.0.4,<0.0.5)
Requires-Dist: matplotlib (>=3.4.2,<4.0.0)
Requires-Dist: networkx (>=2.6.3,<3.0.0)
Requires-Dist: numpy (>=1.20.2,<2.0.0)
Requires-Dist: pandas (>=2.2.0,<3.0.0)
Requires-Dist: pyrdf2vec (>=0.2.3,<0.3.0)
Requires-Dist: rdflib (>=6.0.2,<7.0.0)
Requires-Dist: scikit-learn (>=0.24.2,<0.25.0) ; python_version >= "3.9"
Project-URL: Documentation, https://github.com/predict-idlab/VisCARS
Project-URL: Repository, https://github.com/predict-idlab/VisCARS
Description-Content-Type: text/markdown

# VisCARS: Graph-Based Context-Aware Visualization Recommendation System

![version](https://img.shields.io/pypi/v/viscars)

## Installation

Create a virtual environment using `virtualenv` or `anaconda3`:
```
conda create -n myenv python=3.9
conda activate myenv
```

Install the latest version from PyPI in your environment:
```
pip install viscars
```

## Basic usage

Load the dataset
```python
from rdflib import Graph

graph_ = Graph()
graph_.parse('../data/protego/protego_ddashboard.ttl')
graph_.parse('../data/protego/protego_zplus.ttl')
graph_.parse('../data/protego/visualizations.ttl')
```

Initialize the two-stage recommendation pipeline
```python
from viscars.dao import ContentRecommenderDAO, VisualizationRecommenderDAO
from viscars.recommenders.cacf import ContextAwareCollaborativeFiltering

# Initialize Content Recommender (stage 1)
content_dao = ContentRecommenderDAO(graph_)
content_recommender = ContextAwareCollaborativeFiltering(content_dao, cbcf_w=0.5, ubcf_w=0.5, verbose=False)

# Initialize Visualization Recommender (stage 2)
vis_dao = VisualizationRecommenderDAO(graph_)
visualization_recommender = ContextAwareCollaborativeFiltering(vis_dao, ubcf_w=1, verbose=False)
```

Run the pipeline for a user and context
```python
# user = 'https://dynamicdashboard.ilabt.imec.be/users/4'  # Operator
user = 'https://dynamicdashboard.ilabt.imec.be/users/5'  # Nurse

context = 'http://example.com/tx/patients/zplus_6'  # Diabetes

content_recommendations = content_recommender.predict(user, context, k=5)

# Find cutoff for Multiple-View recommendation
# We recommend the top x items, where x is the average number of items rated by users in the context
ratings = content_dao.ratings[(content_dao.ratings['c_id'] == context)]
c = int(ratings.value_counts('u_id').mean())

visualization_recommendations = []
for recommendation in content_recommendations[:c]:
    # Recommend visualizations
    recommendations = visualization_recommender.predict(user, recommendation['itemId'], k=5)
    visualization_recommendations.append({'propertyId': recommendation['itemId'], 'visualizationId': recommendations[0]['itemId']})
```

Example output

| propertyId                                                                                                            | visualizationId                                                                  |
|-----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| .../things/zplus_6.lifestyle/properties/enriched-call                                                         | .../things/visualizations/enriched-call                                   |
| .../things/zplus_6.60%3A77%3A71%3A7D%3A93%3AD7%2Fservice0009/properties/org.dyamand.types.health.GlucoseLevel | .../things/visualizations/time-series-line-chart-with-time-range-selector |
| .../things/zplus_6.AQURA_10_10_145_9/properties/org.dyamand.aqura.AquraLocationState_Protego%20User           | .../things/visualizations/scrolling-table                                 |




## Citation

