代码之家  ›  专栏  ›  技术社区  ›  user8834780

PDF打印问题

  •  0
  • user8834780  · 技术社区  · 6 年前

    我尝试了以下手动方法:

    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'])
    
    df= df.dropna(subset=['testers_time']).sort_values('testers_time')
    
    prob = df['testers_time'].value_counts(normalize=True)
    print(prob)
    #0.333333,  0.333333,  0.333333
    plt.plot(df['testers_time'], prob, marker='.', linestyle='-') 
    
    plt.show()
    

    我在stackoverflow上找到了以下方法:

    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'])
    
    df= df.dropna(subset=['testers_time']).sort_values('testers_time')
    
    fit = stats.norm.pdf(df['testers_time'], np.mean(df['testers_time']), np.std(df['testers_time']))  
    print(fit)
    #0.02902547,  0.04346777,  0.01829513]
    plt.plot(df['testers_time'], fit, marker='.', linestyle='-')
    plt.hist(df['testers_time'], normed='true')      
    
    plt.show()
    

    正如你所看到的,我得到完全不同的值-概率是正确的,为1,但对2,他们不(也不加起来100%),和Y轴(%)的直方图是基于6个箱,而不是3。

    你能解释一下我怎样才能得到2的正确概率吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   ImportanceOfBeingErnest    6 年前

    第一种方法给你一个概率 群众 功能。第二个给你一个概率 密度 -因此命名为概率密度函数(pdf)。因此两者都是正确的,它们只是显示出一些不同的东西。

    如果在更大的范围内(例如,标准偏差的10倍)计算pdf,它看起来很像预期的高斯曲线。

    import pandas as pd
    import scipy.stats as stats
    import numpy as np
    import matplotlib.pyplot as plt
    
    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'])
    
    df= df.dropna(subset=['testers_time']).sort_values('testers_time')
    
    mean = np.mean(df['testers_time'])
    std = np.std(df['testers_time'])
    x = np.linspace(mean - 5*std, mean + 5*std)
    
    fit = stats.norm.pdf(x, mean, std)  
    print(fit)
    
    plt.plot(x, fit, marker='.', linestyle='-')
    plt.hist(df['testers_time'], normed='true')      
    
    plt.show()
    

    enter image description here