Добавить вероятность х и конверсии% - PullRequest
0 голосов
/ 06 июня 2018

Вот как в настоящее время выглядят данные:

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 или построить их график?Спасибо.

1 Ответ

0 голосов
/ 22 июня 2018

А1: df['prob'] = df['testers_time'].map(df.testers_time.value_counts(normalize=True))

А2: df['conv'] = df['testers_time'].rank(ascending=1)/len(df)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...