copulas 0.9.2.dev0__tar.gz → 0.10.0.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of copulas might be problematic. Click here for more details.
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/HISTORY.md +13 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/PKG-INFO +14 -1
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/__init__.py +1 -1
- copulas-0.10.0.dev0/copulas/visualization.py +350 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas.egg-info/PKG-INFO +14 -1
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas.egg-info/requires.txt +1 -2
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/setup.cfg +1 -1
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/setup.py +2 -3
- copulas-0.9.2.dev0/copulas/visualization.py +0 -164
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/AUTHORS.rst +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/CONTRIBUTING.rst +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/LICENSE +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/MANIFEST.in +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/README.md +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/RELEASE.md +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/bivariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/bivariate/base.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/bivariate/clayton.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/bivariate/frank.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/bivariate/gumbel.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/bivariate/independence.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/bivariate/utils.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/datasets.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/multivariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/multivariate/base.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/multivariate/gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/multivariate/tree.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/multivariate/vine.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/optimize/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/base.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/beta.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/gamma.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/gaussian_kde.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/log_laplace.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/selection.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/student_t.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/truncated_gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas/univariate/uniform.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas.egg-info/SOURCES.txt +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas.egg-info/dependency_links.txt +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas.egg-info/not-zip-safe +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/copulas.egg-info/top_level.txt +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/Makefile +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/authors.rst +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/conf.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/contributing.rst +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/history.rst +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/images/copulas-200.png +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/images/copulas.png +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/images/copulas_sample_dataset.png +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/images/dai-logo-white.png +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/images/dice_cdf.png +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/images/pdf_cdf.png +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/images/pit.png +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/images/quickstart.png +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/index.rst +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/install.rst +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/docs/make.bat +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/README.md +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/bivariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/bivariate/test_base.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/multivariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/multivariate/test_base.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/multivariate/test_gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/multivariate/test_vine.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/test___init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/test_visualization.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/univariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/univariate/test_beta.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/univariate/test_gamma.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/univariate/test_gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/univariate/test_gaussian_kde.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/univariate/test_student_t.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/end-to-end/univariate/test_truncated_gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/large_scale_evaluation.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/README.md +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/input/bivariate_cdf_input.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/clayton_cdf_test_case_1_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/clayton_cdf_test_case_1_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/clayton_cdf_test_case_2_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/clayton_cdf_test_case_2_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/clayton_cdf_test_case_3_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/clayton_cdf_test_case_3_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/frank_cdf_test_case_1_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/frank_cdf_test_case_1_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/frank_cdf_test_case_2_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/frank_cdf_test_case_2_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/frank_cdf_test_case_3_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/frank_cdf_test_case_3_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/gumbel_cdf_test_case_1_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/gumbel_cdf_test_case_1_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/gumbel_cdf_test_case_2_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/output/gumbel_cdf_test_case_2_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/scripts/bivariate_cdf_input.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/scripts/bivariate_cdf_output.R +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/scripts/bivariate_cdf_output.m +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cases/clayton/clayton_cdf_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cases/clayton/clayton_cdf_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cases/clayton/clayton_cdf_test_case_3.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cases/frank/frank_cdf_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cases/frank/frank_cdf_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cases/frank/frank_cdf_test_case_3.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cases/gumbel/gumbel_cdf_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cases/gumbel/gumbel_cdf_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/cdf/test_cdf.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/input/bivariate_fit_test_case_1_input.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/input/bivariate_fit_test_case_2_input.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/scripts/bivariate_fit_output.R +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/scripts/bivariate_fit_output.m +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/test_cases/clayton/clayton_fit_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/test_cases/clayton/clayton_fit_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/test_cases/frank/frank_fit_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/test_cases/frank/frank_fit_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/test_cases/gumbel/gumbel_fit_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/test_cases/gumbel/gumbel_fit_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/fit/test_fit.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/input/bivariate_pdf_input.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/clayton_pdf_test_case_1_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/clayton_pdf_test_case_1_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/clayton_pdf_test_case_2_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/clayton_pdf_test_case_2_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/clayton_pdf_test_case_3_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/clayton_pdf_test_case_3_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/frank_pdf_test_case_1_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/frank_pdf_test_case_1_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/frank_pdf_test_case_2_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/frank_pdf_test_case_2_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/frank_pdf_test_case_3_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/frank_pdf_test_case_3_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/gumbel_pdf_test_case_1_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/gumbel_pdf_test_case_1_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/gumbel_pdf_test_case_2_output_Matlab.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/output/gumbel_pdf_test_case_2_output_R.csv +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/scripts/bivariate_pdf_input.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/scripts/bivariate_pdf_output.R +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/scripts/bivariate_pdf_output.m +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_cases/clayton/clayton_pdf_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_cases/clayton/clayton_pdf_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_cases/clayton/clayton_pdf_test_case_3.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_cases/frank/frank_pdf_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_cases/frank/frank_pdf_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_cases/frank/frank_pdf_test_case_3.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_cases/gumbel/gumbel_pdf_test_case_1.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_cases/gumbel/gumbel_pdf_test_case_2.json +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/numerical/pdf/test_pdf.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/bivariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/bivariate/test___init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/bivariate/test_base.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/bivariate/test_clayton.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/bivariate/test_frank.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/bivariate/test_gumbel.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/bivariate/test_independence.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/multivariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/multivariate/test_base.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/multivariate/test_gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/multivariate/test_tree.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/multivariate/test_vine.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/optimize/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/optimize/test___init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/test___init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/__init__.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_base.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_beta.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_gamma.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_gaussian_kde.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_log_laplace.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_selection.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_student_t.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_truncated_gaussian.py +0 -0
- {copulas-0.9.2.dev0 → copulas-0.10.0.dev0}/tests/unit/univariate/test_uniform.py +0 -0
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# History
|
|
2
2
|
|
|
3
|
+
## v0.9.2 - 2023-10-12
|
|
4
|
+
|
|
5
|
+
This release removes a warning that was being raised when univariate distributions failed to fit and logs the message instead.
|
|
6
|
+
|
|
7
|
+
### New Features
|
|
8
|
+
|
|
9
|
+
* When Copulas univariate fit fails, produce a log instead of a warning - Issue [#359](https://github.com/sdv-dev/Copulas/issues/359) by @R-Palazzo
|
|
10
|
+
|
|
11
|
+
### Maintenance
|
|
12
|
+
|
|
13
|
+
* Switch default branch from master to main - Issue [#360](https://github.com/sdv-dev/Copulas/issues/360) by @amontanez24
|
|
14
|
+
* Update add-on detection for Copulas - Issue [#362](https://github.com/sdv-dev/Copulas/issues/362) by @pvk-developer
|
|
15
|
+
|
|
3
16
|
## v0.9.1 - 2023-08-10
|
|
4
17
|
|
|
5
18
|
This release fixes problems with the documentation site and drops support for Python 3.7.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: copulas
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0.dev0
|
|
4
4
|
Summary: Create tabular synthetic data using copulas-based modeling.
|
|
5
5
|
Home-page: https://github.com/sdv-dev/Copulas
|
|
6
6
|
Author: DataCebo, Inc.
|
|
@@ -162,6 +162,19 @@ for specific needs.
|
|
|
162
162
|
|
|
163
163
|
# History
|
|
164
164
|
|
|
165
|
+
## v0.9.2 - 2023-10-12
|
|
166
|
+
|
|
167
|
+
This release removes a warning that was being raised when univariate distributions failed to fit and logs the message instead.
|
|
168
|
+
|
|
169
|
+
### New Features
|
|
170
|
+
|
|
171
|
+
* When Copulas univariate fit fails, produce a log instead of a warning - Issue [#359](https://github.com/sdv-dev/Copulas/issues/359) by @R-Palazzo
|
|
172
|
+
|
|
173
|
+
### Maintenance
|
|
174
|
+
|
|
175
|
+
* Switch default branch from master to main - Issue [#360](https://github.com/sdv-dev/Copulas/issues/360) by @amontanez24
|
|
176
|
+
* Update add-on detection for Copulas - Issue [#362](https://github.com/sdv-dev/Copulas/issues/362) by @pvk-developer
|
|
177
|
+
|
|
165
178
|
## v0.9.1 - 2023-08-10
|
|
166
179
|
|
|
167
180
|
This release fixes problems with the documentation site and drops support for Python 3.7.
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"""Visualization utilities for the Copulas library."""
|
|
2
|
+
|
|
3
|
+
import pandas as pd
|
|
4
|
+
import plotly.express as px
|
|
5
|
+
import plotly.figure_factory as ff
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class PlotConfig:
|
|
9
|
+
"""Custom plot settings for visualizations."""
|
|
10
|
+
|
|
11
|
+
DATACEBO_DARK = '#000036'
|
|
12
|
+
DATACEBO_GREEN = '#01E0C9'
|
|
13
|
+
BACKGROUND_COLOR = '#F5F5F8'
|
|
14
|
+
FONT_SIZE = 18
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _generate_1d_plot(data, title, labels, colors):
|
|
18
|
+
"""Generate a density plot of an array-like structure.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
data (array-like structure):
|
|
22
|
+
The data to plot.
|
|
23
|
+
title (str):
|
|
24
|
+
The title of the plot.
|
|
25
|
+
labels (list[str]):
|
|
26
|
+
The labels of the data.
|
|
27
|
+
colors (list[str]):
|
|
28
|
+
The colors of the data.
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
plotly.graph_objects._figure.Figure
|
|
32
|
+
"""
|
|
33
|
+
fig = ff.create_distplot(
|
|
34
|
+
hist_data=data,
|
|
35
|
+
group_labels=labels,
|
|
36
|
+
show_hist=False,
|
|
37
|
+
show_rug=False,
|
|
38
|
+
colors=colors
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
for i, name in enumerate(labels):
|
|
42
|
+
fig.update_traces(
|
|
43
|
+
x=fig.data[i].x,
|
|
44
|
+
hovertemplate=f'<b>{name}</b><br>Frequency: %{{y}}<extra></extra>',
|
|
45
|
+
selector={'name': name},
|
|
46
|
+
fill='tozeroy',
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
fig.update_layout(
|
|
50
|
+
title=title,
|
|
51
|
+
plot_bgcolor=PlotConfig.BACKGROUND_COLOR,
|
|
52
|
+
font={'size': PlotConfig.FONT_SIZE},
|
|
53
|
+
showlegend=True if labels[0] else False,
|
|
54
|
+
xaxis_title='value',
|
|
55
|
+
yaxis_title='frequency'
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
return fig
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def dist_1d(data, title=None, label=None):
|
|
62
|
+
"""Plot the 1 dimensional data.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
data (array_like structure):
|
|
66
|
+
The table data.
|
|
67
|
+
title (str):
|
|
68
|
+
The title of the plot.
|
|
69
|
+
label (str):
|
|
70
|
+
The label of the plot.
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
plotly.graph_objects._figure.Figure
|
|
74
|
+
"""
|
|
75
|
+
if not title:
|
|
76
|
+
title = 'Data'
|
|
77
|
+
if isinstance(data, pd.DataFrame):
|
|
78
|
+
title += f" for column '{data.columns[0]}'"
|
|
79
|
+
elif isinstance(data, pd.Series) and data.name:
|
|
80
|
+
title += f" for column '{data.name}'"
|
|
81
|
+
|
|
82
|
+
return _generate_1d_plot(
|
|
83
|
+
data=[data],
|
|
84
|
+
title=title,
|
|
85
|
+
labels=[label],
|
|
86
|
+
colors=[PlotConfig.DATACEBO_DARK]
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def compare_1d(real, synth, title=None):
|
|
91
|
+
"""Plot the comparison between real and synthetic data.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
real (array_like):
|
|
95
|
+
The real data.
|
|
96
|
+
synth (array_like):
|
|
97
|
+
The synthetic data.
|
|
98
|
+
title (str):
|
|
99
|
+
The title of the plot.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
plotly.graph_objects._figure.Figure
|
|
103
|
+
"""
|
|
104
|
+
if not title:
|
|
105
|
+
title = 'Real vs. Synthetic Data'
|
|
106
|
+
if isinstance(real, pd.DataFrame):
|
|
107
|
+
title += f" for column '{real.columns[0]}'"
|
|
108
|
+
elif isinstance(real, pd.Series) and real.name:
|
|
109
|
+
title += f" for column '{real.name}'"
|
|
110
|
+
|
|
111
|
+
return _generate_1d_plot(
|
|
112
|
+
data=[real, synth],
|
|
113
|
+
title=title,
|
|
114
|
+
labels=['Real', 'Synthetic'],
|
|
115
|
+
colors=[PlotConfig.DATACEBO_DARK, PlotConfig.DATACEBO_GREEN]
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _generate_scatter_2d_plot(data, columns, color_discrete_map, title):
|
|
120
|
+
"""Generate a scatter plot for a pair of columns.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
data (pandas.DataFrame):
|
|
124
|
+
The data for the desired column pair containing a
|
|
125
|
+
``Data`` column indicating whether it is real or synthetic.
|
|
126
|
+
columns (list):
|
|
127
|
+
A list of the columns being plotted.
|
|
128
|
+
color_discrete_map (dict):
|
|
129
|
+
A dictionary mapping the values of the ``Data`` column to the colors
|
|
130
|
+
used to plot them.
|
|
131
|
+
title (str):
|
|
132
|
+
The title of the plot.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
plotly.graph_objects._figure.Figure
|
|
136
|
+
"""
|
|
137
|
+
if columns:
|
|
138
|
+
columns.append('Data')
|
|
139
|
+
else:
|
|
140
|
+
columns = data.columns
|
|
141
|
+
|
|
142
|
+
if len(columns) != 3: # includes the 'Data' column
|
|
143
|
+
raise ValueError('Only 2 columns can be plotted')
|
|
144
|
+
|
|
145
|
+
fig = px.scatter(
|
|
146
|
+
data,
|
|
147
|
+
x=columns[0],
|
|
148
|
+
y=columns[1],
|
|
149
|
+
color='Data',
|
|
150
|
+
color_discrete_map=color_discrete_map,
|
|
151
|
+
symbol='Data'
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
fig.update_layout(
|
|
155
|
+
title=title,
|
|
156
|
+
plot_bgcolor=PlotConfig.BACKGROUND_COLOR,
|
|
157
|
+
font={'size': PlotConfig.FONT_SIZE},
|
|
158
|
+
showlegend=False if len(color_discrete_map) == 1 else True,
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
return fig
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def scatter_2d(data, columns=None, title=None):
|
|
165
|
+
"""Plot 2 dimensional data in a scatter plot.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
data (pandas.DataFrame):
|
|
169
|
+
The table data.
|
|
170
|
+
columns (list[string]):
|
|
171
|
+
The names of the two columns to plot.
|
|
172
|
+
title (str):
|
|
173
|
+
The title of the plot.
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
plotly.graph_objects._figure.Figure
|
|
177
|
+
"""
|
|
178
|
+
data = data.copy()
|
|
179
|
+
data['Data'] = 'Real'
|
|
180
|
+
|
|
181
|
+
if not title:
|
|
182
|
+
title = 'Data'
|
|
183
|
+
if columns:
|
|
184
|
+
title += f" for columns '{columns[0]}' and '{columns[1]}'"
|
|
185
|
+
elif isinstance(data, pd.DataFrame):
|
|
186
|
+
title += f" for columns '{data.columns[0]}' and '{data.columns[1]}'"
|
|
187
|
+
|
|
188
|
+
return _generate_scatter_2d_plot(
|
|
189
|
+
data=data,
|
|
190
|
+
columns=columns,
|
|
191
|
+
color_discrete_map={'Real': PlotConfig.DATACEBO_DARK},
|
|
192
|
+
title=title
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def compare_2d(real, synth, columns=None, title=None):
|
|
197
|
+
"""Plot the comparison between real and synthetic data for a given column pair.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
real (pandas.DataFrame):
|
|
201
|
+
The real table data.
|
|
202
|
+
synth (pandas.Dataframe):
|
|
203
|
+
The synthetic table data.
|
|
204
|
+
columns (list[string]):
|
|
205
|
+
The names of the two columns to plot.
|
|
206
|
+
title (str):
|
|
207
|
+
The title of the plot.
|
|
208
|
+
|
|
209
|
+
Returns:
|
|
210
|
+
plotly.graph_objects._figure.Figure
|
|
211
|
+
"""
|
|
212
|
+
real, synth = real.copy(), synth.copy()
|
|
213
|
+
real['Data'] = 'Real'
|
|
214
|
+
synth['Data'] = 'Synthetic'
|
|
215
|
+
data = pd.concat([real, synth], axis=0, ignore_index=True)
|
|
216
|
+
|
|
217
|
+
if not title:
|
|
218
|
+
title = 'Real vs. Synthetic Data'
|
|
219
|
+
if columns:
|
|
220
|
+
title += f" for columns '{columns[0]}' and '{columns[1]}'"
|
|
221
|
+
elif isinstance(data, pd.DataFrame):
|
|
222
|
+
title += f" for columns '{data.columns[0]}' and '{data.columns[1]}'"
|
|
223
|
+
|
|
224
|
+
return _generate_scatter_2d_plot(
|
|
225
|
+
data=data,
|
|
226
|
+
columns=columns,
|
|
227
|
+
color_discrete_map={
|
|
228
|
+
'Real': PlotConfig.DATACEBO_DARK,
|
|
229
|
+
'Synthetic': PlotConfig.DATACEBO_GREEN
|
|
230
|
+
},
|
|
231
|
+
title=title
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def _generate_scatter_3d_plot(data, columns, color_discrete_map, title):
|
|
236
|
+
"""Generate a scatter plot for column pair plot.
|
|
237
|
+
|
|
238
|
+
Args:
|
|
239
|
+
data (pandas.DataFrame):
|
|
240
|
+
The data for the desired three columns containing a
|
|
241
|
+
``Data`` column that indicates whether it is real or synthetic.
|
|
242
|
+
columns (list):
|
|
243
|
+
A list of the columns being plotted.
|
|
244
|
+
color_discrete_map (dict):
|
|
245
|
+
A dictionary mapping the values of the ``Data`` column to the colors
|
|
246
|
+
used to plot them.
|
|
247
|
+
title (str):
|
|
248
|
+
The title of the plot.
|
|
249
|
+
|
|
250
|
+
Returns:
|
|
251
|
+
plotly.graph_objects._figure.Figure
|
|
252
|
+
"""
|
|
253
|
+
if columns:
|
|
254
|
+
columns.append('Data')
|
|
255
|
+
else:
|
|
256
|
+
columns = data.columns
|
|
257
|
+
|
|
258
|
+
if len(columns) != 4: # includes the 'Data' column
|
|
259
|
+
raise ValueError('Only 3 columns can be plotted')
|
|
260
|
+
|
|
261
|
+
fig = px.scatter_3d(
|
|
262
|
+
data,
|
|
263
|
+
x=columns[0],
|
|
264
|
+
y=columns[1],
|
|
265
|
+
z=columns[2],
|
|
266
|
+
color='Data',
|
|
267
|
+
color_discrete_map=color_discrete_map,
|
|
268
|
+
symbol='Data',
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
fig.update_traces(marker={'size': 5})
|
|
272
|
+
|
|
273
|
+
fig.update_layout(
|
|
274
|
+
title=title,
|
|
275
|
+
plot_bgcolor=PlotConfig.BACKGROUND_COLOR,
|
|
276
|
+
font={'size': PlotConfig.FONT_SIZE},
|
|
277
|
+
showlegend=False if len(color_discrete_map) == 1 else True,
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
return fig
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def scatter_3d(data, columns=None, title=None):
|
|
284
|
+
"""Plot 3 dimensional data in a scatter plot.
|
|
285
|
+
|
|
286
|
+
Args:
|
|
287
|
+
data (pandas.DataFrame):
|
|
288
|
+
The table data. Must have at least 3 columns.
|
|
289
|
+
columns (list[string]):
|
|
290
|
+
The names of the three columns to plot.
|
|
291
|
+
title (str):
|
|
292
|
+
The title of the plot.
|
|
293
|
+
|
|
294
|
+
Returns:
|
|
295
|
+
plotly.graph_objects._figure.Figure
|
|
296
|
+
"""
|
|
297
|
+
data = data.copy()
|
|
298
|
+
data['Data'] = 'Real'
|
|
299
|
+
|
|
300
|
+
if not title:
|
|
301
|
+
title = 'Data'
|
|
302
|
+
if columns:
|
|
303
|
+
title += f" for columns '{columns[0]}', '{columns[1]}' and '{columns[2]}'"
|
|
304
|
+
elif isinstance(data, pd.DataFrame):
|
|
305
|
+
title += \
|
|
306
|
+
f" for columns '{data.columns[0]}', '{data.columns[1]}' and '{data.columns[2]}'"
|
|
307
|
+
|
|
308
|
+
return _generate_scatter_3d_plot(
|
|
309
|
+
data=data,
|
|
310
|
+
columns=columns,
|
|
311
|
+
color_discrete_map={'Real': PlotConfig.DATACEBO_DARK},
|
|
312
|
+
title=title
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def compare_3d(real, synth, columns=None, title=None):
|
|
317
|
+
"""Plot the comparison between real and synthetic data for a given column triplet.
|
|
318
|
+
|
|
319
|
+
Args:
|
|
320
|
+
real (pd.DataFrame):
|
|
321
|
+
The real data.
|
|
322
|
+
synth (pd.DataFrame):
|
|
323
|
+
The synthetic data.
|
|
324
|
+
columns (list):
|
|
325
|
+
The name of the columns to plot.
|
|
326
|
+
title (str):
|
|
327
|
+
The title of the plot.
|
|
328
|
+
"""
|
|
329
|
+
real, synth = real.copy(), synth.copy()
|
|
330
|
+
real['Data'] = 'Real'
|
|
331
|
+
synth['Data'] = 'Synthetic'
|
|
332
|
+
data = pd.concat([real, synth], axis=0, ignore_index=True)
|
|
333
|
+
|
|
334
|
+
if not title:
|
|
335
|
+
title = 'Real vs. Synthetic Data'
|
|
336
|
+
if columns:
|
|
337
|
+
title += f" for columns '{columns[0]}', '{columns[1]}' and '{columns[2]}'"
|
|
338
|
+
elif isinstance(data, pd.DataFrame):
|
|
339
|
+
title += \
|
|
340
|
+
f" for columns '{data.columns[0]}', '{data.columns[1]}' and '{data.columns[2]}'"
|
|
341
|
+
|
|
342
|
+
return _generate_scatter_3d_plot(
|
|
343
|
+
data=data,
|
|
344
|
+
columns=columns,
|
|
345
|
+
color_discrete_map={
|
|
346
|
+
'Real': PlotConfig.DATACEBO_DARK,
|
|
347
|
+
'Synthetic': PlotConfig.DATACEBO_GREEN
|
|
348
|
+
},
|
|
349
|
+
title=title
|
|
350
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: copulas
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0.dev0
|
|
4
4
|
Summary: Create tabular synthetic data using copulas-based modeling.
|
|
5
5
|
Home-page: https://github.com/sdv-dev/Copulas
|
|
6
6
|
Author: DataCebo, Inc.
|
|
@@ -162,6 +162,19 @@ for specific needs.
|
|
|
162
162
|
|
|
163
163
|
# History
|
|
164
164
|
|
|
165
|
+
## v0.9.2 - 2023-10-12
|
|
166
|
+
|
|
167
|
+
This release removes a warning that was being raised when univariate distributions failed to fit and logs the message instead.
|
|
168
|
+
|
|
169
|
+
### New Features
|
|
170
|
+
|
|
171
|
+
* When Copulas univariate fit fails, produce a log instead of a warning - Issue [#359](https://github.com/sdv-dev/Copulas/issues/359) by @R-Palazzo
|
|
172
|
+
|
|
173
|
+
### Maintenance
|
|
174
|
+
|
|
175
|
+
* Switch default branch from master to main - Issue [#360](https://github.com/sdv-dev/Copulas/issues/360) by @amontanez24
|
|
176
|
+
* Update add-on detection for Copulas - Issue [#362](https://github.com/sdv-dev/Copulas/issues/362) by @pvk-developer
|
|
177
|
+
|
|
165
178
|
## v0.9.1 - 2023-08-10
|
|
166
179
|
|
|
167
180
|
This release fixes problems with the documentation site and drops support for Python 3.7.
|
|
@@ -12,13 +12,12 @@ with open('HISTORY.md', encoding='utf-8') as history_file:
|
|
|
12
12
|
history = history_file.read()
|
|
13
13
|
|
|
14
14
|
install_requires = [
|
|
15
|
-
"matplotlib>=3.4.0,<4;python_version<'3.10'",
|
|
16
|
-
"matplotlib>=3.6.0,<4;python_version>='3.10'",
|
|
17
15
|
"numpy>=1.20.0,<2;python_version<'3.10'",
|
|
18
16
|
"numpy>=1.23.3,<2;python_version>='3.10'",
|
|
19
17
|
"pandas>=1.1.3;python_version<'3.10'",
|
|
20
18
|
"pandas>=1.3.4;python_version>='3.10' and python_version<'3.11'",
|
|
21
19
|
"pandas>=1.5.0;python_version>='3.11'",
|
|
20
|
+
'plotly>=5.10.0,<6',
|
|
22
21
|
"scipy>=1.5.4,<2;python_version<'3.10'",
|
|
23
22
|
"scipy>=1.9.2,<2;python_version>='3.10'",
|
|
24
23
|
]
|
|
@@ -136,6 +135,6 @@ setup(
|
|
|
136
135
|
test_suite='tests',
|
|
137
136
|
tests_require=tests_require,
|
|
138
137
|
url='https://github.com/sdv-dev/Copulas',
|
|
139
|
-
version='0.
|
|
138
|
+
version='0.10.0.dev0',
|
|
140
139
|
zip_safe=False,
|
|
141
140
|
)
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"""Visualization utilities for the Copulas library."""
|
|
2
|
-
|
|
3
|
-
import pandas as pd
|
|
4
|
-
|
|
5
|
-
try:
|
|
6
|
-
import matplotlib.pyplot as plt
|
|
7
|
-
except RuntimeError as e:
|
|
8
|
-
if 'Python is not installed as a framework.' in e.message:
|
|
9
|
-
import matplotlib
|
|
10
|
-
matplotlib.use('PS') # Avoid crash on macos
|
|
11
|
-
import matplotlib.pyplot as plt
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def scatter_3d(data, columns=None, fig=None, title=None, position=None):
|
|
15
|
-
"""Plot 3 dimensional data in a scatter plot."""
|
|
16
|
-
fig = fig or plt.figure()
|
|
17
|
-
position = position or 111
|
|
18
|
-
|
|
19
|
-
ax = fig.add_subplot(position, projection='3d')
|
|
20
|
-
ax.scatter(*(
|
|
21
|
-
data[column]
|
|
22
|
-
for column in columns or data.columns
|
|
23
|
-
))
|
|
24
|
-
if title:
|
|
25
|
-
ax.set_title(title)
|
|
26
|
-
ax.title.set_position([.5, 1.05])
|
|
27
|
-
|
|
28
|
-
return ax
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def scatter_2d(data, columns=None, fig=None, title=None, position=None):
|
|
32
|
-
"""Plot 2 dimensional data in a scatter plot."""
|
|
33
|
-
fig = fig or plt.figure()
|
|
34
|
-
position = position or 111
|
|
35
|
-
|
|
36
|
-
ax = fig.add_subplot(position)
|
|
37
|
-
columns = columns or data.columns
|
|
38
|
-
if len(columns) != 2:
|
|
39
|
-
raise ValueError('Only 2 columns can be plotted')
|
|
40
|
-
|
|
41
|
-
x, y = columns
|
|
42
|
-
|
|
43
|
-
ax.scatter(data[x], data[y])
|
|
44
|
-
plt.xlabel(x)
|
|
45
|
-
plt.ylabel(y)
|
|
46
|
-
|
|
47
|
-
if title:
|
|
48
|
-
ax.set_title(title)
|
|
49
|
-
ax.title.set_position([.5, 1.05])
|
|
50
|
-
|
|
51
|
-
return ax
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def hist_1d(data, fig=None, title=None, position=None, bins=20, label=None):
|
|
55
|
-
"""Plot 1 dimensional data in a histogram."""
|
|
56
|
-
fig = fig or plt.figure()
|
|
57
|
-
position = position or 111
|
|
58
|
-
|
|
59
|
-
ax = fig.add_subplot(position)
|
|
60
|
-
ax.hist(data, density=True, bins=bins, alpha=0.8, label=label)
|
|
61
|
-
|
|
62
|
-
if label:
|
|
63
|
-
ax.legend()
|
|
64
|
-
|
|
65
|
-
if title:
|
|
66
|
-
ax.set_title(title)
|
|
67
|
-
ax.title.set_position([.5, 1.05])
|
|
68
|
-
|
|
69
|
-
return ax
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def side_by_side(plotting_func, arrays):
|
|
73
|
-
"""Plot side-by-side figures.
|
|
74
|
-
|
|
75
|
-
Args:
|
|
76
|
-
plotting_func (callable):
|
|
77
|
-
A matplotlib function which takes in the standard plot kwargs.
|
|
78
|
-
arrays (dict[str, np.ndarray]):
|
|
79
|
-
A mapping from the name of the subplot to the values.
|
|
80
|
-
"""
|
|
81
|
-
fig = plt.figure(figsize=(10, 4))
|
|
82
|
-
|
|
83
|
-
position_base = f'1{len(arrays)}'
|
|
84
|
-
for index, (title, array) in enumerate(arrays.items()):
|
|
85
|
-
position = int(position_base + str(index + 1))
|
|
86
|
-
plotting_func(array, fig=fig, title=title, position=position)
|
|
87
|
-
|
|
88
|
-
plt.tight_layout()
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def compare_3d(real, synth, columns=None, figsize=(10, 4)):
|
|
92
|
-
"""Generate a 3d scatter plot comparing real/synthetic data.
|
|
93
|
-
|
|
94
|
-
Args:
|
|
95
|
-
real (pd.DataFrame):
|
|
96
|
-
The real data.
|
|
97
|
-
synth (pd.DataFrame):
|
|
98
|
-
The synthetic data.
|
|
99
|
-
columns (list):
|
|
100
|
-
The name of the columns to plot.
|
|
101
|
-
figsize:
|
|
102
|
-
Figure size, passed to matplotlib.
|
|
103
|
-
"""
|
|
104
|
-
columns = columns or real.columns
|
|
105
|
-
fig = plt.figure(figsize=figsize)
|
|
106
|
-
|
|
107
|
-
scatter_3d(real[columns], fig=fig, title='Real Data', position=121)
|
|
108
|
-
scatter_3d(synth[columns], fig=fig, title='Synthetic Data', position=122)
|
|
109
|
-
|
|
110
|
-
plt.tight_layout()
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
def compare_2d(real, synth, columns=None, figsize=None):
|
|
114
|
-
"""Generate a 2d scatter plot comparing real/synthetic data.
|
|
115
|
-
|
|
116
|
-
Args:
|
|
117
|
-
real (pd.DataFrame):
|
|
118
|
-
The real data.
|
|
119
|
-
synth (pd.DataFrame):
|
|
120
|
-
The synthetic data.
|
|
121
|
-
columns (list):
|
|
122
|
-
The name of the columns to plot.
|
|
123
|
-
figsize:
|
|
124
|
-
Figure size, passed to matplotlib.
|
|
125
|
-
"""
|
|
126
|
-
x, y = columns or real.columns
|
|
127
|
-
ax = real.plot.scatter(x, y, color='blue', alpha=0.5, figsize=figsize)
|
|
128
|
-
ax = synth.plot.scatter(x, y, ax=ax, color='orange', alpha=0.5, figsize=figsize)
|
|
129
|
-
ax.legend(['Real', 'Synthetic'])
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
def compare_1d(real, synth, columns=None, figsize=None):
|
|
133
|
-
"""Generate a 1d scatter plot comparing real/synthetic data.
|
|
134
|
-
|
|
135
|
-
Args:
|
|
136
|
-
real (pd.DataFrame):
|
|
137
|
-
The real data.
|
|
138
|
-
synth (pd.DataFrame):
|
|
139
|
-
The synthetic data.
|
|
140
|
-
columns (list):
|
|
141
|
-
The name of the columns to plot.
|
|
142
|
-
figsize:
|
|
143
|
-
Figure size, passed to matplotlib.
|
|
144
|
-
"""
|
|
145
|
-
if len(real.shape) == 1:
|
|
146
|
-
real = pd.DataFrame({'': real})
|
|
147
|
-
synth = pd.DataFrame({'': synth})
|
|
148
|
-
|
|
149
|
-
columns = columns or real.columns
|
|
150
|
-
|
|
151
|
-
num_cols = len(columns)
|
|
152
|
-
fig_cols = min(2, num_cols)
|
|
153
|
-
fig_rows = (num_cols // fig_cols) + 1
|
|
154
|
-
prefix = f'{fig_rows}{fig_cols}'
|
|
155
|
-
|
|
156
|
-
figsize = figsize or (5 * fig_cols, 3 * fig_rows)
|
|
157
|
-
fig = plt.figure(figsize=figsize)
|
|
158
|
-
|
|
159
|
-
for idx, column in enumerate(columns):
|
|
160
|
-
position = int(prefix + str(idx + 1))
|
|
161
|
-
hist_1d(real[column], fig=fig, position=position, title=column, label='Real')
|
|
162
|
-
hist_1d(synth[column], fig=fig, position=position, title=column, label='Synthetic')
|
|
163
|
-
|
|
164
|
-
plt.tight_layout()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|