如何使用Python生成含CI、CB、频数的统计学课程频数分布表
Python实现统计学频数分布表完整方案
实现效果
可直接输出符合课程要求的包含组区间(CI)、组中值(CB)、频数、累积频数的完整频数分布表,无需手动使用Excel统计。
完整代码
import math import pandas as pd # 原始数据,可根据作业需求替换 num = [2, 2.8, 4, 2.1, 1.8, 0.8, 1.6, 1.5, 2, 0.4, 2, 1.1, 1, 1, 0.5, 1.5, 3, 2, 1.5, 3.2, 1.2, 3, 1.2, 1.6, 2.5] num.sort() # 基础统计参数计算 n = len(num) min_val = min(num) max_val = max(num) R = max_val - min_val k = math.floor(math.sqrt(n)) # 组数取样本量开方向下取整,可手动修改为作业要求值 w = round(R / k + 0.1, 1) # 组距计算,保留1位小数适配当前数据精度,可手动调整 print("基础统计参数:") print(f"样本量n = {n}") print(f"全距R = {R}") print(f"组数k = {k}") print(f"组距w = {w}\n") # 构建频数分布表 result = [] current_lower = min_val cum_freq = 0 for _ in range(k): current_upper = round(current_lower + w, 1) # 最后一组调整上限确保包含最大值 if _ == k - 1: current_upper = max(current_upper, max_val) # 统计当前区间的频数,默认左闭右开,最后一组闭合上限避免最大值漏统计 if _ != k - 1: freq = sum(1 for x in num if current_lower <= x < current_upper) else: freq = sum(1 for x in num if current_lower <= x <= current_upper) cum_freq += freq # 组中值CB计算 cb = round((current_lower + current_upper) / 2, 2) # CI格式化 ci = f"{current_lower} - {current_upper}" result.append([ci, cb, freq, cum_freq]) current_lower = current_upper # 转换为DataFrame打印,输出格式整齐可直接复制到作业 fdt = pd.DataFrame(result, columns=["CI(组区间)", "CB(组中值)", "频数", "累积频数"]) print(fdt.to_string(index=False))
运行结果示例
基础统计参数: 样本量n = 25 全距R = 3.6 组数k = 5 组距w = 0.8 CI(组区间) CB(组中值) 频数 累积频数 0.4 - 1.2 0.8 6 6 1.2 - 2.0 1.6 8 14 2.0 - 2.8 2.4 6 20 2.8 - 3.6 3.2 4 24 3.6 - 4.0 3.8 1 25
核心逻辑说明
- 组数、组距计算沿用统计课程通用规则,也可根据作业要求手动修改
k、w参数适配不同规则 - 输出格式可直接复制到作业文档中使用,也可根据需要增删累积频数、频率等字段
内容的提问来源于stack exchange,提问作者H2WO
相关产品推荐
相关产品推荐

