【问题标题】:Calculate cumulative p_value hourly in pandas在熊猫中每小时计算累积 p_value
【发布时间】:2016-09-16 16:02:21
【问题描述】:

我想知道是否有一种方法可以计算数据框中每小时数据的累积 p_value。例如,如果您有 24 小时的数据,则会有 24 次 p_value 测量值,但它们会在当前小时之前的所有小时内累积。

通过按小时对数据进行分组,然后应用我编写的 agg_func 来计算计算 p 所需的所有相关统计数据,我已经能够获得每个小时的 p_value。但是,这种方法不会产生累积结果,只会产生每个小时的 p。

给定一个带有列 id、ts(作为 unix 时间戳)、ab_group、result 的 df。我运行以下代码来计算每小时的 p_values。

df['time'] = pd.to_datetime(df.ts, unit='s').values.astype('<m8[h]')

def calc_p(group):
    df_old_len = len(group[group.ab_group == 0])
    df_new_len = len(group[group.ab_group == 1])
    ctr_old = float(len(group[(group.ab_group == 0) & (df.result == 1)]))/ df_old_len
    ctr_new = float(len(group[(group.ab_group == 1) & (df.converted == 1)]))/ df_new_len
    nobs_old = df_old_len
    nobs_new = df_new_len
    z_score, p_val, null = z_test.z_test(ctr_old, ctr_new, nobs_old, nobs_new, effect_size=0.001)
    return p_val

grouped = df.groupby(by='time').agg(calc_p)

注意z_test 是我自己的包含 z_test 实现的模块。

非常感谢任何有关如何修改累积 p 的建议。

【问题讨论】:

  • 我不认为 p 值本身或其计算的组成部分很容易转化为加法。
  • @AmiTavory 我想出了一个解决方案。最终不得不将每个组件设置为全局变量并在函数内更新。

标签: python pandas grouping p-value


【解决方案1】:

所以我自己想出了一个解决方法。

我想出的是修改calc_p(),使其利用全局变量,因此每次被 aggfunc 调用时都可以使用更新的值。以下是修改后的代码:

def calc_p(group):
    global df_old_len, df_new_len, clicks_old, clicks_new
    clicks_old += len(group[(group.landing_page == 'old_page') & (group.converted == 1)])
    clicks_new += len(group[(group.landing_page == 'new_page') & (group.converted == 1)])
    df_old_len += len(group[group.landing_page == 'old_page'])
    df_new_len += len(group[group.landing_page == 'new_page'])
    ctr_old = float(clicks_old)/df_old_len
    ctr_new = float(clicks_new)/df_new_len
    z_score, p_val, null = z_test.z_test(ctr_old, ctr_new, df_old_len, df_new_len, effect_size=0.001)
    return p_val

# Initialize global values to 0 for cumulative calc_p
df_old_len = 0
df_new_len = 0
clicks_old = 0
clicks_new = 0

grouped = df.groupby(by='time').agg(calc_p)

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多