This is an automated email from the ASF dual-hosted git repository.

zjffdu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new 88dd28f  [ZEPPELIN-4589]. Improve Python tutorial notes
88dd28f is described below

commit 88dd28f7800c5b57288dec169c569790043cfc34
Author: Jeff Zhang <zjf...@apache.org>
AuthorDate: Wed Feb 5 15:13:35 2020 +0800

    [ZEPPELIN-4589]. Improve Python tutorial notes
    
    ### What is this PR for?
    
    In this PR, I added 4 python tutorial notes:
    * IPython Basic (cover the basic ipython usage in Zeppelin)
    * IPython Visualization Tutorial (cover the how to do visualization via 
IPython in Zeppelin)
    * Keras Binary Classification (IMDB) (cover keras usage in Zeppelin)
    * Matplotlib (Python, PySpark) (How to use matplotlib in vanilla python 
interpreter)
    
    ### What type of PR is it?
    [ Documentation ]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-4589
    
    ### How should this be tested?
    * CI pass
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Jeff Zhang <zjf...@apache.org>
    
    Closes #3630 from zjffdu/ZEPPELIN-4589 and squashes the following commits:
    
    8391c2508 [Jeff Zhang] [ZEPPELIN-4589]. Improve Python tutorial notes
---
 .../Python Tutorial/IPython Basic_2EYDJKFFY.zpln   |  638 ++++++++++++
 .../IPython Visualization Tutorial_2F1S9ZY8Z.zpln  | 1093 ++++++++++++++++++++
 ...ras Binary Classification (IMDB)_2F2AVWJ77.zpln |  507 +++++++++
 .../Matplotlib (Python, PySpark)_2C2AUG798.zpln    |  288 +++---
 4 files changed, 2386 insertions(+), 140 deletions(-)

diff --git a/notebook/Python Tutorial/IPython Basic_2EYDJKFFY.zpln 
b/notebook/Python Tutorial/IPython Basic_2EYDJKFFY.zpln
new file mode 100644
index 0000000..85c0aba
--- /dev/null
+++ b/notebook/Python Tutorial/IPython Basic_2EYDJKFFY.zpln     
@@ -0,0 +1,638 @@
+{
+  "paragraphs": [
+    {
+      "title": "Introduction",
+      "text": "%md\n\nIPython is more powerful than the default python 
interpreter with extra functionality. You can use IPython with Python2 or 
Python3 which depends on which python you set `zeppelin.python`. This tutorial 
will teach you how to use IPython and what kind of fancy feature IPython 
provides for you. ",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:16:03.242",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/text",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true,
+        "title": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003cp\u003eIPython is more powerful than 
the default python interpreter with extra functionality. You can use IPython 
with Python2 or Python3 which depends on which python you set 
\u003ccode\u003ezeppelin.python\u003c/code\u003e. This tutorial will teach you 
how to use IPython and what kind of fancy feature IPython provides for 
you.\u003c/p\u003e\n\n\u003c/div\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128399_1705920905",
+      "id": "20180118-105449_1130638270",
+      "dateCreated": "2020-02-05 14:12:08.399",
+      "dateStarted": "2020-02-05 14:12:44.213",
+      "dateFinished": "2020-02-05 14:12:45.639",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# Prerequisite\n\nFirst you need to use Zeppelin 0.8.0 
or afterwards. You need to install the following 2 packages to make IPython 
work in Jupyter.\n\n* jupyter `pip install jupyter`\n* grpcio `pip install 
grpcio`\n* protobuf `pip install protobuf`\n\nIf you have anaconda installed, 
then you just need to install `grpcio` and `protobuf` as Jupyter is already 
included in anaconda.\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:45:28.518",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/text",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ePrerequisite\u003c/h1\u003e\n\u003cp\u003eFirst
 you need to use Zeppelin 0.8.0 or afterwards. You need to install the 
following 2 packages to make IPython work in 
Jupyter.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ejupyter 
\u003ccode\u003epip install 
jupyter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003egrpcio 
\u003ccode\u003epip install 
grpcio\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eprotobuf \u003 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128401_-91751836",
+      "id": "20180118-105734_546968647",
+      "dateCreated": "2020-02-05 14:12:08.401",
+      "dateStarted": "2020-02-05 14:15:52.966",
+      "dateFinished": "2020-02-05 14:15:52.978",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# How to use IPython\n\nAfter you get the above 
prerequisite installed, you can use IPython in Zeppelin via `%python.ipython` 
or `%spark.ipyspark`. If you want to make IPython as your default interpreter 
via `%python` or `%spark.pyspark`, then you can configure 
`zeppelin.python.useIPython` as `true` in python\u0027s interpreter setting or 
`zeppelin.pyspark.useIPython` in spark\u0027s interpreter setting. So that 
Zeppelin will use IPython as the default python interp [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:16:52.364",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/text",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eHow to use 
IPython\u003c/h1\u003e\n\u003cp\u003eAfter you get the above prerequisite 
installed, you can use IPython in Zeppelin via 
\u003ccode\u003e%python.ipython\u003c/code\u003e or 
\u003ccode\u003e%spark.ipyspark\u003c/code\u003e. If you want to make IPython 
as your default interpreter via \u003ccode\u003e%python\u003c/code\u003e or 
\u003ccode\u003e%spark.pyspark\u003c/code\u003e, then you can configure \ [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128402_-1251111399",
+      "id": "20180118-112614_44484642",
+      "dateCreated": "2020-02-05 14:12:08.402",
+      "dateStarted": "2020-02-05 14:16:50.898",
+      "dateFinished": "2020-02-05 14:16:50.907",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# IPython Help\n\nThere\u0027re 2 approaches to for 
getting python help in IPython. \n* Use `?` after the python object,\n* Use 
`help` function",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.402",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "markdown",
+          "editOnDblClick": true,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/markdown",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eIPython 
Help\u003c/h1\u003e\n\u003cp\u003eThere\u0026rsquo;re 2 approaches to for 
getting python help in IPython.\u003cbr/\u003e* Use 
\u003ccode\u003e?\u003c/code\u003e after the python object,\u003cbr/\u003e* Use 
\u003ccode\u003ehelp\u003c/code\u003e function\u003c/p\u003e\n\u003c/div\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128402_-1077704099",
+      "id": "20180118-111958_1561079624",
+      "dateCreated": "2020-02-05 14:12:08.402",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n\nimport sys\n\nsys?",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:17:03.465",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true,
+        "title": false
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "\u001b[0;31mType:\u001b[0m        
module\n\u001b[0;31mString form:\u001b[0m \u003cmodule \u0027sys\u0027 
(built-in)\u003e\n\u001b[0;31mDocstring:\u001b[0m  \nThis module provides 
access to some objects used or maintained by the\ninterpreter and to functions 
that interact strongly with the interpreter.\n\nDynamic objects:\n\nargv -- 
command line arguments; argv[0] is the script pathname if known\npath -- module 
search path; path[0] is the script directory, else \u0027 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128402_-688763859",
+      "id": "20180118-112246_474555672",
+      "dateCreated": "2020-02-05 14:12:08.403",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n\nimport sys\n\nhelp(sys)",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.403",
+      "config": {
+        "editorSetting": {
+          "language": "scala",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/scala",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "Help on built-in module sys:\n\nNAME\n    sys\n\nMODULE 
REFERENCE\n    https://docs.python.org/3.6/library/sys\n    \n    The following 
documentation is automatically generated from the Python\n    source files.  It 
may be incomplete, incorrect or include features that\n    are considered 
implementation detail and may vary between Python\n    implementations.  When 
in doubt, consult the module reference at the\n    location listed 
above.\n\nDESCRIPTION\n    This modu [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128403_-2022546282",
+      "id": "20180118-112905_1540839273",
+      "dateCreated": "2020-02-05 14:12:08.403",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# IPython magic function\n\nAll the IPython magic 
functions are avalible in Zeppelin, here\u0027s one example of `%timeit`, for 
the complete IPython magic functions, you can check the 
[link](http://ipython.readthedocs.io/en/stable/interactive/magics.html) 
here.\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.404",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "markdown",
+          "editOnDblClick": true,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/markdown",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eIPython magic 
function\u003c/h1\u003e\n\u003cp\u003eAll the IPython magic functions are 
avalible in Zeppelin, here\u0026rsquo;s one example of 
\u003ccode\u003e%timeit\u003c/code\u003e, for the complete IPython magic 
functions, you can check the \u003ca 
href\u003d\"http://ipython.readthedocs.io/en/stable/interactive/magics.html\"\u003elink\u003c/a\u003e
 here.\u003c/p\u003e\n\u003c/div\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128404_-1445116404",
+      "id": "20180118-112924_1945597351",
+      "dateCreated": "2020-02-05 14:12:08.404",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n\n%timeit range(1000)",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.405",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "242 ns ± 7.71 ns per loop (mean ± std. dev. of 7 runs, 
1000000 loops each)\n"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128405_-1093651105",
+      "id": "20180118-113325_2018867273",
+      "dateCreated": "2020-02-05 14:12:08.405",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# Tab completion\n\nTab completion, especially for 
attributes, is a convenient way to explore the structure of any object you’re 
dealing with. Simply type `object_name.\u003cTAB\u003e` to view the object’s 
attributes. See the following snapshot of how tab completion works in IPython 
Interpreter.\n![alt 
text](https://user-images.githubusercontent.com/164491/34858941-3f28105a-f78e-11e7-8341-2fbfd306ba5b.gif
 \"Logo Title Text 1\")\n\n\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.405",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "markdown",
+          "editOnDblClick": true,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/markdown",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eTab 
completion\u003c/h1\u003e\n\u003cp\u003eTab completion, especially for 
attributes, is a convenient way to explore the structure of any object you’re 
dealing with. Simply type 
\u003ccode\u003eobject_name.\u0026lt;TAB\u0026gt;\u003c/code\u003e to view the 
object’s attributes. See the following snapshot of how tab completion works in 
IPython Interpreter.\u003cbr/\u003e\u003cimg src\u003d\"https://user-image [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128405_-1429375020",
+      "id": "20180118-113333_768199475",
+      "dateCreated": "2020-02-05 14:12:08.405",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n\n# Visualization\n\nOne big advangae of notebook is 
that you can inline visualization with your code in notebook. There\u0027re 
many awesome visualization libraries in Python, you can use most of them in 
Zeppelin.\nRefer this 
[tutorial](https://www.zepl.com/viewer/notebooks/bm90ZTovL3pqZmZkdS9lN2Q3ODNiODRkNjA0ZjVjODM1OWZlMWExZjM4OTk3Zi9ub3RlLmpzb24)
 for how to use Python visualization libraries in Apache Zeppelin.\n\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.405",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "markdown",
+          "editOnDblClick": true,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/markdown",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eVisualization\u003c/h1\u003e\n\u003cp\u003eOne
 big advangae of notebook is that you can inline visualization with your code 
in notebook. There\u0026rsquo;re many awesome visualization libraries in 
Python, you can use most of them in Zeppelin.\u003cbr/\u003eRefer this \u003ca 
href\u003d\"https://www.zepl.com/viewer/notebooks/bm90ZTovL3pqZmZkdS9lN2Q3ODNiODRkNjA0ZjVjODM1OWZlMWExZjM4OTk3Zi9ub3RlLmpzb24\"\u003etu
 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128405_-1181474830",
+      "id": "20180118-114439_1191932175",
+      "dateCreated": "2020-02-05 14:12:08.405",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# Use ZeppelinContext \n\n`ZeppelinContext` is a utlity 
class which provide the following features\n\n* Dynamic forms\n* Show DataFrame 
via builtin visualization\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.405",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "markdown",
+          "editOnDblClick": true,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/markdown",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eUse 
ZeppelinContext\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003eZeppelinContext\u003c/code\u003e
 is a utlity class which provide the following 
features\u003c/p\u003e\n\u003cul\u003e\n  \u003cli\u003eDynamic 
forms\u003c/li\u003e\n  \u003cli\u003eShow DataFrame via builtin 
visualization\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128405_440264383",
+      "id": "20180118-114841_1750411156",
+      "dateCreated": "2020-02-05 14:12:08.405",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n\nz.input(name\u003d\u0027my_name\u0027, 
defaultValue\u003d\u0027hello\u0027)",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.405",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {
+          "my_name": {
+            "type": "TextBox",
+            "name": "my_name",
+            "displayName": "my_name",
+            "defaultValue": "hello",
+            "hidden": false
+          }
+        }
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "\u0027hello\u0027"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128405_746444677",
+      "id": "20180118-115612_471385279",
+      "dateCreated": "2020-02-05 14:12:08.405",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n\nimport pandas as pd\ndf \u003d 
pd.DataFrame({\u0027name\u0027:[\u0027a\u0027,\u0027b\u0027,\u0027c\u0027], 
\u0027count\u0027:[12,24,18]})\nz.show(df)",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.406",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {
+          "0": {
+            "graph": {
+              "mode": "table",
+              "height": 300.0,
+              "optionOpen": false,
+              "setting": {
+                "table": {
+                  "tableGridState": {
+                    "columns": [
+                      {
+                        "name": "count",
+                        "visible": true,
+                        "width": "*",
+                        "sort": {},
+                        "filters": [
+                          {}
+                        ],
+                        "pinned": ""
+                      },
+                      {
+                        "name": "name",
+                        "visible": true,
+                        "width": "*",
+                        "sort": {
+                          "priority": 0.0,
+                          "direction": "desc"
+                        },
+                        "filters": [
+                          {}
+                        ],
+                        "pinned": ""
+                      }
+                    ],
+                    "scrollFocus": {},
+                    "selection": [],
+                    "grouping": {
+                      "grouping": [],
+                      "aggregations": [],
+                      "rowExpandedStates": {}
+                    },
+                    "treeView": {},
+                    "pagination": {
+                      "paginationCurrentPage": 1.0,
+                      "paginationPageSize": 250.0
+                    }
+                  },
+                  "tableColumnTypeState": {
+                    "updated": false,
+                    "names": {
+                      "count": "string",
+                      "name": "string"
+                    }
+                  },
+                  "updated": false,
+                  "initialized": false,
+                  "tableOptionSpecHash": 
"[{\"name\":\"useFilter\",\"valueType\":\"boolean\",\"defaultValue\":false,\"widget\":\"checkbox\",\"description\":\"Enable
 filter for 
columns\"},{\"name\":\"showPagination\",\"valueType\":\"boolean\",\"defaultValue\":false,\"widget\":\"checkbox\",\"description\":\"Enable
 pagination for better 
navigation\"},{\"name\":\"showAggregationFooter\",\"valueType\":\"boolean\",\"defaultValue\":false,\"widget\":\"checkbox\",\"description\":\"Enable
 a footer [...]
+                  "tableOptionValue": {
+                    "useFilter": false,
+                    "showPagination": false,
+                    "showAggregationFooter": false
+                  }
+                },
+                "scatterChart": {
+                  "xAxis": {
+                    "name": "name",
+                    "index": 1.0,
+                    "aggr": "sum"
+                  },
+                  "yAxis": {
+                    "name": "count",
+                    "index": 0.0,
+                    "aggr": "sum"
+                  }
+                },
+                "multiBarChart": {}
+              },
+              "commonSetting": {},
+              "keys": [],
+              "groups": [],
+              "values": [
+                {
+                  "name": "name",
+                  "index": 1.0,
+                  "aggr": "sum"
+                }
+              ]
+            },
+            "helium": {}
+          }
+        },
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TABLE",
+            "data": "count\tname\n12\ta\n24\tb\n18\tc\n"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128406_-1787806183",
+      "id": "20180118-122136_1299905608",
+      "dateCreated": "2020-02-05 14:12:08.406",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:12:08.406",
+      "config": {},
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580883128406_130649699",
+      "id": "20180118-122149_878709973",
+      "dateCreated": "2020-02-05 14:12:08.406",
+      "status": "READY"
+    }
+  ],
+  "name": "IPython Basic",
+  "id": "2EYDJKFFY",
+  "defaultInterpreterGroup": "spark",
+  "version": "0.9.0-SNAPSHOT",
+  "permissions": {},
+  "noteParams": {},
+  "noteForms": {},
+  "angularObjects": {},
+  "config": {
+    "isZeppelinNotebookCronEnable": true
+  },
+  "info": {},
+  "path": "/Python Tutorial/IPython Basic"
+}
\ No newline at end of file
diff --git a/notebook/Python Tutorial/IPython Visualization 
Tutorial_2F1S9ZY8Z.zpln b/notebook/Python Tutorial/IPython Visualization 
Tutorial_2F1S9ZY8Z.zpln
new file mode 100644
index 0000000..dc73cdf
--- /dev/null
+++ b/notebook/Python Tutorial/IPython Visualization Tutorial_2F1S9ZY8Z.zpln    
@@ -0,0 +1,1093 @@
+{
+  "paragraphs": [
+    {
+      "title": "Overview",
+      "text": "%md\n\n\nThere\u0027re many visualization libraries availabel 
in python world. Visualization is tremendous useful in notebook enviroment, 
most of them could be used in Jupyter Notebook. And most of them can also be 
used in Apache Zeppelin Notebook, but maybe a little difference for some 
libraries. This tutorial will teach you how to use these popular visualization 
libraries in Apache Zeppelin. To be noted, you need to use IPython interpreter 
to make these libraries work in [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:12:28.523",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/text",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true,
+        "title": false
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003cp\u003eThere\u0026rsquo;re many 
visualization libraries availabel in python world. Visualization is tremendous 
useful in notebook enviroment, most of them could be used in Jupyter Notebook. 
And most of them can also be used in Apache Zeppelin Notebook, but maybe a 
little difference for some libraries. This tutorial will teach you how to use 
these popular visualization libraries in Apache Zeppelin. To be noted, you n 
[...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482808_420748092",
+      "id": "20180117-220147_1889980489",
+      "dateCreated": "2020-02-05 14:34:42.808",
+      "dateStarted": "2020-02-05 15:09:34.095",
+      "dateFinished": "2020-02-05 15:09:34.123",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# Matplotlib\n\nMatplotlib is a Python 2D plotting 
library which produces publication quality figures in a variety of hardcopy 
formats and interactive environments across platforms. The usage of Matplotlib 
in Zeppelin is the same as Jupyter Notebook. The key is to put `%matplotlib 
inline` before using Matplotlig. Below is one simple example, for more usage of 
Matplotlib, you can refer this [link](https://matplotlib.org/).",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:09:59.174",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/text",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eMatplotlib\u003c/h1\u003e\n\u003cp\u003eMatplotlib
 is a Python 2D plotting library which produces publication quality figures in 
a variety of hardcopy formats and interactive environments across platforms. 
The usage of Matplotlib in Zeppelin is the same as Jupyter Notebook. The key is 
to put \u003ccode\u003e%matplotlib inline\u003c/code\u003e before using 
Matplotlig. Below is one simple example, for more usa [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482810_-1147533206",
+      "id": "20180118-090246_2126121401",
+      "dateCreated": "2020-02-05 14:34:42.810",
+      "dateStarted": "2020-02-05 14:37:05.024",
+      "dateFinished": "2020-02-05 14:37:05.035",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Matplotlib Example",
+      "text": "%python.ipython\n\n%matplotlib inline\n\nimport 
matplotlib.pyplot as plt\n\nplt.plot([1,2,3,4])\nplt.ylabel(\u0027some 
numbers\u0027)\nplt.show()\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:34:42.810",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": false,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "\u003cmatplotlib.figure.Figure at 0x10b62b320\u003e\n"
+          },
+          {
+            "type": "IMG",
+            "data": 
"iVBORw0KGgoAAAANSUhEUgAAAYUAAAD8CAYAAACYebj1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzt3Xd8VfX9x/HXBwh77zDC3kPFMBx14UBFEUVrtW5Fra0dPwXEgavuDlsHYtWiba2WsAUHdS8UqGQww5I9JWGFrM/vj3tN0xjIDeTm5Cbv5+ORR+743ns+hxPu+571OebuiIiIAFQLugAREak4FAoiIlJAoSAiIgUUCiIiUkChICIiBRQKIiJSQKEgIiIFFAoiIlJAoSAiIgVqBF1AaTVv3tw7duwYdBkiIjFl4cKFO9y9RUnjYi4UOnbsyIIFC4IuQ0QkppjZukjGafO
 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482810_-1322704841",
+      "id": "20180117-220535_590781730",
+      "dateCreated": "2020-02-05 14:34:42.810",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# Pandas\n\nPandas provide high level api for 
visualization on DataFrame. It uses Matplotlib for its visualization 
underlying, so the usage is the same as Matplotlib. ",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:34:42.811",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "markdown",
+          "editOnDblClick": true,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/markdown",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ePandas\u003c/h1\u003e\n\u003cp\u003ePandas
 provide high level api for visualization on DataFrame. It uses Matplotlib for 
its visualization underlying, so the usage is the same as 
Matplotlib.\u003c/p\u003e\n\u003c/div\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482811_125744258",
+      "id": "20180118-090527_1578553673",
+      "dateCreated": "2020-02-05 14:34:42.811",
+      "status": "READY"
+    },
+    {
+      "title": "Pandas Example",
+      "text": "%python.ipython\n\n%matplotlib inline\n\nimport pandas as 
pd\nimport numpy as np\n\nts \u003d pd.Series(np.random.randn(1000), 
index\u003dpd.date_range(\u00271/1/2000\u0027, periods\u003d1000))\nts \u003d 
ts.cumsum()\nts.plot()",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:34:42.811",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": false,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "\u003cmatplotlib.axes._subplots.AxesSubplot at 
0x1087c99e8\u003e\n"
+          },
+          {
+            "type": "IMG",
+            "data": 
"iVBORw0KGgoAAAANSUhEUgAAAXYAAAEHCAYAAAC6IG0BAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJztnXmcHFXV93+399kns2TfSUhCIAtkg4AQZZPFgIgsgogi+r7wiD6PC4/4Kvo8IiqCoriAsomIKwIS2SJ7IBAgJGQjK9knk5nMPr1V3fePqlt9q7p6m6nuru4+388nn3RXV1fdnqo6dercc36Hcc5BEARBlA+eYg+AIAiCcBYy7ARBEGUGGXaCIIgygww7QRBEmUGGnSAIoswgw04QBFFmkGEnCIIoM8iwEwRBlBlk2AmCIMoMXzF22tLSwidPnlyMXRMEQZQsb7311mH
 [...]
+          },
+          {
+            "type": "TEXT",
+            "data": "\u003cmatplotlib.figure.Figure at 0x108797b70\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482811_-1394723261",
+      "id": "20180117-220828_1751137554",
+      "dateCreated": "2020-02-05 14:34:42.811",
+      "status": "READY"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# Seaborn\n\nSeaborn is a Python visualization library 
based on matplotlib. It provides a high-level interface for drawing attractive 
statistical graphics. Its usage in Zeppelin is the same as in Jupyter. For 
seaborn usage please refer this [link](https://seaborn.pydata.org/)\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:10:13.929",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/text",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eSeaborn\u003c/h1\u003e\n\u003cp\u003eSeaborn
 is a Python visualization library based on matplotlib. It provides a 
high-level interface for drawing attractive statistical graphics. Its usage in 
Zeppelin is the same as in Jupyter. For seaborn usage please refer this \u003ca 
href\u003d\"https://seaborn.pydata.org/\"\u003elink\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e";
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482811_1702400931",
+      "id": "20180118-091931_1235694337",
+      "dateCreated": "2020-02-05 14:34:42.811",
+      "status": "READY"
+    },
+    {
+      "title": "Seaborn Example",
+      "text": "%python.ipython\n\n%matplotlib inline\n\nimport seaborn as 
sns\nsns.set(style\u003d\"ticks\")\n\n# Load the example dataset for 
Anscombe\u0027s quartet\ndf \u003d sns.load_dataset(\"anscombe\")\n\n# Show the 
results of a linear regression within each dataset\nsns.lmplot(x\u003d\"x\", 
y\u003d\"y\", col\u003d\"dataset\", hue\u003d\"dataset\", data\u003ddf,\n       
    col_wrap\u003d2, ci\u003dNone, palette\u003d\"muted\", size\u003d4,\n       
    scatter_kws\u003d{\"s\": 50, [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:34:42.812",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": false,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "\u003cseaborn.axisgrid.FacetGrid at 
0x1a12763fd0\u003e\u003cmatplotlib.figure.Figure at 0x1a1277a2b0\u003e\n"
+          },
+          {
+            "type": "IMG",
+            "data": 
"iVBORw0KGgoAAAANSUhEUgAAAjQAAAI0CAYAAAAKi7MDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzs3Xl8VNX9//HXLNlIAiE7ISELitW6iyKKCKKAKIqArC4gCPardrMq2kdtf99+RWv91n5FrcimYhBBUNxALYqKIOCCiiIq2ROyQwjZZubO/f0xdRRNkCWZO5O8n385Z5J7P4lweM8595xjM03TRERERCSE2a0uQERERORYKdCIiIhIyFOgERERkZCnQCMiIiIhT4FGREREQp4CjYiIiIQ8BRo5KnPmzGH16tWH/Jq77rqL0tLSdrtnfX09N99881F//7x585g3b1671SM
 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482811_576440533",
+      "id": "20180117-220708_660528060",
+      "dateCreated": "2020-02-05 14:34:42.811",
+      "status": "READY"
+    },
+    {
+      "title": "Plotnine",
+      "text": "%md\n\n# Plotnine\n\nplotnine is an implementation of a grammar 
of graphics in Python, it is based on ggplot2. The grammar allows users to 
compose plots by explicitly mapping data to the visual objects that make up the 
plot.\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:10:26.243",
+      "config": {
+        "colWidth": 12.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/text",
+        "title": false
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ePlotnine\u003c/h1\u003e\n\u003cp\u003eplotnine
 is an implementation of a grammar of graphics in Python, it is based on 
ggplot2. The grammar allows users to compose plots by explicitly mapping data 
to the visual objects that make up the plot.\u003c/p\u003e\n\n\u003c/div\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885213779_377546255",
+      "id": "paragraph_1580885213779_377546255",
+      "dateCreated": "2020-02-05 14:46:53.782",
+      "dateStarted": "2020-02-05 15:10:26.263",
+      "dateFinished": "2020-02-05 15:10:26.273",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\n%matplotlib inline  \n\nfrom plotnine import 
*\nfrom plotnine.data import mtcars\n\n(ggplot(mtcars, aes(\u0027wt\u0027, 
\u0027mpg\u0027))\n + geom_point())\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:56:28.995",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": 
"/Users/jzhang/anaconda3/lib/python3.7/site-packages/plotnine/scales/scale.py:93:
 MatplotlibDeprecationWarning: \nThe iterable function was deprecated in 
Matplotlib 3.1 and will be removed in 3.3. Use np.iterable instead.\n  if 
cbook.iterable(self.breaks) and 
cbook.iterable(self.labels):\n/Users/jzhang/anaconda3/lib/python3.7/site-packages/plotnine/utils.py:553:
 MatplotlibDeprecationWarning: \nThe iterable function was deprecated in 
Matplotlib 3.1 and will be removed  [...]
+          },
+          {
+            "type": "IMG",
+            "data": 
"iVBORw0KGgoAAAANSUhEUgAAAi8AAAG0CAYAAAD6ncdZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXwUhf3/8ffslYSQYDAJASFcAgJSBEQOlYBUigeHoEC5pCoFLD5s/dUDH/VsqEdpBUEkxFr5VgFtoVap1rbEcitgW29UhADKGUxMSAJ7ze8PHmy7BBoIm8zO7Ov5ePh4uJPJ7Hv5ZLPvzMzOGqZpmgIAALAJl9UBAAAAzgblBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2ArlBQAA2IrH6gCStGDBAm3dulXV1dVKS0vTkCFDNGb
 [...]
+          },
+          {
+            "type": "TEXT",
+            "data": "\u003cggplot: (285151229)\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885221038_719317105",
+      "id": "paragraph_1580885221038_719317105",
+      "dateCreated": "2020-02-05 14:47:01.038",
+      "dateStarted": "2020-02-05 14:48:22.223",
+      "dateFinished": "2020-02-05 14:48:29.950",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\n(ggplot(mtcars, aes(\u0027wt\u0027, 
\u0027mpg\u0027, color\u003d\u0027factor(gear)\u0027))\n + geom_point()\n + 
stat_smooth(method\u003d\u0027lm\u0027)\n + facet_wrap(\u0027~gear\u0027))",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:57:48.332",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": 
"/Users/jzhang/anaconda3/lib/python3.7/site-packages/plotnine/scales/scale.py:93:
 MatplotlibDeprecationWarning: \nThe iterable function was deprecated in 
Matplotlib 3.1 and will be removed in 3.3. Use np.iterable instead.\n  if 
cbook.iterable(self.breaks) and 
cbook.iterable(self.labels):\n/Users/jzhang/anaconda3/lib/python3.7/site-packages/numpy/core/fromnumeric.py:2495:
 FutureWarning: Method .ptp is deprecated and will be removed in a future 
version. Use numpy.ptp in [...]
+          },
+          {
+            "type": "IMG",
+            "data": 
"iVBORw0KGgoAAAANSUhEUgAAArcAAAHCCAYAAAD1muGYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeXxU9b0//tc5Z/YlOxDWhCULYZFAua5csShabVHcv1UpXUT70/beW9pa21qtF6q92lp3rb0WWxVbr9S6V6UuKIJFdshC2EkCJCHbrGfmnPP7Y0jIMPtkkplMXk8f/JGZs7wznpm853Pen/dH0DRNAxERERFRFhDTHQARERERUaowuSUiIiKirMHkloiIiIiyBpNbIiIiIsoaTG6JiIiIKGswuSUiIiKirMHkloiIiIiyBpNbIiIiIsoaTG6JiIiIKGvo0h3AQKivr09
 [...]
+          },
+          {
+            "type": "TEXT",
+            "data": "\u003cggplot: (7558407260)\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885791251_758930573",
+      "id": "paragraph_1580885791251_758930573",
+      "dateCreated": "2020-02-05 14:56:31.251",
+      "dateStarted": "2020-02-05 14:57:36.295",
+      "dateFinished": "2020-02-05 14:57:37.319",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# bokeh\n\n[Bokeh](https://bokeh.pydata.org/en/latest/) 
is a Python interactive visualization library that targets modern web browsers 
for presentation. Its goal is to provide elegant, concise construction of novel 
graphics in the style of D3.js, and to extend this capability with 
high-performance interactivity over very large or streaming datasets. Bokeh can 
help anyone who would like to quickly and easily create interactive plots, 
dashboards, and data applications [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:10:37.902",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/text",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true,
+        "title": false
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ebokeh\u003c/h1\u003e\n\u003cp\u003e\u003ca
 href\u003d\"https://bokeh.pydata.org/en/latest/\"\u003eBokeh\u003c/a\u003e is 
a Python interactive visualization library that targets modern web browsers for 
presentation. Its goal is to provide elegant, concise construction of novel 
graphics in the style of D3.js, and to extend this capability with 
high-performance interactivity over very large or streaming dataset [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482814_1997313050",
+      "id": "20180118-092227_1380687854",
+      "dateCreated": "2020-02-05 14:34:42.814",
+      "dateStarted": "2020-02-05 14:42:33.017",
+      "dateFinished": "2020-02-05 14:42:33.092",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook, 
show\nfrom bokeh.plotting import figure\nimport 
bkzep\n\noutput_notebook(notebook_type\u003d\u0027zeppelin\u0027)\n\nfig \u003d 
figure()\nfig.line([1,2], [3,4])\nshow(fig)\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:00:57.563",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 6.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        
\u003ca href\u003d\"https://bokeh.pydata.org\"; target\u003d\"_blank\" 
class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n     
   \u003cspan id\u003d\"3452\"\u003eLoading BokehJS ...\u003c/span\u003e\n    
\u003c/div\u003e\n\n"
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cscript 
type\u003d\"text/javascript\"\u003e\n(function(root) {\n  function now() {\n    
return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof 
root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    
root._bokeh_is_loading \u003d undefined;\n  }\n\n  \n\n  \n  if (typeof 
(root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) { [...]
+          },
+          {
+            "type": "HTML",
+            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" 
id\u003d\"125e83e5-5abe-4ec2-b352-69745a9ccc93\" 
data-root-id\u003d\"3453\"\u003e\u003c/div\u003e\n\n"
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cscript 
type\u003d\"text/javascript\"\u003e(function(root) {\n  function 
embed_document(root) {\n    \n  var docs_json \u003d 
{\"08bbe30c-9bbf-4f39-872a-1bc5f3926223\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"3462\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"3466\",\"type\":\"Grid\"},{\"id\":\"3471\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"3467\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"3488\",\"type\":\"GlyphRenderer\"}],
 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482814_278965699",
+      "id": "20180118-092433_377794298",
+      "dateCreated": "2020-02-05 14:34:42.814",
+      "dateStarted": "2020-02-05 15:00:57.587",
+      "dateFinished": "2020-02-05 15:00:57.659",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nfrom bokeh.server.server import Server\nfrom 
bokeh.application import Application\nfrom bokeh.application.handlers.function 
import FunctionHandler\nfrom bokeh.plotting import figure, 
ColumnDataSource\n\ndef make_document(doc):\n    fig \u003d 
figure(title\u003d\u0027Line plot!\u0027, 
sizing_mode\u003d\u0027scale_width\u0027)\n    fig.line(x\u003d[1, 2, 3], 
y\u003d[1, 4, 9])\n\n    doc.title \u003d \"Hello, world!\"\n    
doc.add_root(fig)\n\n# Set up the  [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:03:13.813",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv class\u003d\u0027bokeh_class\u0027 
id\u003d\u00273a4d520c005443a28db6569f200ee1c8\u0027\u003e\n\u003cscript 
src\u003d\"http://localhost:51396/autoload.js?bokeh-autoload-element\u003d3881\u0026bokeh-absolute-url\u003dhttp://localhost:51396\";
 id\u003d\"3881\"\u003e\u003c/script\u003e\u003c/div\u003e\n"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580886029142_1541635661",
+      "id": "paragraph_1580886029142_1541635661",
+      "dateCreated": "2020-02-05 15:00:29.143",
+      "dateStarted": "2020-02-05 15:02:48.866",
+      "dateFinished": "2020-02-05 15:02:48.927",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%md\n\n# Holoviews\n\nHoloViews is an open-source Python 
library designed to make data analysis and visualization seamless and simple. 
With HoloViews, you can usually express what you want to do in very few lines 
of code, letting you focus on what you are trying to explore and convey, not on 
the process of plotting. Compared to bokeh, HoloViews is a high level 
visualization library. Refer this [link](http://holoviews.org/) for more usage 
tutorial of HoloViews.\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:53:49.481",
+      "config": {
+        "tableHide": false,
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/text",
+        "fontSize": 9.0,
+        "editorHide": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eHoloviews\u003c/h1\u003e\n\u003cp\u003eHoloViews
 is an open-source Python library designed to make data analysis and 
visualization seamless and simple. With HoloViews, you can usually express what 
you want to do in very few lines of code, letting you focus on what you are 
trying to explore and convey, not on the process of plotting. Compared to 
bokeh, HoloViews is a high level visualization library. Refer th [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482815_870528203",
+      "id": "20180120-131737_1287341499",
+      "dateCreated": "2020-02-05 14:34:42.815",
+      "dateStarted": "2020-02-05 14:53:46.544",
+      "dateFinished": "2020-02-05 14:53:46.571",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n\nimport pandas as pd\nimport numpy as 
np\nimport holoviews as hv\nfrom holoviews import 
opts\nhv.extension(\u0027bokeh\u0027)\n\nfrom bokeh.plotting import 
figure\nfrom bokeh.io import show,output_notebook\nimport 
bkzep\noutput_notebook(notebook_type\u003d\u0027zeppelin\u0027)\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:50:15.242",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cscript\u003e \n(function(root) {\n  function now() 
{\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof 
root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    
root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d 
\u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d 
\u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d [...]
+          },
+          {
+            "type": "HTML",
+            "data": "\n\u003clink rel\u003d\"stylesheet\" 
href\u003d\"https://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css\"\u003e\n\u003cstyle\u003ediv.bk-hbox
 {\n    display: flex;\n    justify-content: center;\n}\n\ndiv.bk-hbox 
div.bk-plot {\n    padding: 8px;\n}\n\ndiv.bk-hbox div.bk-data-table {\n    
padding: 20px;\n}\n\ndiv.hololayout {\n  display: flex;\n  align-items: 
center;\n  margin: 0;\n}\n\ndiv.holoframe {\n  width: 75%;\n}\n\ndiv.holowell 
{\n  display: flex;\n  [...]
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cscript\u003e function HoloViewsWidget() 
{\n}\n\nHoloViewsWidget.prototype.init_slider \u003d function(init_val){\n  
if(this.load_json) {\n    this.from_json()\n  } else {\n    
this.update_cache();\n  }\n}\n\nHoloViewsWidget.prototype.populate_cache \u003d 
function(idx){\n  this.cache[idx].innerHTML \u003d this.frames[idx];\n  if 
(this.embed) {\n    delete this.frames[idx];\n  
}\n}\n\nHoloViewsWidget.prototype.process_error \u003d 
function(msg){\n}\n\nHoloViewsW [...]
+          },
+          {
+            "type": "HTML",
+            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        
\u003ca href\u003d\"https://bokeh.pydata.org\"; target\u003d\"_blank\" 
class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n     
   \u003cspan id\u003d\"1093\"\u003eLoading BokehJS ...\u003c/span\u003e\n    
\u003c/div\u003e\n\n"
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cscript 
type\u003d\"text/javascript\"\u003e\n(function(root) {\n  function now() {\n    
return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof 
root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    
root._bokeh_is_loading \u003d undefined;\n  }\n\n  \n\n  \n  if (typeof 
(root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) { [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482815_131583170",
+      "id": "20180120-131731_1558753626",
+      "dateCreated": "2020-02-05 14:34:42.815",
+      "dateStarted": "2020-02-05 14:50:15.270",
+      "dateFinished": "2020-02-05 14:50:17.234",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nstation_info \u003d 
pd.read_csv(\u0027https://raw.githubusercontent.com/holoviz/holoviews/master/examples/assets/station_info.csv\u0027)\nstation_info.head()\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:51:57.708",
+      "config": {
+        "colWidth": 12.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv\u003e\n\u003cstyle scoped\u003e\n    .dataframe 
tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    
.dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe 
thead th {\n        text-align: right;\n    }\n\u003c/style\u003e\n\u003ctable 
border\u003d\"1\" class\u003d\"dataframe\"\u003e\n  \u003cthead\u003e\n    
\u003ctr style\u003d\"text-align: right;\"\u003e\n      
\u003cth\u003e\u003c/th\u003e\n      \u003cth\u00 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885453474_1167659991",
+      "id": "paragraph_1580885453474_1167659991",
+      "dateCreated": "2020-02-05 14:50:53.474",
+      "dateStarted": "2020-02-05 14:51:57.821",
+      "dateFinished": "2020-02-05 14:52:04.924",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nscatter \u003d hv.Scatter(station_info, 
\u0027services\u0027, \u0027ridership\u0027)\nscatter",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:52:34.586",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv id\u003d\u00271096\u0027 
style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  
\u003cdiv class\u003d\"bk-root\" 
id\u003d\"1f3ae3f5-bfd7-4295-8f99-29d46842288e\" 
data-root-id\u003d\"1096\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript
 type\u003d\"application/javascript\"\u003e(function(root) {\n  function 
embed_document(root) {\n    \n  var docs_json \u003d 
{\"763984d9-0529-456a-ab85-4ca811fccf92\":{\"roots\":{\"references\":[{\"a [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885519951_-291252209",
+      "id": "paragraph_1580885519951_-291252209",
+      "dateCreated": "2020-02-05 14:51:59.951",
+      "dateStarted": "2020-02-05 14:52:20.562",
+      "dateFinished": "2020-02-05 14:52:20.683",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nlayout \u003d scatter + 
hv.Histogram(np.histogram(station_info[\u0027opened\u0027], bins\u003d24), 
kdims\u003d[\u0027opened\u0027])\nlayout",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:52:54.836",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv id\u003d\u00271419\u0027 
style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  
\u003cdiv class\u003d\"bk-root\" 
id\u003d\"3208b87b-64b3-439e-9327-8f517a4f7a87\" 
data-root-id\u003d\"1419\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript
 type\u003d\"application/javascript\"\u003e(function(root) {\n  function 
embed_document(root) {\n    \n  var docs_json \u003d 
{\"7a36d125-8976-474d-8ac7-8eba79fbc756\":{\"roots\":{\"references\":[{\"a [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885548751_1272982082",
+      "id": "paragraph_1580885548751_1272982082",
+      "dateCreated": "2020-02-05 14:52:28.751",
+      "dateStarted": "2020-02-05 14:52:54.884",
+      "dateFinished": "2020-02-05 14:52:55.373",
+      "status": "FINISHED"
+    },
+    {
+      "title": "HvPlot",
+      "text": "%md\n\n# HvPlot\n\n[HvPlot](https://hvplot.holoviz.org/) is a 
high-level plotting API for the PyData ecosystem built on HoloViews.\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:11:17.248",
+      "config": {
+        "colWidth": 12.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/text",
+        "title": false,
+        "editorHide": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eHvPlot\u003c/h1\u003e\n\u003cp\u003e\u003ca
 href\u003d\"https://hvplot.holoviz.org/\"\u003eHvPlot\u003c/a\u003e is a 
high-level plotting API for the PyData ecosystem built on 
HoloViews.\u003c/p\u003e\n\n\u003c/div\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580884482945_-1037962389",
+      "id": "20180119-091845_1603850480",
+      "dateCreated": "2020-02-05 14:34:42.945",
+      "dateStarted": "2020-02-05 15:11:09.945",
+      "dateFinished": "2020-02-05 15:11:09.951",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook\nimport 
bkzep\noutput_notebook(notebook_type\u003d\u0027zeppelin\u0027)\n\n\nimport 
pandas as pd, numpy as np\n\n\nidx \u003d pd.date_range(\u00271/1/2000\u0027, 
periods\u003d1000)\ndf  \u003d pd.DataFrame(np.random.randn(1000, 4), 
index\u003didx, columns\u003dlist(\u0027ABCD\u0027)).cumsum()\n\nimport 
hvplot.pandas\ndf.hvplot()",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:55:41.519",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        
\u003ca href\u003d\"https://bokeh.pydata.org\"; target\u003d\"_blank\" 
class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n     
   \u003cspan id\u003d\"1660\"\u003eLoading BokehJS ...\u003c/span\u003e\n    
\u003c/div\u003e\n\n"
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cscript 
type\u003d\"text/javascript\"\u003e\n(function(root) {\n  function now() {\n    
return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof 
root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    
root._bokeh_is_loading \u003d undefined;\n  }\n\n  \n\n  \n  if (typeof 
(root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) { [...]
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cdiv id\u003d\u00271667\u0027 
style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  
\u003cdiv class\u003d\"bk-root\" 
id\u003d\"ac5bc1b8-0a13-4413-be19-7aaae89d6c76\" 
data-root-id\u003d\"1667\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript
 type\u003d\"application/javascript\"\u003e(function(root) {\n  function 
embed_document(root) {\n    \n  var docs_json \u003d 
{\"de8c7f52-af62-4c42-b2c7-037a4ac3c5ed\":{\"roots\":{\"references\":[{\"a [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885707198_-1652524072",
+      "id": "paragraph_1580885707198_-1652524072",
+      "dateCreated": "2020-02-05 14:55:07.198",
+      "dateStarted": "2020-02-05 14:55:36.307",
+      "dateFinished": "2020-02-05 14:55:38.341",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nfrom hvplot.sample_data import 
us_crime\n\ncolumns \u003d [\u0027Burglary rate\u0027, \u0027Larceny-theft 
rate\u0027, \u0027Robbery rate\u0027, \u0027Violent Crime 
rate\u0027]\n\n\nus_crime.plot.violin(y\u003dcolumns, 
group_label\u003d\u0027Type of crime\u0027, value_label\u003d\u0027Rate per 
100k\u0027, invert\u003dTrue)\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:56:02.776",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv id\u003d\u00272386\u0027 
style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  
\u003cdiv class\u003d\"bk-root\" 
id\u003d\"cdf3059a-39ed-43f9-9a8a-5f9a8f2d6e19\" 
data-root-id\u003d\"2386\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript
 type\u003d\"application/javascript\"\u003e(function(root) {\n  function 
embed_document(root) {\n    \n  var docs_json \u003d 
{\"5dff9f36-6d84-4867-8e9e-fc59f5a54790\":{\"roots\":{\"references\":[{\"a [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885736306_456675117",
+      "id": "paragraph_1580885736306_456675117",
+      "dateCreated": "2020-02-05 14:55:36.307",
+      "dateStarted": "2020-02-05 14:56:02.800",
+      "dateFinished": "2020-02-05 14:56:03.041",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nus_crime.plot.bivariate(\u0027Burglary 
rate\u0027, \u0027Property crime rate\u0027, legend\u003dFalse, width\u003d500, 
height\u003d400) * \\\nus_crime.plot.scatter(  \u0027Burglary rate\u0027, 
\u0027Property crime rate\u0027, color\u003d\u0027black\u0027, size\u003d15, 
legend\u003dFalse) + \\\nus_crime.plot.table([\u0027Burglary rate\u0027, 
\u0027Property crime rate\u0027], width\u003d350, height\u003d350)",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 14:56:02.798",
+      "config": {
+        "colWidth": 12.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv id\u003d\u00272722\u0027 
style\u003d\u0027display: table; margin: 0 auto;\u0027\u003e\n\n\n\n\n\n  
\u003cdiv class\u003d\"bk-root\" 
id\u003d\"4149a85a-8ec4-45c2-bede-c91dcf0a423a\" 
data-root-id\u003d\"2722\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript
 type\u003d\"application/javascript\"\u003e(function(root) {\n  function 
embed_document(root) {\n    \n  var docs_json \u003d 
{\"90811ff6-b552-43dd-a236-6ddd7ae3602e\":{\"roots\":{\"references\":[{\"a [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885746483_-68202156",
+      "id": "paragraph_1580885746483_-68202156",
+      "dateCreated": "2020-02-05 14:55:46.483",
+      "dateStarted": "2020-02-05 14:56:03.007",
+      "dateFinished": "2020-02-05 14:56:03.475",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Altair",
+      "text": "%md\n\n# Altair\n\n[Altair](https://altair-viz.github.io/) is a 
declarative statistical visualization library for Python, based on Vega and 
Vega-Lite, and the source is available on GitHub.\n\nWith Altair, you can spend 
more time understanding your data and its meaning. Altair’s API is simple, 
friendly and consistent and built on top of the powerful Vega-Lite 
visualization grammar. This elegant simplicity produces beautiful and effective 
visualizations with a minimal amoun [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:12:17.704",
+      "config": {
+        "colWidth": 12.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/text",
+        "title": false,
+        "editorHide": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eAltair\u003c/h1\u003e\n\u003cp\u003e\u003ca
 href\u003d\"https://altair-viz.github.io/\"\u003eAltair\u003c/a\u003e is a 
declarative statistical visualization library for Python, based on Vega and 
Vega-Lite, and the source is available on 
GitHub.\u003c/p\u003e\n\u003cp\u003eWith Altair, you can spend more time 
understanding your data and its meaning. Altair’s API is simple, friendly and 
consistent and built on [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580886248807_819045686",
+      "id": "paragraph_1580886248807_819045686",
+      "dateCreated": "2020-02-05 15:04:08.807",
+      "dateStarted": "2020-02-05 15:12:10.963",
+      "dateFinished": "2020-02-05 15:12:10.975",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nimport altair as 
alt\n\nalt.renderers.enable(\u0027zeppelin\u0027)\n\n# load a simple dataset as 
a pandas DataFrame\nfrom vega_datasets import data\ncars \u003d 
data.cars()\n\nalt.Chart(cars).mark_point().encode(\n    
x\u003d\u0027Horsepower\u0027,\n    y\u003d\u0027Miles_per_Gallon\u0027,\n    
color\u003d\u0027Origin\u0027,\n)",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:07:16.517",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/python"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003c!DOCTYPE 
html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n  \u003cstyle\u003e\n    
.vega-actions a {\n        margin-right: 12px;\n        color: #757575;\n       
 font-weight: normal;\n        font-size: 13px;\n    }\n    .error {\n        
color: red;\n    }\n  \u003c/style\u003e\n  \u003cscript 
type\u003d\"text/javascript\" 
src\u003d\"https://cdn.jsdelivr.net/npm//vega@5\"\u003e\u003c/script\u003e\n  
\u003cscript type\u003d\"text/javascript\" src\u003d\"https: [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580885762824_-1733991523",
+      "id": "paragraph_1580885762824_-1733991523",
+      "dateCreated": "2020-02-05 14:56:02.824",
+      "dateStarted": "2020-02-05 15:03:56.419",
+      "dateFinished": "2020-02-05 15:03:56.545",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n\nimport altair as alt\nimport numpy as 
np\nimport pandas as pd\n\n# Compute x^2 + y^2 across a 2D grid\nx, y \u003d 
np.meshgrid(range(-5, 5), range(-5, 5))\nz \u003d x ** 2 + y ** 2\n\n# Convert 
this grid to columnar data expected by Altair\nsource \u003d 
pd.DataFrame({\u0027x\u0027: x.ravel(),\n                     \u0027y\u0027: 
y.ravel(),\n                     \u0027z\u0027: 
z.ravel()})\n\nalt.Chart(source).mark_rect().encode(\n    x\u003d\u0027x:O\u00 
[...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:07:25.210",
+      "config": {
+        "colWidth": 6.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "scala",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/scala"
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003c!DOCTYPE 
html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n  \u003cstyle\u003e\n    
.vega-actions a {\n        margin-right: 12px;\n        color: #757575;\n       
 font-weight: normal;\n        font-size: 13px;\n    }\n    .error {\n        
color: red;\n    }\n  \u003c/style\u003e\n  \u003cscript 
type\u003d\"text/javascript\" 
src\u003d\"https://cdn.jsdelivr.net/npm//vega@5\"\u003e\u003c/script\u003e\n  
\u003cscript type\u003d\"text/javascript\" src\u003d\"https: [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580886216808_1963511607",
+      "id": "paragraph_1580886216808_1963511607",
+      "dateCreated": "2020-02-05 15:03:36.808",
+      "dateStarted": "2020-02-05 15:07:20.097",
+      "dateFinished": "2020-02-05 15:07:20.160",
+      "status": "FINISHED"
+    },
+    {
+      "text": "%python.ipython\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:07:20.097",
+      "config": {},
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580886440097_1853064047",
+      "id": "paragraph_1580886440097_1853064047",
+      "dateCreated": "2020-02-05 15:07:20.097",
+      "status": "READY"
+    }
+  ],
+  "name": "IPython Visualization Tutorial",
+  "id": "2F1S9ZY8Z",
+  "defaultInterpreterGroup": "spark",
+  "version": "0.9.0-SNAPSHOT",
+  "permissions": {},
+  "noteParams": {},
+  "noteForms": {},
+  "angularObjects": {},
+  "config": {
+    "isZeppelinNotebookCronEnable": true
+  },
+  "info": {},
+  "path": "/Python Tutorial/IPython Visualization Tutorial"
+}
\ No newline at end of file
diff --git a/notebook/Python Tutorial/Keras Binary Classification 
(IMDB)_2F2AVWJ77.zpln b/notebook/Python Tutorial/Keras Binary Classification 
(IMDB)_2F2AVWJ77.zpln
new file mode 100644
index 0000000..be88237
--- /dev/null
+++ b/notebook/Python Tutorial/Keras Binary Classification 
(IMDB)_2F2AVWJ77.zpln        
@@ -0,0 +1,507 @@
+{
+  "paragraphs": [
+    {
+      "text": "%md\n\nThis tutorial is from book [Deep Learning with 
Python](https://www.amazon.com/Deep-Learning-Python-Francois-Chollet/dp/1617294438).
 It use [Keras](http://keras.io/) to train binary classifier on IMDB data.\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:50:03.006",
+      "config": {
+        "colWidth": 12.0,
+        "fontSize": 9.0,
+        "enabled": true,
+        "results": {},
+        "editorSetting": {
+          "language": "text",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "editorMode": "ace/mode/text",
+        "editorHide": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003cp\u003eThis tutorial is from book 
\u003ca 
href\u003d\"https://www.amazon.com/Deep-Learning-Python-Francois-Chollet/dp/1617294438\"\u003eDeep
 Learning with Python\u003c/a\u003e. It use \u003ca 
href\u003d\"http://keras.io/\"\u003eKeras\u003c/a\u003e to train binary 
classifier on IMDB data.\u003c/p\u003e\n\n\u003c/div\u003e"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887284288_-572987457",
+      "id": "paragraph_1580887284288_-572987457",
+      "dateCreated": "2020-02-05 15:21:24.288",
+      "dateStarted": "2020-02-05 15:50:03.014",
+      "dateFinished": "2020-02-05 15:50:03.025",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Load Data",
+      "text": "%python.ipython\n\n\nfrom keras.datasets import 
imdb\n\n(training_data, training_labels), (testing_data, testing_labels) \u003d 
imdb.load_data(num_words\u003d10000)\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:42:38.288",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 6.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "Using TensorFlow backend.\n"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266618_558814345",
+      "id": "20180312-171655_220733505",
+      "dateCreated": "2020-02-05 15:21:06.618",
+      "dateStarted": "2020-02-05 15:42:38.296",
+      "dateFinished": "2020-02-05 15:42:46.933",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": 
"%python.ipython\n\nprint(training_data[0])\nprint(training_labels[0])",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:50:27.642",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 6.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true,
+        "title": false
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "[1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 
66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 
284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 
38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 
22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 
626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 
3785, 33, 4, 130, 12, 16, 38 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266625_804328120",
+      "id": "20180312-171715_624018844",
+      "dateCreated": "2020-02-05 15:21:06.625",
+      "dateStarted": "2020-02-05 15:42:54.913",
+      "dateFinished": "2020-02-05 15:42:54.983",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Transform Data",
+      "text": "%python.ipython\n\nimport numpy as np\n\n# convert input data 
to sparse matrix (each row represent one hot encoding of one doc)\ndef 
vectorize_sequences(sequences, dimension \u003d 10000):\n    matrix \u003d 
np.zeros((len(sequences), dimension))\n    for (i, sequence) in 
enumerate(sequences):\n        matrix[i, sequence] \u003d 1.0\n    return 
matrix\n\nx_train \u003d vectorize_sequences(training_data)\nx_test \u003d 
vectorize_sequences(testing_data)\n\ny_train \u003d trai [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:42:57.329",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "array([0., 1., 1., ..., 0., 0., 0.])"
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266625_1445359335",
+      "id": "20180312-172108_1871132312",
+      "dateCreated": "2020-02-05 15:21:06.625",
+      "dateStarted": "2020-02-05 15:42:57.337",
+      "dateFinished": "2020-02-05 15:43:01.756",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Build Model",
+      "text": "%python.ipython\n\n\nfrom keras.models import Sequential\nfrom 
keras.layers import Dense\n\n\nmodel \u003d Sequential()\nmodel.add(Dense(16, 
input_shape\u003d(10000,), 
activation\u003d\u0027relu\u0027))\nmodel.add(Dense(16, 
activation\u003d\u0027relu\u0027))\nmodel.add(Dense(1, 
activation\u003d\u0027sigmoid\u0027))\n\nmodel.compile(loss\u003d\u0027binary_crossentropy\u0027,
 optimizer\u003d\u0027rmsprop\u0027, metrics\u003d[\u0027accuracy\u0027])\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:43:03.522",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "WARNING: Logging before flag parsing goes to 
stderr.\nW0205 15:43:03.542002 4550231488 deprecation_wrapper.py:119] From 
/Users/jzhang/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:74:
 The name tf.get_default_graph is deprecated. Please use 
tf.compat.v1.get_default_graph instead.\n\nW0205 15:43:03.574465 4550231488 
deprecation_wrapper.py:119] From 
/Users/jzhang/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:517:
 T [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266625_-1696330995",
+      "id": "20180312-172157_1653956917",
+      "dateCreated": "2020-02-05 15:21:06.625",
+      "dateStarted": "2020-02-05 15:43:03.529",
+      "dateFinished": "2020-02-05 15:43:03.755",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Traing Model",
+      "text": "%python.ipython\n\nx_val \u003d x_train[:10000]\ny_val \u003d 
y_train[:10000]\npartial_x_train \u003d x_train[10000:]\npartial_y_train \u003d 
y_train[10000:]\n\nhistory \u003d model.fit(partial_x_train, partial_y_train, 
epochs\u003d20, batch_size\u003d512, validation_data\u003d(x_val, y_val))\n\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:43:07.601",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "W0205 15:43:08.120182 4550231488 
deprecation_wrapper.py:119] From 
/Users/jzhang/anaconda3/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:986:
 The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add 
instead.\n\nTrain on 15000 samples, validate on 10000 samples\nEpoch 1/20\n\r  
512/15000 [\u003e.............................] - ETA: 14s - loss: 0.6939 - 
acc: 
0.5020\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\ 
[...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266626_-253784643",
+      "id": "20180312-175108_20761277",
+      "dateCreated": "2020-02-05 15:21:06.626",
+      "dateStarted": "2020-02-05 15:43:07.607",
+      "dateFinished": "2020-02-05 15:43:41.441",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n\nhistory_dict \u003d 
history.history\nhistory_dict",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:43:32.021",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true,
+        "title": false
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "{\u0027val_loss\u0027: [0.37968397402763365,\n  
0.300372970533371,\n  0.30855551714897156,\n  0.28398124709129335,\n  
0.2841434906005859,\n  0.3164743734836578,\n  0.312709903717041,\n  
0.38588675870895384,\n  0.36348103885650634,\n  0.3842476764202118,\n  
0.41507191224098205,\n  0.4539576127052307,\n  0.47011078305244447,\n  
0.5024201002120972,\n  0.5311277472019196,\n  0.5638622181892395,\n  
0.6184595478057862,\n  0.6363161237716675,\n  0.7269207975387574,\n  0.734 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266629_-1158190533",
+      "id": "20180312-181145_1796362449",
+      "dateCreated": "2020-02-05 15:21:06.629",
+      "dateStarted": "2020-02-05 15:43:32.029",
+      "dateFinished": "2020-02-05 15:43:41.513",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Initialize Bokeh for training process plotting",
+      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook, 
show\nfrom bokeh.plotting import figure\n\nimport 
bkzep\n\noutput_notebook(notebook_type\u003d\u0027zeppelin\u0027)\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:43:45.275",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        
\u003ca href\u003d\"https://bokeh.pydata.org\"; target\u003d\"_blank\" 
class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n     
   \u003cspan id\u003d\"1001\"\u003eLoading BokehJS ...\u003c/span\u003e\n    
\u003c/div\u003e\n\n"
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cscript 
type\u003d\"text/javascript\"\u003e\n(function(root) {\n  function now() {\n    
return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof 
root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    
root._bokeh_is_loading \u003d undefined;\n  }\n\n  \n\n  \n  if (typeof 
(root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force 
\u003d\u003d\u003d true) { [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266629_755430293",
+      "id": "20180312-212623_945231959",
+      "dateCreated": "2020-02-05 15:21:06.629",
+      "dateStarted": "2020-02-05 15:43:45.294",
+      "dateFinished": "2020-02-05 15:43:45.783",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Accuracy Plotting",
+      "text": "%python.ipython\n\nfrom bokeh.io import show\nfrom 
bokeh.plotting import figure\n\nval_acc, acc \u003d 
history_dict[\u0027val_acc\u0027], history_dict[\u0027acc\u0027]\n\nfig \u003d 
figure()\nfig.line(range(1, len(val_acc) + 1), val_acc, 
color\u003d\u0027red\u0027, legend\u003d\u0027Validation 
Accuracy\u0027)\nfig.line(range(1, len(acc) +1), acc, 
color\u003d\u0027blue\u0027, legend\u003d\u0027Training 
Accuracy\u0027)\nfig.xaxis.axis_label \u003d \u0027Epochs\u0027\nfig.yax [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:43:47.556",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 6.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" 
id\u003d\"f0d77ab9-6462-42b8-a56c-278fcfe88973\" 
data-root-id\u003d\"1002\"\u003e\u003c/div\u003e\n\n"
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cscript 
type\u003d\"text/javascript\"\u003e(function(root) {\n  function 
embed_document(root) {\n    \n  var docs_json \u003d 
{\"69449613-57e3-42d6-9ea9-8810b7923f2a\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1011\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1015\",\"type\":\"Grid\"},{\"id\":\"1020\",\"type\":\"Grid\"},{\"id\":\"1046\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1016\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":
 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266630_-767905714",
+      "id": "20180312-212042_924458653",
+      "dateCreated": "2020-02-05 15:21:06.630",
+      "dateStarted": "2020-02-05 15:43:47.564",
+      "dateFinished": "2020-02-05 15:43:47.681",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Loss Plotting",
+      "text": "%python.ipython\n\nfrom bokeh.io import show\nfrom 
bokeh.plotting import figure\n\nval_loss, loss \u003d 
history_dict[\u0027val_loss\u0027], history_dict[\u0027loss\u0027]\n\nfig 
\u003d figure()\nfig.line(range(1, len(val_loss) + 1), val_loss, 
color\u003d\u0027red\u0027, legend\u003d\u0027Validation 
Loss\u0027)\nfig.line(range(1, len(loss) +1), loss, 
color\u003d\u0027blue\u0027, legend\u003d\u0027Training 
Loss\u0027)\n\nfig.xaxis.axis_label \u003d \u0027Epochs\u0027\nfig.y [...]
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:43:49.169",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 6.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "HTML",
+            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" 
id\u003d\"26a3aff0-c188-468a-b2ec-ad59decbe6b8\" 
data-root-id\u003d\"1129\"\u003e\u003c/div\u003e\n\n"
+          },
+          {
+            "type": "HTML",
+            "data": "\u003cscript 
type\u003d\"text/javascript\"\u003e(function(root) {\n  function 
embed_document(root) {\n    \n  var docs_json \u003d 
{\"47586f20-c8c3-42c2-b62d-0467c6b8a1ba\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1138\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1142\",\"type\":\"Grid\"},{\"id\":\"1147\",\"type\":\"Grid\"},{\"id\":\"1173\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1143\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":
 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266630_-932015545",
+      "id": "20180312-212825_683262480",
+      "dateCreated": "2020-02-05 15:21:06.630",
+      "dateStarted": "2020-02-05 15:43:49.182",
+      "dateFinished": "2020-02-05 15:43:49.332",
+      "status": "FINISHED"
+    },
+    {
+      "title": "Retrain the model in 4 epochs",
+      "text": "%python.ipython\n\nmodel.fit(x_train, y_train, epochs\u003d4, 
batch_size\u003d512)\nresults \u003d model.evaluate(x_test, 
y_test)\nprint(results)\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:43:52.363",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB",
+          "completionSupport": true
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "title": true,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "results": {
+        "code": "SUCCESS",
+        "msg": [
+          {
+            "type": "TEXT",
+            "data": "Epoch 1/4\n\r  512/25000 [..............................] 
- ETA: 1s - loss: 0.2078 - acc: 
0.9590\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r
 1536/25000 [\u003e.............................] - ETA: 1s - loss: 0.2439 - 
acc: 
0.9564\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\
 [...]
+          }
+        ]
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266631_-208421764",
+      "id": "20180312-213402_1553086977",
+      "dateCreated": "2020-02-05 15:21:06.631",
+      "dateStarted": "2020-02-05 15:43:52.369",
+      "dateFinished": "2020-02-05 15:44:02.728",
+      "status": "FINISHED"
+    },
+    {
+      "title": "",
+      "text": "%python.ipython\n",
+      "user": "anonymous",
+      "dateUpdated": "2020-02-05 15:21:06.633",
+      "config": {
+        "editorSetting": {
+          "language": "python",
+          "editOnDblClick": false,
+          "completionKey": "TAB"
+        },
+        "colWidth": 12.0,
+        "editorMode": "ace/mode/python",
+        "fontSize": 9.0,
+        "results": {},
+        "enabled": true
+      },
+      "settings": {
+        "params": {},
+        "forms": {}
+      },
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1580887266633_-1827767869",
+      "id": "20180312-214821_1740662910",
+      "dateCreated": "2020-02-05 15:21:06.633",
+      "status": "READY"
+    }
+  ],
+  "name": "Keras Binary Classification (IMDB)",
+  "id": "2F2AVWJ77",
+  "defaultInterpreterGroup": "spark",
+  "version": "0.9.0-SNAPSHOT",
+  "permissions": {},
+  "noteParams": {},
+  "noteForms": {},
+  "angularObjects": {},
+  "config": {
+    "isZeppelinNotebookCronEnable": true
+  },
+  "info": {},
+  "path": "/Python Tutorial/Keras Binary Classification (IMDB)"
+}
\ No newline at end of file
diff --git a/notebook/Zeppelin Tutorial/Matplotlib (Python, 
PySpark)_2C2AUG798.zpln b/notebook/Python Tutorial/Matplotlib (Python, 
PySpark)_2C2AUG798.zpln
similarity index 96%
rename from notebook/Zeppelin Tutorial/Matplotlib (Python, 
PySpark)_2C2AUG798.zpln
rename to notebook/Python Tutorial/Matplotlib (Python, PySpark)_2C2AUG798.zpln
index bbf25bf..6a7319a 100644
--- a/notebook/Zeppelin Tutorial/Matplotlib (Python, PySpark)_2C2AUG798.zpln    
+++ b/notebook/Python Tutorial/Matplotlib (Python, PySpark)_2C2AUG798.zpln      
@@ -1,9 +1,9 @@
 {
   "paragraphs": [
     {
-      "text": "%md\n## Introduction\nIn this tutorial we will go through some 
of the basic features of Zeppelin\u0027s built-in matplotlib integration. 
\n\n### Prerequisites\n`matplotlib` must be installed to your local python 
installation. (use `pip install matplotlib` or `conda install matplotlib` if 
you have `conda`). Additionally, you will need Zeppelin\u0027s matplotlib 
backend files which are usually found in `$ZEPPELIN_HOME/lib/python`. Although 
Zeppelin should automatically find  [...]
+      "text": "%md\n## Introduction\nIn this tutorial we will go through some 
of the basic features of Zeppelin\u0027s built-in matplotlib integration. To be 
noticed, this tutorial is only for Vanilla Python Interpreter (`%python` or 
`%spark.pyspark`). You can refer another tutorial (IPython Visualization 
Tutorial) for using Matplotlib in IPython Interpreter.\n\n### 
Prerequisites\n`matplotlib` must be installed to your local python 
installation. (use `pip install matplotlib` or `conda in [...]
       "user": "anonymous",
-      "dateUpdated": "Dec 17, 2016 3:33:25 PM",
+      "dateUpdated": "2020-02-05 15:48:09.193",
       "config": {
         "tableHide": false,
         "colWidth": 12.0,
@@ -26,33 +26,34 @@
         "editorSetting": {
           "language": "text",
           "editOnDblClick": false
-        }
+        },
+        "fontSize": 9.0
       },
       "settings": {
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627954_-1473548609",
-      "id": "20160614-174657_1772993700",
       "results": {
         "code": "SUCCESS",
         "msg": [
           {
             "type": "HTML",
-            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch2\u003eIntroduction\u003c/h2\u003e\n\u003cp\u003eIn
 this tutorial we will go through some of the basic features of 
Zeppelin\u0026rsquo;s built-in matplotlib integration. 
\u003c/p\u003e\n\u003ch3\u003ePrerequisites\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003ematplotlib\u003c/code\u003e
 must be installed to your local python installation. (use \u003ccode\u003epip 
install matplotlib\u003c/code\u003e or \u003ccode\u00 [...]
+            "data": "\u003cdiv 
class\u003d\"markdown-body\"\u003e\n\u003ch2\u003eIntroduction\u003c/h2\u003e\n\u003cp\u003eIn
 this tutorial we will go through some of the basic features of 
Zeppelin\u0026rsquo;s built-in matplotlib integration. To be noticed, this 
tutorial is only for Vanilla Python Interpreter 
(\u003ccode\u003e%python\u003c/code\u003e or 
\u003ccode\u003e%spark.pyspark\u003c/code\u003e). You can refer another 
tutorial (IPython Visualization Tutorial) for using Matplotlib  [...]
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
-      "dateStarted": "Dec 17, 2016 3:33:25 PM",
-      "dateFinished": "Dec 17, 2016 3:33:25 PM",
-      "status": "FINISHED",
-      "progressUpdateIntervalMs": 500
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627954_-1473548609",
+      "id": "20160614-174657_1772993700",
+      "dateCreated": "2016-11-02 14:53:47.000",
+      "dateStarted": "2020-02-05 15:47:58.416",
+      "dateFinished": "2020-02-05 15:47:59.573",
+      "status": "FINISHED"
     },
     {
       "text": "%python\nimport matplotlib.pyplot as plt\nplt.plot([1, 2, 3])",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -75,9 +76,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627958_-1475087605",
-      "id": "20161101-192232_289486976",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -87,14 +85,17 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627958_-1475087605",
+      "id": "20161101-192232_289486976",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "text": "%md\nNotice how an explicit call to `show()` is not necessary. 
This is accomplished via a post-execute hook which tells Zeppelin to plot all 
currently open matplotlib figures after executing the rest of the 
paragraph.\n### Plotting multiple figures\nWe can easily plot multiple figures 
at once too:",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/markdown",
@@ -118,9 +119,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627958_-1475087605",
-      "id": "20160617-002131_1552178409",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -130,14 +128,17 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627958_-1475087605",
+      "id": "20160617-002131_1552178409",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "text": "%python\n# Figure 1\nplt.plot([1, 2, 3])\n\n# Figure 
2\nplt.figure()\nplt.plot([3, 2, 1])",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -160,9 +161,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627959_-1475472354",
-      "id": "20161101-193533_2096366908",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -172,14 +170,17 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627959_-1475472354",
+      "id": "20161101-193533_2096366908",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "text": "%md\n### Changing the default inline plotting behavior\nBoth 
the `python` and `pyspark` include a built-in function for changing some 
default inline plotting behavior. For example, we can change the default size 
of each figure in pixels to 400x300 in svg format using: ",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "tableHide": false,
         "colWidth": 12.0,
@@ -204,9 +205,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627959_-1475472354",
-      "id": "20160614-174421_274483707",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -216,14 +214,17 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627959_-1475472354",
+      "id": "20160614-174421_274483707",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "text": "%python\nz.configure_mpl(width\u003d400, height\u003d300, 
fmt\u003d\u0027svg\u0027)\nplt.plot([1, 2, 3])",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/scala",
@@ -248,9 +249,6 @@
         },
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627959_-1475472354",
-      "id": "20160616-234947_579056637",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -260,14 +258,17 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627959_-1475472354",
+      "id": "20160616-234947_579056637",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "text": "%md\n### Iteratively updating a plot\n#### (a) Using multiple 
plots\nNow let\u0027s show an example where we update each element of the plot 
in a separate paragraph. However, you may have noticed that each matplotlib 
figure instance gets closed immediately after its shown. To fix this, we set 
the `close` property to `False` in our configuration:",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/markdown",
@@ -291,9 +292,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627960_-1477396098",
-      "id": "20160617-140439_1111727405",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -303,15 +301,18 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627960_-1477396098",
+      "id": "20160617-140439_1111727405",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "First line",
       "text": "%python\nplt.close() # Added here to reset the first plot when 
rerunning the paragraph\nz.configure_mpl(width\u003d600, height\u003d400, 
fmt\u003d\u0027png\u0027, close\u003dFalse)\nplt.plot([1, 2, 3], 
label\u003dr\u0027$y\u003dx$\u0027)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "title": true,
@@ -334,9 +335,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627960_-1477396098",
-      "id": "20161101-195657_1336292109",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -346,15 +344,18 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627960_-1477396098",
+      "id": "20161101-195657_1336292109",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "Second line",
       "text": "%python\nplt.plot([3, 2, 1], 
label\u003dr\u0027$y\u003d3-x$\u0027)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -378,9 +379,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627961_-1477780847",
-      "id": "20161101-195937_907325325",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -390,15 +388,18 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627961_-1477780847",
+      "id": "20161101-195937_907325325",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "Label axes",
       "text": "%python\nplt.xlabel(r\u0027$x$\u0027, 
fontsize\u003d20)\nplt.ylabel(r\u0027$y$\u0027, fontsize\u003d20)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -422,9 +423,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627962_-1476626600",
-      "id": "20161101-200014_2113468597",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -434,15 +432,18 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627962_-1476626600",
+      "id": "20161101-200014_2113468597",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "Add legend",
       "text": "%python\nplt.legend(loc\u003d\u0027upper center\u0027, 
fontsize\u003d20)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -466,9 +467,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627962_-1476626600",
-      "id": "20161101-200141_1493024813",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -478,15 +476,18 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627962_-1476626600",
+      "id": "20161101-200141_1493024813",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "Add title",
       "text": "%python\nplt.title(\u0027Inline plotting example\u0027, 
fontsize\u003d20)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/python",
@@ -510,9 +511,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627963_-1477011349",
-      "id": "20161101-200445_78775142",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -522,14 +520,17 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627963_-1477011349",
+      "id": "20161101-200445_78775142",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "text": "%md\n####(b) Using a single plot\nTo iteratively update a 
single plot, we can leverage Zeppelin\u0027s built-in Angular Display System. 
Currently this feature is only available for the `pyspark` interpreter for 
raster (png and jpg) formats. To enable this, we must set a special `angular` 
flag to `True` in our configuration:",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "editorMode": "ace/mode/markdown",
@@ -553,9 +554,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627963_-1477011349",
-      "id": "20161101-200541_1283841564",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -565,16 +563,19 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627963_-1477011349",
+      "id": "20161101-200541_1283841564",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "First line (figure will be displayed here)",
       "text": "%pyspark\nimport matplotlib.pyplot as plt\nplt.close() # Added 
here to reset the plot when rerunning the 
paragraph\nz.configure_mpl(angular\u003dTrue, close\u003dFalse)\nplt.plot([1, 
2, 3], label\u003dr\u0027$y\u003dx$\u0027)",
       "user": "anonymous",
-      "dateUpdated": "Nov 2, 2016 2:55:37 PM",
+      "dateUpdated": "2016-11-02 14:55:37.000",
       "config": {
         "colWidth": 7.0,
         "editorMode": "ace/mode/python",
@@ -598,9 +599,6 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627963_-1477011349",
-      "id": "20161101-200754_739212093",
       "results": {
         "code": "SUCCESS",
         "msg": [
@@ -610,16 +608,19 @@
           }
         ]
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
-      "dateStarted": "Nov 2, 2016 2:54:53 PM",
-      "dateFinished": "Nov 2, 2016 2:55:04 PM",
-      "status": "FINISHED",
-      "progressUpdateIntervalMs": 500
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627963_-1477011349",
+      "id": "20161101-200754_739212093",
+      "dateCreated": "2016-11-02 14:53:47.000",
+      "dateStarted": "2016-11-02 14:54:53.000",
+      "dateFinished": "2016-11-02 14:55:04.000",
+      "status": "FINISHED"
     },
     {
       "title": "Second line",
       "text": "%pyspark\nplt.plot([3, 2, 1], 
label\u003dr\u0027$y\u003d3-x$\u0027)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 5.0,
         "title": true,
@@ -630,22 +631,22 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627964_-1478935094",
-      "id": "20161101-200854_1676504884",
       "results": {
         "code": "SUCCESS",
         "msg": []
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627964_-1478935094",
+      "id": "20161101-200854_1676504884",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "Label axes",
       "text": "%pyspark\nplt.xlabel(r\u0027$x$\u0027, 
fontsize\u003d20)\nplt.ylabel(r\u0027$y$\u0027, fontsize\u003d20)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 5.0,
         "title": true,
@@ -656,22 +657,22 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627964_-1478935094",
-      "id": "20161101-200851_314384892",
       "results": {
         "code": "SUCCESS",
         "msg": []
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627964_-1478935094",
+      "id": "20161101-200851_314384892",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "Add legend",
       "text": "%pyspark\nplt.legend(loc\u003d\u0027upper center\u0027, 
fontsize\u003d20)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 5.0,
         "editorMode": "ace/mode/python",
@@ -683,22 +684,22 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627964_-1478935094",
-      "id": "20161101-201552_651686132",
       "results": {
         "code": "SUCCESS",
         "msg": []
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627964_-1478935094",
+      "id": "20161101-201552_651686132",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "title": "Add title",
       "text": "%pyspark\nplt.title(\u0027Inline plotting example\u0027, 
fontsize\u003d20)",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 5.0,
         "editorMode": "ace/mode/python",
@@ -710,21 +711,21 @@
         "params": {},
         "forms": {}
       },
-      "apps": [],
-      "jobName": "paragraph_1478123627965_-1479319843",
-      "id": "20161101-202024_1645454710",
       "results": {
         "code": "SUCCESS",
         "msg": []
       },
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "apps": [],
+      "progressUpdateIntervalMs": 500,
+      "jobName": "paragraph_1478123627965_-1479319843",
+      "id": "20161101-202024_1645454710",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     },
     {
       "text": "",
-      "dateUpdated": "Nov 2, 2016 2:53:47 PM",
+      "dateUpdated": "2016-11-02 14:53:47.000",
       "config": {
         "colWidth": 12.0,
         "graph": {
@@ -743,16 +744,20 @@
         "forms": {}
       },
       "apps": [],
+      "progressUpdateIntervalMs": 500,
       "jobName": "paragraph_1478123627965_-1479319843",
       "id": "20161102-124716_1703649609",
-      "dateCreated": "Nov 2, 2016 2:53:47 PM",
+      "dateCreated": "2016-11-02 14:53:47.000",
       "status": "READY",
-      "errorMessage": "",
-      "progressUpdateIntervalMs": 500
+      "errorMessage": ""
     }
   ],
   "name": "Matplotlib (Python, PySpark)",
   "id": "2C2AUG798",
+  "defaultInterpreterGroup": "spark",
+  "permissions": {},
+  "noteParams": {},
+  "noteForms": {},
   "angularObjects": {
     "2C6WUGPNH:shared_process": [],
     "2C4A8RJNB:shared_process": [],
@@ -774,6 +779,9 @@
     "2C49A6WY3:shared_process": [],
     "2C3NE73HG:shared_process": []
   },
-  "config": {},
-  "info": {}
-}
+  "config": {
+    "isZeppelinNotebookCronEnable": true
+  },
+  "info": {},
+  "path": "/Python Tutorial/Matplotlib (Python, PySpark)"
+}
\ No newline at end of file

Reply via email to