Python计算数据集分位数、十分位数、百分位数的问题排查
问题排查与修正方案
原程序核心问题
- 冗余库导入:重复导入
numpy,无实际意义 - 分位数参数错误:
- 十分位数的
q参数写成[0.1,1,0.1],仅重复计算0.1和1分位数,未覆盖D1到D10(对应0.1到1.0步长0.1) - 百分位数使用
np.percentile时传入0.1~1的小数,实际计算的是0.1%到1%的分位数,与需求的常规百分位不符
- 十分位数的
- 可视化逻辑偏离:用随机生成的数据绘制直方图,未使用真实测试分数
- 图表未输出:注释掉
plt.show(),导致生成的图表无法显示 - 数据处理不严谨:直接用整个DataFrame计算分位数,未明确指定目标列,后续扩展易出错
修正后的完整代码
# Author: Evan Gertis # Date : 10/22 # program : quantile decile calculator import logging import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.ticker import PercentFormatter logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') # Step 1: 读取CSV并提取目标分数列 testScoresDF = pd.read_csv('test_scores.csv') test_scores = testScoresDF['Test_Scores'] # 明确指定计算列 print(testScoresDF.head()) # Step 2: 计算Q1-Q3分位数(25%、50%、75%分位数) quantiles = np.quantile(test_scores, q=[0.25, 0.5, 0.75]) logging.debug(f"Q1-Q3分位数: {quantiles}") # Step 3: 计算D1-D10十分位数(10%到100%,步长10%) deciles = np.quantile(test_scores, q=np.arange(0.1, 1.01, 0.1)) logging.debug(f"D1-D10十分位数: {deciles}") # Step 4: 计算百分位数(示例:1%到100%,可按需调整为特定百分位) percentiles = np.percentile(test_scores, q=np.arange(1, 101, 1)) logging.debug(f"1%-100%百分位数: {percentiles}") # Step 5: 绘制真实数据的分布图表 N_points = len(test_scores) n_bins = 20 fig, ax = plt.subplots(tight_layout=True) # 绘制测试分数直方图,添加边框增强可读性 ax.hist(test_scores, bins=n_bins, edgecolor='black') ax.set_title('测试分数分布直方图') ax.set_xlabel('分数') ax.set_ylabel('频数') # 可选:添加分位数参考线 quantile_labels = ['Q1', 'Q2', 'Q3'] for q, label in zip(quantiles, quantile_labels): ax.axvline(x=q, color='red', linestyle='--', label=label) ax.legend() plt.show()
关键修正说明
- 清理冗余代码:移除重复的
numpy和csv导入(pandas已可完成CSV读取) - 修正分位数参数:
- 十分位数用
np.arange(0.1, 1.01, 0.1)生成完整的0.1到1.0序列,覆盖D1到D10 - 百分位数用
np.arange(1, 101, 1)生成1到100的整数,对应常规1%到100%分位数,可根据需求调整为特定百分位(如10、20...100)
- 十分位数用
- 绑定真实数据可视化:用
test_scores列数据绘制直方图,添加分位数参考线增强图表信息密度 - 启用图表显示:取消
plt.show()的注释,确保图表正常弹出 - 提升代码健壮性:明确提取
Test_Scores列,避免后续DataFrame新增列时出现计算错误
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

