外观
普通频数分析
整理问卷类别构成,回答各选项有多少人选择。
计算口径
一行代表一名受访者。缺失回答与“未选中”含义不同,编码前先区分。
选择一个或多个类别变量。每个类别同时给出占全部记录的百分比和占该变量有效回答的百分比。原始输出记录缺失人数。
先核对有效人数与分母,再报告频数和百分比;多选题的个案百分比之和可能超过100%。
同源实现
以下片段来自 core/statistical/descriptive.py 的 frequency,由镜像脚本按语法树提取。共享辅助函数和分发逻辑包含在完整下载包中。
py
def frequency(data, options):
selected = columns(data, options.get('variables'))
rows, details = [], {}
enough(data, 1)
for name in selected:
series = data[name]
valid_n = int(series.notna().sum())
details[name] = {'total_n': len(series), 'valid_n': valid_n, 'missing_n': len(series)-valid_n}
for value, count in series.value_counts(sort=False).items():
rows.append({'variable': name, 'category': str(value), 'n': int(count),
'percent': 100*count/len(series), 'valid_percent': 100*count/valid_n})
if series.isna().any():
rows.append({'variable': name, 'category': _('缺失'), 'n': len(series)-valid_n,
'percent': 100*(len(series)-valid_n)/len(series), 'valid_percent': None})
table = PaperTable(_('频数分析'), [Column('variable', _('变量'), 'text', merge=True), Column('category', _('类别'), 'text'),
Column('n', _('频数'), 'integer'), Column('percent', _('百分比'), 'percent'),
Column('valid_percent', _('有效百分比'), 'percent')], rows)
return StatisticalResult([table], details)复现本方法
在解压目录安装 requirements.txt 后执行。样例为固定种子的模拟数据,仅供验证;输出不得冒充真实研究结果。
python
import examples._bootstrap
from examples.statistics_cases import build_data, method_cases
from core.statistical.runner import analyze
method = "stat_frequency"
options = dict(method_cases())[method]
result = analyze(build_data(), method, options)
print(result.tables[0].html())