【发布时间】:2021-12-10 06:25:42
【问题描述】:
我有以下数据:
import pandas as pd
# using the data dict at the bottom of the question
df_uplift_percentile = pd.DataFrame.from_dict(data, 'index')
df_uplift_percentile.index.name = 'percentile'
# display(df_uplift_percentile)
n_treatment n_control response_rate_treatment response_rate_control uplift std_treatment std_control std_uplift
percentile
0-10 217 983 0.041475 0.004069 0.037405 0.013535 0.002030 0.013687
10-20 145 1055 0.013793 0.000948 0.012845 0.009686 0.000947 0.009732
20-30 149 1051 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
30-40 383 817 0.010444 0.009792 0.000652 0.005195 0.003445 0.006233
40-50 354 846 0.005650 0.005910 -0.000260 0.003984 0.002635 0.004776
50-60 423 777 0.033097 0.029601 0.003496 0.008698 0.006080 0.010612
60-70 588 611 0.132653 0.155483 -0.022830 0.013988 0.014660 0.020263
70-80 673 526 0.178306 0.161597 0.016709 0.014755 0.016049 0.021801
80-90 881 318 0.155505 0.261006 -0.105501 0.012209 0.024628 0.027488
90-100 938 261 0.152452 0.333333 -0.180881 0.011737 0.029179 0.031451
我想通过不同颜色的折线图按百分比(x 轴)绘制 response_rate_treatment、response_rate_control、uplift。
我正在尝试下面的代码。我犯了什么错误,它绘制了很多图表,而不仅仅是 3 行。
plt.figure(figsize=(20,15))
percentile = df_uplift_percentile.values
response_rate_treatment = df_uplift_percentile["response_rate_treatment"].values
response_rate_control = df_uplift_percentile["response_rate_control"].values
uplift= df_uplift_percentile["uplift"].values
plt.plot(percentile,response_rate_treatment,label= "Treatment Response Rate", color = 'green' )
plt.plot(percentile,response_rate_control,label = "Control Response Rate", color = 'yellow' )
plt.plot(percentile,uplift,label = "Uplift", color = 'red' )
plt.legend()
plt.ylabel("Uplift = Treatment Response Rate- Control Response Rate")
当前绘图结果
可重现的数据
- 数据字典
data =\
{'0-10': {'n_treatment': 217,
'n_control': 983,
'response_rate_treatment': 0.041475,
'response_rate_control': 0.004069,
'uplift': 0.037405,
'std_treatment': 0.013535,
'std_control': 0.00203,
'std_uplift': 0.013687},
'10-20': {'n_treatment': 145,
'n_control': 1055,
'response_rate_treatment': 0.013793,
'response_rate_control': 0.000948,
'uplift': 0.012845,
'std_treatment': 0.009686,
'std_control': 0.000947,
'std_uplift': 0.009732},
'20-30': {'n_treatment': 149,
'n_control': 1051,
'response_rate_treatment': 0.0,
'response_rate_control': 0.0,
'uplift': 0.0,
'std_treatment': 0.0,
'std_control': 0.0,
'std_uplift': 0.0},
'30-40': {'n_treatment': 383,
'n_control': 817,
'response_rate_treatment': 0.010444,
'response_rate_control': 0.009792,
'uplift': 0.000652,
'std_treatment': 0.005195,
'std_control': 0.003445,
'std_uplift': 0.006233},
'40-50': {'n_treatment': 354,
'n_control': 846,
'response_rate_treatment': 0.00565,
'response_rate_control': 0.00591,
'uplift': -0.00026,
'std_treatment': 0.003984,
'std_control': 0.002635,
'std_uplift': 0.004776},
'50-60': {'n_treatment': 423,
'n_control': 777,
'response_rate_treatment': 0.033097,
'response_rate_control': 0.029601,
'uplift': 0.003496,
'std_treatment': 0.008698,
'std_control': 0.00608,
'std_uplift': 0.010612},
'60-70': {'n_treatment': 588,
'n_control': 611,
'response_rate_treatment': 0.132653,
'response_rate_control': 0.155483,
'uplift': -0.02283,
'std_treatment': 0.013988,
'std_control': 0.01466,
'std_uplift': 0.020263},
'70-80': {'n_treatment': 673,
'n_control': 526,
'response_rate_treatment': 0.178306,
'response_rate_control': 0.161597,
'uplift': 0.016709,
'std_treatment': 0.014755,
'std_control': 0.016049,
'std_uplift': 0.021801},
'80-90': {'n_treatment': 881,
'n_control': 318,
'response_rate_treatment': 0.155505,
'response_rate_control': 0.261006,
'uplift': -0.105501,
'std_treatment': 0.012209,
'std_control': 0.024628,
'std_uplift': 0.027488},
'90-100': {'n_treatment': 938,
'n_control': 261,
'response_rate_treatment': 0.152452,
'response_rate_control': 0.333333,
'uplift': -0.180881,
'std_treatment': 0.011737,
'std_control': 0.029179,
'std_uplift': 0.031451}}
【问题讨论】:
-
只是为了确认您提供的数据,第一列名称应为“百分位数”,我需要将其更改如下。此修改将正确绘制图形。
percentile = df_uplift_percentile['percentile'].values -
仅供参考:彻底回答问题非常耗时。如果您的问题已解决,请通过接受最适合您的需求的解决方案表示感谢。✔ 位于答案左上角的 ▲/▼ 箭头下方。如果出现更好的解决方案,则可以接受新的解决方案。如果您的声望超过 15,您还可以使用 ▲/▼ 箭头对答案的有用性进行投票。 如果解决方案无法回答问题,请发表评论。 What should I do when someone answers my question?。谢谢。
标签: python pandas matplotlib plot