Giter Club home page Giter Club logo

jaal's Introduction

jaal logo

PyPI PyPI dm Join the chat at https://gitter.im/imm-jaal/community GitHub GitHub Repo stars

Your interactive network visualizing dashboard

Documentation: Here

๐Ÿ‘‰ What is Jaal

Jaal is a python based interactive network visualizing tool built using Dash and Visdcc. Along with the basic features, Jaal also provides multiple option to play with the network data such as searching graph, filtering and even coloring nodes and edges in the graph. And all of this within 2 lines of codes :)

๐Ÿ‘‰ Requirements

Jaal requires following python packages,

  1. Dash
    • dash_core_components
    • dash_html_components
  2. dash_bootstrap_components
  3. visdcc
  4. pandas

๐Ÿ‘‰ Install

Installing Jaal is super easy, just do the following,

pip install jaal

And you are done :)

Note, it's recommended to create a virtual enivornment before installing. This can be easily done using python -m venv myenv and then to activate the env we need,

  1. (Windows) .\\myvenv\\Scripts\\activate.bat
  2. (Linux) source myvenv/bin/activate

๐Ÿ‘‰ Getting started

After installing Jaal, we need to fetch the data and call plot function in Jaal. This can be shown by playing with an included Game of Thrones dataset, as follows,

# import
from jaal import Jaal
from jaal.datasets import load_got
# load the data
edge_df, node_df = load_got()
# init Jaal and run server
Jaal(edge_df, node_df).plot()

Here first we import Jaal main class and the dataset loading function load_got. Later we load the GoT dataset from the datasets included in the package. This gives us two files,

  1. edge_df: its a pandas dataframe with atleast from and to column, which represents the edge relationship between the entities
  2. node_df: its an optional parameter, but should contains a id column with unique node names.

Note, edge_df is mandatory and node_df is optional. Also we can include additional columns in these files which are automatically considered as edge or node features respectively.

After running the plot, the console will prompt the default localhost address (127.0.0.1:8050) where Jaal is running. Access it to see the following dashboard,

dashboard

๐Ÿ‘‰ Features

At present, the dashboard consist of following sections,

  1. Setting panel: here we can play with the graph data, it further contain following sections:
    • Search: can be used to find a node in graph
    • Filter: supports pandas query language and can be used to filter the graph data based on nodes or edge features.
    • Color: can be used to color nodes or edges based on their categorical features. Note, currently only features with at max 20 cardinality are supported.
    • Size: can be used to size nodes or edges based on their numerical features.
  2. Graph: the network graph in all its glory :)

๐Ÿ‘‰ Examples

1. Searching

dashboard

2. Filtering

dashboard

3. Coloring

dashboard

4. Size

dashboard

๐Ÿ‘‰ Extra settings

Display edge label

To display labels over edges, we need to add a label attribute (column) in the edge_df. Also, it has to be in string format. For example, using the GoT dataset, by adding the following line before the Jaal call, we can display the edge labels.

# add edge labels
edge_df.loc[:, 'label'] = edge_df.loc[:, 'weight'].astype(str)

Directed edges

By default, Jaal plot undirected edges. This setting can be changed by,

Jaal(edge_df, node_df).plot(directed=True)

Using vis.js settings

We can tweak any of the vis.js related network visualization settings. An example is,

# init Jaal and run server
Jaal(edge_df, node_df).plot(vis_opts={'height': '600px', # change height
                                      'interaction':{'hover': True}, # turn on-off the hover 
                                      'physics':{'stabilization':{'iterations': 100}}}) # define the convergence iteration of network

For a complete list of settings, visit vis.js website.

Using gunicorn

We can host Jaal on production level HTTP server using gunicorn by first creating the app file (jaal_app.py),

# import
from jaal import Jaal
from jaal.datasets import load_got
# load the data
edge_df, node_df = load_got()
# create the app and server
app = Jaal(edge_df, node_df).create()
server = app.server

then from the command line, start the server by,

gunicorn jaal_app:server

Note, Jaal.create() takes directed and vis_opts as arguments. (same as Jaal.plot() except the host and port arguments)

๐Ÿ‘‰ Common Problems

Port related issue

If you are facing port related issue, please try the following way to run Jaal. It will try different ports, until an empty one is found.

port=8050
while True:
    try:
        Jaal(edge_df, node_df).plot(port=port)
    except:
        port+=1

๐Ÿ‘‰ Issue tracker

Please report any bug or feature idea using Jaal issue tracker: https://github.com/imohitmayank/jaal/issues

๐Ÿ‘‰ Collaboration

Any type of collaboration is appreciated. It could be testing, development, documentation and other tasks that is useful to the project. Feel free to connect with me regarding this.

๐Ÿ‘‰ Contact

You can connect with me on LinkedIn or mail me at [email protected].

๐Ÿ‘‰ License

Jaal is licensed under the terms of the MIT License (see the file LICENSE).

jaal's People

Contributors

gitter-badger avatar imohitmayank avatar olshansk avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.