Skip to content

Commit b3e7120

Browse files
committed
feat: update render to support VarDescription
1 parent f6fa91c commit b3e7120

14 files changed

Lines changed: 104 additions & 91 deletions

src/ydata_profiling/report/structure/variables/render_boolean.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import List
22

33
from ydata_profiling.config import Settings
4+
from ydata_profiling.model.var_description.default import VarDescription
45
from ydata_profiling.report.formatters import fmt, fmt_bytesize, fmt_percent
56
from ydata_profiling.report.presentation.core import (
67
Container,
@@ -16,7 +17,7 @@
1617
from ydata_profiling.visualisation.plot import cat_frequency_plot
1718

1819

19-
def render_boolean(config: Settings, summary: dict) -> dict:
20+
def render_boolean(config: Settings, summary: VarDescription) -> dict:
2021
varid = summary["varid"]
2122
n_obs_bool = config.vars.bool.n_obs
2223
image_format = config.plot.image_format
@@ -48,17 +49,17 @@ def render_boolean(config: Settings, summary: dict) -> dict:
4849
},
4950
{
5051
"name": "Missing",
51-
"value": fmt(summary["n_missing"]),
52+
"value": fmt(summary.n_missing),
5253
"alert": "n_missing" in summary["alert_fields"],
5354
},
5455
{
5556
"name": "Missing (%)",
56-
"value": fmt_percent(summary["p_missing"]),
57+
"value": fmt_percent(summary.p_missing),
5758
"alert": "p_missing" in summary["alert_fields"],
5859
},
5960
{
6061
"name": "Memory size",
61-
"value": fmt_bytesize(summary["memory_size"]),
62+
"value": fmt_bytesize(summary.memory_size),
6263
"alert": False,
6364
},
6465
],
@@ -67,8 +68,8 @@ def render_boolean(config: Settings, summary: dict) -> dict:
6768

6869
fqm = FrequencyTableSmall(
6970
freq_table(
70-
freqtable=summary["value_counts_without_nan"],
71-
n=summary["n"],
71+
freqtable=summary.value_counts_without_nan,
72+
n=summary.n,
7273
max_number_to_print=n_obs_bool,
7374
),
7475
redact=False,
@@ -89,7 +90,7 @@ def render_boolean(config: Settings, summary: dict) -> dict:
8990
max_unique = config.plot.cat_freq.max_unique
9091

9192
if show and (max_unique > 0):
92-
if isinstance(summary["value_counts_without_nan"], list):
93+
if isinstance(summary.value_counts_without_nan, list):
9394
items.append(
9495
Container(
9596
[
@@ -103,7 +104,7 @@ def render_boolean(config: Settings, summary: dict) -> dict:
103104
name=config.html.style._labels[idx],
104105
anchor_id=f"{varid}cat_frequency_plot_{idx}",
105106
)
106-
for idx, s in enumerate(summary["value_counts_without_nan"])
107+
for idx, s in enumerate(summary.value_counts_without_nan)
107108
],
108109
anchor_id=f"{varid}cat_frequency_plot",
109110
name="Common Values (Plot)",
@@ -114,10 +115,7 @@ def render_boolean(config: Settings, summary: dict) -> dict:
114115
else:
115116
items.append(
116117
Image(
117-
cat_frequency_plot(
118-
config,
119-
summary["value_counts_without_nan"],
120-
),
118+
cat_frequency_plot(config, summary.value_counts_without_nan),
121119
image_format=image_format,
122120
alt="Common Values (Plot)",
123121
name="Common Values (Plot)",

src/ydata_profiling/report/structure/variables/render_categorical.py

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pandas as pd
44

55
from ydata_profiling.config import Settings
6+
from ydata_profiling.model.var_description.default import VarDescription
67
from ydata_profiling.report.formatters import (
78
fmt,
89
fmt_bytesize,
@@ -27,7 +28,7 @@
2728

2829

2930
def render_categorical_frequency(
30-
config: Settings, summary: dict, varid: str
31+
config: Settings, summary: VarDescription, varid: str
3132
) -> Renderable:
3233
frequency_table = Table(
3334
[
@@ -54,7 +55,7 @@ def render_categorical_frequency(
5455

5556

5657
def render_categorical_length(
57-
config: Settings, summary: dict, varid: str
58+
config: Settings, summary: VarDescription, varid: str
5859
) -> Tuple[Renderable, Renderable]:
5960
length_table = Table(
6061
[
@@ -117,7 +118,7 @@ def _get_n(value: Union[list, pd.DataFrame]) -> Union[int, List[int]]:
117118

118119

119120
def render_categorical_unicode(
120-
config: Settings, summary: dict, varid: str
121+
config: Settings, summary: VarDescription, varid: str
121122
) -> Tuple[Renderable, Renderable]:
122123
n_freq_table_max = config.n_freq_table_max
123124

@@ -329,7 +330,7 @@ def render_categorical_unicode(
329330
)
330331

331332

332-
def render_categorical(config: Settings, summary: dict) -> dict:
333+
def render_categorical(config: Settings, summary: VarDescription) -> dict:
333334
varid = summary["varid"]
334335
n_obs_cat = config.vars.cat.n_obs
335336
image_format = config.plot.image_format
@@ -366,17 +367,17 @@ def render_categorical(config: Settings, summary: dict) -> dict:
366367
},
367368
{
368369
"name": "Missing",
369-
"value": fmt(summary["n_missing"]),
370+
"value": fmt(summary.n_missing),
370371
"alert": "n_missing" in summary["alert_fields"],
371372
},
372373
{
373374
"name": "Missing (%)",
374-
"value": fmt_percent(summary["p_missing"]),
375+
"value": fmt_percent(summary.p_missing),
375376
"alert": "p_missing" in summary["alert_fields"],
376377
},
377378
{
378379
"name": "Memory size",
379-
"value": fmt_bytesize(summary["memory_size"]),
380+
"value": fmt_bytesize(summary.memory_size),
380381
"alert": False,
381382
},
382383
],
@@ -385,8 +386,8 @@ def render_categorical(config: Settings, summary: dict) -> dict:
385386

386387
fqm = FrequencyTableSmall(
387388
freq_table(
388-
freqtable=summary["value_counts_without_nan"],
389-
n=summary["count"],
389+
freqtable=summary.value_counts_without_nan,
390+
n=summary.count,
390391
max_number_to_print=n_obs_cat,
391392
),
392393
redact=config.vars.cat.redact,
@@ -459,26 +460,28 @@ def render_categorical(config: Settings, summary: dict) -> dict:
459460
max_unique = config.plot.cat_freq.max_unique
460461

461462
if show and (max_unique > 0):
462-
if isinstance(summary["value_counts_without_nan"], list):
463+
if isinstance(summary.value_counts_without_nan, list):
463464
string_items.append(
464465
Container(
465466
[
466-
Image(
467-
cat_frequency_plot(
468-
config,
469-
s,
470-
),
471-
image_format=image_format,
472-
alt=config.html.style._labels[idx],
473-
name=config.html.style._labels[idx],
474-
anchor_id=f"{varid}cat_frequency_plot_{idx}",
467+
(
468+
Image(
469+
cat_frequency_plot(
470+
config,
471+
s,
472+
),
473+
image_format=image_format,
474+
alt=config.html.style._labels[idx],
475+
name=config.html.style._labels[idx],
476+
anchor_id=f"{varid}cat_frequency_plot_{idx}",
477+
)
478+
if summary["n_distinct"][idx] <= max_unique
479+
else HTML(
480+
f"<h4 class='indent'>{config.html.style._labels[idx]}</h4><br />"
481+
f"<em>Number of variable categories passes threshold (<code>config.plot.cat_freq.max_unique</code>)</em>"
482+
)
475483
)
476-
if summary["n_distinct"][idx] <= max_unique
477-
else HTML(
478-
f"<h4 class='indent'>{config.html.style._labels[idx]}</h4><br />"
479-
f"<em>Number of variable categories passes threshold (<code>config.plot.cat_freq.max_unique</code>)</em>"
480-
)
481-
for idx, s in enumerate(summary["value_counts_without_nan"])
484+
for idx, s in enumerate(summary.value_counts_without_nan)
482485
],
483486
anchor_id=f"{varid}cat_frequency_plot",
484487
name="Common Values (Plot)",
@@ -493,7 +496,7 @@ def render_categorical(config: Settings, summary: dict) -> dict:
493496
Image(
494497
cat_frequency_plot(
495498
config,
496-
summary["value_counts_without_nan"],
499+
summary.value_counts_without_nan,
497500
),
498501
image_format=image_format,
499502
alt="Common Values (Plot)",
@@ -515,9 +518,9 @@ def render_categorical(config: Settings, summary: dict) -> dict:
515518
string_items,
516519
name="Categories",
517520
anchor_id=f"{varid}string",
518-
sequence_type="named_list"
519-
if len(config.html.style._labels) > 1
520-
else "batch_grid",
521+
sequence_type=(
522+
"named_list" if len(config.html.style._labels) > 1 else "batch_grid"
523+
),
521524
batch_size=len(config.html.style._labels),
522525
),
523526
]

src/ydata_profiling/report/structure/variables/render_common.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
11
from ydata_profiling.config import Settings
2+
from ydata_profiling.model.var_description.default import VarDescription
23
from ydata_profiling.report.presentation.frequency_table_utils import (
34
extreme_obs_table,
45
freq_table,
56
)
67

78

8-
def render_common(config: Settings, summary: dict) -> dict:
9+
def render_common(config: Settings, summary: VarDescription) -> dict:
910
n_extreme_obs = config.n_extreme_obs
1011
n_freq_table_max = config.n_freq_table_max
1112

1213
template_variables = {
1314
# TODO: with nan
1415
"freq_table_rows": freq_table(
15-
freqtable=summary["value_counts_without_nan"],
16-
n=summary["n"],
16+
freqtable=summary.value_counts_without_nan,
17+
n=summary.n,
1718
max_number_to_print=n_freq_table_max,
1819
),
1920
"firstn_expanded": extreme_obs_table(
20-
freqtable=summary["value_counts_index_sorted"],
21+
freqtable=summary.value_counts_index_sorted,
2122
number_to_print=n_extreme_obs,
22-
n=summary["n"],
23+
n=summary.n,
2324
),
2425
"lastn_expanded": extreme_obs_table(
25-
freqtable=summary["value_counts_index_sorted"][::-1],
26+
freqtable=summary.value_counts_index_sorted[::-1],
2627
number_to_print=n_extreme_obs,
27-
n=summary["n"],
28+
n=summary.n,
2829
),
2930
}
3031

src/ydata_profiling/report/structure/variables/render_complex.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from ydata_profiling.config import Settings
2+
from ydata_profiling.model.var_description.default import VarDescription
23
from ydata_profiling.report.formatters import (
34
fmt,
45
fmt_bytesize,
@@ -15,7 +16,7 @@
1516
from ydata_profiling.visualisation.plot import scatter_complex
1617

1718

18-
def render_complex(config: Settings, summary: dict) -> dict:
19+
def render_complex(config: Settings, summary: VarDescription) -> dict:
1920
varid = summary["varid"]
2021
template_variables = {}
2122
image_format = config.plot.image_format
@@ -37,14 +38,14 @@ def render_complex(config: Settings, summary: dict) -> dict:
3738
"name": "Distinct (%)",
3839
"value": fmt_percent(summary["p_distinct"]),
3940
},
40-
{"name": "Missing", "value": fmt(summary["n_missing"])},
41+
{"name": "Missing", "value": fmt(summary.n_missing)},
4142
{
4243
"name": "Missing (%)",
43-
"value": fmt_percent(summary["p_missing"]),
44+
"value": fmt_percent(summary.p_missing),
4445
},
4546
{
4647
"name": "Memory size",
47-
"value": fmt_bytesize(summary["memory_size"]),
48+
"value": fmt_bytesize(summary.memory_size),
4849
},
4950
],
5051
style=config.html.style,

src/ydata_profiling/report/structure/variables/render_count.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from ydata_profiling.config import Settings
2+
from ydata_profiling.model.var_description.default import VarDescription
23
from ydata_profiling.report.formatters import (
34
fmt,
45
fmt_bytesize,
@@ -16,7 +17,7 @@
1617
from ydata_profiling.visualisation.plot import histogram, mini_histogram
1718

1819

19-
def render_count(config: Settings, summary: dict) -> dict:
20+
def render_count(config: Settings, summary: VarDescription) -> dict:
2021
template_variables = render_common(config, summary)
2122
image_format = config.plot.image_format
2223

@@ -44,12 +45,12 @@ def render_count(config: Settings, summary: dict) -> dict:
4445
},
4546
{
4647
"name": "Missing",
47-
"value": fmt(summary["n_missing"]),
48+
"value": fmt(summary.n_missing),
4849
"alert": False,
4950
},
5051
{
5152
"name": "Missing (%)",
52-
"value": fmt_percent(summary["p_missing"]),
53+
"value": fmt_percent(summary.p_missing),
5354
"alert": False,
5455
},
5556
],
@@ -87,7 +88,7 @@ def render_count(config: Settings, summary: dict) -> dict:
8788
},
8889
{
8990
"name": "Memory size",
90-
"value": fmt_bytesize(summary["memory_size"]),
91+
"value": fmt_bytesize(summary.memory_size),
9192
"alert": False,
9293
},
9394
],

src/ydata_profiling/report/structure/variables/render_date.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Any, Dict
22

33
from ydata_profiling.config import Settings
4+
from ydata_profiling.model.var_description.default import VarDescription
45
from ydata_profiling.report.formatters import fmt, fmt_bytesize, fmt_percent
56
from ydata_profiling.report.presentation.core import (
67
Container,
@@ -11,7 +12,7 @@
1112
from ydata_profiling.visualisation.plot import histogram, mini_histogram
1213

1314

14-
def render_date(config: Settings, summary: Dict[str, Any]) -> Dict[str, Any]:
15+
def render_date(config: Settings, summary: VarDescription) -> Dict[str, Any]:
1516
varid = summary["varid"]
1617
template_variables = {}
1718

@@ -41,17 +42,17 @@ def render_date(config: Settings, summary: Dict[str, Any]) -> Dict[str, Any]:
4142
},
4243
{
4344
"name": "Missing",
44-
"value": fmt(summary["n_missing"]),
45+
"value": fmt(summary.n_missing),
4546
"alert": False,
4647
},
4748
{
4849
"name": "Missing (%)",
49-
"value": fmt_percent(summary["p_missing"]),
50+
"value": fmt_percent(summary.p_missing),
5051
"alert": False,
5152
},
5253
{
5354
"name": "Memory size",
54-
"value": fmt_bytesize(summary["memory_size"]),
55+
"value": fmt_bytesize(summary.memory_size),
5556
"alert": False,
5657
},
5758
],

src/ydata_profiling/report/structure/variables/render_file.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
from typing import List
22

33
from ydata_profiling.config import Settings
4+
from ydata_profiling.model.var_description.default import VarDescription
45
from ydata_profiling.report.presentation.core import Container, FrequencyTable, Image
56
from ydata_profiling.report.presentation.core.renderable import Renderable
67
from ydata_profiling.report.presentation.frequency_table_utils import freq_table
78
from ydata_profiling.report.structure.variables.render_path import render_path
89
from ydata_profiling.visualisation.plot import histogram
910

1011

11-
def render_file(config: Settings, summary: dict) -> dict:
12+
def render_file(config: Settings, summary: VarDescription) -> dict:
1213
varid = summary["varid"]
1314

1415
template_variables = render_path(config, summary)
@@ -44,7 +45,7 @@ def render_file(config: Settings, summary: dict) -> dict:
4445
FrequencyTable(
4546
freq_table(
4647
freqtable=summary[file_date_id].value_counts(),
47-
n=summary["n"],
48+
n=summary.n,
4849
max_number_to_print=n_freq_table_max,
4950
),
5051
name=description,

0 commit comments

Comments
 (0)