《统计思维——程序员数学之概率统计》学习笔记及每章练习 - Cache One

《统计思维——程序员数学之概率统计》学习笔记及每章练习

第一章 探索性数据分析

  • 练习1.1
    主要目的是为了熟悉作者正文里用到的一些获取数据的方法。
    – ReadFemPreg:从dct文件和dat文件中分别读取属性和数据,组合成一个DataFrame对象返回,供后续分析数据使用。
    – 访问DataFrame中的一列,可以用字典语法 df[‘pregordr’], 也可以用点标记法 df.pregordr(只有当列名为合法的Python标识符时才能使用)。
    – 为DataFrame添加新列时,必须使用字典语法。
    – DataFrame的每一列是一个Series对象,可以用valude_counts()方法计算每个值出现的次数,如:df.outcome.value_counts().sort_index().
    – MakePregMap():获取每个caseid对应的所有index(一位受访者会有n次怀孕数据,对应n行)。函数实现中用到的collections.defaultdict()用于返回一个类似字典的对象,可以不用显式赋值。
    – 获取特定caseid的所有数据:preg[preg.caseid==2298]

  • 练习1.2
    – 读取2001FemResp.dat.gz数据:将ReadFemResp入参改为(dct_file=‘2001FemResp.dct’, dat_file=‘2001FemResp.dat.gz’, nrows=None). 读取pregnum:

    resp_2001 = ReadFemResp_2001()
    preg_2001 = nsfg.ReadFemPreg()
    
    pregnum_list = preg_2001.pregnum.value_counts().sort_index()
    print(pregnum_list)

– 比较Resp和Preg文件中每位调查者的妊娠次数: 遍历Resp中的每个index,得到index对应的pregnum数和caseid;使用nsfg.ReadPregMap生成字典,将caseid映射的Preg中的index个数与Resp中的pregnum数相比较,如果不一致则上报。

   preg_map = nsfg.MakePregMap(preg_2001)
	
   for index, pregnum in resp_2001.pregnum.items():
        caseid = resp_2001.caseid[index]
        indices = preg_map[caseid]
        
        if len(indices) != pregnum:
            print(caseid, len(indices), pregnum)
            return False
    
   return True

第二章 分布

  • 练习2.1
    使用的汇总统计量:第一胎出生周数的均值、众数,用直方图显示其分布情况。如果要安慰一位焦虑的病人,可以选择用方差,表示2~3周的偏差是正常的。

  • 练习2.2
    – 计算频数的几种方法:使用字典hist.get(x,0);使用collections模块的Counter类;使用pandas的value_couts方法;使用本书提供的Hist类。
    – 使用本书的thinkplot模块绘制直方图。
    – 用pandas计算均值mean,方差var,标准差std.

第三章 概率质量函数

  • 练习3.1
    从resp中获取列’numkdhh’,用thinkstats2.Pmf计算概率质量函数,用thinkplot.Pmf画出分布图;
    偏倚分布:将每个值x对应的概率值乘以x之后,重新计算其PMF。
  • 练习3.2
    根据公式实现均值和方差的计算
def PmfMean(pmf):
    sum = 0
    for x,p in pmf.Items():
        sum = sum+x*p
    return sum

def PmfVar(pmf):
    sum = 0
    exp = PmfMean(pmf)
    for x,p in pmf.Items():
        sum = sum+(x-exp)*(x-exp)*p
    return sum
  • 练习3.3
    比较同一位母亲的第一胎和其他孩子的差异:使用nsfg.MakePregMap找出indices长度>=2的受访者,为至少生育两胎的母亲,计算其几次prglngth的差异。

  • 练习3.4