本书所用的代码和数据都可以通过GitHub(https://github.com/AllenDowney/ThinkStats2)获取。前言中介绍了如何下载和使用这些代码。

下载代码后,你会得到一个名为ThinkStats2/code的文件夹,其中包含一个名为nsfg.py的文件。运行nsfg.py会读取数据文件,执行测试,然后打印出一条消息,例如“All test passed”。

让我们看看这个文件所执行的工作。第6次全国家庭增长调查的妊娠数据保存在名为2002FemPreg.dat.gz的文件中,这是一个纯文本(ASCII码)形式的gzip压缩文件,有固定宽度的列。这个文件中的每一行都是一个记录(record),包含一次妊娠的数据。

2002FemPreg.dct是一个Stata字典文件,记录了数据文件的格式。Stata是一个统计软件。Stata“字典”是由变量名、变量类型及标识变量位置的索引值组成的列表。

下面几行摘自2002FemPreg.dct:

infile dictionary { 
  _column(1) str12 caseid %12s "RESPONDENT ID NUMBER" 
  _column(13) byte pregordr %2f "PREGNANCY ORDER (NUMBER)" 
}

这个字典描述了两个变量:caseid是一个长度为12的字符串,代表调查参与者的ID;pregorder是一个单字节整数,说明这条记录描述的是这位调查参与者的第几次妊娠。

下载的代码包含一个thinkstats2.py文件,这是一个Python模块,包含了本书中用到的很多类和函数,其中有读取Stats字典和全国家庭增长调查数据文件的函数。这两个函数在nsfg.py中的用法如下:

def ReadFemPreg(dct_file='2002FemPreg.dct', 
                dat_file='2002FemPreg.dat.gz'): 
    dct = thinkstats2.ReadStataDct(dct_file) 
    df = dct.ReadFixedWidth(dat_file, compression='gzip') 
    CleanFemPreg(df) 
    return df

ReadStataDct的参数是字典文件名,返回值dct是一个FixedWidthVariables对象,其中包含从字典文件中得到的信息。dct对象提供ReadFixdWidth方法进行数据文件的读取。

30:00