fg-data-profiling 4.19.0__py2.py3-none-any.whl

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.
Files changed (238) hide show
  1. data_profiling/__init__.py +34 -0
  2. data_profiling/compare_reports.py +359 -0
  3. data_profiling/config.py +496 -0
  4. data_profiling/config_default.yaml +223 -0
  5. data_profiling/config_minimal.yaml +222 -0
  6. data_profiling/controller/__init__.py +1 -0
  7. data_profiling/controller/console.py +125 -0
  8. data_profiling/controller/pandas_decorator.py +21 -0
  9. data_profiling/expectations_report.py +117 -0
  10. data_profiling/model/__init__.py +4 -0
  11. data_profiling/model/alerts.py +780 -0
  12. data_profiling/model/correlations.py +163 -0
  13. data_profiling/model/dataframe.py +35 -0
  14. data_profiling/model/describe.py +210 -0
  15. data_profiling/model/description.py +108 -0
  16. data_profiling/model/duplicates.py +14 -0
  17. data_profiling/model/expectation_algorithms.py +112 -0
  18. data_profiling/model/handler.py +81 -0
  19. data_profiling/model/missing.py +146 -0
  20. data_profiling/model/pairwise.py +33 -0
  21. data_profiling/model/pandas/__init__.py +55 -0
  22. data_profiling/model/pandas/correlations_pandas.py +207 -0
  23. data_profiling/model/pandas/dataframe_pandas.py +26 -0
  24. data_profiling/model/pandas/describe_boolean_pandas.py +43 -0
  25. data_profiling/model/pandas/describe_categorical_pandas.py +274 -0
  26. data_profiling/model/pandas/describe_counts_pandas.py +63 -0
  27. data_profiling/model/pandas/describe_date_pandas.py +77 -0
  28. data_profiling/model/pandas/describe_file_pandas.py +56 -0
  29. data_profiling/model/pandas/describe_generic_pandas.py +36 -0
  30. data_profiling/model/pandas/describe_image_pandas.py +255 -0
  31. data_profiling/model/pandas/describe_numeric_pandas.py +175 -0
  32. data_profiling/model/pandas/describe_path_pandas.py +63 -0
  33. data_profiling/model/pandas/describe_supported_pandas.py +41 -0
  34. data_profiling/model/pandas/describe_text_pandas.py +62 -0
  35. data_profiling/model/pandas/describe_timeseries_pandas.py +222 -0
  36. data_profiling/model/pandas/describe_url_pandas.py +57 -0
  37. data_profiling/model/pandas/discretize_pandas.py +81 -0
  38. data_profiling/model/pandas/duplicates_pandas.py +56 -0
  39. data_profiling/model/pandas/imbalance_pandas.py +35 -0
  40. data_profiling/model/pandas/missing_pandas.py +42 -0
  41. data_profiling/model/pandas/sample_pandas.py +38 -0
  42. data_profiling/model/pandas/summary_pandas.py +101 -0
  43. data_profiling/model/pandas/table_pandas.py +56 -0
  44. data_profiling/model/pandas/timeseries_index_pandas.py +33 -0
  45. data_profiling/model/pandas/utils_pandas.py +27 -0
  46. data_profiling/model/sample.py +37 -0
  47. data_profiling/model/spark/__init__.py +48 -0
  48. data_profiling/model/spark/correlations_spark.py +152 -0
  49. data_profiling/model/spark/dataframe_spark.py +34 -0
  50. data_profiling/model/spark/describe_boolean_spark.py +27 -0
  51. data_profiling/model/spark/describe_categorical_spark.py +28 -0
  52. data_profiling/model/spark/describe_counts_spark.py +105 -0
  53. data_profiling/model/spark/describe_date_spark.py +51 -0
  54. data_profiling/model/spark/describe_generic_spark.py +30 -0
  55. data_profiling/model/spark/describe_numeric_spark.py +155 -0
  56. data_profiling/model/spark/describe_supported_spark.py +33 -0
  57. data_profiling/model/spark/describe_text_spark.py +25 -0
  58. data_profiling/model/spark/duplicates_spark.py +54 -0
  59. data_profiling/model/spark/missing_spark.py +96 -0
  60. data_profiling/model/spark/sample_spark.py +43 -0
  61. data_profiling/model/spark/summary_spark.py +95 -0
  62. data_profiling/model/spark/table_spark.py +58 -0
  63. data_profiling/model/spark/timeseries_index_spark.py +12 -0
  64. data_profiling/model/summarizer.py +207 -0
  65. data_profiling/model/summary.py +66 -0
  66. data_profiling/model/summary_algorithms.py +276 -0
  67. data_profiling/model/table.py +10 -0
  68. data_profiling/model/timeseries_index.py +16 -0
  69. data_profiling/model/typeset.py +365 -0
  70. data_profiling/model/typeset_relations.py +143 -0
  71. data_profiling/profile_report.py +573 -0
  72. data_profiling/report/__init__.py +4 -0
  73. data_profiling/report/formatters.py +346 -0
  74. data_profiling/report/presentation/__init__.py +1 -0
  75. data_profiling/report/presentation/core/__init__.py +39 -0
  76. data_profiling/report/presentation/core/alerts.py +18 -0
  77. data_profiling/report/presentation/core/collapse.py +24 -0
  78. data_profiling/report/presentation/core/container.py +50 -0
  79. data_profiling/report/presentation/core/correlation_table.py +21 -0
  80. data_profiling/report/presentation/core/dropdown.py +44 -0
  81. data_profiling/report/presentation/core/duplicate.py +16 -0
  82. data_profiling/report/presentation/core/frequency_table.py +14 -0
  83. data_profiling/report/presentation/core/frequency_table_small.py +16 -0
  84. data_profiling/report/presentation/core/html.py +14 -0
  85. data_profiling/report/presentation/core/image.py +34 -0
  86. data_profiling/report/presentation/core/item_renderer.py +17 -0
  87. data_profiling/report/presentation/core/renderable.py +42 -0
  88. data_profiling/report/presentation/core/root.py +35 -0
  89. data_profiling/report/presentation/core/sample.py +20 -0
  90. data_profiling/report/presentation/core/scores.py +32 -0
  91. data_profiling/report/presentation/core/table.py +26 -0
  92. data_profiling/report/presentation/core/toggle_button.py +14 -0
  93. data_profiling/report/presentation/core/variable.py +40 -0
  94. data_profiling/report/presentation/core/variable_info.py +36 -0
  95. data_profiling/report/presentation/flavours/__init__.py +9 -0
  96. data_profiling/report/presentation/flavours/flavour_html.py +64 -0
  97. data_profiling/report/presentation/flavours/flavour_widget.py +61 -0
  98. data_profiling/report/presentation/flavours/flavours.py +43 -0
  99. data_profiling/report/presentation/flavours/html/__init__.py +47 -0
  100. data_profiling/report/presentation/flavours/html/alerts.py +10 -0
  101. data_profiling/report/presentation/flavours/html/collapse.py +7 -0
  102. data_profiling/report/presentation/flavours/html/container.py +58 -0
  103. data_profiling/report/presentation/flavours/html/correlation_table.py +13 -0
  104. data_profiling/report/presentation/flavours/html/dropdown.py +7 -0
  105. data_profiling/report/presentation/flavours/html/duplicate.py +24 -0
  106. data_profiling/report/presentation/flavours/html/frequency_table.py +20 -0
  107. data_profiling/report/presentation/flavours/html/frequency_table_small.py +15 -0
  108. data_profiling/report/presentation/flavours/html/html.py +6 -0
  109. data_profiling/report/presentation/flavours/html/image.py +7 -0
  110. data_profiling/report/presentation/flavours/html/root.py +14 -0
  111. data_profiling/report/presentation/flavours/html/sample.py +12 -0
  112. data_profiling/report/presentation/flavours/html/scores.py +11 -0
  113. data_profiling/report/presentation/flavours/html/table.py +7 -0
  114. data_profiling/report/presentation/flavours/html/templates/alerts/alert_constant.html +1 -0
  115. data_profiling/report/presentation/flavours/html/templates/alerts/alert_constant_length.html +1 -0
  116. data_profiling/report/presentation/flavours/html/templates/alerts/alert_dirty_category.html +1 -0
  117. data_profiling/report/presentation/flavours/html/templates/alerts/alert_duplicates.html +1 -0
  118. data_profiling/report/presentation/flavours/html/templates/alerts/alert_empty.html +1 -0
  119. data_profiling/report/presentation/flavours/html/templates/alerts/alert_high_cardinality.html +1 -0
  120. data_profiling/report/presentation/flavours/html/templates/alerts/alert_high_correlation.html +4 -0
  121. data_profiling/report/presentation/flavours/html/templates/alerts/alert_imbalance.html +1 -0
  122. data_profiling/report/presentation/flavours/html/templates/alerts/alert_infinite.html +1 -0
  123. data_profiling/report/presentation/flavours/html/templates/alerts/alert_missing.html +1 -0
  124. data_profiling/report/presentation/flavours/html/templates/alerts/alert_near_duplicates.html +1 -0
  125. data_profiling/report/presentation/flavours/html/templates/alerts/alert_non_stationary.html +1 -0
  126. data_profiling/report/presentation/flavours/html/templates/alerts/alert_seasonal.html +1 -0
  127. data_profiling/report/presentation/flavours/html/templates/alerts/alert_skewed.html +1 -0
  128. data_profiling/report/presentation/flavours/html/templates/alerts/alert_truncated.html +1 -0
  129. data_profiling/report/presentation/flavours/html/templates/alerts/alert_type_date.html +1 -0
  130. data_profiling/report/presentation/flavours/html/templates/alerts/alert_uniform.html +1 -0
  131. data_profiling/report/presentation/flavours/html/templates/alerts/alert_unique.html +1 -0
  132. data_profiling/report/presentation/flavours/html/templates/alerts/alert_unsupported.html +1 -0
  133. data_profiling/report/presentation/flavours/html/templates/alerts/alert_zeros.html +1 -0
  134. data_profiling/report/presentation/flavours/html/templates/alerts.html +47 -0
  135. data_profiling/report/presentation/flavours/html/templates/collapse.html +11 -0
  136. data_profiling/report/presentation/flavours/html/templates/correlation_table.html +5 -0
  137. data_profiling/report/presentation/flavours/html/templates/diagram.html +11 -0
  138. data_profiling/report/presentation/flavours/html/templates/dropdown.html +16 -0
  139. data_profiling/report/presentation/flavours/html/templates/duplicate.html +5 -0
  140. data_profiling/report/presentation/flavours/html/templates/frequency_table.html +45 -0
  141. data_profiling/report/presentation/flavours/html/templates/frequency_table_small.html +34 -0
  142. data_profiling/report/presentation/flavours/html/templates/report.html +26 -0
  143. data_profiling/report/presentation/flavours/html/templates/sample.html +10 -0
  144. data_profiling/report/presentation/flavours/html/templates/scores.html +78 -0
  145. data_profiling/report/presentation/flavours/html/templates/sequence/batch_grid.html +16 -0
  146. data_profiling/report/presentation/flavours/html/templates/sequence/grid.html +18 -0
  147. data_profiling/report/presentation/flavours/html/templates/sequence/list.html +7 -0
  148. data_profiling/report/presentation/flavours/html/templates/sequence/named_list.html +8 -0
  149. data_profiling/report/presentation/flavours/html/templates/sequence/overview_tabs.html +30 -0
  150. data_profiling/report/presentation/flavours/html/templates/sequence/scores.html +3 -0
  151. data_profiling/report/presentation/flavours/html/templates/sequence/sections.html +13 -0
  152. data_profiling/report/presentation/flavours/html/templates/sequence/select.html +40 -0
  153. data_profiling/report/presentation/flavours/html/templates/sequence/tabs.html +30 -0
  154. data_profiling/report/presentation/flavours/html/templates/table.html +38 -0
  155. data_profiling/report/presentation/flavours/html/templates/toggle_button.html +18 -0
  156. data_profiling/report/presentation/flavours/html/templates/variable.html +7 -0
  157. data_profiling/report/presentation/flavours/html/templates/variable_info.html +49 -0
  158. data_profiling/report/presentation/flavours/html/templates/wrapper/assets/bootstrap.bundle.min.js +7 -0
  159. data_profiling/report/presentation/flavours/html/templates/wrapper/assets/bootstrap.min.css +6 -0
  160. data_profiling/report/presentation/flavours/html/templates/wrapper/assets/cosmo.bootstrap.min.css +12 -0
  161. data_profiling/report/presentation/flavours/html/templates/wrapper/assets/flatly.bootstrap.min.css +12 -0
  162. data_profiling/report/presentation/flavours/html/templates/wrapper/assets/script.js +52 -0
  163. data_profiling/report/presentation/flavours/html/templates/wrapper/assets/simplex.bootstrap.min.css +12 -0
  164. data_profiling/report/presentation/flavours/html/templates/wrapper/assets/style.css +253 -0
  165. data_profiling/report/presentation/flavours/html/templates/wrapper/assets/united.bootstrap.min.css +12 -0
  166. data_profiling/report/presentation/flavours/html/templates/wrapper/footer.html +7 -0
  167. data_profiling/report/presentation/flavours/html/templates/wrapper/javascript.html +18 -0
  168. data_profiling/report/presentation/flavours/html/templates/wrapper/navigation.html +36 -0
  169. data_profiling/report/presentation/flavours/html/templates/wrapper/style.html +53 -0
  170. data_profiling/report/presentation/flavours/html/templates.py +76 -0
  171. data_profiling/report/presentation/flavours/html/toggle_button.py +7 -0
  172. data_profiling/report/presentation/flavours/html/variable.py +7 -0
  173. data_profiling/report/presentation/flavours/html/variable_info.py +7 -0
  174. data_profiling/report/presentation/flavours/widget/__init__.py +49 -0
  175. data_profiling/report/presentation/flavours/widget/alerts.py +45 -0
  176. data_profiling/report/presentation/flavours/widget/collapse.py +43 -0
  177. data_profiling/report/presentation/flavours/widget/container.py +121 -0
  178. data_profiling/report/presentation/flavours/widget/correlation_table.py +14 -0
  179. data_profiling/report/presentation/flavours/widget/dropdown.py +31 -0
  180. data_profiling/report/presentation/flavours/widget/duplicate.py +14 -0
  181. data_profiling/report/presentation/flavours/widget/frequency_table.py +57 -0
  182. data_profiling/report/presentation/flavours/widget/frequency_table_small.py +66 -0
  183. data_profiling/report/presentation/flavours/widget/html.py +11 -0
  184. data_profiling/report/presentation/flavours/widget/image.py +26 -0
  185. data_profiling/report/presentation/flavours/widget/notebook.py +81 -0
  186. data_profiling/report/presentation/flavours/widget/root.py +10 -0
  187. data_profiling/report/presentation/flavours/widget/sample.py +14 -0
  188. data_profiling/report/presentation/flavours/widget/table.py +30 -0
  189. data_profiling/report/presentation/flavours/widget/toggle_button.py +17 -0
  190. data_profiling/report/presentation/flavours/widget/variable.py +12 -0
  191. data_profiling/report/presentation/flavours/widget/variable_info.py +11 -0
  192. data_profiling/report/presentation/frequency_table_utils.py +141 -0
  193. data_profiling/report/structure/__init__.py +1 -0
  194. data_profiling/report/structure/correlations.py +123 -0
  195. data_profiling/report/structure/overview.py +376 -0
  196. data_profiling/report/structure/report.py +457 -0
  197. data_profiling/report/structure/variables/__init__.py +35 -0
  198. data_profiling/report/structure/variables/render_boolean.py +132 -0
  199. data_profiling/report/structure/variables/render_categorical.py +566 -0
  200. data_profiling/report/structure/variables/render_common.py +31 -0
  201. data_profiling/report/structure/variables/render_complex.py +102 -0
  202. data_profiling/report/structure/variables/render_count.py +172 -0
  203. data_profiling/report/structure/variables/render_date.py +143 -0
  204. data_profiling/report/structure/variables/render_file.py +70 -0
  205. data_profiling/report/structure/variables/render_generic.py +45 -0
  206. data_profiling/report/structure/variables/render_image.py +204 -0
  207. data_profiling/report/structure/variables/render_path.py +134 -0
  208. data_profiling/report/structure/variables/render_real.py +314 -0
  209. data_profiling/report/structure/variables/render_text.py +189 -0
  210. data_profiling/report/structure/variables/render_timeseries.py +371 -0
  211. data_profiling/report/structure/variables/render_url.py +132 -0
  212. data_profiling/report/utils.py +34 -0
  213. data_profiling/serialize_report.py +143 -0
  214. data_profiling/utils/__init__.py +1 -0
  215. data_profiling/utils/backend.py +9 -0
  216. data_profiling/utils/cache.py +59 -0
  217. data_profiling/utils/common.py +142 -0
  218. data_profiling/utils/compat.py +31 -0
  219. data_profiling/utils/dataframe.py +238 -0
  220. data_profiling/utils/logger.py +53 -0
  221. data_profiling/utils/notebook.py +8 -0
  222. data_profiling/utils/paths.py +45 -0
  223. data_profiling/utils/progress_bar.py +15 -0
  224. data_profiling/utils/styles.py +22 -0
  225. data_profiling/utils/versions.py +19 -0
  226. data_profiling/version.py +1 -0
  227. data_profiling/visualisation/__init__.py +1 -0
  228. data_profiling/visualisation/context.py +87 -0
  229. data_profiling/visualisation/missing.py +138 -0
  230. data_profiling/visualisation/plot.py +1158 -0
  231. data_profiling/visualisation/utils.py +113 -0
  232. fg_data_profiling-4.19.0.dist-info/METADATA +362 -0
  233. fg_data_profiling-4.19.0.dist-info/RECORD +238 -0
  234. fg_data_profiling-4.19.0.dist-info/WHEEL +6 -0
  235. fg_data_profiling-4.19.0.dist-info/entry_points.txt +3 -0
  236. fg_data_profiling-4.19.0.dist-info/licenses/LICENSE +21 -0
  237. fg_data_profiling-4.19.0.dist-info/top_level.txt +2 -0
  238. ydata_profiling/__init__.py +43 -0
@@ -0,0 +1,87 @@
1
+ import contextlib
2
+ import warnings
3
+ from typing import Any
4
+
5
+ import matplotlib
6
+ import seaborn as sns
7
+ from pandas.plotting import (
8
+ deregister_matplotlib_converters,
9
+ register_matplotlib_converters,
10
+ )
11
+
12
+
13
+ @contextlib.contextmanager
14
+ def manage_matplotlib_context() -> Any:
15
+ """Return a context manager for temporarily changing matplotlib unit registries and rcParams."""
16
+ originalRcParams = matplotlib.rcParams.copy()
17
+
18
+ # Credits for this style go to the ggplot and seaborn packages.
19
+ # We copied the style file to remove dependencies on the Seaborn package.
20
+ # Check it out, it's an awesome library for plotting
21
+ customRcParams = {
22
+ "patch.facecolor": "#348ABD", # blue
23
+ "patch.antialiased": True,
24
+ "font.size": 10.0,
25
+ "figure.edgecolor": "0.50",
26
+ # Seaborn common parameters
27
+ "figure.facecolor": "white",
28
+ "text.color": ".15",
29
+ "axes.labelcolor": ".15",
30
+ "legend.numpoints": 1,
31
+ "legend.scatterpoints": 1,
32
+ "xtick.direction": "out",
33
+ "ytick.direction": "out",
34
+ "xtick.color": ".15",
35
+ "ytick.color": ".15",
36
+ "axes.axisbelow": True,
37
+ "image.cmap": "Greys",
38
+ "font.family": ["sans-serif"],
39
+ "font.sans-serif": [
40
+ "Arial",
41
+ "Liberation Sans",
42
+ "Bitstream Vera Sans",
43
+ "sans-serif",
44
+ ],
45
+ "grid.linestyle": "-",
46
+ "lines.solid_capstyle": "round",
47
+ # Seaborn darkgrid parameters
48
+ # .15 = dark_gray
49
+ # .8 = light_gray
50
+ "axes.grid": True,
51
+ "axes.facecolor": "#EAEAF2",
52
+ "axes.edgecolor": "white",
53
+ "axes.linewidth": 0,
54
+ "grid.color": "white",
55
+ # Seaborn notebook context
56
+ "figure.figsize": [8.0, 5.5],
57
+ "axes.labelsize": 11,
58
+ "axes.titlesize": 12,
59
+ "xtick.labelsize": 10,
60
+ "ytick.labelsize": 10,
61
+ "legend.fontsize": 10,
62
+ "grid.linewidth": 1,
63
+ "lines.linewidth": 1.75,
64
+ "patch.linewidth": 0.3,
65
+ "lines.markersize": 7,
66
+ "lines.markeredgewidth": 0,
67
+ "xtick.major.width": 1,
68
+ "ytick.major.width": 1,
69
+ "xtick.minor.width": 0.5,
70
+ "ytick.minor.width": 0.5,
71
+ "xtick.major.pad": 7,
72
+ "ytick.major.pad": 7,
73
+ "backend": "agg",
74
+ }
75
+
76
+ try:
77
+ register_matplotlib_converters()
78
+ matplotlib.rcParams.update(customRcParams)
79
+ sns.set_style(style="white")
80
+ yield
81
+ finally:
82
+ deregister_matplotlib_converters() # revert to original unit registries
83
+ with warnings.catch_warnings():
84
+ warnings.filterwarnings(
85
+ "ignore", category=matplotlib.MatplotlibDeprecationWarning
86
+ )
87
+ matplotlib.rcParams.update(originalRcParams) # revert to original rcParams
@@ -0,0 +1,138 @@
1
+ """Plotting functions for the missing values diagrams"""
2
+ from typing import Any, List
3
+
4
+ from matplotlib import pyplot as plt
5
+
6
+ from data_profiling.config import Settings
7
+ from data_profiling.visualisation.context import manage_matplotlib_context
8
+ from data_profiling.visualisation.plot import (
9
+ missing_bar,
10
+ missing_heatmap,
11
+ missing_matrix,
12
+ )
13
+ from data_profiling.visualisation.utils import hex_to_rgb, plot_360_n0sc0pe
14
+
15
+
16
+ def get_font_size(columns: List[str]) -> float:
17
+ """Calculate font size based on number of columns
18
+
19
+ Args:
20
+ columns: List of column names.
21
+
22
+ Returns:
23
+ Font size for missing values plots.
24
+ """
25
+ max_label_length = max(len(label) for label in columns)
26
+
27
+ if len(columns) < 20:
28
+ font_size = 13.0
29
+ elif 20 <= len(columns) < 40:
30
+ font_size = 12.0
31
+ elif 40 <= len(columns) < 60:
32
+ font_size = 10.0
33
+ else:
34
+ font_size = 8.0
35
+
36
+ font_size *= min(1.0, 20.0 / max_label_length)
37
+ return font_size
38
+
39
+
40
+ @manage_matplotlib_context()
41
+ def plot_missing_matrix(
42
+ config: Settings, notnull: Any, columns: List[str], nrows: int
43
+ ) -> str:
44
+ """Generate missing values matrix plot
45
+
46
+ Args:
47
+ config: report Settings object
48
+ notnull: Missing data indicator matrix.
49
+ columns: List of column names.
50
+ nrows: Number of rows in the dataframe.
51
+
52
+ Returns:
53
+ The resulting missing values matrix encoded as a string.
54
+ """
55
+
56
+ missing_matrix(
57
+ notnull=notnull,
58
+ height=nrows,
59
+ columns=columns,
60
+ figsize=(10, 4),
61
+ fontsize=get_font_size(columns) / 20 * 16,
62
+ color=hex_to_rgb(config.html.style.primary_colors[0]),
63
+ labels=config.plot.missing.force_labels,
64
+ )
65
+ plt.subplots_adjust(left=0.1, right=0.9, top=0.7, bottom=0.2)
66
+ return plot_360_n0sc0pe(config)
67
+
68
+
69
+ @manage_matplotlib_context()
70
+ def plot_missing_bar(
71
+ config: Settings, notnull_counts: list, nrows: int, columns: List[str]
72
+ ) -> str:
73
+ """Generate missing values bar plot.
74
+
75
+ Args:
76
+ config: report Settings object
77
+ notnull_counts: Number of nonnull values per column.
78
+ nrows: Number of rows in the dataframe.
79
+ columns: List of column names.
80
+
81
+ Returns:
82
+ The resulting missing values bar plot encoded as a string.
83
+ """
84
+ missing_bar(
85
+ notnull_counts=notnull_counts,
86
+ nrows=nrows,
87
+ figsize=(10, 5),
88
+ fontsize=get_font_size(columns),
89
+ color=hex_to_rgb(config.html.style.primary_colors[0]),
90
+ labels=config.plot.missing.force_labels,
91
+ )
92
+ for ax0 in plt.gcf().get_axes():
93
+ ax0.grid(False)
94
+ plt.subplots_adjust(left=0.1, right=0.9, top=0.8, bottom=0.3)
95
+
96
+ return plot_360_n0sc0pe(config)
97
+
98
+
99
+ @manage_matplotlib_context()
100
+ def plot_missing_heatmap(
101
+ config: Settings, corr_mat: Any, mask: Any, columns: List[str]
102
+ ) -> str:
103
+ """Generate missing values heatmap plot.
104
+
105
+ Args:
106
+ config: report Settings object
107
+ corr_mat: Correlation matrix.
108
+ maks: Upper-triangle mask.
109
+ columns: List of column names.
110
+
111
+ Returns:
112
+ The resulting missing values heatmap plot encoded as a string.
113
+ """
114
+
115
+ height = 4
116
+ if len(columns) > 10:
117
+ height += int((len(columns) - 10) / 5)
118
+ height = min(height, 10)
119
+
120
+ font_size = get_font_size(columns)
121
+ if len(columns) > 40:
122
+ font_size /= 1.4
123
+
124
+ missing_heatmap(
125
+ corr_mat=corr_mat,
126
+ mask=mask,
127
+ figsize=(10, height),
128
+ fontsize=font_size,
129
+ cmap=config.plot.missing.cmap,
130
+ labels=config.plot.missing.force_labels,
131
+ )
132
+
133
+ if len(columns) > 40:
134
+ plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.3)
135
+ else:
136
+ plt.subplots_adjust(left=0.2, right=0.9, top=0.8, bottom=0.3)
137
+
138
+ return plot_360_n0sc0pe(config)