semvec/pypi-packages huggingface dataset:
pytoqlik 0.0.10
This lib allows you to integrate qlik with jupyter notebook.
Requires Python: >=3.6

![PTQ](https://i.imgur.com/0D4Qvkt.png)

# PyToQlik

PyToQlik is a library that allows you to integrate Qlik Desktop with Jupyter notebooks. With it you can:

* Open and edit a Qlik app inside a Jupyter notebook;
* Create a Qlik object with data from a pandas DataFrame data structure and/or;
* Import data from a Qlik object and create a pandas DataFrame to work with in Python.

# Latest Updates (24/jun/2021)

:star2: Just added some basic Qlik Cloud SaaS functionalities! :star2:

Be a more powerful data scientist by importing and extracting data from Qlik objects in Cloud applications inside your tenant! 

# Getting Started

For this library to work you might want to have a functioning Qlik Desktop App installed and running on your local machine, or, if using the Cloud version, you will need an API Key to your tenant. There are tutorials on here and on Qlik's website about API Keys. You will also find having the *pandas* library useful, and either a [Jupyter Notebook local server](https://jupyter.readthedocs.io/en/latest/running.html) or use something like [Google Colaboratory](https://colab.research.google.com/)


You can then download and install PyToQlik using:

**Installation**
```
pip install pytoqlik 
```

## Usage

### Example 1

**Creating a Qlik app and feeding it data**
```
from pytoqlik import Pytoqlik
import seaborn

df = seaborn.load_dataset('tips')  # df is just some example data provided by the seaborn library

p2q = Pytoqlik()
app = p2q.toQlik(df)
```

### Example 2

**Importing data from a Qlik object to Python**
```
from pytoqlik import Pytoqlik
import seaborn

df = seaborn.load_dataset('tips')  # df is just some example data provided by the seaborn library

p2q = Pytoqlik()
app = p2q.toQlik(df)
app.toPy('your ObjectID')
```

## Step by step guide
<img src="toPy.gif" />



# Documentation

PyToQlik current documentation can be found [HERE](docs/Documentation.md).



# Comprehensive Qlik Cloud tutorial

A case-study based tutorial has been developed and is available [HERE](docs/PyToQlik%20Cloud%20Tutorial.md).



# Features in development

## Connectivity
- Qlik Enterprise support
- Qlik Cloud robustness (easy-to-use embedding, more global functionality)

## Planned Functionality
- Data fetching based on dimension and measure names
- More robust embedding objects and sheets
- More robust script editing (appending and replacing)
- Object creation and manipulation via Python
- Auxiliary functions, app listing and object listing
- Task creation and managing
- ETL features in Python
sparse-graphs 0.0.2
Efficient Implementation of Sparse Graphs with Numpy

Dynamic Graphical Memory Implementation
=======================================

-  `planning.py <https://github.com/geyang/sparse_graph/blob/master/sg_specs/planning.md>`__ shows how to use this graph
   with graph_search.
-  `graph_sparsification.py <https://github.com/geyang/sparse_graph/blob/master/sg_specs/graph_sparsification.md>`__
   shows how to sparsify a graph
-  `batch_sparsification.py <https://github.com/geyang/sparse_graph/blob/master/sg_specs/batch_sparsification.md>`__
   efficiently sparsify a graph with as a batch
-  `incremental_api.py <https://github.com/geyang/sparse_graph/blob/master/specs/incremental_api.md>`__ shows how to
   extend with sparsity

Usage
-----

To instantiate a graph:

.. code-block:: python

   graph = AsymMesh(n=10_000, k=6, dim=2, img_dim=[2], kernel_fn=l2, embed_fn=id2D, d_max=20)

   graph.extend(xys, images=xys, meta=xys)
   graph.update_zs()
   graph.update_edges()

Most of the time it is better to enforce sparsity of the graph by only
adding new vertices when there is no existing vertex that is close-by.
The new dedupe API allows us to do this in a batch fashion:

.. code-block:: python

   spots = graph.dedupe(images=xys, r_min=r_min)
   xys = xys[spots]
   ds = graph.to_goal(zs_2=xys)
   if ds.size == 0:
       graph.extend(xys, images=xys, meta=xys)
   else:
       m = ds.min(axis=-1) >= r_min
       if m.sum() > 0:
           graph.extend(xys[m], images=xys[m], meta=xys[m])
       graph.update_edges()

+---------------------+--------------+--------------------------------+
| Dense               | Sparse       | Details                        |
+=====================+==============+================================+
| |dense_graph|       | |image1|     | 10x more edges in the dense    |
|                     |              | graph in comparison to the     |
|                     |              | sparse graph.                  |
+---------------------+--------------+--------------------------------+

To Experiment
-------------

Import this module in the method module.

.. |dense_graph| image:: figures/random_graph.png?raw=true
.. |image1| image:: figures/batch_graph.png?raw=true