from scipy import statsimport numpy as npdef get_confidence_interval(data: list, n_digits=3): """ 计算95%置信区间 :param data: list, 数据 :param n_digits: 小数位数, 默认 3 """ mean = np.mean(data) # 均值 std_error = stats.sem(data) # 标准误差 n = len(data) # 样本量 if n < 30: # 方法一: 在处理较小的数据集时可以使用t分布方法,通常当数据的元素小于30个时(n<30) lower, upper = stats.t.interval(0.95, n - 1, loc=mean, scale=std_error) else: # 方法二: 元素的数量超过30(n>30) lower, upper = stats.norm.interval(0.95, loc=mean, scale=std_error) mean = round(mean.item(), n_digits) # 均值 lower = round(lower.item(), n_digits) if ~np.isnan(lower) else "-" # 下限 upper = round(upper.item(), n_digits) if ~np.isnan(upper) else "-" # 上限 return {'mean': mean, 'lower': lower, 'upper': upper}