code: def compute_metrics(self, data, metrics):
      res = pd.DataFrame(columns=data.schema.columns)
      q_metrics = [
          metric
          for metric in metrics
          if re.match(r"^(100|\d{1,2})%$", metric)
      ]
      self._q_pts = [int(metric[:-1]) / 100 for metric in q_metrics]
      for metric in metrics:
          metric_val = None
          """if metric == "describe":
                  res = data.describe(ddof=self.ddof, unbiased=~self.bias)
                  self.metrics_summary = res
                  self.inner_metric_names = list(res.index)
                  return"""
          if metric in ["sum", "min", "max", "mean", "std", "var"]:
              metric_val = self.get_from_describe(data, metric)
          if metric in q_metrics:
              metric_val = self.get_from_quantile_summary(data, metric)
          elif metric == "count":
              if self._count is None:
                  self._count = data.count()
              metric_val = self._count
          elif metric == "median":
              metric_val = data.quantile(
                  q=0.5, relative_error=self.relative_error
              )
              metric_val = metric_val.loc[0.5]
          elif metric == "coefficient_of_variation":
              metric_val = self.get_from_describe(data, "variation")
          elif metric == "missing_count":
              if self._nan_count is None:
                  self._nan_count = self.get_from_describe(
                      data, "na_count"
                  )
              metric_val = self._nan_count
          elif metric == "missing_ratio":
              if self._nan_count is None:
                  self._nan_count = self.get_from_describe(
                      data, "na_count"
                  )
              if self._count is None:
                  self._count = data.count()
              metric_val = self._nan_count / self._count
          elif metric == "skewness":
              metric_val = self.get_from_describe(data, "skew")
          elif metric == "kurtosis":
              metric_val = self.get_from_describe(data, "kurt")
  
          res.loc[metric] = metric_val
  
      has_nan = res.isnull().any()
      if has_nan.any():
          nan_cols = res.columns[has_nan].to_list()
          logger.warning(
              f"NaN value(s) found in statistics over columns: {nan_cols}; "
              f"this may lead to unexpected behavior."
          )
      self.metrics_summary = res
      self.inner_metric_names = list(res.index)
  
imports: import logging
  import re
  from typing import List
  import pandas
  from fate.arch import Context
  from ..abc.module import Module
label_desc: Use image node_id 4 for calling the StatisticsSummary obj's underlying member method code with example usage: obj.compute_metrics(data, metrics) without return types