You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

关键修正说明

  1. 清理冗余代码:移除重复的numpy和csv导入(pandas已可完成CSV读取)
  2. 修正分位数参数:
    • 十分位数用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)
  3. 绑定真实数据可视化:用test_scores列数据绘制直方图,添加分位数参考线增强图表信息密度
  4. 启用图表显示:取消plt.show()的注释,确保图表正常弹出
  5. 提升代码健壮性:明确提取Test_Scores列,避免后续DataFrame新增列时出现计算错误

内容的提问来源于stack exchange,提问作者Evan Gertis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:25:21