Automatically visualize your pandas dataframe via a single print! πŸ“Š πŸ’‘

Overview

A Python API for Intelligent Visual Discovery

Build Status PyPI version Documentation Status Slack Mailing List Binder CodeCov Twitter Follow

Lux is a Python library that facilitate fast and easy data exploration by automating the visualization and data analysis process. By simply printing out a dataframe in a Jupyter notebook, Lux recommends a set of visualizations highlighting interesting trends and patterns in the dataset. Visualizations are displayed via an interactive widget that enables users to quickly browse through large collections of visualizations and make sense of their data.

Highlighted Visual Dataframe Workflow with Lux

Here is a 1-min video introducing Lux, and slides from a more extended talk.

Check out our notebook gallery with examples of how Lux can be used with different datasets and analyses.
Or try out Lux on your own in a live Jupyter Notebook!

Getting Started

To start using Lux, simply add an extra import statement along with your Pandas import.

import lux
import pandas as pd

Lux can be used without modifying any existing Pandas code. Here, we use Pandas's read_csv command to load in a dataset of colleges and their properties.

df = pd.read_csv("https://raw.githubusercontent.com/lux-org/lux-datasets/master/data/college.csv")
df

When the dataframe is printed out, Lux automatically recommends a set of visualizations highlighting interesting trends and patterns in the dataset. Basic recommendations in Lux

Voila! Here's a set of visualizations that you can now use to explore your dataset further!

Next-step recommendations based on user intent:

In addition to dataframe visualizations at every step in the exploration, you can specify to Lux the attributes and values you're interested in. Based on this intent, Lux guides users towards potential next-steps in their exploration.

For example, we might be interested in the attributes AverageCost and SATAverage.

df.intent = ["AverageCost","SATAverage"]
df

Next-step Recommendations Based on User Context

The left-hand side of the widget shows the current visualization, i.e., the current visualization generated based on what the user is interested in. On the right, Lux generates three sets of recommendations, organized as separate tabs on the widget:

  • Enhance adds an additional attribute to the current selection, essentially highlighting how additional variables affect the relationship of AverageCost and SATAverage. We see that if we breakdown the relationship by FundingModel, there is a clear separation between public colleges (shown in red) and private colleges (in blue), with public colleges being cheaper to attend and with SAT average of lower than 1400. Enhance Recommendations
  • Filter adds a filter to the current selection, while keeping attributes (on the X and Y axes) fixed. These visualizations show how the relationship of AverageCost and SATAverage changes for different subsets of data. For instance, we see that colleges that offer Bachelor's degree as its highest degree show a roughly linear trend between the two variables. Filter Recommendations
  • Generalize removes an attribute to display a more general trend, showing the distributions of AverageCost and SATAverage on its own. From the AverageCost histogram, we see that many colleges with average cost of around $20000 per year, corresponding to the bulge we see in the scatterplot view. Generalize Recommendations

See this page for more information on additional ways for specifying the intent.

Easy programmatic access and export of visualizations:

Now that we have found some interesting visualizations through Lux, we might be interested in digging into these visualizations a bit more or sharing it with others. We can save the visualizations generated in Lux as a static, shareable HTML or programmatically access these visualizations further in Jupyter. Selected Vis objects can be translated into Altair, Matplotlib, or Vega-Lite code, so that they can be further edited.

Easily exportable visualization object

Learn more about how to save and export visualizations here.

Quick, on-demand visualizations with the help of automatic encoding:

We've seen how Viss are automatically generated as part of the recommendations. Users can also create their own Vis via the same syntax as specifying the intent. Lux is built on the philosophy that users should always be able to visualize anything they want, without having to think about how the visualization should look like. Lux automatically determines the mark and channel mappings based on a set of best practices. The visualizations are rendered via Altair into Vega-Lite specifications.

from lux.vis.Vis import Vis
Vis(["Region=New England","MedianEarnings"],df)

Specified Visualization

Powerful language for working with collections of visualizations:

Lux provides a powerful abstraction for working with collections of visualizations based on a partially specified queries. Users can provide a list or a wildcard to iterate over combinations of filter or attribute values and quickly browse through large numbers of visualizations. The partial specification is inspired by existing work on visualization query languages, including ZQL and CompassQL.

For example, we are interested in how the AverageCost distribution differs across different Regions.

from lux.vis.VisList import VisList
VisList(["Region=?","AverageCost"],df)

Example Vis List

To find out more about other features in Lux, see the complete documentation on ReadTheDocs.

Installation & Setup

To get started, please follow both the installation and setup instructions in your command line. lux-api can be installed through PyPI or conda-forge.

pip install lux-api

If you use conda, you can install lux-api via:

conda install -c conda-forge lux-api

Both the PyPI and conda installation include includes the Lux Jupyter widget frontend, lux-widget.

Setup in Jupyter Notebook, VSCode, JupyterHub

To use Lux with any Jupyter notebook-based frontends (e.g., Jupyter notebook, JupyterHub, or VSCode), activate the notebook extension:

jupyter nbextension install --py luxwidget
jupyter nbextension enable --py luxwidget

If the installation happens correctly, you should see two - Validating: OK after executing the two lines above. Note that you may have to restart the Jupyter Notebook server to ensure that the widget is displaying correctly.

Setup in Jupyter Lab

Lux is compatible with both Jupyter Lab version 2 and 3. To use Lux in Jupyter Lab, activate the lab extension:

jupyter labextension install @jupyter-widgets/jupyterlab-manager
jupyter labextension install luxwidget

Note that JupyterLab and VSCode is supported only for lux-widget version >=0.1.2, if you have an earlier version, please upgrade to the latest version of lux-widget. Lux has only been tested with the Chrome browser.

If you encounter issues with the installation, please refer to this page to troubleshoot the installation. Follow these instructions to set up Lux for development purposes.

Support and Resources

Lux is undergoing active development. If you are using Lux, we would love to hear from you!

Drop us a note here to share your experiences β€” any feedback, suggestions, and contributions are welcome!

Links to additional resources:

Comments
  • Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display.

    Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display.

    C:\Users\power\AppData\Local\Continuum\anaconda3\lib\site-packages\IPython\core\formatters.py:345: UserWarning: Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display. Please report the following issue on Github: https://github.com/lux-org/lux/issues

    C:\Users\power\AppData\Local\Continuum\anaconda3\lib\site-packages\lux\core\frame.py:653: UserWarning:Traceback (most recent call last): File "C:\Users\power\AppData\Local\Continuum\anaconda3\lib\site-packages\lux\core\frame.py", line 592, in repr_html return [] File "C:\Users\power\AppData\Local\Continuum\anaconda3\lib\site-packages\lux\core\frame.py", line 109, in maintain_metadata if not hasattr(self, "_metadata_fresh") or not self._metadata_fresh: File "C:\Users\power\AppData\Local\Continuum\anaconda3\lib\site-packages\lux\executor\PandasExecutor.py", line 504, in compute_stats File "C:\Users\power\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py", line 11475, in stat_func func, name=name, axis=axis, skipna=skipna, numeric_only=numeric_only File "C:\Users\power\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\series.py", line 4249, in _reduce return op(delegate, skipna=skipna, **kwds) File "C:\Users\power\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\nanops.py", line 120, in f result = bn_func(values, axis=axis, **kwds) TypeError: 'NoneType' object is not callable

    used "pip install lux-api==0.2.1 jupyter nbextension install --py luxwidget jupyter nbextension enable --py luxwidget",But it's still wrong.

    opened by powermap 18
  • saving Vis images

    saving Vis images

    I am using lux library for visualizations. I have a Vis object and want to save the image. I tried using save_as_html but i am getting the following error: 'Vis' object has no attribute 'save_as_html'. How can i save the image? Below attached the screenshot of the code. Capture1

    bug export 
    opened by deepikamittal 14
  • Id function improvised

    Id function improvised

    Added more regex checking within the ID checking to cover more cases. Also, added to check if the difference between consecutive ID values is the same - even intervals.

    Had a query regarding falsely identifying columns that are NOT IDs but are still recognized as IDs.

    Added more datasets for testing.

    Update 12:23AM PST 16th Jan: Complete

    opened by Priyansdesai 11
  • Widget can not show in jupyter notebook

    Widget can not show in jupyter notebook

    I used follow commend to instal lux widget. pip install git+https://github.com/lux-org/lux-widget jupyter nbextension install --py luxWidget jupyter nbextension enable --py luxWidget

    It's ok but the widget is not appear in Jupyter notebook. My environment is conda 4.8.5. and Python is 3.7.8.

    opened by Jack-ee 11
  • Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display.

    Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display.

    RecursionError: maximum recursion depth exceeded while calling a Python object

    import lux
    import pandas as pd
    
    # creating a Dataframe object 
    df = pd.DataFrame(dict_country)
      
    df
    

    I am attaching the log messages; hopefully that might be helpful in following where the issue might be. error.log

    lux version: 0.4.0 panda version: 1.2.5

    bug 
    opened by nehadamele 10
  • Error in rendering Lux Widget

    Error in rendering Lux Widget

    I have installed the lux api using the following commands:

    pip install lux-api jupyter nbextension install --py luxwidget jupyter nbextension enable --py luxwidget

    The Jupyter nbextension list does include: luxwidget/extension enabled - Validating: ok

    However, when i read the csv file, it does not show the toggle option between lux and pandas After using lux.config.default_display='lux' , i get the following error

    C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\formatters.py:345: UserWarning: Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display. Please report the following issue on Github: https://github.com/lux-org/lux/issues

    C:\ProgramData\Anaconda3\lib\site-packages\lux\core\frame.py:700: UserWarning:Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\lux\core\frame.py", line 651, in repr_html self.maintain_recs() File "C:\ProgramData\Anaconda3\lib\site-packages\lux\core\frame.py", line 480, in maintain_recs custom_action_collection = custom_actions(rec_df) File "C:\ProgramData\Anaconda3\lib\site-packages\lux\action\custom.py", line 74, in custom_actions recommendation = lux.config.actions[action_name].action(ldf, args) File "C:\ProgramData\Anaconda3\lib\site-packages\lux\action\univariate.py", line 96, in univariate vlist = VisList(intent, ldf) File "C:\ProgramData\Anaconda3\lib\site-packages\lux\vis\VisList.py", line 43, in init self.refresh_source(self._source) File "C:\ProgramData\Anaconda3\lib\site-packages\lux\vis\VisList.py", line 318, in refresh_source lux.config.executor.execute(self._collection, ldf) File "C:\ProgramData\Anaconda3\lib\site-packages\lux\executor\PandasExecutor.py", line 98, in execute PandasExecutor.execute_aggregate(vis, isFiltered=filter_executed) File "C:\ProgramData\Anaconda3\lib\site-packages\lux\executor\PandasExecutor.py", line 179, in execute_aggregate vis.data.groupby(groupby_attr.attribute, dropna=False, history=False) File "C:\ProgramData\Anaconda3\lib\site-packages\lux\core\frame.py", line 932, in groupby groupby_obj = super(LuxDataFrame, self).groupby(*args, **kwargs) TypeError: groupby() got an unexpected keyword argument 'dropna'

    opened by deepikamittal 10
  • Improve automatic bin determination for histograms via start, end, and step attributes

    Improve automatic bin determination for histograms via start, end, and step attributes

    In this PR

    Closes #265 and #217 by modifying Histogram.py and providing a start, end, and step bin for the Altair renderer. The bin width, step, is stored in the Vis object during PandasExecutor.py#execute_binning().

    Changes

    • Modifications in vislib/altair/Histogram.py and executor/PandasExecutor.py
    • Additional instance variable, .__bin_size, in Vis.py

    Example Output

    Here is an updated screenshot for histogram binning along the x-axis. As an example,

    df = pd.read_csv("https://github.com/covidvis/covid19-vis/blob/master/data/interventionFootprintByState.csv?raw=True",index_col=0)
    df['dateBefore'] = pd.to_datetime(df['dateBefore'], format='%Y-%M-%d')
    df
    

    This yields the following output for Distribution histograms: Output

    Then, we can specify intent to view Filter histograms.

    df.intent = ["severityScore"]
    df
    

    Screen Shot 2021-03-02 at 9 26 06 PM

    Here is another screenshot to show histogram binning along the y-axis, which remains unchanged. Screen Shot 2021-02-22 at 1 21 21 AM

    opened by micahtyong 10
  • [SETUP] Script Error for luxwidget

    [SETUP] Script Error for luxwidget

    Lux Jupyter widget does show up when I print a dataframe but nothing appears as visualization . Output is null .

    image

    Jupyter nbextensions are also validated

    image

    duplicate setup 
    opened by Nadeesha0ekanayake 10
  • [ENH] Changing Widget Layout to enlarge chart size

    [ENH] Changing Widget Layout to enlarge chart size

    Hello,

    I'm not sure if this is the right place to ask.

    I like Lux! Great work!

    I was wondering is it possible to change the size of the widget, especially when exporting it as html? I find the height a bit small and it would be greate if you could increase the hight (and width).

    I managed to increase the size of the figures but I am struggling with the size of the frame/div. image

    enhancement 
    opened by bmorvaj 9
  • Are Binder examples working?

    Are Binder examples working?

    In both Safari and Brave on iPad, and Firefox on Desktop, when I click on the Toggle pandas/lux button, all that happens is that the cell output is toggled away, no lux plots appear. Thinking it might be slower execution on Binder, I waited 2 minutes for something to appear, but nothing happened. I also tried the 2nd gallery example with the same issue. No errors shown either.

    opened by michaelaye 8
  • Adding support for SQL as execution engine

    Adding support for SQL as execution engine

    Overview

    Merging in the sql-engine branch to bring the updated Lux SQL functionality to the main release. Users will be able to connect LuxSQLTable objects to their database tables and views, and leverage Lux' recommendation system without having to pull all of their database data locally.

    Changes

    This PR will update the Lux SQLExecutor as well as add a new LuxSQLTable object. The LuxSQLTable object is meant to help users differentiate between Lux' functionality when connecting to a Dataframe versus a SQL database. This PR makes the following major changes:

    • Updates SQLExecutor.py to query data necessary for all of Lux' supported charts
    • Adds sqltable.py which contains the LuxSQLTable class. This class inherits the Lux recommendation system utilities from the LuxDataFrame object
    • Adjusts frame.py to ensure metadata and recommendation maintenance works when using the SQLExecutor
    • Adds scripts to test the functionality of the SQLExecutor

    Example Output

    Script to reproduce: After setting up Postgres, go into command line via psql postgres, then setup via:

    CREATE USER postgres WITH PASSWORD 'lux';
    ALTER USER postgres WITH SUPERUSER;
    DROP schema public cascade;
    CREATE schema public;
    CREATE DATABASE postgres;
    

    Then run python upload_car_data.py or other data upload scripts inside lux/data

    from sqlalchemy import create_engine
    engine = create_engine("postgresql://postgres:[email protected]:5432")
    
    tbl = lux.LuxSQLTable()
    lux.config.set_SQL_connection(engine)
    tbl.set_SQL_table("car")
    
    tbl
    

    Users will now be able to connect Lux to their database tables like so:

    sql_executor

    opened by thyneb19 8
  • [BUG] Couldnt see visualizations

    [BUG] Couldnt see visualizations

    Describe the bug Could not observe visualizations for the dataframe

    To Reproduce Please refer to the dataset here Link

    1. Using this data: redwine_data = pd.read_csv('data/winequality-red.csv', sep=';')
    2. Looking at the dataframe: 'redwine_data'
    3. Figure 1 shows the dataframe
    4. When I click on 'Toggle Pandas/Lux', nothing happens, the response is empty in figure 2

    Figure 1 Figure 2

    opened by sush4nt 0
  • C:\Users\mukta\anaconda3\lib\site-packages\IPython\core\formatters.py:918: UserWarning: Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display.

    C:\Users\mukta\anaconda3\lib\site-packages\IPython\core\formatters.py:918: UserWarning: Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display.

    Describe the bug C:\Users\mukta\anaconda3\lib\site-packages\IPython\core\formatters.py:918: UserWarning: Unexpected error in rendering Lux widget and recommendations. Falling back to Pandas display.

    It occured while using GroupBy function in pandas module

    To Reproduce Please describe the steps needed to reproduce the behavior. For example:

    1. Using this data: df = pd.read_csv("Play Store Data.csv")
    2. Go to 'df1.groupby(['Category', 'Content Rating']).mean()'
    3. See error

    File "C:\Users\mukta\anaconda3\lib\site-packages\altair\utils\core.py", line 307, in sanitize_dataframe raise ValueError("Hierarchical indices not supported") ValueError: Hierarchical indices not supported

    image

    opened by muktaraut12 0
  • fix(processor): Fix spelling in the Lux Intent Validator error message

    fix(processor): Fix spelling in the Lux Intent Validator error message

    Overview

    • Fix a typo in an error message

    Changes

    • No functional change, just improves error messaging for consumers who might pass misspelled columns into their dataframe intents.

    Example Output

    • N/A
    opened by hydrosquall 0
  • Addition of cuDF and HoloViews for GPU acceleration

    Addition of cuDF and HoloViews for GPU acceleration

    Overview

    This implementation of LUX adds the option of utilizing NVIDIA GPUs, with RAPIDS cuDF and HoloViews as the plotting engine. It is capable of a speed up 3-10X compared to the original LUX, and avoids browser memory issues when dealing with datasets in the millions+ rows (measured on the NVIDIA RTX A3000 Laptop GPU).

    HoloViews

    HoloViews does not require the creation of a JSON file which for larger datasets is both memory and time expensive. It is able to show magnitudes of more data points on its curve without being time consuming, also removing the constraint of having to fall back to heatmaps rather than scatter plots, when the number of rows is too high. In this implementation we have not relied on the LUX widget for displaying the charts, for simplicity in viewing.

    To Run

    To run the cuDF + HoloViews implementation, simply do the following

    #If global_backend is defined as "holoviews" then cuDF and HoloViews will be used, otherwise no need to define backend.set_back
    from global_backend import backend
    backend.set_back = "holoviews"
    import lux
    import pandas as pd
    if backend.set_back == "holoviews":
        import cudf
    

    To plot the HoloViews curves, run df.maintain_recs() rather than df in a different cell.

    Example Output

    A brief output is shown below image

    Next Steps

    This implementation is a proof of concept demonstrating the acceleration that RAPIDS can bring to LUX. It also shows the benefits of adding HoloViews as an additional option for plotting. @exactlyallan, @AjayThorve and I would like to discuss if and how an integration like this might proceed, @dorisjlee?

    opened by AdityaR-Bits 4
  • ModuleNotFoundError: No module named 'termios'

    ModuleNotFoundError: No module named 'termios'

    Describe the bug My platform : Window10, After i create fcntl.py, i got this error. I know that windows did not contain termios pkgs, is there any alternative?

    Here is the error text:
    Collecting sh
      Using cached sh-1.14.3.tar.gz (62 kB)
      Preparing metadata (setup.py) ... error
      error: subprocess-exited-with-error
    
      Γ— python setup.py egg_info did not run successfully.
      β”‚ exit code: 1
      ╰─> [12 lines of output]
          Traceback (most recent call last):
            File "<string>", line 2, in <module>
            File "<pip-setuptools-caller>", line 34, in <module>
            File "C:\Users\user\AppData\Local\Temp\pip-install-c6_3ptet\sh_a745e2298f624f949a4fe5872652dea0\setup.py", line 5, in <module>
              import sh
            File "C:\Users\user\AppData\Local\Temp\pip-install-c6_3ptet\sh_a745e2298f624f949a4fe5872652dea0\sh.py", line 45, in <module>
              import pty
            File "D:\ProgramData\anaconda3\envs\lib\pty.py", line 12, in <module>
              import tty
            File "D:\ProgramData\anaconda3\envs\lib\tty.py", line 5, in <module>
              from termios import *
          ModuleNotFoundError: No module named 'termios'
          [end of output]
    
      note: This error originates from a subprocess, and is likely not a problem with pip.
    error: metadata-generation-failed
    
    Γ— Encountered error while generating package metadata.
    ╰─> See above for output.
    
    note: This is an issue with the package mentioned above, not pip.
    hint: See above for details.
    
    opened by Bill671 0
  • [BUG] ModuleNotFoundError: No module named 'fcntl'

    [BUG] ModuleNotFoundError: No module named 'fcntl'

    When trying to install the package via pip install lux-api the following error occurs:

    ERROR: Command errored out with exit status 1:
         command: 'c:\code\eda_research\venv\scripts\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\I574778\\AppData\\Local\\Temp\\pip-install-3uvkz52y\\sh\\setup.py'"'"'; __file__='"'"'C:\\Users\\I574778\\AppData\\Local\\Temp\\pip-install-3uvkz52y\\sh\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\I574778\AppData\Local\Temp\pip-pip-egg-info-arz193lv'
             cwd: C:\Users\I574778\AppData\Local\Temp\pip-install-3uvkz52y\sh\
        Complete output (7 lines):
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "C:\Users\I574778\AppData\Local\Temp\pip-install-3uvkz52y\sh\setup.py", line 5, in <module>
            import sh
          File "C:\Users\I574778\AppData\Local\Temp\pip-install-3uvkz52y\sh\sh.py", line 37, in <module>
            import fcntl
        ModuleNotFoundError: No module named 'fcntl'
    

    I'm using Python==3.8.9.

    opened by baniasbaabe 5
Releases(v0.5.1)
  • v0.5.1(Feb 19, 2022)

  • v0.5.0(Feb 17, 2022)

    The lux-api v0.5.0 release contains improved debugging workflow and bug fixes.

    This release is associated with lux-widget v0.1.11.

    • Incorporated New Commit Signoff Guidelines (#422)
    • Added compatibility and support for pandas 1.3, as well as backward compatibility with pandas 1.2 (#428)
    • Improved pandas datetime object support: pd.Interval, pd.DatetimeIndex, TimeDelta (#444, #445)
    • Added new debug_info capabilities to improve debugging workflow (#450, #457)
    • Bugfix for NaNs on Heatmaps (#440)
    • Bugfix for automatic bin width determination for filtered Histograms (#415)
    • Bugfix for mixed dtypes on Heatmaps (#448)
    • Fixes to README (#449, #454)

    Contributors

    We thank the following users who have contributed to this release: @cgarciae, @dorisjlee, @micahtyong, @westernguy2.

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Sep 10, 2021)

    The lux-api v0.4.0 release contains experimental features around exporting data transformation code and extended SQL support.

    This release is associated with lux-widget v0.1.8.

    • Added export option for pandas or SQL code via tracing (#388)
    • Extended SQLExecutor to work with different flavors of SQL (#388)
    • Added global configuration option to adjust the maximum number of bars (#414)
    • Bugfix for LuxDataFrame(df) (#416)

    Contributors

    We thank the following users who have contributed to this release: @adityagp, @westernguy2, @thyneb19.

    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Jul 20, 2021)

    The lux-api v0.3.2 release contains several minor bug fixes. This release is associated with lux-widget v0.1.7.

    • Fixing to Choropleth width and int type error (#395)
    • added timestamp import to matplotlib line charts (#396)
    • version lock to pandas version<1.3 (#397)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Jun 25, 2021)

    The lux-api v0.3.1 release contains several new features and bug fixes. This release is associated with lux-widget v0.1.6.

    New Features

    • Export Integration with Streamlit, DataPane, Panel via save_as_html (#378, #385)
    • Performance improvement: incorporate early pruning optimizations (#368)
    • Ability to adjust plot size via lux.config.plotting_scale factor (#333, #379)
    • New Temporal action displaying line chart of different time scales (#262)

    Refactor & Bug Fixes

    • Clear propagated intent from vis.data (#297)
    • version lock on black stable version
    • Bugfix for all column and temporal action (#373)
    • Empty dataframe data type error (#376, #377)
    • Remove python-us dependency (#386)
    • Update Github Action
    • README changes

    Contributors

    We thank the following users who have contributed to this release: @caitlynachen, @mantejpanesar, @MarcSkovMadsen, @micahtyong.

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Apr 19, 2021)

    The lux-api v0.3 release contains major feature, including Postgres SQL support and geographic visualizations. This release is associated with lux-widget v0.1.5.

    New Features

    • Adding support for SQL as execution engine (#306, #356, #363)
    • New geographic data type and visualizations (#253, #318, #322, #358)
    • "All-column" vis when only few columns in dataframe ( #199, #336)
    • Improve warnings when no recommendations are generated (#279)
    • Add export Vis option to LuxSeries (#277)
    • Extend color legend size for scatter charts for matplotlib (#286)
    • Non-empty __repr___ and moving widget display to Out[...] (#308)

    Refactor & Bug Fixes

    • Update histogram code with new bin determination (#285, #304)
    • Migrated Travis to Github Action CI (#294)
    • Avoid current_vis expire upon expire_recs (#278)
    • Upgrade required Pandas version 1.2.0 (#281)
    • Narrow condition for Float64 sanitization in Altair (#247)
    • Refactor Expand LuxGroupby Tests and add bug fixes (#287, #309)
    • Revert Cardinality Requirement for Histograms (#301)
    • Fix Metadata Propagation with Overridden Pandas Methods (#332)
    • Various bugfix in test and data type inference code (#349)
    • Update type inference for string columns (#343)
    • NaN value scatterplot bug (#346)
    • Bugfix for error when intent is invalid (#351)
    • Change Vis export API name: to_matplotlib, to_altair, to_vegalite (#359)

    Documentation

    • Added new Pull Request templates
    • Added new Notebook Gallery
    • Added new lux-binder-sql tutorials

    Contributors

    We thank the following users who have contributed to this release: @caitlynachen, @cjachekang, @domoritz, @dorisjlee, @dj-khandelwal, @jerrysong1324, @jinimukh, @Moh-Yakoub, @micahtyong, @NiStannum, @sophiahhuang, @thyneb19, @westernguy2.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.3(Feb 17, 2021)

    The lux-api v0.2.3 release contains major feature additions and bug fixes. This release is associated with lux-widget v0.1.4.

    New Features

    • Ability to override the inferred data type explicitly via df.set_data_type (#215)
    • Support for matplotlib renderer via lux.config.plotting_backend='matplotlib'(#198)
    • Support for metadata propagation across LuxGroupby objects (#260)
    • Added conda recipe for conda-forge feedstock (#264)
    • New info toggle box describing each action via long-description (#244)

    Refactor & Bug Fixes

    • Performance optimizations (#219)
      • Remove sampling in datetime detection
      • Changed spearman's r to pearson's r for interestingness
    • Improvements on data types
      • Improved ID detection with regular interval checking (#234)
      • Temporal type detection bug for numerical attributes (#232)
      • Consolidate and refactor data type lookup (#231)
    • Changes and additions to lux.config:
      • Dev parameters for Pandas Fallback (#233)
      • Added config for changing heatmap bin size
      • Changed plot_config to plotting_style (#239,#246)
    • Added recommendation property to LuxSeries (#266)
    • Added axis name to unamed Series (#263)

    Documentation

    • New data type docs page (#252)
    • Added table of contents for config page (#248)
    • Register custom action documentation fix (#256)

    Contributors

    We thank the following users who have contributed to this release: @anupam-b, @caitlynachen, @cjachekang, @dorisjlee, @jerrysong1324, @jinimukh, @micahtyong, @Priyansdesai, @thyneb19, @westernguy2.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Jan 9, 2021)

    The lux-api v0.2.2 release contains major feature additions and bug fixes. This release is associated with lux-widget v0.1.3.

    New Features

    • Similarity incorporated as the default action for line charts (#182)
    • Added lux.config parameter support for: sampling (#192),
    • Supporting column names with special character . for Altair plots (#184, #175)
    • Supporting long column names abbreviated for Altair plots (#184, #175)
    • Supporting column names with integer type (#203)
    • Supporting more data loading capabilities through pd.io (#207, #150, #188)

    Bug Fixes

    • User-provided index KeyError (#191)
    • Adding warning for mixed data type columns (#205)
    • Bugfix for Series describe and convert_dtypes (#197)
    • Ignore Series visualization for basic values and dtypes prints (#197)
    • Bufix for Series visualization for value_counts (#210)

    Refactor & Documentation

    • Refactor interestingness for colored bar chart test; catching exception for all interestingness calculation (#189)
    • Refactor all access to data_type only (#185)
    • Initialize config and actions once only during __init__ (#194)
    • Update and improve documentation (#195)

    Contributors

    We thank the following users who have contributed to this release: @caitlynachen, @cjachekang, @dorisjlee, @jinimukh, @thyneb19, @westernguy2.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1.2(Dec 21, 2020)

    New Features

    • Ability to export dataframe as HTML via save_as_html (#170)
    • Setting Executor Parameters via Global Config (#157)

    Bug Fixes

    • Making Lux more robust with missing values and NaN, better LuxSeries override (#179, #180)
    • Fixing groupby.agg on columns with many unique values (#174)

    Contributors

    We thank the following users who have contributed to this release: @cjachekang, @dorisjlee, @thyneb19, @westernguy2.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1.1(Nov 30, 2020)

    Bug Fix and Dependencies

    • Remove Python version dependency via __future__ annotations (#161)
    • FIX: move channel inheritance in Enhance
    • FIX: error message from 3-clause Vis example
    • Update README
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Nov 30, 2020)

    The lux-api v0.2.1 release contains several feature additions, refactoring, and bugfixes. This release is associated with lux-widget v0.1.1, refer to the release notes for details on frontend changes.

    Major Features

    • Ability to register and manage custom recommendation actions (#109, #134)
    • Ability to set intent on frontend (#112)
    • Extending pd.Series support with LuxSeries (#122, #153, #140)
    • Added support for global configurations:
      • lux.config.default_display (#121)
      • lux.config.plot_config, lux.config.renderer (#152)
    • Automatic date string detection (#139)

    Bug Fix

    • Top-k bar chart overcount, override color encoding (#115)
    • Improvements to warning messages (#135, #143, #145, #146, #151)
    • Pandas speedup for execute_2D_binning (#136)
    • Ensuring that LuxDataFrame properties are accessible before initialized (#159)
    • Fixed support for read_json (#145)

    Maintenance

    • Added black to dev workflow (#127, #137)
    • Test speedup using pytest.fixture (#149)
    • Improved Makefile build/test shortcuts (#160)

    Contributors

    We thank the following users who have contributed to this release: @caitlynachen, @cjachekang, @dorisjlee, @jinimukh, @jrdzha, @piyushg9794, @westernguy2.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Oct 10, 2020)

    The lux-api v0.2.0 release contains major feature additions, refactoring, and changes towards a more usable and minimal API. This release documents the contributions from Spring to Summer 2020, with the goal of making Lux more robust, bug-free, and easier to use. This is the first release supporting a stable API. This release is associated with lux-widget v0.1.0, refer to the release notes for details on frontend changes.

    Major Features

    • New programmatic objects Vis, VisList
    • Ability to set Vis as intent
    • Simplified property access for intent, exported, and protected LuxDataFrame properties
    • Added plot_config setting to customize plot style
    • Default option to fallback to Pandas for errors
    • Added support for Row and Column Group based on dataframe index
    • Extended semantic type detection, temporal and ID fields
    • Pandas Executor added support for colored bar/line chart (#48)
    • UI Warning message support for ID fields (#71)
    • Improve interestingness scoring (#72, #59)
    • Basic history mechanism to support df.head and df.tail (#73)
    • standalone option for to_Altair (#75)
    • Warning message for temporal column (#80)
    • Pandas compatibility and coverage test and related bugfixes (#86, #92)

    Scalability

    • Improve metadata maintenance and expiration mechanism to avoid costly __init__ calls (#63, #81)
    • Pandas Executor supports generic random sampling for above 10k and above 30k rows (capped) with caching (#96)
    • Render large scatterplots (above 5k rows) as binned heatmaps. 2D binning support in Pandas Executor with correlation-based lazy evaluation (#95).

    Installation, Documentation, Tutorials

    • Improved ReadTheDocs documentation
    • New demo and multi-part tutorial notebooks

    Contributors

    We thank the following users who have contributed to this release: @caitlynachen, @cjachekang, @dorisjlee, @jaywoo123, @jerrysong1324, @jinimukh, @jrdzha, @thyneb19, @westernguy2. Additional thanks to Aditya Parameswaran and Marti Hearst for providing valuable feedback that contributed to this release.

    Source code(tar.gz)
    Source code(zip)
Owner
Lux
A Python API for Intelligent Visual Discovery
Lux
A collection of 100 Deep Learning images and visualizations

A collection of Deep Learning images and visualizations. The project has been developed by the AI Summer team and currently contains almost 100 images.

AI Summer 65 Sep 12, 2022
Python Package for CanvasXpress JS Visualization Tools

CanvasXpress Python Library About CanvasXpress for Python CanvasXpress was developed as the core visualization component for bioinformatics and system

Dr. Todd C. Brett 5 Nov 07, 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-

45 Nov 28, 2022
Rockstar - Makes you a Rockstar C++ Programmer in 2 minutes

Rockstar Rockstar is one amazing library, which will make you a Rockstar Programmer in just 2 minutes. In last decade, people learned C++ in 21 days.

4k Jan 05, 2023
Python & Julia port of codes in excellent R books

X4DS This repo is a collection of Python & Julia port of codes in the following excellent R books: An Introduction to Statistical Learning (ISLR) Stat

Gitony 5 Jun 21, 2022
Gallery of applications built using bqplot and widget libraries like ipywidgets, ipydatagrid etc.

bqplot Gallery This is a gallery of bqplot examples. View the gallery at https://bqplot.github.io/bqplot-gallery. Contributing new examples Clone this

8 Aug 23, 2022
This is a small program that prints a user friendly, visual representation, of your current bsp tree

bspcq, q for query A bspc analyzer (utility for bspwm) This is a small program that prints a user friendly, visual representation, of your current bsp

nedia 9 Apr 24, 2022
WebApp served by OAK PoE device to visualize various streams, metadata and AI results

DepthAI PoE WebApp | Bootstrap 4 & Vue.js SPA Dashboard Based on dashmin (https:

Luxonis 6 Apr 09, 2022
ecoglib: visualization and statistics for high density microecog signals

ecoglib: visualization and statistics for high density microecog signals This library contains high-level analysis tools for "topos" and "chronos" asp

1 Nov 17, 2021
Compute and visualise incidence (reworking of the original incidence package)

incidence2 incidence2 is an R package that implements functions and classes to compute, handle and visualise incidence from linelist data. It refocuss

15 Nov 22, 2022
Uniform Manifold Approximation and Projection

UMAP Uniform Manifold Approximation and Projection (UMAP) is a dimension reduction technique that can be used for visualisation similarly to t-SNE, bu

Leland McInnes 6k Jan 08, 2023
NumPy and Pandas interface to Big Data

Blaze translates a subset of modified NumPy and Pandas-like syntax to databases and other computing systems. Blaze allows Python users a familiar inte

Blaze 3.1k Jan 01, 2023
A library for bridging Python and HTML/Javascript (via Svelte) for creating interactive visualizations

A library for bridging Python and HTML/Javascript (via Svelte) for creating interactive visualizations

Anthropic 98 Dec 27, 2022
A workshop on data visualization in Python with notebooks and exercises for following along.

Beyond the Basics: Data Visualization in Python The human brain excels at finding patterns in visual representations, which is why data visualizations

Stefanie Molin 162 Dec 05, 2022
Altair extension for saving charts in a variety of formats.

Altair Saver This packge provides extensions to Altair for saving charts to a variety of output types. Supported output formats are: .json/.vl.json: V

Altair 85 Dec 09, 2022
Small U-Net for vehicle detection

Small U-Net for vehicle detection Vivek Yadav, PhD Overview In this repository , we will go over using U-net for detecting vehicles in a video stream

Vivek Yadav 91 Nov 03, 2022
Visualise Ansible execution time across playbooks, tasks, and hosts.

ansible-trace Visualise where time is spent in your Ansible playbooks: what tasks, and what hosts, so you can find where to optimise and decrease play

Mark Hansen 81 Dec 15, 2022
Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python

Petrel Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python. NOTE: The base Storm package provides storm.py, which

AirSage 247 Dec 18, 2021
🎨 Python3 binding for `@AntV/G2Plot` Plotting Library .

PyG2Plot 🎨 Python3 binding for @AntV/G2Plot which an interactive and responsive charting library. Based on the grammar of graphics, you can easily ma

hustcc 990 Jan 05, 2023
Active Transport Analytics Model (ATAM) is a new strategic transport modelling and data visualization framework for Active Transport as well as emerging micro-mobility modes

{ATAM} Active Transport Analytics Model Active Transport Analytics Model (β€œATAM”) is a new strategic transport modelling and data visualization framew

Peter Stephan 0 Jan 12, 2022