Perspective is an interactive analytics and data visualization component, which is especially well-suited for large and/or streaming datasets. Originally developed at J.P. Morgan and open-sourced through the Fintech Open Source Foundation (FINOS), Perspective makes it simple to build user-configurable analytics entirely in the browser, or in concert with Python and/or Jupyterlab. Use it to create reports, dashboards, notebooks and applications, with static data or streaming updates via Apache Arrow.
A fast, memory efficient streaming query engine, written in C++ and compiled for both WebAssembly and Python. read/write/streaming for Apache Arrow, and a high-performance columnar expression language based on ExprTK.
A framework-agnostic User Interface Custom Element, powered either in-browser via WebWorker (WebAssembly) or virtually via WebSocket server (Python/Node), as well as a suite of Datagrid and D3FC Chart plugins.
A JupyterLab widget and Python client library, for interactive data analysis in a notebook, as well as scalable production Voila and Holoviz applications.
Query-driven web dashboards built on Perspective.js Custom Elements are completely user-configurable, and easy to integrate into any web application framework.
Using Perspective's simple relational grammar, elements like
<perspective-viewer>
can be symmetrically configured, by API or
through the User Interface, and emit dataset-aware Events for scriptable
interactivity. Web Applications built in JavaScript with Perspective
Custom Elements can be re-hydrated from their serialized state, driven
from external Events, or persisted to any store. Workspaces can mix
virtual, server-side Python data with in-browser client data seamlessly, and
independent data Views can be cross-filtered, duplicated, exported, stacked
and saved.
To achieve Desktop-like performance in the Browser, Perspective.js relies on WebAssembly for excellent query calculation time, and Apache Arrow for its conservative memory footprint and efficient data serialization.
perspective-python
, built on the same C++ data engine used by the
WebAssembly version, implements
the Perspective API directly in Python, either as a high-performance
Streaming Arrow or Virtualized Server for Production, or as an embedded
JupyterLab Widget for Research.
For Application Developers, virtualized <perspective-viewer>
will only
consume the data necessary to render the current screen, enabling ludicrous size
datasets with instant-load after they've been server initialized. Or - Clone
the entire dataset to the WebAssembly runtime via efficiently via Arrow, and
give your server a break!
For Researchers and Data Scientists, PerspectiveWidget
is available as an
embedded widget within JupyterLab,
allowing Pandas and Arrow preview, transform,
export and persist Perspective visualizations interactively.