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:lux@localhost: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
Automatically Visualize any dataset, any size with a single line of code. Created by Ram Seshadri. Collaborators Welcome. Permission Granted upon Request.

AutoViz Automatically Visualize any dataset, any size with a single line of code. AutoViz performs automatic visualization of any dataset with one lin

AutoViz and Auto_ViML 1k Jan 2, 2023
Automatically Visualize any dataset, any size with a single line of code. Created by Ram Seshadri. Collaborators Welcome. Permission Granted upon Request.

AutoViz Automatically Visualize any dataset, any size with a single line of code. AutoViz performs automatic visualization of any dataset with one lin

AutoViz and Auto_ViML 299 Feb 13, 2021
Visualize your pandas data with one-line code

PandasEcharts 简介 基于pandas和pyecharts的可视化工具 安装 pip 安装 $ pip install pandasecharts 源码安装 $ git clone https://github.com/gamersover/pandasecharts $ cd pand

陈华杰 2 Apr 13, 2022
a python function to plot a geopandas dataframe

Pretty GeoDataFrame A minimum python function (~60 lines) to draw pretty geodataframe. Based on matplotlib, shapely, descartes. Installation just use

haoming 27 Dec 5, 2022
Process dataframe in a easily way.

Popanda Written by Shengxuan Wang at OSU. Used for processing dataframe, especially for machine learning. The name is from "Po" in the movie Kung Fu P

ShawnWang 1 Dec 24, 2021
Print matplotlib colors

mplcolors Tired of searching "matplotlib colors" every week/day/hour? This simple script displays them all conveniently right in your terminal emulato

Brandon Barker 32 Dec 13, 2022
Visualize the bitcoin blockchain from your local node

Project Overview A new feature in Bitcoin Core 0.20 allows users to dump the state of the blockchain (the UTXO set) using the command dumptxoutset. I'

null 18 Sep 11, 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
📊📈 Serves up Pandas dataframes via the Django REST Framework for use in client-side (i.e. d3.js) visualizations and offline analysis (e.g. Excel)

???? Serves up Pandas dataframes via the Django REST Framework for use in client-side (i.e. d3.js) visualizations and offline analysis (e.g. Excel)

wq framework 1.2k Jan 1, 2023
Visualize and compare datasets, target values and associations, with one line of code.

In-depth EDA (target analysis, comparison, feature analysis, correlation) in two lines of code! Sweetviz is an open-source Python library that generat

Francois Bertrand 2.3k Jan 5, 2023
Visualize and compare datasets, target values and associations, with one line of code.

In-depth EDA (target analysis, comparison, feature analysis, correlation) in two lines of code! Sweetviz is an open-source Python library that generat

Francois Bertrand 1.2k Feb 18, 2021
Generate graphs with NetworkX, natively visualize with D3.js and pywebview

webview_d3 This is some PoC code to render graphs created with NetworkX natively using D3.js and pywebview. The main benifit of this approac

byt3bl33d3r 68 Aug 18, 2022
Visualize tensors in a plain Python REPL using Sparklines

Visualize tensors in a plain Python REPL using Sparklines

Shawn Presser 43 Sep 3, 2022
Import, visualize, and analyze SpiderFoot OSINT data in Neo4j, a graph database

SpiderFoot Neo4j Tools Import, visualize, and analyze SpiderFoot OSINT data in Neo4j, a graph database Step 1: Installation NOTE: This installs the sf

Black Lantern Security 42 Dec 26, 2022
Extract and visualize information from Gurobi log files

GRBlogtools Extract information from Gurobi log files and generate pandas DataFrames or Excel worksheets for further processing. Also includes a wrapp

Gurobi Optimization 56 Nov 17, 2022
A gui application to visualize various sorting algorithms using pure python.

Sorting Algorithm Visualizer A gui application to visualize various sorting algorithms using pure python. Language : Python 3 Libraries required Tkint

Rajarshi Banerjee 19 Nov 30, 2022
This is a web application to visualize various famous technical indicators and stocks tickers from user

Visualizing Technical Indicators Using Python and Plotly. Currently facing issues hosting the application on heroku. As soon as I am able to I'll like

null 4 Aug 4, 2022
Visualize the training curve from the *.csv file (tensorboard format).

Training-Curve-Vis Visualize the training curve from the *.csv file (tensorboard format). Feature Custom labels Curve smoothing Support for multiple c

Luckky 7 Feb 23, 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