[
  {
    "path": ".gitattributes",
    "content": "phik/notebooks/* linguist-vendored\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "---\nversion: 2\nupdates:\n  - package-ecosystem: pip\n    directory: /\n    # Check for updates once a day\n    schedule:\n      interval: daily\n    allow:\n      - dependency-type: all\n  - package-ecosystem: github-actions\n    directory: /\n    # Check for updates once a week\n    schedule:\n      interval: weekly\n"
  },
  {
    "path": ".github/workflows/test_matrix.yml",
    "content": "name: Test Matrix\n\non:\n  workflow_dispatch:\n  pull_request:\n  push:\n    branches:\n      - master\n\njobs:\n  build:\n    name: ${{ matrix.platform }} Python ${{ matrix.python-version }}\n    strategy:\n      fail-fast: false\n      matrix:\n        platform: [windows-latest, macos-latest, ubuntu-latest]\n        python-version: [\"3.9\", \"3.10\", \"3.11\", \"3.12\"]\n\n    runs-on: ${{ matrix.platform }}\n\n    steps:\n    - uses: actions/checkout@v6\n      with:\n        submodules: true\n\n    - uses: actions/setup-python@v6\n      with:\n        python-version: ${{ matrix.python-version }}\n\n    - name: Add requirements\n      run: |\n        python -m pip install --upgrade pip wheel\n\n    - name: Build and install\n      run: pip install --verbose \".[test]\"\n\n    - name: Unit test\n      run: |\n        cd tests\n        pytest test_phik.py -v -W ignore::DeprecationWarning\n\n    - name: Integration test\n      run: |\n        cd tests\n        pytest integration -v -W ignore::DeprecationWarning\n"
  },
  {
    "path": ".github/workflows/tests.yml",
    "content": "name: Test\n\non: push\njobs:\n  tests:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v6\n    - name: Set up Python\n      uses: actions/setup-python@v6\n      with:\n        python-version: 3.9\n    - name: Install dependencies\n      run: |\n        python -m pip install --upgrade pip\n        pip install . -v\n        pip install \"pytest>=4.0.2\" \"pytest-pylint>=0.13.0\"\n    - name: Test with pytest\n      run: |\n        cd tests\n        pytest test_phik.py -W ignore::DeprecationWarning\n"
  },
  {
    "path": ".github/workflows/valgrind.yml",
    "content": "name: Valgrind\n\non:\n  pull_request:\n    branches:\n      - master\n  workflow_dispatch:\n\ndefaults:\n  run:\n    shell: bash\n\njobs:\n  pre_job:\n    # continue-on-error: true # Uncomment once integration is finished\n    runs-on: ubuntu-latest\n    # Map a step output to a job output\n    outputs:\n      should_skip: ${{ steps.skip_check.outputs.should_skip }}\n    steps:\n      - id: skip_check\n        uses: fkirc/skip-duplicate-actions@master\n        with:\n          # All of these options are optional, so you can remove them if you are happy with the defaults\n          cancel_others: 'true'\n          do_not_skip: '[\"pull_request\", \"workflow_dispatch\", \"schedule\"]'\n  build:\n    name: Valgrind\n    needs: pre_job\n    if: ${{ needs.pre_job.outputs.should_skip != 'true' }}\n    runs-on: ubuntu-latest\n\n    steps:\n      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it\n      - uses: actions/checkout@v6\n        with:\n          submodules: false\n\n      - uses: actions/setup-python@v6\n        with:\n          python-version: '3.10'\n\n      - name: Install dependencies on ubuntu\n        run: |\n          sudo apt-get update\n          sudo apt-get install -y valgrind\n\n      - name: Install python packages\n        run: |\n          python -m pip install --upgrade pip pytest\n          \n      - name: Install\n        run: |\n          # temp fix for Valgrind issue with later versions\n          pip install scipy==1.9.1\n          CMAKE_ARGS=\"-DCMAKE_BUILD_TYPE=Debug\" pip install . -v\n\n      - name: Test\n        run: |\n          cd tests\n          PYTHONMALLOC=malloc valgrind --leak-check=yes --track-origins=yes --log-file=valgrind-log.txt python -m pytest test_phik.py -W ignore::DeprecationWarning\n"
  },
  {
    "path": ".github/workflows/wheels.yml",
    "content": "name: Wheels\n\non:\n  workflow_dispatch:\n  pull_request:\n  push:\n    branches:\n     - master\n  release:\n    types:\n      - published\n\njobs:\n  make_sdist:\n    name: Make SDist\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v6\n\n    - name: Build SDist\n      run: pipx run build --sdist\n\n    - uses: actions/upload-artifact@v7\n      with:\n        name: artifact-sdist\n        path: dist/*.tar.gz\n\n\n  build_wheels:\n    name: Wheels on ${{ matrix.os }}\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ubuntu-latest, windows-latest, macos-latest]\n\n    steps:\n    - uses: actions/checkout@v6\n      with:\n        submodules: true\n\n    - uses: actions/setup-python@v6\n      with:\n        python-version: \"3.12\"\n\n    - uses: pypa/cibuildwheel@v3.3.1\n      env:\n        CIBW_ENVIRONMENT: MACOSX_DEPLOYMENT_TARGET=10.13\n        CIBW_BUILD: 'cp38-* cp39-* cp310-* cp311-* cp312-* cp313-* cp314-*'\n        CIBW_TEST_EXTRAS: test\n        CIBW_TEST_COMMAND: pytest {project}/tests/test_phik.py -W ignore::DeprecationWarning\n        CIBW_ARCHS: \"auto64\"\n        CIBW_ARCHS_MACOS: \"x86_64 arm64\"\n        # Skip 32-bit builds\n        CIBW_SKIP: \"*-win32 *-manylinux_i686 *-musllinux_x86_64\"\n\n    - name: Show files\n      run: ls -lh wheelhouse\n      shell: bash\n\n    - name: Verify clean directory\n      run: git diff --exit-code\n      shell: bash\n\n    - name: Upload wheels\n      uses: actions/upload-artifact@v7\n      with:\n        name: artifact-${{ matrix.os }}\n        path: wheelhouse/*.whl\n\n  upload_all:\n    needs: [build_wheels, make_sdist]\n    runs-on: ubuntu-latest\n    if: github.event_name == 'release' && github.event.action == 'published'\n    steps:\n    - uses: actions/download-artifact@v8\n      with:\n        pattern: artifact-*\n        merge-multiple: true\n        path: dist\n\n    - uses: pypa/gh-action-pypi-publish@release/v1\n      with:\n        user: __token__\n        password: ${{ secrets.pypi_password }}\n"
  },
  {
    "path": ".gitignore",
    "content": "*.so\n*egg-info*\n"
  },
  {
    "path": ".mbuild.sh",
    "content": "cmake -S . -G Ninja -B build \\\n    -DCMAKE_BUILD_TYPE=Release \\\n    -DSKBUILD_PROJECT_NAME=\"phik\" \\\n    -DSKBUILD_PROJECT_VERSION=\"0.12.4\" \\\n    -DPHIK_MBUILD=ON \\\n    -DPython3_EXECUTABLE=$(python3 -c 'import sys; print(sys.executable)') \\\n    -Dpybind11_DIR=$(python3 -c 'import pybind11; print(pybind11.get_cmake_dir())') \\\n    -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n\ncmake --build build --target install --config Release --parallel 4\n"
  },
  {
    "path": ".readthedocs.yml",
    "content": "# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details\n# .readthedocs.yml\n\n# Required\nversion: 2\n\n# Set the version of Python\nbuild:\n  os: ubuntu-22.04\n  tools:\n    python: \"3.10\"\n\npython:\n  install:\n    - method: pip\n      path: .\n      extra_requirements:\n        - doc\n"
  },
  {
    "path": "CHANGES.rst",
    "content": "=============\nRelease notes\n=============\n\nVersion 0.12.5, Jul 2025\n------------------------\n\n- FIX: scipy 1.16.0 no longer supports mvn, code now migrated to qmvn.\n  https://github.com/KaveIO/PhiK/issues/101\n  https://github.com/KaveIO/PhiK/pull/102\n- Drop support for Python 3.8, has reached end of life.\n\nVersion 0.12.4, Jan 2024\n------------------------\n\n- Add support for Python 3.12.\n- ENH: added plotting kwargs to correlation_report function.\n  https://github.com/KaveIO/PhiK/issues/58\n- FIX: fix of bin edge values they are rounded with 1e-14\n  https://github.com/KaveIO/PhiK/issues/60\n- FIX: numpy random multinomial requires integer number of samples (for nixOS)\n  https://github.com/KaveIO/PhiK/issues/73\n- FIX: pandas deprecation warning\n  https://github.com/KaveIO/PhiK/pull/74\n- Drop support for Python 3.7, has reached end of life.\n\nVersion 0.12.3, Dec 2022\n------------------------\n\n- Add support for Python 3.11\n\nVersion 0.12.2, Mar 2022\n------------------------\n\n- Fix missing setup.py and pyproject.toml in source distribution\n- Support wheels ARM MacOS (Apple silicone)\n\nVersion 0.12.1, Mar 2022\n------------------------\n\n- Two fixes to make calculation of global phik robust: global phik capped in range [0, 1],\n  and check for successful correlation matrix inversion.\n- Migration to to scikit-build 0.13.1.\n- Support wheels for Python 3.10.\n\n\nVersion 0.12.0, July 2021\n-------------------------\n\nC++ Extension\n~~~~~~~~~~~~~\n\nPhi_K contains an optional C++ extension to compute the significance matrix using the `hypergeometric` method\n(also called the`Patefield` method).\n\nNote that the PyPi distributed wheels contain a pre-build extension for Linux, MacOS and Windows.\n\nA manual (pip) setup will attempt to build and install the extension, if it fails it will install without the extension.\nIf so, using the `hypergeometric` method without the extension will trigger a\nNotImplementedError.\n\nCompiler requirements through Pybind11:\n\n- Clang/LLVM 3.3 or newer (for Apple Xcode's clang, this is 5.0.0 or newer)\n- GCC 4.8 or newer\n- Microsoft Visual Studio 2015 Update 3 or newer\n- Intel classic C++ compiler 18 or newer (ICC 20.2 tested in CI)\n- Cygwin/GCC (previously tested on 2.5.1)\n- NVCC (CUDA 11.0 tested in CI)\n- NVIDIA PGI (20.9 tested in CI)\n\n\nOther\n~~~~~\n\n* You can now manually set the number of parallel jobs in the evaluation of Phi_K or its statistical significance\n  (when using MC simulations). For example, to use 4 parallel jobs do:\n\n  .. code-block:: python\n\n    df.phik_matrix(njobs = 4)\n    df.significance_matrix(njobs = 4)\n\n  The default value is -1, in which case all available cores are used. When using ``njobs=1`` no parallel processing\n  is applied.\n\n* Phi_K can now be calculated with an independent expectation histogram:\n\n  .. code-block:: python\n\n    from phik.phik import phik_from_hist2d\n\n    cols = [\"mileage\", \"car_size\"]\n    interval_cols = [\"mileage\"]\n\n    observed = df1[[\"feature1\", \"feature2\"]].hist2d()\n    expected = df2[[\"feature1\", \"feature2\"]].hist2d()\n\n    phik_value = phik_from_hist2d(observed=observed, expected=expected)\n\n  The expected histogram is taken to be (relatively) large in number of counts\n  compared with the observed histogram.\n\n  Or can compare two (pre-binned) datasets against each other directly. Again the expected dataset\n  is assumed to be relatively large:\n\n  .. code-block:: python\n\n    from phik.phik import phik_observed_vs_expected_from_rebinned_df\n\n    phik_matrix = phik_observed_vs_expected_from_rebinned_df(df1_binned, df2_binned)\n\n* Added links in the readme to the basic and advanced Phi_K tutorials on google colab.\n* Migrated the spark example Phi_K notebook from popmon to directly using histogrammar for histogram creation.\n\n\n\n\nOlder versions\n--------------\n\n* Please see documentation for full details: https://phik.readthedocs.io\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.17...3.27)\n\n# Scikit-build-core sets these values for you, or you can just hard-code the\n# name and version.\nproject(\n  ${SKBUILD_PROJECT_NAME}\n  VERSION ${SKBUILD_PROJECT_VERSION}\n  DESCRIPTION \"C++ bindings for simulation RXC tables\"\n  LANGUAGES CXX)\n\nset(CMAKE_CXX_STANDARD 14)\n# Define CMAKE_INSTALL_xxx: LIBDIR, INCLUDEDIR\ninclude(GNUInstallDirs)\n\nfind_package(Python REQUIRED COMPONENTS Interpreter Development.Module)\nfind_package(pybind11 CONFIG REQUIRED)\nset(SUBPATH ${PROJECT_SOURCE_DIR}/phik/simcore/)\n\n# ##############################################################################\n# build ASA159 library                                #\n# ##############################################################################\nif(CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\")\n  set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -fPIC\")\nendif()\n\nadd_library(_asa159 OBJECT ${SUBPATH}/asa159.cpp)\n\ntarget_include_directories(_asa159 PRIVATE ${SUBPATH})\n# ##############################################################################\n# EXECUTABLE                                  #\n# ##############################################################################\npybind11_add_module(_phik_simulation_core MODULE ${SUBPATH}/bindings.cpp\n                    ${SUBPATH}/simulation.hpp $<TARGET_OBJECTS:_asa159>)\n\ntarget_compile_definitions(_phik_simulation_core\n                           PRIVATE VERSION_INFO=${SKBUILD_PROJECT_VERSION})\n\ntarget_include_directories(\n  _phik_simulation_core PUBLIC $<INSTALL_INTERFACE:include>\n                               $<BUILD_INTERFACE:${SUBPATH}>)\nif(PHIK_MBUILD)\n  set(CMAKE_INSTALL_PREFIX \"${PROJECT_SOURCE_DIR}\")\nendif()\n\ninstall(TARGETS _phik_simulation_core LIBRARY DESTINATION \"${PROJECT_NAME}/lib\")\n\n# Quiet a warning, since this project is only valid with SKBUILD\nset(ignoreMe \"${SKBUILD}\")\n"
  },
  {
    "path": "LICENSE",
    "content": "##############################################################################\n#\n# Copyright 2016 KPMG Advisory N.V. (unless otherwise stated)\n#\n#   Licensed under the Apache License, Version 2.0 (the \"License\");\n#   you may not use this file except in compliance with the License.\n#   You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#   Unless required by applicable law or agreed to in writing, software\n#   distributed under the License is distributed on an \"AS IS\" BASIS,\n#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#   See the License for the specific language governing permissions and\n#   limitations under the License.\n#\n##############################################################################\n"
  },
  {
    "path": "NOTICE",
    "content": "################################################################################################\n#\n# NOTICE: pass-through licensing of bundled components\n#\n# PhiK gathers together a toolkit of pre-existing third-party open-source software components.\n# These software components are governed by their own licenses which PhiK does not\n# modify or supersede, please consult the originating authors. These components altogether\n# have a mixture of the following licenses: Apache 2.0, GPL 2.0, AGPL and LGPL, ZPL, MIT, PSF,\n# BSD and some BSD-like simple licenses.\n# For scipy and numpy see: http://docs.continuum.io/anaconda/licenses.html .\n#\n# Although we have examined the licenses to verify acceptance of commercial and non-commercial\n# use, please see and consult the original licenses or authors.\n#\n################################################################################################\n"
  },
  {
    "path": "README.rst",
    "content": "==========================\nPhi_K Correlation Constant\n==========================\n\n* Version: 0.12.5. Released: Jul 2025\n* Release notes: https://github.com/KaveIO/PhiK/blob/master/CHANGES.rst\n* Repository: https://github.com/kaveio/phik\n* Documentation: https://phik.readthedocs.io\n* Publication: `[offical] <https://www.sciencedirect.com/science/article/abs/pii/S0167947320301341>`_ `[arxiv pre-print] <https://arxiv.org/abs/1811.11440>`_\n\nPhi_K is a practical correlation constant that works consistently between categorical, ordinal and interval variables.\nIt is based on several refinements to Pearson's hypothesis test of independence of two variables. Essentially, the\ncontingency test statistic of two variables is interpreted as if coming from a rotated bi-variate normal distribution,\nwhere the tilt is interpreted as Phi_K.\n\nThe combined features of Phi_K form an advantage over existing coefficients. First, it works consistently between categorical, ordinal and interval variables.\nSecond, it captures non-linear dependency. Third, it reverts to the Pearson correlation coefficient in case of a bi-variate normal input distribution.\nThese are useful features when studying the correlation matrix of variables with mixed types.\n\nFor details on the methodology behind the calculations, please see our publication. Emphasis is paid to the proper evaluation of statistical significance of correlations and to the interpretation of variable relationships\nin a contingency table, in particular in case of low statistics samples.\nThe presented algorithms are easy to use and available through this public Python library.\n\nExample notebooks\n=================\n\n.. list-table::\n   :widths: 60 40\n   :header-rows: 1\n\n   * - Static link\n     - Google Colab link\n   * - `basic tutorial <https://nbviewer.jupyter.org/github/KaveIO/PhiK/blob/master/phik/notebooks/phik_tutorial_basic.ipynb>`_\n     - `basic on colab <https://colab.research.google.com/github/KaveIO/PhiK/blob/master/phik/notebooks/phik_tutorial_basic.ipynb>`_\n   * - `advanced tutorial (detailed configuration) <https://nbviewer.jupyter.org/github/KaveIO/PhiK/blob/master/phik/notebooks/phik_tutorial_advanced.ipynb>`_\n     - `advanced on colab <https://colab.research.google.com/github/KaveIO/PhiK/blob/master/phik/notebooks/phik_tutorial_advanced.ipynb>`_\n   * - `spark tutorial <https://nbviewer.jupyter.org/github/KaveIO/PhiK/blob/master/phik/notebooks/phik_tutorial_spark.ipynb>`_\n     - no spark available\n\nDocumentation\n=============\n\nThe entire Phi_K documentation including tutorials can be found at `read-the-docs <https://phik.readthedocs.io>`_.\nSee the tutorials for detailed examples on how to run the code with pandas. We also have one example on how\ncalculate the Phi_K correlation matrix for a spark dataframe.\n\nCheck it out\n============\n\nThe Phi_K library requires Python >= 3.8 and is pip friendly. To get started, simply do:\n\n.. code-block:: bash\n\n  $ pip install phik\n\nor check out the code from out GitHub repository:\n\n.. code-block:: bash\n\n  $ git clone https://github.com/KaveIO/PhiK.git\n  $ pip install -e PhiK/\n\nwhere in this example the code is installed in edit mode (option -e).\n\nYou can now use the package in Python with:\n\n.. code-block:: python\n\n  import phik\n\n**Congratulations, you are now ready to use the PhiK correlation analyzer library!**\n\n\nQuick run\n=========\n\nAs a quick example, you can do:\n\n.. code-block:: python\n\n  import pandas as pd\n  import phik\n  from phik import resources, report\n\n  # open fake car insurance data\n  df = pd.read_csv( resources.fixture('fake_insurance_data.csv.gz') )\n  df.head()\n\n  # Pearson's correlation matrix between numeric variables (pandas functionality)\n  df.corr()\n\n  # get the phi_k correlation matrix between all variables\n  df.phik_matrix()\n\n  # get global correlations based on phi_k correlation matrix\n  df.global_phik()\n\n  # get the significance matrix (expressed as one-sided Z)\n  # of the hypothesis test of each variable-pair dependency\n  df.significance_matrix()\n\n  # contingency table of two columns\n  cols = ['mileage','car_size']\n  df[cols].hist2d()\n\n  # normalized residuals of contingency test applied to cols\n  df[cols].outlier_significance_matrix()\n\n  # show the normalized residuals of each variable-pair\n  df.outlier_significance_matrices()\n\n  # generate a phik correlation report and save as test.pdf\n  report.correlation_report(df, pdf_file_name='test.pdf')\n\n\nFor all available examples, please see the `tutorials <https://phik.readthedocs.io/en/latest/tutorials.html>`_ at read-the-docs.\n\n\nContact and support\n===================\n\n* Issues and Ideas: https://github.com/kaveio/phik/issues\n\nPlease note that support is (only) provided on a best-effort basis.\n"
  },
  {
    "path": "docs/Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nPAPER         =\nBUILDDIR      = build\n\n# User-friendly check for sphinx-build\nifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)\n$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)\nendif\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source\n\n.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext\n\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  applehelp  to make an Apple Help Book\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  latexpdfja to make LaTeX files and run them through platex/dvipdfmx\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  texinfo    to make Texinfo files\"\n\t@echo \"  info       to make Texinfo files and run them through makeinfo\"\n\t@echo \"  gettext    to make PO message catalogs\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  xml        to make Docutils-native XML files\"\n\t@echo \"  pseudoxml  to make pseudoxml-XML files for display purposes\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\t@echo \"  coverage   to run coverage check of the documentation (if enabled)\"\n\nclean:\n\trm -rf $(BUILDDIR)/*\n\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/DecisionEngine.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/DecisionEngine.qhc\"\n\napplehelp:\n\t$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp\n\t@echo\n\t@echo \"Build finished. The help book is in $(BUILDDIR)/applehelp.\"\n\t@echo \"N.B. You won't be able to view it unless you put it in\" \\\n\t      \"~/Library/Documentation/Help or install it in your application\" \\\n\t      \"bundle.\"\n\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/DecisionEngine\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/DecisionEngine\"\n\t@echo \"# devhelp\"\n\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\nlatexpdfja:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through platex and dvipdfmx...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\ntexinfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo\n\t@echo \"Build finished. The Texinfo files are in $(BUILDDIR)/texinfo.\"\n\t@echo \"Run \\`make' in that directory to run these through makeinfo\" \\\n\t      \"(use \\`make info' here to do that automatically).\"\n\ninfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo \"Running Texinfo files through makeinfo...\"\n\tmake -C $(BUILDDIR)/texinfo info\n\t@echo \"makeinfo finished; the Info files are in $(BUILDDIR)/texinfo.\"\n\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t@echo\n\t@echo \"Build finished. The message catalogs are in $(BUILDDIR)/locale.\"\n\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n\ncoverage:\n\t$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage\n\t@echo \"Testing of coverage in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/coverage/python.txt.\"\n\nxml:\n\t$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml\n\t@echo\n\t@echo \"Build finished. The XML files are in $(BUILDDIR)/xml.\"\n\npseudoxml:\n\t$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml\n\t@echo\n\t@echo \"Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml.\"\n"
  },
  {
    "path": "docs/README.rst",
    "content": "Generating Documentation with Sphinx\n====================================\n\nThis README is for generating and writing documentation using Sphinx.\nOn the repository there should already be the auto-generated files\nalong with the regular documentation.\n\nInstalling Sphinx\n-----------------\n\nFirst install Sphinx. Go to http://www.sphinx-doc.org/en/stable/ or run\n\n::\n\n    pip install -U Sphinx\n    pip install -U sphinx-rtd-theme\n    conda install -c conda-forge nbsphinx\n\nThe eskapade/docs folder has the structure of a Sphinx project.\nHowever, if you want to make a new Sphinx project run:\n\n::\n\n    sphinx-quickstart\n\nIt quickly generates a conf.py file which contains your configuration\nfor your sphinx build.\n\nUpdate the HTML docs\n--------------------\n\nNow we want Sphinx to autogenerate from docstrings and other\ndocumentation in the code base. Luckily Sphinx has the apidoc\nfunctionality. This goes through a path, finds all the python files and\ndepending on your arguments, parses certain parts of the code\n(docstring, hidden classes, etc.).\n\n**First make sure your environment it setup properly. Python must be\nable to import all modules otherwise it will not work!**\n\nFrom the the root of the repository:\n\n::\n\n    $ source setup.sh\n\nTo run the autogeneration of the documentation type in /docs/:\n\n::\n\n    ./autogenerate.sh\n\nto scan the pyfiles and generate \\*.rst files with the documentation.\nThe script itself contains the usage of apidoc.\n\nNow to make the actual documentation files run:\n\n::\n\n    make clean\n\nto clean up the old make of sphinx and run:\n\n::\n\n    make html\n\nto make the new html build. It will be stored in (your config can adjust\nthis, but the default is:) docs/build/html/ The index.html is the\nstarting page. Open this file to see the result.\n\nMounting a different repository to vagrant\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWhen you want to develop code that is not part of the repository that \nyour vagrant is in, you can mount it seperately. This is done by changing\nthe Vagrantfile, by changing the ``#mount`` line to the path of the repository\nthat you want to mount:\n\n::\n\n  config.vm.synced_folder \"<PATH_TO_REPOSITORY>\", \"<LOCATION_TO_MOUNT>\", id: \"esrepo\"\n    \nwhere the location to mount is e.g. /opt/eskapade.\n\nWhat is an .rst file?\n~~~~~~~~~~~~~~~~~~~~~\n\nR(e)ST is the format that Sphinx uses it stands for ReSTructured\n(http://docutils.sourceforge.net/docs/user/rst/quickref.html). It looks\nfor other RST files to import, see index.rst to see how the **toctree**\nrefers to other files.\n"
  },
  {
    "path": "docs/autogenerate.sh",
    "content": "#!/bin/bash\n\n# (re)create required directories\nrm -rf autogen\nmkdir -p source/_static autogen\n\n# auto-generate code documentation\nsphinx-apidoc -f -H PhiK -o autogen ../python/phik \nmv autogen/modules.rst autogen/phik_index.rst\nmv autogen/* source/ \n\n# remove auto-gen directory\nrm -rf autogen\n"
  },
  {
    "path": "docs/source/code.rst",
    "content": "API Documentation\n=================\n\n.. toctree::\n   :maxdepth: 2\n\n   phik_index\n"
  },
  {
    "path": "docs/source/conf.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# PhiK documentation build configuration file for sphinx.\n#\n#\n\nimport os\n#from unittest.mock import MagicMock\n\nimport phik\n\n\n# Classes that use non-python modules are not always available in the\n# RTD environment. By mocking them we can still import these classes\n# in the code and RTD can subsequently go through the code and get \n# the docstrings.\n\n#class Mock(MagicMock):\n#    @classmethod\n#    def __getattr__(cls, name):\n#        return MagicMock()\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n# sys.path.insert(0, os.path.abspath(''))\n\n# -- General configuration ------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n# needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.autodoc',\n    'sphinx.ext.mathjax',\n    'sphinx.ext.ifconfig',\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix(es) of source filenames.\n# You can specify multiple suffix as a list of string:\n# source_suffix = ['.rst', '.md']\nsource_suffix = '.rst'\n\n# The encoding of source files.\n# source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = 'Phi_K correlation library'\ncopyright = '2018, KPMG Advisory N.V.'\nauthor = 'KPMG Advanced Analytics & Big Data team'\nversion = phik.__version__\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#\n# This is also used if you do content translation via gettext catalogs.\n# Usually you set \"language\" from the command line for these cases.\nlanguage = 'en'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = ['*test*', 'phik.tutorials.*']\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# If true, `todo` and `todoList` produce output, else they produce nothing.\ntodo_include_todos = False\n\n# -- Options for HTML output ----------------------------------------------\n\n# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org\non_rtd = os.environ.get('READTHEDOCS', None) == 'True'\n\nif not on_rtd:\n    import sphinx_rtd_theme\n\n    html_theme = \"sphinx_rtd_theme\"\n    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]\n# otherwise, readthedocs.org uses their theme by default, so no need to specify it\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# If false, no index is generated.\nhtml_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n# html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\nhtml_show_sourcelink = True\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n# html_show_sphinx = True\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\nhtml_show_copyright = True\n\n# Language to be used for generating the HTML full-text search index.\n# Sphinx supports the following languages:\n#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'\n#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'\nhtml_search_language = 'en'\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'PhiKdoc'\n\n# -- Options for LaTeX output ---------------------------------------------\n\nlatex_elements = {\n    # The paper size ('letterpaper' or 'a4paper').\n    # 'papersize': 'letterpaper',\n\n    # The font size ('10pt', '11pt' or '12pt').\n    # 'pointsize': '10pt',\n\n    # Additional stuff for the LaTeX preamble.\n    # 'preamble': '',\n\n    # Latex figure (float) alignment\n    # 'figure_align': 'htbp',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n    (master_doc, 'PhiK.tex', 'PhiK Documentation',\n     'KPMG Advanced Analytics & Big Data team', 'manual'),\n]\n\n# -- Options for manual page output ---------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    (master_doc, 'phik', 'PhiK Documentation',\n     [author], 1)\n]\n\n# -- Options for Texinfo output -------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n    (master_doc, 'PhiK', 'PhiK Documentation',\n     author, 'PhiK', 'One line description of project.',\n     'Miscellaneous'),\n]\n\n\ndef skip(app, what, name, obj, skip, options):\n    if name == \"__init__\":\n        return False\n    return skip\n\n\ndef setup(app):\n    app.connect(\"autodoc-skip-member\", skip)\n"
  },
  {
    "path": "docs/source/developing.rst",
    "content": "===========================\nDeveloping and Contributing\n===========================\n\n\nWorking on the package\n----------------------\nYou have some cool feature and/or algorithm you want to add to the package. How do you go about it?\n\nFirst clone the package.\n\n.. code-block:: bash\n\n  git clone https://github.com/KaveIO/PhiK.git\n\nthen\n\n.. code-block:: bash\n\n  pip install -e PhiK/\n\nthis will install ``PhiK`` in editable mode, which will allow you to edit the code and run it as\nyou would with a normal installation of the ``PhiK`` correlation analyzer package.\n\nTo make sure that everything works try executing the tests, e.g.\n\n.. code-block:: bash\n\n  cd PhiK/\n  phik_trial .\n\nor \n\n.. code-block:: bash\n\n  cd PhiK/\n  python setup.py test\n\nThat's it.\n\n\nContributing\n------------\n\nWhen contributing to this repository, please first discuss the change you wish to make via issue, email, or any\nother method with the owners of this repository before making a change. You can find the contact information on the\n`index <index.html>`_ page.\n\nNote that when contributing that all tests should succeed.\n\n\nTips and Tricks\n---------------\n\n- Enable auto reload in ``jupyter``:\n\n.. code-block:: python\n\n  %load_ext autoreload\n\nthis will reload modules before executing any user code.\n"
  },
  {
    "path": "docs/source/index.rst",
    "content": ".. PhiK documentation master file, created by\n   sphinx-quickstart on Thu Jul  7 14:25:54 2016.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\n\n.. include:: ../../README.rst\n\n\nContents\n========\n\n.. toctree::\n   :maxdepth: 2\n\n   introduction\n   tutorials\n   publication\n   developing\n\nAPI\n---\n\n.. toctree::\n   :maxdepth: 1\n\n   code\n\nIndices and tables\n------------------\n\n* :ref:`genindex`\n* :ref:`modindex`\n"
  },
  {
    "path": "docs/source/introduction.rst",
    "content": "======================\nWhy did we build this?\n======================\n\nWhen exploring a data set, for example to model one variable in terms of the others,\nit is useful to summarize the dependencies between the variables, assess their significances, and\nvisualize the individual variable dependencies.\nThe ``PhiK`` correlation analyzer library contains several useful functions to help one do so.\n\n* This library implements a novel correlation coefficient, :math:`\\phi_{K}`, with properties that - taken together - form\n  an advantage over existing methods.\n\n  The calculation of correlation coefficients between paired data variables is a standard tool of analysis for every data analyst.\n  Pearson's correlation coefficient is a de facto standard in most fields, but by construction only works for interval variables\n  (sometimes called continuous variables). Pearson is unsuitable for data sets with mixed variable types,\n  e.g. where some variables are ordinal or categorical.\n\n  While many correlation coefficients exist, each with different features, we have not been able to find a\n  correlation coefficient with Pearson-like characteristics \n  and a sound statistical interpretation that works for interval, ordinal and categorical variable types alike.\n\n  The correlation coefficient :math:`\\phi_{K}` follows a uniform treatment for interval, ordinal and categorical variables,\n  captures non-linear dependencies, and is similar to Pearson's correlation coefficient in case of a bivariate normal input distribution.\n\n* We found that, by default, popular analysis libraries such ``R`` and ``scipy`` make incorrect (\"asymptotic\") assumptions when assessing\n  the statistical significance of the :math:`\\chi^2` contingency test of variable independence. In particular, the actual number of\n  degrees of freedom and the shape of the test statistic distribution can differ significantly from their theoretical\n  predictions in case of low to medium statistics data samples. This leads to incorrect p-values for the hypothesis test of variable\n  independence. A prescription has been implemented to fix these two mistakes.\n    \n* Visualizing the dependency between variables can be tricky, especially when dealing with (unordered) categorical variables. \n  To help interpret any variable relationship found, we provide a method for the detection of\n  significant excesses or deficits of records with respect to the expected values in a contingency table, so-called outliers,\n  using a statistically independent evaluation for expected frequency of records, accounting for the uncertainty on the expectation.\n  We evaluate the significance of each outlier frequency in a table, and normalize and visualize these accordingly.\n  The resulting plots we find to be very valuable to help interpret variable dependencies,\n  and work alike for interval, ordinal and categorical variables.\n\nThe ``PhiK`` analysis library is particularly useful in modern-day analysis when studying the dependencies between a set of\nvariables with mixed types, where often some variables are categorical.\nThe package has been used by us to study surveys, insurance claims, correlograms, etc.\n\nFor details on the methodology behind the calculations, please see our publication.\nFor the available examples on how to use the methods, please see the `tutorials <tutorials.html>`_ section.\n"
  },
  {
    "path": "docs/source/phik.decorators.rst",
    "content": "phik.decorators package\n=======================\n\nSubmodules\n----------\n\nphik.decorators.pandas module\n-----------------------------\n\n.. automodule:: phik.decorators.pandas\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: phik.decorators\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/source/phik.rst",
    "content": "phik package\n============\n\nSubpackages\n-----------\n\n.. toctree::\n\n    phik.decorators\n\nSubmodules\n----------\n\nphik.betainc module\n-------------------\n\n.. automodule:: phik.betainc\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.binning module\n-------------------\n\n.. automodule:: phik.binning\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.bivariate module\n---------------------\n\n.. automodule:: phik.bivariate\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.data\\_quality module\n-------------------------\n\n.. automodule:: phik.data_quality\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.definitions module\n-----------------------\n\n.. automodule:: phik.definitions\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.entry\\_points module\n-------------------------\n\n.. automodule:: phik.entry_points\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.outliers module\n--------------------\n\n.. automodule:: phik.outliers\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.phik module\n----------------\n\n.. automodule:: phik.phik\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.report module\n------------------\n\n.. automodule:: phik.report\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.resources module\n---------------------\n\n.. automodule:: phik.resources\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.significance module\n------------------------\n\n.. automodule:: phik.significance\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.simulation module\n----------------------\n\n.. automodule:: phik.simulation\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.statistics module\n----------------------\n\n.. automodule:: phik.statistics\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\nphik.version module\n-------------------\n\n.. automodule:: phik.version\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: phik\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/source/phik_index.rst",
    "content": "PhiK\n====\n\n.. toctree::\n   :maxdepth: 4\n\n   phik\n"
  },
  {
    "path": "docs/source/publication.rst",
    "content": "===================\nPublication & Talks\n===================\n\nPublication\n-----------\n\n* peer-reviewed: https://www.sciencedirect.com/science/article/abs/pii/S0167947320301341\n* arXiv pre-print: https://arxiv.org/abs/1811.11440\n\n\nTalks\n-----\n\n* Coming soon.\n\n\nCite as\n-------\n\nBaak, M., Koopman, R., Snoek, H., & Klous, S. (2020). A new correlation coefficient between categorical, ordinal and interval variables with Pearson characteristics. *Computational Statistics & Data Analysis*, 152, 107043.\n\n\n.. code-block:: latex\n\n  @article{phik2020,\n    title={A new correlation coefficient between categorical, ordinal and interval variables with Pearson characteristics},\n    author={Baak, M and Koopman, R and Snoek, H and Klous, S},\n    journal={Computational Statistics \\& Data Analysis},\n    volume={152},\n    pages={107043},\n    year={2020},\n    publisher={Elsevier}\n  }\n\nReferences\n----------\n\n* Web page: https://phik.readthedocs.io\n* Repository: https://github.com/kaveio/phik\n* Issues & Ideas: https://github.com/kaveio/phik/issues\n* Contact us at: kave [at] kpmg [dot] com\n"
  },
  {
    "path": "docs/source/tutorials.rst",
    "content": "=========\nTutorials\n=========\n\nThis section contains materials on how to use the Phi_K correlation analysis code.\nThere are additional side notes on how certain aspects work and where to find parts of the code.\nFor more in depth explanations on the functionality of the code-base, try the `API docs <phik_index.html>`_.\n\nThe tutorials are available in the ``phik/notebooks`` directory. We have:\n\n* A basic tutorial: this covers the basics of calculating Phi_K, the statistical significance, and interpreting the correlation. \n* An advanced tutorial: this shows how to use the advanced features of the ``PhiK`` library.\n* A spark tutorial: this shows how to calculate the Phi_K correlation matrix for a spark dataframe.\n\nYou can open these notebooks directly:\n\n* Run them interactively at `MyBinder <https://mybinder.org/v2/gh/KaveIO/PhiK/master?filepath=phik%2Fnotebooks>`_.\n* View them statically: `basic tutorial <http://nbviewer.ipython.org/urls/raw.github.com/kaveio/phik/master/phik/notebooks/phik_tutorial_basic.ipynb>`_ and  the `advanced tutorial <http://nbviewer.ipython.org/urls/raw.github.com/kaveio/phik/master/phik/notebooks/phik_tutorial_advanced.ipynb>`_ and the `spark tutorial <http://nbviewer.ipython.org/urls/raw.github.com/kaveio/phik/master/phik/notebooks/phik_tutorial_spark.ipynb>`_.\n"
  },
  {
    "path": "example.py",
    "content": "import pandas as pd\n\nimport phik\nfrom phik import resources, report\n\n# open fake car insurance data\ndf = pd.read_csv( resources.fixture('fake_insurance_data.csv.gz') )\ndf.head()\n\n# Pearson's correlation matrix between numeric variables (pandas functionality)\ndf.corr()\n\n# get the phi_k correlation matrix between all variables\ndf.phik_matrix()\n\n# get global correlations based on phi_k correlation matrix\ndf.global_phik()\n\n# get the significance matrix (expressed as one-sided Z)\n# of the hypothesis test of each variable-pair dependency\ndf.significance_matrix()\n\n# contingency table of two columns\ncols = ['mileage', 'car_size']\ndf[cols].hist2d()\n\n# normalized residuals of contingency test applied to cols\ndf[cols].outlier_significance_matrix()\n\n# show the normalized residuals of each variable-pair\ndf.outlier_significance_matrices()\n\n# generate a phik correlation report and save as test.pdf\nreport.correlation_report(df, pdf_file_name='test.pdf')\n"
  },
  {
    "path": "phik/__init__.py",
    "content": "# flake8: noqa\nimport importlib.metadata\n\nfrom phik import decorators\nfrom phik.outliers import (\n    outlier_significance_from_array,\n    outlier_significance_matrices,\n    outlier_significance_matrix,\n)\nfrom phik.phik import global_phik_array, phik_from_array, phik_matrix\nfrom phik.significance import significance_from_array, significance_matrix\n\n__version__ = importlib.metadata.version(\"phik\")\n\n__all__ = [\n    \"decorators\",\n    \"phik_from_array\",\n    \"significance_from_array\",\n    \"outlier_significance_from_array\",\n    \"phik_matrix\",\n    \"global_phik_array\",\n    \"significance_matrix\",\n    \"outlier_significance_matrices\",\n    \"outlier_significance_matrix\",\n]\n"
  },
  {
    "path": "phik/betainc.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/09/05\n\nDescription:\n    Implementation of incomplete beta function\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\nimport numpy as np\nfrom scipy.special import gammaln\nfrom typing import Tuple\n\n\ndef contfractbeta(\n    a: float, b: float, x: float, ITMAX: int = 5000, EPS: float = 1.0e-7\n) -> float:\n    \"\"\"Continued fraction form of the incomplete Beta function.\n\n    Code translated from: Numerical Recipes in C.\n\n    Example kindly taken from blog:\n    https://malishoaib.wordpress.com/2014/04/15/the-beautiful-beta-functions-in-raw-python/\n\n    :param float a: a\n    :param float b: b\n    :param float x: x\n    :param int ITMAX: max number of iterations, default is 5000.\n    :param float EPS: epsilon precision parameter, default is 1e-7.\n    :returns: continued fraction form\n    :rtype: float\n    \"\"\"\n    az = 1.0\n    bm = 1.0\n    am = 1.0\n    qab = a + b\n    qap = a + 1.0\n    qam = a - 1.0\n    bz = 1.0 - qab * x / qap\n\n    for i in range(ITMAX + 1):\n        em = float(i + 1)\n        tem = em + em\n        d = em * (b - em) * x / ((qam + tem) * (a + tem))\n        ap = az + d * am\n        bp = bz + d * bm\n        d = -(a + em) * (qab + em) * x / ((qap + tem) * (a + tem))\n        app = ap + d * az\n        bpp = bp + d * bz\n        aold = az\n        am = ap / bpp\n        bm = bp / bpp\n        az = app / bpp\n        bz = 1.0\n        if abs(az - aold) < EPS * abs(az):\n            return az\n\n    raise ValueError(\n        \"a={0:f} or b={1:f} too large, or ITMAX={2:d} too small to compute incomplete beta function.\".format(\n            a, b, ITMAX\n        )\n    )\n\n\ndef incompbeta(a: float, b: float, x: float) -> float:\n    \"\"\"Evaluation of incomplete beta function.\n\n    Code translated from: Numerical Recipes in C.\n\n    Here a, b > 0 and 0 <= x <= 1.\n    This function requires contfractbeta(a,b,x, ITMAX = 200)\n\n    Example kindly taken from blog:\n    https://malishoaib.wordpress.com/2014/04/15/the-beautiful-beta-functions-in-raw-python/\n\n    :param float a: a\n    :param float b: b\n    :param float x: x\n    :returns: incomplete beta function\n    :rtype: float\n    \"\"\"\n    # special cases\n    if x == 0:\n        return 0\n    elif x == 1:\n        return 1\n    # default\n    lbeta = gammaln(a + b) - gammaln(a) - gammaln(b) + a * np.log(x) + b * np.log(1 - x)\n    if x < (a + 1) / (a + b + 2):\n        p = np.exp(lbeta) * contfractbeta(a, b, x) / a\n    else:\n        p = 1 - np.exp(lbeta) * contfractbeta(b, a, 1 - x) / b\n    return p\n\n\ndef log_incompbeta(a: float, b: float, x: float) -> Tuple[float, float]:\n    \"\"\"Evaluation of logarithm of incomplete beta function\n\n    Logarithm of incomplete beta function is implemented to ensure sufficient precision\n    for values very close to zero and one.\n\n    Code translated from: Numerical Recipes in C.\n\n    Here a, b > 0 and 0 <= x <= 1.\n    This function requires contfractbeta(a,b,x, ITMAX = 200)\n\n    Example kindly taken from blog:\n    https://malishoaib.wordpress.com/2014/04/15/the-beautiful-beta-functions-in-raw-python/\n\n    :param float a: a\n    :param float b: b\n    :param float x: x\n    :returns: tuple of log(incb) and log(1-incb)\n    :rtype: tuple\n    \"\"\"\n    # special cases\n    if x == 0:\n        return -np.inf, 0\n    elif x == 1:\n        return 0, -np.inf\n    # default\n    lbeta = gammaln(a + b) - gammaln(a) - gammaln(b) + a * np.log(x) + b * np.log(1 - x)\n\n    if x < (a + 1) / (a + b + 2):\n        p = np.exp(lbeta) * contfractbeta(a, b, x) / a\n        logp = lbeta + np.log(contfractbeta(a, b, x)) - np.log(a)\n        logq = np.log(1 - p)\n    else:\n        p = 1 - np.exp(lbeta) * (contfractbeta(b, a, 1 - x) / b)\n        logp = np.log(p)\n        logq = lbeta + np.log(contfractbeta(b, a, 1 - x)) - np.log(b)\n    return logp, logq\n"
  },
  {
    "path": "phik/binning.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/09/06\n\nDescription:\n    A set of rebinning functions, to help rebin two lists into a 2d histogram.\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\nimport sys\nfrom typing import List, Optional, Tuple, Union\n\nimport numpy as np\nimport pandas as pd\n\nfrom phik import definitions as defs\nfrom phik.data_quality import dq_check_nunique_values\nfrom phik.utils import array_like_to_dataframe, guess_interval_cols\n\n\ndef bin_edges(\n    arr: Union[np.ndarray, list, pd.Series], nbins: int, quantile: bool = False\n) -> np.ndarray:\n    \"\"\"\n    Create uniform or quantile bin-edges for the input array.\n\n    :param arr: array like object with input data\n    :param int nbins: the number of bin\n    :param bool quantile: uniform bins (False) or bins based on quantiles (True)\n    :returns: array with bin edges\n    \"\"\"\n\n    if quantile:\n        quantiles = np.linspace(0, 1, nbins + 1)\n        xbins = np.quantile(arr[~np.isnan(arr)], quantiles)\n        xbins[0] -= max(1e-14 * abs(xbins[0]), sys.float_info.min)\n    else:\n        min_value = np.min(arr[~np.isnan(arr)])\n        constant = max(1e-14 * abs(min_value), sys.float_info.min)\n        xbins = np.linspace(\n            min_value - constant, np.max(arr[~np.isnan(arr)]), nbins + 1\n        )\n\n    return xbins\n\n\ndef bin_array(\n    arr: Union[np.ndarray, list], bin_edges: Union[np.ndarray, list]\n) -> Tuple[np.ndarray, list]:\n    \"\"\"\n    Index the data given the bin_edges.\n\n    Underflow and overflow values are indicated.\n\n    :param arr: array like object with input data\n    :param bin_edges: list with bin edges.\n    :returns: indexed data\n    \"\"\"\n\n    # Bin data\n    binned_arr = np.searchsorted(bin_edges, arr).astype(object)\n\n    # Check if all bins are filled and store bin-labels\n    bin_labels = []\n    bin_indices = pd.Series(binned_arr).value_counts().index\n    for i in range(1, len(bin_edges)):\n        if i in bin_indices:\n            bin_labels.append((bin_edges[i - 1], bin_edges[i]))\n\n    # NaN values are added to the overflow bin. Restore NaN values:\n    binned_arr[np.argwhere(np.isnan(arr))] = np.nan\n\n    # Set underflow values to UF\n    binned_arr[np.argwhere(binned_arr == 0)] = defs.UF\n\n    # Set overflow values to OF\n    binned_arr[np.argwhere(binned_arr == len(bin_edges))] = defs.OF\n\n    return binned_arr, bin_labels\n\n\ndef bin_data(\n    data: pd.DataFrame,\n    cols: Union[list, np.ndarray, tuple] = (),\n    bins: Union[int, list, np.ndarray, dict] = 10,\n    quantile: bool = False,\n    retbins: bool = False,\n):\n    \"\"\"\n    Index the input DataFrame given the bin_edges for the columns specified in cols.\n\n    :param DataFrame data: input data\n    :param list cols: list of columns with numeric data which needs to be indexed\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param quantile: when bins is an integer, uniform bins (False) or bins based on quantiles (True)\n    :returns: rebinned DataFrame\n    :rtype: pandas.DataFrame\n    \"\"\"\n    xbins = None\n    if isinstance(bins, dict):\n        for col in cols:\n            if col not in bins:\n                raise ValueError(\n                    \"column {0} is not included in bins dictionary.\".format(col)\n                )\n    elif isinstance(bins, (list, np.ndarray)):\n        xbins = bins\n\n    # MB 20210307: check for numeric bins turned off here, also done in dq_check_nunique_values().\n\n    binned_data = data.copy()\n\n    bins_dict = {}\n    for col in cols:\n        if np.issubdtype(type(bins), np.integer) or np.issubdtype(\n            type(bins), np.floating\n        ):\n            xbins = bin_edges(data[col].astype(float), int(bins), quantile=quantile)\n        elif isinstance(bins, dict):\n            if np.issubdtype(type(bins[col]), np.integer) or np.issubdtype(\n                type(bins[col]), np.floating\n            ):\n                xbins = bin_edges(\n                    data[col].astype(float), int(bins[col]), quantile=quantile\n                )\n            elif isinstance(bins[col], (list, np.ndarray)):\n                xbins = bins[col]\n        elif xbins is None:\n            raise ValueError(\n                \"Unexpected type for bins. The found type was '%s'\" % str(type(bins))\n            )\n\n        binned_data[col], bin_labels = bin_array(data[col].astype(float).values, xbins)\n        if retbins:\n            bins_dict[col] = bin_labels\n\n    if retbins:\n        return binned_data, bins_dict\n\n    return binned_data\n\n\ndef auto_bin_data(\n    df: pd.DataFrame,\n    interval_cols: Optional[list] = None,\n    bins: Union[int, list, np.ndarray, dict] = 10,\n    quantile: bool = False,\n    dropna: bool = True,\n    verbose: bool = True,\n) -> pd.DataFrame:\n    \"\"\"\n    Index the input DataFrame with automatic bin_edges and interval columns.\n\n    :param pd.DataFrame data_binned: input data\n    :param list interval_cols: column names of columns with interval variables.\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column\n        the bins are specified. (default=10)\\\n        E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param quantile: when bins is an integer, uniform bins (False) or bins based on quantiles (True)\n    :param bool dropna: remove NaN values with True\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :return: phik correlation matrix\n    \"\"\"\n    # guess interval columns\n    if interval_cols is None:\n        interval_cols = guess_interval_cols(df, verbose)\n\n    # clean the data\n    df_clean, interval_cols_clean = dq_check_nunique_values(\n        df, interval_cols, dropna=dropna\n    )\n\n    # perform rebinning\n    data_binned, binning_dict = bin_data(\n        df_clean, cols=interval_cols_clean, bins=bins, quantile=quantile, retbins=True\n    )\n    return data_binned, binning_dict\n\n\ndef create_correlation_overview_table(\n    vals: List[Tuple[str, str, float]]\n) -> pd.DataFrame:\n    \"\"\"\n    Create overview table of phik/significance data.\n\n    :param list vals: list holding tuples of data for each variable pair formatted as ('var1', 'var2', value)\n    :returns: symmetric table with phik/significances of all variable pairs\n    :rtype: pandas.DataFrame\n    \"\"\"\n\n    ll = []\n    for c0, c1, v in vals:\n        ll.append([c0, c1, v])\n        ll.append([c1, c0, v])\n\n    corr_matrix = pd.DataFrame(ll, columns=[\"var1\", \"var2\", \"vals\"]).pivot_table(\n        index=\"var1\", columns=\"var2\", values=\"vals\"\n    )\n    corr_matrix.columns.name = None\n    corr_matrix.index.name = None\n    return corr_matrix\n\n\ndef hist2d_from_rebinned_df(\n    data_binned: pd.DataFrame,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n) -> pd.DataFrame:\n    \"\"\"\n    Give binned 2d DataFrame of two columns of rebinned input DataFrame\n\n    :param df: input data. DataFrame must contain exactly two columns\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :returns: histogram DataFrame\n    \"\"\"\n\n    c0, c1 = data_binned.columns\n\n    if not dropna:\n        data_binned.fillna(defs.NaN, inplace=True)\n    if drop_underflow:\n        data_binned.replace(defs.UF, np.nan, inplace=True)\n    if drop_overflow:\n        data_binned.replace(defs.OF, np.nan, inplace=True)\n\n    # create a contingency table\n    df_datahist = (\n        data_binned.groupby([c0, c1])[c0].count().to_frame().unstack().fillna(0)\n    )\n    df_datahist.columns = df_datahist.columns.droplevel()\n\n    return df_datahist\n\n\ndef hist2d(\n    df: pd.DataFrame,\n    interval_cols: Optional[Union[list, np.ndarray]] = None,\n    bins: Union[int, float, list, np.ndarray, dict] = 10,\n    quantile: bool = False,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    retbins: bool = False,\n    verbose: bool = True,\n) -> Union[pd.DataFrame, Tuple[pd.DataFrame, dict]]:\n    \"\"\"\n    Give binned 2d DataFrame of two columns of input DataFrame\n\n    :param df: input data. DataFrame must contain exactly two columns\n    :param interval_cols: columns with interval variables which need to be binned\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param bool quantile: when the number of bins is specified, use uniform binning (False) or quantile binning (True)\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :returns: histogram DataFrame\n    \"\"\"\n\n    if len(df.columns) != 2:\n        raise ValueError(\"DataFrame should contain only two columns\")\n\n    if interval_cols is None:\n        interval_cols = guess_interval_cols(df, verbose)\n\n    data_binned, binning_dict = bin_data(\n        df, interval_cols, retbins=True, bins=bins, quantile=quantile\n    )\n    datahist = hist2d_from_rebinned_df(\n        data_binned,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n    )\n\n    if retbins:\n        return datahist, binning_dict\n\n    return datahist\n\n\ndef hist2d_from_array(\n    x: Union[pd.Series, list, np.ndarray], y: [pd.Series, list, np.ndarray], **kwargs\n) -> Union[pd.DataFrame, Tuple[pd.DataFrame, dict]]:\n    \"\"\"\n    Give binned 2d DataFrame of two input arrays\n\n    :param x: input data. First array-like.\n    :param y: input data. Second array-like.\n    :param interval_cols: columns with interval variables which need to be binned\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param bool quantile: when the number of bins is specified, use uniform binning (False) or quantile binning (True)\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :returns: histogram DataFrame\n    \"\"\"\n\n    df = array_like_to_dataframe(x, y)\n    return hist2d(df, **kwargs)\n"
  },
  {
    "path": "phik/bivariate.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2019/11/23\n\nDescription:\n    Convert Pearson correlation value into a chi2 value of a contingency test \n    matrix of a bivariate gaussian, and vice-versa.\n    Calculation uses scipy's mvn library.\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\nimport warnings\n\nimport numpy as np\nimport scipy\nfrom scipy import optimize\n\n_scipy_version = [int(v) for v in scipy.__version__.split('.')]\nUSE_QMVN = True if _scipy_version[0] >= 1 and _scipy_version[1] >= 16 else False\nif USE_QMVN:\n    from scipy.stats._qmvnt import _qauto, _qmvn\nelse:\n    from scipy.stats._mvn import mvnun\n\n\n\n\ndef _mvn_un(rho: float, lower: tuple, upper: tuple,\n            rng: np.random.Generator = np.random.default_rng(42)) -> float:\n    \"\"\"Perform integral of bivariate normal gauss with correlation\n\n    Integral is performed using scipy's mvn library.\n\n    :param float rho: tilt parameter\n    :param tuple lower: tuple of lower corner of integral area\n    :param tuple upper: tuple of upper corner of integral area\n    :param np.random.Generator rng: default_rng(42), optional\n    :returns float: integral value\n    \"\"\"\n    mu = np.array([0.0, 0.0])\n    S = np.array([[1.0, rho], [rho, 1.0]])\n    return _calc_mvnun(lower=lower, upper=upper, mu=mu, S=S, rng=rng)\n\n\ndef _calc_mvnun(lower, upper, mu, S, rng = np.random.default_rng(42)):\n    if USE_QMVN:\n        res = _qauto(_qmvn, S, lower, upper, rng)[0]\n    else:\n        res = mvnun(lower, upper, mu, S)[0]\n    return res\n\n\ndef _mvn_array(rho: float, sx: np.ndarray, sy: np.ndarray) -> list:\n    \"\"\"Array of integrals over bivariate normal gauss with correlation\n\n    Integrals are performed using scipy's mvn library.\n\n    :param float rho: tilt parameter\n    :param np.ndarray sx: bin edges array of x-axis\n    :param np.ndarray sy: bin edges array of y-axis\n    :returns list: list of integral values\n    \"\"\"\n    # ranges = [([sx[i], sy[j]], [sx[i+1], sy[j+1]]) for i in range(len(sx) - 1) for j in range(len(sy) - 1)]\n    # corr = [mvn.mvnun(lower, upper, mu, S)[0] for lower, upper in ranges]\n    # return corr\n\n    # mean and covariance\n    mu = np.array([0.0, 0.0])\n    S = np.array([[1.0, rho], [rho, 1.0]])\n\n    # callling mvn.mvnun is expensive, so we only calculate half of the matrix, then symmetrize\n    # add half block, which is symmetric in x\n    odd_odd = False\n    ranges = [\n        ([sx[i], sy[j]], [sx[i + 1], sy[j + 1]])\n        for i in range((len(sx) - 1) // 2)\n        for j in range(len(sy) - 1)\n    ]\n    # add odd middle row, which is symmetric in y\n    if (len(sx) - 1) % 2 == 1:\n        i = (len(sx) - 1) // 2\n        ranges += [\n            ([sx[i], sy[j]], [sx[i + 1], sy[j + 1]]) for j in range((len(sy) - 1) // 2)\n        ]\n        # add center point, add this only once\n        if (len(sy) - 1) % 2 == 1:\n            j = (len(sy) - 1) // 2\n            ranges.append(([sx[i], sy[j]], [sx[i + 1], sy[j + 1]]))\n            odd_odd = True\n\n    corr = np.array([_calc_mvnun(lower, upper, mu, S) for lower, upper in ranges])\n    # add second half, exclude center\n    corr = np.concatenate([corr, corr if not odd_odd else corr[:-1]])\n    return corr\n\n\ndef bivariate_normal_theory(\n    rho: float,\n    nx: int = -1,\n    ny: int = -1,\n    n: int = 1,\n    sx: np.ndarray = None,\n    sy: np.ndarray = None,\n) -> np.ndarray:\n    \"\"\"Return binned pdf of bivariate normal distribution.\n\n    This function returns a \"perfect\" binned bivariate normal distribution.\n\n    :param float rho: tilt parameter\n    :param int nx: number of uniform bins on x-axis. alternative to sx.\n    :param int ny: number of uniform bins on y-axis. alternative to sy.\n    :param np.ndarray sx: bin edges array of x-axis. default is None.\n    :param np.ndarray sy: bin edges array of y-axis. default is None.\n    :param int n: number of entries. default is one.\n    :return: np.ndarray of binned bivariate normal pdf\n    \"\"\"\n\n    if n < 1:\n        raise ValueError(\"Number of entries needs to be one or greater.\")\n    if sx is None:\n        sx = np.linspace(-5, 5, nx + 1)\n    if sy is None:\n        sy = np.linspace(-5, 5, ny + 1)\n\n    bvn = np.zeros((ny, nx))\n    for i in range(len(sx) - 1):\n        for j in range(len(sy) - 1):\n            lower = (sx[i], sy[j])\n            upper = (sx[i + 1], sy[j + 1])\n            p = _mvn_un(rho, lower, upper)\n            bvn[j, i] = p\n    bvn *= n\n\n    # patch for entry levels that are below machine precision\n    # (simulation does not work otherwise)\n    bvn[bvn < np.finfo(np.float).eps] = np.finfo(np.float).eps\n\n    return bvn\n\n\ndef chi2_from_phik(\n    rho: float,\n    n: int,\n    subtract_from_chi2: float = 0,\n    corr0: list = None,\n    scale: float = None,\n    sx: np.ndarray = None,\n    sy: np.ndarray = None,\n    pedestal: float = 0,\n    nx: int = -1,\n    ny: int = -1,\n) -> float:\n    \"\"\"Calculate chi2-value of bivariate gauss having correlation value rho\n\n    Calculate no-noise chi2 value of bivar gauss with correlation rho,\n    with respect to bivariate gauss without any correlation.\n\n    :param float rho: tilt parameter\n    :param int n: number of records\n    :param float subtract_from_chi2: value subtracted from chi2 calculation. default is 0.\n    :param list corr0: mvn_array result for rho=0. Default is None.\n    :param float scale: scale is multiplied with the chi2 if set.\n    :param np.ndarray sx: bin edges array of x-axis. default is None.\n    :param np.ndarray sy: bin edges array of y-axis. default is None.\n    :param float pedestal: pedestal is added to the chi2 if set.\n    :param int nx: number of uniform bins on x-axis. alternative to sx.\n    :param int ny: number of uniform bins on y-axis. alternative to sy.\n    :returns float: chi2 value\n    \"\"\"\n\n    if sx is None:\n        sx = np.linspace(-5, 5, nx + 1)\n\n    if sy is None:\n        sy = np.linspace(-5, 5, ny + 1)\n\n    if corr0 is None:\n        corr0 = _mvn_array(0, sx, sy)\n    if scale is None:\n        # scale ensures that for rho=1, chi2 is the maximum possible value\n        corr1 = _mvn_array(1, sx, sy)\n        delta_corr2 = (corr1 - corr0) ** 2\n        # protect against division by zero\n        ratio = np.divide(\n            delta_corr2, corr0, out=np.zeros_like(delta_corr2), where=corr0 != 0\n        )\n        chi2_one = n * np.sum(ratio)\n        # chi2_one = n * sum([((c1-c0)*(c1-c0)) / c0 for c0, c1 in zip(corr0, corr1)])\n        chi2_max = n * min(nx - 1, ny - 1)\n        scale = (chi2_max - pedestal) / chi2_one\n\n    corrr = _mvn_array(rho, sx, sy)\n    delta_corr2 = (corrr - corr0) ** 2\n    # protect against division by zero\n    ratio = np.divide(\n        delta_corr2, corr0, out=np.zeros_like(delta_corr2), where=corr0 != 0\n    )\n    chi2_rho = n * np.sum(ratio)\n    # chi2_rho = (n * sum([((cr-c0)*(cr-c0)) / c0 for c0, cr in zip(corr0, corrr)]))\n\n    chi2 = pedestal + chi2_rho * scale\n    return chi2 - subtract_from_chi2\n\n\ndef phik_from_chi2(\n    chi2: float,\n    n: int,\n    nx: int,\n    ny: int,\n    sx: np.ndarray = None,\n    sy: np.ndarray = None,\n    pedestal: float = 0,\n) -> float:\n    \"\"\"\n    Correlation coefficient of bivariate gaussian derived from chi2-value\n\n    Chi2-value gets converted into correlation coefficient of bivariate gauss\n    with correlation value rho, assuming giving binning and number of records.\n    Correlation coefficient value is between 0 and 1.\n\n    Bivariate gaussian's range is set to [-5,5] by construction.\n\n    :param float chi2: input chi2 value\n    :param int n: number of records\n    :param int nx: number of uniform bins on x-axis. alternative to sx.\n    :param int ny: number of uniform bins on y-axis. alternative to sy.\n    :param np.ndarray sx: bin edges array of x-axis. default is None.\n    :param np.ndarray sy: bin edges array of y-axis. default is None.\n    :param float pedestal: pedestal is added to the chi2 if set.\n    :returns float: correlation coefficient\n    \"\"\"\n\n    if pedestal < 0:\n        raise ValueError(\"noise pedestal should be greater than zero.\")\n\n    if sx is None:\n        sx = np.linspace(-5, 5, nx + 1)\n    elif nx <= 1:\n        raise ValueError(\"number of bins along x-axis is unknown\")\n    if sy is None:\n        sy = np.linspace(-5, 5, ny + 1)\n    elif ny <= 1:\n        raise ValueError(\"number of bins along y-axis is unknown\")\n\n    corr0 = _mvn_array(0, sx, sy)\n\n    # scale ensures that for rho=1, chi2 is the maximum possible value\n    corr1 = _mvn_array(1, sx, sy)\n    if 0 in corr0 and len(corr0) > 10000:\n        warnings.warn(\n            \"Many cells: {0:d}. Are interval variables set correctly?\".format(\n                len(corr0)\n            )\n        )\n\n    delta_corr2 = (corr1 - corr0) ** 2\n    # protect against division by zero\n    ratio = np.divide(\n        delta_corr2, corr0, out=np.zeros_like(delta_corr2), where=corr0 != 0\n    )\n    chi2_one = n * np.sum(ratio)\n    # chi2_one = n * sum([((c1-c0)*(c1-c0)) / c0 if c0 > 0 else 0 for c0,c1 in zip(corr0,corr1)])\n    chi2_max = n * min(nx - 1, ny - 1)\n    scale = (chi2_max - pedestal) / chi2_one\n    if chi2 > chi2_max and np.isclose(chi2, chi2_max, atol=1e-14):\n        chi2 = chi2_max\n\n    # only solve for rho if chi2 exceeds noise pedestal\n    if chi2 <= pedestal:\n        return 0.0\n    elif chi2 >= chi2_max:\n        return 1.0\n\n    rho = optimize.brentq(\n        chi2_from_phik, 0, 1, args=(n, chi2, corr0, scale, sx, sy, pedestal), xtol=1e-5\n    )\n    return rho\n"
  },
  {
    "path": "phik/data_quality.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/12/28\n\nDescription:\n    A set of functions to check for data quality issues in input data.\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\n\nimport warnings\nimport copy\nfrom typing import Tuple\n\nimport pandas as pd\nimport numpy as np\n\n\ndef dq_check_nunique_values(\n    df: pd.DataFrame, interval_cols: list, dropna: bool = True\n) -> Tuple[pd.DataFrame, list]:\n    \"\"\"\n    Basic data quality checks per column in a DataFrame.\n\n    The following checks are done:\n\n    1. For all non-interval variables, if the number of unique values per variable is larger than 100 a warning is printed.\n    When the number of unique values is large, the variable is likely to be an interval variable. Calculation of phik\n    will be slow(ish) for pairs of variables where one (or two) have many different values (i.e. many bins).\n\n    2. For all interval variables, the number of unique values must be at least two. If the number of unique values is\n    zero (i.e. all NaN) the column is removed. If the number of unique values is one, it is not possible to\n    automatically create a binning for this variable (as min and max are the same). The variable is therefore dropped,\n    irrespective of whether dropna is True or False.\n\n    3. For all non-interval variables, the number of unique values must be at least either\n    a) 1 if dropna=False (NaN is now also considered a valid category), or\n    b) 2 if dropna=True\n\n    The function returns a DataFrame where all columns with invalid data are removed. Also the list of interval_cols\n    is updated and returned.\n\n    :param pd.DataFrame df: input data\n    :param list interval_cols: column names of columns with interval variables.\n    :param bool dropna: remove NaN values when True\n    :returns: cleaned data, updated list of interval columns\n    \"\"\"\n    # check for existing columns\n    interval_cols = [col for col in interval_cols if col in df.columns]\n\n    # check non-interval variable for number of unique values\n    for col in sorted(list(set(df.columns) - set(interval_cols))):\n        if df[col].nunique() > 1000:\n            warnings.warn(\n                \"The number of unique values of variable {0:s} is large: {1:d}. Are you sure this is \"\n                \"not an interval variable? Analysis for pairs of variables including {0:s} can be slow.\".format(\n                    col, df[col].nunique()\n                )\n            )\n\n    drop_cols = []\n\n    # check for interval values whether there are at least two unique values (otherwise I cannot bin automatically)\n    for col in interval_cols:\n        if df[col].nunique() < 2:\n            drop_cols.append(col)\n            warnings.warn(\n                \"Not enough unique value for variable {0:s} for analysis {1:d}. Dropping this column\".format(\n                    col, df[col].nunique()\n                )\n            )\n\n    # check non-interval values whether there are at least two different values OR 1 value and NaN if dropna==False\n    for col in sorted(list(set(df.columns) - set(interval_cols))):\n        if df[col].nunique() == 0 or (df[col].nunique() == 1 and dropna):\n            drop_cols.append(col)\n            warnings.warn(\n                \"Not enough unique value for variable {0:s} for analysis {1:d}. Dropping this column\".format(\n                    col, df[col].nunique()\n                )\n            )\n\n    df_clean = df.copy()\n    interval_cols_clean = copy.copy(interval_cols)\n    if len(drop_cols) > 0:\n        # preserves column order: https://github.com/KaveIO/PhiK/issues/1\n        df_clean.drop(columns=drop_cols, inplace=True)\n        interval_cols_clean = [col for col in interval_cols if col not in drop_cols]\n\n    return df_clean, interval_cols_clean\n\n\ndef dq_check_hist2d(hist2d: np.ndarray) -> bool:\n    \"\"\"Basic data quality checks for a contingency table\n\n    The Following checks are done:\n\n    1. There must be at least two bins in both the x and y direction.\n\n    2. If the number of bins in the x and/or y direction is larger than 100 a warning is printed.\n\n    :param hist2d: contingency table\n    :return: bool passed_check\n    \"\"\"\n\n    if 0 in hist2d.shape or 1 in hist2d.shape:\n        warnings.warn(\n            \"Too few unique values for variable x ({0:d}) or y ({1:d})\".format(\n                hist2d.shape[0], hist2d.shape[1]\n            )\n        )\n        return False\n    if hist2d.shape[0] > 1000:\n        warnings.warn(\n            \"The number of unique values of variable x is large: {0:d}. \"\n            \"Are you sure this is not an interval variable? Analysis might be slow.\".format(\n                hist2d.shape[0]\n            )\n        )\n    if hist2d.shape[1] > 1000:\n        warnings.warn(\n            \"The number of unique values of variable y is large: {0:d}. \"\n            \"Are you sure this is not an interval variable? Analysis might be slow.\".format(\n                hist2d.shape[0]\n            )\n        )\n\n    return True\n"
  },
  {
    "path": "phik/decorators/__init__.py",
    "content": "# flake8: noqa\n\n# import pandas DataFrame decorators\nfrom phik.decorators import pandas\n"
  },
  {
    "path": "phik/decorators/pandas.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nModule: phik.decorators.pandas\n\nCreated: 2018/11/14\n\nDescription:\n    Decorators for pandas DataFrame objects\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\n\nfrom pandas import DataFrame, Series\n\n# add function to create a 2d histogram\nfrom phik.binning import hist2d, hist2d_from_array\nDataFrame.hist2d = hist2d\nSeries.hist2d = hist2d_from_array\n\n# add phik correlation matrix function\nfrom phik.phik import phik_matrix, global_phik_array\nDataFrame.phik_matrix = phik_matrix\nDataFrame.global_phik = global_phik_array\n\n# add significance matrix function for variable dependencies\nfrom phik.significance import significance_matrix\nDataFrame.significance_matrix = significance_matrix\n\n# outlier matrix\nfrom phik.outliers import outlier_significance_matrices, outlier_significance_matrix, outlier_significance_from_array\nDataFrame.outlier_significance_matrices = outlier_significance_matrices\nDataFrame.outlier_significance_matrix = outlier_significance_matrix\nSeries.outlier_significance_matrix = outlier_significance_from_array\n"
  },
  {
    "path": "phik/definitions.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/09/05\n\nDescription:\n    Definitions used throughout the phik package\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\n\n# names assigned to underflow and overflow bin when assigning bin indices\nOF = \"OF\"\nUF = \"UF\"\n# name replacement of np.nan\nNaN = \"NaN\"\n"
  },
  {
    "path": "phik/entry_points.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/11/13\n\nDescription:\n    Collection of phik entry points\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\n\n\ndef phik_trial():\n    \"\"\"Run Phi_K tests.\n\n    We will keep this here until we've completed switch to pytest or nose and tox.\n    We could also keep it, but I don't like the fact that packages etc. are\n    hard coded. Gotta come up with\n    a better solution.\n    \"\"\"\n    import sys\n    import pytest\n\n    # ['--pylint'] +\n    # -r xs shows extra info on skips and xfails.\n    default_options = [\"-rxs\"]\n    args = sys.argv[1:] + default_options\n    sys.exit(pytest.main(args))\n"
  },
  {
    "path": "phik/notebooks/phik_tutorial_advanced.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Phi_K advanced tutorial\\n\",\n    \"\\n\",\n    \"This notebook guides you through the more advanced functionality of the phik package. This notebook will not cover all the underlying theory, but will just attempt to give an overview of all the options that are available. For a theoretical description the user is referred to our paper.\\n\",\n    \"\\n\",\n    \"The package offers functionality on three related topics:\\n\",\n    \"\\n\",\n    \"1. Phik correlation matrix\\n\",\n    \"2. Significance matrix\\n\",\n    \"3. Outlier significance matrix\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%%capture\\n\",\n    \"# install phik (if not installed yet)\\n\",\n    \"import sys\\n\",\n    \"\\n\",\n    \"!\\\"{sys.executable}\\\" -m pip install phik\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# import standard packages\\n\",\n    \"import numpy as np\\n\",\n    \"import pandas as pd\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"import itertools\\n\",\n    \"\\n\",\n    \"import phik\\n\",\n    \"\\n\",\n    \"from phik import resources\\n\",\n    \"from phik.binning import bin_data\\n\",\n    \"from phik.decorators import *\\n\",\n    \"from phik.report import plot_correlation_matrix\\n\",\n    \"\\n\",\n    \"%matplotlib inline\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# if one changes something in the phik-package one can automatically reload the package or module\\n\",\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Load data\\n\",\n    \"\\n\",\n    \"A simulated dataset is part of the phik-package. The dataset concerns car insurance data. Load the dataset here:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"data = pd.read_csv( resources.fixture('fake_insurance_data.csv.gz') )\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>26.377219</td>\\n\",\n       \"      <td>suburbs</td>\\n\",\n       \"      <td>156806.288398</td>\\n\",\n       \"      <td>XXL</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>58.976840</td>\\n\",\n       \"      <td>suburbs</td>\\n\",\n       \"      <td>74400.323559</td>\\n\",\n       \"      <td>XL</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>multicolor</td>\\n\",\n       \"      <td>55.744988</td>\\n\",\n       \"      <td>downtown</td>\\n\",\n       \"      <td>267856.748015</td>\\n\",\n       \"      <td>XXL</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>metalic</td>\\n\",\n       \"      <td>57.629139</td>\\n\",\n       \"      <td>downtown</td>\\n\",\n       \"      <td>259028.249060</td>\\n\",\n       \"      <td>XXL</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>21.490637</td>\\n\",\n       \"      <td>downtown</td>\\n\",\n       \"      <td>110712.216080</td>\\n\",\n       \"      <td>XL</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"    car_color  driver_age      area        mileage car_size\\n\",\n       \"0       black   26.377219   suburbs  156806.288398      XXL\\n\",\n       \"1       black   58.976840   suburbs   74400.323559       XL\\n\",\n       \"2  multicolor   55.744988  downtown  267856.748015      XXL\\n\",\n       \"3     metalic   57.629139  downtown  259028.249060      XXL\\n\",\n       \"4       green   21.490637  downtown  110712.216080       XL\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data.head()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Specify bin types\\n\",\n    \"\\n\",\n    \"The phik-package offers a way to calculate correlations between variables of mixed types. Variable types can be inferred automatically although we recommend to variable types to be specified by the user. \\n\",\n    \"\\n\",\n    \"Because interval type variables need to be binned in order to calculate phik and the significance, a list of interval variables is created.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['driver_age', 'mileage']\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data_types = {'severity': 'interval',\\n\",\n    \"             'driver_age':'interval',\\n\",\n    \"             'satisfaction':'ordinal',\\n\",\n    \"             'mileage':'interval',\\n\",\n    \"             'car_size':'ordinal',\\n\",\n    \"             'car_use':'ordinal',\\n\",\n    \"             'car_color':'categorical',\\n\",\n    \"             'area':'categorical'}\\n\",\n    \"\\n\",\n    \"interval_cols = [col for col, v in data_types.items() if v=='interval' and col in data.columns]\\n\",\n    \"interval_cols\\n\",\n    \"# interval_cols is used below\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Phik correlation matrix\\n\",\n    \"\\n\",\n    \"Now let's start calculating the correlation phik between pairs of variables. \\n\",\n    \"\\n\",\n    \"Note that the original dataset is used as input, the binning of interval variables is done automatically.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.389671</td>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>0.389671</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.105506</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.105506</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.768589</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.768589</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age      area   mileage  car_size\\n\",\n       \"car_color    1.000000    0.389671  0.590456  0.000000  0.000000\\n\",\n       \"driver_age   0.389671    1.000000  0.105506  0.000000  0.000000\\n\",\n       \"area         0.590456    0.105506  1.000000  0.000000  0.000000\\n\",\n       \"mileage      0.000000    0.000000  0.000000  1.000000  0.768589\\n\",\n       \"car_size     0.000000    0.000000  0.000000  0.768589  1.000000\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"phik_overview = data.phik_matrix(interval_cols=interval_cols)\\n\",\n    \"phik_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Specify binning per interval variable\\n\",\n    \"\\n\",\n    \"Binning can be set per interval variable individually. One can set the number of bins, or specify a list of bin edges. Note that the measured phik correlation is dependent on the chosen binning. \\n\",\n    \"The default binning is uniform between the min and max values of the interval variable.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.388350</td>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>0.388350</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.071189</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.071189</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.665845</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.665845</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age      area   mileage  car_size\\n\",\n       \"car_color    1.000000    0.388350  0.590456  0.000000  0.000000\\n\",\n       \"driver_age   0.388350    1.000000  0.071189  0.000000  0.000000\\n\",\n       \"area         0.590456    0.071189  1.000000  0.000000  0.000000\\n\",\n       \"mileage      0.000000    0.000000  0.000000  1.000000  0.665845\\n\",\n       \"car_size     0.000000    0.000000  0.000000  0.665845  1.000000\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\\n\",\n    \"phik_overview = data.phik_matrix(interval_cols=interval_cols, bins=bins)\\n\",\n    \"phik_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Do not apply noise correction\\n\",\n    \"\\n\",\n    \"For low statistics samples often a correlation larger than zero is measured when no correlation is actually present in the true underlying distribution. This is not only the case for phik, but also for the pearson correlation and Cramer's phi (see figure 4 in <font color='red'> XX </font>). In the phik calculation a noise correction is applied by default, to take into account erroneous correlation values as a result of low statistics. To switch off this noise cancellation (not recommended), do:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.407860</td>\\n\",\n       \"      <td>0.594172</td>\\n\",\n       \"      <td>0.136267</td>\\n\",\n       \"      <td>0.096629</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>0.407860</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.190390</td>\\n\",\n       \"      <td>0.199606</td>\\n\",\n       \"      <td>0.121585</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>0.594172</td>\\n\",\n       \"      <td>0.190390</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.149679</td>\\n\",\n       \"      <td>0.067452</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>0.136267</td>\\n\",\n       \"      <td>0.199606</td>\\n\",\n       \"      <td>0.149679</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.770836</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>0.096629</td>\\n\",\n       \"      <td>0.121585</td>\\n\",\n       \"      <td>0.067452</td>\\n\",\n       \"      <td>0.770836</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age      area   mileage  car_size\\n\",\n       \"car_color    1.000000    0.407860  0.594172  0.136267  0.096629\\n\",\n       \"driver_age   0.407860    1.000000  0.190390  0.199606  0.121585\\n\",\n       \"area         0.594172    0.190390  1.000000  0.149679  0.067452\\n\",\n       \"mileage      0.136267    0.199606  0.149679  1.000000  0.770836\\n\",\n       \"car_size     0.096629    0.121585  0.067452  0.770836  1.000000\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"phik_overview = data.phik_matrix(interval_cols=interval_cols, noise_correction=False)\\n\",\n    \"phik_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Using a different expectation histogram\\n\",\n    \"\\n\",\n    \"By default phik compares the 2d distribution of two (binned) variables with the distribution that assumes no dependency between them. One can also change the expected distribution though. Phi_K is calculated in the same way, but using the other expectation distribution. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from phik.binning import auto_bin_data\\n\",\n    \"from phik.phik import phik_observed_vs_expected_from_rebinned_df, phik_from_hist2d\\n\",\n    \"from phik.statistics import get_dependent_frequency_estimates\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# get observed 2d histogram of two variables\\n\",\n    \"cols = [\\\"mileage\\\", \\\"car_size\\\"]\\n\",\n    \"icols = [\\\"mileage\\\"]\\n\",\n    \"observed = data[cols].hist2d(interval_cols=icols).values\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"0.768588829489185\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# default phik evaluation from observed distribution\\n\",\n    \"phik_value = phik_from_hist2d(observed)\\n\",\n    \"print (phik_value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"0.768588829489185\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# phik evaluation from an observed and expected distribution\\n\",\n    \"expected = get_dependent_frequency_estimates(observed)\\n\",\n    \"phik_value = phik_from_hist2d(observed=observed, expected=expected)\\n\",\n    \"print (phik_value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# one can also compare two datasets against each other, and get a full phik matrix that way.\\n\",\n    \"# this needs binned datasets though. \\n\",\n    \"# (the user needs to make sure the binnings of both datasets are identical.) \\n\",\n    \"data_binned, _ = auto_bin_data(data, interval_cols=interval_cols)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# here we are comparing data_binned against itself\\n\",\n    \"phik_matrix = phik_observed_vs_expected_from_rebinned_df(data_binned, data_binned)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age  area  mileage  car_size\\n\",\n       \"car_color         1.0         0.0   0.0      0.0       0.0\\n\",\n       \"driver_age        0.0         1.0   0.0      0.0       0.0\\n\",\n       \"area              0.0         0.0   1.0      0.0       0.0\\n\",\n       \"mileage           0.0         0.0   0.0      1.0       0.0\\n\",\n       \"car_size          0.0         0.0   0.0      0.0       1.0\"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# all off-diagonal entries are zero, meaning the all 2d distributions of both datasets are identical.\\n\",\n    \"# (by construction the diagonal is one.)\\n\",\n    \"phik_matrix\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Statistical significance of the correlation\\n\",\n    \"\\n\",\n    \"When assessing correlations it is good practise to evaluate both the correlation and the significance of the correlation: a large correlation may be statistically insignificant, and vice versa a small correlation may be very significant. For instance, scipy.stats.pearsonr returns both the pearson correlation and the p-value. Similarly, the phik package offers functionality the calculate a significance matrix. Significance is defined as:\\n\",\n    \"\\n\",\n    \"$$Z = \\\\Phi^{-1}(1-p)\\\\ ;\\\\quad \\\\Phi(z)=\\\\frac{1}{\\\\sqrt{2\\\\pi}} \\\\int_{-\\\\infty}^{z} e^{-t^{2}/2}\\\\,{\\\\rm d}t $$\\n\",\n    \"\\n\",\n    \"Several corrections to the 'standard' p-value calculation are taken into account, making the method more robust for low statistics and sparse data cases. The user is referred to our paper for more details.\\n\",\n    \"\\n\",\n    \"Due to the corrections, the significance calculation can take a few seconds.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>85.498655</td>\\n\",\n       \"      <td>19.836720</td>\\n\",\n       \"      <td>37.623764</td>\\n\",\n       \"      <td>-0.559532</td>\\n\",\n       \"      <td>-0.483387</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>19.836720</td>\\n\",\n       \"      <td>84.370542</td>\\n\",\n       \"      <td>1.852524</td>\\n\",\n       \"      <td>-0.572284</td>\\n\",\n       \"      <td>-0.459980</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>37.623764</td>\\n\",\n       \"      <td>1.852524</td>\\n\",\n       \"      <td>72.415600</td>\\n\",\n       \"      <td>-0.560672</td>\\n\",\n       \"      <td>-0.273138</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>-0.559532</td>\\n\",\n       \"      <td>-0.572284</td>\\n\",\n       \"      <td>-0.560672</td>\\n\",\n       \"      <td>91.262677</td>\\n\",\n       \"      <td>49.285368</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>-0.483387</td>\\n\",\n       \"      <td>-0.459980</td>\\n\",\n       \"      <td>-0.273138</td>\\n\",\n       \"      <td>49.285368</td>\\n\",\n       \"      <td>69.064056</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age       area    mileage   car_size\\n\",\n       \"car_color   85.498655   19.836720  37.623764  -0.559532  -0.483387\\n\",\n       \"driver_age  19.836720   84.370542   1.852524  -0.572284  -0.459980\\n\",\n       \"area        37.623764    1.852524  72.415600  -0.560672  -0.273138\\n\",\n       \"mileage     -0.559532   -0.572284  -0.560672  91.262677  49.285368\\n\",\n       \"car_size    -0.483387   -0.459980  -0.273138  49.285368  69.064056\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"significance_overview = data.significance_matrix(interval_cols=interval_cols)\\n\",\n    \"significance_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Specify binning per interval variable\\n\",\n    \"Binning can be set per interval variable individually. One can set the number of bins, or specify a list of bin edges. Note that the measure phik correlation is dependent on the chosen binning.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>85.480870</td>\\n\",\n       \"      <td>20.544400</td>\\n\",\n       \"      <td>37.613135</td>\\n\",\n       \"      <td>-0.214896</td>\\n\",\n       \"      <td>-0.447747</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>20.544400</td>\\n\",\n       \"      <td>83.344168</td>\\n\",\n       \"      <td>2.478032</td>\\n\",\n       \"      <td>-0.563892</td>\\n\",\n       \"      <td>-0.534263</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>37.613135</td>\\n\",\n       \"      <td>2.478032</td>\\n\",\n       \"      <td>72.428355</td>\\n\",\n       \"      <td>-0.309349</td>\\n\",\n       \"      <td>-0.260994</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>-0.214896</td>\\n\",\n       \"      <td>-0.563892</td>\\n\",\n       \"      <td>-0.309349</td>\\n\",\n       \"      <td>77.784086</td>\\n\",\n       \"      <td>47.010736</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>-0.447747</td>\\n\",\n       \"      <td>-0.534263</td>\\n\",\n       \"      <td>-0.260994</td>\\n\",\n       \"      <td>47.010736</td>\\n\",\n       \"      <td>69.081712</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age       area    mileage   car_size\\n\",\n       \"car_color   85.480870   20.544400  37.613135  -0.214896  -0.447747\\n\",\n       \"driver_age  20.544400   83.344168   2.478032  -0.563892  -0.534263\\n\",\n       \"area        37.613135    2.478032  72.428355  -0.309349  -0.260994\\n\",\n       \"mileage     -0.214896   -0.563892  -0.309349  77.784086  47.010736\\n\",\n       \"car_size    -0.447747   -0.534263  -0.260994  47.010736  69.081712\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\\n\",\n    \"significance_overview = data.significance_matrix(interval_cols=interval_cols, bins=bins)\\n\",\n    \"significance_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Specify significance method\\n\",\n    \"\\n\",\n    \"The recommended method to calculate the significance of the correlation is a hybrid approach, which uses the G-test statistic. The number of degrees of freedom and an analytical, empirical description of the $\\\\chi^2$ distribution are sed, based on Monte Carlo simulations. This method works well for both high as low statistics samples.\\n\",\n    \"\\n\",\n    \"Other approaches to calculate the significance are implemented:\\n\",\n    \"- asymptotic: fast, but over-estimates the number of degrees of freedom for low statistics samples, leading to erroneous values of the significance\\n\",\n    \"- MC: Many simulated samples are needed to accurately measure significances larger than 3, making this method computationally expensive.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>85.526574</td>\\n\",\n       \"      <td>19.681564</td>\\n\",\n       \"      <td>37.661844</td>\\n\",\n       \"      <td>-0.385023</td>\\n\",\n       \"      <td>-0.333340</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>19.681564</td>\\n\",\n       \"      <td>84.014654</td>\\n\",\n       \"      <td>1.742050</td>\\n\",\n       \"      <td>-0.947153</td>\\n\",\n       \"      <td>-0.793434</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>37.661844</td>\\n\",\n       \"      <td>1.742050</td>\\n\",\n       \"      <td>72.440209</td>\\n\",\n       \"      <td>-0.465002</td>\\n\",\n       \"      <td>-0.123678</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>-0.385023</td>\\n\",\n       \"      <td>-0.947153</td>\\n\",\n       \"      <td>-0.465002</td>\\n\",\n       \"      <td>91.301129</td>\\n\",\n       \"      <td>49.332305</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>-0.333340</td>\\n\",\n       \"      <td>-0.793434</td>\\n\",\n       \"      <td>-0.123678</td>\\n\",\n       \"      <td>49.332305</td>\\n\",\n       \"      <td>69.107448</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age       area    mileage   car_size\\n\",\n       \"car_color   85.526574   19.681564  37.661844  -0.385023  -0.333340\\n\",\n       \"driver_age  19.681564   84.014654   1.742050  -0.947153  -0.793434\\n\",\n       \"area        37.661844    1.742050  72.440209  -0.465002  -0.123678\\n\",\n       \"mileage     -0.385023   -0.947153  -0.465002  91.301129  49.332305\\n\",\n       \"car_size    -0.333340   -0.793434  -0.123678  49.332305  69.107448\"\n      ]\n     },\n     \"execution_count\": 19,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"significance_overview = data.significance_matrix(interval_cols=interval_cols, significance_method='asymptotic')\\n\",\n    \"significance_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Simulation method\\n\",\n    \"\\n\",\n    \"The chi2 of a contingency table is measured using a comparison of the expected frequencies with the true frequencies in a contingency table. The expected frequencies can be simulated in a variety of ways. The following methods are implemented:\\n\",\n    \"\\n\",\n    \" - multinominal: Only the total number of records is fixed. (default)\\n\",\n    \" - row_product_multinominal: The row totals fixed in the sampling.\\n\",\n    \" - col_product_multinominal: The column totals fixed in the sampling.\\n\",\n    \" - hypergeometric: Both the row or column totals are fixed in the sampling. (Note that this type of sampling is only available when row and column totals are integers, which is usually the case.)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# --- Warning, can be slow\\n\",\n    \"#     turned off here by default for unit testing purposes\\n\",\n    \"\\n\",\n    \"#significance_overview = data.significance_matrix(interval_cols=interval_cols, simulation_method='hypergeometric')\\n\",\n    \"#significance_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Expected frequencies\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from phik.simulation import sim_2d_data_patefield, sim_2d_product_multinominal, sim_2d_data\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>country_side</th>\\n\",\n       \"      <th>downtown</th>\\n\",\n       \"      <th>hills</th>\\n\",\n       \"      <th>suburbs</th>\\n\",\n       \"      <th>unpaved_roads</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"      <td>86.0</td>\\n\",\n       \"      <td>123.0</td>\\n\",\n       \"      <td>147.0</td>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>137.0</td>\\n\",\n       \"      <td>125.0</td>\\n\",\n       \"      <td>31.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>102.0</td>\\n\",\n       \"      <td>131.0</td>\\n\",\n       \"      <td>130.0</td>\\n\",\n       \"      <td>18.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>130.0</td>\\n\",\n       \"      <td>95.0</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"      <td>68.0</td>\\n\",\n       \"      <td>120.0</td>\\n\",\n       \"      <td>72.0</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>30.0</td>\\n\",\n       \"      <td>51.0</td>\\n\",\n       \"      <td>47.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"      <td>23.0</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"area        country_side  downtown  hills  suburbs  unpaved_roads\\n\",\n       \"driver_age                                                       \\n\",\n       \"1                   11.0      86.0  123.0    147.0           21.0\\n\",\n       \"2                    9.0      77.0  137.0    125.0           31.0\\n\",\n       \"3                    7.0     102.0  131.0    130.0           18.0\\n\",\n       \"4                   17.0      83.0  130.0     95.0           14.0\\n\",\n       \"5                   13.0      68.0  120.0     72.0            8.0\\n\",\n       \"6                    7.0      30.0   51.0     47.0            9.0\\n\",\n       \"7                    1.0      11.0   23.0     14.0            7.0\\n\",\n       \"8                    0.0       4.0    7.0      8.0            2.0\\n\",\n       \"9                    0.0       0.0    1.0      1.0            0.0\\n\",\n       \"10                   0.0       1.0    1.0      0.0            0.0\"\n      ]\n     },\n     \"execution_count\": 22,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"inputdata = data[['driver_age', 'area']].hist2d(interval_cols=['driver_age'])\\n\",\n    \"inputdata\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Multinominal\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"data total: 2000.0\\n\",\n      \"sim  total: 2000\\n\",\n      \"data row totals: [ 65. 462. 724. 639. 110.]\\n\",\n      \"sim  row totals: [ 75 468 748 586 123]\\n\",\n      \"data column totals: [388. 379. 388. 339. 281. 144.  56.  21.   2.   2.]\\n\",\n      \"sim  column totals: [378 380 375 335 281 164  59  25   1   2]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"simdata = sim_2d_data(inputdata.values)\\n\",\n    \"print('data total:', inputdata.sum().sum())\\n\",\n    \"print('sim  total:', simdata.sum().sum())\\n\",\n    \"print('data row totals:', inputdata.sum(axis=0).values)\\n\",\n    \"print('sim  row totals:', simdata.sum(axis=0))\\n\",\n    \"print('data column totals:', inputdata.sum(axis=1).values)\\n\",\n    \"print('sim  column totals:', simdata.sum(axis=1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### product multinominal\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {\n    \"scrolled\": false\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"data total: 2000.0\\n\",\n      \"sim  total: 2000\\n\",\n      \"data row totals: [ 65 462 724 639 110]\\n\",\n      \"sim  row totals: [ 65 462 724 639 110]\\n\",\n      \"data column totals: [388 379 388 339 281 144  56  21   2   2]\\n\",\n      \"sim  column totals: [399 353 415 349 272 139  45  22   4   2]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"simdata = sim_2d_product_multinominal(inputdata.values, axis=0)\\n\",\n    \"print('data total:', inputdata.sum().sum())\\n\",\n    \"print('sim  total:', simdata.sum().sum())\\n\",\n    \"print('data row totals:', inputdata.sum(axis=0).astype(int).values)\\n\",\n    \"print('sim  row totals:', simdata.sum(axis=0).astype(int))\\n\",\n    \"print('data column totals:', inputdata.sum(axis=1).astype(int).values)\\n\",\n    \"print('sim  column totals:', simdata.sum(axis=1).astype(int))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### hypergeometric (\\\"patefield\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"data total: 2000.0\\n\",\n      \"sim  total: 2000\\n\",\n      \"data row totals: [ 65 462 724 639 110]\\n\",\n      \"sim  row totals: [ 65 462 724 639 110]\\n\",\n      \"data column totals: [388 379 388 339 281 144  56  21   2   2]\\n\",\n      \"sim  column totals: [388 379 388 339 281 144  56  21   2   2]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# patefield simulation needs compiled c++ code.\\n\",\n    \"# only run this if the python binding to the (compiled) patefiled simulation function is found.\\n\",\n    \"try:\\n\",\n    \"    from phik.simcore import _sim_2d_data_patefield\\n\",\n    \"    CPP_SUPPORT = True\\n\",\n    \"except ImportError:\\n\",\n    \"    CPP_SUPPORT = False\\n\",\n    \"\\n\",\n    \"if CPP_SUPPORT:\\n\",\n    \"    simdata = sim_2d_data_patefield(inputdata.values)\\n\",\n    \"    print('data total:', inputdata.sum().sum())\\n\",\n    \"    print('sim  total:', simdata.sum().sum())\\n\",\n    \"    print('data row totals:', inputdata.sum(axis=0).astype(int).values)\\n\",\n    \"    print('sim  row totals:', simdata.sum(axis=0))\\n\",\n    \"    print('data column totals:', inputdata.sum(axis=1).astype(int).values)\\n\",\n    \"    print('sim  column totals:', simdata.sum(axis=1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Outlier significance\\n\",\n    \"\\n\",\n    \"The normal pearson correlation between two interval variables is easy to interpret. However, the phik correlation between two variables of mixed type is not always easy to interpret, especially when it concerns categorical variables. Therefore, functionality is provided to detect \\\"outliers\\\": excesses and deficits over the expected frequencies  in the contingency table of two variables. \\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Example 1: mileage versus car_size\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"For the categorical variable pair mileage - car_size we measured:\\n\",\n    \"\\n\",\n    \"$$\\\\phi_k = 0.77 \\\\, ,\\\\quad\\\\quad \\\\mathrm{significance} = 46.3$$\\n\",\n    \"\\n\",\n    \"Let's use the outlier significance functionality to gain a better understanding of this significance correlation between mileage and car size.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 26,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c0 = 'mileage'\\n\",\n    \"c1 = 'car_size'\\n\",\n    \"\\n\",\n    \"tmp_interval_cols = ['mileage']\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 27,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"      <th>S</th>\\n\",\n       \"      <th>XL</th>\\n\",\n       \"      <th>XS</th>\\n\",\n       \"      <th>XXL</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53.5_30047.0</th>\\n\",\n       \"      <td>6.882155</td>\\n\",\n       \"      <td>21.483476</td>\\n\",\n       \"      <td>18.076204</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>10.820863</td>\\n\",\n       \"      <td>-22.423985</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30047.0_60040.5</th>\\n\",\n       \"      <td>20.034528</td>\\n\",\n       \"      <td>-0.251737</td>\\n\",\n       \"      <td>-3.408409</td>\\n\",\n       \"      <td>2.534277</td>\\n\",\n       \"      <td>-1.973628</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>60040.5_90033.9</th>\\n\",\n       \"      <td>1.627610</td>\\n\",\n       \"      <td>-3.043497</td>\\n\",\n       \"      <td>-2.265809</td>\\n\",\n       \"      <td>10.215936</td>\\n\",\n       \"      <td>-1.246784</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>90033.9_120027.4</th>\\n\",\n       \"      <td>-3.711579</td>\\n\",\n       \"      <td>-3.827278</td>\\n\",\n       \"      <td>-2.885475</td>\\n\",\n       \"      <td>12.999048</td>\\n\",\n       \"      <td>-1.638288</td>\\n\",\n       \"      <td>-7.185622</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>120027.4_150020.9</th>\\n\",\n       \"      <td>-7.665861</td>\\n\",\n       \"      <td>-6.173001</td>\\n\",\n       \"      <td>-4.746762</td>\\n\",\n       \"      <td>9.629145</td>\\n\",\n       \"      <td>-2.841508</td>\\n\",\n       \"      <td>-0.504521</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>150020.9_180014.4</th>\\n\",\n       \"      <td>-7.533189</td>\\n\",\n       \"      <td>-6.063786</td>\\n\",\n       \"      <td>-4.660049</td>\\n\",\n       \"      <td>1.559370</td>\\n\",\n       \"      <td>-2.785049</td>\\n\",\n       \"      <td>6.765549</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>180014.4_210007.8</th>\\n\",\n       \"      <td>-5.541940</td>\\n\",\n       \"      <td>-4.425929</td>\\n\",\n       \"      <td>-3.360023</td>\\n\",\n       \"      <td>-4.802787</td>\\n\",\n       \"      <td>-1.942469</td>\\n\",\n       \"      <td>10.520540</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>210007.8_240001.3</th>\\n\",\n       \"      <td>-3.496905</td>\\n\",\n       \"      <td>-2.745103</td>\\n\",\n       \"      <td>-2.030802</td>\\n\",\n       \"      <td>-5.850529</td>\\n\",\n       \"      <td>-1.100873</td>\\n\",\n       \"      <td>8.723925</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>240001.3_269994.8</th>\\n\",\n       \"      <td>-5.275976</td>\\n\",\n       \"      <td>-4.207164</td>\\n\",\n       \"      <td>-3.186534</td>\\n\",\n       \"      <td>-8.616464</td>\\n\",\n       \"      <td>-1.830944</td>\\n\",\n       \"      <td>13.303101</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>269994.8_299988.2</th>\\n\",\n       \"      <td>-8.014016</td>\\n\",\n       \"      <td>-6.458253</td>\\n\",\n       \"      <td>-4.973240</td>\\n\",\n       \"      <td>-12.868389</td>\\n\",\n       \"      <td>-2.989055</td>\\n\",\n       \"      <td>20.992824</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"car_size                   L          M          S         XL         XS  \\\\\\n\",\n       \"53.5_30047.0        6.882155  21.483476  18.076204  -8.209536  10.820863   \\n\",\n       \"30047.0_60040.5    20.034528  -0.251737  -3.408409   2.534277  -1.973628   \\n\",\n       \"60040.5_90033.9     1.627610  -3.043497  -2.265809  10.215936  -1.246784   \\n\",\n       \"90033.9_120027.4   -3.711579  -3.827278  -2.885475  12.999048  -1.638288   \\n\",\n       \"120027.4_150020.9  -7.665861  -6.173001  -4.746762   9.629145  -2.841508   \\n\",\n       \"150020.9_180014.4  -7.533189  -6.063786  -4.660049   1.559370  -2.785049   \\n\",\n       \"180014.4_210007.8  -5.541940  -4.425929  -3.360023  -4.802787  -1.942469   \\n\",\n       \"210007.8_240001.3  -3.496905  -2.745103  -2.030802  -5.850529  -1.100873   \\n\",\n       \"240001.3_269994.8  -5.275976  -4.207164  -3.186534  -8.616464  -1.830944   \\n\",\n       \"269994.8_299988.2  -8.014016  -6.458253  -4.973240 -12.868389  -2.989055   \\n\",\n       \"\\n\",\n       \"car_size                 XXL  \\n\",\n       \"53.5_30047.0      -22.423985  \\n\",\n       \"30047.0_60040.5    -8.209536  \\n\",\n       \"60040.5_90033.9    -8.209536  \\n\",\n       \"90033.9_120027.4   -7.185622  \\n\",\n       \"120027.4_150020.9  -0.504521  \\n\",\n       \"150020.9_180014.4   6.765549  \\n\",\n       \"180014.4_210007.8  10.520540  \\n\",\n       \"210007.8_240001.3   8.723925  \\n\",\n       \"240001.3_269994.8  13.303101  \\n\",\n       \"269994.8_299988.2  20.992824  \"\n      ]\n     },\n     \"execution_count\": 27,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"outlier_signifs, binning_dict = data[[c0,c1]].outlier_significance_matrix(interval_cols=tmp_interval_cols, \\n\",\n    \"                                                                          retbins=True)\\n\",\n    \"outlier_signifs\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Specify binning per interval variable\\n\",\n    \"Binning can be set per interval variable individually. One can set the number of bins, or specify a list of bin edges. \\n\",\n    \"\\n\",\n    \"Note: in case a bin is created without any records this bin will be automatically dropped in the phik and (outlier) significance calculations. However, in the outlier significance calculation this will currently lead to an error as the number of provided bin edges does not match the number of bins anymore.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"      <th>S</th>\\n\",\n       \"      <th>XL</th>\\n\",\n       \"      <th>XS</th>\\n\",\n       \"      <th>XXL</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0.0_100.0</th>\\n\",\n       \"      <td>-0.223635</td>\\n\",\n       \"      <td>-0.153005</td>\\n\",\n       \"      <td>-0.096640</td>\\n\",\n       \"      <td>-0.504167</td>\\n\",\n       \"      <td>2.150837</td>\\n\",\n       \"      <td>-1.337308</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>100.0_1000.0</th>\\n\",\n       \"      <td>-0.742899</td>\\n\",\n       \"      <td>-0.533211</td>\\n\",\n       \"      <td>2.164954</td>\\n\",\n       \"      <td>-1.469996</td>\\n\",\n       \"      <td>5.704340</td>\\n\",\n       \"      <td>-3.272689</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1000.0_10000.0</th>\\n\",\n       \"      <td>-3.489668</td>\\n\",\n       \"      <td>3.499856</td>\\n\",\n       \"      <td>18.061724</td>\\n\",\n       \"      <td>-6.831062</td>\\n\",\n       \"      <td>11.617394</td>\\n\",\n       \"      <td>-13.063085</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10000.0_100000.0</th>\\n\",\n       \"      <td>25.086723</td>\\n\",\n       \"      <td>15.956527</td>\\n\",\n       \"      <td>-0.251877</td>\\n\",\n       \"      <td>5.162309</td>\\n\",\n       \"      <td>-3.896807</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>100000.0_1000000.0</th>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>-17.223164</td>\\n\",\n       \"      <td>-13.626621</td>\\n\",\n       \"      <td>-2.140870</td>\\n\",\n       \"      <td>-8.688844</td>\\n\",\n       \"      <td>44.933133</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"car_size                    L          M          S        XL         XS  \\\\\\n\",\n       \"0.0_100.0           -0.223635  -0.153005  -0.096640 -0.504167   2.150837   \\n\",\n       \"100.0_1000.0        -0.742899  -0.533211   2.164954 -1.469996   5.704340   \\n\",\n       \"1000.0_10000.0      -3.489668   3.499856  18.061724 -6.831062  11.617394   \\n\",\n       \"10000.0_100000.0    25.086723  15.956527  -0.251877  5.162309  -3.896807   \\n\",\n       \"100000.0_1000000.0  -8.209536 -17.223164 -13.626621 -2.140870  -8.688844   \\n\",\n       \"\\n\",\n       \"car_size                  XXL  \\n\",\n       \"0.0_100.0           -1.337308  \\n\",\n       \"100.0_1000.0        -3.272689  \\n\",\n       \"1000.0_10000.0     -13.063085  \\n\",\n       \"10000.0_100000.0    -8.209536  \\n\",\n       \"100000.0_1000000.0  44.933133  \"\n      ]\n     },\n     \"execution_count\": 28,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bins = [0,1E2, 1E3, 1E4, 1E5, 1E6]\\n\",\n    \"outlier_signifs, binning_dict = data[[c0,c1]].outlier_significance_matrix(interval_cols=tmp_interval_cols, \\n\",\n    \"                                                                          bins=bins, retbins=True)\\n\",\n    \"outlier_signifs\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Specify binning per interval variable -- dealing with underflow and overflow\\n\",\n    \"\\n\",\n    \"When specifying custom bins as situation can occur when the minimal (maximum) value in the data is smaller (larger) than the minimum (maximum) bin edge. Data points outside the specified range will be collected in the underflow (UF) and overflow (OF) bins. One can choose how to deal with these under/overflow bins, by setting the drop_underflow and drop_overflow variables.\\n\",\n    \"\\n\",\n    \"Note that the drop_underflow and drop_overflow options are also available for the calculation of the phik matrix and the significance matrix.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"      <th>S</th>\\n\",\n       \"      <th>XL</th>\\n\",\n       \"      <th>XS</th>\\n\",\n       \"      <th>XXL</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>100.0_1000.0</th>\\n\",\n       \"      <td>-0.742899</td>\\n\",\n       \"      <td>-0.533211</td>\\n\",\n       \"      <td>2.164954</td>\\n\",\n       \"      <td>-1.469996</td>\\n\",\n       \"      <td>5.704340</td>\\n\",\n       \"      <td>-3.272689</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1000.0_10000.0</th>\\n\",\n       \"      <td>-3.489668</td>\\n\",\n       \"      <td>3.499856</td>\\n\",\n       \"      <td>18.061724</td>\\n\",\n       \"      <td>-6.831062</td>\\n\",\n       \"      <td>11.617394</td>\\n\",\n       \"      <td>-13.063085</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10000.0_100000.0</th>\\n\",\n       \"      <td>25.086723</td>\\n\",\n       \"      <td>15.956527</td>\\n\",\n       \"      <td>-0.251877</td>\\n\",\n       \"      <td>5.162309</td>\\n\",\n       \"      <td>-3.896807</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>OF</th>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>-17.223164</td>\\n\",\n       \"      <td>-13.626621</td>\\n\",\n       \"      <td>-2.140870</td>\\n\",\n       \"      <td>-8.688844</td>\\n\",\n       \"      <td>44.933133</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>UF</th>\\n\",\n       \"      <td>-0.223635</td>\\n\",\n       \"      <td>-0.153005</td>\\n\",\n       \"      <td>-0.096640</td>\\n\",\n       \"      <td>-0.504167</td>\\n\",\n       \"      <td>2.150837</td>\\n\",\n       \"      <td>-1.337308</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"car_size                  L          M          S        XL         XS  \\\\\\n\",\n       \"100.0_1000.0      -0.742899  -0.533211   2.164954 -1.469996   5.704340   \\n\",\n       \"1000.0_10000.0    -3.489668   3.499856  18.061724 -6.831062  11.617394   \\n\",\n       \"10000.0_100000.0  25.086723  15.956527  -0.251877  5.162309  -3.896807   \\n\",\n       \"OF                -8.209536 -17.223164 -13.626621 -2.140870  -8.688844   \\n\",\n       \"UF                -0.223635  -0.153005  -0.096640 -0.504167   2.150837   \\n\",\n       \"\\n\",\n       \"car_size                XXL  \\n\",\n       \"100.0_1000.0      -3.272689  \\n\",\n       \"1000.0_10000.0   -13.063085  \\n\",\n       \"10000.0_100000.0  -8.209536  \\n\",\n       \"OF                44.933133  \\n\",\n       \"UF                -1.337308  \"\n      ]\n     },\n     \"execution_count\": 29,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bins = [1E2, 1E3, 1E4, 1E5]\\n\",\n    \"outlier_signifs, binning_dict = data[[c0,c1]].outlier_significance_matrix(interval_cols=tmp_interval_cols, \\n\",\n    \"                                                                          bins=bins, retbins=True, \\n\",\n    \"                                                                          drop_underflow=False,\\n\",\n    \"                                                                          drop_overflow=False)\\n\",\n    \"outlier_signifs\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Dealing with NaN's in the data\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Let's add some missing values to our data\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 30,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"data.loc[np.random.choice(range(len(data)), size=10), 'car_size'] = np.nan\\n\",\n    \"data.loc[np.random.choice(range(len(data)), size=10), 'mileage'] = np.nan\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Sometimes there can be information in the missing values and in which case you might want to consider the NaN values as a separate category. This can be achieved by setting the dropna argument to False.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 31,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"      <th>NaN</th>\\n\",\n       \"      <th>S</th>\\n\",\n       \"      <th>XL</th>\\n\",\n       \"      <th>XS</th>\\n\",\n       \"      <th>XXL</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>100.0_1000.0</th>\\n\",\n       \"      <td>-0.742899</td>\\n\",\n       \"      <td>-0.533211</td>\\n\",\n       \"      <td>-0.053620</td>\\n\",\n       \"      <td>2.185319</td>\\n\",\n       \"      <td>-1.467322</td>\\n\",\n       \"      <td>5.704340</td>\\n\",\n       \"      <td>-3.254118</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1000.0_10000.0</th>\\n\",\n       \"      <td>-3.489668</td>\\n\",\n       \"      <td>3.499856</td>\\n\",\n       \"      <td>1.632438</td>\\n\",\n       \"      <td>17.591610</td>\\n\",\n       \"      <td>-6.821511</td>\\n\",\n       \"      <td>11.617394</td>\\n\",\n       \"      <td>-13.000691</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10000.0_100000.0</th>\\n\",\n       \"      <td>24.909164</td>\\n\",\n       \"      <td>15.798682</td>\\n\",\n       \"      <td>-1.078812</td>\\n\",\n       \"      <td>-0.081242</td>\\n\",\n       \"      <td>4.943028</td>\\n\",\n       \"      <td>-3.875525</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>NaN</th>\\n\",\n       \"      <td>0.132649</td>\\n\",\n       \"      <td>0.488424</td>\\n\",\n       \"      <td>-0.073439</td>\\n\",\n       \"      <td>-0.455333</td>\\n\",\n       \"      <td>-0.132365</td>\\n\",\n       \"      <td>-0.211155</td>\\n\",\n       \"      <td>-0.012896</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>OF</th>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>-17.158980</td>\\n\",\n       \"      <td>-0.283391</td>\\n\",\n       \"      <td>-13.396642</td>\\n\",\n       \"      <td>-1.909226</td>\\n\",\n       \"      <td>-8.651800</td>\\n\",\n       \"      <td>43.560131</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>UF</th>\\n\",\n       \"      <td>-0.223635</td>\\n\",\n       \"      <td>-0.153005</td>\\n\",\n       \"      <td>-0.013130</td>\\n\",\n       \"      <td>-0.094218</td>\\n\",\n       \"      <td>-0.503051</td>\\n\",\n       \"      <td>2.150837</td>\\n\",\n       \"      <td>-1.328194</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"car_size                  L          M       NaN          S        XL  \\\\\\n\",\n       \"100.0_1000.0      -0.742899  -0.533211 -0.053620   2.185319 -1.467322   \\n\",\n       \"1000.0_10000.0    -3.489668   3.499856  1.632438  17.591610 -6.821511   \\n\",\n       \"10000.0_100000.0  24.909164  15.798682 -1.078812  -0.081242  4.943028   \\n\",\n       \"NaN                0.132649   0.488424 -0.073439  -0.455333 -0.132365   \\n\",\n       \"OF                -8.209536 -17.158980 -0.283391 -13.396642 -1.909226   \\n\",\n       \"UF                -0.223635  -0.153005 -0.013130  -0.094218 -0.503051   \\n\",\n       \"\\n\",\n       \"car_size                 XS        XXL  \\n\",\n       \"100.0_1000.0       5.704340  -3.254118  \\n\",\n       \"1000.0_10000.0    11.617394 -13.000691  \\n\",\n       \"10000.0_100000.0  -3.875525  -8.209536  \\n\",\n       \"NaN               -0.211155  -0.012896  \\n\",\n       \"OF                -8.651800  43.560131  \\n\",\n       \"UF                 2.150837  -1.328194  \"\n      ]\n     },\n     \"execution_count\": 31,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bins = [1E2, 1E3, 1E4, 1E5]\\n\",\n    \"outlier_signifs, binning_dict = data[[c0,c1]].outlier_significance_matrix(interval_cols=tmp_interval_cols, \\n\",\n    \"                                                                          bins=bins, retbins=True, \\n\",\n    \"                                                                          drop_underflow=False,\\n\",\n    \"                                                                          drop_overflow=False,\\n\",\n    \"                                                                          dropna=False)\\n\",\n    \"outlier_signifs\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Here OF and UF are the underflow and overflow bin of car_size, respectively.\\n\",\n    \"\\n\",\n    \"To just ignore records with missing values set dropna to True (default).\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 32,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"      <th>S</th>\\n\",\n       \"      <th>XL</th>\\n\",\n       \"      <th>XS</th>\\n\",\n       \"      <th>XXL</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>100.0_1000.0</th>\\n\",\n       \"      <td>-0.745805</td>\\n\",\n       \"      <td>-0.534179</td>\\n\",\n       \"      <td>2.177522</td>\\n\",\n       \"      <td>-1.473602</td>\\n\",\n       \"      <td>5.695755</td>\\n\",\n       \"      <td>-3.268662</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1000.0_10000.0</th>\\n\",\n       \"      <td>-3.451793</td>\\n\",\n       \"      <td>3.559705</td>\\n\",\n       \"      <td>17.674546</td>\\n\",\n       \"      <td>-6.770807</td>\\n\",\n       \"      <td>11.651568</td>\\n\",\n       \"      <td>-12.916946</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10000.0_100000.0</th>\\n\",\n       \"      <td>25.035896</td>\\n\",\n       \"      <td>15.868135</td>\\n\",\n       \"      <td>-0.121191</td>\\n\",\n       \"      <td>4.904070</td>\\n\",\n       \"      <td>-3.896177</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>OF</th>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>-17.164792</td>\\n\",\n       \"      <td>-13.459625</td>\\n\",\n       \"      <td>-1.934622</td>\\n\",\n       \"      <td>-8.695547</td>\\n\",\n       \"      <td>44.449479</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>UF</th>\\n\",\n       \"      <td>-0.224643</td>\\n\",\n       \"      <td>-0.153312</td>\\n\",\n       \"      <td>-0.095154</td>\\n\",\n       \"      <td>-0.505661</td>\\n\",\n       \"      <td>2.146765</td>\\n\",\n       \"      <td>-1.335316</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"car_size                  L          M          S        XL         XS  \\\\\\n\",\n       \"100.0_1000.0      -0.745805  -0.534179   2.177522 -1.473602   5.695755   \\n\",\n       \"1000.0_10000.0    -3.451793   3.559705  17.674546 -6.770807  11.651568   \\n\",\n       \"10000.0_100000.0  25.035896  15.868135  -0.121191  4.904070  -3.896177   \\n\",\n       \"OF                -8.209536 -17.164792 -13.459625 -1.934622  -8.695547   \\n\",\n       \"UF                -0.224643  -0.153312  -0.095154 -0.505661   2.146765   \\n\",\n       \"\\n\",\n       \"car_size                XXL  \\n\",\n       \"100.0_1000.0      -3.268662  \\n\",\n       \"1000.0_10000.0   -12.916946  \\n\",\n       \"10000.0_100000.0  -8.209536  \\n\",\n       \"OF                44.449479  \\n\",\n       \"UF                -1.335316  \"\n      ]\n     },\n     \"execution_count\": 32,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bins = [1E2, 1E3, 1E4, 1E5]\\n\",\n    \"outlier_signifs, binning_dict = data[[c0,c1]].outlier_significance_matrix(interval_cols=tmp_interval_cols, \\n\",\n    \"                                                                          bins=bins, retbins=True, \\n\",\n    \"                                                                          drop_underflow=False,\\n\",\n    \"                                                                          drop_overflow=False,\\n\",\n    \"                                                                          dropna=True)\\n\",\n    \"outlier_signifs\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Note that the dropna option is also available for the calculation of the phik matrix and the significance matrix.\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.8.8\"\n  },\n  \"pycharm\": {\n   \"stem_cell\": {\n    \"cell_type\": \"raw\",\n    \"metadata\": {\n     \"collapsed\": false\n    },\n    \"source\": []\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "phik/notebooks/phik_tutorial_basic.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Phi_K basic tutorial\\n\",\n    \"\\n\",\n    \"This notebook guides you through the basic functionality of the phik package. The package offers functionality on three related topics:\\n\",\n    \"\\n\",\n    \"1. Phik correlation matrix\\n\",\n    \"2. Significance matrix\\n\",\n    \"3. Outlier significance matrix\\n\",\n    \"\\n\",\n    \"For more information on the underlying theory, the user is referred to our paper.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%%capture\\n\",\n    \"# install phik (if not installed yet)\\n\",\n    \"import sys\\n\",\n    \"\\n\",\n    \"!\\\"{sys.executable}\\\" -m pip install phik\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# import standard packages\\n\",\n    \"import numpy as np\\n\",\n    \"import pandas as pd\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"import itertools\\n\",\n    \"\\n\",\n    \"import phik\\n\",\n    \"\\n\",\n    \"from phik import resources\\n\",\n    \"from phik.binning import bin_data\\n\",\n    \"from phik.report import plot_correlation_matrix\\n\",\n    \"\\n\",\n    \"%matplotlib inline\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# if one changes something in the phik-package one can automatically reload the package or module\\n\",\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Load data\\n\",\n    \"\\n\",\n    \"A simulated dataset is part of the phik-package. The dataset concerns fake car insurance data. Load the dataset here:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"data = pd.read_csv( resources.fixture('fake_insurance_data.csv.gz') )\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Take a first look at the data\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Let's use a simple data.head() to get an idea of what the data looks like and inspect the different types of variables.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>26.377219</td>\\n\",\n       \"      <td>suburbs</td>\\n\",\n       \"      <td>156806.288398</td>\\n\",\n       \"      <td>XXL</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>58.976840</td>\\n\",\n       \"      <td>suburbs</td>\\n\",\n       \"      <td>74400.323559</td>\\n\",\n       \"      <td>XL</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>multicolor</td>\\n\",\n       \"      <td>55.744988</td>\\n\",\n       \"      <td>downtown</td>\\n\",\n       \"      <td>267856.748015</td>\\n\",\n       \"      <td>XXL</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>metalic</td>\\n\",\n       \"      <td>57.629139</td>\\n\",\n       \"      <td>downtown</td>\\n\",\n       \"      <td>259028.249060</td>\\n\",\n       \"      <td>XXL</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>21.490637</td>\\n\",\n       \"      <td>downtown</td>\\n\",\n       \"      <td>110712.216080</td>\\n\",\n       \"      <td>XL</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"    car_color  driver_age      area        mileage car_size\\n\",\n       \"0       black   26.377219   suburbs  156806.288398      XXL\\n\",\n       \"1       black   58.976840   suburbs   74400.323559       XL\\n\",\n       \"2  multicolor   55.744988  downtown  267856.748015      XXL\\n\",\n       \"3     metalic   57.629139  downtown  259028.249060      XXL\\n\",\n       \"4       green   21.490637  downtown  110712.216080       XL\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data.head()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Specify bin types\\n\",\n    \"\\n\",\n    \"The phik-package offers a way to calculate correlations between variables of mixed types. Variable types can be inferred automatically although we recommend variable types to be specified by the user. \\n\",\n    \"\\n\",\n    \"Because interval type variables need to be binned in order to calculate phik and the significance, a list of interval variables is created.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['driver_age', 'mileage']\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data_types = {'severity': 'interval',\\n\",\n    \"             'driver_age':'interval',\\n\",\n    \"             'satisfaction':'ordinal',\\n\",\n    \"             'mileage':'interval',\\n\",\n    \"             'car_size':'ordinal',\\n\",\n    \"             'car_use':'ordinal',\\n\",\n    \"             'car_color':'categorical',\\n\",\n    \"             'area':'categorical'}\\n\",\n    \"\\n\",\n    \"interval_cols = [col for col, v in data_types.items() if v=='interval' and col in data.columns]\\n\",\n    \"interval_cols\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Visually inspect pairwise correlations\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Bin the interval variables\\n\",\n    \"\\n\",\n    \"To get a feeling for the data, let's bin the interval variables and create 2d histograms to inspect the correlations between variables. By binning the interval variables we can treat all variable types in the same way.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# bin the interval variables\\n\",\n    \"data_binned, binning_dict = bin_data(data, cols=interval_cols, retbins=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'driver_age': [(18.030700817879673, 28.34523864121504),\\n\",\n       \"  (28.34523864121504, 38.659776464550404),\\n\",\n       \"  (38.659776464550404, 48.974314287885775),\\n\",\n       \"  (48.974314287885775, 59.288852111221146),\\n\",\n       \"  (59.288852111221146, 69.60338993455652),\\n\",\n       \"  (69.60338993455652, 79.91792775789187),\\n\",\n       \"  (79.91792775789187, 90.23246558122725),\\n\",\n       \"  (90.23246558122725, 100.54700340456262),\\n\",\n       \"  (100.54700340456262, 110.86154122789799),\\n\",\n       \"  (110.86154122789799, 121.17607905123334)],\\n\",\n       \" 'mileage': [(53.54305708442213, 30047.010932306846),\\n\",\n       \"  (30047.010932306846, 60040.478807529274),\\n\",\n       \"  (60040.478807529274, 90033.94668275169),\\n\",\n       \"  (90033.94668275169, 120027.41455797412),\\n\",\n       \"  (120027.41455797412, 150020.88243319656),\\n\",\n       \"  (150020.88243319656, 180014.35030841897),\\n\",\n       \"  (180014.35030841897, 210007.81818364142),\\n\",\n       \"  (210007.81818364142, 240001.28605886383),\\n\",\n       \"  (240001.28605886383, 269994.75393408624),\\n\",\n       \"  (269994.75393408624, 299988.2218093087)]}\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"binning_dict\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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HpjpysvZBzsi+ovtmY44awZJ35V0d5ev7/Z3HhERVUn7GxHRvUE5haQbS3V2PNh+tnPBo1byvn2w/1FxQhERDWb7OOC4qvOIiBhs0v5GRDsYlCMwIiIiIiIiIqK9pANjhuclLQ1Qfn+h4nwiIiIiIiIiopQOjBmuodgWivL71RXmEhERERERERE1BmUHhqQLKfa+XlnS05K+QrGl09aSHgO2Lp93nv8EcAqwd3n+aj3EPlHS08D85bnHlOUblOW7AD+X9EDNNTcBlwJbldds2+CXHBEREREREdHWBuUinrY/382hrbo5f/gsxD4cOLxO+R3Ast1cs2lv40dEREREREQMRoNyBEZEREREREREtBfZrjqHtiTpL8A8XYq/aPu+/qi/o6PDEydO7I+qIqLJJE2y3VF1HtE7aX8jBo60v+0l7W/EwDG77e+gnELSCLY/VnUOEREREREREYNFOjDa2DZz7V51CnWNm3oR0Lr5wYwct55jl4oz6d610y8FYNt596g4k/rGvvVboD1+zyM+sG/FmXRvzItnV51CzIaxj3e7lnOfbLv8gwCs8JNTmhL/7wd/G4CNv/DjpsQHuO2CQwBY6+CfNCX+vT85GIBbn1yhKfEBPv7hvwOw7Q3fakr8sZv/FICVv9+cn9Ej/1v8jLb65I+aEh9g/HXfAZr/Gvrj9xztZZuNjq06hbrGTTgKgJErH1FxJt0b/UixR8HIpfarOJPujX7+TADW37c5bUtfTTq7aJu2XXCvmZxZnbGvjwLgjEc+WXEm3dt/5etm+9qsgRERERERERERLS8dGBERERERERHR8tKBEREREREREREtLx0YEREREREREdHy0oFRQ9JBku6X9ICkb5Vli0u6VtJj5ffFerh+CUnXSXpd0uldjq0v6T5Jf5V0miSV5ZtJulPSNEmfa+4rjIiIiIiIiGhP6cAoSVoD+BqwIbA28GlJKwJHAONtrwiML5935y3gf4FD6xw7E9gXWLH8GlGWPwXsDVzQ91cRERERERERMTClA2OGVYEJtt+0PQ24AdgJ2AEYVZ4zCtixuwC237B9M0VHxn9IWhpY2PZttg2c3xnH9hO27wWmN/oFRURERERERAwU6cCY4X5gs3IayPzAdsBywFK2nwUovy85G7E/BDxd8/zpsmyWSNpX0kRJEydPnjwbaURERERERES0p3RglGw/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\\n\",\n      \"text/plain\": [\n       \"<Figure size 1080x1152 with 12 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# plot each variable pair\\n\",\n    \"plt.rc('text', usetex=False)\\n\",\n    \"\\n\",\n    \"n=0\\n\",\n    \"for i in range(len(data.columns)):\\n\",\n    \"    n=n+i\\n\",\n    \"    \\n\",\n    \"ncols=3\\n\",\n    \"nrows=int(np.ceil(n/ncols))\\n\",\n    \"fig, axes = plt.subplots(nrows, ncols, figsize=(15,4*nrows))\\n\",\n    \"ndecimals = 0\\n\",\n    \"\\n\",\n    \"for i, comb in enumerate(itertools.combinations(data_binned.columns.values, 2)):\\n\",\n    \"    \\n\",\n    \"    c = int(i%ncols)\\n\",\n    \"    r = int((i-c)/ncols )\\n\",\n    \"\\n\",\n    \"    # get data\\n\",\n    \"    c0, c1 = comb\\n\",\n    \"    datahist = data_binned.groupby([c0,c1])[c0].count().to_frame().unstack().fillna(0)\\n\",\n    \"    datahist.columns = datahist.columns.droplevel()\\n\",\n    \"    \\n\",\n    \"    # plot data\\n\",\n    \"    img = axes[r][c].pcolormesh(datahist.values, edgecolor='w', linewidth=1)\\n\",\n    \"    \\n\",\n    \"    # axis ticks and tick labels\\n\",\n    \"    if c0 in binning_dict.keys():\\n\",\n    \"        ylabels = ['{1:.{0}f}_{2:.{0}f}'.format(ndecimals, binning_dict[c0][i][0], binning_dict[c0][i][1])\\n\",\n    \"                   for i in range(len(binning_dict[c0]))]\\n\",\n    \"    else:\\n\",\n    \"        ylabels = datahist.index\\n\",\n    \"\\n\",\n    \"    if c1 in binning_dict.keys():        \\n\",\n    \"        xlabels = ['{1:.{0}f}_{2:.{0}f}'.format(ndecimals, binning_dict[c1][i][0], binning_dict[c1][i][1])\\n\",\n    \"                    for i in range(len(binning_dict[c1]))]\\n\",\n    \"    else:\\n\",\n    \"        xlabels = datahist.columns\\n\",\n    \"    \\n\",\n    \"    # axis labels\\n\",\n    \"    axes[r][c].set_yticks(np.arange(len(ylabels)) + 0.5)\\n\",\n    \"    axes[r][c].set_xticks(np.arange(len(xlabels)) + 0.5)\\n\",\n    \"    axes[r][c].set_xticklabels(xlabels, rotation='vertical')\\n\",\n    \"    axes[r][c].set_yticklabels(ylabels, rotation='horizontal')    \\n\",\n    \"    axes[r][c].set_xlabel(datahist.columns.name)\\n\",\n    \"    axes[r][c].set_ylabel(datahist.index.name)    \\n\",\n    \"    axes[r][c].set_title('data')\\n\",\n    \"    \\n\",\n    \"plt.tight_layout()\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Correlation: mileage vs car_size\\n\",\n    \"\\n\",\n    \"From the above plots it seems like there might be an interesting a correlation between mileage and car_size. Let's see what phik correlation is measured for this data.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"phik         =  0.77\\n\",\n      \"significance = 49.22\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"x, y = data[['mileage', 'car_size']].T.values\\n\",\n    \"\\n\",\n    \"print('phik         =  %.2f'%phik.phik_from_array(x, y, num_vars=['x']))\\n\",\n    \"print('significance = %.2f'%phik.significance_from_array(x, y, num_vars=['x'])[1])\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Indeed there is a correlation between these variables and the correlation is also significant. To better understand the correlation, we can have a look at the significance of excesses and deficits in the 2-dimensional contingency table, so-called \\\"outlier significances\\\".\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"      <th>S</th>\\n\",\n       \"      <th>XL</th>\\n\",\n       \"      <th>XS</th>\\n\",\n       \"      <th>XXL</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53.5_30047.0</th>\\n\",\n       \"      <td>6.882155</td>\\n\",\n       \"      <td>21.483476</td>\\n\",\n       \"      <td>18.076204</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>10.820863</td>\\n\",\n       \"      <td>-22.423985</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30047.0_60040.5</th>\\n\",\n       \"      <td>20.034528</td>\\n\",\n       \"      <td>-0.251737</td>\\n\",\n       \"      <td>-3.408409</td>\\n\",\n       \"      <td>2.534277</td>\\n\",\n       \"      <td>-1.973628</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>60040.5_90033.9</th>\\n\",\n       \"      <td>1.627610</td>\\n\",\n       \"      <td>-3.043497</td>\\n\",\n       \"      <td>-2.265809</td>\\n\",\n       \"      <td>10.215936</td>\\n\",\n       \"      <td>-1.246784</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>90033.9_120027.4</th>\\n\",\n       \"      <td>-3.711579</td>\\n\",\n       \"      <td>-3.827278</td>\\n\",\n       \"      <td>-2.885475</td>\\n\",\n       \"      <td>12.999048</td>\\n\",\n       \"      <td>-1.638288</td>\\n\",\n       \"      <td>-7.185622</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>120027.4_150020.9</th>\\n\",\n       \"      <td>-7.665861</td>\\n\",\n       \"      <td>-6.173001</td>\\n\",\n       \"      <td>-4.746762</td>\\n\",\n       \"      <td>9.629145</td>\\n\",\n       \"      <td>-2.841508</td>\\n\",\n       \"      <td>-0.504521</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>150020.9_180014.4</th>\\n\",\n       \"      <td>-7.533189</td>\\n\",\n       \"      <td>-6.063786</td>\\n\",\n       \"      <td>-4.660049</td>\\n\",\n       \"      <td>1.559370</td>\\n\",\n       \"      <td>-2.785049</td>\\n\",\n       \"      <td>6.765549</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>180014.4_210007.8</th>\\n\",\n       \"      <td>-5.541940</td>\\n\",\n       \"      <td>-4.425929</td>\\n\",\n       \"      <td>-3.360023</td>\\n\",\n       \"      <td>-4.802787</td>\\n\",\n       \"      <td>-1.942469</td>\\n\",\n       \"      <td>10.520540</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>210007.8_240001.3</th>\\n\",\n       \"      <td>-3.496905</td>\\n\",\n       \"      <td>-2.745103</td>\\n\",\n       \"      <td>-2.030802</td>\\n\",\n       \"      <td>-5.850529</td>\\n\",\n       \"      <td>-1.100873</td>\\n\",\n       \"      <td>8.723925</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>240001.3_269994.8</th>\\n\",\n       \"      <td>-5.275976</td>\\n\",\n       \"      <td>-4.207164</td>\\n\",\n       \"      <td>-3.186534</td>\\n\",\n       \"      <td>-8.616464</td>\\n\",\n       \"      <td>-1.830944</td>\\n\",\n       \"      <td>13.303101</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>269994.8_299988.2</th>\\n\",\n       \"      <td>-8.014016</td>\\n\",\n       \"      <td>-6.458253</td>\\n\",\n       \"      <td>-4.973240</td>\\n\",\n       \"      <td>-12.868389</td>\\n\",\n       \"      <td>-2.989055</td>\\n\",\n       \"      <td>20.992824</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"y                          L          M          S         XL         XS  \\\\\\n\",\n       \"53.5_30047.0        6.882155  21.483476  18.076204  -8.209536  10.820863   \\n\",\n       \"30047.0_60040.5    20.034528  -0.251737  -3.408409   2.534277  -1.973628   \\n\",\n       \"60040.5_90033.9     1.627610  -3.043497  -2.265809  10.215936  -1.246784   \\n\",\n       \"90033.9_120027.4   -3.711579  -3.827278  -2.885475  12.999048  -1.638288   \\n\",\n       \"120027.4_150020.9  -7.665861  -6.173001  -4.746762   9.629145  -2.841508   \\n\",\n       \"150020.9_180014.4  -7.533189  -6.063786  -4.660049   1.559370  -2.785049   \\n\",\n       \"180014.4_210007.8  -5.541940  -4.425929  -3.360023  -4.802787  -1.942469   \\n\",\n       \"210007.8_240001.3  -3.496905  -2.745103  -2.030802  -5.850529  -1.100873   \\n\",\n       \"240001.3_269994.8  -5.275976  -4.207164  -3.186534  -8.616464  -1.830944   \\n\",\n       \"269994.8_299988.2  -8.014016  -6.458253  -4.973240 -12.868389  -2.989055   \\n\",\n       \"\\n\",\n       \"y                        XXL  \\n\",\n       \"53.5_30047.0      -22.423985  \\n\",\n       \"30047.0_60040.5    -8.209536  \\n\",\n       \"60040.5_90033.9    -8.209536  \\n\",\n       \"90033.9_120027.4   -7.185622  \\n\",\n       \"120027.4_150020.9  -0.504521  \\n\",\n       \"150020.9_180014.4   6.765549  \\n\",\n       \"180014.4_210007.8  10.520540  \\n\",\n       \"210007.8_240001.3   8.723925  \\n\",\n       \"240001.3_269994.8  13.303101  \\n\",\n       \"269994.8_299988.2  20.992824  \"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"phik.outlier_significance_from_array(x, y, num_vars=['x'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The values displayed in the matrix are the significances of the outlier frequencies, i.e. a large value means that the measured frequency for that bin is significantly different from the expected frequency in that bin.\\n\",\n    \"\\n\",\n    \"Let's visualise for easier interpretation.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x360 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"outlier_signifs = phik.outlier_significance_from_array(x, y, num_vars=['x'])\\n\",\n    \"\\n\",\n    \"zvalues = outlier_signifs.values\\n\",\n    \"xlabels = outlier_signifs.columns\\n\",\n    \"ylabels = outlier_signifs.index\\n\",\n    \"xlabel = 'x'\\n\",\n    \"ylabel = 'y'\\n\",\n    \"\\n\",\n    \"plot_correlation_matrix(zvalues, x_labels=xlabels, y_labels=ylabels, \\n\",\n    \"                        x_label=xlabel,y_label=ylabel,\\n\",\n    \"                        vmin=-5, vmax=5, title='outlier significance',\\n\",\n    \"                        identity_layout=False, fontsize_factor=1.2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# $\\\\phi_k$ functions for dataframes\\n\",\n    \"\\n\",\n    \"In our data we have 5 different columns, meaning we have to evaluate 4+3+2+1=10 pairs of variables for possible correlations. In a large dataset, with many different variables, this can easily become a cumbersome task. Can we do this more efficient? yes! We have provided functions that work on dataframes, to allow you to calculate the phik correlation, significance and outlier significance for all different variable combinations at once.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The functions are by default available after import of the phik package.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# $\\\\phi_k$ correlation matrix\\n\",\n    \"\\n\",\n    \"Now let's start calculating the phik correlation coefficient between pairs of variables. \\n\",\n    \"\\n\",\n    \"Note that the original dataset is used as input, the binning of interval variables is done automatically.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.389671</td>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>0.389671</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.105506</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.105506</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.768589</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.768589</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age      area   mileage  car_size\\n\",\n       \"car_color    1.000000    0.389671  0.590456  0.000000  0.000000\\n\",\n       \"driver_age   0.389671    1.000000  0.105506  0.000000  0.000000\\n\",\n       \"area         0.590456    0.105506  1.000000  0.000000  0.000000\\n\",\n       \"mileage      0.000000    0.000000  0.000000  1.000000  0.768589\\n\",\n       \"car_size     0.000000    0.000000  0.000000  0.768589  1.000000\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"phik_overview = data.phik_matrix(interval_cols=interval_cols)\\n\",\n    \"phik_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"When no interval columns are provided, the code makes an educated guess\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"interval columns not set, guessing: ['driver_age', 'mileage']\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.389671</td>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>0.389671</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.105506</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.105506</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.768589</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.768589</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age      area   mileage  car_size\\n\",\n       \"car_color    1.000000    0.389671  0.590456  0.000000  0.000000\\n\",\n       \"driver_age   0.389671    1.000000  0.105506  0.000000  0.000000\\n\",\n       \"area         0.590456    0.105506  1.000000  0.000000  0.000000\\n\",\n       \"mileage      0.000000    0.000000  0.000000  1.000000  0.768589\\n\",\n       \"car_size     0.000000    0.000000  0.000000  0.768589  1.000000\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data.phik_matrix()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x396 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plot_correlation_matrix(phik_overview.values, x_labels=phik_overview.columns, y_labels=phik_overview.index, \\n\",\n    \"                        vmin=0, vmax=1, color_map='Blues', title=r'correlation $\\\\phi_K$', fontsize_factor=1.5,\\n\",\n    \"                        figsize=(7,5.5))\\n\",\n    \"plt.tight_layout()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Global correlation: $g_k$\\n\",\n    \"\\n\",\n    \"The global correlation coefficient is a measure of the total correlation of one variable to all other variables in the dataset. They give an indication of how well on variable can be modelled in terms of the other variables. A calculation of the global correlation coefficient is provided within the phik package.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"car_color 0.6760316805291614\\n\",\n      \"driver_age 0.41913014836289686\\n\",\n      \"area 0.6057526929030086\\n\",\n      \"mileage 0.7685888294891848\\n\",\n      \"car_size 0.7685888294891848\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"global_correlation, global_labels = data.global_phik(interval_cols=interval_cols)\\n\",\n    \"for c, l in zip(global_correlation, global_labels):\\n\",\n    \"    print(l, c[0])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 252x288 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plot_correlation_matrix(global_correlation, x_labels=[''], y_labels=global_labels, \\n\",\n    \"                        vmin=0, vmax=1, figsize=(3.5,4),\\n\",\n    \"                        color_map='Blues', title=r'$g_k$',\\n\",\n    \"                        fontsize_factor=1.5)\\n\",\n    \"plt.tight_layout()\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Statistical significance of the correlation: $Z$-score\\n\",\n    \"\\n\",\n    \"When assessing correlations it is good practise to evaluate both the correlation and the significance of the correlation: a large correlation may be statistically insignificant, and vice versa a small correlation may be very significant. For instance, scipy.stats.pearsonr returns both the pearson correlation and the p-value. Similarly, the phik package offers functionality the calculate a significance matrix. Significance is defined as:\\n\",\n    \"\\n\",\n    \"$$Z = \\\\Phi^{-1}(1-p)\\\\ ;\\\\quad \\\\Phi(z)=\\\\frac{1}{\\\\sqrt{2\\\\pi}} \\\\int_{-\\\\infty}^{z} e^{-t^{2}/2}\\\\,{\\\\rm d}t $$\\n\",\n    \"\\n\",\n    \"Several corrections to the 'standard' p-value calculation are taken into account, making the method more robust for low statistics and sparse data cases. The user is referred to our paper for more details.\\n\",\n    \"\\n\",\n    \"As a result, the calculation may take a few seconds.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>85.454073</td>\\n\",\n       \"      <td>19.839441</td>\\n\",\n       \"      <td>37.584186</td>\\n\",\n       \"      <td>-0.622065</td>\\n\",\n       \"      <td>-0.620222</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>19.839441</td>\\n\",\n       \"      <td>84.331822</td>\\n\",\n       \"      <td>1.814443</td>\\n\",\n       \"      <td>-0.679303</td>\\n\",\n       \"      <td>-0.509666</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>37.584186</td>\\n\",\n       \"      <td>1.814443</td>\\n\",\n       \"      <td>72.420956</td>\\n\",\n       \"      <td>-0.666399</td>\\n\",\n       \"      <td>-0.361338</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>-0.622065</td>\\n\",\n       \"      <td>-0.679303</td>\\n\",\n       \"      <td>-0.666399</td>\\n\",\n       \"      <td>91.229648</td>\\n\",\n       \"      <td>49.233473</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>-0.620222</td>\\n\",\n       \"      <td>-0.509666</td>\\n\",\n       \"      <td>-0.361338</td>\\n\",\n       \"      <td>49.233473</td>\\n\",\n       \"      <td>69.041094</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age       area    mileage   car_size\\n\",\n       \"car_color   85.454073   19.839441  37.584186  -0.622065  -0.620222\\n\",\n       \"driver_age  19.839441   84.331822   1.814443  -0.679303  -0.509666\\n\",\n       \"area        37.584186    1.814443  72.420956  -0.666399  -0.361338\\n\",\n       \"mileage     -0.622065   -0.679303  -0.666399  91.229648  49.233473\\n\",\n       \"car_size    -0.620222   -0.509666  -0.361338  49.233473  69.041094\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"significance_overview = data.significance_matrix(interval_cols=interval_cols)\\n\",\n    \"significance_overview\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x396 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plot_correlation_matrix(significance_overview.fillna(0).values, x_labels=significance_overview.columns, \\n\",\n    \"                        y_labels=significance_overview.index, vmin=-5, vmax=5, title='significance', \\n\",\n    \"                        usetex=False, fontsize_factor=1.5, figsize=(7,5.5))\\n\",\n    \"plt.tight_layout()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Outlier significance\\n\",\n    \"\\n\",\n    \"The normal pearson correlation between two interval variables is easy to interpret. However, the phik correlation between two variables of mixed type is not always easy to interpret, especially when it concerns categorical variables. Therefore, functionality is provided to detect \\\"outliers\\\": excesses and deficits over the expected frequencies in the contingency table of two variables. \\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Example 1: car_color versus area\\n\",\n    \"\\n\",\n    \"For the categorical variable pair car_color - area we measured:\\n\",\n    \"\\n\",\n    \"$$\\\\phi_k = 0.59 \\\\, ,\\\\quad\\\\quad \\\\mathrm{significance} = 37.6$$\\n\",\n    \"\\n\",\n    \"Let's use the outlier significance functionality to gain a better understanding of the significance correlation between car color and area.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c1 = 'car_color'\\n\",\n    \"c0 = 'area'\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>black</th>\\n\",\n       \"      <th>blue</th>\\n\",\n       \"      <th>gray</th>\\n\",\n       \"      <th>green</th>\\n\",\n       \"      <th>metalic</th>\\n\",\n       \"      <th>multicolor</th>\\n\",\n       \"      <th>red</th>\\n\",\n       \"      <th>white</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>country_side</th>\\n\",\n       \"      <td>-5.636485</td>\\n\",\n       \"      <td>-5.277175</td>\\n\",\n       \"      <td>-1.688032</td>\\n\",\n       \"      <td>5.824664</td>\\n\",\n       \"      <td>6.506020</td>\\n\",\n       \"      <td>0.092630</td>\\n\",\n       \"      <td>-2.282290</td>\\n\",\n       \"      <td>-1.193468</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>downtown</th>\\n\",\n       \"      <td>-16.444319</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>3.450521</td>\\n\",\n       \"      <td>14.176441</td>\\n\",\n       \"      <td>12.238785</td>\\n\",\n       \"      <td>2.582260</td>\\n\",\n       \"      <td>-3.863796</td>\\n\",\n       \"      <td>-4.400847</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>hills</th>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>3.054306</td>\\n\",\n       \"      <td>9.244711</td>\\n\",\n       \"      <td>-2.097600</td>\\n\",\n       \"      <td>-3.022553</td>\\n\",\n       \"      <td>4.789665</td>\\n\",\n       \"      <td>2.695864</td>\\n\",\n       \"      <td>-1.092375</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>suburbs</th>\\n\",\n       \"      <td>19.533221</td>\\n\",\n       \"      <td>8.315558</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>-6.529846</td>\\n\",\n       \"      <td>1.667814</td>\\n\",\n       \"      <td>3.964555</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>unpaved_roads</th>\\n\",\n       \"      <td>13.043553</td>\\n\",\n       \"      <td>-1.776804</td>\\n\",\n       \"      <td>-6.095289</td>\\n\",\n       \"      <td>-5.532779</td>\\n\",\n       \"      <td>-4.566500</td>\\n\",\n       \"      <td>-3.829519</td>\\n\",\n       \"      <td>-1.339881</td>\\n\",\n       \"      <td>1.074386</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"car_color          black      blue      gray      green    metalic  \\\\\\n\",\n       \"area                                                                 \\n\",\n       \"country_side   -5.636485 -5.277175 -1.688032   5.824664   6.506020   \\n\",\n       \"downtown      -16.444319 -8.209536  3.450521  14.176441  12.238785   \\n\",\n       \"hills          -8.209536  3.054306  9.244711  -2.097600  -3.022553   \\n\",\n       \"suburbs        19.533221  8.315558 -8.209536  -8.209536  -8.209536   \\n\",\n       \"unpaved_roads  13.043553 -1.776804 -6.095289  -5.532779  -4.566500   \\n\",\n       \"\\n\",\n       \"car_color      multicolor       red     white  \\n\",\n       \"area                                           \\n\",\n       \"country_side     0.092630 -2.282290 -1.193468  \\n\",\n       \"downtown         2.582260 -3.863796 -4.400847  \\n\",\n       \"hills            4.789665  2.695864 -1.092375  \\n\",\n       \"suburbs         -6.529846  1.667814  3.964555  \\n\",\n       \"unpaved_roads   -3.829519 -1.339881  1.074386  \"\n      ]\n     },\n     \"execution_count\": 20,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"outlier_signifs, binning_dict = data[[c0,c1]].outlier_significance_matrix(retbins=True)\\n\",\n    \"outlier_signifs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x360 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"zvalues = outlier_signifs.values\\n\",\n    \"xlabels = binning_dict[c1] if c1 in binning_dict.keys() else outlier_signifs.columns\\n\",\n    \"ylabels = binning_dict[c0] if c0 in binning_dict.keys() else outlier_signifs.index\\n\",\n    \"xlabel = c1\\n\",\n    \"ylabel = c0\\n\",\n    \"\\n\",\n    \"plot_correlation_matrix(zvalues, x_labels=xlabels, y_labels=ylabels, \\n\",\n    \"                        x_label=xlabel,y_label=ylabel,\\n\",\n    \"                        vmin=-5, vmax=5, title='outlier significance',\\n\",\n    \"                        identity_layout=False, fontsize_factor=1.2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The significance of each cell is expressed in terms of Z (one-sided).\\n\",\n    \"\\n\",\n    \"Interesting, owners of a green car are more likely to live in the country side, and black cars are more likely to travel on unpaved roads!\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Example 2: mileage versus car_size\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"For the categorical variable pair mileage - car_size we measured:\\n\",\n    \"\\n\",\n    \"$$\\\\phi_k = 0.77 \\\\, ,\\\\quad\\\\quad \\\\mathrm{significance} = 46.3$$\\n\",\n    \"\\n\",\n    \"Let's use the outlier significance functionality to gain a better understanding of this significance correlation between mileage and car size.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c0 = 'mileage'\\n\",\n    \"c1 = 'car_size'\\n\",\n    \"\\n\",\n    \"tmp_interval_cols = ['mileage']\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"      <th>S</th>\\n\",\n       \"      <th>XL</th>\\n\",\n       \"      <th>XS</th>\\n\",\n       \"      <th>XXL</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53.5_30047.0</th>\\n\",\n       \"      <td>6.882155</td>\\n\",\n       \"      <td>21.483476</td>\\n\",\n       \"      <td>18.076204</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"      <td>10.820863</td>\\n\",\n       \"      <td>-22.423985</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30047.0_60040.5</th>\\n\",\n       \"      <td>20.034528</td>\\n\",\n       \"      <td>-0.251737</td>\\n\",\n       \"      <td>-3.408409</td>\\n\",\n       \"      <td>2.534277</td>\\n\",\n       \"      <td>-1.973628</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>60040.5_90033.9</th>\\n\",\n       \"      <td>1.627610</td>\\n\",\n       \"      <td>-3.043497</td>\\n\",\n       \"      <td>-2.265809</td>\\n\",\n       \"      <td>10.215936</td>\\n\",\n       \"      <td>-1.246784</td>\\n\",\n       \"      <td>-8.209536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>90033.9_120027.4</th>\\n\",\n       \"      <td>-3.711579</td>\\n\",\n       \"      <td>-3.827278</td>\\n\",\n       \"      <td>-2.885475</td>\\n\",\n       \"      <td>12.999048</td>\\n\",\n       \"      <td>-1.638288</td>\\n\",\n       \"      <td>-7.185622</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>120027.4_150020.9</th>\\n\",\n       \"      <td>-7.665861</td>\\n\",\n       \"      <td>-6.173001</td>\\n\",\n       \"      <td>-4.746762</td>\\n\",\n       \"      <td>9.629145</td>\\n\",\n       \"      <td>-2.841508</td>\\n\",\n       \"      <td>-0.504521</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>150020.9_180014.4</th>\\n\",\n       \"      <td>-7.533189</td>\\n\",\n       \"      <td>-6.063786</td>\\n\",\n       \"      <td>-4.660049</td>\\n\",\n       \"      <td>1.559370</td>\\n\",\n       \"      <td>-2.785049</td>\\n\",\n       \"      <td>6.765549</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>180014.4_210007.8</th>\\n\",\n       \"      <td>-5.541940</td>\\n\",\n       \"      <td>-4.425929</td>\\n\",\n       \"      <td>-3.360023</td>\\n\",\n       \"      <td>-4.802787</td>\\n\",\n       \"      <td>-1.942469</td>\\n\",\n       \"      <td>10.520540</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>210007.8_240001.3</th>\\n\",\n       \"      <td>-3.496905</td>\\n\",\n       \"      <td>-2.745103</td>\\n\",\n       \"      <td>-2.030802</td>\\n\",\n       \"      <td>-5.850529</td>\\n\",\n       \"      <td>-1.100873</td>\\n\",\n       \"      <td>8.723925</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>240001.3_269994.8</th>\\n\",\n       \"      <td>-5.275976</td>\\n\",\n       \"      <td>-4.207164</td>\\n\",\n       \"      <td>-3.186534</td>\\n\",\n       \"      <td>-8.616464</td>\\n\",\n       \"      <td>-1.830944</td>\\n\",\n       \"      <td>13.303101</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>269994.8_299988.2</th>\\n\",\n       \"      <td>-8.014016</td>\\n\",\n       \"      <td>-6.458253</td>\\n\",\n       \"      <td>-4.973240</td>\\n\",\n       \"      <td>-12.868389</td>\\n\",\n       \"      <td>-2.989055</td>\\n\",\n       \"      <td>20.992824</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"car_size                   L          M          S         XL         XS  \\\\\\n\",\n       \"53.5_30047.0        6.882155  21.483476  18.076204  -8.209536  10.820863   \\n\",\n       \"30047.0_60040.5    20.034528  -0.251737  -3.408409   2.534277  -1.973628   \\n\",\n       \"60040.5_90033.9     1.627610  -3.043497  -2.265809  10.215936  -1.246784   \\n\",\n       \"90033.9_120027.4   -3.711579  -3.827278  -2.885475  12.999048  -1.638288   \\n\",\n       \"120027.4_150020.9  -7.665861  -6.173001  -4.746762   9.629145  -2.841508   \\n\",\n       \"150020.9_180014.4  -7.533189  -6.063786  -4.660049   1.559370  -2.785049   \\n\",\n       \"180014.4_210007.8  -5.541940  -4.425929  -3.360023  -4.802787  -1.942469   \\n\",\n       \"210007.8_240001.3  -3.496905  -2.745103  -2.030802  -5.850529  -1.100873   \\n\",\n       \"240001.3_269994.8  -5.275976  -4.207164  -3.186534  -8.616464  -1.830944   \\n\",\n       \"269994.8_299988.2  -8.014016  -6.458253  -4.973240 -12.868389  -2.989055   \\n\",\n       \"\\n\",\n       \"car_size                 XXL  \\n\",\n       \"53.5_30047.0      -22.423985  \\n\",\n       \"30047.0_60040.5    -8.209536  \\n\",\n       \"60040.5_90033.9    -8.209536  \\n\",\n       \"90033.9_120027.4   -7.185622  \\n\",\n       \"120027.4_150020.9  -0.504521  \\n\",\n       \"150020.9_180014.4   6.765549  \\n\",\n       \"180014.4_210007.8  10.520540  \\n\",\n       \"210007.8_240001.3   8.723925  \\n\",\n       \"240001.3_269994.8  13.303101  \\n\",\n       \"269994.8_299988.2  20.992824  \"\n      ]\n     },\n     \"execution_count\": 23,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"outlier_signifs, binning_dict = data[[c0,c1]].outlier_significance_matrix(interval_cols=tmp_interval_cols, \\n\",\n    \"                                                                          retbins=True)\\n\",\n    \"outlier_signifs\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Note that the interval variable mileage is binned automatically in 10 uniformly spaced bins!\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x360 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"zvalues = outlier_signifs.values\\n\",\n    \"xlabels = outlier_signifs.columns\\n\",\n    \"ylabels = outlier_signifs.index\\n\",\n    \"xlabel = c1\\n\",\n    \"ylabel = c0\\n\",\n    \"\\n\",\n    \"plot_correlation_matrix(zvalues, x_labels=xlabels, y_labels=ylabels, \\n\",\n    \"                        x_label=xlabel,y_label=ylabel,\\n\",\n    \"                        vmin=-5, vmax=5, title='outlier significance',\\n\",\n    \"                        identity_layout=False, fontsize_factor=1.2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Correlation report\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"A full correlation report can be created automatically for a dataset by pairwise evaluation of all correlations, significances and outlier significances. \\n\",\n    \"\\n\",\n    \"Note that for a dataset with many different columns the number of outlier significances plots can grow large very rapidly. Therefore, the feature is implemented to only evaluate outlier significances for those variable pairs with a significance and correlation larger than the given thresholds.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"metadata\": {\n    \"scrolled\": false\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"interval columns not set, guessing: ['driver_age', 'mileage']\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x396 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 252x288 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x396 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x360 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 504x360 with 2 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from phik import report\\n\",\n    \"rep = report.correlation_report(data, significance_threshold=3, correlation_threshold=0.5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Recap\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"To summarize, the main functions in the phik correlation package working on a dataframe are:\\n\",\n    \"\\n\",\n    \"- `df[twocols].hist2d()` or `series.hist2d(other_series)`\\n\",\n    \"- `df.phik_matrix()`\\n\",\n    \"- `df.global_phik()`\\n\",\n    \"- `df.significance_matrix()`\\n\",\n    \"- `df[twocols].outlier_significance_matrix()` or `series.hist2d(other_series)`\\n\",\n    \"- `df.outlier_significance_matrices()`\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 26,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"interval columns not set, guessing: ['driver_age', 'mileage']\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <th>10</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>54.0</td>\\n\",\n       \"      <td>30.0</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"      <td>29.0</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>61.0</td>\\n\",\n       \"      <td>36.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"      <td>36.0</td>\\n\",\n       \"      <td>61.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>51.0</td>\\n\",\n       \"      <td>41.0</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>41.0</td>\\n\",\n       \"      <td>35.0</td>\\n\",\n       \"      <td>12.0</td>\\n\",\n       \"      <td>30.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>65.0</td>\\n\",\n       \"      <td>29.0</td>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>24.0</td>\\n\",\n       \"      <td>53.0</td>\\n\",\n       \"      <td>54.0</td>\\n\",\n       \"      <td>35.0</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"      <td>27.0</td>\\n\",\n       \"      <td>66.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>23.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"      <td>30.0</td>\\n\",\n       \"      <td>50.0</td>\\n\",\n       \"      <td>54.0</td>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"      <td>25.0</td>\\n\",\n       \"      <td>53.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>41.0</td>\\n\",\n       \"      <td>28.0</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>27.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"      <td>23.0</td>\\n\",\n       \"      <td>39.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>12.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>12.0</td>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>25.0</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"mileage       1     2     3     4     5     6     7     8     9     10\\n\",\n       \"driver_age                                                            \\n\",\n       \"1           54.0  30.0  13.0  29.0  57.0  61.0  36.0  11.0  36.0  61.0\\n\",\n       \"2           51.0  41.0  13.0  17.0  64.0  41.0  35.0  12.0  30.0  75.0\\n\",\n       \"3           65.0  29.0  21.0  24.0  53.0  54.0  35.0  14.0  27.0  66.0\\n\",\n       \"4           49.0  23.0  17.0  30.0  50.0  54.0  21.0  17.0  25.0  53.0\\n\",\n       \"5           41.0  28.0  19.0  15.0  33.0  45.0  27.0  11.0  23.0  39.0\\n\",\n       \"6           21.0  12.0   5.0  12.0  26.0  25.0  10.0   8.0  10.0  15.0\\n\",\n       \"7            7.0   8.0   2.0   3.0   8.0   9.0   4.0   2.0   3.0  10.0\\n\",\n       \"8            5.0   2.0   0.0   1.0   6.0   1.0   1.0   1.0   1.0   3.0\\n\",\n       \"9            0.0   0.0   0.0   0.0   1.0   0.0   0.0   0.0   0.0   1.0\\n\",\n       \"10           0.0   0.0   0.0   1.0   1.0   0.0   0.0   0.0   0.0   0.0\"\n      ]\n     },\n     \"execution_count\": 26,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data[['driver_age', 'mileage']].hist2d()\\n\",\n    \"# Alternatively: data['driver_age'].hist2d(data['mileage'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 27,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"interval columns not set, guessing: ['driver_age', 'mileage']\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.389671</td>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>0.389671</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.105506</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>0.590456</td>\\n\",\n       \"      <td>0.105506</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"      <td>0.768589</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.000000</td>\\n\",\n       \"      <td>0.768589</td>\\n\",\n       \"      <td>1.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age      area   mileage  car_size\\n\",\n       \"car_color    1.000000    0.389671  0.590456  0.000000  0.000000\\n\",\n       \"driver_age   0.389671    1.000000  0.105506  0.000000  0.000000\\n\",\n       \"area         0.590456    0.105506  1.000000  0.000000  0.000000\\n\",\n       \"mileage      0.000000    0.000000  0.000000  1.000000  0.768589\\n\",\n       \"car_size     0.000000    0.000000  0.000000  0.768589  1.000000\"\n      ]\n     },\n     \"execution_count\": 27,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data.phik_matrix()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"interval columns not set, guessing: ['driver_age', 'mileage']\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"(array([[0.67603168],\\n\",\n       \"        [0.41913015],\\n\",\n       \"        [0.60575269],\\n\",\n       \"        [0.76858883],\\n\",\n       \"        [0.76858883]]),\\n\",\n       \" array(['car_color', 'driver_age', 'area', 'mileage', 'car_size'],\\n\",\n       \"       dtype=object))\"\n      ]\n     },\n     \"execution_count\": 28,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data.global_phik()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"interval columns not set, guessing: ['driver_age', 'mileage']\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <td>85.468302</td>\\n\",\n       \"      <td>19.787607</td>\\n\",\n       \"      <td>37.609394</td>\\n\",\n       \"      <td>-0.634132</td>\\n\",\n       \"      <td>-0.586560</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>driver_age</th>\\n\",\n       \"      <td>19.787607</td>\\n\",\n       \"      <td>84.314315</td>\\n\",\n       \"      <td>1.857272</td>\\n\",\n       \"      <td>-0.586955</td>\\n\",\n       \"      <td>-0.532817</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <td>37.609394</td>\\n\",\n       \"      <td>1.857272</td>\\n\",\n       \"      <td>72.400210</td>\\n\",\n       \"      <td>-0.593527</td>\\n\",\n       \"      <td>-0.334542</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>mileage</th>\\n\",\n       \"      <td>-0.634132</td>\\n\",\n       \"      <td>-0.586955</td>\\n\",\n       \"      <td>-0.593527</td>\\n\",\n       \"      <td>91.221584</td>\\n\",\n       \"      <td>49.249503</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_size</th>\\n\",\n       \"      <td>-0.586560</td>\\n\",\n       \"      <td>-0.532817</td>\\n\",\n       \"      <td>-0.334542</td>\\n\",\n       \"      <td>49.249503</td>\\n\",\n       \"      <td>69.047125</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            car_color  driver_age       area    mileage   car_size\\n\",\n       \"car_color   85.468302   19.787607  37.609394  -0.634132  -0.586560\\n\",\n       \"driver_age  19.787607   84.314315   1.857272  -0.586955  -0.532817\\n\",\n       \"area        37.609394    1.857272  72.400210  -0.593527  -0.334542\\n\",\n       \"mileage     -0.634132   -0.586955  -0.593527  91.221584  49.249503\\n\",\n       \"car_size    -0.586560   -0.532817  -0.334542  49.249503  69.047125\"\n      ]\n     },\n     \"execution_count\": 29,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data.significance_matrix()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 30,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"interval columns not set, guessing: ['mileage']\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>53.5_30047.0</th>\\n\",\n       \"      <th>30047.0_60040.5</th>\\n\",\n       \"      <th>60040.5_90033.9</th>\\n\",\n       \"      <th>90033.9_120027.4</th>\\n\",\n       \"      <th>120027.4_150020.9</th>\\n\",\n       \"      <th>150020.9_180014.4</th>\\n\",\n       \"      <th>180014.4_210007.8</th>\\n\",\n       \"      <th>210007.8_240001.3</th>\\n\",\n       \"      <th>240001.3_269994.8</th>\\n\",\n       \"      <th>269994.8_299988.2</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>area</th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>country_side</th>\\n\",\n       \"      <td>-0.178204</td>\\n\",\n       \"      <td>0.192584</td>\\n\",\n       \"      <td>0.099073</td>\\n\",\n       \"      <td>-1.818924</td>\\n\",\n       \"      <td>0.103907</td>\\n\",\n       \"      <td>0.888225</td>\\n\",\n       \"      <td>0.251480</td>\\n\",\n       \"      <td>1.491532</td>\\n\",\n       \"      <td>0.016080</td>\\n\",\n       \"      <td>-0.869129</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>downtown</th>\\n\",\n       \"      <td>0.625586</td>\\n\",\n       \"      <td>-2.141106</td>\\n\",\n       \"      <td>0.541785</td>\\n\",\n       \"      <td>0.931452</td>\\n\",\n       \"      <td>-0.926177</td>\\n\",\n       \"      <td>0.582585</td>\\n\",\n       \"      <td>0.917301</td>\\n\",\n       \"      <td>-0.729204</td>\\n\",\n       \"      <td>-0.978248</td>\\n\",\n       \"      <td>0.610302</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>hills</th>\\n\",\n       \"      <td>-0.826807</td>\\n\",\n       \"      <td>1.346029</td>\\n\",\n       \"      <td>-0.841090</td>\\n\",\n       \"      <td>0.008498</td>\\n\",\n       \"      <td>0.071356</td>\\n\",\n       \"      <td>1.028940</td>\\n\",\n       \"      <td>0.107051</td>\\n\",\n       \"      <td>0.080217</td>\\n\",\n       \"      <td>-0.397630</td>\\n\",\n       \"      <td>-0.904236</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>suburbs</th>\\n\",\n       \"      <td>0.972621</td>\\n\",\n       \"      <td>0.098196</td>\\n\",\n       \"      <td>0.712079</td>\\n\",\n       \"      <td>-0.059975</td>\\n\",\n       \"      <td>0.975536</td>\\n\",\n       \"      <td>-1.759184</td>\\n\",\n       \"      <td>-0.716170</td>\\n\",\n       \"      <td>-0.603623</td>\\n\",\n       \"      <td>0.059615</td>\\n\",\n       \"      <td>-0.050745</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>unpaved_roads</th>\\n\",\n       \"      <td>-1.469438</td>\\n\",\n       \"      <td>0.518041</td>\\n\",\n       \"      <td>-0.915745</td>\\n\",\n       \"      <td>-0.475005</td>\\n\",\n       \"      <td>-0.679357</td>\\n\",\n       \"      <td>-0.545607</td>\\n\",\n       \"      <td>-0.808321</td>\\n\",\n       \"      <td>0.901333</td>\\n\",\n       \"      <td>2.175620</td>\\n\",\n       \"      <td>1.339934</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"               53.5_30047.0  30047.0_60040.5  60040.5_90033.9  \\\\\\n\",\n       \"area                                                            \\n\",\n       \"country_side      -0.178204         0.192584         0.099073   \\n\",\n       \"downtown           0.625586        -2.141106         0.541785   \\n\",\n       \"hills             -0.826807         1.346029        -0.841090   \\n\",\n       \"suburbs            0.972621         0.098196         0.712079   \\n\",\n       \"unpaved_roads     -1.469438         0.518041        -0.915745   \\n\",\n       \"\\n\",\n       \"               90033.9_120027.4  120027.4_150020.9  150020.9_180014.4  \\\\\\n\",\n       \"area                                                                    \\n\",\n       \"country_side          -1.818924           0.103907           0.888225   \\n\",\n       \"downtown               0.931452          -0.926177           0.582585   \\n\",\n       \"hills                  0.008498           0.071356           1.028940   \\n\",\n       \"suburbs               -0.059975           0.975536          -1.759184   \\n\",\n       \"unpaved_roads         -0.475005          -0.679357          -0.545607   \\n\",\n       \"\\n\",\n       \"               180014.4_210007.8  210007.8_240001.3  240001.3_269994.8  \\\\\\n\",\n       \"area                                                                     \\n\",\n       \"country_side            0.251480           1.491532           0.016080   \\n\",\n       \"downtown                0.917301          -0.729204          -0.978248   \\n\",\n       \"hills                   0.107051           0.080217          -0.397630   \\n\",\n       \"suburbs                -0.716170          -0.603623           0.059615   \\n\",\n       \"unpaved_roads          -0.808321           0.901333           2.175620   \\n\",\n       \"\\n\",\n       \"               269994.8_299988.2  \\n\",\n       \"area                              \\n\",\n       \"country_side           -0.869129  \\n\",\n       \"downtown                0.610302  \\n\",\n       \"hills                  -0.904236  \\n\",\n       \"suburbs                -0.050745  \\n\",\n       \"unpaved_roads           1.339934  \"\n      ]\n     },\n     \"execution_count\": 30,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data[['area', 'mileage']].outlier_significance_matrix()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 31,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"interval columns not set, guessing: ['driver_age', 'mileage']\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"os_matrices = data.outlier_significance_matrices()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 32,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"dict_keys(['car_color:driver_age', 'car_color:area', 'car_color:mileage', 'car_color:car_size', 'driver_age:area', 'driver_age:mileage', 'driver_age:car_size', 'area:mileage', 'area:car_size', 'mileage:car_size'])\"\n      ]\n     },\n     \"execution_count\": 32,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"os_matrices.keys()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 33,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>53.5_30047.0</th>\\n\",\n       \"      <th>30047.0_60040.5</th>\\n\",\n       \"      <th>60040.5_90033.9</th>\\n\",\n       \"      <th>90033.9_120027.4</th>\\n\",\n       \"      <th>120027.4_150020.9</th>\\n\",\n       \"      <th>150020.9_180014.4</th>\\n\",\n       \"      <th>180014.4_210007.8</th>\\n\",\n       \"      <th>210007.8_240001.3</th>\\n\",\n       \"      <th>240001.3_269994.8</th>\\n\",\n       \"      <th>269994.8_299988.2</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>car_color</th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>black</th>\\n\",\n       \"      <td>0.366425</td>\\n\",\n       \"      <td>1.387093</td>\\n\",\n       \"      <td>-1.320194</td>\\n\",\n       \"      <td>-1.274558</td>\\n\",\n       \"      <td>1.908010</td>\\n\",\n       \"      <td>-0.880578</td>\\n\",\n       \"      <td>-1.260293</td>\\n\",\n       \"      <td>-0.498607</td>\\n\",\n       \"      <td>-0.449794</td>\\n\",\n       \"      <td>0.492858</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>blue</th>\\n\",\n       \"      <td>-0.409760</td>\\n\",\n       \"      <td>-1.676495</td>\\n\",\n       \"      <td>-0.515491</td>\\n\",\n       \"      <td>1.969650</td>\\n\",\n       \"      <td>0.474818</td>\\n\",\n       \"      <td>-1.260466</td>\\n\",\n       \"      <td>-0.505987</td>\\n\",\n       \"      <td>-0.575699</td>\\n\",\n       \"      <td>1.675451</td>\\n\",\n       \"      <td>0.601026</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>gray</th>\\n\",\n       \"      <td>0.267888</td>\\n\",\n       \"      <td>-0.338430</td>\\n\",\n       \"      <td>-1.148378</td>\\n\",\n       \"      <td>0.048682</td>\\n\",\n       \"      <td>-0.238285</td>\\n\",\n       \"      <td>1.522769</td>\\n\",\n       \"      <td>1.282298</td>\\n\",\n       \"      <td>-0.812279</td>\\n\",\n       \"      <td>-0.589854</td>\\n\",\n       \"      <td>-0.887127</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>green</th>\\n\",\n       \"      <td>-0.195906</td>\\n\",\n       \"      <td>0.399471</td>\\n\",\n       \"      <td>1.306739</td>\\n\",\n       \"      <td>-0.918723</td>\\n\",\n       \"      <td>0.373229</td>\\n\",\n       \"      <td>-0.859866</td>\\n\",\n       \"      <td>-0.862544</td>\\n\",\n       \"      <td>0.772096</td>\\n\",\n       \"      <td>-0.169912</td>\\n\",\n       \"      <td>0.471057</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>metalic</th>\\n\",\n       \"      <td>0.697184</td>\\n\",\n       \"      <td>-0.385806</td>\\n\",\n       \"      <td>0.672620</td>\\n\",\n       \"      <td>0.205599</td>\\n\",\n       \"      <td>-1.543500</td>\\n\",\n       \"      <td>1.168147</td>\\n\",\n       \"      <td>0.249471</td>\\n\",\n       \"      <td>0.513459</td>\\n\",\n       \"      <td>-0.174870</td>\\n\",\n       \"      <td>-0.952009</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>multicolor</th>\\n\",\n       \"      <td>-0.478862</td>\\n\",\n       \"      <td>-0.591987</td>\\n\",\n       \"      <td>0.893783</td>\\n\",\n       \"      <td>0.050843</td>\\n\",\n       \"      <td>-2.104857</td>\\n\",\n       \"      <td>0.994621</td>\\n\",\n       \"      <td>0.109020</td>\\n\",\n       \"      <td>0.578461</td>\\n\",\n       \"      <td>-0.506460</td>\\n\",\n       \"      <td>1.287415</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>red</th>\\n\",\n       \"      <td>-0.551106</td>\\n\",\n       \"      <td>0.548949</td>\\n\",\n       \"      <td>1.370043</td>\\n\",\n       \"      <td>-0.050064</td>\\n\",\n       \"      <td>-1.822748</td>\\n\",\n       \"      <td>0.055521</td>\\n\",\n       \"      <td>2.208175</td>\\n\",\n       \"      <td>0.921955</td>\\n\",\n       \"      <td>0.219336</td>\\n\",\n       \"      <td>-1.556492</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>white</th>\\n\",\n       \"      <td>-0.055025</td>\\n\",\n       \"      <td>1.219026</td>\\n\",\n       \"      <td>-0.596627</td>\\n\",\n       \"      <td>-0.427730</td>\\n\",\n       \"      <td>1.888206</td>\\n\",\n       \"      <td>-0.471175</td>\\n\",\n       \"      <td>-0.851352</td>\\n\",\n       \"      <td>-0.393054</td>\\n\",\n       \"      <td>-0.697834</td>\\n\",\n       \"      <td>-0.323899</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"            53.5_30047.0  30047.0_60040.5  60040.5_90033.9  90033.9_120027.4  \\\\\\n\",\n       \"car_color                                                                      \\n\",\n       \"black           0.366425         1.387093        -1.320194         -1.274558   \\n\",\n       \"blue           -0.409760        -1.676495        -0.515491          1.969650   \\n\",\n       \"gray            0.267888        -0.338430        -1.148378          0.048682   \\n\",\n       \"green          -0.195906         0.399471         1.306739         -0.918723   \\n\",\n       \"metalic         0.697184        -0.385806         0.672620          0.205599   \\n\",\n       \"multicolor     -0.478862        -0.591987         0.893783          0.050843   \\n\",\n       \"red            -0.551106         0.548949         1.370043         -0.050064   \\n\",\n       \"white          -0.055025         1.219026        -0.596627         -0.427730   \\n\",\n       \"\\n\",\n       \"            120027.4_150020.9  150020.9_180014.4  180014.4_210007.8  \\\\\\n\",\n       \"car_color                                                             \\n\",\n       \"black                1.908010          -0.880578          -1.260293   \\n\",\n       \"blue                 0.474818          -1.260466          -0.505987   \\n\",\n       \"gray                -0.238285           1.522769           1.282298   \\n\",\n       \"green                0.373229          -0.859866          -0.862544   \\n\",\n       \"metalic             -1.543500           1.168147           0.249471   \\n\",\n       \"multicolor          -2.104857           0.994621           0.109020   \\n\",\n       \"red                 -1.822748           0.055521           2.208175   \\n\",\n       \"white                1.888206          -0.471175          -0.851352   \\n\",\n       \"\\n\",\n       \"            210007.8_240001.3  240001.3_269994.8  269994.8_299988.2  \\n\",\n       \"car_color                                                            \\n\",\n       \"black               -0.498607          -0.449794           0.492858  \\n\",\n       \"blue                -0.575699           1.675451           0.601026  \\n\",\n       \"gray                -0.812279          -0.589854          -0.887127  \\n\",\n       \"green                0.772096          -0.169912           0.471057  \\n\",\n       \"metalic              0.513459          -0.174870          -0.952009  \\n\",\n       \"multicolor           0.578461          -0.506460           1.287415  \\n\",\n       \"red                  0.921955           0.219336          -1.556492  \\n\",\n       \"white               -0.393054          -0.697834          -0.323899  \"\n      ]\n     },\n     \"execution_count\": 33,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"os_matrices['car_color:mileage']\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.8.8\"\n  },\n  \"pycharm\": {\n   \"stem_cell\": {\n    \"cell_type\": \"raw\",\n    \"metadata\": {\n     \"collapsed\": false\n    },\n    \"source\": []\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "phik/notebooks/phik_tutorial_spark.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Phi_K spark tutorial\\n\",\n    \"\\n\",\n    \"This notebook shows you how to obtain the Phi_K correlation matrix for a spark dataframe.\\n\",\n    \"Calculating the Phi_K matrix consists of two steps:\\n\",\n    \"\\n\",\n    \"- Obtain the 2d contingency tables for all variable pairs. To make these we use the [`histogrammar` package](https://github.com/histogrammar/histogrammar-python).\\n\",\n    \"- Calculate the Phi_K value for each variable pair from its contingency table.\\n\",\n    \"\\n\",\n    \"Make sure you install the histogrammar package to make the 2d histograms, that are then used to calculate phik.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%%capture\\n\",\n    \"# install histogrammar (if not installed yet)\\n\",\n    \"import sys\\n\",\n    \"\\n\",\n    \"!\\\"{sys.executable}\\\" -m pip install histogrammar\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import itertools\\n\",\n    \"\\n\",\n    \"import pandas as pd\\n\",\n    \"import histogrammar as hg\\n\",\n    \"from histogrammar.plot.hist_numpy import get_2dgrid\\n\",\n    \"\\n\",\n    \"import phik\\n\",\n    \"from phik import resources\\n\",\n    \"from phik.phik import spark_phik_matrix_from_hist2d_dict\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# histogramming is done using the histogrammar library\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from pyspark.sql import SparkSession\\n\",\n    \"from pyspark import __version__ as pyspark_version\\n\",\n    \"\\n\",\n    \"scala = '2.12' if int(pyspark_version[0]) >= 3 else '2.11'\\n\",\n    \"hist_jar = f'io.github.histogrammar:histogrammar_{scala}:1.0.20'\\n\",\n    \"hist_spark_jar = f'io.github.histogrammar:histogrammar-sparksql_{scala}:1.0.20'\\n\",\n    \"\\n\",\n    \"spark = SparkSession.builder.config(\\n\",\n    \"    \\\"spark.jars.packages\\\", f'{hist_spark_jar},{hist_jar}'\\n\",\n    \").getOrCreate()\\n\",\n    \"\\n\",\n    \"spark = SparkSession.builder.config(\\n\",\n    \"    \\\"spark.jars.packages\\\", f'{hist_spark_jar},{hist_jar}'\\n\",\n    \").getOrCreate()\\n\",\n    \"\\n\",\n    \"sc = spark.sparkContext\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Load data\\n\",\n    \"\\n\",\n    \"A simulated dataset is part of the phik-package. The dataset concerns fake car insurance data. Load the dataset here:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"data = pd.read_csv( resources.fixture('fake_insurance_data.csv.gz') )\\n\",\n    \"sdf = spark.createDataFrame(data)\\n\",\n    \"sdf.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"combis = itertools.combinations_with_replacement(sdf.columns, 2)\\n\",\n    \"combis = [list(c) for c in combis]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(combis)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# step 1: create histograms (this runs spark histogrammar in the background)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# see the doc-string of hg_make_histograms() for binning options.\\n\",\n    \"hists = sdf.hg_make_histograms(combis)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# collect the numpy contingency tables into a dict\\n\",\n    \"grids = {k:(get_2dgrid(h)[2]) for k,h in hists.items()}\\n\",\n    \"print(grids)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# we can store the histograms if we want to\\n\",\n    \"if False:\\n\",\n    \"    import pickle\\n\",\n    \"\\n\",\n    \"    with open('grids.pkl', 'wb') as outfile:\\n\",\n    \"        pickle.dump(grids, outfile)\\n\",\n    \"\\n\",\n    \"    with open('grids.pkl', 'rb') as handle:\\n\",\n    \"        grids = pickle.load(handle)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# step 2: calculate phik matrix (runs rdd parallellization over all 2d histograms)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"phik_matrix = spark_phik_matrix_from_hist2d_dict(sc, grids)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"phik_matrix\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.6.8\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "phik/outliers.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/09/05\n\nDescription:\n    Functions for calculating the statistical significance of outliers in a contingency table.\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\n\nfrom typing import Tuple, Union, Optional\nimport itertools\nimport numpy as np\nimport pandas as pd\nimport warnings\n\nfrom scipy import stats\nfrom scipy.special import betainc\n\nfrom phik import definitions as defs\nfrom .binning import bin_data, hist2d_from_rebinned_df\nfrom .betainc import log_incompbeta\nfrom .statistics import z_from_logp\nfrom .data_quality import dq_check_nunique_values\nfrom .utils import array_like_to_dataframe, guess_interval_cols\n\n\ndef poisson_obs_p(nobs: int, nexp: float, nexperr: float) -> float:\n    \"\"\"\n    Calculate p-value for nobs observations given the expected value and its\n    uncertainty using the Linnemann method.\n\n    If the uncertainty\n    on the expected value is known the Linnemann method is used. Otherwise the Poisson distribution is\n    used to estimate the p-value.\n\n    Measures of Significance in HEP and Astrophysics\n    Authors: J. T. Linnemann\n    http://arxiv.org/abs/physics/0312059\n\n    Code inspired by:\n    https://root.cern.ch/doc/master/NumberCountingUtils_8cxx_source.html#l00086\n\n    Three fixes are added for:\n\n      * nobs = 0, when - by construction - p should be 1.\n      * uncertainty of zero, for which Linnemann's function does not work, but one can simply revert to regular Poisson.\n      * when nexp=0, betainc always returns 1. Here we set nexp = nexperr.\n\n    :param int nobs: observed count\n    :param float nexp: expected number\n    :param float nexperr: uncertainty on the expected number\n    :returns: p-value\n    :rtype: float\n    \"\"\"\n    if nobs == 0:\n        return 1\n\n    if nexperr > 0:\n        nexpalt = nexp if nexp > 0 else nexperr\n        tau = nexpalt / (nexperr * nexperr)\n        b = nexpalt * tau + 1\n        x = 1 / (1 + tau)\n        p = betainc(nobs, b, x)\n    else:  # assume error==0\n        p = stats.poisson.sf(nobs - 1, nexp)\n\n    return p\n\n\ndef log_poisson_obs_p(nobs: int, nexp: float, nexperr: float) -> Tuple[float, float]:\n    \"\"\"\n    Calculate logarithm of p-value for nobs observations given the expected value and its\n    uncertainty using the Linnemann method.\n\n    If the uncertainty\n    on the expected value is known the Linnemann method is used. Otherwise the Poisson distribution is\n    used to estimate the p-value.\n\n    Measures of Significance in HEP and Astrophysics\n    Authors: J. T. Linnemann\n    http://arxiv.org/abs/physics/0312059\n\n    Code inspired by:\n    https://root.cern.ch/doc/master/NumberCountingUtils_8cxx_source.html#l00086\n\n    Three fixes are added for:\n\n      * nobs = 0, when - by construction - p should be 1.\n      * uncertainty of zero, for which Linnemann's function does not work, but one can simply revert to regular Poisson.\n      * when nexp=0, betainc always returns 1. Here we set nexp = nexperr.\n\n    :param int nobs: observed count\n    :param float nexp: expected number\n    :param float nexperr: uncertainty on the expected number\n    :returns: tuple containing pvalue and 1 - pvalue\n    :rtype: tuple\n    \"\"\"\n    if nobs == 0:\n        # p=1, 1-p=0 --> logp=0,log(1-p)=-inf\n        return 0, -np.inf\n\n    if nexperr > 0:\n        nexpalt = nexp if nexp > 0 else nexperr\n        tau = nexpalt / (nexperr * nexperr)\n        b = nexpalt * tau + 1\n        x = 1 / (1 + tau)\n        tlogp = log_incompbeta(nobs, b, x)\n    else:  # assume error==0. nobs>0 at this stage\n        logp = stats.poisson.logsf(nobs - 1, nexp)\n        p = stats.poisson.sf(nobs - 1, nexp)\n        tlogp = (logp, np.log(1 - p))\n\n    return tlogp\n\n\ndef poisson_obs_z(nobs: int, nexp: float, nexperr: float) -> float:\n    \"\"\"\n    Calculate the Z-value for measuring nobs observations given the expected value.\n\n    The Z-value express the number\n    of sigmas the observed value deviates from the expected value, and is based on the p-value calculation.\n    If the uncertainty on the expected value is known the Linnemann method is used. Otherwise the Poisson distribution is used to estimate the p-value.\n\n    :param int nobs: observed count\n    :param float nexp: expected number\n    :param float nexperr: uncertainty on the expected number\n    :returns: Z-value\n    :rtype: float\n    \"\"\"\n    p_value = poisson_obs_p(nobs, nexp, nexperr)\n\n    # special cases: numerically too close to zero or one.\n    # try to evaluate log(p) or log(1-p)\n    if p_value == 0 or p_value == 1:\n        tlogp = log_poisson_obs_p(nobs, nexp, nexperr)\n        if p_value == 0:\n            logp = tlogp[0]\n            z_value = z_from_logp(logp)\n        else:\n            log1mp = tlogp[1]\n            z_value = z_from_logp(log1mp, flip_sign=True)\n    # default:\n    else:\n        z_value = -stats.norm.ppf(p_value)\n\n    return z_value\n\n\ndef poisson_obs_mid_p(nobs: int, nexp: float, nexperr: float) -> float:\n    \"\"\"\n    Calculate the p-value for measuring nobs observations given the expected value.\n\n    The Lancaster mid-P correction is applied to take into account the effects of discrete statistics.\n    If the uncertainty on the expected value is known the Linnemann method is used for the p-value calculation.\n    Otherwise the Poisson distribution is used to estimate the p-value.\n\n    :param int nobs: observed count\n    :param float nexp: expected number\n    :param float nexperr: uncertainty on the expected number\n    :returns: mid p-value\n    :rtype: float\n    \"\"\"\n    p = poisson_obs_p(nobs, nexp, nexperr)\n    pplus1 = poisson_obs_p(nobs + 1, nexp, nexperr)\n    mid_p = 0.5 * (p - pplus1)\n    p -= mid_p\n\n    return p\n\n\ndef log_poisson_obs_mid_p(\n    nobs: int, nexp: float, nexperr: float\n) -> Tuple[float, float]:\n    \"\"\"\n    Calculate the logarithm of the p-value for measuring nobs observations given the expected value.\n\n    The Lancaster mid-P correction is\n    applied to take into account the effects of discrete statistics. If the uncertainty on the expected value is known the\n    Linnemann method is used for the p-value calculation. Otherwise the Poisson distribution is used to estimate the p-value.\n\n    :param int nobs: observed count\n    :param float nexp: expected number\n    :param float nexperr: uncertainty on the expected number\n    :returns: tuple of log(p) and log(1-p)\n    :rtype: tuple\n    \"\"\"\n    tlogp = log_poisson_obs_p(nobs, nexp, nexperr)\n    tlogpp1 = log_poisson_obs_p(nobs + 1, nexp, nexperr)\n\n    # 1. evaluate log([p+pp1]/2) ; note that p > pp1\n    #    = log(0.5) + log(p) + log(1 + exp[log(pp1)-log(p)])\n    lp = tlogp[0]\n    lp1 = tlogpp1[0]\n    logmidp = np.log(0.5) + lp + np.log(1 + np.exp(lp1 - lp))\n\n    # 2. let q = 1 - p; note that qp1 > q\n    #    evaluate log(1-[p+pp1]/2) = log ([q+qp1]/2)\n    #    = log(0.5) + log(qp1) + log(1 + exp[log(q)-log(qp1)])\n    lq = tlogp[1]\n    lq1 = tlogpp1[1]\n    logmidq = np.log(0.5) + lq1 + np.log(1 + np.exp(lq - lq1))\n\n    return logmidp, logmidq\n\n\ndef poisson_obs_mid_z(nobs: int, nexp: float, nexperr: float) -> float:\n    \"\"\"Calculate the Z-value for measuring nobs observations given the expected value.\n\n    The Z-value express the number\n    of sigmas the observed value deviates from the expected value, and is based on the p-value calculation.\n    The Lancaster midP correction is applied to take into account the effects of low statistics. If the uncertainty on the\n    expected value is known the Linnemann method is used for the p-value calculation. Otherwise the Poisson distribution is\n    used to estimate the p-value.\n\n    :param int nobs: observed count\n    :param float nexp: expected number\n    :param float nexperr: uncertainty on the expected number\n    :returns: Z-value\n    :rtype: tuple\n    \"\"\"\n    p_value = poisson_obs_mid_p(nobs, nexp, nexperr)\n\n    # special cases: numerically too close to zero or one.\n    # try to evaluate log(p) or log(1-p)\n    if p_value == 0 or p_value == 1:\n        tlogp = log_poisson_obs_mid_p(nobs, nexp, nexperr)\n        if p_value == 0:\n            logp = tlogp[0]\n            z_value = z_from_logp(logp)\n        else:\n            log1mp = tlogp[1]\n            z_value = z_from_logp(log1mp, flip_sign=True)\n    # default:\n    else:\n        z_value = -stats.norm.ppf(p_value)\n\n    return z_value\n\n\ndef get_independent_frequency_estimates(\n    values: np.ndarray, CI_method: str = \"poisson\"\n) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Calculation of expected frequencies, based on the ABCD-method, i.e. independent frequency estimates.\n\n    :param values: The contingency table. The table contains the observed number of occurrences in each category.\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error.\\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :returns exp, experr: expected frequencies, error on the expected frequencies\n    \"\"\"\n\n    # Initialize\n    exp = np.zeros(values.shape)\n    experr = np.zeros(values.shape)\n\n    # Calculate dependent expected value using ABCD method\n    for i in range(values.shape[0]):\n        for j in range(values.shape[1]):\n            Aobs = values[i][j]\n            B = values[i].sum() - Aobs\n            C = values[:, j].sum() - Aobs\n            D = values.sum() - B - C - Aobs\n            # prediction for A can only be calculated if D is non-zero\n            if D > 0:\n                exp[i][j] = B * C / D\n                sigmaB = get_uncertainty(B, CI_method=CI_method)\n                sigmaC = get_uncertainty(C, CI_method=CI_method)\n                sigmaD = get_uncertainty(D, CI_method=CI_method)\n                experr[i][j] = np.sqrt(\n                    pow(sigmaB * C / D, 2)\n                    + pow(sigmaC * B / D, 2)\n                    + pow(sigmaD * exp[i][j] / D, 2)\n                )\n            # in case of zero D, A is infinity. Set prediction to NaN.\n            else:\n                exp[i][j] = np.nan\n                experr[i][j] = np.nan\n\n    return exp, experr\n\n\ndef get_uncertainty(x: float, CI_method: str = \"poisson\") -> float:\n    \"\"\"\n    Calculate the uncertainty on a random number x taken from the poisson distribution\n\n    The uncertainty on the x is calculated using either the standard poisson error (poisson) or using the asymmetric\n    exact poisson interval (exact_poisson).\n    https://www.ncbi.nlm.nih.gov/pubmed/2296988 #FIXME: check ref\n\n    :param float x: value, must be equal or greater than zero\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error.\\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :return x_err: the uncertainty on x (1 sigma)\n    \"\"\"\n\n    if CI_method == \"exact_poisson\":\n        xerr = get_exact_poisson_uncertainty(x)\n    elif CI_method == \"poisson\":\n        xerr = get_poisson_uncertainty(x)\n    else:\n        raise NotImplementedError(\"CI method {} not valid\".format(CI_method))\n\n    return xerr\n\n\ndef get_poisson_uncertainty(x: float) -> float:\n    \"\"\"\n    Calculate the uncertainty on x using standard poisson error. In case x=0 the error=1 is assigned.\n\n    :param float x: value\n    :return x_err: the uncertainty on x (1 sigma)\n    :rtype: float\n    \"\"\"\n    return np.sqrt(x) if x >= 1 else 1.0\n\n\ndef get_exact_poisson_uncertainty(x: float, nsigmas: float = 1) -> float:\n    \"\"\"\n    Calculate the uncertainty on x using an exact poisson confidence interval. The width of the confidence interval can\n    be specified using the number of sigmas. The default number of sigmas is set to 1, resulting in an error that is\n    approximated by the standard poisson error sqrt(x).\n\n    Exact poisson uncertainty is described here:\n    https://ms.mcmaster.ca/peter/s743/poissonalpha.html\n    https://www.statsdirect.com/help/rates/poisson_rate_ci.htm\n    https://www.ncbi.nlm.nih.gov/pubmed/2296988\n\n    :param float x: value\n    :return x_err: the uncertainty on x (1 sigma)\n    :rtype: float\n    \"\"\"\n    # see formula at:\n    # https://en.wikipedia.org/wiki/Poisson_distribution#Confidence_interval\n    pl = stats.norm.cdf(-1 * nsigmas, loc=0, scale=1)\n    pu = stats.norm.cdf(1 * nsigmas, loc=0, scale=1)\n\n    lb = stats.chi2.ppf(pl, 2 * x) / 2 if x != 0 else 0\n    ub = stats.chi2.ppf(pu, 2 * (x + 1)) / 2\n\n    # average err is almost equal to sqrt(x)+0.5\n    return (ub - lb) / 2\n\n\ndef get_outlier_significances(\n    obs: np.ndarray, exp: np.ndarray, experr: np.ndarray\n) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Evaluation of significance of observation\n\n    Evaluation of the significance of the difference between the observed number of occurrences and the expected number of\n    occurrences, taking into account the uncertainty on the expected number of occurrences. When the uncertainty is\n    not zero, the Linnemann method is used to calculate the p-values.\n\n    :param obs: observed numbers\n    :param exp: expected numbers\n    :param experr: uncertainty on the expected numbers\n    :returns: pvalues, zvalues\n    \"\"\"\n\n    pvalues = np.zeros(obs.shape)\n    zvalues = np.zeros(obs.shape)\n    for i in range(obs.shape[0]):\n        for j in range(obs.shape[1]):\n            pvalues[i][j] = poisson_obs_mid_p(obs[i][j], exp[i][j], experr[i][j])\n            zvalues[i][j] = poisson_obs_mid_z(obs[i][j], exp[i][j], experr[i][j])\n\n    return pvalues, zvalues\n\n\ndef outlier_significance_matrix_from_hist2d(\n    data: np.ndarray, CI_method: str = \"poisson\"\n) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Calculate the significance matrix of excesses or deficits in a contingency table\n\n    :param data: numpy array contingency table\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error.\\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :return: p-value matrix, outlier significance matrix\n    \"\"\"\n\n    # get expected values\n    exp, experr = get_independent_frequency_estimates(data, CI_method=CI_method)\n    pvalues, zvalues = get_outlier_significances(data, exp, experr)\n\n    return pvalues, zvalues\n\n\ndef outlier_significance_matrix_from_rebinned_df(\n    data_binned: pd.DataFrame,\n    binning_dict: dict,\n    CI_method: str = \"poisson\",\n    ndecimals: int = 1,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n) -> pd.DataFrame:\n    \"\"\"\n    Calculate the significance matrix of excesses or deficits\n\n    :param data_binned: input data. DataFrame must contain exactly two columns\n    :param dict binning_dict: dictionary with bin edges for each binned interval variable. When no bin_edges are\\\n    provided values are used as bin label. Otherwise, bin labels are constructed based on provided bin edge information.\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error. \\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :param ndecimals: number of decimals to use in labels of binned interval variables to specify bin edges (default=1)\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :return: outlier significance matrix (pd.DataFrame)\n    \"\"\"\n\n    c0, c1 = data_binned.columns\n    df_datahist = hist2d_from_rebinned_df(\n        data_binned, dropna, drop_underflow, drop_overflow\n    )\n\n    if 1 in df_datahist.shape or 0 in df_datahist.shape:\n        warnings.warn(\n            \"Too few unique values for variable {0:s} ({1:d}) or {2:s} ({3:d}) to calculate outlier \"\n            \"significances\".format(c0, df_datahist.shape[0], c1, df_datahist.shape[1])\n        )\n        return np.nan\n\n    for c, a in [(c0, \"index\"), (c1, \"columns\")]:\n        if c in binning_dict.keys():\n            # check for missing bins. This can occur due to NaN values for variable c1 in which case rows are dropped\n            orig_vals = (\n                data_binned[~data_binned[c].isin([defs.UF, defs.OF, defs.NaN])][c]\n                .value_counts()\n                .sort_index()\n                .index\n            )\n            missing = list(set(orig_vals) - set(getattr(df_datahist, a)))\n            imissing = []\n            for v in missing:\n                imissing.append(np.where(orig_vals == v)[0][0])\n\n            vals = [\n                \"{1:.{0}f}_{2:.{0}f}\".format(\n                    ndecimals, binning_dict[c][i][0], binning_dict[c][i][1]\n                )\n                for i in range(len(binning_dict[c]))\n                if not i in imissing\n            ]\n            vals += list(getattr(df_datahist, a)[len(vals) :])  # to deal with UF and OF\n            setattr(df_datahist, a, vals)\n\n    pvalues, zvalues = outlier_significance_matrix_from_hist2d(\n        df_datahist.values, CI_method=CI_method\n    )\n    outlier_overview = pd.DataFrame(\n        zvalues, index=df_datahist.index, columns=df_datahist.columns\n    )\n\n    return outlier_overview\n\n\ndef outlier_significance_matrix(\n    df: pd.DataFrame,\n    interval_cols: Optional[list] = None,\n    CI_method: str = \"poisson\",\n    ndecimals: int = 1,\n    bins=10,\n    quantile: bool = False,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    retbins: bool = False,\n    verbose: bool = True,\n):\n    \"\"\"\n    Calculate the significance matrix of excesses or deficits\n\n    :param df: input data. DataFrame must contain exactly two columns\n    :param interval_cols: columns with interval variables which need to be binned\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error.\\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param ndecimals: number of decimals to use in labels of binned interval variables to specify bin edges (default=1)\n    :param bool quantile: when the number of bins is specified, use uniform binning (False) or quantile binning (True)\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool retbins: if true, function also returns dict with bin_edges of rebinned variables.\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :return: outlier significance matrix (pd.DataFrame)\n    \"\"\"\n\n    if len(df.columns) != 2:\n        raise ValueError(\"df should contain only two columns\")\n\n    if interval_cols is None:\n        interval_cols = guess_interval_cols(df, verbose)\n\n    df_clean, interval_cols_clean = dq_check_nunique_values(\n        df, interval_cols, dropna=dropna\n    )\n\n    data_binned, binning_dict = bin_data(\n        df_clean, interval_cols_clean, retbins=True, bins=bins, quantile=quantile\n    )\n\n    os_matrix = outlier_significance_matrix_from_rebinned_df(\n        data_binned,\n        binning_dict,\n        CI_method=CI_method,\n        ndecimals=ndecimals,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n    )\n\n    if retbins:\n        return os_matrix, binning_dict\n    return os_matrix\n\n\ndef outlier_significance_matrices_from_rebinned_df(\n    data_binned: pd.DataFrame,\n    binning_dict=None,\n    CI_method=\"poisson\",\n    ndecimals=1,\n    combinations: Union[list, tuple] = (),\n    dropna=True,\n    drop_underflow=True,\n    drop_overflow=True,\n):\n    \"\"\"\n    Calculate the significance matrix of excesses or deficits for all possible combinations of variables, or for\n    those combinations specified using combinations. This functions could also be used instead of\n    outlier_significance_matrices in case all variables are either categorical or ordinal, so no binning is required.\n\n    :param data_binned: input data. Interval variables need to be binned. DataFrame must contain exactly two columns\n    :param dict binning_dict: dictionary with bin edges for each binned interval variable. When no bin_edges are\\\n    provided values are used as bin label. Otherwise, bin labels are constructed based on provided bin edge information.\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error.\\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :param ndecimals: number of decimals to use in labels of binned interval variables to specify bin edges (default=1)\n    :param combinations: in case you do not want to calculate an outlier significance matrix for all permutations of\\\n    the available variables, you can specify a list of the required permutations here, in the format\\\n    [(var1, var2), (var2, var4), etc]\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\na numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :return: dictionary with outlier significance matrices (pd.DataFrame)\n    \"\"\"\n    if binning_dict is None:\n        binning_dict = {}\n\n    # create a list of all possible combinations of variables, in case no selection of combinations is specified\n    if not combinations:\n        combinations = itertools.combinations(data_binned.columns, 2)\n\n    outliers_overview = []\n    for i, (c0, c1) in enumerate(combinations):\n        zvalues_overview = outlier_significance_matrix_from_rebinned_df(\n            data_binned[[c0, c1]].copy(),\n            binning_dict,\n            CI_method=CI_method,\n            ndecimals=ndecimals,\n            dropna=dropna,\n            drop_underflow=drop_underflow,\n            drop_overflow=drop_overflow,\n        )\n        outliers_overview.append((c0, c1, zvalues_overview))\n\n    return outliers_overview\n\n\ndef outlier_significance_matrices(\n    df: pd.DataFrame,\n    interval_cols: Optional[list] = None,\n    CI_method: str = \"poisson\",\n    ndecimals: int = 1,\n    bins=10,\n    quantile: bool = False,\n    combinations: Union[list, tuple] = (),\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    retbins: bool = False,\n    verbose: bool = True,\n):\n    \"\"\"\n    Calculate the significance matrix of excesses or deficits for all possible combinations of variables, or for\n    those combinations specified using combinations\n\n    :param df: input data\n    :param interval_cols: columns with interval variables which need to be binned\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error. \\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :param ndecimals: number of decimals to use in labels of binned interval variables to specify bin edges (default=1)\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param bool quantile: when the number of bins is specified, use uniform binning (False) or quantile binning (True)\n    :param combinations: in case you do not want to calculate an outlier significance matrix for all permutations of\\\n    the available variables, you can specify a list of the required permutations here, in the format\\\n    [(var1, var2), (var2, var4), etc]\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool retbins: if true, function also returns dict with bin_edges of rebinned variables.\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :return: dictionary with outlier significance matrices (pd.DataFrame)\n    \"\"\"\n\n    if interval_cols is None:\n        interval_cols = guess_interval_cols(df, verbose)\n\n    df_clean, interval_cols_clean = dq_check_nunique_values(\n        df, interval_cols, dropna=dropna\n    )\n\n    data_binned, binning_dict = bin_data(\n        df_clean, interval_cols_clean, retbins=True, bins=bins, quantile=quantile\n    )\n\n    os_matrices = outlier_significance_matrices_from_rebinned_df(\n        data_binned,\n        binning_dict,\n        CI_method,\n        ndecimals,\n        combinations=combinations,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n    )\n\n    # Convert to dict\n    os_matrices = {\":\".join([c0, c1]): v for c0, c1, v in os_matrices}\n\n    if retbins:\n        return os_matrices, binning_dict\n    return os_matrices\n\n\ndef outlier_significance_from_array(\n    x: Union[np.ndarray, list, pd.Series],\n    y: Union[np.ndarray, list, pd.Series],\n    num_vars: list = None,\n    bins: Union[int, list, np.ndarray, dict] = 10,\n    quantile: bool = False,\n    ndecimals: int = 1,\n    CI_method: str = \"poisson\",\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    verbose: bool = True,\n) -> pd.DataFrame:\n    \"\"\"\n    Calculate the significance matrix of excesses or deficits of input x and input y. x and y can contain interval, \\\n    ordinal or categorical data. Use the num_vars variable to indicate whether x and/or y contain interval data.\n\n    :param list x: array-like input\n    :param list y: array-like input\n    :param list num_vars: list of variables which are numeric and need to be binned, either ['x'],['y'],or['x','y']\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param bool quantile: when the number of bins is specified, use uniform binning (False) or quantile binning (True)\n    :param ndecimals: number of decimals to use in labels of binned interval variables to specify bin edges (default=1)\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error. \\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning a \\\n    numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True \\\n    (relevant when binning a numeric variable)\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :return: outlier significance matrix (pd.DataFrame)\n    \"\"\"\n\n    df = array_like_to_dataframe(x, y)\n\n    if num_vars is None:\n        num_vars = guess_interval_cols(df, verbose)\n\n    return outlier_significance_matrix(\n        df,\n        interval_cols=num_vars,\n        bins=bins,\n        quantile=quantile,\n        ndecimals=ndecimals,\n        CI_method=CI_method,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n        verbose=verbose,\n    )\n\n\ndef outlier_significance_from_binned_array(\n    x: Union[np.ndarray, list, pd.Series],\n    y: Union[np.ndarray, list, pd.Series],\n    CI_method: str = \"poisson\",\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n) -> pd.DataFrame:\n\n    \"\"\"\n    Calculate the significance matrix of excesses or deficits of input x and input y. x and y can contain binned\n    interval, ordinal or categorical data.\n\n    :param list x: array-like input\n    :param list y: array-like input\n    :param string CI_method: method to be used for uncertainty calculation. poisson: normal poisson error. \\\n    exact_poisson: error calculated from the asymmetric exact poisson interval\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning \\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning \\\n    a numeric variable)\n    :return: outlier significance matrix (pd.DataFrame)\n    \"\"\"\n\n    df = array_like_to_dataframe(x, y)\n\n    return outlier_significance_matrix(\n        df,\n        CI_method=CI_method,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n    )\n"
  },
  {
    "path": "phik/phik.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/09/05\n\nDescription:\n    Functions for the Phik correlation calculation\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\nfrom typing import Tuple, Union, Optional\n\nimport numpy as np\nimport itertools\nimport pandas as pd\nfrom joblib import Parallel, delayed\nfrom scipy.linalg import inv, pinv\n\nfrom phik import definitions as defs\nfrom .bivariate import phik_from_chi2\nfrom .statistics import (\n    get_chi2_using_dependent_frequency_estimates,\n    estimate_simple_ndof,\n    get_pearson_chi_square,\n)\nfrom .binning import create_correlation_overview_table, bin_data, auto_bin_data\nfrom .data_quality import dq_check_hist2d\nfrom .utils import array_like_to_dataframe, make_shapes_equal\n\n\ndef spark_phik_matrix_from_hist2d_dict(spark_context, hist_dict: dict):\n    \"\"\"Correlation matrix of bivariate gaussian using spark parallelization over variable-pair 2d histograms\n\n    See spark notebook phik_tutorial_spark.ipynb as example.\n\n    Each input histogram gets converted into correlation coefficient of bivariate gauss\n    with correlation value rho, assuming giving binning and number of records.\n    Correlation coefficient value is between 0 and 1.\n\n    :param spark_context: spark context\n    :param hist_dict: dict of 2d numpy grids with value-counts. keys are histogram names.\n    :return: phik correlation matrix\n    \"\"\"\n\n    for k, v in hist_dict.items():\n        if not isinstance(v, np.ndarray) and v.shape[1] == 2:\n            raise TypeError(\"hist_dict should be a dictionary of 2d numpy arrays.\")\n\n    hist_list = list(hist_dict.items())\n    hist_rdd = spark_context.parallelize(hist_list)\n    phik_rdd = hist_rdd.map(_phik_from_row)\n    phik_list = phik_rdd.collect()\n    phik_overview = create_correlation_overview_table(phik_list)\n    return phik_overview\n\n\ndef _phik_from_row(row: Tuple[str, np.ndarray]) -> Tuple[str, str, float]:\n    \"\"\"Helper function for spark parallel processing\n\n    :param row: rdd row, where row[0] is key and rdd[1]\n    :return: union of key, phik-value\n    \"\"\"\n\n    key, grid = row\n    c = key.split(\":\")\n    if len(c) == 2 and c[0] == c[1]:\n        return c[0], c[1], 1.0\n    try:\n        phik_value = phik_from_hist2d(grid)\n    except TypeError:\n        phik_value = np.nan\n    return c[0], c[1], phik_value\n\n\ndef phik_from_hist2d(\n    observed: np.ndarray, noise_correction: bool = True, expected: np.ndarray = None\n) -> float:\n    \"\"\"\n    correlation coefficient of bivariate gaussian derived from chi2-value\n\n    Chi2-value gets converted into correlation coefficient of bivariate gauss\n    with correlation value rho, assuming giving binning and number of records.\n    Correlation coefficient value is between 0 and 1.\n\n    Bivariate gaussian's range is set to [-5,5] by construction.\n\n    :param observed: 2d-array observed values\n    :param bool noise_correction: apply noise correction in phik calculation\n    :param expected: 2d-array expected values. Optional, default is None, otherwise evaluated automatically.\n    :returns float: correlation coefficient phik\n    \"\"\"\n    if isinstance(observed, pd.DataFrame):\n        observed = observed.values\n    if isinstance(expected, pd.DataFrame):\n        expected = expected.values\n\n    # chi2 contingency test\n    chi2 = (\n        get_chi2_using_dependent_frequency_estimates(observed, lambda_=\"pearson\")\n        if expected is None\n        else get_pearson_chi_square(observed, expected)\n    )\n\n    # noise pedestal\n    pedestal = estimate_simple_ndof(observed) if noise_correction else 0\n    if pedestal < 0:\n        pedestal = 0\n\n    # phik calculation adds noise pedestal to theoretical chi2\n    return phik_from_chi2(chi2, observed.sum(), *observed.shape, pedestal=pedestal)\n\n\ndef phik_from_rebinned_df(\n    data_binned: pd.DataFrame,\n    noise_correction: bool = True,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    njobs: int = -1,\n) -> pd.DataFrame:\n    \"\"\"\n    Correlation matrix of bivariate gaussian derived from chi2-value\n\n    Chi2-value gets converted into correlation coefficient of bivariate gauss\n    with correlation value rho, assuming giving binning and number of records.\n    Correlation coefficient value is between 0 and 1.\n\n    Bivariate gaussian's range is set to [-5,5] by construction.\n\n    :param pd.DataFrame data_binned: input data where interval variables have been binned\n    :param bool noise_correction: apply noise correction in phik calculation\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param int njobs: number of parallel jobs used for calculation of phik. default is -1. 1 uses no parallel jobs.\n    :return: phik correlation matrix\n    \"\"\"\n\n    if not dropna:\n        # if not dropna replace the NaN values with the string NaN. Otherwise the rows with NaN are dropped\n        # by the groupby.\n        data_binned.replace(np.nan, defs.NaN, inplace=True)\n    if drop_underflow:\n        data_binned.replace(defs.UF, np.nan, inplace=True)\n    if drop_overflow:\n        data_binned.replace(defs.OF, np.nan, inplace=True)\n\n    # cache column order (https://github.com/KaveIO/PhiK/issues/1)\n    column_order = data_binned.columns\n\n    if njobs == 1:\n        # Useful when for instance using cProfiler: https://docs.python.org/3/library/profile.html\n        phik_list = [\n            _calc_phik(co, data_binned[list(co)], noise_correction)\n            for co in itertools.combinations_with_replacement(\n                data_binned.columns.values, 2\n            )\n        ]\n    else:\n        phik_list = Parallel(n_jobs=njobs)(\n            delayed(_calc_phik)(co, data_binned[list(co)], noise_correction)\n            for co in itertools.combinations_with_replacement(\n                data_binned.columns.values, 2\n            )\n        )\n\n    if len(phik_list) == 0:\n        return pd.DataFrame(np.nan, index=column_order, columns=column_order)\n\n    phik_overview = create_correlation_overview_table(phik_list)\n\n    # restore column order\n    phik_overview = phik_overview.reindex(columns=column_order)\n    phik_overview = phik_overview.reindex(index=column_order)\n\n    return phik_overview\n\n\ndef _calc_phik(\n    comb: tuple, data_binned: pd.DataFrame, noise_correction: bool\n) -> Tuple[str, str, float]:\n    \"\"\"Split off calculation of phik for parallel processing\n\n    :param tuple comb: union of two string columns\n    :param pd.DataFrame data_binned: input data where interval variables have been binned\n    :param bool noise_correction: apply noise correction in phik calculation\n    :return: tuple of variable-x, variable-y, phik-value\n    \"\"\"\n    c0, c1 = comb\n    if c0 == c1:\n        return c0, c1, 1.0\n\n    datahist = data_binned.groupby([c0, c1], observed=False)[c0].count().to_frame().unstack().fillna(0)\n\n    # If 0 or only 1 values for one of the two variables, it is not possible to calculate phik.\n    # This check needs to be done after creation of OF, UF and NaN bins.\n    if any([v in datahist.shape for v in [0, 1]]):\n        return c0, c1, np.nan\n\n    datahist.columns = datahist.columns.droplevel()\n    phikvalue = phik_from_hist2d(datahist.values, noise_correction=noise_correction)\n    return c0, c1, phikvalue\n\n\ndef phik_matrix(\n    df: pd.DataFrame,\n    interval_cols: Optional[list] = None,\n    bins: Union[int, list, np.ndarray, dict] = 10,\n    quantile: bool = False,\n    noise_correction: bool = True,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    verbose: bool = True,\n    njobs: int = -1,\n) -> pd.DataFrame:\n    \"\"\"\n    Correlation matrix of bivariate gaussian derived from chi2-value\n\n    Chi2-value gets converted into correlation coefficient of bivariate gauss\n    with correlation value rho, assuming giving binning and number of records.\n    Correlation coefficient value is between 0 and 1.\n\n    Bivariate gaussian's range is set to [-5,5] by construction.\n\n    :param pd.DataFrame data_binned: input data\n    :param list interval_cols: column names of columns with interval variables.\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the\\\n    bins are specified (default=10). E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param quantile: when bins is an integer, uniform bins (False) or bins based on quantiles (True)\n    :param bool noise_correction: apply noise correction in phik calculation\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :param int njobs: number of parallel jobs used for calculation of phik. default is -1. 1 uses no parallel jobs.\n    :return: phik correlation matrix\n    \"\"\"\n\n    data_binned, binning_dict = auto_bin_data(\n        df=df,\n        interval_cols=interval_cols,\n        bins=bins,\n        quantile=quantile,\n        dropna=dropna,\n        verbose=verbose,\n    )\n    return phik_from_rebinned_df(\n        data_binned,\n        noise_correction,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n        njobs=njobs,\n    )\n\n\ndef global_phik_from_rebinned_df(\n    data_binned: pd.DataFrame,\n    noise_correction: bool = True,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    njobs: int = -1,\n) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Global correlation values of variables, obtained from the PhiK correlation matrix.\n\n    A global correlation value is a simple approximation of how well one feature can be modeled in terms of all others.\n\n    The global correlation coefficient is a number between zero and one, obtained from the PhiK correlation matrix,\n    that gives the highest possible correlation between a variable and the linear combination of all other variables.\n    See PhiK paper or for original definition: https://inspirehep.net/literature/101965\n\n    Global PhiK uses two important simplifications / approximations:\n    - The variables are assumed to belong to a multinormal distribution, which is typically not the case.\n    - The correlation should be a Pearson correlation matrix, allowing for negative values, which is not the case\n      with PhiK correlations (which are positive by construction).\n    To correct for these, the Global PhiK values are artificially capped between 0 and 1.\n\n    Still, the Global PhiK values are useful, quick, simple estimates that are interesting in an exploratory study.\n    For a solid, trustworthy estimate be sure to use a classifier or regression model instead.\n\n    :param pd.DataFrame data_binned: rebinned input data\n    :param bool noise_correction: apply noise correction in phik calculation\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param int njobs: number of parallel jobs used for calculation of phik. default is -1. 1 uses no parallel jobs.\n    :return: global correlations array\n    \"\"\"\n\n    phik_overview = phik_from_rebinned_df(\n        data_binned,\n        noise_correction,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n        njobs=njobs,\n    )\n    V = phik_overview.values\n    # check if V is ill-conditioned\n    if np.linalg.cond(V) > np.finfo(V.dtype).eps:\n        Vinv = inv(V)\n    else:\n        # use pseudo inverse to try handle finite but ill-conditioned arrays;\n        # non-finite values will still trigger an exception\n        Vinv = pinv(V)\n    global_correlations = np.sqrt(\n        1 - (1 / (np.diagonal(V) * np.diagonal(Vinv)))\n    )[:, None]\n    # Cap values to [0.0, 1.0] domain. See issue:\n    # https://github.com/KaveIO/PhiK/issues/37\n    global_correlations[global_correlations > 1.0] = 1.0\n    global_correlations[global_correlations < 0.0] = 0.0\n    return global_correlations, phik_overview.index.values\n\n\ndef global_phik_array(\n    df: pd.DataFrame,\n    interval_cols: list = None,\n    bins: Union[int, list, np.ndarray, dict] = 10,\n    quantile: bool = False,\n    noise_correction: bool = True,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    verbose: bool = True,\n    njobs: int = -1,\n) -> Tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Global correlation values of variables, obtained from the PhiK correlation matrix.\n\n    A global correlation value is a simple approximation of how well one feature can be modeled in terms of all others.\n\n    The global correlation coefficient is a number between zero and one, obtained from the PhiK correlation matrix,\n    that gives the highest possible correlation between a variable and the linear combination of all other variables.\n    See PhiK paper or for original definition: https://inspirehep.net/literature/101965\n\n    Global PhiK uses two important simplifications / approximations:\n    - The variables are assumed to belong to a multinormal distribution, which is typically not the case.\n    - The correlation should be a Pearson correlation matrix, allowing for negative values, which is not the case\n      with PhiK correlations (which are positive by construction).\n    To correct for these, the Global PhiK values are artificially capped between 0 and 1.\n\n    Still, the Global PhiK values are useful, quick, simple estimates that are interesting in an exploratory study.\n    For a solid, trustworthy estimate be sure to use a classifier or regression model instead.\n\n    :param pd.DataFrame data_binned: input data\n    :param list interval_cols: column names of columns with interval variables.\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the\\\n    bins are specified (default=10). E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param quantile: when bins is an integer, uniform bins (False) or bins based on quantiles (True)\n    :param bool noise_correction: apply noise correction in phik calculation\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :param int njobs: number of parallel jobs used for calc of global phik. default is -1. 1 uses no parallel jobs.\n    :return: global correlations array\n    \"\"\"\n\n    data_binned, binning_dict = auto_bin_data(\n        df=df,\n        interval_cols=interval_cols,\n        bins=bins,\n        quantile=quantile,\n        dropna=dropna,\n        verbose=verbose,\n    )\n\n    return global_phik_from_rebinned_df(\n        data_binned,\n        noise_correction=noise_correction,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n        njobs=njobs,\n    )\n\n\ndef phik_from_array(\n    x: Union[np.ndarray, pd.Series],\n    y: Union[np.ndarray, pd.Series],\n    num_vars: Union[str, list] = None,\n    bins: Union[int, dict, list, np.ndarray] = 10,\n    quantile: bool = False,\n    noise_correction: bool = True,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n) -> float:\n    \"\"\"\n    Correlation matrix of bivariate gaussian derived from chi2-value\n\n    Chi2-value gets converted into correlation coefficient of bivariate gauss\n    with correlation value rho, assuming giving binning and number of records.\n    Correlation coefficient value is between 0 and 1.\n\n    Bivariate gaussian's range is set to [-5,5] by construction.\n\n    :param x: array-like input\n    :param y: array-like input\n    :param num_vars: list of numeric variables which need to be binned, e.g. ['x'] or ['x','y']\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the\\\n    bins are specified (default=10). E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param quantile: when bins is an integer, uniform bins (False) or bins based on quantiles (True)\n    :param bool noise_correction: apply noise correction in phik calculation\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :return: phik correlation coefficient\n    \"\"\"\n    if num_vars is None:\n        num_vars = []\n    elif isinstance(num_vars, str):\n        num_vars = [num_vars]\n\n    if len(num_vars) > 0:\n        df = array_like_to_dataframe(x, y)\n        x, y = bin_data(df, num_vars, bins=bins, quantile=quantile).T.values\n\n    return phik_from_binned_array(\n        x,\n        y,\n        noise_correction=noise_correction,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n    )\n\n\ndef phik_from_binned_array(\n    x: Union[np.ndarray, pd.Series],\n    y: Union[np.ndarray, pd.Series],\n    noise_correction: bool = True,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n) -> float:\n    \"\"\"\n    Correlation matrix of bivariate gaussian derived from chi2-value\n\n    Chi2-value gets converted into correlation coefficient of bivariate gauss\n    with correlation value rho, assuming giving binning and number of records.\n    Correlation coefficient value is between 0 and 1.\n\n    Bivariate gaussian's range is set to [-5,5] by construction.\n\n    :param x: array-like input. Interval variables need to be binned beforehand.\n    :param y: array-like input. Interval variables need to be binned beforehand.\n    :param bool noise_correction: apply noise correction in phik calculation\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :return: phik correlation coefficient\n    \"\"\"\n\n    if not dropna:\n        x = pd.Series(x).fillna(defs.NaN).astype(str).values\n        y = pd.Series(y).fillna(defs.NaN).astype(str).values\n\n    if drop_underflow or drop_overflow:\n        x = pd.Series(x).astype(str).values\n        y = pd.Series(y).astype(str).values\n        if drop_underflow:\n            x[np.where(x == defs.UF)] = np.nan\n            y[np.where(y == defs.UF)] = np.nan\n        if drop_overflow:\n            y[np.where(y == defs.OF)] = np.nan\n            x[np.where(x == defs.OF)] = np.nan\n\n    hist2d = pd.crosstab(x, y).values\n\n    dq_okay = dq_check_hist2d(hist2d)\n    if not dq_okay:\n        return np.nan\n\n    return phik_from_hist2d(hist2d, noise_correction=noise_correction)\n\n\ndef phik_observed_vs_expected_from_rebinned_df(\n    obs_binned: pd.DataFrame,\n    exp_binned: pd.DataFrame,\n    noise_correction: bool = True,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    njobs: int = -1,\n) -> pd.DataFrame:\n    \"\"\"\n    PhiK correlation matrix of comparing observed with expected dataset\n\n    Chi2-value gets converted into correlation coefficient of bivariate gauss\n    with correlation value rho, assuming giving binning and number of records.\n    Correlation coefficient value is between 0 and 1.\n\n    :param pd.DataFrame obs_binned: observed input data where interval variables have been binned\n    :param pd.DataFrame exp_binned: expected input data where interval variables have been binned\n    :param bool noise_correction: apply noise correction in phik calculation\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param int njobs: number of parallel jobs used for calculation of phik. default is -1. 1 uses no parallel jobs.\n    :return: phik correlation matrix\n    \"\"\"\n    # basic checks\n    if isinstance(obs_binned, np.ndarray):\n        obs_binned = pd.DataFrame(obs_binned)\n    if isinstance(exp_binned, np.ndarray):\n        exp_binned = pd.DataFrame(exp_binned)\n    assert set(obs_binned.columns) == set(exp_binned.columns)\n\n    if not dropna:\n        # if not dropna replace the NaN values with the string NaN. Otherwise the rows with NaN are dropped\n        # by the groupby.\n        obs_binned.replace(np.nan, defs.NaN, inplace=True)\n        exp_binned.replace(np.nan, defs.NaN, inplace=True)\n    if drop_underflow:\n        obs_binned.replace(defs.UF, np.nan, inplace=True)\n        exp_binned.replace(defs.UF, np.nan, inplace=True)\n    if drop_overflow:\n        obs_binned.replace(defs.OF, np.nan, inplace=True)\n        exp_binned.replace(defs.OF, np.nan, inplace=True)\n\n    # cache column order (https://github.com/KaveIO/PhiK/issues/1)\n    column_order = obs_binned.columns\n\n    if njobs == 1:\n        # Useful when for instance using cProfiler: https://docs.python.org/3/library/profile.html\n        phik_list = [\n            _calc_phik_obs_vs_exp(\n                co, obs_binned[list(co)], exp_binned[list(co)], noise_correction\n            )\n            for co in itertools.combinations_with_replacement(\n                obs_binned.columns.values, 2\n            )\n        ]\n    else:\n        phik_list = Parallel(n_jobs=njobs)(\n            delayed(_calc_phik_obs_vs_exp)(\n                co, obs_binned[list(co)], exp_binned[list(co)], noise_correction\n            )\n            for co in itertools.combinations_with_replacement(\n                obs_binned.columns.values, 2\n            )\n        )\n\n    if len(phik_list) == 0:\n        return pd.DataFrame(np.nan, index=column_order, columns=column_order)\n\n    phik_overview = create_correlation_overview_table(phik_list)\n\n    # restore column order\n    phik_overview = phik_overview.reindex(columns=column_order)\n    phik_overview = phik_overview.reindex(index=column_order)\n\n    return phik_overview\n\n\ndef _calc_phik_obs_vs_exp(\n    comb: tuple,\n    obs_binned: pd.DataFrame,\n    exp_binned: pd.DataFrame,\n    noise_correction: bool,\n) -> Tuple[str, str, float]:\n    \"\"\"Split off calculation of phik for parallel processing\n\n    :param tuple comb: union of two string columns\n    :param pd.DataFrame obs_binned: observed data where interval variables have been binned\n    :param pd.DataFrame exp_binned: expected data where interval variables have been binned\n    :param bool noise_correction: apply noise correction in phik calculation\n    :return:\n    \"\"\"\n    c0, c1 = comb\n    # identity check\n    if c0 == c1:\n        return c0, c1, 1.0\n\n    observed = obs_binned.groupby([c0, c1])[c0].count().to_frame().unstack().fillna(0)\n    # If 0 or only 1 values for one of the two shape variables, it is not possible to calculate phik.\n    # This check needs to be done after creation of OF, UF and NaN bins.\n    if any([v in observed.shape for v in [0, 1]]):\n        return c0, c1, np.nan\n\n    expected = exp_binned.groupby([c0, c1])[c0].count().to_frame().unstack().fillna(0)\n    # If 0 or only 1 values for one of the two shape variables, it is not possible to calculate phik.\n    # This check needs to be done after creation of OF, UF and NaN bins.\n    if any([v in expected.shape for v in [0, 1]]):\n        return c0, c1, np.nan\n\n    # ensure that both observed and expected have the same number of columns and rows\n    # if not, add these and and fill with zeros.\n    expected = make_shapes_equal(observed, expected)\n\n    phik_value = phik_from_hist2d(\n        observed=observed, noise_correction=noise_correction, expected=expected\n    )\n    return c0, c1, phik_value\n"
  },
  {
    "path": "phik/report.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/09/06\n\nDescription:\n    Functions to create nice correlation overview and matrix plots\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\nimport itertools\nimport os\nfrom typing import Callable, Dict, Tuple, Union\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nfrom matplotlib import colors\nfrom matplotlib.backends.backend_pdf import PdfPages\n\nfrom .binning import bin_data\nfrom .data_quality import dq_check_nunique_values\nfrom .outliers import outlier_significance_matrix_from_rebinned_df\nfrom .phik import global_phik_from_rebinned_df, phik_from_rebinned_df\nfrom .significance import significance_from_rebinned_df\nfrom .utils import guess_interval_cols\n\n\ndef plot_hist_and_func(\n    data: Union[list, np.ndarray, pd.Series],\n    func: Callable,\n    funcparams,\n    xbins=False,\n    labels=None,\n    xlabel=\"\",\n    ylabel=\"\",\n    title=\"\",\n    xlimit=None,\n    alpha=1,\n):\n    \"\"\"\n    Create a histogram of the provided data and overlay with a function.\n\n    :param list data: data\n    :param function func: function of the type f(x, a, b, c) where parameters a, b, c are optional\n    :param list funcparams: parameter values to be given to the function, to be specified as [a, b, c]\n    :param xbins: specify binning of histogram, either by giving the number of bins or a list of bin edges\n    :param labels: labels of histogram and function to be used in the legend\n    :param xlabel: figure xlabel\n    :param ylabel: figure ylabel\n    :param title: figure title\n    :param xlimit: x limits figure\n    :param alpha: alpha histogram\n    :return:\n    \"\"\"\n    if labels is None:\n        labels = [\"\", \"\"]\n\n    # If binning is not specified, create binning here\n    if not np.any(xbins) and not xlimit:\n        xmin = np.min(data)\n        xmax = np.max(data)\n        xnbins = int(len(data) / 50 + 1)\n        xbins = np.linspace(xmin, xmax, xnbins)\n    elif type(xbins) == int or type(xbins) == float:\n        xmin = np.min(data)\n        if xlimit:\n            xmin = xlimit[0]\n        xmax = np.max(data)\n        if xmax:\n            xmax = xlimit[1]\n        xnbins = int(xbins + 1)\n        xbins = np.linspace(xmin, xmax, xnbins)\n\n    # Plot a histogram of the data\n    plt.hist(data, bins=xbins, label=labels[0], alpha=alpha)\n\n    # Find bin centers for plotting the function\n    xvals = xbins[:-1] + np.diff(xbins)[0] / 2\n    bw = xbins[1] - xbins[0]\n    # Plot the fit\n    plt.plot(\n        xvals, len(data) * bw * func(xvals, *funcparams), linewidth=2, label=labels[1]\n    )\n\n    if xlabel:\n        plt.xlabel(xlabel)\n    if ylabel:\n        plt.ylabel(ylabel)\n    if title:\n        plt.title(title)\n\n    if len(labels[0]) > 0:\n        plt.legend()\n\n\ndef plot_correlation_matrix(\n    matrix_colors: np.ndarray,\n    x_labels: list,\n    y_labels: list,\n    pdf_file_name: str = \"\",\n    title: str = \"correlation\",\n    vmin: float = -1,\n    vmax: float = 1,\n    color_map: str = \"RdYlGn\",\n    x_label: str = \"\",\n    y_label: str = \"\",\n    top: int = 20,\n    matrix_numbers: np.ndarray = None,\n    print_both_numbers: bool = True,\n    figsize: tuple = (7, 5),\n    usetex: bool = False,\n    identity_layout: bool = True,\n    fontsize_factor: float = 1,\n) -> None:\n    \"\"\"Create and plot correlation matrix.\n\n    Copied with permission from the eskapade package (pip install eskapade)\n\n    :param matrix_colors: input correlation matrix\n    :param list x_labels: Labels for histogram x-axis bins\n    :param list y_labels: Labels for histogram y-axis bins\n    :param str pdf_file_name: if set, will store the plot in a pdf file\n    :param str title: if set, title of the plot\n    :param float vmin: minimum value of color legend (default is -1)\n    :param float vmax: maximum value of color legend (default is +1)\n    :param str x_label: Label for histogram x-axis\n    :param str y_label: Label for histogram y-axis\n    :param str color_map: color map passed to matplotlib pcolormesh. (default is 'RdYlGn')\n    :param int top: only print the top 20 characters of x-labels and y-labels. (default is 20)\n    :param matrix_numbers: input matrix used for plotting numbers. (default it matrix_colors)\n    :param identity_layout: Plot diagonal from right top to bottom left (True) or bottom left to top right (False)\n    \"\"\"\n    if not isinstance(matrix_colors, np.ndarray):\n        raise TypeError(\"matrix_colors is not a numpy array.\")\n\n    # basic matrix checks\n    assert (matrix_colors.shape[0] == len(y_labels)) or (\n        matrix_colors.shape[0] + 1 == len(y_labels)\n    ), \"matrix_colors shape inconsistent with number of y-labels\"\n    assert (matrix_colors.shape[1] == len(x_labels)) or (\n        matrix_colors.shape[1] + 1 == len(x_labels)\n    ), \"matrix_colors shape inconsistent with number of x-labels\"\n    if matrix_numbers is None:\n        matrix_numbers = matrix_colors\n        print_both_numbers = False  # only one set of numbers possible\n    else:\n        assert matrix_numbers.shape[0] == len(\n            y_labels\n        ), \"matrix_numbers shape inconsistent with number of y-labels\"\n        assert matrix_numbers.shape[1] == len(\n            x_labels\n        ), \"matrix_numbers shape inconsistent with number of x-labels\"\n\n    if identity_layout:\n        matrix_colors = np.array([a[::-1] for a in matrix_colors])\n        x_labels = x_labels[::-1]\n        if matrix_numbers is not None:\n            matrix_numbers = np.array([a[::-1] for a in matrix_numbers])\n\n    plt.rc(\"text\", usetex=usetex)\n\n    fig, ax = plt.subplots(figsize=figsize)\n    # cmap = 'RdYlGn' #'YlGn'\n    norm = colors.Normalize(vmin=vmin, vmax=vmax)\n    img = ax.pcolormesh(\n        matrix_colors, cmap=color_map, edgecolor=\"w\", linewidth=1, norm=norm\n    )\n\n    # set x-axis properties\n    def tick(lab):\n        \"\"\"Get tick.\"\"\"\n        if isinstance(lab, (float, int)):\n            lab = \"NaN\" if np.isnan(lab) else \"{0:.0f}\".format(lab)\n        lab = str(lab)\n        if len(lab) > top:\n            lab = lab[:17] + \"...\"\n        return lab\n\n    # reduce default fontsizes in case too many labels?\n    # nlabs = max(len(y_labels), len(x_labels))\n\n    # axis ticks and tick labels\n    if len(x_labels) == matrix_colors.shape[1] + 1:\n        ax.set_xticks(np.arange(len(x_labels)))\n    else:\n        ax.set_xticks(np.arange(len(x_labels)) + 0.5)\n    ax.set_xticklabels(\n        [tick(lab) for lab in x_labels],\n        rotation=\"vertical\",\n        fontsize=10 * fontsize_factor,\n    )\n\n    if len(y_labels) == matrix_colors.shape[0] + 1:\n        ax.set_yticks(np.arange(len(y_labels)))\n    else:\n        ax.set_yticks(np.arange(len(y_labels)) + 0.5)\n    ax.set_yticklabels(\n        [tick(lab) for lab in y_labels],\n        rotation=\"horizontal\",\n        fontsize=10 * fontsize_factor,\n    )\n\n    # Turn ticks off in case no labels are provided\n    if len(x_labels) == 1 and len(x_labels[0]) == 0:\n        plt.tick_params(\n            axis=\"x\",  # changes apply to the x-axis\n            which=\"both\",  # both major and minor ticks are affected\n            bottom=False,  # ticks along the bottom edge are off\n            top=False,  # ticks along the top edge are off\n            labelbottom=False,\n        )\n    if len(y_labels) == 1 and len(y_labels[0]) == 0:\n        plt.tick_params(\n            axis=\"y\",  # changes apply to the x-axis\n            which=\"both\",  # both major and minor ticks are affected\n            left=False,  # ticks along the bottom edge are off\n            right=False,  # ticks along the top edge are off\n            labelbottom=False,\n        )\n\n    # make plot look pretty\n    ax.set_title(title, fontsize=14 * fontsize_factor)\n    if x_label:\n        ax.set_xlabel(x_label, fontsize=12 * fontsize_factor)\n    if y_label:\n        ax.set_ylabel(y_label, fontsize=12 * fontsize_factor)\n\n    fig.colorbar(img)\n\n    # annotate with correlation values\n    numbers_set = (\n        [matrix_numbers] if not print_both_numbers else [matrix_numbers, matrix_colors]\n    )\n    for i in range(matrix_numbers.shape[1]):\n        for j in range(matrix_numbers.shape[0]):\n            point_color = float(matrix_colors[j][i])\n            white_cond = (\n                (point_color < 0.7 * vmin)\n                or (point_color >= 0.7 * vmax)\n                or np.isnan(point_color)\n            )\n            y_offset = 0.5\n            for m, matrix in enumerate(numbers_set):\n                if print_both_numbers:\n                    if m == 0:\n                        y_offset = 0.7\n                    elif m == 1:\n                        y_offset = 0.25\n                point = float(matrix[j][i])\n                label = \"NaN\" if np.isnan(point) else \"{0:.2f}\".format(point)\n                color = \"w\" if white_cond else \"k\"\n                ax.annotate(\n                    label,\n                    xy=(i + 0.5, j + y_offset),\n                    color=color,\n                    horizontalalignment=\"center\",\n                    verticalalignment=\"center\",\n                    fontsize=10 * fontsize_factor,\n                )\n\n    plt.tight_layout()\n\n    # save plot in file\n    if pdf_file_name:\n        pdf_file = PdfPages(pdf_file_name)\n        plt.savefig(pdf_file, format=\"pdf\", bbox_inches=\"tight\", pad_inches=0)\n        plt.close()\n        pdf_file.close()\n\n\ndef correlation_report(\n    data: pd.DataFrame,\n    interval_cols: list = None,\n    bins=10,\n    quantile: bool = False,\n    do_outliers: bool = True,\n    pdf_file_name: str = \"\",\n    significance_threshold: float = 3,\n    correlation_threshold: float = 0.5,\n    noise_correction: bool = True,\n    store_each_plot: bool = False,\n    lambda_significance: str = \"log-likelihood\",\n    simulation_method: str = \"multinominal\",\n    nsim_chi2: int = 1000,\n    significance_method: str = \"asymptotic\",\n    CI_method: str = \"poisson\",\n    verbose: bool = True,\n    plot_phik_matrix_kws: dict = {},\n    plot_global_phik_kws: dict = {},\n    plot_significance_matrix_kws: dict = {},\n    plot_outlier_significance_kws: dict = {},\n) -> Tuple[pd.DataFrame, pd.DataFrame, Dict[str, pd.DataFrame], Dict[str, str]]:\n    \"\"\"\n    Create a correlation report for the given dataset.\n\n    The following quantities are calculated:\n\n    * The phik correlation matrix\n    * The significance matrix\n    * The outlier significances measured in pairs of variables. (optional)\n\n    :param data: input dataframe\n    :param interval_cols: list of columns names of columns containing interval data\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param quantile: when bins is an integer, uniform bins (False) or bins based on quantiles (True)\n    :param do_outliers: Evaluate outlier significances of variable pairs (when True)\n    :param pdf_file_name: file name of the pdf where the results are stored\n    :param store_each_plot: store each plot in folder derived from pdf_file_name. If true, single pdf is no longer stored. Default is false.\n    :param significance_threshold: evaluate outlier significance for all variable pairs with a significance of \\\n     uncorrelation higher than this threshold\n    :param correlation_threshold: evaluate outlier significance for all variable pairs with a phik correlation \\\n     higher than this threshold\n    :param noise_correction: Apply noise correction in phik calculation\n    :param lambda_significance: test statistic used in significance calculation. Options: [pearson, log-likelihood]\n    :param simulation_method: sampling method using in significance calculation. Options: [mutlinominal, \\\n    row_product_multinominal, col_product_multinominal, hypergeometric]\n    :param nsim_chi2: number of simulated datasets in significance calculation.\n    :param significance_method: method for significance calculation. Options: [asymptotic, MC, hybrid]\n    :param CI_method: method for uncertainty calculation for outlier significance calculation. Options: [poisson, \\\n    exact_poisson]\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :param dict plot_phik_matrix_kws: kwargs passed to plot_correlation_matrix() to plot the phik matrix. \\\n    updates the default plotting values.\n    :param dict plot_global_phik_kws: kwargs passed to plot_correlation_matrix() to plot the global-phik vector. \\\n    updates the default plotting values.\n    :param dict plot_significance_matrix_kws: kwargs passed to plot_correlation_matrix() to plot significance matrix. \\\n    updates the default plotting values.\n    :param dict plot_outlier_significance_kws: kwargs passed to plot_correlation_matrix() to plot the outlier \\\n    significances. updates the default plotting values.\n    :returns: phik_matrix (pd.DataFrame), global_phik (np.array), significance_matrix (pd.DataFrame), \\\n    outliers_overview (dictionary), output_files (dictionary)\n    \"\"\"\n\n    if interval_cols is None:\n        interval_cols = guess_interval_cols(data, verbose)\n\n    data_clean, interval_cols_clean = dq_check_nunique_values(data, interval_cols)\n\n    # create pdf(s) to save plots\n    output_files = dict()\n    plot_file_name = \"\"\n    if store_each_plot:\n        folder = os.path.dirname(pdf_file_name)\n        folder += \"/\" if folder else \"./\"\n        # if each plot is stored, single overview file is no longer stored.\n        # (b/c of problem with multiple PdfPages)\n        pdf_file_name = \"\"\n    if pdf_file_name:\n        pdf_file = PdfPages(pdf_file_name)\n\n    data_binned, binning_dict = bin_data(\n        data_clean, interval_cols_clean, bins=bins, quantile=quantile, retbins=True\n    )\n\n    ### 1. Phik\n    if store_each_plot:\n        plot_file_name = folder + \"phik_matrix.pdf\"\n        output_files[\"phik_matrix\"] = plot_file_name\n    phik_matrix = phik_from_rebinned_df(data_binned, noise_correction)\n\n    default_plot_phik_matrix = dict(\n        x_labels=phik_matrix.columns,\n        y_labels=phik_matrix.index,\n        vmin=0,\n        vmax=1,\n        color_map=\"Blues\",\n        title=r\"correlation $\\phi_K$\",\n        fontsize_factor=1.5,\n        figsize=(7, 5.5),\n        pdf_file_name=plot_file_name,\n    )\n    default_plot_phik_matrix.update(plot_phik_matrix_kws)\n    plot_correlation_matrix(phik_matrix.values, **default_plot_phik_matrix)\n    if pdf_file_name:\n        plt.savefig(pdf_file, format=\"pdf\", bbox_inches=\"tight\", pad_inches=0)\n        plt.show()\n\n    ### 1b. global correlations\n    if store_each_plot:\n        plot_file_name = folder + \"global_phik.pdf\"\n        output_files[\"global_phik\"] = plot_file_name\n    global_phik, global_labels = global_phik_from_rebinned_df(\n        data_binned, noise_correction\n    )\n\n    default_plot_global_phik = dict(\n        x_labels=[\"\"],\n        y_labels=global_labels,\n        vmin=0,\n        vmax=1,\n        figsize=(3.5, 4),\n        color_map=\"Blues\",\n        title=r\"$g_k$\",\n        fontsize_factor=1.5,\n        pdf_file_name=plot_file_name,\n    )\n    default_plot_global_phik.update(plot_global_phik_kws)\n    plot_correlation_matrix(global_phik, **default_plot_global_phik)\n    # plt.tight_layout()\n    if pdf_file_name:\n        plt.savefig(pdf_file, format=\"pdf\", bbox_inches=\"tight\", pad_inches=0)\n        plt.show()\n\n    ### 2. Significance\n    if store_each_plot:\n        plot_file_name = folder + \"significance_matrix.pdf\"\n        output_files[\"significance_matrix\"] = plot_file_name\n    significance_matrix = significance_from_rebinned_df(\n        data_binned,\n        lambda_significance,\n        simulation_method,\n        nsim_chi2,\n        significance_method,\n    )\n\n    default_plot_significance_matrix = dict(\n        x_labels=significance_matrix.columns,\n        y_labels=significance_matrix.index,\n        vmin=-5,\n        vmax=5,\n        title=\"significance\",\n        usetex=False,\n        fontsize_factor=1.5,\n        figsize=(7, 5.5),\n        pdf_file_name=plot_file_name,\n    )\n    default_plot_significance_matrix.update(plot_significance_matrix_kws)\n    plot_correlation_matrix(\n        significance_matrix.fillna(0).values, **default_plot_significance_matrix\n    )\n    if pdf_file_name:\n        plt.savefig(pdf_file, format=\"pdf\", bbox_inches=\"tight\", pad_inches=0)\n        plt.show()\n\n    ### 3. Outlier significance\n    outliers_overview = {}\n    if do_outliers:\n        for i, comb in enumerate(itertools.combinations(data_binned.columns, 2)):\n            c0, c1 = comb\n            if (\n                abs(significance_matrix.loc[c0, c1]) < significance_threshold\n                or phik_matrix.loc[c0, c1] < correlation_threshold\n            ):\n                continue\n\n            zvalues_df = outlier_significance_matrix_from_rebinned_df(\n                data_binned[[c0, c1]].copy(), binning_dict, CI_method=CI_method\n            )\n\n            combi = \":\".join(comb).replace(\" \", \"_\")\n            xlabels = zvalues_df.columns\n            ylabels = zvalues_df.index\n            xlabel = zvalues_df.columns.name\n            ylabel = zvalues_df.index.name\n\n            if store_each_plot:\n                plot_file_name = folder + \"pulls_{0:s}.pdf\".format(combi)\n                output_files[combi] = plot_file_name\n\n            default_plot_outlier_significance = dict(\n                x_labels=xlabels,\n                y_labels=ylabels,\n                x_label=xlabel,\n                y_label=ylabel,\n                vmin=-5,\n                vmax=5,\n                title=\"outlier significance\",\n                identity_layout=False,\n                fontsize_factor=1.2,\n                pdf_file_name=plot_file_name,\n            )\n            default_plot_outlier_significance.update(plot_outlier_significance_kws)\n            plot_correlation_matrix(\n                zvalues_df.values, **default_plot_outlier_significance\n            )\n\n            outliers_overview[combi] = zvalues_df\n\n            if pdf_file_name:\n                plt.savefig(pdf_file, format=\"pdf\", bbox_inches=\"tight\", pad_inches=0)\n                plt.show()\n\n    # save plots\n    if pdf_file_name:\n        output_files[\"all\"] = pdf_file_name\n        plt.close()\n        pdf_file.close()\n\n    return (\n        phik_matrix,\n        global_phik,\n        significance_matrix,\n        outliers_overview,\n        output_files,\n    )\n"
  },
  {
    "path": "phik/resources.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/11/13\n\nDescription:\n    Collection of helper functions to get fixtures, i.e. for test data and notebooks.\n    These are mostly used by the (integration) tests and example notebooks.\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\n\nimport pathlib\nfrom pathlib import Path\n\nROOT_DIRECTORY = Path(__file__).resolve().parent\n\n\n# Fixtures\n_FIXTURE = {_.name: _ for _ in pathlib.Path(ROOT_DIRECTORY / \"data\").glob(\"*\")}\n# Tutorial notebooks\n_NOTEBOOK = {\n    _.name: _ for _ in pathlib.Path(ROOT_DIRECTORY / \"notebooks\").glob(\"*.ipynb\")\n}\n\n# Resource types\n_RESOURCES = {\"fixture\": _FIXTURE, \"notebook\": _NOTEBOOK}\n\n\ndef _resource(resource_type, name: str) -> str:\n    \"\"\"Return the full path filename of a resource.\n\n    :param str resource_type: The type of the resource.\n    :param str  name: The name of the resource.\n    :returns: The full path filename of the fixture data set.\n    :rtype: str\n    :raises FileNotFoundError: If the resource cannot be found.\n    \"\"\"\n    full_path = _RESOURCES[resource_type].get(name, None)\n\n    if full_path and full_path.exists():\n        return str(full_path)\n\n    raise FileNotFoundError(\n        'Could not find {resource_type} \"{name!s}\"! Does it exist?'.format(\n            resource_type=resource_type, name=name\n        )\n    )\n\n\ndef fixture(name: str) -> str:\n    \"\"\"Return the full path filename of a fixture data set.\n\n    :param str name: The name of the fixture.\n    :returns: The full path filename of the fixture data set.\n    :rtype: str\n    :raises FileNotFoundError: If the fixture cannot be found.\n    \"\"\"\n    return _resource(\"fixture\", name)\n\n\ndef notebook(name: str) -> str:\n    \"\"\"Return the full path filename of a tutorial notebook.\n\n    :param str name: The name of the notebook.\n    :returns: The full path filename of the notebook.\n    :rtype: str\n    :raises FileNotFoundError: If the notebook cannot be found.\n    \"\"\"\n    return _resource(\"notebook\", name)\n"
  },
  {
    "path": "phik/significance.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/09/05\n\nDescription:\n    Functions for doing the significance evaluation of an hypothesis test of variable independence\n    using a contingency table.\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\nfrom typing import Tuple, Union\n\nimport numpy as np\nimport pandas as pd\nimport math\nimport itertools\nimport warnings\n\nfrom scipy import stats\nfrom scipy import special, optimize\n\nfrom phik import definitions as defs\nfrom .binning import bin_data, create_correlation_overview_table\nfrom .statistics import get_chi2_using_dependent_frequency_estimates\nfrom .statistics import estimate_ndof, theoretical_ndof\nfrom .simulation import sim_chi2_distribution\nfrom .data_quality import dq_check_nunique_values, dq_check_hist2d\nfrom .utils import array_like_to_dataframe, guess_interval_cols\n\n\ndef fit_test_statistic_distribution(\n    chi2s: Union[list, np.ndarray], nbins: int = 50\n) -> Tuple[float, float, float, float]:\n    \"\"\"\n    Fit the hybrid chi2-distribution to the data to find f.\n\n    Perform a binned likelihood fit to the data to find the optimal value for the fraction f in\n    h(x|f) = N * (f * chi2(x, ndof) + (1-f) * gauss(x, ndof, sqrt(ndof))\n    The parameter ndof is fixed in the fit using ndof = mean(x). The total number of datapoints N is also fixed.\n\n    :param list chi2s: input data - a list of chi2 values\n    :param int nbins: in order to fit the data a histogram is created with nbins number of bins\n    :returns: f, ndof, sigma (width of gauss), bw (bin width)\n    \"\"\"\n\n    def myfunc(x, N, f, k, sigma):\n        return N * (f * stats.chi2.pdf(x, k) + (1 - f) * stats.norm.pdf(x, k, sigma))\n\n    ffunc = lambda x, f: myfunc(x, nsim * bw, f, kmean, lsigma)\n\n    def gtest(p, x, y):\n        f = ffunc(x, *p)\n        ll = f - special.xlogy(y, f) + special.gammaln(y + 1)\n        return np.sqrt(ll)\n\n    kmean = np.mean(chi2s)  # NOTE: this is used to fix kmean in the fit!\n    lsigma = np.sqrt(kmean)  # NOTE: this is used to fix sigma in the fit!\n    nsim = len(chi2s)  # NOTE: this is used to fix N in fit (N=nsim*bw) !\n\n    yhist, xbounds = np.histogram(chi2s, bins=nbins)\n    bw = xbounds[1] - xbounds[0]  # NOTE: this is used to fix N in fit (N=nsim*bw) !\n    xhist = xbounds[:-1] + np.diff(xbounds) / 2\n\n    initGuess = (1.0,)  # starting value for parameter f\n    res = optimize.least_squares(\n        gtest, initGuess, bounds=((0.0,), (1,)), args=(xhist, yhist)\n    )\n\n    return res.x[0], kmean, lsigma, bw\n\n\ndef hfunc(x: float, N: float, f: float, k: float, sigma: float) -> float:\n    \"\"\"\n    Definition of the combined probability density function h(x)\n\n    h(x|f) = N * (f * chi2(x, k) + (1-f) * gauss(x, k, sigma)\n\n    :param float x: x\n    :param float N: normalisation\n    :param float f: fraction [0,1]\n    :param float k: ndof of chi2 function and mean of gauss\n    :param float sigma: width of gauss\n    :return: h(x|f)\n    \"\"\"\n    return N * (f * stats.chi2.pdf(x, k) + (1 - f) * stats.norm.pdf(x, k, sigma))\n\n\ndef significance_from_chi2_ndof(chi2: float, ndof: float) -> Tuple[float, float]:\n    \"\"\"\n    Convert a chi2 into significance using knowledge about the number of degrees of freedom\n\n    Conversion is done using asymptotic approximation.\n\n    :param float chi2: chi2 value\n    :param float ndof: number of degrees of freedom\n    :returns: p_value, significance\n    \"\"\"\n    p_value = stats.chi2.sf(chi2, ndof)\n    z_value = -stats.norm.ppf(p_value)\n\n    # scenario where p_value is too small to evaluate Z\n    # use Chernoff approximation for p-value upper bound\n    # see: https://en.wikipedia.org/wiki/Chi-squared_distribution\n    if p_value == 0:\n        z = chi2 / ndof\n        u = -math.log(2 * math.pi) - ndof * math.log(z) + ndof * (z - 1)\n        z_value = math.sqrt(u - math.log(u))\n\n    return p_value, z_value\n\n\ndef significance_from_chi2_asymptotic(\n    values: np.ndarray, chi2: float\n) -> Tuple[float, float]:\n    \"\"\"\n    Convert a chi2 into significance using knowledge about the number of degrees of freedom\n\n    Convention is done using asymptotic approximation.\n\n    :param float chi2: chi2 value\n    :param float ndof: number of degrees of freedom\n    :returns: p_value, significance\n    \"\"\"\n\n    ndof = theoretical_ndof(values)\n    p_value, z_value = significance_from_chi2_ndof(chi2, ndof)\n\n    return p_value, z_value\n\n\ndef significance_from_chi2_MC(\n    chi2: float,\n    values: np.ndarray,\n    nsim: int = 1000,\n    lambda_: str = \"log-likelihood\",\n    simulation_method: str = \"multinominal\",\n    chi2s=None,\n    njobs: int = -1,\n) -> Tuple[float, float]:\n    \"\"\"\n    Convert a chi2 into significance using knowledge about the shape of the chi2 distribution of simulated data\n\n    Calculate significance based on simulation (MC method), using a simple percentile.\n\n    :param float chi2: chi2 value\n    :param list chi2s: provide your own chi2s values (optional)\n    :param int njobs: number of parallel jobs used for simulation. default is -1. 1 uses no parallel jobs.\n    :returns: pvalue, significance\n    \"\"\"\n\n    # determine effective number of degrees of freedom using simulation\n    if chi2s is None:\n        chi2s = sim_chi2_distribution(\n            values,\n            nsim=nsim,\n            lambda_=lambda_,\n            simulation_method=simulation_method,\n            njobs=njobs,\n        )\n\n    # calculate p_value based on simulation (MC method)\n    empirical_p_value = 1.0 - stats.percentileofscore(chi2s, chi2) / 100.0\n    empirical_z_value = -stats.norm.ppf(empirical_p_value)\n\n    return empirical_p_value, empirical_z_value\n\n\ndef significance_from_chi2_hybrid(\n    chi2: float,\n    values: np.ndarray,\n    nsim: int = 1000,\n    lambda_: str = \"log-likelihood\",\n    simulation_method: str = \"multinominal\",\n    chi2s=None,\n    njobs: int = -1,\n) -> Tuple[float, float]:\n    \"\"\"\n    Convert a chi2 into significance using a hybrid method\n\n    This method combines the asymptotic method with the MC method, but applies several corrections:\n\n    * use effective number of degrees of freedom instead of number of degrees of freedom. The effective number of\\\n      degrees of freedom is measured as mean(chi2s), with chi2s a list of simulated chi2 values.\n    * for low statistics data sets, with on average less than 4 data points per bin, the distribution of chi2-values\\\n      is better described by h(x|f) then by the usual chi2-distribution. Use h(x|f) to convert the chi2 value to \\\n      the pvalue and significance.\n\n    h(x|f) = N * (f * chi2(x, ndof) + (1-f) * gauss(x, ndof, sqrt(ndof))\n\n    :param float chi2: chi2 value\n    :param list chi2s: provide your own chi2s values (optional)\n    :param float avg_per_bin: average number of data points per bin\n    :param int njobs: number of parallel jobs used for simulation. default is -1. 1 uses no parallel jobs.\n    :returns: p_value, significance\n    \"\"\"\n\n    # determine effective number of degrees of freedom using simulation\n    if chi2s is None:\n        chi2s = sim_chi2_distribution(\n            values,\n            nsim=nsim,\n            lambda_=lambda_,\n            simulation_method=simulation_method,\n            njobs=njobs,\n        )\n\n    # average number of records per bin\n    avg_per_bin = values.sum() / values.shape[0] * values.shape[1]\n\n    if avg_per_bin <= 4:\n        f, endof, lsigma, bw = fit_test_statistic_distribution(chi2s)\n        pvalue_h = f * stats.chi2.sf(chi2, endof) + (1 - f) * stats.norm.sf(\n            chi2, endof, lsigma\n        )\n    else:\n        endof = estimate_ndof(chi2s)\n        pvalue_h = stats.chi2.sf(chi2, endof)\n\n    zvalue_h = -stats.norm.ppf(pvalue_h)\n\n    if pvalue_h == 0:\n        # apply Chernoff approximation as upper bound for p-value\n        # see: https://en.wikipedia.org/wiki/Chi-squared_distribution\n        z = chi2 / endof\n        u = -math.log(2 * math.pi) - endof * math.log(z) + endof * (z - 1)\n        if avg_per_bin <= 4:\n            u += -2 * math.log(f)\n        zvalue_h = math.sqrt(u - math.log(u))\n\n    return pvalue_h, zvalue_h\n\n\ndef significance_from_hist2d(\n    values: np.ndarray,\n    nsim: int = 1000,\n    lambda_: str = \"log-likelihood\",\n    simulation_method: str = \"multinominal\",\n    significance_method: str = \"hybrid\",\n    njobs: int = -1,\n) -> Tuple[float, float]:\n    \"\"\"\n    Calculate the significance of correlation of two variables based on the contingency table\n\n    :param values: contingency table\n    :param int nsim: number of simulations\n    :param str lambda_: test statistic. Available options are [pearson, log-likelihood]\n    :param str simulation_method: simulation method. Options: [multinominal, row_product_multinominal, \\\n     col_product_multinominal, hypergeometric].\n    :param str significance_method: significance_method. Options: [asymptotic, MC, hybrid]\n    :param int njobs: number of parallel jobs used for simulation. default is -1. 1 uses no parallel jobs.\n    :return: pvalue, significance\n    \"\"\"\n\n    # chi2 of the data\n    chi2 = get_chi2_using_dependent_frequency_estimates(values, lambda_=lambda_)\n\n    if significance_method == \"asymptotic\":\n        # calculate pvalue and zvalue based on chi2 and ndof (asymptotic method)\n        pvalue, zvalue = significance_from_chi2_asymptotic(values, chi2)\n    elif significance_method == \"MC\":\n        # calculate pvalue based on simulation (MC method)\n        pvalue, zvalue = significance_from_chi2_MC(\n            chi2,\n            values,\n            nsim=nsim,\n            lambda_=lambda_,\n            simulation_method=simulation_method,\n            njobs=njobs,\n        )\n    elif significance_method == \"hybrid\":\n        # low statistics : calculate pvalue and zvalue using h(x|f) and endof\n        # high statistics: calculate pvalue and zvalue using chi2-distribution and endof\n        pvalue, zvalue = significance_from_chi2_hybrid(\n            chi2,\n            values,\n            nsim=nsim,\n            lambda_=lambda_,\n            simulation_method=simulation_method,\n            njobs=njobs,\n        )\n    else:\n        raise NotImplementedError(\n            \"simulation_method {0:s} is unknown\".format(simulation_method)\n        )\n\n    return pvalue, zvalue\n\n\ndef significance_from_rebinned_df(\n    data_binned: pd.DataFrame,\n    lambda_: str = \"log-likelihood\",\n    simulation_method: str = \"multinominal\",\n    nsim: int = 1000,\n    significance_method: str = \"hybrid\",\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    njobs: int = -1,\n) -> pd.DataFrame:\n    \"\"\"\n    Calculate significance of correlation of all variable combinations in the DataFrame\n\n    :param data_binned: input binned DataFrame\n    :param int nsim: number of simulations\n    :param str lambda_: test statistic. Available options are [pearson, log-likelihood]\n    :param str simulation_method: simulation method. Options: [mutlinominal, row_product_multinominal, \\\n     col_product_multinominal, hypergeometric].\n    :param str significance_method: significance_method. Options: [asymptotic, MC, hybrid]\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param int njobs: number of parallel jobs used for simulation. default is -1.\n    :return: significance matrix\n    \"\"\"\n\n    if not dropna:\n        # if not dropna replace the NaN values with the string NaN. Otherwise the rows with NaN are dropped\n        # by the groupby.\n        data_binned.replace(np.nan, defs.NaN, inplace=True)\n    if drop_underflow:\n        data_binned.replace(defs.UF, np.nan, inplace=True)\n    if drop_overflow:\n        data_binned.replace(defs.OF, np.nan, inplace=True)\n\n    # cache column order (https://github.com/KaveIO/PhiK/issues/1)\n    column_order = data_binned.columns\n    signifs = []\n    for i, (c0, c1) in enumerate(\n        itertools.combinations_with_replacement(data_binned.columns.values, 2)\n    ):\n        datahist = (\n            data_binned.groupby([c0, c1])[c0].count().to_frame().unstack().fillna(0)\n        )\n        if 1 in datahist.shape or 0 in datahist.shape:\n            signifs.append((c0, c1, np.nan))\n            warnings.warn(\n                \"Too few unique values for variable {0:s} ({1:d}) or {2:s} ({3:d}) to calculate significance\".format(\n                    c0, datahist.shape[0], c1, datahist.shape[1]\n                )\n            )\n            continue\n\n        datahist.columns = datahist.columns.droplevel()\n        datahist = datahist.values\n        pvalue, zvalue = significance_from_hist2d(\n            datahist,\n            nsim=nsim,\n            lambda_=lambda_,\n            simulation_method=simulation_method,\n            significance_method=significance_method,\n            njobs=njobs,\n        )\n        signifs.append((c0, c1, zvalue))\n\n    if len(signifs) == 0:\n        return pd.DataFrame(np.nan, index=column_order, columns=column_order)\n\n    significance_overview = create_correlation_overview_table(signifs)\n\n    # restore column order\n    significance_overview = significance_overview.reindex(columns=column_order)\n    significance_overview = significance_overview.reindex(index=column_order)\n\n    return significance_overview\n\n\ndef significance_matrix(\n    df: pd.DataFrame,\n    interval_cols: list = None,\n    lambda_: str = \"log-likelihood\",\n    simulation_method: str = \"multinominal\",\n    nsim: int = 1000,\n    significance_method: str = \"hybrid\",\n    bins: Union[int, list, np.ndarray, dict] = 10,\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    verbose: bool = True,\n    njobs: int = -1,\n) -> pd.DataFrame:\n    \"\"\"\n    Calculate significance of correlation of all variable combinations in the dataframe\n\n    :param pd.DataFrame df: input data\n    :param list interval_cols: column names of columns with interval variables.\n    :param int nsim: number of simulations\n    :param str lambda_: test statistic. Available options are [pearson, log-likelihood]\n    :param str simulation_method: simulation method. Options: [mutlinominal, row_product_multinominal, \\\n     col_product_multinominal, hypergeometric].\n    :param int nsim: number of simulated datasets\n    :param str significance_method: significance_method. Options: [asymptotic, MC, hybrid]\n        :param bool dropna: remove NaN values with True\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool verbose: if False, do not print all interval columns that are guessed\n    :param int njobs: number of parallel jobs used for simulation. default is -1. 1 uses no parallel jobs.\n    :return: significance matrix\n    \"\"\"\n\n    if interval_cols is None:\n        interval_cols = guess_interval_cols(df, verbose)\n\n    df_clean, interval_cols_clean = dq_check_nunique_values(\n        df, interval_cols, dropna=dropna\n    )\n\n    data_binned = bin_data(df_clean, interval_cols_clean, bins=bins)\n\n    return significance_from_rebinned_df(\n        data_binned,\n        lambda_=lambda_,\n        simulation_method=simulation_method,\n        nsim=nsim,\n        significance_method=significance_method,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n        njobs=njobs,\n    )\n\n\ndef significance_from_array(\n    x: Union[np.ndarray, pd.Series],\n    y: Union[np.ndarray, pd.Series],\n    num_vars=None,\n    bins: Union[int, list, np.ndarray, dict] = 10,\n    quantile: bool = False,\n    lambda_: str = \"log-likelihood\",\n    nsim: int = 1000,\n    significance_method: str = \"hybrid\",\n    simulation_method: str = \"multinominal\",\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    njobs: int = -1,\n) -> Tuple[float, float]:\n    \"\"\"\n    Calculate the significance of correlation\n\n    Calculate the significance of correlation for two variables which can be of interval, oridnal or categorical type.\\\n    Interval variables will be binned.\n\n    :param x: array-like input\n    :param y: array-like input\n    :param num_vars: list of numeric variables which need to be binned, e.g. ['x'] or ['x','y']\n    :param bins: number of bins, or a list of bin edges (same for all columns), or a dictionary where per column the bins are specified. (default=10)\\\n    E.g.: bins = {'mileage':5, 'driver_age':[18,25,35,45,55,65,125]}\n    :param quantile: when bins is an integer, uniform bins (False) or bins based on quantiles (True)\n    :param str lambda_: test statistic. Available options are [pearson, log-likelihood]\n    :param int nsim: number of simulated datasets\n    :param str simulation_method: simulation method. Options: [mutlinominal, row_product_multinominal, \\\n    col_product_multinominal, hypergeometric].\n    :param str significance_method: significance_method. Options: [asymptotic, MC, hybrid]\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param int njobs: number of parallel jobs used for simulation. default is -1. 1 uses no parallel jobs.\n    :return: p-value, significance\n    \"\"\"\n    if num_vars is None:\n        num_vars = []\n    elif isinstance(num_vars, str):\n        num_vars = [num_vars]\n\n    if len(num_vars) > 0:\n        df = array_like_to_dataframe(x, y)\n        x, y = bin_data(df, num_vars, bins=bins, quantile=quantile).T.values\n\n    return significance_from_binned_array(\n        x,\n        y,\n        lambda_=lambda_,\n        significance_method=significance_method,\n        nsim=nsim,\n        simulation_method=simulation_method,\n        dropna=dropna,\n        drop_underflow=drop_underflow,\n        drop_overflow=drop_overflow,\n        njobs=njobs,\n    )\n\n\ndef significance_from_binned_array(\n    x: Union[np.ndarray, pd.Series],\n    y: Union[np.ndarray, pd.Series],\n    lambda_: str = \"log-likelihood\",\n    significance_method: str = \"hybrid\",\n    nsim: int = 1000,\n    simulation_method: str = \"multinominal\",\n    dropna: bool = True,\n    drop_underflow: bool = True,\n    drop_overflow: bool = True,\n    njobs: int = -1,\n) -> Tuple[float, float]:\n    \"\"\"\n    Calculate the significance of correlation\n\n    Calculate the significance of correlation for two variables which can be of interval, oridnal or categorical type. \\\n    Interval variables need to be binned.\n\n    :param x: array-like input\n    :param y: array-like input\n    :param str lambda_: test statistic. Available options are [pearson, log-likelihood]\n    :param str simulation_method: simulation method. Options: [multinominal, row_product_multinominal, \\\n    col_product_multinominal, hypergeometric].\n    :param int nsim: number of simulated datasets\n    :param str significance_method: significance_method. Options: [asymptotic, MC, hybrid]\n    :param bool dropna: remove NaN values with True\n    :param bool drop_underflow: do not take into account records in underflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param bool drop_overflow: do not take into account records in overflow bin when True (relevant when binning\\\n    a numeric variable)\n    :param int njobs: number of parallel jobs used for simulation. default is -1. 1 uses no parallel jobs.\n    :return: p-value, significance\n    \"\"\"\n\n    if not dropna:\n        x = pd.Series(x).fillna(defs.NaN).astype(str).values\n        y = (\n            pd.Series(y).fillna(defs.NaN).astype(str).values\n        )  # crosstab cannot handle mixed type y!\n\n    if drop_underflow or drop_overflow:\n        x = pd.Series(x).astype(str).values\n        y = pd.Series(y).astype(str).values\n        if drop_underflow:\n            x[np.where(x == defs.UF)] = np.nan\n            y[np.where(y == defs.UF)] = np.nan\n        if drop_overflow:\n            y[np.where(y == defs.OF)] = np.nan\n            x[np.where(x == defs.OF)] = np.nan\n\n    hist2d = pd.crosstab(x, y).values\n\n    if not dq_check_hist2d(hist2d):\n        return np.nan, np.nan\n\n    return significance_from_hist2d(\n        hist2d,\n        lambda_=lambda_,\n        significance_method=significance_method,\n        simulation_method=simulation_method,\n        nsim=nsim,\n        njobs=njobs,\n    )\n"
  },
  {
    "path": "phik/simcore/__init__.py",
    "content": "import importlib.util\n\ntry:\n    _ext_spec = importlib.util.find_spec(\"phik.lib._phik_simulation_core\")\nexcept ModuleNotFoundError:\n    _ext_spec = None\n\nif _ext_spec is not None:\n    from phik.lib._phik_simulation_core import _sim_2d_data_patefield\n\n    CPP_SUPPORT = True\nelse:\n    CPP_SUPPORT = False\n\n    def _sim_2d_data_patefield(*args, **kwargs):\n        msg = \"Patefield requires a compiled extension that was not found.\"\n        raise NotImplementedError(msg)\n\n\n__all__ = [\"CPP_SUPPORT\", \"_sim_2d_data_patefield\"]\n"
  },
  {
    "path": "phik/simcore/asa159.cpp",
    "content": "/*\n * Taken from:\n * https://people.sc.fsu.edu/~jburkardt/cpp_src/asa159/asa159.html\n *\n * Michael Patefield,\n * Algorithm AS 159: An Efficient Method of Generating RXC Tables with Given Row and Column Totals,\n * Applied Statistics,\n * Volume 30, Number 1, 1981, pages 91-97.\n */\n\n# include <cmath>\n# include <cstdlib>\n# include <ctime>\n# include <iostream>\n# include <iomanip>\n#include <string>\n\nusing namespace std;\n\n# include \"asa159.hpp\"\n\n//****************************************************************************80\n\nint i4_max ( int i1, int i2 )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    I4_MAX returns the maximum of two I4's.\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    13 October 1998\n//\n//  Author:\n//\n//    John Burkardt\n//\n//  Parameters:\n//\n//    Input, int I1, I2, are two integers to be compared.\n//\n//    Output, int I4_MAX, the larger of I1 and I2.\n//\n{\n  int value;\n\n  if ( i2 < i1 )\n  {\n    value = i1;\n  }\n  else\n  {\n    value = i2;\n  }\n  return value;\n}\n//****************************************************************************80\n\nint i4_min ( int i1, int i2 )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    I4_MIN returns the minimum of two I4's.\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    13 October 1998\n//\n//  Author:\n//\n//    John Burkardt\n//\n//  Parameters:\n//\n//    Input, int I1, I2, two integers to be compared.\n//\n//    Output, int I4_MIN, the smaller of I1 and I2.\n//\n{\n  int value;\n\n  if ( i1 < i2 )\n  {\n    value = i1;\n  }\n  else\n  {\n    value = i2;\n  }\n  return value;\n}\n//****************************************************************************80\n\nvoid i4mat_print ( int m, int n, int a[], string title )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    I4MAT_PRINT prints an I4MAT.\n//\n//  Discussion:\n//\n//    An I4MAT is an MxN array of I4's, stored by (I,J) -> [I+J*M].\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    10 September 2009\n//\n//  Author:\n//\n//    John Burkardt\n//\n//  Parameters:\n//\n//    Input, int M, the number of rows in A.\n//\n//    Input, int N, the number of columns in A.\n//\n//    Input, int A[M*N], the M by N matrix.\n//\n//    Input, string TITLE, a title.\n//\n{\n  i4mat_print_some ( m, n, a, 1, 1, m, n, title );\n\n  return;\n}\n//****************************************************************************80\n\nvoid i4mat_print_some ( int m, int n, int a[], int ilo, int jlo, int ihi,\n  int jhi, string title )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    I4MAT_PRINT_SOME prints some of an I4MAT.\n//\n//  Discussion:\n//\n//    An I4MAT is an MxN array of I4's, stored by (I,J) -> [I+J*M].\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    20 August 2010\n//\n//  Author:\n//\n//    John Burkardt\n//\n//  Parameters:\n//\n//    Input, int M, the number of rows of the matrix.\n//    M must be positive.\n//\n//    Input, int N, the number of columns of the matrix.\n//    N must be positive.\n//\n//    Input, int A[M*N], the matrix.\n//\n//    Input, int ILO, JLO, IHI, JHI, designate the first row and\n//    column, and the last row and column to be printed.\n//\n//    Input, string TITLE, a title.\n//\n{\n# define INCX 10\n\n  int i;\n  int i2hi;\n  int i2lo;\n  int j;\n  int j2hi;\n  int j2lo;\n\n  cout << \"\\n\";\n  cout << title << \"\\n\";\n\n  if ( m <= 0 || n <= 0 )\n  {\n    cout << \"\\n\";\n    cout << \"  (None)\\n\";\n    return;\n  }\n//\n//  Print the columns of the matrix, in strips of INCX.\n//\n  for ( j2lo = jlo; j2lo <= jhi; j2lo = j2lo + INCX )\n  {\n    j2hi = j2lo + INCX - 1;\n    if ( n < j2hi )\n    {\n      j2hi = n;\n    }\n    if ( jhi < j2hi )\n    {\n      j2hi = jhi;\n    }\n\n    cout << \"\\n\";\n//\n//  For each column J in the current range...\n//\n//  Write the header.\n//\n    cout << \"  Col:\";\n    for ( j = j2lo; j <= j2hi; j++ )\n    {\n      cout << \"  \" << setw(6) << j - 1;\n    }\n    cout << \"\\n\";\n    cout << \"  Row\\n\";\n    cout << \"\\n\";\n//\n//  Determine the range of the rows in this strip.\n//\n    if ( 1 < ilo )\n    {\n      i2lo = ilo;\n    }\n    else\n    {\n      i2lo = 1;\n    }\n    if ( ihi < m )\n    {\n      i2hi = ihi;\n    }\n    else\n    {\n      i2hi = m;\n    }\n\n    for ( i = i2lo; i <= i2hi; i++ )\n    {\n//\n//  Print out (up to INCX) entries in row I, that lie in the current strip.\n//\n      cout << setw(5) << i - 1 << \":\";\n      for ( j = j2lo; j <= j2hi; j++ )\n      {\n        cout << \"  \" << setw(6) << a[i-1+(j-1)*m];\n      }\n      cout << \"\\n\";\n    }\n  }\n\n  return;\n# undef INCX\n}\n//****************************************************************************80\n\nvoid i4vec_print ( int n, int a[], string title )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    I4VEC_PRINT prints an I4VEC.\n//\n//  Discussion:\n//\n//    An I4VEC is a vector of I4's.\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    14 November 2003\n//\n//  Author:\n//\n//    John Burkardt\n//\n//  Parameters:\n//\n//    Input, int N, the number of components of the vector.\n//\n//    Input, int A[N], the vector to be printed.\n//\n//    Input, string TITLE, a title.\n//\n{\n  int i;\n\n  cout << \"\\n\";\n  cout << title << \"\\n\";\n  cout << \"\\n\";\n  for ( i = 0; i < n; i++ )\n  {\n    cout << \"  \" << setw(8) << i\n         << \": \" << setw(8) << a[i]  << \"\\n\";\n  }\n  return;\n}\n//****************************************************************************80\n\nint i4vec_sum ( int n, int a[] )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    I4VEC_SUM sums the entries of an I4VEC.\n//\n//  Discussion:\n//\n//    An I4VEC is a vector of I4's.\n//\n//  Example:\n//\n//    Input:\n//\n//      A = ( 1, 2, 3, 4 )\n//\n//    Output:\n//\n//      I4VEC_SUM = 10\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    26 May 1999\n//\n//  Author:\n//\n//    John Burkardt\n//\n//  Parameters:\n//\n//    Input, int N, the number of entries in the vector.\n//\n//    Input, int A[N], the vector to be summed.\n//\n//    Output, int I4VEC_SUM, the sum of the entries of A.\n//\n{\n  int i;\n  int sum;\n\n  sum = 0;\n  for ( i = 0; i < n; i++ )\n  {\n    sum = sum + a[i];\n  }\n\n  return sum;\n}\n//****************************************************************************80\n\ndouble r8_uniform_01 ( int *seed )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    R8_UNIFORM_01 is a unit pseudorandom R8.\n//\n//  Discussion:\n//\n//    This routine implements the recursion\n//\n//      seed = 16807 * seed mod ( 2**31 - 1 )\n//      unif = seed / ( 2**31 - 1 )\n//\n//    The integer arithmetic never requires more than 32 bits,\n//    including a sign bit.\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    11 August 2004\n//\n//  Reference:\n//\n//    Paul Bratley, Bennett Fox, Linus Schrage,\n//    A Guide to Simulation,\n//    Springer Verlag, pages 201-202, 1983.\n//\n//    Bennett Fox,\n//    Algorithm 647:\n//    Implementation and Relative Efficiency of Quasirandom\n//    Sequence Generators,\n//    ACM Transactions on Mathematical Software,\n//    Volume 12, Number 4, pages 362-376, 1986.\n//\n//  Parameters:\n//\n//    Input/output, int *SEED, a seed for the random number generator.\n//\n//    Output, double R8_UNIFORM_01, a new pseudorandom variate, strictly between\n//    0 and 1.\n//\n{\n  int k;\n  double r;\n\n  k = *seed / 127773;\n\n  *seed = 16807 * ( *seed - k * 127773 ) - k * 2836;\n\n  if ( *seed < 0 )\n  {\n    *seed = *seed + 2147483647;\n  }\n\n  r = ( double ) ( *seed ) * 4.656612875E-10;\n\n  return r;\n}\n//****************************************************************************80\n\nvoid rcont2 ( int nrow, int ncol, int nrowt[], int ncolt[], bool *key,\n  int *seed, int matrix[],  int *ierror )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    RCONT2 constructs a random two-way contingency table with given sums.\n//\n//  Discussion:\n//\n//    It is possible to specify row and column sum vectors which\n//    correspond to no table at all.  As far as I can see, this routine does\n//    not detect such a case.\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    10 March 2009\n//\n//  Author:\n//\n//    Original FORTRAN77 version by WM Patefield.\n//    C++ version by John Burkardt.\n//\n//  Reference:\n//\n//    WM Patefield,\n//    Algorithm AS 159:\n//    An Efficient Method of Generating RXC Tables with\n//    Given Row and Column Totals,\n//    Applied Statistics,\n//    Volume 30, Number 1, 1981, pages 91-97.\n//\n//  Parameters:\n//\n//    Input, int NROW, NCOL, the number of rows and columns\n//    in the table.  NROW and NCOL must each be at least 2.\n//\n//    Input, int NROWT[NROW], NCOLT[NCOL], the row and column\n//    sums.  Each entry must be positive.\n//\n//    Input/output, bool *KEY, a flag that indicates whether data has\n//    been initialized for this problem.  Set KEY = .FALSE. before the first\n//    call.\n//\n//    Input/output, int *SEED, a seed for the random number generator.\n//\n//    Output, int MATRIX[NROW*NCOL], the matrix.\n//\n//    Output, int *IERROR, an error flag, which is returned\n//    as 0 if no error occurred.\n//\n{\n  bool done1;\n  bool done2;\n  static double *fact = NULL;\n  int i;\n  int ia;\n  int iap;\n  int ib;\n  int ic;\n  int id;\n  int idp;\n  int ie;\n  int igp;\n  int ihp;\n  int ii;\n  int iip;\n  int j;\n  int jc;\n  int *jwork;\n  int l;\n  bool lsm;\n  bool lsp;\n  int m;\n  int nll;\n  int nlm;\n  int nlmp;\n  int nrowtl;\n  static int ntotal = 0;\n  double r;\n  double sumprb;\n  double x;\n  double y;\n\n  *ierror = 0;\n//\n//  On user's signal, set up the factorial table.\n//\n  if ( !(*key) )\n  {\n\n    *key = true;\n\n    if ( nrow <= 1 )\n    {\n      cout << \"\\n\";\n      cout << \"RCONT - Fatal error!\\n\";\n      cout << \"  Input number of rows is less than 2.\\n\";\n      *ierror = 1;\n      return;\n    }\n\n    if ( ncol <= 1 )\n    {\n      cout << \"\\n\";\n      cout << \"RCONT - Fatal error!\\n\";\n      cout << \"  The number of columns is less than 2.\\n\";\n      *ierror = 2;\n      return;\n    }\n\n    for ( i = 0; i < nrow; i++ )\n    {\n      if ( nrowt[i] <= 0 )\n      {\n        cout << \"\\n\";\n        cout << \"RCONT - Fatal error!\\n\";\n        cout << \"  An entry in the row sum vector is not positive.\\n\";\n        *ierror = 3;\n        return;\n      }\n    }\n\n    for ( j = 0; j < ncol; j++ )\n    {\n      if ( ncolt[j] <= 0 )\n      {\n        cout << \"\\n\";\n        cout << \"RCONT - Fatal error!\\n\";\n        cout << \"  An entry in the column sum vector is not positive.\\n\";\n        *ierror = 4;\n        return;\n      }\n    }\n\n    if ( i4vec_sum ( ncol, ncolt ) != i4vec_sum ( nrow, nrowt ) )\n    {\n      cout << \"\\n\";\n      cout << \"RCONT - Fatal error!\\n\";\n      cout << \"  The row and column sum vectors do not have the same sum.\\n\";\n      *ierror = 6;\n      return;\n    }\n\n    ntotal = i4vec_sum ( ncol, ncolt );\n\n    if ( fact )\n    {\n      delete [] fact;\n    }\n\n    fact = new double[ntotal+1];\n//\n//  Calculate log-factorials.\n//\n    x = 0.0;\n    fact[0] = 0.0;\n    for ( i = 1; i <= ntotal; i++ )\n    {\n      x = x + log ( ( double ) ( i ) );\n      fact[i] = x;\n    }\n\n  }\n//\n//  Construct a random matrix.\n//\n  jwork = new int[ncol];\n\n  for ( i = 0; i < ncol - 1; i++ )\n  {\n    jwork[i] = ncolt[i];\n  }\n\n  jc = ntotal;\n\n  for ( l = 0; l < nrow - 1; l++ )\n  {\n    nrowtl = nrowt[l];\n    ia = nrowtl;\n    ic = jc;\n    jc = jc - nrowtl;\n\n    for ( m = 0; m < ncol - 1; m++ )\n    {\n      id = jwork[m];\n      ie = ic;\n      ic = ic - id;\n      ib = ie - ia;\n      ii = ib - id;\n//\n//  Test for zero entries in matrix.\n//\n      if ( ie == 0 )\n      {\n        ia = 0;\n        for ( j = m; j < ncol; j++ )\n        {\n          matrix[l+j*nrow] = 0;\n        }\n        break;\n      }\n//\n//  Generate a pseudo-random number.\n//\n      r = r8_uniform_01 ( seed );\n//\n//  Compute the conditional expected value of MATRIX(L,M).\n//\n      done1 = false;\n\n      for ( ; ; )\n      {\n        nlm = ( int ) ( ( double ) ( ia * id ) / ( double ) ( ie ) + 0.5 );\n        iap = ia + 1;\n        idp = id + 1;\n        igp = idp - nlm;\n        ihp = iap - nlm;\n        nlmp = nlm + 1;\n        iip = ii + nlmp;\n        x = exp ( fact[iap-1] + fact[ib] + fact[ic] + fact[idp-1] -\n          fact[ie] - fact[nlmp-1] - fact[igp-1] - fact[ihp-1] - fact[iip-1] );\n\n        if ( r <= x )\n        {\n          break;\n        }\n\n        sumprb = x;\n        y = x;\n        nll = nlm;\n        lsp = false;\n        lsm = false;\n//\n//  Increment entry in row L, column M.\n//\n        while ( !lsp )\n        {\n          j = ( id - nlm ) * ( ia - nlm );\n\n          if ( j == 0 )\n          {\n            lsp = true;\n          }\n          else\n          {\n            nlm = nlm + 1;\n            x = x * ( double ) ( j ) / ( double ) ( nlm * ( ii + nlm ) );\n            sumprb = sumprb + x;\n\n            if ( r <= sumprb )\n            {\n              done1 = true;\n              break;\n            }\n          }\n\n          done2 = false;\n\n          while ( !lsm )\n          {\n//\n//  Decrement the entry in row L, column M.\n//\n            j = nll * ( ii + nll );\n\n            if ( j == 0 )\n            {\n              lsm = true;\n              break;\n            }\n\n            nll = nll - 1;\n            y = y * ( double ) ( j ) / ( double ) ( ( id - nll ) * ( ia - nll ) );\n            sumprb = sumprb + y;\n\n            if ( r <= sumprb )\n            {\n              nlm = nll;\n              done2 = true;\n              break;\n            }\n\n            if ( !lsp )\n            {\n              break;\n            }\n\n          }\n\n          if ( done2 )\n          {\n            break;\n          }\n\n        }\n\n        if ( done1 )\n        {\n          break;\n        }\n\n        if ( done2 )\n        {\n          break;\n        }\n\n        r = r8_uniform_01 ( seed );\n        r = sumprb * r;\n\n      }\n\n      matrix[l+m*nrow] = nlm;\n      ia = ia - nlm;\n      jwork[m] = jwork[m] - nlm;\n\n    }\n    matrix[l+(ncol-1)*nrow] = ia;\n  }\n//\n//  Compute the last row.\n//\n  for ( j = 0; j < ncol - 1; j++ )\n  {\n    matrix[nrow-1+j*nrow] = jwork[j];\n  }\n  matrix[nrow-1+(ncol-1)*nrow] = ib - matrix[nrow-1+(ncol-2)*nrow];\n\n  delete [] jwork;\n\n  return;\n}\n//****************************************************************************80\n\nvoid timestamp ( )\n\n//****************************************************************************80\n//\n//  Purpose:\n//\n//    TIMESTAMP prints the current YMDHMS date as a time stamp.\n//\n//  Example:\n//\n//    May 31 2001 09:45:54 AM\n//\n//  Licensing:\n//\n//    This code is distributed under the GNU LGPL license.\n//\n//  Modified:\n//\n//    03 October 2003\n//\n//  Author:\n//\n//    John Burkardt\n//\n//  Parameters:\n//\n//    None\n//\n{\n# define TIME_SIZE 40\n\n  static char time_buffer[TIME_SIZE];\n  const struct tm *tm;\n  time_t now;\n\n  now = time ( NULL );\n  tm = localtime ( &now );\n\n  strftime ( time_buffer, TIME_SIZE, \"%d %B %Y %I:%M:%S %p\", tm );\n\n  cout << time_buffer << \"\\n\";\n\n  return;\n# undef TIME_SIZE\n}\n"
  },
  {
    "path": "phik/simcore/asa159.hpp",
    "content": "/*\n * Taken from:\n * https://people.sc.fsu.edu/~jburkardt/cpp_src/asa159/asa159.html\n *\n * Michael Patefield,\n * Algorithm AS 159: An Efficient Method of Generating RXC Tables with Given Row and Column Totals,\n * Applied Statistics,\n * Volume 30, Number 1, 1981, pages 91-97.\n */\n\n#ifndef PYTHON_PHIK_SIMCORE_ASA159_HPP_\n#define PYTHON_PHIK_SIMCORE_ASA159_HPP_\n\n#include <string>\n\nint i4_max ( int i1, int i2 );\nint i4_min ( int i1, int i2 );\nvoid i4mat_print ( int m, int n, int a[], std::string title );\nvoid i4mat_print_some ( int m, int n, int a[], int ilo, int jlo, int ihi,\n  int jhi, std::string title );\nvoid i4vec_print ( int n, int a[], std::string title );\nint i4vec_sum ( int n, int a[] );\ndouble r8_uniform_01 ( int *seed );\nvoid rcont2 ( int nrow, int ncol, int nrowt[], int ncolt[], bool *key,\n  int *seed, int matrix[],  int *ierror );\nvoid timestamp ( );\n\n#endif  // PYTHON_PHIK_SIMCORE_ASA159_HPP_\n"
  },
  {
    "path": "phik/simcore/bindings.cpp",
    "content": "#include \"simulation.hpp\"\n#include <pybind11/pybind11.h>\n\nPYBIND11_MODULE(_phik_simulation_core, m) { bind_simulation(m); }\n"
  },
  {
    "path": "phik/simcore/simulation.hpp",
    "content": "/* python/phik/simulation/simulation.hpp wrapper and bindings for\n * Michael Patefield,\n * Algorithm AS 159: An Efficient Method of Generating RXC Tables with Given Row and Column Totals,\n * Applied Statistics,\n * Volume 30, Number 1, 1981, pages 91-97.\n *\n * https://people.sc.fsu.edu/~jburkardt/cpp_src/asa159/asa159.html\n */\n\n#ifndef PYTHON_PHIK_SIMCORE_SIMULATION_HPP_\n#define PYTHON_PHIK_SIMCORE_SIMULATION_HPP_\n#include \"asa159.hpp\"\n#include <pybind11/numpy.h>\n#include <pybind11/pybind11.h>\n\nnamespace py = pybind11;\n\nstruct simulation_error: std::exception {\n    const char* p_message;\n    explicit simulation_error(const char* message) : p_message(message) {}\n    const char* what() const throw() { return p_message; }\n};\n\nvoid _sim_2d_data_patefield(\n    int nrow,\n    int ncol,\n    const py::array_t<int>& nrowt,\n    const py::array_t<int>& ncolt,\n    int seed,\n    py::array_t<int>& result\n) {\n    bool key = false;\n    int ierror = 0;\n    int* nrowt_ptr = reinterpret_cast<int*>(nrowt.request().ptr);\n    int* ncolt_ptr = reinterpret_cast<int*>(ncolt.request().ptr);\n    int* result_ptr = reinterpret_cast<int*>(result.request().ptr);\n\n    // constructs a random two-way contingency table with given sums,\n    // the underlying memory of result is directly modified\n    rcont2(nrow, ncol, nrowt_ptr, ncolt_ptr, &key, &seed, result_ptr, &ierror);\n    if (ierror != 0) {\n        throw simulation_error(\"Could not construct two-way contingency table\");\n    }\n    return;\n}\n\nauto docstring = R\"pbdoc(Construct a random two-way contingency table with given sums\n\nParameters\n----------\nnrow : int\n    number of rows in the table, should be >= 2\nncol : int\n    number of columns in the table, should be >= 2\nnrowt : np.array[int]\n    the row sums, note all values should be positive\nncolt : np.array[int]\n    the col sums, note all values should be positive\nseed : int\n    random seed for the generation\nresult : np.array[int]\n    initialized array where the results will be stored\n\nReference\n---------\nWM Patefield,\nAlgorithm AS 159:\nAn Efficient Method of Generating RXC Tables with\nGiven Row and Column Totals,\nApplied Statistics,\nVolume 30, Number 1, 1981, pages 91-97.\n)pbdoc\";\n\nvoid bind_simulation(py::module &m) {\n    m.def(\n        \"_sim_2d_data_patefield\",\n        &_sim_2d_data_patefield,\n        docstring,\n        py::arg(\"nrow\"),\n        py::arg(\"ncol\"),\n        py::arg(\"nrowt\"),\n        py::arg(\"ncolt\"),\n        py::arg(\"seed\"),\n        py::arg(\"result\")\n    );\n}\n\n#endif  // PYTHON_PHIK_SIMCORE_SIMULATION_HPP_\n"
  },
  {
    "path": "phik/simulation.py",
    "content": "\"\"\"Project: PhiK - correlation analyzer library\n\nCreated: 2018/09/05\n\nDescription:\n    Helper functions to simulate 2D datasets\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\n\nimport numpy as np\nfrom joblib import Parallel, delayed\n\nfrom .statistics import get_dependent_frequency_estimates\nfrom .statistics import get_chi2_using_dependent_frequency_estimates\nfrom phik.simcore import CPP_SUPPORT, _sim_2d_data_patefield\n\n\nNUMPY_INT_MAX = np.iinfo(np.int32).max - 1\n\n\ndef sim_2d_data(hist:np.ndarray, ndata:int=0) -> np.ndarray:\n    \"\"\"\n    Simulate a 2 dimensional dataset given a 2 dimensional pdf\n\n    :param array-like hist: contingency table, which contains the observed number of occurrences in each category.\n        This table is used as probability density function.\n    :param int ndata: number of simulations\n    :return: simulated data\n    \"\"\"\n\n    if ndata <= 0:\n        ndata = int(np.rint(hist.sum()))\n    if ndata <= 0:\n        raise ValueError('ndata (or hist.sum()) has to be positive')\n\n    # scale and ravel\n    hc = hist[:] / hist.sum()\n    hcr = hc.ravel()\n\n    hout = np.random.multinomial(n=ndata, pvals=hcr)\n    hout2d = np.reshape(hout, hc.shape)\n    return hout2d\n\n\ndef sim_2d_data_patefield(data: np.ndarray, seed : int = None) -> np.ndarray:\n    \"\"\"\n    Simulate a two dimensional dataset with fixed row and column totals.\n\n    Simulation algorithm by Patefield:\n    W. M. Patefield, Applied Statistics 30, 91 (1981)\n    Python implementation inspired by (C version):\n    https://people.sc.fsu.edu/~jburkardt/c_src/asa159/asa159.html\n\n    :param data: contingency table, which contains the observed number of occurrences in each category.\\\n    :param seed: optional seed for the simulation, primarily for testing purposes.\\\n    This table is used as probability density function.\n    :return: simulated data\n    \"\"\"\n\n    if not CPP_SUPPORT:\n        raise NotImplementedError(\n            'Patefield requires a compiled extension that was not found.'\n        )\n\n    # number of rows and columns\n    nrows, ncols = data.shape\n\n    # totals per row and column\n    # NOTE we assume that sum will fit in a 32 bit int\n    nrowt = np.rint(data.sum(axis=1)).astype(np.int32)\n    ncolt = np.rint(data.sum(axis=0)).astype(np.int32)\n\n    # set seed if it is None\n    seed = seed or np.random.randint(0, NUMPY_INT_MAX)\n\n    # allocate memory that will be set by _sim_2d_data_patefield\n    matrix = np.empty(nrows * ncols, dtype=np.int32)\n\n    # simulate the data, returned through matrix inplace modification\n    _sim_2d_data_patefield(nrows, ncols, nrowt, ncolt, seed, matrix)\n    return matrix.reshape(ncols, nrows).T\n\n\ndef sim_2d_product_multinominal(data:np.ndarray, axis: int) -> np.ndarray:\n    \"\"\"\n    Simulate 2 dimensional data with either row or column totals fixed.\n\n    :param data: contingency table, which contains the observed number of occurrences in each category.\\\n    This table is used as probability density function.\n    :param axis: fix row totals (0) or column totals (1).\n    :return: simulated data\n    \"\"\"\n\n    if axis == 1:\n        return np.array([list(sim_2d_data(data[i])) for i in range(data.shape[0])])\n    elif axis == 0:\n        return np.array([list(sim_2d_data(data.T[i])) for i in range(data.shape[1])]).T\n    else:\n        raise NotImplementedError(\"Axis should be 0 (row) or 1 (column).\")\n\n\ndef sim_data(data:np.ndarray, method:str='multinominal') -> np.ndarray:\n    \"\"\"\n    Simulate a 2 dimensional dataset given a 2 dimensional pdf\n\n    Several simulation methods are provided:\n\n     - multinominal: Only the total number of records is fixed.\n     - row_product_multinominal: The row totals fixed in the sampling.\n     - col_product_multinominal: The column totals fixed in the sampling.\n     - hypergeometric: Both the row or column totals are fixed in the sampling. Note that this type of sampling is\\\n    only available when row and column totals are integers.\n\n    :param data: contingency table\n    :param str method: sampling method. Options: [multinominal, hypergeometric, row_product_multinominal,\\\n     col_product_multinominal]\n    :return: simulated data\n    \"\"\"\n\n    if method == 'multinominal':\n        return sim_2d_data(data)\n    elif method == 'hypergeometric':\n        return sim_2d_data_patefield(data)\n    elif method == 'row_product_multinominal':\n        return sim_2d_product_multinominal(data, 0)\n    elif method == 'col_product_multinominal':\n        return sim_2d_product_multinominal(data, 1)\n    else:\n        raise NotImplementedError('selected method not recognized.')\n\n\ndef sim_chi2_distribution(values: np.ndarray, nsim:int=1000, lambda_:str='log-likelihood',\n                          simulation_method:str='multinominal', alt_hypothesis:bool=False, njobs:int=-1) -> list:\n    \"\"\"\n    Simulate 2D data and calculate the chi-square statistic for each simulated dataset.\n\n    :param values: The contingency table. The table contains the observed number of occurrences in each category\n    :param int nsim: number of simulations (optional, default=1000)\n    :param str simulation_method: sampling method. Options: [multinominal, hypergeometric, row_product_multinominal,\n        col_product_multinominal]\n    :param str lambda_: test statistic. Available options are [pearson, log-likelihood].\n    :param bool alt_hypothesis: if True, simulate values directly, and not its dependent frequency estimates.\n    :param int njobs: number of parallel jobs used for simulation. default is -1. 1 uses no parallel jobs.\n    :returns chi2s: list of chi2 values for each simulated dataset\n    \"\"\"\n    exp_dep = get_dependent_frequency_estimates(values) if not alt_hypothesis else values\n\n    if njobs == 1:\n        chi2s = [_simulate_and_fit(exp_dep, simulation_method, lambda_) for _ in range(nsim)]\n    else:\n        chi2s = Parallel(n_jobs=njobs)(delayed(_simulate_and_fit)(exp_dep, simulation_method, lambda_)\n                                        for _ in range(nsim))\n\n    return chi2s\n\n\ndef _simulate_and_fit(exp_dep: np.ndarray, simulation_method: str='multinominal',\n                      lambda_:str='log-likelihood') -> float:\n    \"\"\"split off simulate function to allow for parallellization\"\"\"\n    simdata = sim_data(exp_dep, method=simulation_method)\n    simchi2 = get_chi2_using_dependent_frequency_estimates(simdata, lambda_)\n    return simchi2\n"
  },
  {
    "path": "phik/statistics.py",
    "content": "\"\"\"Project: PhiK - correlation coefficient package\n\nCreated: 2018/09/05\n\nDescription:\n    Statistics helper functions, for the calculation of phik and significance\n    of a contingency table.\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\nfrom typing import Union\n\nimport numpy as np\nfrom scipy import stats\n\n\ndef get_dependent_frequency_estimates(vals: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Calculation of dependent expected frequencies.\n\n    Calculation is based on the marginal sums of the table, i.e. dependent frequency estimates.\n    :param vals: The contingency table. The table contains the observed number of occurrences in each category\n\n    :returns exp: expected frequencies\n    \"\"\"\n\n    # use existing scipy functionality\n    return stats.contingency.expected_freq(vals)\n\n\ndef get_chi2_using_dependent_frequency_estimates(\n    vals: np.ndarray, lambda_: str = \"log-likelihood\"\n) -> float:\n    \"\"\"\n    Chi-square test of independence of variables in a contingency table.\n\n    The expected frequencies are based on the\n    marginal sums of the table, i.e. dependent frequency estimates.\n\n    :param vals: The contingency table. The table contains the observed number of occurrences in each category\n    :returns test_statistic: the test statistic value\n    \"\"\"\n\n    values = vals[:]\n\n    # remove rows with only zeros, scipy doesn't like them.\n    values = values[~np.all(values == 0, axis=1)]\n    # remove columns with only zeros, scipy doesn't like them.\n    values = values.T[~np.all(values.T == 0, axis=1)].T\n\n    # use existing scipy functionality\n    test_statistic, _, _, _ = stats.chi2_contingency(values, lambda_=lambda_)\n\n    return test_statistic\n\n\ndef get_pearson_chi_square(\n    observed: np.ndarray, expected: np.ndarray = None, normalize: bool = True\n) -> float:\n    \"\"\"Calculate pearson chi square between observed and expected 2d contingency matrix\n\n    :param observed: The observed contingency table. The table contains the observed number of occurrences in each cell.\n    :param expected: The expected contingency table. The table contains the expected number of occurrences in each cell.\n    :param bool normalize: normalize expected frequencies, default is True.\n    :return: the pearson chi2 value\n    \"\"\"\n    observed = np.asarray(observed)\n    if np.any(observed < 0):\n        raise ValueError(\"All values in `observed` must be non-negative.\")\n    if observed.size == 0:\n        raise ValueError(\"No data; `observed` has size 0.\")\n\n    if expected is None:\n        expected = get_dependent_frequency_estimates(observed)\n    expected = np.asarray(expected)\n\n    # important to ensure that observed and expected have same normalization\n    if normalize:\n        expected = expected * (np.sum(observed) / np.sum(expected))\n\n    terms = np.divide(\n        (observed.astype(np.float64) - expected) ** 2,\n        expected,\n        out=np.zeros_like(expected),\n        where=expected != 0,\n    )\n    return np.sum(terms)\n\n\ndef estimate_ndof(chi2values: Union[list, np.ndarray]) -> float:\n    \"\"\"\n    Estimation of the effective number of degrees of freedom.\n\n    A good approximation of endof is the average value. Alternatively\n    a fit to the chi2 distribution can be make. Both values are returned.\n\n    :param list chi2values: list of chi2 values\n    :returns: endof0, endof\n    \"\"\"\n\n    return np.mean(chi2values)\n\n\ndef estimate_simple_ndof(observed: np.ndarray) -> int:\n    \"\"\"\n    Simple estimation of the effective number of degrees of freedom.\n\n    This equals the nominal calculation for ndof minus the number of empty bins in the\n    expected contingency table.\n\n    :param observed: numpy array of observed cell counts\n    :returns: endof\n    \"\"\"\n\n    # use existing scipy functionality\n    expected = stats.contingency.expected_freq(observed)\n    endof = (\n        expected.size\n        - np.sum(expected.shape)\n        + expected.ndim\n        - 1\n        - (expected == 0).sum()\n    )\n    # require minimum number of degrees of freedom\n    if endof < 0:\n        endof = 0\n    return endof\n\n\ndef theoretical_ndof(observed: np.ndarray) -> int:\n    \"\"\"\n    Simple estimation of the effective number of degrees of freedom.\n\n    This equals the nominal calculation for ndof minus the number of empty bins in the\n    expected contingency table.\n\n    :param observed: numpy array of observed cell counts\n    :returns: theoretical ndof\n    \"\"\"\n\n    return observed.size - np.sum(observed.shape) + observed.ndim - 1\n\n\ndef z_from_logp(logp: float, flip_sign: bool = False) -> float:\n    \"\"\"\n    Convert logarithm of p-value into one-sided Z-value\n\n    :param float logp: logarithm of p-value, should not be greater than 0\n    :param bool flip_sign: flip sign of Z-value, e.g. use for input log(1-p). Default is false.\n    :returns: statistical significance Z-value\n    :rtype: float\n    \"\"\"\n\n    # pvalue == 0, Z = infinity\n    if logp == -np.inf:\n        return np.inf if not flip_sign else -np.inf\n\n    p_value = np.exp(logp)\n\n    # scenario where p-value is numerically too small to evaluate Z\n    if p_value == 0:\n        # kicks in here when Z > 37\n        # approach valid when ~ Z > 1.5.\n        u = -2.0 * np.log(2 * np.pi) - 2.0 * logp\n        z_value = np.sqrt(u - np.log(u))\n    else:\n        z_value = -stats.norm.ppf(p_value)\n\n    if flip_sign:\n        z_value *= -1.0\n\n    return z_value\n"
  },
  {
    "path": "phik/utils.py",
    "content": "from typing import Union\n\nimport pandas as pd\nimport numpy as np\n\n\ndef array_like_to_dataframe(\n    x: Union[pd.Series, list, np.ndarray], y: Union[pd.Series, list, np.ndarray]\n) -> pd.DataFrame:\n    \"\"\"Concat two array-like data structures into a DataFrame\n\n    :param x: pd.Series, list or np.ndarray\n    :param y: pd.Series, list or np.ndarray\n    :return: pd.DataFrame\n    \"\"\"\n    x_name = x.name if isinstance(x, pd.Series) else \"x\"\n    y_name = y.name if isinstance(y, pd.Series) else \"y\"\n\n    return pd.DataFrame(np.array([x, y]).T, columns=[x_name, y_name])\n\n\ndef guess_interval_cols(df: pd.DataFrame, verbose: bool = False) -> list:\n    \"\"\"Select columns that have a dtype part of np.number\n\n    :param df: DataFrame\n    :param bool verbose: print all interval columns that are guessed\n    :return: list of interval columns\n    \"\"\"\n    interval_cols = df.select_dtypes(include=[np.number]).columns.tolist()\n    if interval_cols and verbose:\n        print(\"interval columns not set, guessing: {}\".format(str(interval_cols)))\n\n    if not isinstance(interval_cols, list):\n        raise ValueError(\"Could not guess interval columns\")\n    return interval_cols\n\n\ndef make_shapes_equal(observed: pd.DataFrame, expected: pd.DataFrame) -> pd.DataFrame:\n    \"\"\"Make observed and expected (pandas) histograms equal in shape\n\n    Sometimes expected histogram shape need filling / pruning to make its shape equal to observed. Give expected the\n    same number of columns and rows. Needed for proper histogram comparison.\n\n    :param pd.DataFrame observed: The observed contingency table. The table contains the observed number of occurrences in each cell.\n    :param pd.DataFrame expected: The expected contingency table. The table contains the expected number of occurrences in each cell.\n    :return: expected frequencies, having the same shape as observed\n    \"\"\"\n    # columns\n    o_cols = observed.columns.tolist()\n    e_cols = expected.columns.tolist()\n    o_cols_missing = list(set(e_cols) - set(o_cols))\n    e_cols_missing = list(set(o_cols) - set(e_cols))\n    # index\n    o_idx = observed.index.tolist()\n    e_idx = expected.index.tolist()\n    o_idx_missing = list(set(e_idx) - set(o_idx))\n    e_idx_missing = list(set(o_idx) - set(e_idx))\n\n    # make expected columns equal to observed\n    for c in o_cols_missing:\n        observed[c] = 0.0\n    for c in e_cols_missing:\n        expected[c] = 0.0\n    observed.columns = sorted(observed.columns)\n    expected.columns = sorted(expected.columns)\n    # this should always be a match now\n    assert len(observed.columns) == len(expected.columns)\n\n    # make expected index equal to observed\n    for i in o_idx_missing:\n        observed.loc[i] = np.zeros(len(observed.columns))\n    for i in e_idx_missing:\n        expected.loc[i] = np.zeros(len(expected.columns))\n    # this should always be a match now\n    assert len(observed.index) == len(expected.index)\n\n    return expected\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\"scikit-build-core>=0.3.3\", \"pybind11\"]\nbuild-backend = \"scikit_build_core.build\"\n\n[project]\nname = \"phik\"\nversion = \"0.12.5\"\ndescription = \"Phi_K correlation analyzer library\"\nreadme = \"README.rst\"\nauthors = [{ name = \"KPMG N.V. The Netherlands\", email = \"kave@kpmg.com\" }]\nrequires-python = \">=3.9\"\nclassifiers = [\n  \"Development Status :: 4 - Beta\",\n  \"License :: OSI Approved :: MIT License\",\n  \"Programming Language :: Python :: 3 :: Only\",\n  \"Programming Language :: Python :: 3.9\",\n  \"Programming Language :: Python :: 3.10\",\n  \"Programming Language :: Python :: 3.11\",\n  \"Programming Language :: Python :: 3.12\",\n]\n\ndependencies = [\n  \"numpy>=1.18.0\",\n  \"scipy>=1.5.2\",\n  \"pandas>=0.25.1\",\n  \"matplotlib>=2.2.3\",\n  \"joblib>=0.14.1\",\n]\n\n[project.optional-dependencies]\ntest = [\"pytest>=4.0.2\", \"pytest-pylint>=0.13.0\"]\n\n[tool.scikit-build]\nwheel.expand-macos-universal-tags = true\ncmake.build-type = \"Release\"\nlogging.level = \"WARNING\"\nsdist.include = [\"phik/simcore\", \"CMakeLists.txt\"]\n\n[tool.pytest.ini_options]\nminversion = \"6.0\"\naddopts = [\"-ra\"]\nxfail_strict = true\nlog_cli_level = \"INFO\"\nfilterwarnings = [\"error\"]\ntestpaths = [\"tests\"]\n"
  },
  {
    "path": "tests/integration/test_phik_tutorial_advanced.py",
    "content": "# # Phi_K advanced tutorial\n#\n# This notebook guides you through the more advanced functionality of the phik package. This notebook will not cover all the underlying theory, but will just attempt to give an overview of all the options that are available. For a theoretical description the user is referred to our paper.\n#\n# The package offers functionality on three related topics:\n#\n# 1. Phik correlation matrix\n# 2. Significance matrix\n# 3. Outlier significance matrix\n\n# +\n# import standard packages\nimport numpy as np\nimport pandas as pd\n\nfrom phik import resources\nfrom phik.decorators import *\n\n# # Load data\n#\n# A simulated dataset is part of the phik-package. The dataset concerns car insurance data. Load the dataset here:\n\n\ndef test_advanced_notebook():\n    data = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n    data.head()\n\n    # ## Specify bin types\n    #\n    # The phik-package offers a way to calculate correlations between variables of mixed types. Variable types can be inferred automatically although we recommend to variable types to be specified by the user.\n    #\n    # Because interval type variables need to be binned in order to calculate phik and the significance, a list of interval variables is created.\n\n    # +\n    data_types = {\n        \"severity\": \"interval\",\n        \"driver_age\": \"interval\",\n        \"satisfaction\": \"ordinal\",\n        \"mileage\": \"interval\",\n        \"car_size\": \"ordinal\",\n        \"car_use\": \"ordinal\",\n        \"car_color\": \"categorical\",\n        \"area\": \"categorical\",\n    }\n\n    interval_cols = [\n        col for col, v in data_types.items() if v == \"interval\" and col in data.columns\n    ]\n    # interval_cols is used below\n    # -\n\n    # # Phik correlation matrix\n    #\n    # Now let's start calculating the correlation phik between pairs of variables.\n    #\n    # Note that the original dataset is used as input, the binning of interval variables is done automatically.\n\n    phik_overview = data.phik_matrix(interval_cols=interval_cols)\n\n    # ### Specify binning per interval variable\n    #\n    # Binning can be set per interval variable individually. One can set the number of bins, or specify a list of bin edges. Note that the measured phik correlation is dependent on the chosen binning.\n    # The default binning is uniform between the min and max values of the interval variable.\n\n    bins = {\"mileage\": 5, \"driver_age\": [18, 25, 35, 45, 55, 65, 125]}\n    phik_overview = data.phik_matrix(interval_cols=interval_cols, bins=bins)\n\n    # ### Do not apply noise correction\n    #\n    # For low statistics samples often a correlation larger than zero is measured when no correlation is actually present in the true underlying distribution. This is not only the case for phik, but also for the pearson correlation and Cramer's phi (see figure 4 in <font color='red'> XX </font>). In the phik calculation a noise correction is applied by default, to take into account erroneous correlation values as a result of low statistics. To switch off this noise cancellation (not recommended), do:\n\n    phik_overview = data.phik_matrix(\n        interval_cols=interval_cols, noise_correction=False\n    )\n\n    # ### Using a different expectation histogram\n    #\n    # By default phik compares the 2d distribution of two (binned) variables with the distribution that assumes no dependency between them. One can also change the expected distribution though. Phi_K is calculated in the same way, but using the other expectation distribution.\n\n    from phik.binning import auto_bin_data\n    from phik.phik import (phik_from_hist2d,\n                           phik_observed_vs_expected_from_rebinned_df)\n    from phik.statistics import get_dependent_frequency_estimates\n\n    # get observed 2d histogram of two variables\n    cols = [\"mileage\", \"car_size\"]\n    icols = [\"mileage\"]\n    observed = data[cols].hist2d(interval_cols=icols).values\n\n    # default phik evaluation from observed distribution\n    phik_value = phik_from_hist2d(observed)\n    print(phik_value)\n\n    # phik evaluation from an observed and expected distribution\n    expected = get_dependent_frequency_estimates(observed)\n    phik_value = phik_from_hist2d(observed=observed, expected=expected)\n    print(phik_value)\n\n    # one can also compare two datasets against each other, and get a full phik matrix that way.\n    # this needs binned datasets though.\n    # (the user needs to make sure the binnings of both datasets are identical.)\n    data_binned, _ = auto_bin_data(data, interval_cols=interval_cols)\n\n    # here we are comparing data_binned against itself\n    phik_matrix = phik_observed_vs_expected_from_rebinned_df(data_binned, data_binned)\n\n    # all off-diagonal entries are zero, meaning the all 2d distributions of both datasets are identical.\n    # (by construction the diagonal is one.)\n\n    # # Statistical significance of the correlation\n    #\n    # When assessing correlations it is good practise to evaluate both the correlation and the significance of the correlation: a large correlation may be statistically insignificant, and vice versa a small correlation may be very significant. For instance, scipy.stats.pearsonr returns both the pearson correlation and the p-value. Similarly, the phik package offers functionality the calculate a significance matrix. Significance is defined as:\n    #\n    # $$Z = \\Phi^{-1}(1-p)\\ ;\\quad \\Phi(z)=\\frac{1}{\\sqrt{2\\pi}} \\int_{-\\infty}^{z} e^{-t^{2}/2}\\,{\\rm d}t $$\n    #\n    # Several corrections to the 'standard' p-value calculation are taken into account, making the method more robust for low statistics and sparse data cases. The user is referred to our paper for more details.\n    #\n    # Due to the corrections, the significance calculation can take a few seconds.\n\n    significance_overview = data.significance_matrix(interval_cols=interval_cols)\n\n    # ### Specify binning per interval variable\n    # Binning can be set per interval variable individually. One can set the number of bins, or specify a list of bin edges. Note that the measure phik correlation is dependent on the chosen binning.\n\n    bins = {\"mileage\": 5, \"driver_age\": [18, 25, 35, 45, 55, 65, 125]}\n    significance_overview = data.significance_matrix(\n        interval_cols=interval_cols, bins=bins\n    )\n\n    # ### Specify significance method\n    #\n    # The recommended method to calculate the significance of the correlation is a hybrid approach, which uses the G-test statistic. The number of degrees of freedom and an analytical, empirical description of the $\\chi^2$ distribution are sed, based on Monte Carlo simulations. This method works well for both high as low statistics samples.\n    #\n    # Other approaches to calculate the significance are implemented:\n    # - asymptotic: fast, but over-estimates the number of degrees of freedom for low statistics samples, leading to erroneous values of the significance\n    # - MC: Many simulated samples are needed to accurately measure significances larger than 3, making this method computationally expensive.\n    #\n\n    significance_overview = data.significance_matrix(\n        interval_cols=interval_cols, significance_method=\"asymptotic\"\n    )\n\n    # ### Simulation method\n    #\n    # The chi2 of a contingency table is measured using a comparison of the expected frequencies with the true frequencies in a contingency table. The expected frequencies can be simulated in a variety of ways. The following methods are implemented:\n    #\n    #  - multinominal: Only the total number of records is fixed. (default)\n    #  - row_product_multinominal: The row totals fixed in the sampling.\n    #  - col_product_multinominal: The column totals fixed in the sampling.\n    #  - hypergeometric: Both the row or column totals are fixed in the sampling. (Note that this type of sampling is only available when row and column totals are integers, which is usually the case.)\n\n    # +\n    # --- Warning, can be slow\n    #     turned off here by default for unit testing purposes\n\n    # significance_overview = data.significance_matrix(interval_cols=interval_cols, simulation_method='hypergeometric')\n    # significance_overview\n    # -\n\n    # ### Expected frequencies\n\n    from phik.simulation import (sim_2d_data, sim_2d_data_patefield,\n                                 sim_2d_product_multinominal)\n\n    inputdata = data[[\"driver_age\", \"area\"]].hist2d(interval_cols=[\"driver_age\"])\n\n    # #### Multinominal\n\n    simdata = sim_2d_data(inputdata.values)\n    print(\"data total:\", inputdata.sum().sum())\n    print(\"sim  total:\", simdata.sum().sum())\n    print(\"data row totals:\", inputdata.sum(axis=0).values)\n    print(\"sim  row totals:\", simdata.sum(axis=0))\n    print(\"data column totals:\", inputdata.sum(axis=1).values)\n    print(\"sim  column totals:\", simdata.sum(axis=1))\n\n    # #### product multinominal\n\n    simdata = sim_2d_product_multinominal(inputdata.values, axis=0)\n    print(\"data total:\", inputdata.sum().sum())\n    print(\"sim  total:\", simdata.sum().sum())\n    print(\"data row totals:\", inputdata.sum(axis=0).astype(int).values)\n    print(\"sim  row totals:\", simdata.sum(axis=0).astype(int))\n    print(\"data column totals:\", inputdata.sum(axis=1).astype(int).values)\n    print(\"sim  column totals:\", simdata.sum(axis=1).astype(int))\n\n    # #### hypergeometric (\"patefield\")\n\n    # +\n    # patefield simulation needs compiled c++ code.\n    # only run this if the python binding to the (compiled) patefiled simulation function is found.\n    from phik.simcore import CPP_SUPPORT\n\n    if CPP_SUPPORT:\n        simdata = sim_2d_data_patefield(inputdata.values)\n        print(\"data total:\", inputdata.sum().sum())\n        print(\"sim  total:\", simdata.sum().sum())\n        print(\"data row totals:\", inputdata.sum(axis=0).astype(int).values)\n        print(\"sim  row totals:\", simdata.sum(axis=0))\n        print(\"data column totals:\", inputdata.sum(axis=1).astype(int).values)\n        print(\"sim  column totals:\", simdata.sum(axis=1))\n    # -\n\n    # # Outlier significance\n    #\n    # The normal pearson correlation between two interval variables is easy to interpret. However, the phik correlation between two variables of mixed type is not always easy to interpret, especially when it concerns categorical variables. Therefore, functionality is provided to detect \"outliers\": excesses and deficits over the expected frequencies  in the contingency table of two variables.\n    #\n\n    # ### Example 1: mileage versus car_size\n\n    # For the categorical variable pair mileage - car_size we measured:\n    #\n    # $$\\phi_k = 0.77 \\, ,\\quad\\quad \\mathrm{significance} = 46.3$$\n    #\n    # Let's use the outlier significance functionality to gain a better understanding of this significance correlation between mileage and car size.\n    #\n\n    # +\n    c0 = \"mileage\"\n    c1 = \"car_size\"\n\n    tmp_interval_cols = [\"mileage\"]\n    # -\n\n    outlier_signifs, binning_dict = data[[c0, c1]].outlier_significance_matrix(\n        interval_cols=tmp_interval_cols, retbins=True\n    )\n\n    # ### Specify binning per interval variable\n    # Binning can be set per interval variable individually. One can set the number of bins, or specify a list of bin edges.\n    #\n    # Note: in case a bin is created without any records this bin will be automatically dropped in the phik and (outlier) significance calculations. However, in the outlier significance calculation this will currently lead to an error as the number of provided bin edges does not match the number of bins anymore.\n\n    bins = [0, 1e2, 1e3, 1e4, 1e5, 1e6]\n    outlier_signifs, binning_dict = data[[c0, c1]].outlier_significance_matrix(\n        interval_cols=tmp_interval_cols, bins=bins, retbins=True\n    )\n\n    # ### Specify binning per interval variable -- dealing with underflow and overflow\n    #\n    # When specifying custom bins as situation can occur when the minimal (maximum) value in the data is smaller (larger) than the minimum (maximum) bin edge. Data points outside the specified range will be collected in the underflow (UF) and overflow (OF) bins. One can choose how to deal with these under/overflow bins, by setting the drop_underflow and drop_overflow variables.\n    #\n    # Note that the drop_underflow and drop_overflow options are also available for the calculation of the phik matrix and the significance matrix.\n\n    bins = [1e2, 1e3, 1e4, 1e5]\n    outlier_signifs, binning_dict = data[[c0, c1]].outlier_significance_matrix(\n        interval_cols=tmp_interval_cols,\n        bins=bins,\n        retbins=True,\n        drop_underflow=False,\n        drop_overflow=False,\n    )\n\n    # ### Dealing with NaN's in the data\n\n    # Let's add some missing values to our data\n\n    data.loc[np.random.choice(range(len(data)), size=10), \"car_size\"] = np.nan\n    data.loc[np.random.choice(range(len(data)), size=10), \"mileage\"] = np.nan\n\n    # Sometimes there can be information in the missing values and in which case you might want to consider the NaN values as a separate category. This can be achieved by setting the dropna argument to False.\n\n    bins = [1e2, 1e3, 1e4, 1e5]\n    outlier_signifs, binning_dict = data[[c0, c1]].outlier_significance_matrix(\n        interval_cols=tmp_interval_cols,\n        bins=bins,\n        retbins=True,\n        drop_underflow=False,\n        drop_overflow=False,\n        dropna=False,\n    )\n\n    # Here OF and UF are the underflow and overflow bin of car_size, respectively.\n    #\n    # To just ignore records with missing values set dropna to True (default).\n\n    bins = [1e2, 1e3, 1e4, 1e5]\n    outlier_signifs, binning_dict = data[[c0, c1]].outlier_significance_matrix(\n        interval_cols=tmp_interval_cols,\n        bins=bins,\n        retbins=True,\n        drop_underflow=False,\n        drop_overflow=False,\n        dropna=True,\n    )\n\n    # Note that the dropna option is also available for the calculation of the phik matrix and the significance matrix.\n"
  },
  {
    "path": "tests/integration/test_phik_tutorial_basic.py",
    "content": "# # Phi_K basic tutorial\n#\n# This notebook guides you through the basic functionality of the phik package. The package offers functionality on three related topics:\n#\n# 1. Phik correlation matrix\n# 2. Significance matrix\n# 3. Outlier significance matrix\n#\n# For more information on the underlying theory, the user is referred to our paper.\n\nimport itertools\n\nimport matplotlib.pyplot as plt\n# +\n# import standard packages\nimport numpy as np\nimport pandas as pd\n\nimport phik\nfrom phik import resources\nfrom phik.binning import bin_data\nfrom phik.report import plot_correlation_matrix\n\n# # Load data\n#\n# A simulated dataset is part of the phik-package. The dataset concerns fake car insurance data. Load the dataset here:\n\n\ndef test_basic_notebook():\n    data = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n    # # Take a first look at the data\n\n    # Let's use a simple data.head() to get an idea of what the data looks like and inspect the different types of variables.\n\n    data.head()\n\n    # # Specify bin types\n    #\n    # The phik-package offers a way to calculate correlations between variables of mixed types. Variable types can be inferred automatically although we recommend variable types to be specified by the user.\n    #\n    # Because interval type variables need to be binned in order to calculate phik and the significance, a list of interval variables is created.\n\n    # +\n    data_types = {\n        \"severity\": \"interval\",\n        \"driver_age\": \"interval\",\n        \"satisfaction\": \"ordinal\",\n        \"mileage\": \"interval\",\n        \"car_size\": \"ordinal\",\n        \"car_use\": \"ordinal\",\n        \"car_color\": \"categorical\",\n        \"area\": \"categorical\",\n    }\n\n    interval_cols = [\n        col for col, v in data_types.items() if v == \"interval\" and col in data.columns\n    ]\n    # -\n\n    # # Visually inspect pairwise correlations\n\n    # ## Bin the interval variables\n    #\n    # To get a feeling for the data, let's bin the interval variables and create 2d histograms to inspect the correlations between variables. By binning the interval variables we can treat all variable types in the same way.\n    #\n\n    # bin the interval variables\n    data_binned, binning_dict = bin_data(data, cols=interval_cols, retbins=True)\n\n    # +\n    # plot each variable pair\n    plt.rc(\"text\", usetex=False)\n\n    n = 0\n    for i in range(len(data.columns)):\n        n = n + i\n\n    ncols = 3\n    nrows = int(np.ceil(n / ncols))\n    fig, axes = plt.subplots(nrows, ncols, figsize=(15, 4 * nrows))\n    ndecimals = 0\n\n    for i, comb in enumerate(itertools.combinations(data_binned.columns.values, 2)):\n        c = int(i % ncols)\n        r = int((i - c) / ncols)\n\n        # get data\n        c0, c1 = comb\n        datahist = (\n            data_binned.groupby([c0, c1])[c0].count().to_frame().unstack().fillna(0)\n        )\n        datahist.columns = datahist.columns.droplevel()\n\n        # plot data\n        img = axes[r][c].pcolormesh(datahist.values, edgecolor=\"w\", linewidth=1)\n\n        # axis ticks and tick labels\n        if c0 in binning_dict.keys():\n            ylabels = [\n                \"{1:.{0}f}_{2:.{0}f}\".format(\n                    ndecimals, binning_dict[c0][i][0], binning_dict[c0][i][1]\n                )\n                for i in range(len(binning_dict[c0]))\n            ]\n        else:\n            ylabels = datahist.index\n\n        if c1 in binning_dict.keys():\n            xlabels = [\n                \"{1:.{0}f}_{2:.{0}f}\".format(\n                    ndecimals, binning_dict[c1][i][0], binning_dict[c1][i][1]\n                )\n                for i in range(len(binning_dict[c1]))\n            ]\n        else:\n            xlabels = datahist.columns\n\n        # axis labels\n        axes[r][c].set_yticks(np.arange(len(ylabels)) + 0.5)\n        axes[r][c].set_xticks(np.arange(len(xlabels)) + 0.5)\n        axes[r][c].set_xticklabels(xlabels, rotation=\"vertical\")\n        axes[r][c].set_yticklabels(ylabels, rotation=\"horizontal\")\n        axes[r][c].set_xlabel(datahist.columns.name)\n        axes[r][c].set_ylabel(datahist.index.name)\n        axes[r][c].set_title(\"data\")\n\n    plt.tight_layout()\n\n    # -\n\n    # # Correlation: mileage vs car_size\n    #\n    # From the above plots it seems like there might be an interesting a correlation between mileage and car_size. Let's see what phik correlation is measured for this data.\n\n    # +\n    x, y = data[[\"mileage\", \"car_size\"]].T.values\n\n    print(\"phik         =  %.2f\" % phik.phik_from_array(x, y, num_vars=[\"x\"]))\n    print(\"significance = %.2f\" % phik.significance_from_array(x, y, num_vars=[\"x\"])[1])\n\n    # -\n\n    # Indeed there is a correlation between these variables and the correlation is also significant. To better understand the correlation, we can have a look at the significance of excesses and deficits in the 2-dimensional contingency table, so-called \"outlier significances\".\n\n    phik.outlier_significance_from_array(x, y, num_vars=[\"x\"])\n\n    # The values displayed in the matrix are the significances of the outlier frequencies, i.e. a large value means that the measured frequency for that bin is significantly different from the expected frequency in that bin.\n    #\n    # Let's visualise for easier interpretation.\n\n    # +\n    outlier_signifs = phik.outlier_significance_from_array(x, y, num_vars=[\"x\"])\n\n    zvalues = outlier_signifs.values\n    xlabels = outlier_signifs.columns\n    ylabels = outlier_signifs.index\n    xlabel = \"x\"\n    ylabel = \"y\"\n\n    plot_correlation_matrix(\n        zvalues,\n        x_labels=xlabels,\n        y_labels=ylabels,\n        x_label=xlabel,\n        y_label=ylabel,\n        vmin=-5,\n        vmax=5,\n        title=\"outlier significance\",\n        identity_layout=False,\n        fontsize_factor=1.2,\n    )\n    # -\n\n    # # $\\phi_k$ functions for dataframes\n    #\n    # In our data we have 5 different columns, meaning we have to evaluate 4+3+2+1=10 pairs of variables for possible correlations. In a large dataset, with many different variables, this can easily become a cumbersome task. Can we do this more efficient? yes! We have provided functions that work on dataframes, to allow you to calculate the phik correlation, significance and outlier significance for all different variable combinations at once.\n    #\n\n    # The functions are by default available after import of the phik package.\n\n    # # $\\phi_k$ correlation matrix\n    #\n    # Now let's start calculating the phik correlation coefficient between pairs of variables.\n    #\n    # Note that the original dataset is used as input, the binning of interval variables is done automatically.\n\n    phik_overview = data.phik_matrix(interval_cols=interval_cols)\n    phik_overview\n\n    # When no interval columns are provided, the code makes an educated guess\n\n    data.phik_matrix()\n\n    plot_correlation_matrix(\n        phik_overview.values,\n        x_labels=phik_overview.columns,\n        y_labels=phik_overview.index,\n        vmin=0,\n        vmax=1,\n        color_map=\"Blues\",\n        title=r\"correlation $\\phi_K$\",\n        fontsize_factor=1.5,\n        figsize=(7, 5.5),\n    )\n    plt.tight_layout()\n\n    # # Global correlation: $g_k$\n    #\n    # The global correlation coefficient is a measure of the total correlation of one variable to all other variables in the dataset. They give an indication of how well on variable can be modelled in terms of the other variables. A calculation of the global correlation coefficient is provided within the phik package.\n\n    global_correlation, global_labels = data.global_phik(interval_cols=interval_cols)\n    for c, l in zip(global_correlation, global_labels):\n        print(l, c[0])\n\n    plot_correlation_matrix(\n        global_correlation,\n        x_labels=[\"\"],\n        y_labels=global_labels,\n        vmin=0,\n        vmax=1,\n        figsize=(3.5, 4),\n        color_map=\"Blues\",\n        title=r\"$g_k$\",\n        fontsize_factor=1.5,\n    )\n    plt.tight_layout()\n\n    # # Statistical significance of the correlation: $Z$-score\n    #\n    # When assessing correlations it is good practise to evaluate both the correlation and the significance of the correlation: a large correlation may be statistically insignificant, and vice versa a small correlation may be very significant. For instance, scipy.stats.pearsonr returns both the pearson correlation and the p-value. Similarly, the phik package offers functionality the calculate a significance matrix. Significance is defined as:\n    #\n    # $$Z = \\Phi^{-1}(1-p)\\ ;\\quad \\Phi(z)=\\frac{1}{\\sqrt{2\\pi}} \\int_{-\\infty}^{z} e^{-t^{2}/2}\\,{\\rm d}t $$\n    #\n    # Several corrections to the 'standard' p-value calculation are taken into account, making the method more robust for low statistics and sparse data cases. The user is referred to our paper for more details.\n    #\n    # As a result, the calculation may take a few seconds.\n\n    significance_overview = data.significance_matrix(interval_cols=interval_cols)\n    significance_overview\n\n    plot_correlation_matrix(\n        significance_overview.fillna(0).values,\n        x_labels=significance_overview.columns,\n        y_labels=significance_overview.index,\n        vmin=-5,\n        vmax=5,\n        title=\"significance\",\n        usetex=False,\n        fontsize_factor=1.5,\n        figsize=(7, 5.5),\n    )\n    plt.tight_layout()\n\n    # # Outlier significance\n    #\n    # The normal pearson correlation between two interval variables is easy to interpret. However, the phik correlation between two variables of mixed type is not always easy to interpret, especially when it concerns categorical variables. Therefore, functionality is provided to detect \"outliers\": excesses and deficits over the expected frequencies in the contingency table of two variables.\n    #\n\n    # ### Example 1: car_color versus area\n    #\n    # For the categorical variable pair car_color - area we measured:\n    #\n    # $$\\phi_k = 0.59 \\, ,\\quad\\quad \\mathrm{significance} = 37.6$$\n    #\n    # Let's use the outlier significance functionality to gain a better understanding of the significance correlation between car color and area.\n    #\n\n    c1 = \"car_color\"\n    c0 = \"area\"\n\n    outlier_signifs, binning_dict = data[[c0, c1]].outlier_significance_matrix(\n        retbins=True\n    )\n    outlier_signifs\n\n    # +\n    zvalues = outlier_signifs.values\n    xlabels = binning_dict[c1] if c1 in binning_dict.keys() else outlier_signifs.columns\n    ylabels = binning_dict[c0] if c0 in binning_dict.keys() else outlier_signifs.index\n    xlabel = c1\n    ylabel = c0\n\n    plot_correlation_matrix(\n        zvalues,\n        x_labels=xlabels,\n        y_labels=ylabels,\n        x_label=xlabel,\n        y_label=ylabel,\n        vmin=-5,\n        vmax=5,\n        title=\"outlier significance\",\n        identity_layout=False,\n        fontsize_factor=1.2,\n    )\n    # -\n\n    # The significance of each cell is expressed in terms of Z (one-sided).\n    #\n    # Interesting, owners of a green car are more likely to live in the country side, and black cars are more likely to travel on unpaved roads!\n\n    # ### Example 2: mileage versus car_size\n\n    # For the categorical variable pair mileage - car_size we measured:\n    #\n    # $$\\phi_k = 0.77 \\, ,\\quad\\quad \\mathrm{significance} = 46.3$$\n    #\n    # Let's use the outlier significance functionality to gain a better understanding of this significance correlation between mileage and car size.\n    #\n\n    # +\n    c0 = \"mileage\"\n    c1 = \"car_size\"\n\n    tmp_interval_cols = [\"mileage\"]\n    # -\n\n    outlier_signifs, binning_dict = data[[c0, c1]].outlier_significance_matrix(\n        interval_cols=tmp_interval_cols, retbins=True\n    )\n    outlier_signifs\n\n    # Note that the interval variable mileage is binned automatically in 10 uniformly spaced bins!\n\n    # +\n    zvalues = outlier_signifs.values\n    xlabels = outlier_signifs.columns\n    ylabels = outlier_signifs.index\n    xlabel = c1\n    ylabel = c0\n\n    plot_correlation_matrix(\n        zvalues,\n        x_labels=xlabels,\n        y_labels=ylabels,\n        x_label=xlabel,\n        y_label=ylabel,\n        vmin=-5,\n        vmax=5,\n        title=\"outlier significance\",\n        identity_layout=False,\n        fontsize_factor=1.2,\n    )\n    # -\n\n    # # Correlation report\n\n    # A full correlation report can be created automatically for a dataset by pairwise evaluation of all correlations, significances and outlier significances.\n    #\n    # Note that for a dataset with many different columns the number of outlier significances plots can grow large very rapidly. Therefore, the feature is implemented to only evaluate outlier significances for those variable pairs with a significance and correlation larger than the given thresholds.\n\n    from phik import report\n\n    rep = report.correlation_report(\n        data, significance_threshold=3, correlation_threshold=0.5\n    )\n\n    # # Recap\n\n    # To summarize, the main functions in the phik correlation package working on a dataframe are:\n    #\n    # - `df[twocols].hist2d()` or `series.hist2d(other_series)`\n    # - `df.phik_matrix()`\n    # - `df.global_phik()`\n    # - `df.significance_matrix()`\n    # - `df[twocols].outlier_significance_matrix()` or `series.hist2d(other_series)`\n    # - `df.outlier_significance_matrices()`\n\n    data[[\"driver_age\", \"mileage\"]].hist2d()\n    # Alternatively: data['driver_age'].hist2d(data['mileage'])\n\n    data.phik_matrix()\n\n    data.global_phik()\n\n    data.significance_matrix()\n\n    data[[\"area\", \"mileage\"]].outlier_significance_matrix()\n\n    os_matrices = data.outlier_significance_matrices()\n\n    os_matrices.keys()\n\n    os_matrices[\"car_color:mileage\"]\n"
  },
  {
    "path": "tests/test_phik.py",
    "content": "\"\"\"Project: Phi_K - correlation coefficient package\n\nCreated: 2018/11/13\n\nDescription:\n    Collection of helper functions to get fixtures, i.e. for test data.\n    These are mostly used by the (integration) tests and example notebooks.\n\nAuthors:\n    KPMG Advanced Analytics & Big Data team, Amstelveen, The Netherlands\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted according to the terms listed in the file\nLICENSE.\n\"\"\"\n\nimport unittest\nimport pytest\n\nimport pandas as pd\nimport numpy as np\nfrom phik import resources, bivariate\nfrom phik.simulation import sim_2d_data_patefield, CPP_SUPPORT\nfrom phik.binning import auto_bin_data, bin_data\nfrom phik.phik import phik_observed_vs_expected_from_rebinned_df, phik_from_hist2d\nfrom phik.statistics import get_dependent_frequency_estimates\n\n\n@pytest.mark.filterwarnings(\"ignore:Using or importing the ABCs from\")\nclass PhiKTest(unittest.TestCase):\n    \"\"\"Tests for calculation of Phi_K\"\"\"\n\n    def test_phik_calculation(self):\n        \"\"\"Test the calculation of Phi_K\"\"\"\n\n        chi2 = bivariate.chi2_from_phik(0.5, 1000, nx=10, ny=10)\n        self.assertTrue(np.isclose(chi2, 271.16068979654125, 1e-6))\n\n        phik = bivariate.phik_from_chi2(chi2, 1000, 10, 10)\n        self.assertTrue(np.isclose(phik, 0.5, 1e-6))\n\n    def test_phik_from_hist2d(self):\n        \"\"\"Test the calculation of Phi_K value from hist2d\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n        # create contingency matrix\n        cols = [\"mileage\", \"car_size\"]\n        interval_cols = [\"mileage\"]\n        observed = df[cols].hist2d(interval_cols=interval_cols)\n\n        phik_value = phik_from_hist2d(observed)\n        self.assertAlmostEqual(phik_value, 0.7685888294891855, places=3)\n\n    def test_phik_observed_vs_expected_from_hist2d(self):\n        \"\"\"Test the calculation of Phi_K value from hist2d\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n        # create contingency matrix\n        cols = [\"mileage\", \"car_size\"]\n        interval_cols = [\"mileage\"]\n\n        observed = df[cols].hist2d(interval_cols=interval_cols).values\n        expected = get_dependent_frequency_estimates(observed)\n\n        phik_value = phik_from_hist2d(observed=observed, expected=expected)\n        self.assertAlmostEqual(phik_value, 0.7685888294891855, places=3)\n\n    def test_phik_matrix(self):\n        \"\"\"Test the calculation of Phi_K\"\"\"\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n        cols = list(df.columns)\n\n        # get the phi_k correlation matrix between all variables\n        interval_cols = [\"driver_age\", \"mileage\"]\n        phik_corr = df.phik_matrix(interval_cols=interval_cols)\n\n        self.assertAlmostEqual(\n            phik_corr.values[cols.index(\"car_color\"), cols.index(\"area\")],\n            0.5904561614620166,\n            places=3,\n        )\n        self.assertAlmostEqual(\n            phik_corr.values[cols.index(\"area\"), cols.index(\"car_color\")],\n            0.5904561614620166,\n            places=3,\n        )\n        self.assertAlmostEqual(\n            phik_corr.values[cols.index(\"mileage\"), cols.index(\"car_size\")],\n            0.768588987856336,\n            places=3,\n        )\n        self.assertAlmostEqual(\n            phik_corr.values[cols.index(\"car_size\"), cols.index(\"mileage\")],\n            0.768588987856336,\n            places=3,\n        )\n\n    def test_phik_matrix_observed_vs_expected(self):\n        \"\"\"Test the calculation of Phi_K\"\"\"\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n        cols = list(df.columns)\n\n        # get the phi_k correlation matrix between all variables\n        binned_df, _ = auto_bin_data(df)\n        phik_corr = phik_observed_vs_expected_from_rebinned_df(binned_df, binned_df)\n\n        self.assertTrue(\n            np.isclose(\n                phik_corr.values[cols.index(\"car_color\"), cols.index(\"area\")], 0.0\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                phik_corr.values[cols.index(\"area\"), cols.index(\"car_color\")], 0.0\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                phik_corr.values[cols.index(\"mileage\"), cols.index(\"car_size\")], 0.0\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                phik_corr.values[cols.index(\"car_size\"), cols.index(\"mileage\")], 0.0\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                phik_corr.values[cols.index(\"car_size\"), cols.index(\"car_size\")], 1.0\n            )\n        )\n\n    def test_global_phik(self):\n        \"\"\"Test the calculation of global Phi_K values\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n        # get the global phi_k values\n        interval_cols = [\"driver_age\", \"mileage\"]\n        gk = df.global_phik(interval_cols=interval_cols)\n\n        area = (np.where(gk[1] == \"area\"))[0][0]\n        car_size = (np.where(gk[1] == \"car_size\"))[0][0]\n        mileage = (np.where(gk[1] == \"mileage\"))[0][0]\n\n        self.assertAlmostEqual(gk[0][area][0], 0.6057528003711345, places=3)\n        self.assertAlmostEqual(gk[0][car_size][0], 0.76858883, places=3)\n        self.assertAlmostEqual(gk[0][mileage][0], 0.768588987856336, places=3)\n\n    def test_significance_matrix_asymptotic(self):\n        \"\"\"Test significance calculation\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n        cols = list(df.columns)\n        # get significances\n        interval_cols = [\"driver_age\", \"mileage\"]\n        sm = df.significance_matrix(\n            interval_cols=interval_cols, significance_method=\"asymptotic\"\n        )\n\n        self.assertTrue(\n            np.isclose(\n                sm.values[cols.index(\"car_color\"), cols.index(\"area\")],\n                37.66184429195198,\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                sm.values[cols.index(\"area\"), cols.index(\"car_color\")],\n                37.66184429195198,\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                sm.values[cols.index(\"mileage\"), cols.index(\"car_size\")],\n                49.3323049685695,\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                sm.values[cols.index(\"car_size\"), cols.index(\"mileage\")],\n                49.3323049685695,\n            )\n        )\n\n    def test_significance_matrix_hybrid(self):\n        \"\"\"Test significance calculation\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n        cols = list(df.columns)\n        # get significances\n        interval_cols = [\"driver_age\", \"mileage\"]\n        sm = df.significance_matrix(\n            interval_cols=interval_cols, significance_method=\"hybrid\"\n        )\n\n        self.assertTrue(\n            np.isclose(\n                sm.values[cols.index(\"car_color\"), cols.index(\"area\")],\n                37.63086023595297,\n                atol=10e-2,\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                sm.values[cols.index(\"area\"), cols.index(\"car_color\")],\n                37.63086023595297,\n                atol=10e-2,\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                sm.values[cols.index(\"mileage\"), cols.index(\"car_size\")],\n                49.28345609465683,\n                atol=10e-2,\n            )\n        )\n        self.assertTrue(\n            np.isclose(\n                sm.values[cols.index(\"car_size\"), cols.index(\"mileage\")],\n                49.28345609465683,\n                atol=10e-2,\n            )\n        )\n\n    def test_significance_matrix_mc(self):\n        \"\"\"Test significance calculation\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n        cols = list(df.columns)\n        # get significances\n        interval_cols = [\"driver_age\", \"mileage\"]\n        sm = df.significance_matrix(\n            interval_cols=interval_cols, significance_method=\"MC\"\n        )\n\n        self.assertTrue(\n            np.isclose(sm.values[cols.index(\"car_color\"), cols.index(\"area\")], np.inf)\n        )\n        self.assertTrue(\n            np.isclose(sm.values[cols.index(\"area\"), cols.index(\"car_color\")], np.inf)\n        )\n        self.assertTrue(\n            np.isclose(sm.values[cols.index(\"mileage\"), cols.index(\"car_size\")], np.inf)\n        )\n        self.assertTrue(\n            np.isclose(sm.values[cols.index(\"car_size\"), cols.index(\"mileage\")], np.inf)\n        )\n\n    def test_hist2d(self):\n        \"\"\"Test the calculation of global Phi_K values\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n        # create contingency matrix\n        cols = [\"mileage\", \"car_size\"]\n        interval_cols = [\"mileage\"]\n        h2d = df[cols].hist2d(interval_cols=interval_cols)\n\n        self.assertEqual(h2d.values[1, 1], 10)\n        self.assertEqual(h2d.values[5, 5], 217)\n\n    def test_hist2d_array(self):\n        \"\"\"Test the calculation of global Phi_K values\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n        # create contingency matrix\n        interval_cols = [\"mileage\"]\n        h2d = df[\"mileage\"].hist2d(df[\"car_size\"], interval_cols=interval_cols)\n        self.assertEqual(h2d.values[1, 1], 10)\n        self.assertEqual(h2d.values[5, 5], 217)\n\n    def test_outlier_significance_matrix(self):\n        \"\"\"Test the calculation of outlier significances\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n        # calculate outlier significances\n        cols = [\"mileage\", \"car_size\"]\n        interval_cols = [\"mileage\"]\n        om = df[cols].outlier_significance_matrix(interval_cols=interval_cols)\n\n        self.assertTrue(np.isclose(om.values[0, 1], 21.483476494343552))\n        self.assertTrue(np.isclose(om.values[2, 4], -1.246784034214704))\n\n    def test_outlier_significance_matrices(self):\n        \"\"\"Test the calculation of outlier significances\"\"\"\n\n        # open fake car insurance data\n        df = pd.read_csv(resources.fixture(\"fake_insurance_data.csv.gz\"))\n\n        # calculate outlier significances\n        interval_cols = [\"mileage\", \"driver_age\"]\n        om = df.outlier_significance_matrices(interval_cols=interval_cols)\n\n        self.assertTrue(isinstance(om, dict))\n\n    @pytest.mark.skipif(not CPP_SUPPORT, reason=\"cpp not supported\")\n    def test_simulation_2d_patefield(self):\n        \"\"\"Test simulation code using patefield algorithm.\"\"\"\n        og_state = np.random.get_state()\n        np.random.seed(42)\n        sample = np.random.randint(1, 200, (50, 2))\n\n        # call test function\n        res = sim_2d_data_patefield(sample, seed=42).T\n        np.random.set_state(og_state)\n        mean0, mean1 = res.mean(1)\n        self.assertTrue(np.isclose(mean0, 105.46))\n        self.assertTrue(np.isclose(mean1, 91.18))\n\n    def test_binning_bin_data_bins_tyes(self):\n        # Non regression test\n        # https://github.com/KaveIO/PhiK/issues/28\n        df = pd.DataFrame({\"x\": np.random.randn(10)})\n        bins_int = np.arange(5, 11, 1)\n        bins_float = np.arange(5, 11, 1.0)\n        bins_dict_int = {\"x\": np.uint8(10)}\n        bins_dict_float = {\"x\": np.float32(10.3)}\n\n        for bins in bins_int:\n            bin_data(df, cols=[\"x\"], bins=bins)\n\n        for bins in bins_float:\n            bin_data(df, cols=[\"x\"], bins=bins)\n\n        bin_data(df, cols=[\"x\"], bins=bins_dict_int)\n        bin_data(df, cols=[\"x\"], bins=bins_dict_float)\n"
  }
]