SlideShare a Scribd company logo
Interactive Visualization with Bokeh
About Continuum Analytics 
Domains 
• Finance 
•Geophysics 
•Defense 
•Advertising metrics & data analysis 
• Scientific computing 
Technologies 
•Array/Columnar data processing 
• Distributed computing, HPC 
• GPU and new vector hardware 
•Machine learning, predictive analytics 
• Interactive Visualization 
Enterprise 
Python 
Data Processing 
Scientific 
Computing 
Data Analysis 
Visualisation 
Scalable 
Computing
Bokeh 
• Interactive visualization 
• Novel graphics 
• Streaming, dynamic, large data 
• For the browser, with or without a server 
• No need to write Javascript
Interactive 
• Dragging & zooming, with linking 
• Selections that can round-trip to server 
• Resize, entirely on client side 
• Flexible hover 
http://bokeh.pydata.org/gallery.html
Novel Graphics
Novel Graphics
Novel Graphics
No Javascript
No Javascript
Streaming & Dynamic Data
Streaming & Dynamic Data
Big Data
Server-based, Standalone, Notebook
Matplotlib Chaco d3 mpld3 Vincent 
Interactive visualization * Y * Y 
Novel graphics * * Y Y 
Streaming/dynamic data * Y Y 
Large data * Y Y 
For the browser Y Y Y Y 
No need to write Javascript Y Y Y Y Y 
Works with Matplotlib Y Y Y 
Works with IPython notebook Y Y Y Y
Architecture
Previous: Javascript code generation 
HTML 
server.py Browser 
App Model 
js_str = """ <d3.js> 
<highchart.js> 
<etc.js> 
""" 
plot.js.template 
D3 
highcharts 
flot 
crossfilter 
etc. ... 
One-shot; no MVC interaction; no data streaming
BokehJS 
• Full-fledged dynamic, interactive plotting engine 
• materializes a reactive scenegraph from JSON 
• optionally push/pull state from server, using websockets 
• HTML5 Canvas, backbone.js, coffeescript, AMD, plays 
with JSfiddle, … 
! 
“We wrote JavaScript, so you don’t have to.”
bokeh.py & bokeh.js 
App Model server.py Browser 
bokeh.py 
object graph 
JSON 
BokehJS 
object graph
bokeh.py & bokeh.js 
App Model server.py Browser 
BokehJS 
object graph 
bokeh-server 
bokeh.py 
object graph 
JSON
iris.py
iris.html ! 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<title>iris.py example</title> 
<link rel="stylesheet" href="../../../../../anaconda/envs/bokehdemo/lib/python2.7/site-packages/bokeh/server/static/css/bokeh.min.css" type="text/css" /> 
<script type="text/javascript" src="../../../../../anaconda/envs/bokehdemo/lib/python2.7/site-packages/bokeh/server/static/js/bokeh.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
var all_models = [{"attributes": {"column_names": ["fill_color", "line_color", "x", "y"], "doc": null, "selected": [], "discrete_ranges": {}, "cont_ranges": {}, "data": {"line_color": ["red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", 
"red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "green", "green", "green", "green", "green", "green", "green", "green", "green", 
"green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", 
"green", "green", "green", "green", "green", "green", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", 
"blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue"], "x": [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4, 1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1.0, 1.7, 1.9, 1.6, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 
1.2, 1.3, 1.4, 1.3, 1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5, 1.4, 4.7, 4.5, 4.9, 4.0, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5, 4.2, 4.0, 4.7, 3.6, 4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4.0, 4.9, 4.7, 4.3, 4.4, 4.8, 5.0, 4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5, 4.7, 4.4, 4.1, 4.0, 4.4, 4.6, 4.0, 3.3, 4.2, 4.2, 4.2, 4.3, 
3.0, 4.1, 6.0, 5.1, 5.9, 5.6, 5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1, 5.3, 5.5, 5.0, 5.1, 5.3, 5.5, 6.7, 6.9, 5.0, 5.7, 4.9, 6.7, 4.9, 5.7, 6.0, 4.8, 4.9, 5.6, 5.8, 6.1, 6.4, 5.6, 5.1, 5.6, 6.1, 5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1, 5.9, 5.7, 5.2, 5.0, 5.2, 5.4, 5.1], "fill_color": ["red", "red", "red", "red", "red", "red", 
"red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "green", 
"green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", 
"green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", 
"blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue"], "y": [0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 
0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2, 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 
1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3, 2.5, 1.9, 2.1, 1.8, 2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2.0, 1.9, 2.1, 2.0, 2.4, 2.3, 1.8, 2.2, 2.3, 1.5, 2.3, 2.0, 2.0, 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6, 1.9, 2.0, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3, 1.9, 2.3, 2.5, 2.3, 
1.9, 2.0, 2.3, 1.8]}, "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, "type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, {"attributes": {"sources": [{"source": {"type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, "columns": ["x"]}], "id": 
"bbaf66fb-48b8-474a-8dae-910a995186f6", "doc": null}, "type": "DataRange1d", "id": "bbaf66fb-48b8-474a-8dae-910a995186f6"}, {"attributes": {"sources": [{"source": {"type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, "columns": ["y"]}], "id": "8377dd3b-9c4e-41ce-8930-76a92a68e907", "doc": null}, 
"type": "DataRange1d", "id": "8377dd3b-9c4e-41ce-8930-76a92a68e907"}, {"attributes": {"doc": null, "id": "24c8ae7c-f3c8-4c88-9f5d-dcbe59506791"}, "type": "BasicTickFormatter", "id": "24c8ae7c-f3c8-4c88-9f5d-dcbe59506791"}, {"attributes": {"doc": null, "id": "3720fa34-cea8-4b54-a51b-c738a1ef96fb"}, "type": 
"BasicTicker", "id": "3720fa34-cea8-4b54-a51b-c738a1ef96fb"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "doc": null, "bounds": "auto", "id": "0ae2ae05-3abd-414a-9840-c5e804de9661", "location": "min", "formatter": {"type": "BasicTickFormatter", "id": "24c8ae7c-f3c8-4c88-9f5d-dcbe59506791"}, "ticker": 
{"type": "BasicTicker", "id": "3720fa34-cea8-4b54-a51b-c738a1ef96fb"}, "dimension": 0}, "type": "LinearAxis", "id": "0ae2ae05-3abd-414a-9840-c5e804de9661"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "doc": null, "axis": {"type": "LinearAxis", "id": "0ae2ae05-3abd-414a-9840-c5e804de9661"}, "id": 
"25d48bf1-6583-4aff-9e47-dd57e304fb7a", "dimension": 0}, "type": "Grid", "id": "25d48bf1-6583-4aff-9e47-dd57e304fb7a"}, {"attributes": {"doc": null, "id": "d88bdf6f-b1a7-49c1-b71e-df2c1156f202"}, "type": "BasicTickFormatter", "id": "d88bdf6f-b1a7-49c1-b71e-df2c1156f202"}, {"attributes": {"doc": null, "id": 
"434ab651-0a3a-4bab-aa7a-34844b833bce"}, "type": "BasicTicker", "id": "434ab651-0a3a-4bab-aa7a-34844b833bce"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "doc": null, "bounds": "auto", "id": "53cf6b9d-1c82-48d2-8094-5a81fed497d9", "location": "min", "formatter": {"type": "BasicTickFormatter", "id": 
"d88bdf6f-b1a7-49c1-b71e-df2c1156f202"}, "ticker": {"type": "BasicTicker", "id": "434ab651-0a3a-4bab-aa7a-34844b833bce"}, "dimension": 1}, "type": "LinearAxis", "id": "53cf6b9d-1c82-48d2-8094-5a81fed497d9"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "doc": null, "axis": {"type": "LinearAxis", "id": 
"53cf6b9d-1c82-48d2-8094-5a81fed497d9"}, "id": "21bd25eb-22d3-427c-a6a3-5e3afc96cc2a", "dimension": 1}, "type": "Grid", "id": "21bd25eb-22d3-427c-a6a3-5e3afc96cc2a"}, {"attributes": {"data_source": {"type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, "server_data_source": null, "doc": null, 
"nonselection_glyphspec": {"line_color": {"value": "#1f77b4"}, "angle_units": "deg", "fill_color": {"value": "#1f77b4"}, "visible": null, "line_dash_offset": 0, "line_join": "miter", "size": {"units": "screen", "value": 10}, "line_alpha": {"units": "data", "value": 0.1}, "radius_units": "screen", "end_angle_units": 
"deg", "valign": null, "length_units": "screen", "start_angle_units": "deg", "line_cap": "butt", "line_dash": [], "line_width": {"units": "data", "field": "line_width"}, "type": "circle", "fill_alpha": {"units": "data", "value": 0.1}, "halign": null, "y": {"units": "data", "field": "y"}, "x": {"units": "data", 
"field": "x"}, "margin": null}, "xdata_range": null, "ydata_range": null, "glyphspec": {"line_color": {"units": "data", "field": "line_color"}, "line_alpha": {"units": "data", "value": 1.0}, "fill_color": {"units": "data", "field": "fill_color"}, "line_width": {"units": "data", "field": "line_width"}, "fill_alpha": 
{"units": "data", "value": 0.2}, "y": {"units": "data", "field": "y"}, "x": {"units": "data", "field": "x"}, "type": "circle", "size": {"units": "screen", "value": 10}}, "id": "093300cf-6759-4449-877b-7731476588a0"}, "type": "Glyph", "id": "093300cf-6759-4449-877b-7731476588a0"}, {"attributes": {"plot": null, "doc": 
null, "renderers": [{"type": "Glyph", "id": "093300cf-6759-4449-877b-7731476588a0"}], "id": "9a60e0da-efe5-4b08-a4f6-7ed315d67b9b"}, "type": "BoxSelectTool", "id": "9a60e0da-efe5-4b08-a4f6-7ed315d67b9b"}, {"attributes": {"doc": null, "tool": {"type": "BoxSelectTool", "id": "9a60e0da-efe5-4b08-a4f6-7ed315d67b9b"}, 
"id": "5a0e8c76-4893-452b-b2e8-cefb1a232437"}, "type": "BoxSelection", "id": "5a0e8c76-4893-452b-b2e8-cefb1a232437"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "dimensions": ["width", "height"], "doc": null, "id": "a4b154c7-b674-4f86-93f8-770cf7a0d9b5"}, "type": "PanTool", "id": "a4b154c7- 
b674-4f86-93f8-770cf7a0d9b5"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "dimensions": ["width", "height"], "doc": null, "id": "3ba5854b-e047-47c2-989b-15b5b79cb205"}, "type": "WheelZoomTool", "id": "3ba5854b-e047-47c2-989b-15b5b79cb205"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "id": 
"0a583af8-4db5-45ea-b09b-16562035ccc4", "doc": null}, "type": "PreviewSaveTool", "id": "0a583af8-4db5-45ea-b09b-16562035ccc4"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "id": "5621f214-17c9-417f-aaed-f841745f489f", "doc": null}, "type": "ResizeTool", "id": "5621f214-17c9-417f-aaed-f841745f489f"}, 
{"attributes": {"plot": {"type": "Plot", "id": "iris"}, "id": "98be8a66-dfaa-4f2d-95cd-0296a3647da1", "doc": null}, "type": "ResetTool", "id": "98be8a66-dfaa-4f2d-95cd-0296a3647da1"}, {"attributes": {"outer_height": 600, "x_range": {"type": "DataRange1d", "id": "bbaf66fb-48b8-474a-8dae-910a995186f6"}, "y_range": 
{"type": "DataRange1d", "id": "8377dd3b-9c4e-41ce-8930-76a92a68e907"}, "outer_width": 600, "renderers": [{"type": "LinearAxis", "id": "0ae2ae05-3abd-414a-9840-c5e804de9661"}, {"type": "Grid", "id": "25d48bf1-6583-4aff-9e47-dd57e304fb7a"}, {"type": "LinearAxis", "id": "53cf6b9d-1c82-48d2-8094-5a81fed497d9"}, {"type": 
"Grid", "id": "21bd25eb-22d3-427c-a6a3-5e3afc96cc2a"}, {"type": "BoxSelection", "id": "6451a3a2-d1d7-401e-8ec6-ed92c626f448"}, {"type": "BoxSelection", "id": "5a0e8c76-4893-452b-b2e8-cefb1a232437"}, {"type": "Glyph", "id": "093300cf-6759-4449-877b-7731476588a0"}], "id": "iris", "data_sources": [], "doc": null, 
"canvas_height": 600, "title": "Plot", "tools": [{"type": "PanTool", "id": "a4b154c7-b674-4f86-93f8-770cf7a0d9b5"}, {"type": "WheelZoomTool", "id": "3ba5854b-e047-47c2-989b-15b5b79cb205"}, {"type": "BoxZoomTool", "id": "a047dc9b-0dd1-4883-8575-550cd63409fa"}, {"type": "PreviewSaveTool", "id": "0a583af8-4db5-45ea-b09b- 
16562035ccc4"}, {"type": "ResizeTool", "id": "5621f214-17c9-417f-aaed-f841745f489f"}, {"type": "BoxSelectTool", "id": "9a60e0da-efe5-4b08-a4f6-7ed315d67b9b"}, {"type": "ResetTool", "id": "98be8a66-dfaa-4f2d-95cd-0296a3647da1"}], "canvas_width": 600}, "type": "Plot", "id": "iris"}, {"attributes": {"plot": 
{"type": "Plot", "id": "iris"}, "id": "a047dc9b-0dd1-4883-8575-550cd63409fa", "doc": null}, "type": "BoxZoomTool", "id": "a047dc9b-0dd1-4883-8575-550cd63409fa"}, {"attributes": {"doc": null, "tool": {"type": "BoxZoomTool", "id": "a047dc9b-0dd1-4883-8575-550cd63409fa"}, "id": "6451a3a2-d1d7-401e-8ec6-ed92c626f448"}, 
"type": "BoxSelection", "id": "6451a3a2-d1d7-401e-8ec6-ed92c626f448"}, {"attributes": {"doc": null, "children": [{"type": "Plot", "id": "iris"}], "id": "475ad0da-baf5-48be-902b-166b060b6978"}, "type": "PlotContext", "id": "475ad0da-baf5-48be-902b-166b060b6978"}]; 
var modelid = "475ad0da-baf5-48be-902b-166b060b6978"; 
var modeltype = "PlotContext"; 
var elementid = "8bb1deb5-74cb-4b28-b44f-c89dc5701d69"; 
console.log(modelid, modeltype, elementid); 
Bokeh.load_models(all_models); 
var model = Bokeh.Collections(modeltype).get(modelid); 
var view = new model.default_view({model: model, el: '#8bb1deb5-74cb-4b28-b44f-c89dc5701d69'}); 
}); 
</script> 
</head> 
<body> 
<div class="plotdiv" id="8bb1deb5-74cb-4b28-b44f-c89dc5701d69">Plots</div> 
</body> 
</html>
iris.html (detail) 
<head> 
<meta charset="utf-8"> 
<title>iris.py example</title> 
<link rel="stylesheet" href="../bokeh/server/static/css/bokeh.min.css" type="text/css" /> 
<script type="text/javascript" src=“../bokeh/server/static/js/bokeh.min.js"></script> 
<script type=“text/javascript”> 
$(function() { 
var all_models = [JSON data] 
var modelid = "475ad0da-baf5-48be-902b-166b060b6978"; 
var modeltype = "PlotContext"; 
var elementid = "8bb1deb5-74cb-4b28-b44f-c89dc5701d69"; 
console.log(modelid, modeltype, elementid); 
Bokeh.load_models(all_models); 
var model = Bokeh.Collections(modeltype).get(modelid); 
var view = new model.default_view({ 
model: model, 
el: '#8bb1deb5-74cb-4b28-b44f-c89dc5701d69'}); 
}); 
</script> 
</head> 
<body> 
<div class="plotdiv" id="8bb1deb5-74cb-4b28-b44f-c89dc5701d69">Plots</div> 
</body> 
</html>
JSON 
{ 
"attributes": { 
"sources": [ 
{ 
"source": { 
"type": "ColumnDataSource", 
"id": "5e71b46a-0d81-4a18-8402-188816471c0c" 
}, 
"columns": [ 
"x" 
] 
} 
], 
"id": "bbaf66fb-48b8-474a-8dae-910a995186f6", 
"doc": null 
}, 
"type": "DataRange1d", 
"id": "bbaf66fb-48b8-474a-8dae-910a995186f6" 
},
Other languages can generate JSON... 
bokeh.r! 
bokeh.h 
bokeh.m 
bokeh.java 
...
New Release! v0.6 
• New charts in bokeh.charts: Time Series and Categorical Heatmap 
• Sophisticated Hands-on Table widget 
• Complete Python 3 support for bokeh-server 
• Much expanded User Guide and Dev Guide 
• Multiple axes and ranges now supported 
• Object query interface to help with plot styling 
• Blog post coming soon (tomorrow?) 
https://groups.google.com/a/continuum.io/forum/#!topic/bokeh/Hm-QNV9uQOA
Abstract Rendering
What’s Next 
• Improved widgets (including tables): 
• Graphical, data-driven “applets” 
• Easier dashboards 
• Improved crossfilter app 
• Improved bokeh.charts library 
• Data-driven layout 
• SVG output 
• command-line tool
Data Apps
Dashboard / Crossfilter Tool
How to Help & Contribute 
• Open source BSD license for everything (JS, Python, server) 
• Use it and provide feedback 
• Designer? Front-end dev? - Get in touch! 
• Engage us to work on custom visual exploration apps & 
dashboards 
• Not just code integration - also provide visualization expertise 
• Helps the open source efforts 
@bokehplots
Additional Demos

More Related Content

What's hot

Feature store: Solving anti-patterns in ML-systems
Feature store: Solving anti-patterns in ML-systemsFeature store: Solving anti-patterns in ML-systems
Feature store: Solving anti-patterns in ML-systems
Andrzej Michałowski
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks Autoloader
Databricks
 
The columnar roadmap: Apache Parquet and Apache Arrow
The columnar roadmap: Apache Parquet and Apache ArrowThe columnar roadmap: Apache Parquet and Apache Arrow
The columnar roadmap: Apache Parquet and Apache Arrow
DataWorks Summit
 
Bootstrap ppt
Bootstrap pptBootstrap ppt
Bootstrap ppt
Ishtdeep Hora
 
Building a Virtual Data Lake with Apache Arrow
Building a Virtual Data Lake with Apache ArrowBuilding a Virtual Data Lake with Apache Arrow
Building a Virtual Data Lake with Apache Arrow
Dremio Corporation
 
Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...
Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...
Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...
Spark Summit
 
Relational databases vs Non-relational databases
Relational databases vs Non-relational databasesRelational databases vs Non-relational databases
Relational databases vs Non-relational databases
James Serra
 
Introduction to Dremio
Introduction to DremioIntroduction to Dremio
Introduction to Dremio
Dremio Corporation
 
Architect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh ArchitectureArchitect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh Architecture
Databricks
 
NoSql
NoSqlNoSql
CSS Best practice
CSS Best practiceCSS Best practice
CSS Best practice
Russ Weakley
 
Optimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache SparkOptimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache Spark
Databricks
 
Snowflake: The Good, the Bad, and the Ugly
Snowflake: The Good, the Bad, and the UglySnowflake: The Good, the Bad, and the Ugly
Snowflake: The Good, the Bad, and the Ugly
Tyler Wishnoff
 
NOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQLNOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQL
Ramakant Soni
 
An approach to use PERA in Enterprise Modeling for industrial systems
An approach to use PERA in Enterprise Modeling for industrial systemsAn approach to use PERA in Enterprise Modeling for industrial systems
An approach to use PERA in Enterprise Modeling for industrial systems
FAST-Lab. Factory Automation Systems and Technologies Laboratory, Tampere University of Technology
 
Using LLVM to accelerate processing of data in Apache Arrow
Using LLVM to accelerate processing of data in Apache ArrowUsing LLVM to accelerate processing of data in Apache Arrow
Using LLVM to accelerate processing of data in Apache Arrow
DataWorks Summit
 
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the CloudAmazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Noritaka Sekiyama
 
3D: DBT using Databricks and Delta
3D: DBT using Databricks and Delta3D: DBT using Databricks and Delta
3D: DBT using Databricks and Delta
Databricks
 
Building Open Data Lakes on AWS with Debezium and Apache Hudi
Building Open Data Lakes on AWS with Debezium and Apache HudiBuilding Open Data Lakes on AWS with Debezium and Apache Hudi
Building Open Data Lakes on AWS with Debezium and Apache Hudi
Gary Stafford
 

What's hot (20)

Feature store: Solving anti-patterns in ML-systems
Feature store: Solving anti-patterns in ML-systemsFeature store: Solving anti-patterns in ML-systems
Feature store: Solving anti-patterns in ML-systems
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks Autoloader
 
The columnar roadmap: Apache Parquet and Apache Arrow
The columnar roadmap: Apache Parquet and Apache ArrowThe columnar roadmap: Apache Parquet and Apache Arrow
The columnar roadmap: Apache Parquet and Apache Arrow
 
NoSql
NoSqlNoSql
NoSql
 
Bootstrap ppt
Bootstrap pptBootstrap ppt
Bootstrap ppt
 
Building a Virtual Data Lake with Apache Arrow
Building a Virtual Data Lake with Apache ArrowBuilding a Virtual Data Lake with Apache Arrow
Building a Virtual Data Lake with Apache Arrow
 
Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...
Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...
Spark and Object Stores —What You Need to Know: Spark Summit East talk by Ste...
 
Relational databases vs Non-relational databases
Relational databases vs Non-relational databasesRelational databases vs Non-relational databases
Relational databases vs Non-relational databases
 
Introduction to Dremio
Introduction to DremioIntroduction to Dremio
Introduction to Dremio
 
Architect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh ArchitectureArchitect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh Architecture
 
NoSql
NoSqlNoSql
NoSql
 
CSS Best practice
CSS Best practiceCSS Best practice
CSS Best practice
 
Optimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache SparkOptimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache Spark
 
Snowflake: The Good, the Bad, and the Ugly
Snowflake: The Good, the Bad, and the UglySnowflake: The Good, the Bad, and the Ugly
Snowflake: The Good, the Bad, and the Ugly
 
NOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQLNOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQL
 
An approach to use PERA in Enterprise Modeling for industrial systems
An approach to use PERA in Enterprise Modeling for industrial systemsAn approach to use PERA in Enterprise Modeling for industrial systems
An approach to use PERA in Enterprise Modeling for industrial systems
 
Using LLVM to accelerate processing of data in Apache Arrow
Using LLVM to accelerate processing of data in Apache ArrowUsing LLVM to accelerate processing of data in Apache Arrow
Using LLVM to accelerate processing of data in Apache Arrow
 
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the CloudAmazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
 
3D: DBT using Databricks and Delta
3D: DBT using Databricks and Delta3D: DBT using Databricks and Delta
3D: DBT using Databricks and Delta
 
Building Open Data Lakes on AWS with Debezium and Apache Hudi
Building Open Data Lakes on AWS with Debezium and Apache HudiBuilding Open Data Lakes on AWS with Debezium and Apache Hudi
Building Open Data Lakes on AWS with Debezium and Apache Hudi
 

Similar to Interactive Visualization With Bokeh (SF Python Meetup)

Bokeh Tutorial - PyData @ Strata San Jose 2015
Bokeh Tutorial - PyData @ Strata San Jose 2015Bokeh Tutorial - PyData @ Strata San Jose 2015
Bokeh Tutorial - PyData @ Strata San Jose 2015
Peter Wang
 
Elasticsearch intro output
Elasticsearch intro outputElasticsearch intro output
Elasticsearch intro output
Tom Chen
 
Create Graph and Grid Using D3 Library
Create Graph and Grid Using D3 LibraryCreate Graph and Grid Using D3 Library
Create Graph and Grid Using D3 LibraryYanliang Bao (Beryl)
 
아파트 정보를 이용한 ELK stack 활용 - 오근문
아파트 정보를 이용한 ELK stack 활용 - 오근문아파트 정보를 이용한 ELK stack 활용 - 오근문
아파트 정보를 이용한 ELK stack 활용 - 오근문
NAVER D2
 
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop ConnectorAnalytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Henrik Ingo
 
ELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboard
Georg Sorst
 
Scaling Saved Searches at eBay Kleinanzeigen
Scaling Saved Searches at eBay KleinanzeigenScaling Saved Searches at eBay Kleinanzeigen
Scaling Saved Searches at eBay Kleinanzeigen
Andre Charton
 
Class 4 handout two column layout w mobile web design
Class 4 handout two column layout w mobile web designClass 4 handout two column layout w mobile web design
Class 4 handout two column layout w mobile web designErin M. Kidwell
 
Использование Elasticsearch для организации поиска по сайту
Использование Elasticsearch для организации поиска по сайтуИспользование Elasticsearch для организации поиска по сайту
Использование Elasticsearch для организации поиска по сайту
Olga Lavrentieva
 
Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch sur Azure : Make sense of your (BIG) data !Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch sur Azure : Make sense of your (BIG) data !
Microsoft
 
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar PradhanAwesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Ajeet Singh Raina
 
Custom Visualizations: What, How and Why
Custom Visualizations: What, How and WhyCustom Visualizations: What, How and Why
Custom Visualizations: What, How and Why
Jeroen Van Der A
 
Hopper Elasticsearch Hackathon
Hopper Elasticsearch HackathonHopper Elasticsearch Hackathon
Hopper Elasticsearch Hackathonimotov
 
SQL vs NoSQL
SQL vs NoSQLSQL vs NoSQL
SQL vs NoSQL
Jacinto Limjap
 
Peggy elasticsearch應用
Peggy elasticsearch應用Peggy elasticsearch應用
Peggy elasticsearch應用
LearningTech
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
South Tyrol Free Software Conference
 
Anwendungsfaelle für Elasticsearch
Anwendungsfaelle für ElasticsearchAnwendungsfaelle für Elasticsearch
Anwendungsfaelle für Elasticsearch
Florian Hopf
 
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Codemotion
 
d3sparql.js demo at SWAT4LS 2014 in Berlin
d3sparql.js demo at SWAT4LS 2014 in Berlind3sparql.js demo at SWAT4LS 2014 in Berlin
d3sparql.js demo at SWAT4LS 2014 in Berlin
Toshiaki Katayama
 
Fighting fraud: finding duplicates at scale
Fighting fraud: finding duplicates at scaleFighting fraud: finding duplicates at scale
Fighting fraud: finding duplicates at scale
Alexey Grigorev
 

Similar to Interactive Visualization With Bokeh (SF Python Meetup) (20)

Bokeh Tutorial - PyData @ Strata San Jose 2015
Bokeh Tutorial - PyData @ Strata San Jose 2015Bokeh Tutorial - PyData @ Strata San Jose 2015
Bokeh Tutorial - PyData @ Strata San Jose 2015
 
Elasticsearch intro output
Elasticsearch intro outputElasticsearch intro output
Elasticsearch intro output
 
Create Graph and Grid Using D3 Library
Create Graph and Grid Using D3 LibraryCreate Graph and Grid Using D3 Library
Create Graph and Grid Using D3 Library
 
아파트 정보를 이용한 ELK stack 활용 - 오근문
아파트 정보를 이용한 ELK stack 활용 - 오근문아파트 정보를 이용한 ELK stack 활용 - 오근문
아파트 정보를 이용한 ELK stack 활용 - 오근문
 
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop ConnectorAnalytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop Connector
 
ELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboard
 
Scaling Saved Searches at eBay Kleinanzeigen
Scaling Saved Searches at eBay KleinanzeigenScaling Saved Searches at eBay Kleinanzeigen
Scaling Saved Searches at eBay Kleinanzeigen
 
Class 4 handout two column layout w mobile web design
Class 4 handout two column layout w mobile web designClass 4 handout two column layout w mobile web design
Class 4 handout two column layout w mobile web design
 
Использование Elasticsearch для организации поиска по сайту
Использование Elasticsearch для организации поиска по сайтуИспользование Elasticsearch для организации поиска по сайту
Использование Elasticsearch для организации поиска по сайту
 
Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch sur Azure : Make sense of your (BIG) data !Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch sur Azure : Make sense of your (BIG) data !
 
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar PradhanAwesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
Awesome Traefik - Ingress Controller for Kubernetes - Swapnasagar Pradhan
 
Custom Visualizations: What, How and Why
Custom Visualizations: What, How and WhyCustom Visualizations: What, How and Why
Custom Visualizations: What, How and Why
 
Hopper Elasticsearch Hackathon
Hopper Elasticsearch HackathonHopper Elasticsearch Hackathon
Hopper Elasticsearch Hackathon
 
SQL vs NoSQL
SQL vs NoSQLSQL vs NoSQL
SQL vs NoSQL
 
Peggy elasticsearch應用
Peggy elasticsearch應用Peggy elasticsearch應用
Peggy elasticsearch應用
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
 
Anwendungsfaelle für Elasticsearch
Anwendungsfaelle für ElasticsearchAnwendungsfaelle für Elasticsearch
Anwendungsfaelle für Elasticsearch
 
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
 
d3sparql.js demo at SWAT4LS 2014 in Berlin
d3sparql.js demo at SWAT4LS 2014 in Berlind3sparql.js demo at SWAT4LS 2014 in Berlin
d3sparql.js demo at SWAT4LS 2014 in Berlin
 
Fighting fraud: finding duplicates at scale
Fighting fraud: finding duplicates at scaleFighting fraud: finding duplicates at scale
Fighting fraud: finding duplicates at scale
 

More from Peter Wang

Rethinking Decentralization / Whither Privacy?
Rethinking Decentralization / Whither Privacy?Rethinking Decentralization / Whither Privacy?
Rethinking Decentralization / Whither Privacy?
Peter Wang
 
Rethinking OSS In An Era of Cloud and ML
Rethinking OSS In An Era of Cloud and MLRethinking OSS In An Era of Cloud and ML
Rethinking OSS In An Era of Cloud and ML
Peter Wang
 
Python for Data: Past, Present, Future (PyCon JP 2017 Keynote)
Python for Data: Past, Present, Future (PyCon JP 2017 Keynote)Python for Data: Past, Present, Future (PyCon JP 2017 Keynote)
Python for Data: Past, Present, Future (PyCon JP 2017 Keynote)
Peter Wang
 
Command line Data Tools
Command line Data ToolsCommand line Data Tools
Command line Data Tools
Peter Wang
 
Stories, Myth, and the Humane Network
Stories, Myth, and the Humane NetworkStories, Myth, and the Humane Network
Stories, Myth, and the Humane Network
Peter Wang
 
Thoughts on Business & Startups
Thoughts on Business & StartupsThoughts on Business & Startups
Thoughts on Business & Startups
Peter Wang
 
PyData Texas 2015 Keynote
PyData Texas 2015 KeynotePyData Texas 2015 Keynote
PyData Texas 2015 Keynote
Peter Wang
 
PyData: Past, Present Future (PyData SV 2014 Keynote)
PyData: Past, Present Future (PyData SV 2014 Keynote)PyData: Past, Present Future (PyData SV 2014 Keynote)
PyData: Past, Present Future (PyData SV 2014 Keynote)
Peter Wang
 
Python's Role in the Future of Data Analysis
Python's Role in the Future of Data AnalysisPython's Role in the Future of Data Analysis
Python's Role in the Future of Data Analysis
Peter Wang
 

More from Peter Wang (9)

Rethinking Decentralization / Whither Privacy?
Rethinking Decentralization / Whither Privacy?Rethinking Decentralization / Whither Privacy?
Rethinking Decentralization / Whither Privacy?
 
Rethinking OSS In An Era of Cloud and ML
Rethinking OSS In An Era of Cloud and MLRethinking OSS In An Era of Cloud and ML
Rethinking OSS In An Era of Cloud and ML
 
Python for Data: Past, Present, Future (PyCon JP 2017 Keynote)
Python for Data: Past, Present, Future (PyCon JP 2017 Keynote)Python for Data: Past, Present, Future (PyCon JP 2017 Keynote)
Python for Data: Past, Present, Future (PyCon JP 2017 Keynote)
 
Command line Data Tools
Command line Data ToolsCommand line Data Tools
Command line Data Tools
 
Stories, Myth, and the Humane Network
Stories, Myth, and the Humane NetworkStories, Myth, and the Humane Network
Stories, Myth, and the Humane Network
 
Thoughts on Business & Startups
Thoughts on Business & StartupsThoughts on Business & Startups
Thoughts on Business & Startups
 
PyData Texas 2015 Keynote
PyData Texas 2015 KeynotePyData Texas 2015 Keynote
PyData Texas 2015 Keynote
 
PyData: Past, Present Future (PyData SV 2014 Keynote)
PyData: Past, Present Future (PyData SV 2014 Keynote)PyData: Past, Present Future (PyData SV 2014 Keynote)
PyData: Past, Present Future (PyData SV 2014 Keynote)
 
Python's Role in the Future of Data Analysis
Python's Role in the Future of Data AnalysisPython's Role in the Future of Data Analysis
Python's Role in the Future of Data Analysis
 

Recently uploaded

Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Subhajit Sahu
 
一比一原版(UIUC毕业证)伊利诺伊大学|厄巴纳-香槟分校毕业证如何办理
一比一原版(UIUC毕业证)伊利诺伊大学|厄巴纳-香槟分校毕业证如何办理一比一原版(UIUC毕业证)伊利诺伊大学|厄巴纳-香槟分校毕业证如何办理
一比一原版(UIUC毕业证)伊利诺伊大学|厄巴纳-香槟分校毕业证如何办理
ahzuo
 
Levelwise PageRank with Loop-Based Dead End Handling Strategy : SHORT REPORT ...
Levelwise PageRank with Loop-Based Dead End Handling Strategy : SHORT REPORT ...Levelwise PageRank with Loop-Based Dead End Handling Strategy : SHORT REPORT ...
Levelwise PageRank with Loop-Based Dead End Handling Strategy : SHORT REPORT ...
Subhajit Sahu
 
Learn SQL from basic queries to Advance queries
Learn SQL from basic queries to Advance queriesLearn SQL from basic queries to Advance queries
Learn SQL from basic queries to Advance queries
manishkhaire30
 
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
g4dpvqap0
 
做(mqu毕业证书)麦考瑞大学毕业证硕士文凭证书学费发票原版一模一样
做(mqu毕业证书)麦考瑞大学毕业证硕士文凭证书学费发票原版一模一样做(mqu毕业证书)麦考瑞大学毕业证硕士文凭证书学费发票原版一模一样
做(mqu毕业证书)麦考瑞大学毕业证硕士文凭证书学费发票原版一模一样
axoqas
 
The affect of service quality and online reviews on customer loyalty in the E...
The affect of service quality and online reviews on customer loyalty in the E...The affect of service quality and online reviews on customer loyalty in the E...
The affect of service quality and online reviews on customer loyalty in the E...
jerlynmaetalle
 
STATATHON: Unleashing the Power of Statistics in a 48-Hour Knowledge Extravag...
STATATHON: Unleashing the Power of Statistics in a 48-Hour Knowledge Extravag...STATATHON: Unleashing the Power of Statistics in a 48-Hour Knowledge Extravag...
STATATHON: Unleashing the Power of Statistics in a 48-Hour Knowledge Extravag...
sameer shah
 
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdfEnhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
GetInData
 
一比一原版(Dalhousie毕业证书)达尔豪斯大学毕业证如何办理
一比一原版(Dalhousie毕业证书)达尔豪斯大学毕业证如何办理一比一原版(Dalhousie毕业证书)达尔豪斯大学毕业证如何办理
一比一原版(Dalhousie毕业证书)达尔豪斯大学毕业证如何办理
mzpolocfi
 
The Building Blocks of QuestDB, a Time Series Database
The Building Blocks of QuestDB, a Time Series DatabaseThe Building Blocks of QuestDB, a Time Series Database
The Building Blocks of QuestDB, a Time Series Database
javier ramirez
 
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
slg6lamcq
 
一比一原版(CBU毕业证)卡普顿大学毕业证如何办理
一比一原版(CBU毕业证)卡普顿大学毕业证如何办理一比一原版(CBU毕业证)卡普顿大学毕业证如何办理
一比一原版(CBU毕业证)卡普顿大学毕业证如何办理
ahzuo
 
原版制作(swinburne毕业证书)斯威本科技大学毕业证毕业完成信一模一样
原版制作(swinburne毕业证书)斯威本科技大学毕业证毕业完成信一模一样原版制作(swinburne毕业证书)斯威本科技大学毕业证毕业完成信一模一样
原版制作(swinburne毕业证书)斯威本科技大学毕业证毕业完成信一模一样
u86oixdj
 
Influence of Marketing Strategy and Market Competition on Business Plan
Influence of Marketing Strategy and Market Competition on Business PlanInfluence of Marketing Strategy and Market Competition on Business Plan
Influence of Marketing Strategy and Market Competition on Business Plan
jerlynmaetalle
 
Analysis insight about a Flyball dog competition team's performance
Analysis insight about a Flyball dog competition team's performanceAnalysis insight about a Flyball dog competition team's performance
Analysis insight about a Flyball dog competition team's performance
roli9797
 
Data_and_Analytics_Essentials_Architect_an_Analytics_Platform.pptx
Data_and_Analytics_Essentials_Architect_an_Analytics_Platform.pptxData_and_Analytics_Essentials_Architect_an_Analytics_Platform.pptx
Data_and_Analytics_Essentials_Architect_an_Analytics_Platform.pptx
AnirbanRoy608946
 
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
v3tuleee
 
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
slg6lamcq
 
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
John Andrews
 

Recently uploaded (20)

Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
Algorithmic optimizations for Dynamic Levelwise PageRank (from STICD) : SHORT...
 
一比一原版(UIUC毕业证)伊利诺伊大学|厄巴纳-香槟分校毕业证如何办理
一比一原版(UIUC毕业证)伊利诺伊大学|厄巴纳-香槟分校毕业证如何办理一比一原版(UIUC毕业证)伊利诺伊大学|厄巴纳-香槟分校毕业证如何办理
一比一原版(UIUC毕业证)伊利诺伊大学|厄巴纳-香槟分校毕业证如何办理
 
Levelwise PageRank with Loop-Based Dead End Handling Strategy : SHORT REPORT ...
Levelwise PageRank with Loop-Based Dead End Handling Strategy : SHORT REPORT ...Levelwise PageRank with Loop-Based Dead End Handling Strategy : SHORT REPORT ...
Levelwise PageRank with Loop-Based Dead End Handling Strategy : SHORT REPORT ...
 
Learn SQL from basic queries to Advance queries
Learn SQL from basic queries to Advance queriesLearn SQL from basic queries to Advance queries
Learn SQL from basic queries to Advance queries
 
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
一比一原版(爱大毕业证书)爱丁堡大学毕业证如何办理
 
做(mqu毕业证书)麦考瑞大学毕业证硕士文凭证书学费发票原版一模一样
做(mqu毕业证书)麦考瑞大学毕业证硕士文凭证书学费发票原版一模一样做(mqu毕业证书)麦考瑞大学毕业证硕士文凭证书学费发票原版一模一样
做(mqu毕业证书)麦考瑞大学毕业证硕士文凭证书学费发票原版一模一样
 
The affect of service quality and online reviews on customer loyalty in the E...
The affect of service quality and online reviews on customer loyalty in the E...The affect of service quality and online reviews on customer loyalty in the E...
The affect of service quality and online reviews on customer loyalty in the E...
 
STATATHON: Unleashing the Power of Statistics in a 48-Hour Knowledge Extravag...
STATATHON: Unleashing the Power of Statistics in a 48-Hour Knowledge Extravag...STATATHON: Unleashing the Power of Statistics in a 48-Hour Knowledge Extravag...
STATATHON: Unleashing the Power of Statistics in a 48-Hour Knowledge Extravag...
 
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdfEnhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
 
一比一原版(Dalhousie毕业证书)达尔豪斯大学毕业证如何办理
一比一原版(Dalhousie毕业证书)达尔豪斯大学毕业证如何办理一比一原版(Dalhousie毕业证书)达尔豪斯大学毕业证如何办理
一比一原版(Dalhousie毕业证书)达尔豪斯大学毕业证如何办理
 
The Building Blocks of QuestDB, a Time Series Database
The Building Blocks of QuestDB, a Time Series DatabaseThe Building Blocks of QuestDB, a Time Series Database
The Building Blocks of QuestDB, a Time Series Database
 
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
一比一原版(Adelaide毕业证书)阿德莱德大学毕业证如何办理
 
一比一原版(CBU毕业证)卡普顿大学毕业证如何办理
一比一原版(CBU毕业证)卡普顿大学毕业证如何办理一比一原版(CBU毕业证)卡普顿大学毕业证如何办理
一比一原版(CBU毕业证)卡普顿大学毕业证如何办理
 
原版制作(swinburne毕业证书)斯威本科技大学毕业证毕业完成信一模一样
原版制作(swinburne毕业证书)斯威本科技大学毕业证毕业完成信一模一样原版制作(swinburne毕业证书)斯威本科技大学毕业证毕业完成信一模一样
原版制作(swinburne毕业证书)斯威本科技大学毕业证毕业完成信一模一样
 
Influence of Marketing Strategy and Market Competition on Business Plan
Influence of Marketing Strategy and Market Competition on Business PlanInfluence of Marketing Strategy and Market Competition on Business Plan
Influence of Marketing Strategy and Market Competition on Business Plan
 
Analysis insight about a Flyball dog competition team's performance
Analysis insight about a Flyball dog competition team's performanceAnalysis insight about a Flyball dog competition team's performance
Analysis insight about a Flyball dog competition team's performance
 
Data_and_Analytics_Essentials_Architect_an_Analytics_Platform.pptx
Data_and_Analytics_Essentials_Architect_an_Analytics_Platform.pptxData_and_Analytics_Essentials_Architect_an_Analytics_Platform.pptx
Data_and_Analytics_Essentials_Architect_an_Analytics_Platform.pptx
 
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理一比一原版(UofS毕业证书)萨省大学毕业证如何办理
一比一原版(UofS毕业证书)萨省大学毕业证如何办理
 
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
一比一原版(UniSA毕业证书)南澳大学毕业证如何办理
 
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
Chatty Kathy - UNC Bootcamp Final Project Presentation - Final Version - 5.23...
 

Interactive Visualization With Bokeh (SF Python Meetup)

  • 2. About Continuum Analytics Domains • Finance •Geophysics •Defense •Advertising metrics & data analysis • Scientific computing Technologies •Array/Columnar data processing • Distributed computing, HPC • GPU and new vector hardware •Machine learning, predictive analytics • Interactive Visualization Enterprise Python Data Processing Scientific Computing Data Analysis Visualisation Scalable Computing
  • 3. Bokeh • Interactive visualization • Novel graphics • Streaming, dynamic, large data • For the browser, with or without a server • No need to write Javascript
  • 4. Interactive • Dragging & zooming, with linking • Selections that can round-trip to server • Resize, entirely on client side • Flexible hover http://bokeh.pydata.org/gallery.html
  • 14. Matplotlib Chaco d3 mpld3 Vincent Interactive visualization * Y * Y Novel graphics * * Y Y Streaming/dynamic data * Y Y Large data * Y Y For the browser Y Y Y Y No need to write Javascript Y Y Y Y Y Works with Matplotlib Y Y Y Works with IPython notebook Y Y Y Y
  • 16. Previous: Javascript code generation HTML server.py Browser App Model js_str = """ <d3.js> <highchart.js> <etc.js> """ plot.js.template D3 highcharts flot crossfilter etc. ... One-shot; no MVC interaction; no data streaming
  • 17. BokehJS • Full-fledged dynamic, interactive plotting engine • materializes a reactive scenegraph from JSON • optionally push/pull state from server, using websockets • HTML5 Canvas, backbone.js, coffeescript, AMD, plays with JSfiddle, … ! “We wrote JavaScript, so you don’t have to.”
  • 18. bokeh.py & bokeh.js App Model server.py Browser bokeh.py object graph JSON BokehJS object graph
  • 19. bokeh.py & bokeh.js App Model server.py Browser BokehJS object graph bokeh-server bokeh.py object graph JSON
  • 21. iris.html ! <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>iris.py example</title> <link rel="stylesheet" href="../../../../../anaconda/envs/bokehdemo/lib/python2.7/site-packages/bokeh/server/static/css/bokeh.min.css" type="text/css" /> <script type="text/javascript" src="../../../../../anaconda/envs/bokehdemo/lib/python2.7/site-packages/bokeh/server/static/js/bokeh.min.js"></script> <script type="text/javascript"> $(function() { var all_models = [{"attributes": {"column_names": ["fill_color", "line_color", "x", "y"], "doc": null, "selected": [], "discrete_ranges": {}, "cont_ranges": {}, "data": {"line_color": ["red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue"], "x": [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4, 1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1.0, 1.7, 1.9, 1.6, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3, 1.4, 1.3, 1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5, 1.4, 4.7, 4.5, 4.9, 4.0, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5, 4.2, 4.0, 4.7, 3.6, 4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4.0, 4.9, 4.7, 4.3, 4.4, 4.8, 5.0, 4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5, 4.7, 4.4, 4.1, 4.0, 4.4, 4.6, 4.0, 3.3, 4.2, 4.2, 4.2, 4.3, 3.0, 4.1, 6.0, 5.1, 5.9, 5.6, 5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1, 5.3, 5.5, 5.0, 5.1, 5.3, 5.5, 6.7, 6.9, 5.0, 5.7, 4.9, 6.7, 4.9, 5.7, 6.0, 4.8, 4.9, 5.6, 5.8, 6.1, 6.4, 5.6, 5.1, 5.6, 6.1, 5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1, 5.9, 5.7, 5.2, 5.0, 5.2, 5.4, 5.1], "fill_color": ["red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "red", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue", "blue"], "y": [0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2, 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3, 2.5, 1.9, 2.1, 1.8, 2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2.0, 1.9, 2.1, 2.0, 2.4, 2.3, 1.8, 2.2, 2.3, 1.5, 2.3, 2.0, 2.0, 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6, 1.9, 2.0, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3, 1.9, 2.3, 2.5, 2.3, 1.9, 2.0, 2.3, 1.8]}, "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, "type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, {"attributes": {"sources": [{"source": {"type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, "columns": ["x"]}], "id": "bbaf66fb-48b8-474a-8dae-910a995186f6", "doc": null}, "type": "DataRange1d", "id": "bbaf66fb-48b8-474a-8dae-910a995186f6"}, {"attributes": {"sources": [{"source": {"type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, "columns": ["y"]}], "id": "8377dd3b-9c4e-41ce-8930-76a92a68e907", "doc": null}, "type": "DataRange1d", "id": "8377dd3b-9c4e-41ce-8930-76a92a68e907"}, {"attributes": {"doc": null, "id": "24c8ae7c-f3c8-4c88-9f5d-dcbe59506791"}, "type": "BasicTickFormatter", "id": "24c8ae7c-f3c8-4c88-9f5d-dcbe59506791"}, {"attributes": {"doc": null, "id": "3720fa34-cea8-4b54-a51b-c738a1ef96fb"}, "type": "BasicTicker", "id": "3720fa34-cea8-4b54-a51b-c738a1ef96fb"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "doc": null, "bounds": "auto", "id": "0ae2ae05-3abd-414a-9840-c5e804de9661", "location": "min", "formatter": {"type": "BasicTickFormatter", "id": "24c8ae7c-f3c8-4c88-9f5d-dcbe59506791"}, "ticker": {"type": "BasicTicker", "id": "3720fa34-cea8-4b54-a51b-c738a1ef96fb"}, "dimension": 0}, "type": "LinearAxis", "id": "0ae2ae05-3abd-414a-9840-c5e804de9661"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "doc": null, "axis": {"type": "LinearAxis", "id": "0ae2ae05-3abd-414a-9840-c5e804de9661"}, "id": "25d48bf1-6583-4aff-9e47-dd57e304fb7a", "dimension": 0}, "type": "Grid", "id": "25d48bf1-6583-4aff-9e47-dd57e304fb7a"}, {"attributes": {"doc": null, "id": "d88bdf6f-b1a7-49c1-b71e-df2c1156f202"}, "type": "BasicTickFormatter", "id": "d88bdf6f-b1a7-49c1-b71e-df2c1156f202"}, {"attributes": {"doc": null, "id": "434ab651-0a3a-4bab-aa7a-34844b833bce"}, "type": "BasicTicker", "id": "434ab651-0a3a-4bab-aa7a-34844b833bce"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "doc": null, "bounds": "auto", "id": "53cf6b9d-1c82-48d2-8094-5a81fed497d9", "location": "min", "formatter": {"type": "BasicTickFormatter", "id": "d88bdf6f-b1a7-49c1-b71e-df2c1156f202"}, "ticker": {"type": "BasicTicker", "id": "434ab651-0a3a-4bab-aa7a-34844b833bce"}, "dimension": 1}, "type": "LinearAxis", "id": "53cf6b9d-1c82-48d2-8094-5a81fed497d9"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "doc": null, "axis": {"type": "LinearAxis", "id": "53cf6b9d-1c82-48d2-8094-5a81fed497d9"}, "id": "21bd25eb-22d3-427c-a6a3-5e3afc96cc2a", "dimension": 1}, "type": "Grid", "id": "21bd25eb-22d3-427c-a6a3-5e3afc96cc2a"}, {"attributes": {"data_source": {"type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c"}, "server_data_source": null, "doc": null, "nonselection_glyphspec": {"line_color": {"value": "#1f77b4"}, "angle_units": "deg", "fill_color": {"value": "#1f77b4"}, "visible": null, "line_dash_offset": 0, "line_join": "miter", "size": {"units": "screen", "value": 10}, "line_alpha": {"units": "data", "value": 0.1}, "radius_units": "screen", "end_angle_units": "deg", "valign": null, "length_units": "screen", "start_angle_units": "deg", "line_cap": "butt", "line_dash": [], "line_width": {"units": "data", "field": "line_width"}, "type": "circle", "fill_alpha": {"units": "data", "value": 0.1}, "halign": null, "y": {"units": "data", "field": "y"}, "x": {"units": "data", "field": "x"}, "margin": null}, "xdata_range": null, "ydata_range": null, "glyphspec": {"line_color": {"units": "data", "field": "line_color"}, "line_alpha": {"units": "data", "value": 1.0}, "fill_color": {"units": "data", "field": "fill_color"}, "line_width": {"units": "data", "field": "line_width"}, "fill_alpha": {"units": "data", "value": 0.2}, "y": {"units": "data", "field": "y"}, "x": {"units": "data", "field": "x"}, "type": "circle", "size": {"units": "screen", "value": 10}}, "id": "093300cf-6759-4449-877b-7731476588a0"}, "type": "Glyph", "id": "093300cf-6759-4449-877b-7731476588a0"}, {"attributes": {"plot": null, "doc": null, "renderers": [{"type": "Glyph", "id": "093300cf-6759-4449-877b-7731476588a0"}], "id": "9a60e0da-efe5-4b08-a4f6-7ed315d67b9b"}, "type": "BoxSelectTool", "id": "9a60e0da-efe5-4b08-a4f6-7ed315d67b9b"}, {"attributes": {"doc": null, "tool": {"type": "BoxSelectTool", "id": "9a60e0da-efe5-4b08-a4f6-7ed315d67b9b"}, "id": "5a0e8c76-4893-452b-b2e8-cefb1a232437"}, "type": "BoxSelection", "id": "5a0e8c76-4893-452b-b2e8-cefb1a232437"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "dimensions": ["width", "height"], "doc": null, "id": "a4b154c7-b674-4f86-93f8-770cf7a0d9b5"}, "type": "PanTool", "id": "a4b154c7- b674-4f86-93f8-770cf7a0d9b5"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "dimensions": ["width", "height"], "doc": null, "id": "3ba5854b-e047-47c2-989b-15b5b79cb205"}, "type": "WheelZoomTool", "id": "3ba5854b-e047-47c2-989b-15b5b79cb205"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "id": "0a583af8-4db5-45ea-b09b-16562035ccc4", "doc": null}, "type": "PreviewSaveTool", "id": "0a583af8-4db5-45ea-b09b-16562035ccc4"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "id": "5621f214-17c9-417f-aaed-f841745f489f", "doc": null}, "type": "ResizeTool", "id": "5621f214-17c9-417f-aaed-f841745f489f"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "id": "98be8a66-dfaa-4f2d-95cd-0296a3647da1", "doc": null}, "type": "ResetTool", "id": "98be8a66-dfaa-4f2d-95cd-0296a3647da1"}, {"attributes": {"outer_height": 600, "x_range": {"type": "DataRange1d", "id": "bbaf66fb-48b8-474a-8dae-910a995186f6"}, "y_range": {"type": "DataRange1d", "id": "8377dd3b-9c4e-41ce-8930-76a92a68e907"}, "outer_width": 600, "renderers": [{"type": "LinearAxis", "id": "0ae2ae05-3abd-414a-9840-c5e804de9661"}, {"type": "Grid", "id": "25d48bf1-6583-4aff-9e47-dd57e304fb7a"}, {"type": "LinearAxis", "id": "53cf6b9d-1c82-48d2-8094-5a81fed497d9"}, {"type": "Grid", "id": "21bd25eb-22d3-427c-a6a3-5e3afc96cc2a"}, {"type": "BoxSelection", "id": "6451a3a2-d1d7-401e-8ec6-ed92c626f448"}, {"type": "BoxSelection", "id": "5a0e8c76-4893-452b-b2e8-cefb1a232437"}, {"type": "Glyph", "id": "093300cf-6759-4449-877b-7731476588a0"}], "id": "iris", "data_sources": [], "doc": null, "canvas_height": 600, "title": "Plot", "tools": [{"type": "PanTool", "id": "a4b154c7-b674-4f86-93f8-770cf7a0d9b5"}, {"type": "WheelZoomTool", "id": "3ba5854b-e047-47c2-989b-15b5b79cb205"}, {"type": "BoxZoomTool", "id": "a047dc9b-0dd1-4883-8575-550cd63409fa"}, {"type": "PreviewSaveTool", "id": "0a583af8-4db5-45ea-b09b- 16562035ccc4"}, {"type": "ResizeTool", "id": "5621f214-17c9-417f-aaed-f841745f489f"}, {"type": "BoxSelectTool", "id": "9a60e0da-efe5-4b08-a4f6-7ed315d67b9b"}, {"type": "ResetTool", "id": "98be8a66-dfaa-4f2d-95cd-0296a3647da1"}], "canvas_width": 600}, "type": "Plot", "id": "iris"}, {"attributes": {"plot": {"type": "Plot", "id": "iris"}, "id": "a047dc9b-0dd1-4883-8575-550cd63409fa", "doc": null}, "type": "BoxZoomTool", "id": "a047dc9b-0dd1-4883-8575-550cd63409fa"}, {"attributes": {"doc": null, "tool": {"type": "BoxZoomTool", "id": "a047dc9b-0dd1-4883-8575-550cd63409fa"}, "id": "6451a3a2-d1d7-401e-8ec6-ed92c626f448"}, "type": "BoxSelection", "id": "6451a3a2-d1d7-401e-8ec6-ed92c626f448"}, {"attributes": {"doc": null, "children": [{"type": "Plot", "id": "iris"}], "id": "475ad0da-baf5-48be-902b-166b060b6978"}, "type": "PlotContext", "id": "475ad0da-baf5-48be-902b-166b060b6978"}]; var modelid = "475ad0da-baf5-48be-902b-166b060b6978"; var modeltype = "PlotContext"; var elementid = "8bb1deb5-74cb-4b28-b44f-c89dc5701d69"; console.log(modelid, modeltype, elementid); Bokeh.load_models(all_models); var model = Bokeh.Collections(modeltype).get(modelid); var view = new model.default_view({model: model, el: '#8bb1deb5-74cb-4b28-b44f-c89dc5701d69'}); }); </script> </head> <body> <div class="plotdiv" id="8bb1deb5-74cb-4b28-b44f-c89dc5701d69">Plots</div> </body> </html>
  • 22. iris.html (detail) <head> <meta charset="utf-8"> <title>iris.py example</title> <link rel="stylesheet" href="../bokeh/server/static/css/bokeh.min.css" type="text/css" /> <script type="text/javascript" src=“../bokeh/server/static/js/bokeh.min.js"></script> <script type=“text/javascript”> $(function() { var all_models = [JSON data] var modelid = "475ad0da-baf5-48be-902b-166b060b6978"; var modeltype = "PlotContext"; var elementid = "8bb1deb5-74cb-4b28-b44f-c89dc5701d69"; console.log(modelid, modeltype, elementid); Bokeh.load_models(all_models); var model = Bokeh.Collections(modeltype).get(modelid); var view = new model.default_view({ model: model, el: '#8bb1deb5-74cb-4b28-b44f-c89dc5701d69'}); }); </script> </head> <body> <div class="plotdiv" id="8bb1deb5-74cb-4b28-b44f-c89dc5701d69">Plots</div> </body> </html>
  • 23. JSON { "attributes": { "sources": [ { "source": { "type": "ColumnDataSource", "id": "5e71b46a-0d81-4a18-8402-188816471c0c" }, "columns": [ "x" ] } ], "id": "bbaf66fb-48b8-474a-8dae-910a995186f6", "doc": null }, "type": "DataRange1d", "id": "bbaf66fb-48b8-474a-8dae-910a995186f6" },
  • 24. Other languages can generate JSON... bokeh.r! bokeh.h bokeh.m bokeh.java ...
  • 25. New Release! v0.6 • New charts in bokeh.charts: Time Series and Categorical Heatmap • Sophisticated Hands-on Table widget • Complete Python 3 support for bokeh-server • Much expanded User Guide and Dev Guide • Multiple axes and ranges now supported • Object query interface to help with plot styling • Blog post coming soon (tomorrow?) https://groups.google.com/a/continuum.io/forum/#!topic/bokeh/Hm-QNV9uQOA
  • 27. What’s Next • Improved widgets (including tables): • Graphical, data-driven “applets” • Easier dashboards • Improved crossfilter app • Improved bokeh.charts library • Data-driven layout • SVG output • command-line tool
  • 30. How to Help & Contribute • Open source BSD license for everything (JS, Python, server) • Use it and provide feedback • Designer? Front-end dev? - Get in touch! • Engage us to work on custom visual exploration apps & dashboards • Not just code integration - also provide visualization expertise • Helps the open source efforts @bokehplots