: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
An interactive dashboard built with python that enables you to visualise how rent prices differ across Sweden.

sweden-rent-dashboard An interactive dashboard built with python that enables you to visualise how rent prices differ across Sweden. The dashboard/web

Rory Crean 5 Dec 19, 2021
Streamlit dashboard examples - Twitter cashtags, StockTwits, WSB, Charts, SQL Pattern Scanner

streamlit-dashboards Streamlit dashboard examples - Twitter cashtags, StockTwits, WSB, Charts, SQL Pattern Scanner Tutorial Video https://ww

null 122 Dec 21, 2022
Extract data from ThousandEyes REST API and visualize it on your customized Grafana Dashboard.

ThousandEyes Grafana Dashboard Extract data from the ThousandEyes REST API and visualize it on your customized Grafana Dashboard. Deploy Grafana, Infl

Flo Pachinger 16 Nov 26, 2022
An interactive dashboard for visualisation, integration and classification of data using Active Learning.

AstronomicAL An interactive dashboard for visualisation, integration and classification of data using Active Learning. AstronomicAL is a human-in-the-

null 45 Nov 28, 2022
Eulera Dashboard is an easy and intuitive way to get a quick feel of what’s happening on the world’s market.

an easy and intuitive way to get a quick feel of what’s happening on the world’s market ! Eulera dashboard is a tool allows you to monitor historical

Salah Eddine LABIAD 4 Nov 25, 2022
A dashboard built using Plotly-Dash for interactive visualization of Dex-connected individuals across the country.

Dashboard For The DexConnect Platform of Dexterity Global Working prototype submission for internship at Dexterity Global Group. Dashboard for real ti

Yashasvi Misra 2 Jun 15, 2021
YOPO is an interactive dashboard which generates various standard plots.

YOPO is an interactive dashboard which generates various standard plots.you can create various graphs and charts with a click of a button. This tool uses Dash and Flask in backend.

ADARSH C 38 Dec 20, 2022
Smarthome Dashboard with Grafana & InfluxDB

Smarthome Dashboard with Grafana & InfluxDB This is a complete overhaul of my Raspberry Dashboard done with Flask. I switched from sqlite to InfluxDB

null 6 Oct 20, 2022
Data aggregated from the reports found at the MCPS COVID Dashboard into a set of visualizations.

Montgomery County Public Schools COVID-19 Visualizer Contents About this project Data Support this project About this project Data All data we use can

James 3 Jan 19, 2022
Python library that makes it easy for data scientists to create charts.

Chartify Chartify is a Python library that makes it easy for data scientists to create charts. Why use Chartify? Consistent input data format: Spend l

Spotify 3.2k Jan 4, 2023
Python library that makes it easy for data scientists to create charts.

Chartify Chartify is a Python library that makes it easy for data scientists to create charts. Why use Chartify? Consistent input data format: Spend l

Spotify 2.8k Feb 18, 2021
Python library that makes it easy for data scientists to create charts.

Chartify Chartify is a Python library that makes it easy for data scientists to create charts. Why use Chartify? Consistent input data format: Spend l

Spotify 3.2k Jan 1, 2023
Create a visualization for Trump's Tweeted Words Using Python

Data Trump's Tweeted Words This plot illustrates twitter word occurences. We already did the coding I needed for this plot, so I was very inspired to

null 7 Mar 27, 2022
Python package to Create, Read, Write, Edit, and Visualize GSFLOW models

pygsflow pyGSFLOW is a python package to Create, Read, Write, Edit, and Visualize GSFLOW models API Documentation pyGSFLOW API documentation can be fo

pyGSFLOW 21 Dec 14, 2022
Using SQLite within Python to create database and analyze Starcraft 2 units data (Pandas also used)

SQLite python Starcraft 2 English This project shows the usage of SQLite with python. To create, modify and communicate with the SQLite database from

null 1 Dec 30, 2021
Create artistic visualisations with your exercise data (Python version)

strava_py Create artistic visualisations with your exercise data (Python version). This is a port of the R strava package to Python. Examples Facets A

Marcus Volz 53 Dec 28, 2022
Create HTML profiling reports from pandas DataFrame objects

Pandas Profiling Documentation | Slack | Stack Overflow Generates profile reports from a pandas DataFrame. The pandas df.describe() function is great

null 10k Jan 1, 2023
Create HTML profiling reports from pandas DataFrame objects

Pandas Profiling Documentation | Slack | Stack Overflow Generates profile reports from a pandas DataFrame. The pandas df.describe() function is great

null 6.8k Feb 18, 2021
Painlessly create beautiful matplotlib plots.

Announcement Thank you to everyone who has used prettyplotlib and made it what it is today! Unfortunately, I no longer have the bandwidth to maintain

Olga Botvinnik 1.6k Jan 6, 2023