class_docstr: Display aggregate dataset statistics and dataset-level information.
  
  The report is a composite view of combination of performed analyses: :py:class:`~autogluon.eda.analysis.dataset.DatasetSummary`,
  :py:class:`~autogluon.eda.analysis.dataset.RawTypesAnalysis`, :py:class:`~autogluon.eda.analysis.dataset.VariableTypeAnalysis`,
  :py:class:`~autogluon.eda.analysis.dataset.SpecialTypesAnalysis`, :py:class:`~autogluon.eda.analysis.missing.MissingValuesAnalysis`.
  The components can be present in any combination (assuming their dependencies are satisfied).
  
  The report requires at least one of the analyses present to be rendered.
  
  Parameters
  ----------
  headers: bool, default = False
      if `True` then render headers
  namespace: str, default = None
      namespace to use; can be nested like `ns_a.ns_b.ns_c`
   sort_by: Optional[str], default = None
      column to sort the resulting table
   sort_asc: bool, default = True
      if `sort_by` provided, then if sorting should ascending or descending
  
  Examples
  --------
  >>> import autogluon.eda.analysis as eda
  >>> import autogluon.eda.visualization as viz
  >>> import autogluon.eda.auto as auto
  >>> state = auto.analyze(
  >>>     train_data=..., label=..., return_state=True,
  >>>     anlz_facets=[
  >>>         eda.dataset.DatasetSummary(),
  >>>         eda.dataset.RawTypesAnalysis(),
  >>>         eda.dataset.VariableTypeAnalysis(),
  >>>         eda.dataset.SpecialTypesAnalysis(),
  >>>         eda.missing.MissingValuesAnalysis(),
  >>>     ],
  >>>     viz_facets=[
  >>>         viz.dataset.DatasetStatistics()
  >>>     ]
  >>> )
  
  See Also
  --------
  :py:class:`~autogluon.eda.analysis.dataset.DatasetSummary`
  :py:class:`~autogluon.eda.analysis.dataset.RawTypesAnalysis`
  :py:class:`~autogluon.eda.analysis.dataset.VariableTypeAnalysis`
  :py:class:`~autogluon.eda.analysis.dataset.SpecialTypesAnalysis`
  :py:class:`~autogluon.eda.analysis.missing.MissingValuesAnalysis`
code: def _render(self, state: AnalysisState) -> None:
      datasets = []
      for k in [
          "dataset_stats",
          "missing_statistics",
          "raw_type",
          "variable_type",
          "special_types",
      ]:
          if k in state:
              datasets = state[k].keys()
              break
  
      for ds in datasets:
          # Merge different metrics
          stats = self._merge_analysis_facets(ds, state)
          # Fix counts
          df = pd.DataFrame(stats)
          if "dataset_stats" in state:
              df = self._fix_counts(df, ["unique", "freq"])
          if "missing_statistics" in state:
              df = self._fix_counts(df, ["missing_count"])
          df = df.fillna("")
  
          self.render_header_if_needed(
              state, f"`{ds}` dataset summary", ds=ds
          )
          if self.sort_by in df.columns:
              df = df.sort_values(
                  by=self.sort_by, ascending=self.sort_asc
              )
          with pd.option_context(
              "display.max_rows", 100 if len(df) <= 100 else 20
          ):
              self.display_obj(df)
  
imports: from typing import Any, Dict, List, Optional
  import pandas
  from pandas import DataFrame
  from ..state import AnalysisState
  from .base import AbstractVisualization
  from .jupyter import JupyterMixin
label_desc: Use image node_id 3 for calling the DatasetStatistics obj's underlying member method code with example usage: obj._render(state) without return types