Developing Dashboard Applications Using Bokeh - Bryan Van de Ven

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Applause] okay for being here today at the first I believe PI data Los Angeles so first thing to notice that yeah I'm Brian van de van I'm not luke Canavan who was originally scheduled to give that talk I'm gonna be giving a very similar talk as it happens I'm also the project lead for bouquet and so I'm really most good at maybe doing status updates for booking so I'm gonna put a little bit of that in this talk as well because it's very timely we're actually gonna be releasing a 1.0 release a bouquet this week so that's exciting so I will give a little bit of a status update and then also talk about bouquet and now it can be used to build data applications and dashboards and give some examples of that as well so first off who's familiar with okay so fans or who's not familiar with okay okay a good number of people so I'm gonna go ahead and just quickly go through sort of what bouquets about I like to give this for recorded videos anyway so that way if there's viewers later they can make sure to have the full picture so just to quickly introduce bouquet bouquet is the tool for interactive visualizations it allows you to add all kinds of interactive controls widgets you know dynamic sort of aspects on a on a web page to interact with you know PI data tools for visualization it supports all kinds of versatile and high level graphics we want to make it possible to create very I don't novel graphics but certainly any kind of graphic you need to be able to create hopefully you can do with bouquet we also want to build a handle streaming data so of large data any kind of dynamic updating data if you've got data coming in over some you know Ajax REST API or you've got data that you're streaming in from some you know market source or some sensor we won't be able to handle cases like that as well so bouquet has facilities for that all of this is for the browser right so this generates HTML pages that are reactive that have you know these visualizations in them and that's with or without the bouquet server so there's an optional book a server component that's part of bouquet that we'll talk about in a bit that really allows you to connect all of the actual you know pi data tools OpenCV pandas numpy all of these things to these visualizations very easily and we'll talk about that in a bit and also of course it works in the Jupiter notebook right so everyone I imagine is using the Jupiter notebook for all kinds of exploratory data analysis and so bouquet works really well inside Jupiter notebooks and the last thing of course is that there's no JavaScript that you have to sort of muck with repeats that no JavaScript and that's not my way of trying to like language shame I'm just trying to say that you know all of us probably are productive in Python that's why we're here at iData we're productive in our and julia and so book is really about creating simple you know to write apps for data science so we've got all kinds of different domains where you might want to create things allow you to slice and dice or look into data across filter data we might want to create you know report type things we have a live streaming spectrogram example they were running scikit-learn you know all of these things you own okay it's simple to write data apps and so that's just you know when I say no JavaScript it's more about making it so you can concentrate on your work you're already productive you know in Python in our and you know productive with all these Python tools so let's let you stay in that productive area and and still make these powerful visualizations so there's mostly you know written in Python if you want to do some customizations you can do customizations but to get a simple book a page or book a application running there's little or no HTML or CSS coding required to do that and also the scripts that you write themselves are very simple and we'll see some examples in a bit they look just like regular Python scripts there's not some big framework that you have to plug in or classes that you have to subclass or you know you can use all the organizational tools in Python to organize your your bouquet application if you want to but you can also just write simple scripts and we'll see some examples of that bouquet is useful for a wide variety of use cases people use it in the notebook for exploratory data analysis and especially in conjunction with pandas there are folks that are starting to build higher-level tools on top of bouquet things called how the views how the views is one example together with data shader these are even higher level api's that are really great for exploratory data analysis and maybe i can link to some of those in a bit the bouquet server as i mentioned its main use case is to automatically mirror state from python to javascript we'll talk about how bouquets actually put together some concepts in a second but the bouquet server lets you synchronize things between Python and JavaScript very easily so if I make a change in Python if I update some data my my plot or my graph can update if they user make a selection on the plot I can transmit that information back to Python and react to it do other kinds of computations or other kinds of analysis on that than information and in general we're trying to let people connect to the full I did a stack right these interactive web apps as easily as possible as frictionless as possible so we've got numpy we've got type i i've got pandas we've got scikit-learn and sk image all these tools that are really fantastic how do we sort of plug those into interactive visualizations without having to write a huge web app ourselves so people have done a lot of interesting things with bouquet as I mentioned we're having a release here pretty soon this has put me a little bit of a reflective mood so I sort of went through Twitter and found some examples that people have done cool things with bouquet we can see the dashboard we'll see that in a bit more detail people are doing sort of geographic and map type explorations or some folks doing sports analyses there's some astronomers who've been using bouquet a lot to do some really cool analyses on astronomical data and other hard sciences folks and you know those people who have used bokeh in a wide variety of venues is obviously finance folks they're using bouquet I know some people in the pharmaceutical industry or using bouquet so a lot of different applications and use cases for bouquet if I can pick on one this one just is the most recent one I've I've seen this is a couple of ghost lights light curve and this is an example that was created again by one of those astronomers so they've got astronomical data coming in and typically a lot of data so they want able to drill down and sort of see all kinds of different aspects of data and so a bouquet allows them the tools to be able to do that right we can have all kinds of interactions panning and zooming selections and then we can link that to other plots and whatever these kind of events happen you know we can use the book a server to respond to those events an update accordingly and so that's been a very useful thing for them to create ok so with that brief introduction I want to talk a little bit about bouquet today this is the status update portion where bouquets today we're attended a few words about that and then we'll get into sort of the the meat of the presentation in a bit ok so just as a quick reflection again I'm in a very nostalgic mood just to set the stage this is circa June 2014 probably the first sort of real release of bouquet maybe 0.5 you can see we had about you know 5,000 downloads a month and it's pretty astounding to me and humbling actually to see sort of where we've come in those intervening years right so now if you combine content pie pie downloads it's well over half a million installs per month and it's that still blows me away so there's a lot of people using bouquet for a lot of interesting cases and I'm really great the opportunity to build this but all of that's possible not because of my work but because of an entire team of people who have contributed to bouquet over the years and has been just really fantastic people who've worked on bouquet have it Pennington one of the original gnome gtk developers wrote the second-generation bouquet server the reason it's so fantastic is because he's fantastic you know julia signal just added a long time issue patches with holes which is gonna help support contour plots and some GIS use cases just added that in 41.0 philip and john luke or the howl of use devs they've done some great work to add new features that support howl of use Mateus is you know one of our stalwart sort of front-end JavaScript developers of course the inimitable Sarah bird has done a huge amount of work to my bouquet look really good better than sort of designed by engineers look and so a lot of that's as a result of her fantastic work so a lot of people have worked but also a lot of other people we just hit 322 contributors on github I think this would be the final number before 1.0 release and that's again very humbling and very amazing really grateful for all those people I'd like to call it a few special thanks to Carl Vander Plaats Eugene Packham olive and Anthony dokely augo's who we just recently recognized at the gnome focus summit as sort of new contributors and so they've done a lot of really great work we're starting to get the point where we get new contributors to bouquet who are doing more than just sort of a drive-by PR they you know they submit five or six PRS and they're a lot more in-depth and so I really encourage anyone who's interested in getting involved in bouquet to you know come talk to us we'd love to have new contributors great places to talk to us are places like the mailing list stack overflow good for questions or there's a get our dev channel which is a really good place to come and talk to us as well okay so I mentioned we're brown I have a 1.0 release this week it might be tomorrow this travel has put a little bit of a kink in my schedule so it might be Wednesday I'll see what we do but some of the new things that are coming in 1.0 as I mentioned julia added support for multi polygons with holes this is sort of a long time issue it just took a while to get it done but that's actually useful for things again like filled contour plots or some different GIS type plots so that's actually exciting to get that in several fixes the data table you know that's one of the more complicated widgets we have to deal with and set various issues I will say one of the nice things as we've just put in new infrastructure for integration and selenium testing and so we're actually able to maintain these I think a lot better going forward and prevent some of the kinds of regressions we've had in the last year or so but anyway there's a lot of fixes that are coming for data table which is good we also added a custom action so if you want to add your own toolbar button that invokes a little custom ji snippet and to do whatever you want it's very easy to do that now to have your own toolbar button we also added a new way to export and embed okay so you know part of the motivation in making bouquet easy to use without JavaScript was we we made some functions that just returned like a script tag that you can embed in a template but as it turns out some folks actually want a little bit more work to do on the ji side and they would like just a pile of JSON just the raw JSON that represents a bouquet document and so we now have a very simple JSON export that you can pass to one function on the JavaScript side to embed it in any Dib that you want and so that's actually a very nice thing so we actually this was inspired by another talk we saw someone it shows another tool besides bouquet and they sort of explained what their rationale was and they actually had front-end developers who wanted a simple function to embed this kind of JSON that they pulled off a REST API and so now we can do that as well at bouquet and I think that's actually a very useful feature similar lines we added a callback to the Ajax data source so Ajax datasource is a source that you can configure to look at some REST API to pull in data periodically it's a pretty useful tool if you want to have a standalone page that doesn't rely on the bouquet server but that conceals for update dynamically but until now it's needed to have the REST API supplied data in a very specific format but now there's a callback that you can use to adapt any kind of return that you get from that REST API into the bouquet format and so I think this makes the Ajax datasource much much more generally useful we should have done a long time ago sometimes things just take a while but I'm happy that that's going in now as well another longtime feature that has been asked for that we just now finally got around to with a parameter izybelle scatter type so right now if you're applauding say the iris flowers data you know you might have to plot circles for the you know the one species and squares and triangles for the two other species and you have to make separate calls to do that but now you can actually just call scatter and you can use a marker map to mark that categorical species type to squares or circles and so I think this opens up a different kind of usage that I think will be really useful now that we have these notions of mappers and transforms in boquete this is why this made more sense to do now than it did earlier but we finally got around to it and so I'm happy that's gone as well we also changed the way that the web drivers are allocated for PNG and SVG static exports previously we always spun up a new web driver for a BX board it was kind of slow you could create your own web driver to make that faster and to pass it in by hand but now it just does that by default so Keynes yet SVG exports should be quite a bit faster by default and also import times we spend a little bit of time optimizing for import time so bouquet is a pretty big sophisticated library right we're getting down to about as low and import time as we can a lot of its taken up by numpy or pandas if you're using it but there might be a little bit more time but certainly it's able to make some strides for this latest release and so I'm happy for that as well so that's a lot that's going to 1.0 obviously leading up to that there's a lot of other features that are already in boquete of course you can see the you know the docs and the user guide and examples sort of get a feel for those things okay so what about some basic principles of bouquet that we can use to build sort of applicated aid applications or dashboards as the talk was was titled so first off just to mention how bouquet works sort of at a very high you know bird's-eye view you know bouquet has a Python objects as an API in Python lets you create you know pile of objects things like plots and data sources AXYZ tools ranges all kinds of objects you know custom J's callbacks all of those exist in this you know these Python objects and those can get turned into a JSON format and then that JSON that pile of JSON is consumed by a JavaScript library called bouquet Jas and that JavaScript library Boca Jes reconstitutes that JSON into it an identical set of objects on the JavaScript side and then it uses those objects to actually render canvas SVG output WebGL output in some cases and so that's a really flexible architecture you can sort of see this in action if you use the low-level bouquet top models API you can create these kind of objects like a circle glyph and then you can sort of call to JSON you can see yeah it's got just all the stuff that you would expect or the attributes the properties of this circle clip and so the bookid out models api is this this api this mirror on both the javascript and the the python side they're sort of object in Python matching an object in JavaScript and JSON that goes between them so if this was if I was Luke and Luke was giving the saw he'd go on and talk more about mochi models he really likes the bouquet model sort of the low-level building blocks API cuz he wants to build things up from scratch I like to work for sort of the higher-level bookid uh plotting api so i'm not gonna talk too much more about polka dot models just to mention that it's there and that's what the other api's are built on top of well one consequence of having this architecture is that it's nice and fairly straightforward to make bouquet bindings for other languages so someone has actually done that for instance for our Ryan - who's on the none focused steering committee for bouquet is created our bouquet right and so it's just our code and our API that can generate that same pile of JSON and as a result it can generate bouquet plots from our code right so if you want to use bouquet from our you can there's also a bouquet scholar project it hasn't gotten a lot of attention lately the mateus maintains but I'd love to create as many language bindings for bouquet as we can I think Julia and bouquet would be a great combination there actually was a Julia binding for bouquet several years ago very long time ago and the person maintaining it just had to move on to other things but I would love to get someone from the Dooley community to help make you know bouquet Jael so you could use bouquet with Julia but any language you know we could make MATLAB I'll threaten to do MATLAB bindings for a bouquet I won't do that someone else could do that if they want to but if you want to check out our bouquet you can go to github it's under Ryan - skit hub under the our bouquet project okay so another general idea for bouquet is that we want to be able to map attributes sort of visual properties to data columns so what do I mean by that so one of the fundamental objects or models in bouquet is this thing called the column data source and the best way to think about it is just sort of as a cheap pandas dataframe right it's a mapping of names to sequences of data this could be a raised that could be Python lists it could be pandas series doesn't really matter they all need to be the same length just like in a data column or a data frame but it's the same idea right so I create a column data source here from a plain dictionary I've got a time value in color columns in my column data source that mapped to sequences I can create a figure and then when I call this glyph method circle I can say that hey I want to the x-coordinates to the time and I want to map the y-coordinates to the value column and I want to map the fill color to the color column there's a lot of different attributes that you can map to data in this way and then you can update the column data source in JavaScript callbacks in Python callbacks and okay server applications and that will cause the visualization to update accordingly so these column data sources have a couple of other methods in a one way we can update the data is just to set it data attribute so if I call source data equals some new dictionary that will update all the data for this plot and all the glyphs will update but there's also some other particular cases that are useful in bocas server applications there's a streaming API so if you have data coming in you know new data continuously it's inefficient to sort of update all the data every time so you can sort of just send them marginal increments to your data using that stream or if you need to like update in the middle of your data store read-only access in the middle of a large data set there's a dot patch maybe a quick quick demonstration actually so I'll just show the here's the OHC ohlc demo so this stands for open high low close so this is kind of like financial data so you imagine sort of data coming in you're showing these candlesticks for the data it's computing a moving average of some sorts also committing these MACD indicators this script actually generating synthetic data for the visualize visualizer to use but that's all under 100 lines of Python including the simulation a lot of the code is actually for the simulation but you can see it's just you know reactive to these widgets if I want to change the mean and now we make a lot of money and we can start seeing that you know our profits go way up and I can make things a lot more volatile by increasing the standard deviation if I want a different you know exponential average I can do that you can see where it changed there in the middle so that's you know that's I guess an example of this streaming API and we could actually take a look at bouquet example so in the github repo the examples directory is a great place to go look for example code so if we look at examples app ohlc if we go to main top I this is the entire scripts right so that's the entire script to get that an interactive streaming web app is all of this code and a good chunk of this code again is the actual simulation code there in the update step so anyway that was a quick example of this streaming API so that is useful thing and the patch is similar again patches if you don't want to if you want to update just one or two items in the middle of a big array it's inefficient to send the whole array so patch lets you send just just the new items very efficiently okay another feature that's nice for bouquet is styling as we've seen there's Python api's for controlling things like visual appearance of all of the you know the axes or the titles or you know fonts and line widths for grids and things like that but you can also put this information in sort of a declarative gambol or JSON format and then load this is a theme and that's actually really useful if you want to have a consistent look across several pots and a dashboard for instance you can just dump all of that inside this sort of bouquet style sheet if you will and you can pretty much target any any property on any bouquet object right so here we've got you know attributes for axes I want to set all the you know the line colors for the the major and minor ticks I want to you know set the font size for the labels I want to you know set the grid line color to Knohl or whatever so we can make our plots consistent very easily without having to write a little code by using these style sheets recently we've had some user contributed Styles and this is actually a great place for anyone who's interested in getting involved to plug in you could create new styles and we could talk about getting those added to bouquet but there's the caliber Monica dark and minimal dark styles or some things that have gone in recently definitely you know there's some improvement we'd like to make to the styling mechanism itself another great place for new contributors to get involved if you want to you know look at a project to get involved with okay sounds another thing bouquet can do is let you layout different objects on the screen right so bouquet has sort of a built in layout capability that's based basically on rows and columns right so here I'm using the layout function I can give it a list which lists rows of things and each each excuse me each each row lists several objects several columns and so here you can see sort of a dashboard type layout I've got my Bollinger plot returned on the top and then I've got the slider which actually returns a row with a bunch of widgets inside it and then a plot and then I've got this linked panning which returns a row with three plots in it I can set my sizing mode to stretch both so if I make my let you know browser bigger or smaller than the you know the plots get bigger or smaller so this is sort of example of that I will say you know it's it can't be responsive I'll say that our current layout system you know it has some problems issues I think it's fair to say that we bit off a little bit more than we could chew so there's actually some work ongoing now a fairly large work-in-progress PR that really simplifies our layout system greatly and tries to sort of make it one much faster but a lot simpler we were relying on a constraint for basically to do our you know our layout and it turns out that's kind of overkill and it's also hard to manage and so we're we're making something a little bit simpler a lot faster for especially if you want to put sixty or hundred plots on a page the new layout system work better it's just kind of a big PR and a big effort so we didn't put in for 1.0 because it was kind of a little too risky this late in the game but we'll have a 1.0 release as soon as we can that has that sort of layout but regardless of whether sort of bookcase built-in layouts work for your case if you have something sophisticated it doesn't we also support custom templates and so this is sort of the relief mechanism works you really want to customize the look of something if you want to use for instance some bootstrap you know dashboard template that you found how can you embed boquete components in this template and there's basically a few different little bits and pieces and I'm going to go over this quickly and we'll see a concrete example here in a few minutes but there's a embed from macro too to sort of add this is a ginger template bouquet provides us in bed macro there's up in the the head of the document there is a place where you to supply the book ajs resources or actually the bouquet will supply those if you put those those template parameters there and then you can embed bouquet objects so if you're familiar with okay there's this notion of a document and you could add roots to a document you might add a plot as a document root or a layout as a document root or you might have several different document roots you can individually embed all of these document root s-- wherever you want you've got some reactive you know bootstrap layout here inside this div you want to embed plot one and inside some other div you want to embed plot two this is the syntax you do to do it each of those you know you can give a name to each of these plots and then you just refer them by name in the template and it will put the right thing there then there's some boilerplate at the bottom so that's sort of the roadmaps using that and what's nice about that is again you can use for a standard you know bootstrap template or whatever you know whatever sort of layout system you want and you can just target divs to put in you know bouquet plots and if you've set the bouquet plots to have you know a sizing mode that's scales or stretches then as the the enclosing gives gets larger smaller book able to react to that specific example of usage is the desk UI has a diagnostic a diagnostic UI the desk has and it uses boquete extensively and it also uses this template in capabilities familiar with tasks few folks like I said task is a great library written by Matt Rocklin or remotely I mean several people work on it now but initially created by Matt Rockland it's for distributed to write computing it's really fantastic let me actually see if I can pull up an example here see another quick live example so thank actually there we go to ask examples so all of these are available on my binders let me actually load this and see how long this takes I might come back to it so desk is a panda slack API for basically distributed computing and so he has a lot of examples that are up here that you can look at but if we take a look I think at the future stripey Y&B this is all running in a Jupiter lab on my binder and so we can execute some of these cells for desk and we should see the actual task stream pop up here there we go and so if we actually execute some desk code to do a computation we'll start to see it update we do more tasks you know you can start to see the task graph sort of fill up I'm gonna execute a bunch of things yeah so this lets you sort of see how the CPU utilization goes across and what are all the actual tasks that are running is so that mattre often use this you know use bouquet to provide this diagnostic UI because it makes diagnosing any issues with you know tasks you've seized much simpler because you can really drill down into you know what here was the increment tasks the add tasks you can see exactly what's going on and you didn't have to write a web app to do this you could do this all basically with okay and so actually this is the point where if loop were here it gives even more detail because it actually wrote I think most of this along with Matt Rockland but anyway that's a nice example but of course the main thing of want to mention with that is you know you can read we can rearrange these you know if we put this over here that all this stuff you know sort of reacts to that exactly as you'd expect right so that's because if we're using this custom template embed capability okay yeah okay so another thing that's worth mentioning is custom extensions I'll mention this very briefly just to say that bouquet is extensible right so the core team will never be able to do every awesome idea that users have right there a lot of great ideas that people have that you know for whatever reason we couldn't consider putting in the library itself just because maybe we don't have the resources to maintain it or maybe it's very too specialized but now you can actually go ahead and extend bouquet you can create a JavaScript implementation that maybe either implement some cool widget or wraps some existing widget and then you can use it just like any other bouquet model right so here we're creating you know this custom widget it's an instance of a slider with an extra custom text and then I can use it kind of hard to tell here the slides are online on slide deck by the way but you can use this just like any other bouquet widget right like you would normally put a slider in a layout or you know a drop-down and layout you can use this custom widget just like any other built in bouquet widget and so there's a lot of documentation for how to create those extensions on the docs page but this is useful for things like wrapping different widgets so this is the ion range slider I think not built into bouquet but you can use it with bouquet by writing an extension to do that you know if you want to wrap some 3d library there's no 3d capability built into bouquet but you can wrap 3d j/s widgets and connect them to PI data tools by using bouquet adding latex labels one of our longer-term goals is to make this more built-in but right now if you want to use latex labels you can use a custom extension to do that and the main idea is just that the committee doesn't have to wait on us right there's a lot of room here people to create a lot of interesting extensions and I think if we can get to a point where we can make the extensions easily shareable between people it'll really magnify their value across the community okay last little bit before some demos is just talking about bouquets server applications so I mentioned how bouquet has a bunch of objects on the Python side they're mirrored on the JavaScript side mediated by this JSON representation more or less the role of the bouquet server is to not only just take that Python representation and put it into the browser and just say there it is you know you're on your own but to keep things and synchronized automatically right so if I have an object that I've taken Python it automatically updates in the JavaScript side and replot or whatever and similarly if I slide a you know a slider on a book a widget then that information come back to the Python code and run a regression you know or update the data somehow so every time you connect to a book a server page it runs this application code creates this set of Python objects in the document it communicates to the page using WebSockets and sends the JSON over or for the case of numpy rays it can also send the data over in a special binary format that's much more efficient and then we get this canvas HTML canvas output and dom output as well and so those are kept in sync so for every no user that hits a bouquet server application they get their own session with their own document their own objects it's not like a shared you know Google Docs editing kind of situation but that's automatically keeping these things and think is sort of the purpose of the bouquet server and we saw that when I did the ohlc demo and I you know I move the slider and the simulation changed right that's because I had a callback that responded to that slider change and could do new work and cause the outputs update and that's what the bouquet server affords just as a quick example we can define functions like this update function we can attach it to a select so if the value of these select widget changes it can call that update function and change for instance the plot title you can change the data source you could change it pretty much any aspect of the plot that you want to change you can change it from one of these callbacks and you can attach the callbacks to pretty much any property there's also events that you can attach callbacks to things like mouse move events clicks you know all kinds of different selection events things like that so there's a pretty rich system for attaching these kind of callbacks to do work in response to any kind of UI happening there's also some document level callbacks as well if you want to have a you know periodic sort of push model where you update data you know you can add a periodic callback that runs every 100 milliseconds and updates the data somehow and then beyond that it's also possible that sort of more pull like models the desk the the desk UI uses that and you can sort of look at the desk UI source code if you're kind of curious it's kind of a more advanced case but they actually add their own asynchronous handlers to tornado and so they can actually sort of have a pull model for data ok let's see so let's stop at an actual concrete example sort of a full one small amount of code but hopefully illustrative of these these things I want to build sort of a streaming or a book application that can do sort of face counting using open CV right so this is a nice example I think because it demonstrates that streaming API that I mentioned it also shows connecting to PI data tools right so we're creating this bouquet application that uses open CV to do this face detection and they were also using a custom layout for the nice look so briefly go over the code what it looks like anyway and then we'll check it out we'll run it and we'll see how it works so here's the entire Python bits and this is too small on the screen I realized so I'm definitely not gonna spend a lot of time but just to briefly point out things there's some open CV code right up here some import some open CV code here's our plots we create an image plot to actually show the image we create a rectangle glyph on that to highlight the faces we've detected we create this time series plot at the bottom actually shows a count of the number of faces as a step lot here's our update function so it creates a grayscale to pass to the the Cascade for detection it creates an RGB eye image to pass through the bokeh image cliff and then it simply sets those data sources you can see the rectangle source data equals this new data the image source data we're updating some values there and in particular here at the bottom for the time series we call dot stream and we call just the new values and so that very efficiently updates that time search spot last thing is we add these routes I mentioned document routes so I say cur talk add route for the image plot Karaka add route for the time series plot which I've given some names over there and then I can refer to those in the template so this is the entire template again hard to see on the screen here's that part I mentioned where we have the book IDs resources here is just some content you'll see on the side just lorem ipsum filler content here's that part where I embed the root so I'm bed routes dot image and routes TS right for time series and those will show up and so let's actually give this a go and see how that goes it's right here should have a nice camera oh I actually hit enter wait for that to start up there we go right so so I've got my little camera here it's doing a face detection brothel face detection you can see that it's showing you know 1 1 or 2 depending on what it does the faces here I'm gonna just point around I've never seen it work on a crowd we'll see how well works ok so we can see there's more faces there that's pretty cool Luke Luke warned me that that would work pretty well but I hadn't actually ever tested it on the crowd so thank you guys for having obliging faces which actually is a good point to consider I don't usually you know lecture things but uh I will say briefly you know I think this you know this stuff is super cool right I mean in terms of like technology but uh I don't know at the risk of belaboring a point I would say be mindful of what you're putting all these wonderful tools you know and what uses you're putting them to for instance this face detection I don't know much about this har cascade at all are there faces that recognizes other faces it's not good at recognizing what implicit biases are built into it so just you know these are really powerful tools we've all been you know I've been given by the open source communities so let's try to put them to good uses and do good things with them and my only two cents there ok let's see so that was the light demo we already did that some final thoughts and then we'll take some questions I think we're actually pretty good on time first off there's a list of resources here obviously not so good on the screen here but if you go to that speaker deck if you go to my speaker deck Brian V this presentation is available to actually poke a and it has the links all of use here there's things like github if you want to make issues or you want to you know get involved in developing the documentation page bouquet I did org actually and slash latest is all the documentation there's a user's guide there's a reference guide there's a developer guide to get started you know building bouquet and getting to work on it live tutorials if you just got a github there's a link to this this we have all of our tutorial notebooks on my binder so you can go actually play around with them you know live working notebooks and experiment ok the mailing list we use is pretty active Stack Overflow is a great place to ask questions about bouquet to for usage or other kinds of questions and of course we have a git er chat channel it's a great place to also come and talk to you other users or some of the core developers okay last call to action you know it's stalled okay check it out they're really licensed BSD license including the server github com okay so I spoke okay hopefully still working seemed like github had some issues this morning if anyone else noticed fun fun night for everyone there I'm sure also you know if you can if you're able at you or your organization organization could consider donating to tube okay Bynum focus all right so last year bouquet became an unfocused fiscally sponsored project really very happy about that that's always been the long-term goal you know voce has been force it to have a stream of sort of institutional support both through the original DARPA X data grant that we got and then through anaconda but you know as time goes on we're gonna need to sort of find ways to push poke a bit more in the community and this nun focus step was a really great first step so certainly if you have the ability to you know help contribute to open source software or your organization does you know you can do that freedom focus and then focus is a great organization that's why we're all here today last thing is to you know engage companies for work so we're getting to the point where people are starting to do work around bouquet which is again amazing to me people that want to do you know integration work or build up more sophisticated things and so I think that's really cool really awesome I know a few folks that are interested in doing that sort of thing and companies that are so if you interested in any kind of commercial engagements feel free to reach out to me or book a plot that email comm and we can try to put you in touch with the right folks because that's always very good you know that kind of feedback from actual real users and use cases is probably the best the best stone to sharpen the tool on right sometimes I feel like I'm a I'm a tinkerer and I develop this library but I'm not actually a user and so maybe I missed some important use cases and so getting that feedback is a very valuable loop for us to sort of close things okay so that is pretty much all I have for the presentation I think we have about ten minutes now which actually worked out pretty well I shouldn't act surprised I guess and so we can take some questions and and yeah and we have a microphone so if you have question just raise your hand and thank you for this great presentation my question is obviously we can see that these dashboards would be very useful internally in different companies but I was wondering if you have any use cases or companies have been using these dashboards to external users and if you can share with us these different use cases that's a great question the perennial or a perennial problem and open source is that if things work that's great people use them and they don't necessarily call home and tell you about them we were trying to start doing a user survey every year where we could try to solicit some of this information back I don't have any specific examples I can point you to I do know folks have done some work too for instance I think there was just a recent thing we tweeted out about someone put together a nice blog post about how different since host a bouquet app on it's like digital ocean or there's some other some other you know system like that and sort of start to finish instructions for doing that and so I can't point anything specific unfortunately you know the people their problems we get all the issues github and we get feature requests but when things are working you know people just use it and a lot of stuff is internal as well I'm definitely know folks who are using it internally for you know dashboards and things behind you know behind corporate networks but I can't point anything specifically public at the moment I mean I see thing from time to time like ok it's great but no one's made it like a big announcement as in terms of like a public facing one I know it good question hi thank you for that yeah the tool it's really awesome how do you see yourself in relation to d3 do is there any overlap or is there I get a lot of corporate clients are like oh they're variants in d3 I can point out all the libraries like this yeah but they're all focused on d3 yeah absolutely yeah absolutely so what's the relationship between bouquet and e3 and the short answer is that there's not one so book is not built on d3 for instance that's a question that's come up so bouquet draw is currently on HTML canvas directly it's a raster you know canvas for drawing we have some WebGL capability and we're just expanding that and the future that's one of our areas of work tasks that we'd like to work on the main thing I would say is that what bouquet gives you that d3 doesn't is that it lets you connect all of those PI data tools that I talked about directly to these visualizations without having to write the d3 or the HTML code right necessarily you know d3 is a fantastic tool and it lets you make really wonderful visualisations it's kind of an artisanal tool and there's like a you know failed b3 experiments tumbler comm or something because it requires a little bit of work and don't get me wrong some things in boquete require a little work too it's just a matter where you know where have the different tools optimized for and so you know if you've got people up and running a productive using panda since I could learn and all of these tools already and they want to get them up and running as fast as possible I would say bouquet is gonna be faster than saying you know pointing with the d3 Docs and say okay make a website and figure out how to serve the data and figure out how to get it into the page and then figure out to use DFU to render it you know if you've already got people working you know in that sphere and in front-end Devon d3 is a great tool but if you have people that don't want to have to climb another learning curve bouquet is a fantastic way to get them up and running as quick as possible good question thank you yeah other questions a couple over here similar to the last question is there any known ways or open-source examples of integrating bouquet widgets or pages into existing savory act apps or other front-end frameworks so I mean the the docs I think have some examples of that kind of thing the you know I can't point to any specific use cases we have a variety of different ways to embed and so you can embed things into tubes and if you make the the bouquet content you know reactive and the div responds the bouquet bot will get bigger or smaller you know if you look actually at the the app here I didn't actually show off the responsive part let me run this again so this is a bootstrap one but I think it'd be pretty similar for react if you run this but you know if I make this smaller then all the sudden you know this updates right so I've got now that works because this is embedded in the bootstrap layout I think the story is pretty much the same for react I'm not actually I'm actually not a front-end dev expert and I never really used react myself but you know I think this it's sort of the same story is that you can embed you know these bouquet components that have a sizing mode that allows them to scale inside whatever content you want and that's and this allows us to not have to try to own the layout problem is yeah you can use reactor you can use bootstrap or whatever you want but you know if you have specific questions I would say the mailing list is a great place or Stack Overflow and we can try to hash out you know the specifics but I don't I don't foresee any problems with using okay with react good other questions hi I want to know more about how active is currently in development right now and how often do you plan to release your minor version yeah good question so about the activity development so right now there's sort of one-and-a-half people working I say I've okay pretty regularly I think that the institutional funding for okay it's gonna taper off here so anacondas focusing on some different priorities and so I think as I mentioned it's a great time to get involved trying to find other ways to support people obviously you know I'm personally attached to voce as a project that I really believe in and want to move forward so the question is you know what will that be you know right now the development is still very active we have reached this sort of plateaus 41.0 plateau and that's not to get indicate that we're done there's still plenty of bugs and some features to implement but it does indicate that we've reached you know I think a plateau of stability for like the API and so I think that gives us some breathing room right and I'd like to have much faster cadence on like micro point releases and then have like the one point one release maybe every few months something like that I can't commit to anything specific because the thing that's contingent on sort of funding avenues and things like that but that's my suggestion would be you know maybe a point release every and a couple three or four times a year and then and then a micro point release a little more often which are much smaller targeted type releases yeah other questions oh so thank you for your talk a lot of these questions have been technical mine is gonna be more like squishy philosophical but you know when you said I'm a teen core yeah I'm just curious like what do you mean by that in this context sort of tell me about that identity and how its kind of informing this work you know I like taking things apart and putting them together but I'm not like a data scientist for instance and I would never claim to be a data Sciences so people who are using bouquet for data science are doing work that I'm not especially familiar with and so a lot of times requirements for tools like these are really I mean you know from a broad stroke cuz like oh I worked on visualization tools before and so I have some idea and familiarity with that space and what's useful but when you get down to it there's always little things that can make a big difference and sometimes if you're not actually familiar with the use cases knowing what little things make the most difference right is the thing that you missed right and so on I'm not using bouquet day-to-day to like do work I'm working on bouquet day-to-day but that's different than like using bouquet and running into like hey here's a rough edge that I didn't know about because I'm not actually doing daily data science work with it or daily science work with it and so that's that's sort of what I'm getting at is that you know when you do work with something today you get very familiar with like all the little corners and little rough edges and you know maybe I miss those because I'm not doing that kind of work and so that's where I say it's very valuable to get this you know feedback loop from users new user perspective is also very incredibly valuable you know if someone comes to bouquet for the first time and can't figure anything out that's important for us to know or if they can't figure some specific thing out maybe we can make it better right but that's you know I'm so far in the forest and in the trees right now that you know I don't necessarily see those things yeah good question thank you other questions that come here all the questions are on this side of the room my question is about the bouquet and are shiny yeah so is our bouquet the same or in terms of efficiency and the ease of use similar to bouquet and how would you don't know if you have used our have seen our show here before how you know would you compare these two - yeah I've I've definitely seen are shiny and I would compare the Python bouquet server fairly directly with miss shiny right you know in terms of being able to connect you know in that in the case of shiny our tools directly to front end visualizations very easily with the minimum of sort of web tech coding and the bouquet server lets you do that for the Python side our bouquet currently lets you create standalone type documents from bouquet and by that I mean you know you can have lots of interactions you can have panning and zooming linked panning linked selections you can have custom jeaious tools you can have just custom dance actions reflections you can have a very interactive page but it's not connected to any server and so our bouquet can generate those kind of plots today I think Ryan's prepping another release too soon it's been a little bit of while he got kind of busy but I think he's prepping a new release to update our bouquet to a much more recent version hopefully you're in the very near future but he's got a really nice page put together on if you go to his github you can sort of see what it can already do and you know depending on what you're doing if you're already using bouquet with Python I think it's a nice mix and match right cuz you can embed you know you could imagine embedding things from our or from Python very easily in the same page and I think that's where the value lies and also how they look and appear similar so okay we're out of time okay thank you again Brian [Applause]
Info
Channel: PyData
Views: 19,697
Rating: 4.8951964 out of 5
Keywords:
Id: HmI1foA0MZc
Channel Id: undefined
Length: 44min 52sec (2692 seconds)
Published: Thu Nov 29 2018
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.