ํต๊ณ์ ์ฌ๊ณ (2ํ) ์ฐ์ต๋ฌธ์ (thinkstats2.com, think-stat.xwmooc.org)
Allen Downey / ์ด๊ด์ถ(xwMOOC)
%matplotlib inline
from __future__ import print_function
import hinc
import density
import chap06soln
import thinkstats2
import thinkplot
import numpy as np
์๋ ๋ถํฌ๋ ์ ๋ช ํ๊ฒ๋ ์ฐ์ธก์ผ๋ก ๊ธฐ์ธ์ด์ ธ ์๋ค. ์ด๋ฒ ์ฐ์ต๋ฌธ์ ์์, ์ด ์น์ฐ์นจ์ด ์ผ๋ง๋ ๊ฐํ์ง ์ธก์ ํ ๊ฒ์ด๋ค. ์ธ๊ตฌ๋ํฅ์กฐ์ฌ(Current Population Survey, CPS)๋ ๋ ธ๋ํต๊ณ๊ตญ(Bureau of Labor Statistics)๊ณผ ์ธ๊ตฌ์กฐ์ฌ๊ตญ(Census Bureau)์ ๊ณต๋์์ ์ผ๋ก ์๋๊ณผ ๊ด๋ จ๋ ๋ณ์๋ฅผ ์ฐ๊ตฌํ๋ค. 2013๋ ์ ์์ง๋ ๋ฐ์ดํฐ๋ http://www.census.gov/hhes/www/cpstables/032013/hhinc/toc.htm%EC%97%90%EC%84%9C ๋ค์ด๋ก๋ ๋ฐ์ ์ ์๋ค. ์ ์๋ ๊ฐ๊ตฌ์๋ ์ ๋ณด๋ฅผ ๊ฐ๋ ์์ ํ์ผ hinc06.xls ์ ๋ค์ด๋ก๋ ๋ฐ์์, ์ด์ฑ ์ ์ ์ฅ์์์ ์ฐพ์ ์ ์๋ CSV ํ์ผ hinc06.csv๋ก ๋ณํํ๋ค. ์ด CSV ํ์ผ์ ๋ถ๋ฌ์ฝ๋ hinc.py ํ์ผ๋ ํจ๊ป ์๋ค.
๋ฐ์ดํฐ์ ์ ์๋๊ตฌ๊ฐ๊ณผ ํด๋น ๊ตฌ๊ฐ์ ์ํ๋ ์๋ต์์์ ํํ๋ก ๋์ด์๋ค. ๊ฐ์ฅ ๋ฎ์ ๊ตฌ๊ฐ์ "5000์ดํ"์ดํ์ฐ๊ฐ์๋์์ ๊ณ ํ์๋ต์๊ฐํฌํจ๋๋ค.๊ฐ์ฅ๋์๊ตฌ๊ฐ์"250,000 ์ด์" ๋ฒ์ด๋ค์ธ ์๋ต์๊ฐ ํฌํจ๋๋ค.
์ด ๋ฐ์ดํฐ์์ ํ๊ท ๊ณผ ๋ค๋ฅธ ํต๊ณ๋์ ์ถ์ ํ๋๋ฐ, ํํ๊ณผ ์ํ์ ๋ํด์, ๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ตฌ๊ฐ์ ๊ฐ๋ค์ด ์ด๋ป๊ฒ ๋ถํฌ๋์๋์ง์ ๊ดํด ๊ฐ์ ์ ํด์ผํ๋ค. hinc2.py ํ์ผ์ InterpolateSample์ด ์ ๊ณต๋๋๋ฐ, ๋ฐ์ดํฐ๋ฅผ ๋ชจํํํ๋ ํ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค. ๊ฐ ๊ตฌ๊ฐ์ ๋ํ ์ํ์ ๋ด๊ณ ์๋ income ์นผ๋ผ๊ณผ ๊ฐ ๊ตฌ๊ฐ์ ์๋ต์์๋ฅผ ๋ด๊ณ ์๋ freq ์นผ๋ผ์ ๊ฐ๋ ๋ฐ์ดํฐํ๋ ์์ ์ธ์๋ก ๋ฐ๋๋ค.
log_upper๋ ์ธ์๋ก ๋ฐ๋๋ฐ, log10 ๋ฌ๋ฌ๋ก ํํ๋๋ ๊ฐ์ฅ ์๋์ด ๋์ ๊ตฌ๊ฐ์ ์ํ์ด๋ค. ๊ธฐ๋ณธ์ค์ ๊ฐ log_upper=6.0 ์ธ๋ฐ ์๋ต์ ๊ฐ์ด๋ฐ์ ๊ฐ์ฅ ๋์ ์๋์ด 106, ์ฆ ๋ฐฑ๋ง๋ถ์ด๋ผ๋ ๊ฐ์ ์ ๋ํ๋ธ๋ค.
InterpolateSample๋ ์ ์ฌํ๋ณธ์ ์์ฑํ๋ค; ์ฆ, ๊ฐ ๊ตฌ๊ฐ์์ ์ค์ ๋ฐ์ดํฐ์ ๊ฐ์ ์๋ต์์๋ฅผ ์ฐ์ถํด๋ด๋ ๊ฐ๊ตฌ์๋ ํ๋ณธ์ด๋ค. ๊ฐ ๊ตฌ๊ฐ ์๋์ด log10 ์ฒ๋๋ก ๊ท ๋ฑ๋ถํ ๋จ์ ๊ฐ์ ํ๋ค.
๊ฒฐ๊ณผ๋ก ๋์จ ํ๋ณธ์ ๋ํด ์ค์์, ํ๊ท , ๊ธฐ์ธ์ด์ง, ํผ์ด์จ ๊ธฐ์ธ์ด์ง์ ๊ณ์ฐํ์์ค. ํ๊ท ์ดํ ์ธ๊ธ์ ๋งค๊ธธ ์ ์๋ ์๋์ด ์๋ ๊ฐ๊ตฌ ๋น์จ์ ์ผ๋ง์ธ๊ฐ? ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ํ ์ํ์ ์ผ๋ง๋ ์์กดํ๋๊ฐ?
์๋์ ๋ํ ์๋, ์ค์์, ํ๊ท , ํ์คํธ์ฐจ์ ํผ์ด์จ ์๋๋ฅผ ๊ณ์ฐํ์์ค.
df = hinc.ReadData()
log_sample = chap06soln.InterpolateSample(df, log_upper=6.0)
log_cdf = thinkstats2.Cdf(log_sample)
thinkplot.Cdf(log_cdf)
thinkplot.Show(xlabel='household income',
ylabel='CDF')
sample = np.power(10, log_sample)
density.Summarize(sample)
mean 74278.7075312 std 93946.9299635 median 51226.4544789 skewness 4.94992024443 pearson skewness 0.736125801914
(74278.707531187203, 51226.454478940461)
<matplotlib.figure.Figure at 0x840e3b0>
log_upper=7.0
์ผ๋ก ์กฐ์ ํ ๋ถ์๊ฒฐ๊ณผ.
df = hinc.ReadData()
log_sample = chap06soln.InterpolateSample(df, log_upper=7.0)
log_cdf = thinkstats2.Cdf(log_sample)
thinkplot.Cdf(log_cdf)
thinkplot.Show(xlabel='household income',
ylabel='CDF')
sample = np.power(10, log_sample)
density.Summarize(sample)
mean 124267.397222 std 559608.501374 median 51226.4544789 skewness 11.6036902675 pearson skewness 0.391564509277
(124267.39722164697, 51226.454478940461)
<matplotlib.figure.Figure at 0xeb39bf0>
๋ ๋์ ์ํ์ผ๋ก, ์์ํ ๋ฏ์ด ์ ๋ฅ ๊ธฐ๋ฐ ์๋๋ ์ฆ๊ฐํ๋ค. ๋๋๊ฒ๋, ํผ์ด์จ ์๋๋ ๋ฎ์์ง๋ค! ์ด์ ๋ ์๋ง๋ ์ํ์ ๋์ด๋ ๊ฒ์ด ํ๊ท ์ ์ํฅ์ ์ด๋์ ๋ ๋ฏธ์น๊ณ , ํ์คํธ์ฐจ์ ์ข๋ ๊ฐํ ํจ๊ณผ๋ฅผ ๋ฏธ์น๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ํ์คํธ์ฐจ๊ฐ ๋ถ๋ชจ์ 3์นํ ๊ฒ์ด๋ผ, ๊ฒฐ๊ณผ์ ๋ ๊ฐํ ์ํฅ์ ์ค๋ค.
๊ทธ๋์, ์ด๊ฒ์ด ํผ์ด์จ ์๋๊ฐ ์์ฝํต๊ณ๋์ผ๋ก ์ ๋์ํ์ง ์๋ ์์ ๋ค. ๋ ๋์ ์ ํ์ง๋ ๋ฌธ๋งฅ์ ์ผ๋ก ์๋ฏธ๋ฅผ ๊ฐ๋ ์๋ฅผ ๋ค์ด ํ๊ท ์ดํ ์๋์ ๊ฐ๋ ๋น์จ๊ฐ์ ํต๊ณ๋์ด ๋๋ค. ํน์, (๋ ํ๋ฅ ์ง๋จ์์ ์์๋๋ ์๋์ ์ฐจ์ด๊ฐ์) ๋ถํฌ์ ํน์ฑ์ ๊ณ๋ํํ๋ ค๊ณ ์ค๊ณ๋ ์ง๋ ๊ณ์๊ฐ์ ๊ฒ์ด ๋๋ค.
cdf = thinkstats2.Cdf(sample)
print('cdf[mean]: ', cdf[mean]*100, ' %')
pdf = thinkstats2.EstimatedPdf(sample)
thinkplot.Pdf(pdf)
thinkplot.Show(xlabel='household income',
ylabel='PDF')
cdf[mean]: 66.0005879567 %
<matplotlib.figure.Figure at 0x8328b70>