python partial dependence plot toolbox

Overview

PDPbox

PyPI version Build Status

python partial dependence plot toolbox

Motivation

This repository is inspired by ICEbox. The goal is to visualize the impact of certain features towards model prediction for any supervised learning algorithm. (now support all scikit-learn algorithms)

The common headache

When using black box machine learning algorithms like random forest and boosting, it is hard to understand the relations between predictors and model outcome.

For example, in terms of random forest, all we get is the feature importance. Although we can know which feature is significantly influencing the outcome based on the importance calculation, it really sucks that we don’t know in which direction it is influencing. And in most of the real cases, the effect is non-monotonic.

We need some powerful tools to help understanding the complex relations between predictors and model prediction.

Highlight

  1. Helper functions for visualizing target distribution as well as prediction distribution.
  2. Proper way to handle one-hot encoding features.
  3. Solution for handling complex mutual dependency among features.
  4. Support multi-class classifier.
  5. Support two variable interaction partial dependence plot.

Documentation

Tutorials

https://github.com/SauceCat/PDPbox/tree/master/tutorials

Change Logs

https://github.com/SauceCat/PDPbox/blob/master/CHANGELOG.md

Installation

  • through pip (latest stable version: 0.2.0)

    $ pip install pdpbox
    
  • through git (latest develop version)

    $ git clone https://github.com/SauceCat/PDPbox.git
    $ cd PDPbox
    $ python setup.py install
    

Testing

PDPbox can be tested using tox.

  • First install tox and tox-venv

    $ pip install tox tox-venv
    
  • Call tox inside the pdpbox clone directory. This will run tests with python 2.7 and 3.6 (if available).

  • To test the documentation, call tox -e docs. The documentation should open up in your browser if it is successfully build. Otherwise, the problem with the documentation will be reported in the output of the command.

Gallery

  • PDP: PDP for a single feature

  • PDP: PDP for a multi-class

  • PDP Interact: PDP Interact for two features with contour plot

  • PDP Interact: PDP Interact for two features with grid plot

  • PDP Interact: PDP Interact for multi-class

  • Information plot: target plot for a single feature

  • Information plot: target interact plot for two features

  • Information plot: actual prediction plot for a single feature

Comments
  • The contour_label_fontsize parameter in _pdp_contour_plot() causes TypeError

    The contour_label_fontsize parameter in _pdp_contour_plot() causes TypeError

    On line 251 in pdp_plot_utils.py, one of the parameters for _pdp_contour_plot() is contour_label_fontsize and this causes the following error:

    TypeError: clabel() got an unexpected keyword argument 'contour_label_fontsize'

    According to the documentation for matplotlib.pyplot.clabel(), the parameter should be called fontsize.

    Source: clabel() documentation

    to-do 
    opened by angertdevsingh 19
  • Fontsize/Label error in pdp.pdp_interact_plot when contour = True

    Fontsize/Label error in pdp.pdp_interact_plot when contour = True

    This command works fine and produces the expected results:

    fig, axes = pdp.pdp_interact_plot(
        pdp_interact_out = inter1,
        feature_names=['NOx', 'NO_2'],
        plot_type='grid'
    )
    
    screen shot 2018-09-25 at 11 59 15

    However, changing only plot_type to contour gives an error related to the labels and the font size. The figure appears label-less at the bottom after this error. Any guess or help is appreciated.

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-363-7b31c15b4793> in <module>()
          2     pdp_interact_out = inter1,
          3     feature_names=['NOx', 'NO_2'],
    ----> 4     plot_type='contour'
          5 )
    
    /Users/jsg/Documents/DrivenData_Cold_Forecast/venv/lib/python3.6/site-packages/pdpbox/pdp.py in pdp_interact_plot(pdp_interact_out, feature_names, plot_type, x_quantile, plot_pdp, which_classes, figsize, ncols, plot_params)
        773             fig.add_subplot(inter_ax)
        774             _pdp_inter_one(pdp_interact_out=pdp_interact_plot_data[0], inter_ax=inter_ax, norm=None,
    --> 775                            feature_names=feature_names_adj, **inter_params)
        776     else:
        777         wspace = 0.3
    
    /Users/jsg/Documents/DrivenData_Cold_Forecast/venv/lib/python3.6/site-packages/pdpbox/pdp_plot_utils.py in _pdp_inter_one(pdp_interact_out, feature_names, plot_type, inter_ax, x_quantile, plot_params, norm, ticks)
        330             # for numeric not quantile
        331             X, Y = np.meshgrid(pdp_interact_out.feature_grids[0], pdp_interact_out.feature_grids[1])
    --> 332         im = _pdp_contour_plot(X=X, Y=Y, **inter_params)
        333     elif plot_type == 'grid':
        334         im = _pdp_inter_grid(**inter_params)
    
    /Users/jsg/Documents/DrivenData_Cold_Forecast/venv/lib/python3.6/site-packages/pdpbox/pdp_plot_utils.py in _pdp_contour_plot(X, Y, pdp_mx, inter_ax, cmap, norm, inter_fill_alpha, fontsize, plot_params)
        249     c1 = inter_ax.contourf(X, Y, pdp_mx, N=level, origin='lower', cmap=cmap, norm=norm, alpha=inter_fill_alpha)
        250     c2 = inter_ax.contour(c1, levels=c1.levels, colors=contour_color, origin='lower')
    --> 251     inter_ax.clabel(c2, contour_label_fontsize=fontsize, inline=1)
        252     inter_ax.set_aspect('auto')
        253 
    
    /Users/jsg/Documents/DrivenData_Cold_Forecast/venv/lib/python3.6/site-packages/matplotlib/axes/_axes.py in clabel(self, CS, *args, **kwargs)
       6221 
       6222     def clabel(self, CS, *args, **kwargs):
    -> 6223         return CS.clabel(*args, **kwargs)
       6224     clabel.__doc__ = mcontour.ContourSet.clabel.__doc__
       6225 
    
    TypeError: clabel() got an unexpected keyword argument 'contour_label_fontsize'
    
    screen shot 2018-09-25 at 12 00 51

    Thank you in advance. Awesome library by the way!

    opened by jsga 7
  • Having issue using info_plots.actual_plot

    Having issue using info_plots.actual_plot

    I am following your examples and getting a weird error.

    "fig, axes, summary_df = info_plots.actual_plot(model=forest_reg, X=df_new, feature = '1', feature_name='1')"

    image

    image

    Thanks a lot in advance!

    opened by grechasneak 5
  • Not exactly an issue: dedup DataFrame

    Not exactly an issue: dedup DataFrame

    I just recently started to use this excellent repository to fill in a much needed gap in scikit learn. A suggestion for clarity in the parameters of pdpbox.pdp.pdp_isolate is to require train_X to be a deduplicated pandas dataframe because it caused a bit of confusion on my part when I wasn't able to plot due to the indexing issues from duplicated values. It's really just as simple as df.drop_duplicates(). Thanks for all of your work!

    EDIT:

    Another data checking step should be added at line 303 in pdp.py for using pdp.pdp_interact. If the feature grids are not specified and are defaulted to 10 and train_X.shape[0] is less than 100, then you will have an error on line 305 since data_chunk_size will round to 0. I just need to specify that num_grid_points=[5,5] so that it would run when train_X.shape[0] = 25.

    opened by jrichardhu 4
  • ValueError: cannot reindex from a duplicate axis

    ValueError: cannot reindex from a duplicate axis

    I have a couple of features which are scaled between 0 and 1. For all of those I get a "ValueError: cannot reindex from a duplicate axis". I assume that in creating the columns for the different values of a feature, some rounding happens for their naming, which results in several columns having the same name, although I couldn't trace back the error in the code. Multiplying the column by 10 solves the problem but is of course unintended.

    The error message below.

    Thanks for this beautiful package.

    /home/cdsw/.local/lib/python3.6/site-packages/pdpbox/pdp.py in pdp_plot(pdp_isolate_out, feature_name, center, plot_org_pts, plot_lines, frac_to_plot, cluster, n_cluster_centers, cluster_method, x_quantile, figsize, ncols, plot_params, multi_flag, which_class) 546 _pdp_plot(pdp_isolate_out=pdp_isolate_out, feature_name=feature_name, center=center, plot_org_pts=plot_org_pts, plot_lines=plot_lines, 547 frac_to_plot=frac_to_plot, cluster=cluster, n_cluster_centers=n_cluster_centers, cluster_method=cluster_method, x_quantile=x_quantile, --> 548 ax=ax2, plot_params=plot_params) 549 550

    /home/cdsw/.local/lib/python3.6/site-packages/pdpbox/pdp.py in _pdp_plot(pdp_isolate_out, feature_name, center, plot_org_pts, plot_lines, frac_to_plot, cluster, n_cluster_centers, cluster_method, x_quantile, ax, plot_params) 616 pdp_y -= pdp_y[0] 617 for col in display_columns[1:]: --> 618 ice_lines[col] -= ice_lines[display_columns[0]] 619 ice_lines['actual_preds'] -= ice_lines[display_columns[0]] 620 ice_lines[display_columns[0]] = 0

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/ops.py in f(self, other) 895 896 def f(self, other): --> 897 result = method(self, other) 898 899 # this makes sure that we are aligned like the input

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/ops.py in f(self, other, axis, level, fill_value) 1552 return _combine_series_frame(self, other, na_op, 1553 fill_value=fill_value, axis=axis, -> 1554 level=level, try_cast=True) 1555 else: 1556 if fill_value is not None:

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/ops.py in _combine_series_frame(self, other, func, fill_value, axis, level, try_cast) 1437 # default axis is columns 1438 return self._combine_match_columns(other, func, level=level, -> 1439 try_cast=try_cast) 1440 1441

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/frame.py in _combine_match_columns(self, other, func, level, try_cast) 4767 def _combine_match_columns(self, other, func, level=None, try_cast=True): 4768 left, right = self.align(other, join='outer', axis=1, level=level, -> 4769 copy=False) 4770 4771 new_data = left._data.eval(func=func, other=right,

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/frame.py in align(self, other, join, axis, level, copy, fill_value, method, limit, fill_axis, broadcast_axis) 3548 method=method, limit=limit, 3549 fill_axis=fill_axis, -> 3550 broadcast_axis=broadcast_axis) 3551 3552 @Appender(_shared_docs['reindex'] % _shared_doc_kwargs)

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/generic.py in align(self, other, join, axis, level, copy, fill_value, method, limit, fill_axis, broadcast_axis) 7364 copy=copy, fill_value=fill_value, 7365 method=method, limit=limit, -> 7366 fill_axis=fill_axis) 7367 else: # pragma: no cover 7368 raise TypeError('unsupported type: %s' % type(other))

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/generic.py in _align_series(self, other, join, axis, level, copy, fill_value, method, limit, fill_axis) 7461 7462 if lidx is not None: -> 7463 fdata = fdata.reindex_indexer(join_index, lidx, axis=0) 7464 else: 7465 raise ValueError('Must specify axis=0 or 1')

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/internals.py in reindex_indexer(self, new_axis, indexer, axis, fill_value, allow_dups, copy) 4412 # some axes don't allow reindexing with dups 4413 if not allow_dups: -> 4414 self.axes[axis]._can_reindex(indexer) 4415 4416 if axis >= self.ndim:

    /home/cdsw/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py in _can_reindex(self, indexer) 3558 # trying to reindex on an axis with duplicates 3559 if not self.is_unique and len(indexer): -> 3560 raise ValueError("cannot reindex from a duplicate axis") 3561 3562 def reindex(self, target, method=None, level=None, limit=None,

    ValueError: cannot reindex from a duplicate axis

    opened by jmoberreuter 3
  • pdp_isolate_obj, pdp_interact_obj don't pickle

    pdp_isolate_obj, pdp_interact_obj don't pickle

    If you try to pickle a pdp_isolate_obj you get a PicklingError:

    PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
    

    The reason is that currently the model's predict (or predict_proba) method is added as a class member to the object, and pickling instance methods is verboten.

    As far as I can tell, there's no reason to add the predict method to class. The pdp_isolate_obj.predict member isn't used anywhere in the code, and it could quite easily be reconstructed from the model, if it were needed. I'd propose to simply remove this member. Happy to submit a PR, if desired.

    opened by mqk 3
  • pdp_isolate fails for regression tasks

    pdp_isolate fails for regression tasks

    Hi - firstly I'd like to thank you for producing this package, it's really great! I was just reading the ICEBox paper recently and was considering building something, but was delighted to see somebody else already had :)

    I'm having issues with calling pdp_isolate on a regression model - it throws the following exception:

    usr/local/lib/python3.5/dist-packages/PDPbox-0.1-py3.5.egg/pdpbox/pdp.py in pdp_isolate(model, train_X, feature, num_grid_points, percentile_range)
        113     # store the ICE lines
        114     # for multi-classifier, a dictionary is created
    --> 115     if n_classes > 2:
        116         ice_lines = {}
        117         for n_class in range(n_classes):
    
    TypeError: unorderable types: NoneType() > int()
    

    Even the 'Regression.ipynb' example in PDPbox/test/Regression/ does this. A cursory glance at the codebase seems to suggest that when we have a sklearn model without a classes property, n_classes gets set to None on pdp.py line 64. Then all subsequent comparisons of n_classes to an integer will throw this error. Any suggestions?

    opened by NMRobert 3
  • PDPbox saved XGBoost models do not play well with latest XGBoost

    PDPbox saved XGBoost models do not play well with latest XGBoost

    I am trying to execute the code:

    from pdpbox import pdp, get_dataset, info_plots
    test_titanic = get_dataset.titanic()
    

    And I'm having the below error. PDP 0.2.0+13.g73c6966 XGBoost 1.1.0-SNAPSHOT conda environment

    Stacktrace:

    XGBoostError                              Traceback (most recent call last)
    <ipython-input-2-931a5e8d7b9f> in <module>
    ----> 1 test_titanic = get_dataset.titanic()
    
    ~/anaconda3/lib/python3.6/site-packages/PDPbox-0.2.0+13.g73c6966-py3.6.egg/pdpbox/get_dataset.py in titanic()
          7 
          8 def titanic():
    ----> 9         dataset = joblib.load(os.path.join(DIR, 'datasets/test_titanic.pkl'))
         10         return dataset
         11 
    
    ~/anaconda3/lib/python3.6/site-packages/joblib/numpy_pickle.py in load(filename, mmap_mode)
        603                     return load_compatibility(fobj)
        604 
    --> 605                 obj = _unpickle(fobj, filename, mmap_mode)
        606 
        607     return obj
    
    ~/anaconda3/lib/python3.6/site-packages/joblib/numpy_pickle.py in _unpickle(fobj, filename, mmap_mode)
        527     obj = None
        528     try:
    --> 529         obj = unpickler.load()
        530         if unpickler.compat_mode:
        531             warnings.warn("The file '%s' has been generated with a "
    
    ~/anaconda3/lib/python3.6/pickle.py in load(self)
       1048                     raise EOFError
       1049                 assert isinstance(key, bytes_types)
    -> 1050                 dispatch[key[0]](self)
       1051         except _Stop as stopinst:
       1052             return stopinst.value
    
    ~/anaconda3/lib/python3.6/site-packages/joblib/numpy_pickle.py in load_build(self)
        340         NDArrayWrapper is used for backward compatibility with joblib <= 0.9.
        341         """
    --> 342         Unpickler.load_build(self)
        343 
        344         # For backward compatibility, we support NDArrayWrapper objects.
    
    ~/anaconda3/lib/python3.6/pickle.py in load_build(self)
       1505         setstate = getattr(inst, "__setstate__", None)
       1506         if setstate is not None:
    -> 1507             setstate(state)
       1508             return
       1509         slotstate = None
    
    ~/anaconda3/lib/python3.6/site-packages/xgboost/core.py in __setstate__(self, state)
       1096             ptr = (ctypes.c_char * len(buf)).from_buffer(buf)
       1097             _check_call(
    -> 1098                 _LIB.XGBoosterUnserializeFromBuffer(handle, ptr, length))
       1099             state['handle'] = handle
       1100         self.__dict__.update(state)
    
    ~/anaconda3/lib/python3.6/site-packages/xgboost/core.py in _check_call(ret)
        187     """
        188     if ret != 0:
    --> 189         raise XGBoostError(py_str(_LIB.XGBGetLastError()))
        190 
        191 
    
    XGBoostError: [18:53:06] /home/sergey/xgboost/src/learner.cc:834: Check failed: header == serialisation_header_: 
    
      If you are loading a serialized model (like pickle in Python) generated by older
      XGBoost, please export the model by calling `Booster.save_model` from that version
      first, then load it back in current version.  There's a simple script for helping
      the process. See:
    
        https://xgboost.readthedocs.io/en/latest/tutorials/saving_model.html
    
      for reference to the script, and more details about differences between saving model and
      serializing.
    
    
    Stack trace:
      [bt] (0) /home/sergey/anaconda3/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x64) [0x7fe81e08c784]
      [bt] (1) /home/sergey/anaconda3/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(xgboost::LearnerIO::Load(dmlc::Stream*)+0x674) [0x7fe81e19f444]
      [bt] (2) /home/sergey/anaconda3/lib/python3.6/site-packages/xgboost/lib/libxgboost.so(XGBoosterUnserializeFromBuffer+0x5e) [0x7fe81e07f61e]
      [bt] (3) /home/sergey/anaconda3/lib/python3.6/lib-dynload/../../libffi.so.6(ffi_call_unix64+0x4c) [0x7fe84c23d630]
      [bt] (4) /home/sergey/anaconda3/lib/python3.6/lib-dynload/../../libffi.so.6(ffi_call+0x22d) [0x7fe84c23cfed]
      [bt] (5) /home/sergey/anaconda3/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so(_ctypes_callproc+0x2ce) [0x7fe84b3c509e]
      [bt] (6) /home/sergey/anaconda3/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so(+0x13ad5) [0x7fe84b3c5ad5]
      [bt] (7) /home/sergey/anaconda3/bin/python -m ipykernel -f /home/sergey/.local/share/jupyter/runtime/kernel-813f0269-7bc5-4ef8-b890-fb9b799698ce.json(_PyObject_FastCallDict+0x8b) [0x559094256f8b]
      [bt] (8) /home/sergey/anaconda3/bin/python -m ipykernel -f /home/sergey/.local/share/jupyter/runtime/kernel-813f0269-7bc5-4ef8-b890-fb9b799698ce.json(+0x1a162e) [0x5590942e562e]
    
    to-do 
    opened by sbushmanov 2
  • PDP for One hot encoded features

    PDP for One hot encoded features

    I have a one hot encoded feature, with the resulting datatype of numeric. When I plot the PDP for this feature, I get a weird plot representing nothing, as below: image

    The plot works fine for other numeric feature columns. Only is not working fine for this OHE feature. Any suggestions?

    opened by swaticolab 2
  • info_plots.actual_plot() got an error

    info_plots.actual_plot() got an error

    when i execute the follow code just like binary_classification tutorial: """ fig, axes, summary_df = info_plots.actual_plot( model=titanic_model, X=titanic_data[titanic_features], feature=['Embarked_C', 'Embarked_S', 'Embarked_Q'], feature_name='embarked' ) """ and got follow error: """ TypeError: predict_proba() argument after ** must be a mapping, not NoneType """ i also tried lgb.LGBMClassifier and lgb raw model on my own data but got same error. is there anyone knows how to fix it?

    opened by fenxouxiaoquan 2
  • pdp_interact_plot dimension reference subplot out of alignment.

    pdp_interact_plot dimension reference subplot out of alignment.

    Here is my code to reproduce the problem:

    from pdpbox import pdp, get_dataset, info_plots
    from sklearn.datasets import load_iris
    from sklearn.ensemble import RandomForestClassifier
    import pandas as pd
    import matplotlib.pyplot as plt
    
    %matplotlib inline
    
    # Setup data
    data = load_iris()
    df = pd.DataFrame(data.data, columns = data.feature_names)
    df.index = data.target
    
    # Train basic model
    estimator = RandomForestClassifier()
    model = estimator.fit(df, df.index)
    
    #  pdp_interactions
    pdp_paid= pdp.pdp_interact(
        model=model, dataset=df, model_features=df.columns, features=df.columns, 
        num_grid_points=[5, 5, 5], 
        percentile_ranges=[None, None, None], 
        n_jobs=4
    )
    
    # plotting
    fig, axes = pdp.pdp_interact_plot(
        pdp_paid, ['petal length (cm)', 'petal width (cm)'], plot_type='grid',x_quantile=True, ncols=2, plot_pdp=True, 
        which_classes=[0, 1, 2]
    )
    

    image

    • pdpbox.version == 0.2.0
    • matplotlib.version == 3.0.2

    The problem is that in the reference docs you have, these subplots that show the dimensional values to the left and above each class plot, they are aligned with the grid of the figure. They seem to be squished. I can probably figure out how to reference to axis or figure directly and correct them but is this expected? Any easy fix?

    Thanks! Great library!

    to-do 
    opened by dyerrington 2
  • Use scikit-learn instead of sklearn

    Use scikit-learn instead of sklearn

    Otherwise it fails to install:

    #36 272.1   × python setup.py egg_info did not run successfully.
    #36 272.1   │ exit code: 1
    #36 272.1   ╰─> [18 lines of output]
    #36 272.1       The 'sklearn' PyPI package is deprecated, use 'scikit-learn'
    #36 272.1       rather than 'sklearn' for pip commands.
    #36 272.1       
    #36 272.1       Here is how to fix this error in the main use cases:
    #36 272.1       - use 'pip install scikit-learn' rather than 'pip install sklearn'
    #36 272.1       - replace 'sklearn' by 'scikit-learn' in your pip requirements files
    #36 272.1         (requirements.txt, setup.py, setup.cfg, Pipfile, etc ...)
    #36 272.1       - if the 'sklearn' package is used by one of your dependencies,
    #36 272.1         it would be great if you take some time to track which package uses
    #36 272.1         'sklearn' instead of 'scikit-learn' and report it to their issue tracker
    #36 272.1       - as a last resort, set the environment variable
    #36 272.1         SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True to avoid this error
    #36 272.1       
    #36 272.1       More information is available at
    #36 272.1       https://github.com/scikit-learn/sklearn-pypi-package
    
    opened by Philmod 2
  • help!

    help!

    Have to admit that your package works really well, I really like the contour plots in it to see the impact of the two attribute features. I would like to ask if it is possible to make a 3D plot to observe the common influence of 3 attribute features?

    opened by Turningl 0
  •  Failed building wheel for matplotlib

    Failed building wheel for matplotlib

    While I'm trying to install pdpbox, it seems a conflict happened to my matplotlib: note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for matplotlib Running setup.py clean for matplotlib Failed to build matplotlib Installing collected packages: matplotlib, sklearn, pdpbox Attempting uninstall: matplotlib Found existing installation: matplotlib 3.5.1 Uninstalling matplotlib-3.5.1: Successfully uninstalled matplotlib-3.5.1 Running setup.py install for matplotlib ... error error: subprocess-exited-with-error

    so why it tried to uninstall the version of matplotlib I've installed? How could I fix the problem?

    opened by hofong428 2
  • Replace the value grid calculation by removing nans

    Replace the value grid calculation by removing nans

    Hello,

    would be good to replace the grid value calculation in pdp_calc_utils.py line 237: value_grids = np.percentile(feature_values, percentile_grids) with value_grids = np.nanpercentile(feature_values, percentile_grids) This will avoid returning an array with nans only if the amount of nans is high in the dataset.

    opened by ciornav 0
Releases(v0.2.1)
  • v0.2.1(Mar 14, 2021)

    • Update tutorials for xgboost==1.3.3
    • Add simple model training in tutorials for better understanding and reproducing
    • Fix charts for matplotlib==3.1.1
    • Remove large .pkl files, use separate files for data (*.csv), info (features, target in *.json), and model (.pkl)
    • SImplify unit tests, removing all model-dependent test cases
    • Fix issues in Tox and Travis CI
    Source code(tar.gz)
    Source code(zip)
Owner
Li Jiangchun
If I don't create, I don't understand.
Li Jiangchun
Automatically visualize your pandas dataframe via a single print! 📊 💡

A Python API for Intelligent Visual Discovery Lux is a Python library that facilitate fast and easy data exploration by automating the visualization a

Lux 4.3k Dec 28, 2022
A curated list of awesome Dash (plotly) resources

Awesome Dash A curated list of awesome Dash (plotly) resources Dash is a productive Python framework for building web applications. Written on top of

Luke Singham 1.7k Dec 26, 2022
🌀❄️🌩️ This repository contains some examples for creating 2d and 3d weather plots using matplotlib and cartopy libraries in python3.

Weather-Plotting 🌀 ❄️ 🌩️ This repository contains some examples for creating 2d and 3d weather plots using matplotlib and cartopy libraries in pytho

Giannis Dravilas 21 Dec 10, 2022
Data Visualizer Web-Application

Viz-It Data Visualizer Web-Application If I ask you where most of the data wrangler looses their time ? It is Data Overview and EDA. Presenting "Viz-I

Sagnik Roy 17 Nov 20, 2022
Open-source demos hosted on Dash Gallery

Dash Sample Apps This repository hosts the code for over 100 open-source Dash apps written in Python or R. They can serve as a starting point for your

Plotly 2.7k Jan 07, 2023
Generate a 3D Skyline in STL format and a OpenSCAD file from Gitlab contributions

Your Gitlab's contributions in a 3D Skyline gitlab-skyline is a Python command to generate a skyline figure from Gitlab contributions as Github did at

Félix Gómez 70 Dec 22, 2022
Rubrix is a free and open-source tool for exploring and iterating on data for artificial intelligence projects.

Open-source tool for exploring, labeling, and monitoring data for AI projects

Recognai 1.5k Jan 07, 2023
Python wrapper for Synoptic Data API. Retrieve data from thousands of mesonet stations and networks. Returns JSON from Synoptic as Pandas DataFrame

☁ Synoptic API for Python (unofficial) The Synoptic Mesonet API (formerly MesoWest) gives you access to real-time and historical surface-based weather

Brian Blaylock 23 Jan 06, 2023
Peloton Stats to Google Sheets with Data Visualization through Seaborn and Plotly

Peloton Stats to Google Sheets with Data Visualization through Seaborn and Plotly Problem: 2 peloton users were looking for a way to track their metri

9 Jul 22, 2022
Typical: Fast, simple, & correct data-validation using Python 3 typing.

typical: Python's Typing Toolkit Introduction Typical is a library devoted to runtime analysis, inference, validation, and enforcement of Python types

Sean 171 Jan 02, 2023
A programming language built on top of Python to easily allow Swahili speakers to get started with programming without ever knowing English

pyswahili A programming language built over Python to easily allow swahili speakers to get started with programming without ever knowing english pyswa

Jordan Kalebu 72 Dec 15, 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
GitHub Stats Visualizations : Transparent

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

YuanYap 7 Apr 05, 2022
Visualization of the World Religion Data dataset by Correlates of War Project.

World Religion Data Visualization Visualization of the World Religion Data dataset by Correlates of War Project. Mostly personal project to famirializ

Emile Bangma 1 Oct 15, 2022
Parse Robinhood 1099 Tax Document from PDF into CSV

Robinhood 1099 Parser This project converts Robinhood Securities 1099 tax document from PDF to CSV file. This tool will be helpful for those who need

Keun Tae (Kevin) Park 52 Jun 10, 2022
Visualization Website by using Dash and Heroku

Visualization Website by using Dash and Heroku You can visit the website https://payroll-expense-analysis.herokuapp.com/ In this project, I am interes

YF Liu 1 Jan 14, 2022
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 05, 2023
Mapomatic - Automatic mapping of compiled circuits to low-noise sub-graphs

mapomatic Automatic mapping of compiled circuits to low-noise sub-graphs Overvie

Qiskit Partners 27 Nov 06, 2022
Ana's Portfolio

Ana's Portfolio ✌️ Welcome to my Portfolio! You will find here different Projects I have worked on (from scratch) 💪 Projects 💻 1️⃣ Hangman game (Mad

Ana Katherine Cortes Sobrino 9 Mar 15, 2022
Graphical visualizer for spectralyze by Lauchmelder23

spectralyze visualizer Graphical visualizer for spectralyze by Lauchmelder23 Install Install matplotlib and ffmpeg. Put ffmpeg.exe in same folder as v

Matthew 1 Dec 21, 2021