:bowtie: Create a dashboard with python!

Overview

Installation | Documentation | Gitter Chat | Google Group

Bowtie

Build Status Documentation Status PyPI version Conda version PyPI codecov prettier

Bowtie Demo

Introduction

Bowtie is a library for writing dashboards in Python. No need to know web frameworks or JavaScript, focus on building functionality in Python. Interactively explore your data in new ways! Deploy and share with others!

Demo

See a live example generated from this code!

Gallery

For more examples, check out the gallery and repos. Feel free to add your own creations!

Installation

If you use conda, you can install with:

conda install -c conda-forge bowtie-py

If you use pip, you can install with:

pip install bowtie

Requirements

Bowtie uses Yarn to manage node packages. If you installed Bowtie through conda, Yarn was also installed as a dependency. Yarn can be installed through conda:

conda install -c conda-forge yarn

Otherwise follow install instructions for Yarn for your OS.

Documentation

Available here.

Jupyter Integration

An early integration with Jupyter has been prototyped. I encourage you to try it out and share feedback. I hope this will make it easier to make Bowtie apps.

Read the documentation for more details.

Docker

Docker images are provided as an alternative way to use Bowtie. They are available on Docker Hub:

docker pull jwkvam/bowtie

Read the documentation for more details.

The Goal

@astrobiased @treycausey @vagabondjack the lack of a comprehensive production-grade Shiny-alike for Python is a Big Problem

Contributing

You can help Bowtie in many ways including:

  • Try it out and report bugs or what was difficult.
  • Help improve the documentation.
  • Write new widgets.
  • Provide hosting for apps in the gallery.
  • Say thanks!

coffee

Comments
  • Error with cache.load

    Error with cache.load

    I'm getting an error when I use bowtie.cache.load. As far as I can tell, the correct value is loading and everything functions normally. I'm not sure where this error comes from. I'm also using Schedule, but I managed to get that to work fine when not loading from the cache.

    As I make more changes, I may be able to give more details about this.

      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/eventlet/greenthread.py", line 218, in main
        result = function(*args, **kwargs)
      File "./build/src/server.py", line 59, in foo
        func()
      File "/Users/rsm5139/Git/learning-bowtie/step_1.py", line 23, in timed_event
        ticker = cache.load('scheduled')
      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/bowtie/cache.py", line 58, in load
        return msgpack.unpackb(bytes(event.get(timeout=10)), encoding='utf8')
      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/eventlet/queue.py", line 313, in get
        return waiter.wait()
      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/eventlet/queue.py", line 141, in wait
        return get_hub().switch()
      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/eventlet/hubs/hub.py", line 295, in switch
        return self.greenlet.switch()
    queue.Empty
    ^Cwsgi exiting
    
    opened by rsm5139 8
  • What can Schedule do?

    What can Schedule do?

    Hi, I'm trying to use Schedule, but it doesn't seem to do anything. I had it call a function to create a plot, but that didn't work. Then I tried having it just print('hello'), but still nothing. I would like to add a timer to the app and I figured Schedule would help, but maybe not.

    bug work-around 
    opened by rsm5139 5
  • ImportError: No module named html

    ImportError: No module named html

    I'm stuck trying to run the example code: https://github.com/jwkvam/bowtie-demo/blob/master/example.py

    I believe I have all dependencies installed via conda and pip (plotlywrapper), and I've tried running it in several environments and consoles.

    #!/usr/bin/env python ... # -- coding: utf-8 -- ... ... from bowtie import App, command ... from bowtie.control import Dropdown, Slider ... from bowtie.visual import Plotly, Table ... from bowtie.html import Markdown ... ... import numpy as np ... import pandas as pd ... import plotlywrapper as pw ... ... from sklearn.kernel_ridge import KernelRidge ... ... iris = pd.read_csv('./iris.csv') ... iris = iris.drop(iris.columns[0], axis=1) ... ... attrs = iris.columns[:-1] ... ... description = Markdown("""Bowtie Demo ... =========== ... ... Demonstrates interactive elements with the iris dataset. ... Select some attributes to plot and select some data on the 2d plot. ... Change the alpha parameter to see how that affects the model. ... """) ... ... xdown = Dropdown(caption='X variable', labels=attrs, values=attrs) ... ydown = Dropdown(caption='Y variable', labels=attrs, values=attrs) ... zdown = Dropdown(caption='Z variable', labels=attrs, values=attrs) ... alphaslider = Slider(caption='alpha parameter', start=10, minimum=1, maximum=50) ... ... mainplot = Plotly() ... mplot3 = Plotly() ... linear = Plotly() ... table1 = Table() ... ... ... def pairplot(x, y): ... print('hellox') ... if x is None or y is None: ... return ... x = x['value'] ... y = y['value'] ... plot = pw.Chart() ... for i, df in iris.groupby('Species'): ... plot += pw.scatter(df[x], df[y], label=i) ... plot.xlabel(x) ... plot.ylabel(y) ... mainplot.do_all(plot.to_json()) ... ... ... def threeplot(x, y, z): ... if x is None or y is None or z is None: ... return ... x = x['value'] ... y = y['value'] ... z = z['value'] ... plot = pw.Chart() ... for i, df in iris.groupby('Species'): ... plot += pw.scatter3d(df[x], df[y], df[z], label=i) ... plot.xlabel(x) ... plot.ylabel(y) ... plot.zlabel(z) ... mplot3.do_all(plot.to_json()) ... ... ... def mainregress(selection, alpha): ... if len(selection) < 2: ... return ... ... x = xdown.get()['value'] ... y = ydown.get()['value'] ... ... tabdata = [] ... mldatax = [] ... mldatay = [] ... species = iris.Species.unique() ... for i, p in enumerate(selection['points']): ... mldatax.append(p['x']) ... mldatay.append(p['y']) ... tabdata.append({ ... x: p['x'], ... y: p['y'], ... 'species': species[p['curve']] ... }) ... ... ... X = np.c_[mldatax, np.array(mldatax) ** 2] ... ridge = KernelRidge(alpha=alpha).fit(X, mldatay) ... ... xspace = np.linspace(min(mldatax)-1, max(mldatax)+1, 100) ... ... plot = pw.scatter(mldatax, mldatay, label='train', markersize=15) ... for i, df in iris.groupby('Species'): ... plot += pw.scatter(df[x], df[y], label=i) ... plot += pw.line(xspace, ridge.predict(np.c_[xspace, xspace**2]), label='model', mode='lines') ... plot.xlabel(x) ... plot.ylabel(y) ... linear.do_all(plot.to_json()) ... table1.do_data(pd.DataFrame(tabdata)) ... ... ... @command ... def main(): ... app = App(rows=2, columns=3, background_color='PaleTurquoise', debug=False) ... app.columns[0].fraction(2) ... app.columns[1].fraction(1) ... app.columns[2].fraction(1) ... ... app.add_sidebar(description) ... app.add_sidebar(xdown) ... app.add_sidebar(ydown) ... app.add_sidebar(zdown) ... app.add_sidebar(alphaslider) ... ... app[0, 0] = mainplot ... app[0, 1:] = mplot3 ... app[1, :2] = linear ... app[1, 2] = table1 ... ... app.subscribe(pairplot, xdown.on_change, ydown.on_change) ... app.subscribe(threeplot, xdown.on_change, ydown.on_change, zdown.on_change) ... app.subscribe(mainregress, mainplot.on_select, alphaslider.on_change) ... ... return app ... ImportError: No module named html ImportErrorTraceback (most recent call last) in () 5 from bowtie.control import Dropdown, Slider 6 from bowtie.visual import Plotly, Table ----> 7 from bowtie.html import Markdown 8 9 import numpy as np ImportError: No module named html

    opened by willupowers 3
  • make widgets with minimum size?

    make widgets with minimum size?

    I'm working on a dashboard where i'd like to stack 3 widgets, but on my screen they render with very small heights... is there a way to forece them to occupy a minimum height?

    image

    opened by dswah 3
  • ERROR in ./src/app/nouislider.jsx

    ERROR in ./src/app/nouislider.jsx

    ERROR in ./src/app/nouislider.jsx Module not found: Error: Cannot resolve module 'nouislider/src/nouislider.css' in /Users/wesselhuising/Documents/triplea/bowtie/test/build/src/app @ ./src/app/nouislider.jsx 15:0-40

    Using a virtualenv, followed the documentation about installing and setting up a bowtie app. Tried a lot, but can't figure out how to make the npm use the compiler of less to create a css. This happens while building the example app in the quickstart of the documentation.

    Any thoughts?

    opened by wesselhuising 2
  • support for initial function

    support for initial function

    It would be handy to have a function that get's called on initial page load from the client. Here's a sketch of how this can work:

    1. Add an emit from index.jsx
    2. Add a handler template in server.py
    3. Add functionality to Layout class to call a python function on the initial signal.
    moderate 
    opened by jwkvam 2
  • WIP: serverless

    WIP: serverless

    Put server.py.j2 functions into App class.

    • [x] move all routes to App
    • [x] remove server.py.j2
    • [x] test notebook integration still works
    • [x] different endpoint for each route
    • [x] move authentication
    • [x] document authentication
    • [x] decorator for upload and load
    • [x] run layout at build
    • [x] test upload
    • [x] protect routes in serve
    • [x] ~document layout building function~
    • [x] test pager
    • [x] test init

    Fixes #234 #247

    reliability 
    opened by jwkvam 1
  • move example code towards convention of global app

    move example code towards convention of global app

    For dynamic layouts, the app will need to be global or at least the views will be. I would rather not confuse the matter and encourage the app to be global. As a side benefit, users can then use the listen decorator instead of the subscribe function which should be more readable. This may also allow us to be more compatible with Flask apps if someone wants to have a bowtie dashboard sitting with some other flask stuff.

    • [x] refactor example code
    • [x] refactor bowtie-demo
    • [x] move server.py.j2 functionality into app.py or wherever appropriate.
    enhancement user experience 
    opened by jwkvam 1
  • release v0.10

    release v0.10

    TODO

    • [x] remove captions from controllers
    • [x] ~~move markdown back to visual :/~~
    • [x] move react link to html
    • [x] ~~functional style for html widgets? (no events or commands)~~
    • [x] make it easy to create captions
    • [x] list of components for each cell
    • [ ] embed links in other html? children in div's?
    • [ ] put server.py template into bowtie proper
    • [ ] change convention to putting app as global variable

    Fixes #236

    opened by jwkvam 1
  • Proposing a PR to fix a few small typos

    Proposing a PR to fix a few small typos

    Issue Type

    [x] Bug (Typo)

    Steps to Replicate and Expected Behaviour

    • Examine bowtie/tests/test_components.py and observe instatiation, however expect to see instantiation.
    • Examine bowtie/tests/test_tags.py and observe instantation, however expect to see instantiation.

    Notes

    Semi-automated issue generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    To avoid wasting CI processing resources a branch with the fix has been prepared but a pull request has not yet been created. A pull request fixing the issue can be prepared from the link below, feel free to create it or request @timgates42 create the PR. Alternatively if the fix is undesired please close the issue with a small comment about the reasoning.

    https://github.com/timgates42/bowtie/pull/new/bugfix_typos

    Thanks.

    opened by timgates42 0
  • Error building with webpack

    Error building with webpack

    yarn install v1.22.4
    warning package.json: No license field
    warning No license field
    [1/4] Resolving packages...
    success Already up-to-date.
    Done in 0.45s.
    '.' is not recognized as an internal or external command,
    operable program or batch file.
    Traceback (most recent call last):
      File "example.py", line 126, in <module>
        def main():
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\bowtie\_command.py", line 103, in command
        sys.exit(cmd(arg))
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 782, in main
        rv = self.invoke(ctx)
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\bowtie\_command.py", line 61, in build
        app._build()
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\bowtie\_app.py", line 949, in _build
        raise WebpackError('Error building with webpack')
    bowtie.exceptions.WebpackError: Error building with webpack
    
    opened by SabarishVT 0
  • Divs should be able to have children html components

    Divs should be able to have children html components

    Main use case is to have links in divs so the links can be embedded in text. Using links like this will help with single page apps with multiple views.

    enhancement user experience 
    opened by jwkvam 0
  • improve margins look and feel and API

    improve margins look and feel and API

    By default there is 0 border around the edge of the screen. This is visually unattractive and there is no way to change it with the bowtie API. This is to note that this can and should be improved.

    Thoughts:

    1. Should this be combined with the row/column gaps?
    2. Take inspiration from other APIs, such as matplotlib's margins?
    enhancement user experience 
    opened by jwkvam 0
  • test restoring state for all components

    test restoring state for all components

    not sure how easy this will be, but it will add assurance that refreshing hopefully works or at the very least doesn't break the app.

    Basic test structure:

    1. Build app
    2. Use selenium to interact with widget.
    3. Refresh web page
    4. Make sure the page loaded successfully.
    5. Extra credit: make sure the state is same as it was before refresh.

    widgets tested

    • [ ] dates
    • [ ] dropdown etc.
    reliability 
    opened by jwkvam 0
Releases(v0.11.0)
  • v0.11.0(Oct 13, 2018)

    Added

    • Start of Authentication API
    • Better interoperability with Flask
    • Views have a layout attribute that is run a build time, which can save time at serve time.

    Breaking

    • Apps layout now happens in global state or in layout functions.
    • Remove server.py and templates, bundle.js{,.gz} is placed directly in build directory.
    • load and subscribe are decorators now, simplifying usage.
    • Sidebar now defaults to False.
    • Removed respond function, moved feature to subscribe.
    Source code(tar.gz)
    Source code(zip)
  • v0.10.1(Oct 4, 2018)

  • v0.10.0(Oct 3, 2018)

    Added

    • Mostly internal changes so that dynamic layout can be supported.
    • Dropped Python 3.5 compatibility.
    • Added Python 3.7 support. (#233)
    • Update random walk so it can be used with multiple users. (#126)
    • Views now have a border attribute for specifying a margin around the whole page, defaults to 7 pixels.
    • Add multiple components to a cell or span, for example:

      app = App() app[0, 0] = button app[0, 0] += button2 Or app = App() app[0, 0] = button, button2

    • Moved link component from control to html module

    Fixed

    • Bug with rebuilding apps due to caching problems.
    • Bug when refreshing apps with date pickers, the stored state wasn't being restored correctly.

    Breaking

    • Captions in controllers have been removed, they can be replaced with HTML components.
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(Mar 3, 2018)

    Added

    • Upgraded to webpack 4, users shouldn't see much of a difference other than slightly improved build times.

    Fixed

    • Readthedocs wasn't rendering due to type hints, fixed with conda.
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Feb 23, 2018)

    Added

    • Jupyter integration.
    • Basic HTML components: Div and H1-H6.
    • Add multiple components into a single span/cell. This can be useful for adding multiple control or html elements into a single cell.

    Breaking

    • Drop support for Python 2.
    • Moved Markdown widget to HTML components.
    Source code(tar.gz)
    Source code(zip)
  • v0.8.1(Feb 11, 2018)

  • v0.8.0(Feb 10, 2018)

    Added

    • Improved widget handling, now use a dict to store components instead of parsing code. Makes it possible to subscribe to events with expressions for the component.
    • Cache behaves like dict, e.g. cache['data'] = [1, 2, 3].
    • Support Ant theme to customize all Ant components, added in the App class.
    • Vertical option for slider. (#204)
    • Document run command.
    • Document exceptions.

    Breaking

    • Removed cache save and load functions in favor of dict functionality.
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Feb 4, 2018)

    Added

    • Implemented __getitem__ for the layout enabling for example: app[1, 0:2] = widget.
    • Added "on_relayout" event for Plotly widgets.
    • Serialize Pandas series objects and Pandas datetime objects.

    Breaking

    • row_end and column_end are now exclusive instead of inclusive.
    • Simplified the add function in favor of the new getitem functionality, which is easier to use and familiar to Python programmers.
    Source code(tar.gz)
    Source code(zip)
  • v0.6.1(Feb 2, 2018)

    Added

    • Docstring examples of sizing components.
    • More checks to ensure adding components works as expected.

    Fixed

    • Bug which incorrectly tracked which parts of the grid were occupied by widgets.
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Feb 1, 2018)

    Added

    • Removed node and webpack dependencies, the only dependency is yarn.
    • Added a run command that simply combines build and serve together.
    • Smarter build process that saves time on subsequent builds.
    • Handle scheduled tasks when running with debug=True (#185)
    • Improve the Docker experience and docs.
    • Always use the latest compiled bundle.

    Breaking

    • Instead of building the app by running app.build() you simply return the App instance. See the quick start guide for an example.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Dec 31, 2017)

    Added

    • Expose root View attributes as App attributes (#175). You can access columns and rows from the App instance like pre v0.5.
    • Added column and row gap which inserts space between rows and columns. Accessible through column_gap and row_gap on View and App instances.
    • Added Gitter chat (#179)
    • Many documentation improvements.
    • Drop Python 3.4 support following pandas lead.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Nov 20, 2017)

    Added

    • Create multiple views to create subpages (#158)
    • Cache is now backed by session storage (#160)
    • Link component for switching views without a page reload

    Breaking

    • Renamed Layout class to App
    Source code(tar.gz)
    Source code(zip)
  • v0.4.2(Sep 5, 2017)

  • v0.4.1(Jul 30, 2017)

    Added

    • Upload widget
    • Dockerfile for building apps

    Fixed

    • Refactored the data Plotly sends on selection to stop crashes, may break some apps
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jun 17, 2017)

  • v0.3.3(Jun 14, 2017)

    Added

    • new textbox feature to update text (#128)

    Fixed

    • fixed issue preventing controllers from added to layout (#128)
    • updated Layout docstring (#125)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Apr 27, 2017)

    Added

    • Support changing socket.io path for nginx (#118)
    • Pager: to request communication from the client (#122)

    Fixed

    • Nouislider
    • Random walk example
    • pydocstyle suggestions
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Apr 17, 2017)

  • v0.3.0(Apr 14, 2017)

    Added

    • New more flexible and powerful layout API.
    • Now using CSS Grid instead of Flexbox.
    • Sidebar is now optional.
    • Control widgets can be placed anywhere.

    Breaking

    • add_visual is now simply add
    • add_controller is now add_sidebar
    • DropDown is renamed to Dropdown
    Source code(tar.gz)
    Source code(zip)
  • v0.2.6(Mar 30, 2017)

  • v0.2.5(Mar 30, 2017)

  • v0.2.4(Mar 30, 2017)

  • v0.2.3(Mar 30, 2017)

  • v0.2.2(Mar 30, 2017)

  • v0.2.1(Mar 30, 2017)

  • v0.2.0(Mar 30, 2017)

Owner
Jacques Kvam
I like machine learning 🤖and building tools for machine learning🛠⚙️🔩 https://ghuser.io/jwkvam
Jacques Kvam
A Python library for plotting hockey rinks with Matplotlib.

Hockey Rink A Python library for plotting hockey rinks with Matplotlib. Installation pip install hockey_rink Current Rinks The following shows the cus

24 Jan 02, 2023
Backend app for visualizing CANedge log files in Grafana (directly from local disk or S3)

CANedge Grafana Backend - Visualize CAN/LIN Data in Dashboards This project enables easy dashboard visualization of log files from the CANedge CAN/LIN

13 Dec 15, 2022
GitHub Stats Visualizations : Transparent

GitHub Stats Visualizations : Transparent Generate visualizations of GitHub user and repository statistics using GitHub Actions. ⚠️ Disclaimer The pro

YuanYap 7 Apr 05, 2022
A little logger for machine learning research

Blinker Blinker provides a fast dispatching system that allows any number of interested parties to subscribe to events, or "signals". Signal receivers

Reinforcement Learning Working Group 27 Dec 03, 2022
This is a Boids Simulation, written in Python with Pygame.

PyNBoids A Python Boids Simulation This is a Boids simulation, written in Python3, with Pygame2 and NumPy. To use: Save the pynboids_sp.py file (and n

Nik 17 Dec 18, 2022
Decision Border Visualizer for Classification Algorithms

dbv Decision Border Visualizer for Classification Algorithms Project description A python package for Machine Learning Engineers who want to visualize

Sven Eschlbeck 1 Nov 01, 2021
A GUI for Pandas DataFrames

About Demo Installation Usage Features More Info About PandasGUI is a GUI for viewing, plotting and analyzing Pandas DataFrames. Demo Installation Ins

Adam Rose 2.8k Dec 24, 2022
Make sankey, alluvial and sankey bump plots in ggplot

The goal of ggsankey is to make beautiful sankey, alluvial and sankey bump plots in ggplot2

David Sjoberg 156 Jan 03, 2023
Chem: collection of mostly python code for molecular visualization, QM/MM, FEP, etc

chem: collection of mostly python code for molecular visualization, QM/MM, FEP,

5 Sep 02, 2022
Here I plotted data for the average test scores across schools and class sizes across school districts.

HW_02 Here I plotted data for the average test scores across schools and class sizes across school districts. Average Test Score by Race This graph re

7 Oct 27, 2021
A customized interface for single cell track visualisation based on pcnaDeep and napari.

pcnaDeep-napari A customized interface for single cell track visualisation based on pcnaDeep and napari. đź‘€ Under construction You can get test image

ChanLab 2 Nov 07, 2021
Comparing USD and GBP Exchange Rates

Currency Data Visualization Comparing USD and GBP Exchange Rates This is a bar graph comparing GBP and USD exchange rates. I chose blue for the UK bec

5 Oct 28, 2021
Insert SVGs into matplotlib

Insert SVGs into matplotlib

Andrew White 35 Dec 29, 2022
This Crash Course will cover all you need to know to start using Plotly in your projects.

Plotly Crash Course This course was designed to help you get started using Plotly. If you ever felt like your data visualization skills could use an u

Fábio Neves 2 Aug 21, 2022
Custom ROI in Computer Vision Applications

EasyROI Helper library for drawing ROI in Computer Vision Applications Table of Contents EasyROI Table of Contents About The Project Tech Stack File S

43 Dec 09, 2022
VDLdraw - Batch plot the log files exported from VisualDL using Matplotlib

VDLdraw Batch plot the log files exported from VisualDL using Matplotlib. At pre

Yizhou Chen 5 Sep 26, 2022
Create Badges with stats of Scratch User, Project and Studio. Use those badges in Github readmes, etc.

Scratch-Stats-Badge Create customized Badges with stats of Scratch User, Studio or Project. Use those badges in Github readmes, etc. Examples Document

Siddhesh Chavan 5 Aug 28, 2022
Calendar heatmaps from Pandas time series data

Note: See MarvinT/calmap for the maintained version of the project. That is also the version that gets published to PyPI and it has received several f

Martijn Vermaat 195 Dec 22, 2022
A high performance implementation of HDBSCAN clustering. http://hdbscan.readthedocs.io/en/latest/

HDBSCAN Now a part of scikit-learn-contrib HDBSCAN - Hierarchical Density-Based Spatial Clustering of Applications with Noise. Performs DBSCAN over va

Leland McInnes 91 Dec 29, 2022
Streaming pivot visualization via WebAssembly

Perspective is an interactive visualization component for large, real-time datasets. Originally developed for J.P. Morgan's trading business, Perspect

The Fintech Open Source Foundation (www.finos.org) 5.1k Dec 27, 2022