Skip to content

总体描述统计 ​

呈现样本中连续变量的水平、离散程度与取值范围。

计算口径 ​

选择有数值意义的变量;类别编码的均值通常没有实质含义。各变量采用自身非缺失观测。

在分析设置勾选需要的统计量。输出按变量排列;峰度使用超额峰度口径。缺失值按变量分别排除,不能把不同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"
options = dict(method_cases())[method]
result = analyze(build_data(), method, options)
print(result.tables[0].html())

页面操作与解读教程

Released under the AGPL-3.0 License.