外观
分组描述统计
呈现样本中连续变量的水平、离散程度与取值范围。
计算口径
选择有数值意义的变量;类别编码的均值通常没有实质含义。各变量采用自身非缺失观测。
增加一个分组变量。结果按组和指标排列,分组变量缺失的记录不进入组别汇总。组内有效N仍按每个分析变量计算。
N是该行有效观测数。均值与标准差适合概括较对称分布;偏态数据可同时给出中位数、四分位数。
同源实现
以下片段来自 core/statistical/descriptive.py 的 descriptive,由镜像脚本按语法树提取。共享辅助函数和分发逻辑包含在完整下载包中。
py
def descriptive(data, options, grouped=False):
selected = columns(data, options.get('variables'))
numeric = numeric_frame(data, selected)
available = {
'n': (_('N'), 'integer'), 'mean': (_('均值'), 'number'), 'sd': (_('标准差'), 'number'),
'median': (_('中位数'), 'number'), 'q1': (_('下四分位数'), 'number'),
'q3': (_('上四分位数'), 'number'), 'min': (_('最小值'), 'number'), 'max': (_('最大值'), 'number'),
'skewness': (_('偏度'), 'number'), 'kurtosis': (_('峰度'), 'number'),
}
metrics = options.get('metrics', ['n', 'mean', 'sd', 'median', 'min', 'max'])
if not isinstance(metrics, list) or not metrics or len(set(metrics)) != len(metrics) or any(k not in available for k in metrics):
raise ValueError(_('请选择有效的描述统计项目'))
parts = [(None, numeric)]
if grouped:
group = columns(data, [options.get('group')])[0]
if group in selected:
raise ValueError(_('分组变量不能同时作为分析变量'))
parts = [(str(key), numeric.loc[index]) for key, index in data.groupby(group, sort=False, observed=True).groups.items()]
if not parts:
raise ValueError(_('分组变量没有有效类别'))
rows = []
for label, part in parts:
for name in selected:
values = part[name].dropna()
row = {'variable': name, 'group': label, 'n': len(values), 'mean': values.mean(), 'sd': values.std(ddof=1),
'median': values.median(), 'q1': values.quantile(.25), 'q3': values.quantile(.75),
'min': values.min(), 'max': values.max(), 'skewness': values.skew(), 'kurtosis': values.kurt()}
rows.append(row)
head = [Column('variable', _('变量'), 'text')]
if grouped:
head.append(Column('group', _('组别'), 'text'))
head += [Column(key, *available[key]) for key in metrics]
return StatisticalResult([PaperTable(_('分组描述性统计') if grouped else _('描述性统计'), head, rows)],
{'missing_policy': 'available_per_variable', 'total_n': len(data),
'kurtosis_definition': 'Fisher_excess_unbiased', 'descriptive': rows})复现本方法
在解压目录安装 requirements.txt 后执行。样例为固定种子的模拟数据,仅供验证;输出不得冒充真实研究结果。
python
import examples._bootstrap
from examples.statistics_cases import build_data, method_cases
from core.statistical.runner import analyze
method = "stat_descriptive_grouped"
options = dict(method_cases())[method]
result = analyze(build_data(), method, options)
print(result.tables[0].html())