Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

Think Stats by Allen B. Downey Think Stats is an introduction to Probability and Statistics for Python programmers.

This is the accompanying code for this book.

Website: http://greenteapress.com/wp/think-stats-2e/

Views: 7115
License: GPL3
Kernel: Unknown Kernel

This file contains example code to demonstrate various Pandas features.

from __future__ import print_function, division %matplotlib inline

For the first example, I'll work with data from the BRFSS

import brfss df = brfss.ReadBrfss(nrows=5000) df['height'] = df.htm3

Of the first 5000 respondents, 42 have invalid heights. Note that most obvious ways of checking for null don't work.

sum(df.height.isnull())
42

Use dropna to select valid heights.

valid_heights = df.height.dropna() len(valid_heights)
4958

EstimatedPdf is an interface to gaussian_kde

import thinkstats2 pdf = thinkstats2.EstimatedPdf(valid_heights)

The kde object provides resample:

fillable = pdf.kde.resample(len(df)).flatten() fillable.shape
(5000,)

Or you can use thinkstats objects instead. First convert from EstimatedPdf to Pmf

import thinkplot pmf = pdf.MakePmf() thinkplot.Pdf(pmf)
{"metadata":{},"output_type":"display_data","png":"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\niIiIhLr/D3Za3Sgax5b/AAAAAElFTkSuQmCC\n","text":["<matplotlib.figure.Figure at 0x7f852aa6e5d0>"]}

You can use the Pmf to generate a random sample, but it is faster to convert to Cdf:

cdf = pmf.MakeCdf() fillable = cdf.Sample(len(df))

Then we can use fillna to replace NaNs

import pandas series = pandas.Series(fillable) df.height.fillna(series, inplace=True) sum(df.height.isnull())
0

cdf = thinkstats2.Cdf(df.height) thinkplot.Cdf(cdf)
{'xscale': 'linear', 'yscale': 'linear'}
{"metadata":{},"output_type":"display_data","png":"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\nRK5CYII=\n","text":["<matplotlib.figure.Figure at 0x7f852aa33410>"]}

import brfss resp = brfss.ReadBrfss(nrows=5000).dropna(subset=['sex', 'htm3']) grouped = resp.groupby('sex')
for i, group in grouped: print(i, group.shape)
1 (1611, 6) 2 (3347, 6)
grouped.get_group(1).mean()
age 54.868077 sex 1.000000 wtyrago 92.561772 finalwt 782.980373 wtkg2 91.694793 htm3 179.120422 dtype: float64
grouped.mean()
age wtyrago finalwt wtkg2 htm3
sex
1 54.868077 92.561772 782.980373 91.694793 179.120422
2 54.891468 76.803614 418.628225 76.282271 163.973110
grouped['htm3'].mean()
sex 1 179.120422 2 163.973110 Name: htm3, dtype: float64
grouped.htm3.std()
sex 1 7.643153 2 7.013427 Name: htm3, dtype: float64
import numpy grouped.aggregate(numpy.mean)
age wtyrago finalwt wtkg2 htm3
sex
1 54.868077 92.561772 782.980373 91.694793 179.120422
2 54.891468 76.803614 418.628225 76.282271 163.973110
grouped.aggregate(numpy.std)
age wtyrago finalwt wtkg2 htm3
sex
1 15.979595 20.082096 891.896249 19.124774 7.643153
2 16.318462 20.818984 480.059627 19.615797 7.013427
d = {} for name, group in grouped: d[name] = group.htm3.values
d
{1: array([ 170., 185., 183., ..., 178., 175., 170.]), 2: array([ 157., 163., 165., ..., 168., 157., 173.])}
import brfss resp = brfss.ReadBrfss().dropna(subset=['sex', 'wtkg2'])
groups = resp.groupby('sex') d = {} for name, group in groups: d[name] = group.wtkg2
d
{1: 3 73.64 4 88.64 5 109.09 8 90.00 9 77.27 10 63.64 13 127.27 20 76.36 23 78.18 26 77.27 35 81.82 39 90.00 42 90.91 45 93.18 50 81.82 ... 414468 63.64 414470 81.82 414474 87.73 414475 113.64 414477 100.91 414480 89.09 414481 76.36 414488 102.27 414490 71.82 414498 75.00 414501 86.36 414503 78.18 414504 88.64 414506 90.91 414508 75.00 Name: wtkg2, Length: 153900, dtype: float64, 2: 0 70.91 1 72.73 6 50.00 7 122.73 11 78.18 12 62.73 14 95.45 15 88.64 16 90.91 17 50.00 18 100.00 19 72.73 21 63.64 22 55.45 24 90.91 ... 414483 68.18 414484 87.27 414485 77.27 414486 61.36 414489 86.36 414492 70.45 414493 56.82 414494 68.18 414495 72.73 414496 56.82 414497 65.91 414499 129.55 414500 75.00 414505 72.73 414507 89.09 Name: wtkg2, Length: 244584, dtype: float64}
import numpy for sex, weights in d.items(): print(sex, numpy.log(weights).mean(), numpy.log(weights).std())
(1, 4.4693001977146656, 0.19557721757853172) (2, 4.2596856357921178, 0.22599757494674719)
import scipy.stats
shape, loc, scale = scipy.stats.lognorm.fit(d[1], floc=0) shape, loc, scale
(0.19557677265342968, 0, 87.295636995626353)
shape, loc, scale = scipy.stats.lognorm.fit(d[2], floc=0) shape, loc, scale
(0.22599714638037718, 0, 70.787767991419116)
import thinkstats2 cdf = thinkstats2.Cdf(d[2])
import thinkplot %matplotlib inline thinkplot.Cdf(cdf)
{'xscale': 'linear', 'yscale': 'linear'}
{"metadata":{},"output_type":"display_data","png":"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\nAAAASUVORK5CYII=\n","text":["<matplotlib.figure.Figure at 0x7f6a0b4cce10>"]}
rv = scipy.stats.lognorm(0.23, 0, 70.8)
import matplotlib.pyplot as pyplot xs = numpy.linspace(20, 200, 100) ys = rv.cdf(xs) thinkplot.Cdf(cdf) pyplot.plot(xs, ys)
[<matplotlib.lines.Line2D at 0x7f6a0b53e150>]
{"metadata":{},"output_type":"display_data","png":"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\n","text":["<matplotlib.figure.Figure at 0x7f6a0adc0210>"]}