← 返回题库
初级

计算P50/P95/P99延迟分位数

未完成
初级参考 完整示例代码供参考,建议自己理解后重新输入
def solve():
    from pyodide.http import open_url
    from io import StringIO
    request_logs_csv = open_url("https://data.zuihe.com/dbd/ms-shop/state_06/request_logs.csv").read()
    metrics_csv = open_url("https://data.zuihe.com/dbd/ms-shop/state_06/metrics.csv").read()
    import pandas as pd
    from io import StringIO
    logs = pd.read_csv(StringIO(request_logs_csv))
    metrics = pd.read_csv(StringIO(metrics_csv))
    def calc_percentiles(data, col='latency_ms'):
        vals = data[col].dropna().sort_values()
        n = len(vals)
        if n == 0: return 0,0,0
        def pct(p): return float(vals.iloc[int(n*p/100)])
        return pct(50), pct(95), pct(99)
    for path in logs['path'].unique():
        grp = logs[logs['path']==path]
        p50, p95, p99 = calc_percentiles(grp)
        print(f"{path}: P50={p50:.0f}ms, P95={p95:.0f}ms, P99={p99:.0f}ms (n={len(grp)})")
    print("预计算指标表:")
    print(metrics[['service','path','total_requests','error_count','p50_ms','p95_ms','p99_ms']].to_string(index=False))

示例

输入
solve()
期望输出
/api/v1/orders: P50=161ms, P95=355ms, P99=355ms (n=16)
/api/v1/payments: P50=212ms, P95=423ms, P99=423ms (n=9)
/api/v1/products: P50=284ms, P95=457ms, P99=457ms (n=7)
/api/v1/search: P50=152ms, P95=438ms, P99=438ms (n=7)
/api/v1/users: P50=207ms, P95=473ms, P99=473ms (n=11)
预计算指标表:
        service             path  total_requests  error_count  p50_ms  p95_ms  p99_ms
   user-service    /api/v1/users             100            8     231     486     496
product-service /api/v1/products             100            6     245     476     491
  order-service   /api/v1/orders             100            8     241     455     488
payment-service /api/v1/payments             100            6     264     472     498
Python 代码 🔒 登录后使用
🔒

登录后即可练习

注册免费账号,在浏览器中直接运行 Python 代码