IPython-Dashboard

An stand alone, light-weight web server for building, sharing graphs in created in ipython. Let ipython do what it focus, let this do what everyone needs for building a interactive, collaborated and real-time streaming dashboards.


Keywords
ipython, dashboard, interactive, visualization, data, science, analysis, streaming, data-science, ipython-dashboard, notebook
License
BSD-3-Clause
Install
pip install IPython-Dashboard==0.1.5

Documentation

build status Documentation Status coverage PyPI Version Downloads

Inspired by IPython, built with love

IPython-Dashboard

A stand alone, light-weight web server for building, sharing graphs created in IPython. Build for data science, data analysis guys. Aiming at building an interactive visualization, collaborated dashboard, and real-time streaming graph.

Screenshot and Demo

Demo on Youtube
Demo on Youku

screenshot

screenshot

screenshot

screenshot

screenshot

screenshot

Usage

  • Install prerequisite

    • install the latest stable IPython-Dashboard: pip install ipython-dashboard --upgrade
    • install redis 2.6+ : install guide
    • [option, if you need run sql]install mysql : brew install mysql or apt-get install mysql
    • install IPython-Dashboard requirements [unneeded sometimes]:
      • cd ~/your python package path/IPython-Dashboard
      • pip install -r requirements.txt
  • [option, if you need run sql]Config mysql

    • start mysql server : mysql.server start

    • login in mysql using root : mysql -u root

    • create a user and grant privileges;

      • take a look at current database user
      mysql> SELECT User,Host FROM mysql.user;
      +------+-----------+
      | User | Host      |
      +------+-----------+
      | root | 127.0.0.1 |
      | root | ::1       |
      |      | localhost |
      | root | localhost |
      |      | mac007    |
      | root | mac007    |
      +------+-----------+
      6 rows in set (0.00 sec)
      
      • create a user for IPython-Dashboard
      mysql> create user 'ipd'@'localhost' identified by 'thanks';
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> grant all privileges on *.* to ipd@localhost;
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> SELECT User,Host FROM mysql.user;
      +------+-----------+
      | User | Host      |
      +------+-----------+
      | root | 127.0.0.1 |
      | root | ::1       |
      |      | localhost |
      | ipd  | localhost |
      | root | localhost |
      |      | mac007    |
      | root | mac007    |
      +------+-----------+
      7 rows in set (0.00 sec)
      
      mysql> flush privileges;
      Query OK, 0 rows affected (0.00 sec)
      
    • create tables;

      nosetests -s dashboard.tests.testCreateData:test_create_mysql_data
      
  • Create logging path

    • create a folder to store log files. I put it under mnt currently: /mnt/ipython-dashboard/logs
    • make sure the log folder is write-able, using chmod and ls -l to confirm.
    chenshan@mac007:/mnt/ipython-dashboard$ls -l
    total 0
    drwxrwxrwx  9 root  wheel  306 Dec 15 22:09 logs
    
  • Config IPython-Dashboard server : IPython-Dashboard/dashboard/config.py

    • app_host='ip_address:port'
  • Start redis and IPython-Dashboard server

    chenshan@mac007:~/Desktop/github/IPython-Dashboard$redis-server &
    
    chenshan@mac007:~/Desktop/github/IPython-Dashboard$dash-server --help
    usage: dash-server [-h] [-H HOST] [-p PORT] [-d DEBUG]
    
    Start your IPython-Dashboard server ...
    
    optional arguments:
      -h, --help            show this help message and exit
      -H HOST, --host HOST  server host, default localhost
      -p PORT, --port PORT  server port, default 9090
      -d DEBUG, --debug DEBUG
                            server port, default true
    
    chenshan@mac007:~/Desktop/github/IPython-Dashboard$dash-server
    Namespace(debug=True, host='0.0.0.0', port=9090)
     * Running on http://0.0.0.0:9090/
     * Restarting with reloader
    Namespace(debug=True, host='0.0.0.0', port=9090)
    
  • Do your exploring

Goal

  • support raw html visualization
  • support python object visualization
  • Editable
  • Real-time fresh when rendering a variable python object
  • Can be shared, both public and private [ need password ]
  • In the notebook, can share an object to a dashboard [ that's visualize that object in that dashboard ]

Use Case

  • exploring in notebook, share/send the result/summary to people, without the details.
  • share some data in a private notebook.
  • disappointed with the complicated code when drawing a graceful/staic graph using matplotlib/seaborn/mpld3 etc.
  • want an interactive graph, allow people to zoom in/out, resize, get hover tips, change graph type easily.
  • want a real-time graph.
  • want an collaborated graph/dashboard.

wise-choice

Run tests

just run sudo nosetests --with-coverage --cover-package=dashboard under this repo

taotao@mac007:~/Desktop/github/IPython-Dashboard$sudo nosetests --with-coverage --cover-package=dashboard
Password:
../Users/chenshan/Desktop/github/IPython-Dashboard/dashboard/tests/testCreateData.py:69: Warning: Can't create database 'IPD_data'; database exists
  conn.cursor().execute('CREATE DATABASE IF NOT EXISTS {};'.format(config.sql_db))
/Users/chenshan/Desktop/github/IPython-Dashboard/dashboard/server/utils.py:135: Warning: Unknown table 'ipd_data.businesses'
  cursor.execute(sql)
/Library/Python/2.7/site-packages/pandas/io/sql.py:599: FutureWarning: The 'mysql' flavor with DBAPI connection is deprecated and will be removed in future versions. MySQL will be further supported with SQLAlchemy engines.
  warnings.warn(_MYSQL_WARNING, FutureWarning)
...
Name                                    Stmts   Miss  Cover   Missing
---------------------------------------------------------------------
dashboard.py                               13      0   100%
dashboard/client.py                         1      0   100%
dashboard/client/sender.py                 11      3    73%   26-27, 33
dashboard/conf.py                           0      0   100%
dashboard/conf/config.py                   29      0   100%
dashboard/server.py                         0      0   100%
dashboard/server/resources.py               0      0   100%
dashboard/server/resources/dash.py         35     10    71%   36, 55-56, 67-69, 86-89
dashboard/server/resources/home.py         40     12    70%   25, 28-30, 83-91
dashboard/server/resources/sql.py          27     11    59%   30, 52-75
dashboard/server/resources/status.py        8      1    88%   19
dashboard/server/resources/storage.py      13      5    62%   26-28, 43-47
dashboard/server/utils.py                  79     18    77%   20-24, 78-80, 82-83, 86, 96, 99-100, 126-127, 140-142
dashboard/server/views.py                  21      1    95%   16
---------------------------------------------------------------------
TOTAL                                     277     61    78%
----------------------------------------------------------------------
Ran 5 tests in 9.885s

OK
taotao@mac007:~/Desktop/github/IPython-Dashboard$

Change Log

  • future

    • front side, databricks style
    • pep 8, code clean up & restructure
    • hover tips
    • edit modal can be resized
    • Share one graph
    • Share one dashboard
    • Presentation mode
    • footer
    • unified message display center
    • SQL Editor
    • login management
    • unified logger and exception report
    • server side log
    • client side log
    • support python3
    • create examples
    • render sql in dashboard
    • chart optimize
  • V 0.1.6 : optimize-chart [ current develop version ]

    • Dashboard

      • re-structure code, follow pep8 style
      • create 1 example
      • optimize chart
    • SQL Editor

      • optimize page
      • render sql result as graph
  • V 0.1.5 : sql-server-log [ current stable version ]

    • Dashboard

      • create 1 example
      • server side log
      • support x-axis as date format
      • research on real-time updated dataframe
    • SQL Editor

      • sql server develop : render sql result as table view

Related Projects & Products