Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import random
- import matplotlib as pl
- import pylab
- from pandas import DataFrame
- from ggplot import *
- def flipTrials(minExp, maxExp, numTrials):
- """Assumes minExp and maxExp positive integers; minExp < maxExp
- Plots results of 2**minExp to 2**maxExp coin flips"""
- cols = ['x', 'ratio_means', 'ratio_stdvs', 'ratio_coeffvar',
- 'diffs_means', 'diffs_stdvs', 'diffs_coeffvar']
- df = DataFrame(index=range(minExp, maxExp + 1), columns=cols)
- for i in df.index:
- numFlips = 2**i
- numHeads = np.random.randint(0, 2, [numTrials, numFlips]).sum(1)
- numTails = np.ones(numTrials)*numFlips - numHeads
- ratio = numHeads / numTails
- diffs = abs(numHeads - numTails)
- df.x[i] = numFlips
- df.ratio_means[i] = ratio.mean()
- df.ratio_stdvs[i] = ratio.std()
- if df.ratio_means[i] > 0:
- df.ratio_coeffvar[i] = df.ratio_stdvs[i] / df.ratio_means[i]
- df.diffs_means[i] = diffs.mean()
- df.diffs_stdvs[i] = diffs.std()
- if df.diffs_means[i] > 0:
- df.diffs_coeffvar[i] = df.diffs_stdvs[i] / df.diffs_means[i]
- # for faceting create a dataframe with all columns stacked and indexed by colname
- dfm = pd.melt(df[['x', 'ratio_means', 'ratio_stdvs', 'diffs_means', 'diffs_stdvs',
- 'ratio_coeffvar', 'diffs_coeffvar']], id_vars='x')
- print ( ggplot(dfm, aes(x='x', y='value', colour='variable'))
- +geom_line() + scale_x_log() + facet_wrap('variable') )
- return df, dfm
- random.seed(0)
- df, dfm = flipTrials(2, 10, 2)
- print 'Test:\n ', df[-5:]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement