code: def calc_stat_values(self):
      self._val_cnt = {}
      for col, item in self._dataset.items():
          if not super().skip(col):
              self._val_cnt[col] = item.groupby(DT_COL_NAME).apply(
                  lambda s: len(s.unique())
              )
      self._val_cnt = pd.DataFrame(self._val_cnt)
      if self.ratio:
          self._val_cnt = self._val_cnt.div(
              self._dataset.groupby(DT_COL_NAME).size(), axis=0
          )
  
      # TODO: transfer this feature to other analysers
      ymin, ymax = self._val_cnt.min().min(), self._val_cnt.max().max()
      self.ylim = (
          ymin - 0.05 * (ymax - ymin),
          ymax + 0.05 * (ymax - ymin),
      )
  
imports: import pandas
  import numpy
  from qlib.contrib.report.data.base import FeaAnalyser
  from qlib.contrib.report.utils import sub_fig_generator
  from qlib.utils.paral import datetime_groupby_apply
  from qlib.contrib.eva.alpha import pred_autocorr_all
  from loguru import logger
  import seaborn
label_desc: Use image node_id 2 for calling the ValueCNT obj's underlying member method code with example usage: obj.calc_stat_values() without return types