def concatenate(cls, list_of_stats):
        """
        Take a list of stats from different sets of data points and
        merge the stats for getting stats overall data points.

        Args:
            list_of_stats (iterable): A list containing stats for different sets of data points.

        Returns:
            DataStats: Stats calculated overall sets of data points.
        """

        all_stats = np.stack([stats.values for stats in list_of_stats])
        all_counts = all_stats[:, 4]
        all_counts_relative = all_counts / np.sum(all_counts)

        min_value = float(np.min(all_stats[:, 2]))
        max_value = float(np.max(all_stats[:, 3]))
        mean_value = float(np.sum(all_counts_relative * all_stats[:, 0]))
        var_value = float(np.sum(all_counts_relative * (all_stats[:, 1] + np.power(all_stats[:, 0] - mean_value, 2))))
        num_value = int(np.sum(all_counts))

        return cls(mean_value, var_value, min_value, max_value, num_value)
Take a list of stats from different sets of data points and
        merge the stats for getting stats overall data points.

        Args:
            list_of_stats (iterable): A list containing stats for different sets of data points.

        Returns:
            DataStats: Stats calculated overall sets of data points.