Вот как в настоящее время выглядят данные:
id testers_time stage_1_to_2_time activated_time stage_2_to_3_time engaged_time
a 10 30 40 30 70
b 30
c 15 30 45
d
dict = {'id': ['a','b','c','d'], 'testers_time': [10, 30, 15, None], 'stage_1_to_2_time': [30, None, 30, None], 'activated_time' : [40, None, 45, None],'stage_2_to_3_time' : [30, None, None, None],'engaged_time' : [70, None, None, None]}
df = pd.DataFrame(dict, columns=['id', 'testers_time', 'stage_1_to_2_time', 'activated_time', 'stage_2_to_3_time', 'engaged_time'])
У меня есть график testers_time
против его кумулятивной вероятности из CDF:
def ecdf(df):
n = len(df)
x = np.sort(df)
y = np.arange(1.0, n+1) / n
return x, y
df = df['testers_time'].dropna().sort_values()
print(df)
x, y = ecdf(df)
plt.plot(x, y, marker='.', linestyle='none')
plt.axvline(x.mean(), color='gray', linestyle='dashed', linewidth=2) #Add mean
x_m = int(x.mean())
y_m = stats.percentileofscore(df, x.mean())/100.0
plt.annotate('(%s,%s)' % (x_m,int(y_m*100)) , xy=(x_m,y_m), xytext=(10,-5), textcoords='offset points')
percentiles= np.array([0,25,50,75,100])
x_p = np.percentile(df, percentiles)
y_p = percentiles/100.0
plt.plot(x_p, y_p, marker='D', color='red', linestyle='none') # Overlay quartiles
for x,y in zip(x_p, y_p):
plt.annotate('%s' % int(x), xy=(x,y), xytext=(10,-5), textcoords='offset points')
Что я пытаюсьсделать, это график testers_time
против:
1) его некумулятивная вероятность, если он будет представлен в графике, он должен выглядеть как своего рода PDF
2) его кумулятивная конверсия%, где конверсиялюбой id
с заполненным (не пустым или нулевым) testers_time
.Таким образом, id a
(1 из 4 идентификаторов) конвертирует, то есть 25%, id b
конвертирует, то есть 50% (начиная с кумулятивного), id c
конвертирует, это 75%, а id d
не конвертирует, поэтому 75% конверсии максимально, на 30 дней testers_time
.
Можете ли вы помочь добавить вышеперечисленное в столбцы в df
или построить их график?Спасибо.