{ "info": { "author": "Sebastien Celles", "author_email": "s.celles@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Cython", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4" ], "description": "|Latest Version| |Supported Python versions| |Wheel format| |License|\n|Development Status| |Downloads monthly| |Requirements Status| |Code\nHealth| |Codacy Badge| |Build Status|\n\npandas\\_confusion\n=================\n\nA `Python `__\n`Pandas `__ implementation of `confusion\nmatrix `__.\n\nWORK IN PROGRESS - Use it a your own risk\n\nUsage\n-----\n\nConfusion matrix\n----------------\n\nImport ``ConfusionMatrix``\n\n::\n\n from pandas_confusion import ConfusionMatrix\n\nDefine actual values (``y_actu``) and predicted values (``y_pred``)\n\n::\n\n y_actu = ['rabbit', 'cat', 'rabbit', 'rabbit', 'cat', 'dog', 'dog', 'rabbit', 'rabbit', 'cat', 'dog', 'rabbit']\n y_pred = ['cat', 'cat', 'rabbit', 'dog', 'cat', 'rabbit', 'dog', 'cat', 'rabbit', 'cat', 'rabbit', 'rabbit']\n\nLet's define a (non binary) confusion matrix\n\n::\n\n confusion_matrix = ConfusionMatrix(y_actu, y_pred)\n print(\"Confusion matrix:\\n%s\" % confusion_matrix)\n\nYou can see it\n\n::\n\n Predicted cat dog rabbit __all__\n Actual\n cat 3 0 0 3\n dog 0 1 2 3\n rabbit 2 1 3 6\n __all__ 5 2 5 12\n\nMatplotlib plot of a confusion matrix\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nInside a IPython notebook add this line as first cell\n\n::\n\n %matplotlib inline\n\nYou can plot confusion matrix using:\n\n::\n\n import matplotlib.pyplot as plt\n\n confusion_matrix.plot()\n\nIf you are not using inline mode, you need to use to show confusion\nmatrix plot.\n\n::\n\n plt.show()\n\n.. figure:: screenshots/cm.png\n :alt: confusion\\_matrix\n\n confusion\\_matrix\n\nMatplotlib plot of a normalized confusion matrix\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n confusion_matrix.plot(normalized=True)\n plt.show()\n\n.. figure:: screenshots/cm_norm.png\n :alt: confusion\\_matrix\\_norm\n\n confusion\\_matrix\\_norm\n\nBinary confusion matrix\n~~~~~~~~~~~~~~~~~~~~~~~\n\nImport ``BinaryConfusionMatrix`` and ``Backend``\n\n::\n\n from pandas_confusion import BinaryConfusionMatrix, Backend\n\nDefine actual values (``y_actu``) and predicted values (``y_pred``)\n\n::\n\n y_actu = [ True, True, False, False, False, True, False, True, True,\n False, True, False, False, False, False, False, True, False,\n True, True, True, True, False, False, False, True, False,\n True, False, False, False, False, True, True, False, False,\n False, True, True, True, True, False, False, False, False,\n True, False, False, False, False, False, False, False, False,\n False, True, True, False, True, False, True, True, True,\n False, False, True, False, True, False, False, True, False,\n False, False, False, False, False, False, False, True, False,\n True, True, True, True, False, False, True, False, True,\n True, False, True, False, True, False, False, True, True,\n False, False, True, True, False, False, False, False, False,\n False, True, True, False]\n\n y_pred = [False, False, False, False, False, True, False, False, True,\n False, True, False, False, False, False, False, False, False,\n True, True, True, True, False, False, False, False, False,\n False, False, False, False, False, True, False, False, False,\n False, True, False, False, False, False, False, False, False,\n True, False, False, False, False, False, False, False, False,\n False, True, False, False, False, False, False, False, False,\n False, False, True, False, False, False, False, True, False,\n False, False, False, False, False, False, False, True, False,\n False, True, False, False, False, False, True, False, True,\n True, False, False, False, True, False, False, True, True,\n False, False, True, True, False, False, False, False, False,\n False, True, False, False]\n\nLet's define a binary confusion matrix\n\n::\n\n binary_confusion_matrix = BinaryConfusionMatrix(y_actu, y_pred)\n print(\"Binary confusion matrix:\\n%s\" % binary_confusion_matrix)\n\nIt display as a nicely labeled Pandas DataFrame\n\n::\n\n Binary confusion matrix:\n Predicted False True __all__\n Actual\n False 67 0 67\n True 21 24 45\n __all__ 88 24 112\n\nYou can get useful attributes such as True Positive (TP), True Negative\n(TN) ...\n\n::\n\n print binary_confusion_matrix.TP\n\nMatplotlib plot of a binary confusion matrix\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n binary_confusion_matrix.plot()\n plt.show()\n\n.. figure:: screenshots/binary_cm.png\n :alt: binary\\_confusion\\_matrix\n\n binary\\_confusion\\_matrix\n\nMatplotlib plot of a normalized binary confusion matrix\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n binary_confusion_matrix.plot(normalized=True)\n plt.show()\n\n.. figure:: screenshots/binary_cm_norm.png\n :alt: binary\\_confusion\\_matrix\\_norm\n\n binary\\_confusion\\_matrix\\_norm\n\nSeaborn plot of a binary confusion matrix (ToDo)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n from pandas_confusion import Backend\n binary_confusion_matrix.plot(backend=Backend.Seaborn)\n\nConfusion matrix and class statistics\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nOverall statistics and class statistics of confusion matrix can be\neasily displayed.\n\n::\n\n y_true = [600, 200, 200, 200, 200, 200, 200, 200, 500, 500, 500, 200, 200, 200, 200, 200, 200, 200, 200, 200]\n y_pred = [100, 200, 200, 100, 100, 200, 200, 200, 100, 200, 500, 100, 100, 100, 100, 100, 100, 100, 500, 200]\n cm = ConfusionMatrix(y_true, y_pred)\n cm.print_stats()\n\nYou should get:\n\n::\n\n Confusion Matrix:\n\n Classes 100 200 500 600 __all__\n Actual\n 100 0 0 0 0 0\n 200 9 6 1 0 16\n 500 1 1 1 0 3\n 600 1 0 0 0 1\n __all__ 11 7 2 0 20\n\n\n Overall Statistics:\n\n Accuracy: 0.35\n 95% CI: (0.1539092047845412, 0.59218853453282805)\n No Information Rate: ToDo\n P-Value [Acc > NIR]: 0.978585644357\n Kappa: 0.0780141843972\n Mcnemar's Test P-Value: ToDo\n\n\n Class Statistics:\n\n Classes 100 200 500 600\n Population 20 20 20 20\n Condition positive 0 16 3 1\n Condition negative 20 4 17 19\n Test outcome positive 11 7 2 0\n Test outcome negative 9 13 18 20\n TP: True Positive 0 6 1 0\n TN: True Negative 9 3 16 19\n FP: False Positive 11 1 1 0\n FN: False Negative 0 10 2 1\n TPR: Sensivity NaN 0.375 0.3333333 0\n TNR=SPC: Specificity 0.45 0.75 0.9411765 1\n PPV: Pos Pred Value = Precision 0 0.8571429 0.5 NaN\n NPV: Neg Pred Value 1 0.2307692 0.8888889 0.95\n FPR: False-out 0.55 0.25 0.05882353 0\n FDR: False Discovery Rate 1 0.1428571 0.5 NaN\n FNR: Miss Rate NaN 0.625 0.6666667 1\n ACC: Accuracy 0.45 0.45 0.85 0.95\n F1 score 0 0.5217391 0.4 0\n MCC: Matthews correlation coefficient NaN 0.1048285 0.326732 NaN\n Informedness NaN 0.125 0.2745098 0\n Markedness 0 0.08791209 0.3888889 NaN\n Prevalence 0 0.8 0.15 0.05\n LR+: Positive likelihood ratio NaN 1.5 5.666667 NaN\n LR-: Negative likelihood ratio NaN 0.8333333 0.7083333 1\n DOR: Diagnostic odds ratio NaN 1.8 8 NaN\n FOR: False omission rate 0 0.7692308 0.1111111 0.05\n\nStatistics are also available as an OrderedDict using:\n\n::\n\n cm.stats()\n\nInstall\n-------\n\n::\n\n $ conda install pandas scikit-learn scipy\n\n $ pip install pandas_confusion\n\nDevelopment\n-----------\n\nYou can help to develop this library.\n\nIssues\n~~~~~~\n\nYou can submit issues using\nhttps://github.com/scls19fr/pandas_confusion/issues\n\nClone\n~~~~~\n\nYou can clone repository to try to fix issues yourself using:\n\n::\n\n $ git clone https://github.com/scls19fr/pandas_confusion.git\n\nRun unit tests\n~~~~~~~~~~~~~~\n\nRun all unit tests\n\n::\n\n $ nosetests -s -v\n\nRun a given test\n\n::\n\n $ nosetests -s -v tests/test_pandas_confusion.py:test_pandas_confusion_normalized\n\nInstall development version\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n $ python setup.py install\n\nor\n\n::\n\n $ sudo pip install git+git://github.com/scls19fr/pandas_confusion.git\n\nCollaborating\n~~~~~~~~~~~~~\n\n- Fork repository\n- Create a branch which fix a given issue\n- Submit pull requests\n\nhttps://help.github.com/categories/collaborating/\n\nDone\n----\n\n- Continuous integration (Travis)\n\n- Convert a confusion matrix to a binary confusion matrix\n\n- Python package\n\n- Unit tests (nose)\n\n- Fix missing column and missing row\n\n- Overall statistics: Accuracy, 95% CI, P-Value [Acc > NIR], Kappa\n\n.. |Latest Version| image:: https://img.shields.io/pypi/v/pandas_confusion.svg\n :target: https://pypi.python.org/pypi/pandas_confusion/\n.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/pandas_confusion.svg\n :target: https://pypi.python.org/pypi/pandas_confusion/\n.. |Wheel format| image:: https://img.shields.io/pypi/wheel/pandas_confusion.svg\n :target: https://pypi.python.org/pypi/pandas_confusion/\n.. |License| image:: https://img.shields.io/pypi/l/pandas_confusion.svg\n :target: https://pypi.python.org/pypi/pandas_confusion/\n.. |Development Status| image:: https://img.shields.io/pypi/status/pandas_confusion.svg\n :target: https://pypi.python.org/pypi/pandas_confusion/\n.. |Downloads monthly| image:: https://img.shields.io/pypi/dm/pandas_confusion.svg\n :target: https://pypi.python.org/pypi/pandas_confusion/\n.. |Requirements Status| image:: https://requires.io/github/scls19fr/pandas_confusion/requirements.svg?branch=master\n :target: https://requires.io/github/scls19fr/pandas_confusion/requirements/?branch=master\n.. |Code Health| image:: https://landscape.io/github/scls19fr/pandas_confusion/master/landscape.svg?style=flat\n :target: https://landscape.io/github/scls19fr/pandas_confusion/master\n.. |Codacy Badge| image:: https://www.codacy.com/project/badge/87be7082d9504db59d397b5738dbf133\n :target: https://www.codacy.com/app/s-celles/pandas_confusion\n.. |Build Status| image:: https://travis-ci.org/scls19fr/pandas_confusion.svg\n :target: https://travis-ci.org/scls19fr/pandas_confusion", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/scls19fr/pandas_confusion", "keywords": "python pandas matrix confusion plot matplotlib seaborn machine learning", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "pandas_confusion", "package_url": "https://pypi.org/project/pandas_confusion/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/pandas_confusion/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/scls19fr/pandas_confusion" }, "release_url": "https://pypi.org/project/pandas_confusion/0.0.6/", "requires_dist": null, "requires_python": null, "summary": "Pandas matrix confusion with plot features (matplotlib, seaborn...)", "version": "0.0.6" }, "last_serial": 2401295, "releases": { "0.0.1": [], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a3098434a3dd6bac72323f5afb1ded87", "sha256": "37278856dfdf2067c13b3b3666d29f9b56dddaf03a17636fec6ef954a090f2f4" }, "downloads": -1, "filename": "pandas_confusion-0.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "a3098434a3dd6bac72323f5afb1ded87", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16485, "upload_time": "2015-05-23T20:57:26", "url": "https://files.pythonhosted.org/packages/11/1a/1c9c79f20e2e2a735c563ec69a7bb521c26df6dd13927023b8437acdc10f/pandas_confusion-0.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a55d2015056ad77770f346cb058c0efb", "sha256": "99736f44df1f93e91f86bb10d8cecbbaa0cc02c72a5adcfe734a1ba72be2292c" }, "downloads": -1, "filename": "pandas_confusion-0.0.2.tar.gz", "has_sig": false, "md5_digest": "a55d2015056ad77770f346cb058c0efb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12129, "upload_time": "2015-05-23T20:57:22", "url": "https://files.pythonhosted.org/packages/8a/83/6216a22215198dda10b59894252913040387d416f01ef011ff30cac36afc/pandas_confusion-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "19249acda3a97cd0fb025ceb7879469c", "sha256": "432c1c2561943f88717ca5172df4ef94c24d7b4d00ae88a7545bc5c052fa713b" }, "downloads": -1, "filename": "pandas_confusion-0.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "19249acda3a97cd0fb025ceb7879469c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17289, "upload_time": "2015-05-29T11:48:55", "url": "https://files.pythonhosted.org/packages/3b/dc/50c3297f97d333f4ba4b3f15acc96d8bc2294c2f9577901c4806e0121158/pandas_confusion-0.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f352940544c0d7f32a441334fcec4b0e", "sha256": "3531308c261d13f616c727e9e6fe5e49b6438d81af012489506918eb8c4934cf" }, "downloads": -1, "filename": "pandas_confusion-0.0.3.tar.gz", "has_sig": false, "md5_digest": "f352940544c0d7f32a441334fcec4b0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14048, "upload_time": "2015-05-29T11:48:50", "url": "https://files.pythonhosted.org/packages/07/1c/8c4d98028092b88429954ff528c2dfa0cf53f68cee9bba5b24193151865f/pandas_confusion-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "5a290c31cad0635dc611225c7f673ff2", "sha256": "ac50b204a99b9bb5288d420fbb0717f2b049125d6ecef6075c14e14a83a3e8d2" }, "downloads": -1, "filename": "pandas_confusion-0.0.4.tar.gz", "has_sig": false, "md5_digest": "5a290c31cad0635dc611225c7f673ff2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14076, "upload_time": "2015-07-31T15:14:33", "url": "https://files.pythonhosted.org/packages/11/46/5b7778c3925111b13bcee1b8023fbd264b56457608f592ba82f087e4e747/pandas_confusion-0.0.4.tar.gz" } ], "0.0.5": [], "0.0.6": [ { "comment_text": "", "digests": { "md5": "be7ab7c1b7e2e0aa0a9b81edeb5e3239", "sha256": "5b5e03191fc7207a74175436f85b8402480be6b7b627429a034767e5ba9f5206" }, "downloads": -1, "filename": "pandas_confusion-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be7ab7c1b7e2e0aa0a9b81edeb5e3239", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 16908, "upload_time": "2015-11-17T18:20:33", "url": "https://files.pythonhosted.org/packages/00/82/83c2d82e76280d4f27e2bc56cd27e2fce759f77fb505ecf681a580965ba4/pandas_confusion-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1879f10935b80eb1e4c03a07ed5547e", "sha256": "676e7b4f7e77d014352a21026ec8d1f42f397be9313e5f76fd62b87e2f509b83" }, "downloads": -1, "filename": "pandas_confusion-0.0.6.tar.gz", "has_sig": false, "md5_digest": "b1879f10935b80eb1e4c03a07ed5547e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13859, "upload_time": "2015-11-17T18:20:22", "url": "https://files.pythonhosted.org/packages/6c/0a/663e01667aa7959df15e64eab39a0b3608575de349c678894f0416530e7b/pandas_confusion-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "be7ab7c1b7e2e0aa0a9b81edeb5e3239", "sha256": "5b5e03191fc7207a74175436f85b8402480be6b7b627429a034767e5ba9f5206" }, "downloads": -1, "filename": "pandas_confusion-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be7ab7c1b7e2e0aa0a9b81edeb5e3239", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 16908, "upload_time": "2015-11-17T18:20:33", "url": "https://files.pythonhosted.org/packages/00/82/83c2d82e76280d4f27e2bc56cd27e2fce759f77fb505ecf681a580965ba4/pandas_confusion-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1879f10935b80eb1e4c03a07ed5547e", "sha256": "676e7b4f7e77d014352a21026ec8d1f42f397be9313e5f76fd62b87e2f509b83" }, "downloads": -1, "filename": "pandas_confusion-0.0.6.tar.gz", "has_sig": false, "md5_digest": "b1879f10935b80eb1e4c03a07ed5547e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13859, "upload_time": "2015-11-17T18:20:22", "url": "https://files.pythonhosted.org/packages/6c/0a/663e01667aa7959df15e64eab39a0b3608575de349c678894f0416530e7b/pandas_confusion-0.0.6.tar.gz" } ] }