美文网首页解密大数据
复现fishd第五课代码及作业

复现fishd第五课代码及作业

作者: Bog5d | 来源:发表于2017-08-15 23:53 被阅读5次
    import scipy.stats
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    %config InlineBackend.figure_format = 'retina'
    # 我在这里面就有两个错误啦,"pyplot"少写了一个“p”,".figure"少加了个点
    

    画一个标准正态分布

    standard_norm = scipy.stats.norm
    
    x = np.arange(-4,4,0.00001)
    
    plt.plot(x,standard_norm.pdf(x))
    plt.show()
    ##才发现自己小错误不断啊。 英文单词老输入错误、 
    
    output_2_0.png

    t分布

    t_dist = scipy.stats.t
    plt.plot(x,standard_norm.pdf(x),label='standard norm')
    
    x = np.arange(-4,4,0.01)
    plt.plot(x,t_dist.pdf(x,df=0.1),label='t distribution')
    
    plt.legend()
    plt.show()
    
    ##为什么legend放前面就显示label呢?  反正我知道,legend和label有关系
    ##t分布跟钟型曲线很接近,这意味着什么呢?  可以用来干嘛呢,这个性质。
    
    output_4_0.png

    置信区间

    $$ \bar{x} - |z_{\alpha/2}|\frac{\sigma}{\sqrt{n}} < \mu < \bar{x} + |z_{\alpha/2}|\frac{\sigma}{\sqrt{n}}$$

    house = pd.read_csv("house_size.csv",header =None)
    house.head()
    
    house_size= house.iloc[:,0]
    print(list(house_size))
    
    
    [314, 119, 217, 326, 342, 318, 130, 465, 383, 396, 507, 283, 250, 326, 279, 363, 229, 303, 367, 246, 247, 262, 209, 294, 112, 249, 354, 355, 272, 277, 377, 411, 223, 232, 445, 333, 336, 349, 611, 516, 233, 275, 395, 241, 127, 228, 305, 321, 235, 226, 288, 503, 305, 280, 318, 281, 227, 279, 171, 290, 336, 284, 380, 314, 316, 476, 309, 293, 160, 300, 319, 396, 275, 212, 344, 305, 280, 331, 359, 283, 136, 322, 359, 202, 188, 187, 457, 340, 262, 288, 318, 381, 289, 205, 373, 200, 320, 213, 261, 357]
    
    有100个房屋面积的样本,均值300.85平

    米,并已知总体标准差为86平米,求置信区间

    pop_std = 86
    
    
    sample_mean =house_size.mean()
    sample_mean
    
    
    
    300.85
    

    相当于求到了均值$$ \bar{x}$$

    sample_size =len(house_size)
    sample_size
    
    100
    

    这一步相当于求到了样本数量 “n”,并且
    $${\sigma}$$
    是知道的,86。
    此时,就只差z和
    $$|z_{\alpha/2}|$$

    z_score =scipy.stats.norm.isf(0.025)
    z_score
    ## z score是一个固定值吗?
    
    
    1.9599639845400545
    
    ##接下来计算ME
    margin_error = z_score*pop_std/np.sqrt(sample_size)
    margin_error
    
    
    16.855690267044469
    
    lower_limit =sample_mean-margin_error
    upper_limit = sample_mean+margin_error
    
    print('95%% 置信区间下总体均值范围为: ( %.1f, %.1f)' % (lower_limit, upper_limit))
    
    95% 置信区间下总体均值范围为: ( 284.0, 317.7)
    

    定义置信区间的计算函数

    def ci_z(data,pop_std,confidence):
        sample_mean =np.mean(data)
        sample_size =len(data)
        alpha = (1-confidence)/2
        z_score =scipy.stats.norm.isf(alpha)
        ME =z_score*pop_std/np.sqrt(sample_size)
       
        lower_limit =sample_mean-ME
        upper_limit =sample_mean+ME
        
        return(lower_limit,upper_limit)
        
    
    ci_z(house_size,pop_std,0.9)
    
    (286.70425880821733, 314.99574119178271)
    
    ci_z(house_size,pop_std,0.95)
    
    (283.99430973295557, 317.70569026704447)
    
    ci_z(house_size,pop_std,0.85)
    
    (288.47002934992929, 313.22997065007075)
    
    ci_z(house_size,pop_std,0.99)
    
    (278.69786798947951, 323.00213201052054)
    
    ci_z(house_size,pop_std,1)
    
    (-inf, inf)
    
    #### 函数太有用了吧,哈哈哈哈。
    

    关于bootstrap的信息

    如果进行方差分析,首先就要求正态分布,如果不是正态分布,就要有补救措施,这个补救措施就是bootstrap。

    np.random.choice(house_size,size=10)# 在总体数据中随机抽样10个
    
    array([275, 383, 318, 381, 290, 209, 314, 303, 340, 381], dtype=int64)
    
    def bootstrap_mean(data):
        ## 看来参数,和变量都是在括号中。 
        return np.mean(np.random.choice(data,size=len(data)))
    
    def draw_bootstrap(data,times):#总觉得这个等于1不应该设置好,而是应该空起啊,这是个变量参数的嘛
        bs_mean =np.empty(times)
        
        for i in range (times):
            bs_mean[i]=bootstrap_mean(data)
            
        return bs_meaniopop
    
    bs_mean =draw_bootstrap(house_size,10000)
    plt.hist(bs_mean, bins=50, normed=True, rwidth=0.9)
    plt.show()
    
    output_29_0.png
    np.percentile(bs_mean,[2.5,97.5])
    
    
    array([ 283.7795 ,  318.56025])
    
    ###这种方式也太厉害了吧。
    

    作业

    用t分布求上述置信区间

    $$ \bar{x} - |t_{\alpha/2}|\frac{s}{\sqrt{n}} < \mu < \bar{x} + |t_{\alpha/2}|\frac{s}{\sqrt{n}}$$

    #借用前面已经有的数据,比如sample_mean,sample_size这时候自己只需要计算出,t——score,s(样本标准差),就可以啦。
    t_score =scipy.stats.t.isf(0.025,df=sample_size-1)
    t_score
    
    1.9842169515086832
    
    sample_std=np.std(house_size)
    sample_std
    
    88.51230140494599
    
    ME_t=t_score*sample_std/np.sqrt(sample_size)
    ME_t
    
    17.562760886473967
    
    t_max = sample_mean+ME_t
    t_min =sample_mean-ME_t
    print('95%置信区间下,总体均值范围:',(t_min,t_max))
    
    95%置信区间下,总体均值范围: (283.28723911352608, 318.41276088647396)
    
    
    

    相关文章

      网友评论

        本文标题:复现fishd第五课代码及作业

        本文链接:https://www.haomeiwen.com/subject/jrjbrxtx.html