통계적 사고 (2판) 연습문제 (thinkstats2.com, think-stat.xwmooc.org)
Allen Downey / 이광춘(xwMOOC)


In [23]:
import nsfg
df = nsfg.ReadFemPreg()
df


Out[23]:
caseid pregordr howpreg_n howpreg_p moscurrp nowprgdk pregend1 pregend2 nbrnaliv multbrth ... laborfor_i religion_i metro_i basewgt adj_mod_basewgt finalwgt secu_p sest cmintvw totalwgt_lb
0 1 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3410.389399 3869.349602 6448.271112 2 9 NaN 8.8125
1 1 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3410.389399 3869.349602 6448.271112 2 9 NaN 7.8750
2 2 1 NaN NaN NaN NaN 5 NaN 3 5 ... 0 0 0 7226.301740 8567.549110 12999.542264 2 12 NaN 9.1250
3 2 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 7226.301740 8567.549110 12999.542264 2 12 NaN 7.0000
4 2 3 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 7226.301740 8567.549110 12999.542264 2 12 NaN 6.1875
5 6 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 4870.926435 5325.196999 8874.440799 1 23 NaN 8.5625
6 6 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 4870.926435 5325.196999 8874.440799 1 23 NaN 9.5625
7 6 3 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 4870.926435 5325.196999 8874.440799 1 23 NaN 8.3750
8 7 1 NaN NaN NaN NaN 5 NaN 1 NaN ... 0 0 0 3409.579565 3787.539000 6911.879921 2 14 NaN 7.5625
9 7 2 NaN NaN NaN NaN 5 NaN 1 NaN ... 0 0 0 3409.579565 3787.539000 6911.879921 2 14 NaN 6.6250
10 12 1 NaN NaN NaN NaN 5 NaN 1 NaN ... 0 0 0 3612.781968 4146.013572 6909.331618 1 31 NaN 7.8125
11 14 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2418.069494 2810.302771 3039.904507 2 56 NaN 7.0000
12 14 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2418.069494 2810.302771 3039.904507 2 56 NaN 4.0000
13 14 3 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 2418.069494 2810.302771 3039.904507 2 56 NaN NaN
14 15 1 NaN NaN NaN NaN 1 NaN NaN NaN ... 0 0 0 1667.816099 3200.862017 5553.495599 1 33 NaN NaN
15 15 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 1667.816099 3200.862017 5553.495599 1 33 NaN 7.6875
16 15 3 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 1667.816099 3200.862017 5553.495599 1 33 NaN 7.5000
17 18 1 NaN NaN NaN NaN 5 NaN 1 NaN ... 0 0 0 2957.257457 3404.403067 4153.371741 2 14 NaN 6.3125
18 18 2 NaN NaN NaN NaN 1 NaN NaN NaN ... 0 0 0 2957.257457 3404.403067 4153.371741 2 14 NaN NaN
19 21 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3408.342437 3965.763949 7237.122630 1 48 NaN 8.7500
20 21 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3408.342437 3965.763949 7237.122630 1 48 NaN 8.1875
21 23 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 6210.373020 8120.841310 13533.382043 2 64 NaN 5.5625
22 23 2 NaN NaN NaN NaN 1 NaN NaN NaN ... 0 0 0 6210.373020 8120.841310 13533.382043 2 64 NaN NaN
23 24 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3409.573258 4068.628645 7424.840414 1 27 NaN 6.7500
24 24 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3409.573258 4068.628645 7424.840414 1 27 NaN 7.3750
25 24 3 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3409.573258 4068.628645 7424.840414 1 27 NaN 6.8125
26 28 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3407.794208 3808.343516 6949.846082 2 57 NaN 8.1250
27 31 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3405.679025 4272.084519 5211.943113 1 2 NaN 7.1250
28 31 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3405.679025 4272.084519 5211.943113 1 2 NaN 6.0625
29 31 3 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3405.679025 4272.084519 5211.943113 1 2 NaN 7.4375
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
13563 12547 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3453.545517 6628.022524 11499.619080 1 52 NaN 7.6875
13564 12547 3 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3453.545517 6628.022524 11499.619080 1 52 NaN 7.6250
13565 12550 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3080.452699 3745.326058 5268.550165 1 79 NaN 8.1250
13566 12551 1 NaN NaN NaN NaN 5 NaN 1 NaN ... 0 0 0 2418.538866 3653.453268 3951.940400 2 75 NaN 7.5000
13567 12554 1 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 1914.676604 2177.957240 2764.045534 2 75 NaN NaN
13568 12554 2 NaN NaN NaN NaN 4 NaN NaN NaN ... 0 0 0 1914.676604 2177.957240 2764.045534 2 75 NaN NaN
13569 12556 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2474.619764 3250.573384 3965.699528 1 44 NaN 5.8125
13570 12556 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2474.619764 3250.573384 3965.699528 1 44 NaN 6.6875
13571 12556 3 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2474.619764 3250.573384 3965.699528 1 44 NaN 6.0000
13572 12556 4 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2474.619764 3250.573384 3965.699528 1 44 NaN 5.8125
13573 12561 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2418.089703 2698.650781 4497.301527 1 10 NaN 6.5625
13574 12561 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2418.089703 2698.650781 4497.301527 1 10 NaN 6.1250
13575 12564 1 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 1820.850938 2129.214067 2768.191208 2 44 NaN NaN
13576 12565 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 3195.641221 3834.241709 6652.409365 1 78 NaN 6.4375
13577 12565 2 35 1 8 NaN NaN NaN NaN NaN ... 0 0 0 3195.641221 3834.241709 6652.409365 1 78 NaN NaN
13578 12566 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2080.317155 2422.820274 2627.548587 2 2 NaN 6.0000
13579 12566 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2080.317155 2422.820274 2627.548587 2 2 NaN 7.0000
13580 12568 1 NaN NaN NaN NaN 1 NaN NaN NaN ... 0 0 0 2734.687353 4258.980140 7772.212858 2 28 NaN NaN
13581 12568 2 NaN NaN NaN NaN 5 NaN 1 NaN ... 0 0 0 2734.687353 4258.980140 7772.212858 2 28 NaN 6.3750
13582 12568 3 NaN NaN NaN NaN 4 NaN NaN NaN ... 0 0 0 2734.687353 4258.980140 7772.212858 2 28 NaN NaN
13583 12569 1 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 2580.967613 2925.167116 5075.164946 2 61 NaN NaN
13584 12569 2 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 2580.967613 2925.167116 5075.164946 2 61 NaN 6.3750
13585 12570 1 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 5181.311509 6205.829154 11325.017623 2 40 NaN NaN
13586 12570 2 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 5181.311509 6205.829154 11325.017623 2 40 NaN NaN
13587 12570 3 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 5181.311509 6205.829154 11325.017623 2 40 NaN NaN
13588 12571 1 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 4670.540953 5795.692880 6269.200989 1 78 NaN 6.1875
13589 12571 2 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 4670.540953 5795.692880 6269.200989 1 78 NaN NaN
13590 12571 3 NaN NaN NaN NaN 3 NaN NaN NaN ... 0 0 0 4670.540953 5795.692880 6269.200989 1 78 NaN NaN
13591 12571 4 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 4670.540953 5795.692880 6269.200989 1 78 NaN 7.5000
13592 12571 5 NaN NaN NaN NaN 6 NaN 1 NaN ... 0 0 0 4670.540953 5795.692880 6269.200989 1 78 NaN 7.5000

13593 rows × 244 columns

birthord에 대한 빈도수를 출력하고 codebook 게시된 결과값과 비교하시오.


In [24]:
df.birthord.value_counts().sort_index()


Out[24]:
1     4413
2     2874
3     1234
4      421
5      126
6       50
7       20
8        7
9        2
10       1
Name: birthord, dtype: int64

prglngth에 대한 빈도수를 출력하고 codebook 게시된 결과값과 비교하시오.


In [25]:
df.prglngth.value_counts().sort_index()


Out[25]:
0       15
1        9
2       78
3      151
4      412
5      181
6      543
7      175
8      409
9      594
10     137
11     202
12     170
13     446
14      29
15      39
16      44
17     253
18      17
19      34
20      18
21      37
22     147
23      12
24      31
25      15
26     117
27       8
28      38
29      23
30     198
31      29
32     122
33      50
34      60
35     357
36     329
37     457
38     609
39    4744
40    1120
41     591
42     328
43     148
44      46
45      10
46       1
47       1
48       7
50       2
Name: prglngth, dtype: int64

agepreg에 대한 빈도수를 출력하고 codebook에 게시된 결과값과 비교하시오.

이 데이터를 살펴보고, 응답자에 대한 존경과 맥락을 고려해서 데이터에 접근하는에 필요한 의무에 관해서 저자가 언급한 논평을 기억하라.


In [26]:
df.agepreg.value_counts().sort_index()


Out[26]:
10.33     1
10.50     1
10.83     1
10.91     1
11.08     1
11.41     1
11.50     1
11.75     2
12.08     1
12.25     1
12.41     2
12.50     1
12.66     2
12.75     1
12.83     2
12.91     1
13.00     2
13.08     1
13.16     1
13.25     4
13.33     1
13.50     3
13.58     2
13.66     5
13.75     4
13.83     5
13.91     5
14.00     5
14.08     7
14.16    12
         ..
40.50     6
40.58     4
40.66     4
40.75     2
40.83     4
40.91     4
41.00     2
41.08     2
41.16     2
41.25     6
41.33     1
41.41     2
41.58     4
41.75     3
41.83     1
41.91     4
42.08     2
42.16     1
42.25     1
42.33     1
42.41     1
42.50     2
42.58     2
42.75     2
43.00     3
43.16     1
43.25     4
43.58     3
43.91     1
44.08     1
Name: agepreg, dtype: int64

평균 출생체중(birthweight)을 계산하시오.


In [27]:
df.totalwgt_lb.mean()


Out[27]:
7.265628457623368

킬로그램으로 출생체중 정보를 담는 totalwgt_kg로 불리는 새로운 칼럼을 생성하라. 평균도 계산하시오. 새로운 칼럼을 생성할 때, 점표기법이 아닌 딕셔너리 구문을 사용하는 것을 기억하라.


In [28]:
df['totalwgt_kg'] = df.totalwgt_lb / 2.2
df.totalwgt_kg.mean()


Out[28]:
3.3025583898288033

코드북(codebook)을 살펴보고 책에서 언급된 것이 아닌 본인이 관심있는 변수를 찾아내라. 그리고 그 변수의 빈도수, 평균, 다른 통계량을 계산하시오.


In [29]:
df.columns


Out[29]:
Index([         u'caseid',        u'pregordr',       u'howpreg_n',
             u'howpreg_p',        u'moscurrp',        u'nowprgdk',
              u'pregend1',        u'pregend2',        u'nbrnaliv',
              u'multbrth',
       ...
            u'religion_i',         u'metro_i',         u'basewgt',
       u'adj_mod_basewgt',        u'finalwgt',          u'secu_p',
                  u'sest',         u'cmintvw',     u'totalwgt_lb',
           u'totalwgt_kg'],
      dtype='object', length=245)

부울 시리즈(boolean Series)를 생성하시오.


In [30]:
print('Count:', df.npostsmk.value_counts().sort_index()) ## 임신기간동안 흡연
print('Mean:', df.npostsmk.mean())


('Count:', 1     83
2    168
3    199
4     91
5     14
6     12
9      1
Name: npostsmk, dtype: int64)
('Mean:', 2.6954225352112675)

부울 시리즈를 사용해서 정상출산 임신에 대한 레코드를 선택하시오.


In [31]:
live = df[df.outcome == 1]
len(live)


Out[31]:
9148

birthwgt_lb 변수에 0 에서 5 파운드(0과 5도 모두 포함) 사이 정상출산 빈도수를 계산하시오. 결과는 1125 가 되어야만 된다.


In [32]:
len(live[(live.birthwgt_lb >= 0) & (live.birthwgt_lb <= 5)])


Out[32]:
1125

birthwgt_lb 변수에 9 에서 95 파운드(9과 95도 모두 포함) 사이 정상출산 빈도수를 계산하시오. 결과는 798 가 되어야만 된다.


In [33]:
len(live[(live.birthwgt_lb >=9)&(live.birthwgt_lb <=95)])


Out[33]:
798

birthord 변수를 사용해서, 첫번째 아이와 첫째가 아닌 아이에 대한 레코드를 선택하시오. 첫번째 아이와 첫째가 아닌 아이는 얼마나 되는가?


In [34]:
firsts = df[df.birthord==1]
others = df[df.birthord>1]
len(firsts), len(others)


Out[34]:
(4413, 4735)

첫번째 아이와 첫째가 아닌 아이에 대한 평균 체중을 계산하시오.


In [35]:
firsts.totalwgt_lb.mean()


Out[35]:
7.201094430437772

In [36]:
others.totalwgt_lb.mean()


Out[36]:
7.325855614973262

변수 prglngth으로 첫째 아이와 첫째가 아닌 아이에 대한 평균임신기간을 계산하시오. 시간으로 표시된, 평균에 차이를 계산하시오.


In [37]:
print('Firsts Mean: ', firsts.prglngth.mean())
print('Others Mean: ', others.prglngth.mean())
print('Diff: ', firsts.prglngth.mean()-others.prglngth.mean())


('Firsts Mean: ', 38.60095173351461)
('Others Mean: ', 38.52291446673706)
('Diff: ', 0.07803726677754952)

In [ ]: