# Lambda School Data Science Module 132
## Sampling, Confidence Intervals, and Hypothesis Testing

## Prepare - examine other available hypothesis tests

If you had to pick a single hypothesis test in your toolbox, t-test would probably be the best choice - but the good news is you don't have to pick just one! Here's some of the others to be aware of:

```
import numpy as np
from scipy.stats import chisquare  # One-way chi square test

# Chi square can take any crosstab/table and test the independence of rows/cols
# The null hypothesis is that the rows/cols are independent -> low chi square
# The alternative is that there is a dependence -> high chi square
# Be aware! Chi square does *not* tell you direction/causation

ind_obs = np.array([[1, 1], [2, 2]]).T
print(ind_obs)
print(chisquare(ind_obs, axis=None))

dep_obs = np.array([[16, 18, 16, 14, 12, 12], [32, 24, 16, 28, 20, 24]]).T
print(dep_obs)
print(chisquare(dep_obs, axis=None))
```

    [[1 2]
     [1 2]]
    Power_divergenceResult(statistic=0.6666666666666666, pvalue=0.8810148425137847)
    [[16 32]
     [18 24]
     [16 16]
     [14 28]
     [12 20]
     [12 24]]
    Power_divergenceResult(statistic=23.31034482758621, pvalue=0.015975692534127565)

```
# Distribution tests:
# We often assume that something is normal, but it can be important to *check*

# For example, later on with predictive modeling, a typical assumption is that
# residuals (prediction errors) are normal - checking is a good diagnostic

from scipy.stats import normaltest
# Poisson models arrival times and is related to the binomial (coinflip)
sample = np.random.poisson(5, 1000)
print(normaltest(sample))  # Pretty clearly not normal
```

    NormaltestResult(statistic=47.790578922616376, pvalue=4.191868434499571e-11)

```
# Kruskal-Wallis H-test - compare the median rank between 2+ groups
# Can be applied to ranking decisions/outcomes/recommendations
# The underlying math comes from chi-square distribution, and is best for n>5
from scipy.stats import kruskal

x1 = [1, 3, 5, 7, 9]
y1 = [2, 4, 6, 8, 10]
print(kruskal(x1, y1))  # x1 is a little better, but not "significantly" so

x2 = [1, 1, 1]
y2 = [2, 2, 2]
z = [2, 2]  # Hey, a third group, and of different size!
print(kruskal(x2, y2, z))  # x clearly dominates
```

    KruskalResult(statistic=0.2727272727272734, pvalue=0.6015081344405895)
    KruskalResult(statistic=7.0, pvalue=0.0301973834223185)

And there's many more! `scipy.stats` is fairly comprehensive, though there are even more available if you delve into the extended world of statistics packages. As tests get increasingly obscure and specialized, the importance of knowing them by heart becomes small - but being able to look them up and figure them out when they *are* relevant is still important.

## T-test Assumptions

```
from scipy.stats import ttest_ind

?ttest_ind
```

<https://statistics.laerd.com/statistical-guides/independent-t-test-statistical-guide.php>

- Independence of means

Are the means of our voting data independent (do not affect the outcome of one another)?

The best way to increase thel likelihood of our means being independent is to randomly sample (which we did not do).

- "Homogeneity" of Variance?

Is the magnitude of the variance between the two roughly the same?

I think we're OK on this one for the voting data, although it probably could be better, one party was larger than the other.

If we suspect this to be a problem then we can use Welch's T-test

- "Dependent Variable" (sample means) are Distributed Normally

<https://stats.stackexchange.com/questions/9573/t-test-for-non-normal-when-n50>

Lots of statistical tests depend on normal distributions. We can test for normality using Scipy as was shown above.

This assumption is often assumed even if the assumption is a weak one. If you strongly suspect that things are not normally distributed, you can transform your data to get it looking more normal and then run your test. This problem typically goes away for large sample sizes (yay Central Limit Theorem) and is often why you don't hear it brought up. People declare the assumption to be satisfied either way.

## Central Limit Theorem

```
np.random.binomial(n=1, p=.5, size=30)
```

    array([1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
           0, 1, 1, 1, 0, 0, 1, 1])

```
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

sample_means = []
n = 3000
for x in range(0,n):
  coinflips = np.random.binomial(n=1, p=.5, size=30)
  one_sample = coinflips
  sample_means.append(coinflips.mean())

print(len(sample_means))
print(sample_means)
```

    3000
    [0.3333333333333333, 0.4, 0.3333333333333333, 0.43333333333333335, 0.4666666666666667, 0.43333333333333335, 0.5666666666666667, 0.5333333333333333, 0.5333333333333333, 0.4666666666666667, 0.5, 0.4666666666666667, 0.4666666666666667, 0.4666666666666667, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.43333333333333335, 0.6, 0.4, 0.4, 0.5666666666666667, 0.43333333333333335, 0.6, 0.6666666666666666, 0.5333333333333333, 0.36666666666666664, 0.5, 0.5666666666666667, 0.36666666666666664, 0.5666666666666667, 0.43333333333333335, 0.5333333333333333, 0.5, 0.36666666666666664, 0.5333333333333333, 0.7333333333333333, 0.5333333333333333, 0.43333333333333335, 0.6666666666666666, 0.4666666666666667, 0.26666666666666666, 0.43333333333333335, 0.4, 0.4, 0.5666666666666667, 0.5, 0.43333333333333335, 0.3333333333333333, 0.5333333333333333, 0.4666666666666667, 0.6666666666666666, 0.5, 0.4666666666666667, 0.5, 0.5333333333333333, 0.5666666666666667, 0.5666666666666667, 0.5, 0.5333333333333333, 0.5666666666666667, 0.5, 0.5333333333333333, 0.36666666666666664, 0.5333333333333333, 0.4, 0.5333333333333333, 0.4666666666666667, 0.5, 0.6666666666666666, 0.6666666666666666, 0.5, 0.5666666666666667, 0.6333333333333333, 0.5, 0.6, 0.5333333333333333, 0.5, 0.5333333333333333, 0.4, 0.5666666666666667, 0.7, 0.36666666666666664, 0.4666666666666667, 0.5333333333333333, 0.5, 0.5333333333333333, 0.36666666666666664, 0.6666666666666666, 0.36666666666666664, 0.5, 0.5333333333333333, 0.5333333333333333, 0.3333333333333333, 0.43333333333333335, 0.5, 0.6333333333333333, 0.4, 0.6, 0.5333333333333333, 0.6333333333333333, 0.5666666666666667, 0.4, 0.3333333333333333, 0.3333333333333333, 0.43333333333333335, 0.43333333333333335, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.5666666666666667, 0.5333333333333333, 0.5333333333333333, 0.6333333333333333, 0.6666666666666666, 0.43333333333333335, 0.5666666666666667, 0.5333333333333333, 0.6, 0.4666666666666667, 0.36666666666666664, 0.6, 0.5, 0.5, 0.3, 0.5, 0.4, 0.5333333333333333, 0.5333333333333333, 0.4, 0.6333333333333333, 0.4666666666666667, 0.36666666666666664, 0.43333333333333335, 0.4, 0.6, 0.5333333333333333, 0.5, 0.4666666666666667, 0.3333333333333333, 0.36666666666666664, 0.6666666666666666, 0.3333333333333333, 0.5666666666666667, 0.5, 0.3333333333333333, 0.5333333333333333, 0.6, 0.4666666666666667, 0.5666666666666667, 0.6, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.4666666666666667, 0.6333333333333333, 0.5, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.5333333333333333, 0.43333333333333335, 0.6, 0.4666666666666667, 0.5666666666666667, 0.6, 0.6333333333333333, 0.5333333333333333, 0.5666666666666667, 0.6333333333333333, 0.5, 0.4666666666666667, 0.5666666666666667, 0.36666666666666664, 0.36666666666666664, 0.4, 0.6333333333333333, 0.5, 0.43333333333333335, 0.36666666666666664, 0.3333333333333333, 0.5, 0.5333333333333333, 0.5333333333333333, 0.5333333333333333, 0.4666666666666667, 0.4666666666666667, 0.5333333333333333, 0.6666666666666666, 0.43333333333333335, 0.4666666666666667, 0.4666666666666667, 0.7, 0.43333333333333335, 0.5666666666666667, 0.5333333333333333, 0.4, 0.43333333333333335, 0.43333333333333335, 0.5333333333333333, 0.4666666666666667, 0.5666666666666667, 0.5333333333333333, 0.5333333333333333, 0.6333333333333333, 0.4, 0.43333333333333335, 0.43333333333333335, 0.5666666666666667, 0.4666666666666667, 0.5666666666666667, 0.43333333333333335, 0.5666666666666667, 0.6, 0.23333333333333334, 0.36666666666666664, 0.4, 0.5666666666666667, 0.43333333333333335, 0.4666666666666667, 0.6, 0.5, 0.4666666666666667, 0.3, 0.5, 0.6, 0.4666666666666667, 0.4, 0.6, 0.6, 0.5, 0.5, 0.5333333333333333, 0.43333333333333335, 0.4666666666666667, 0.5333333333333333, 0.43333333333333335, 0.36666666666666664, 0.4, 0.4, 0.36666666666666664, 0.43333333333333335, 0.5, 0.6, 0.6666666666666666, 0.5333333333333333, 0.5, 0.3333333333333333, 0.5333333333333333, 0.5333333333333333, 0.4666666666666667, 0.4666666666666667, 0.6333333333333333, 0.6333333333333333, 0.4, 0.43333333333333335, 0.5, 0.5, 0.5333333333333333, 0.5333333333333333, 0.43333333333333335, 0.3333333333333333, 0.43333333333333335, 0.6333333333333333, 0.5333333333333333, 0.43333333333333335, 0.4666666666666667, 0.4, 0.6333333333333333, 0.5, 0.4, 0.6333333333333333, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.5, 0.43333333333333335, 0.7333333333333333, 0.4666666666666667, 0.43333333333333335, 0.4, 0.36666666666666664, 0.36666666666666664, 0.5, 0.6333333333333333, 0.7, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.6333333333333333, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.5666666666666667, 0.5333333333333333, 0.6, 0.5, 0.43333333333333335, 0.5333333333333333, 0.4, 0.6, 0.5, 0.4, 0.4666666666666667, 0.7, 0.5333333333333333, 0.6666666666666666, 0.43333333333333335, 0.5, 0.5333333333333333, 0.5666666666666667, 0.3333333333333333, 0.5333333333333333, 0.5666666666666667, 0.36666666666666664, 0.4666666666666667, 0.4, 0.6666666666666666, 0.43333333333333335, 0.5333333333333333, 0.4666666666666667, 0.36666666666666664, 0.6333333333333333, 0.6, 0.6, 0.5666666666666667, 0.36666666666666664, 0.5666666666666667, 0.3333333333333333, 0.36666666666666664, 0.7, 0.6, 0.3, 0.36666666666666664, 0.4, 0.5333333333333333, 0.5, 0.6, 0.26666666666666666, 0.43333333333333335, 0.4666666666666667, 0.3333333333333333, 0.5333333333333333, 0.4, 0.4666666666666667, 0.36666666666666664, 0.5666666666666667, 0.5666666666666667, 0.4666666666666667, 0.5, 0.43333333333333335, 0.4666666666666667, 0.4666666666666667, 0.4666666666666667, 0.5666666666666667, 0.6333333333333333, 0.4666666666666667, 0.6, 0.43333333333333335, 0.4666666666666667, 0.5666666666666667, 0.5, 0.4, 0.4666666666666667, 0.7, 0.5666666666666667, 0.5, 0.5666666666666667, 0.43333333333333335, 0.5, 0.6, 0.6666666666666666, 0.43333333333333335, 0.4666666666666667, 0.5, 0.5666666666666667, 0.6666666666666666, 0.6333333333333333, 0.43333333333333335, 0.5666666666666667, 0.4666666666666667, 0.5333333333333333, 0.5666666666666667, 0.5, 0.4666666666666667, 0.36666666666666664, 0.5, 0.43333333333333335, 0.5666666666666667, 0.6, 0.6, 0.5, 0.7, 0.6, 0.4666666666666667, 0.3, 0.36666666666666664, 0.5666666666666667, 0.5, 0.7333333333333333, 0.5666666666666667, 0.5, 0.6333333333333333, 0.7333333333333333, 0.5333333333333333, 0.5, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.3333333333333333, 0.43333333333333335, 0.5, 0.5333333333333333, 0.6333333333333333, 0.5666666666666667, 0.6, 0.43333333333333335, 0.4, 0.4666666666666667, 0.4666666666666667, 0.6666666666666666, 0.8666666666666667, 0.4, 0.5333333333333333, 0.5, 0.5333333333333333, 0.4666666666666667, 0.5, 0.5333333333333333, 0.43333333333333335, 0.5, 0.6333333333333333, 0.5, 0.5666666666666667, 0.5, 0.5666666666666667, 0.4666666666666667, 0.6, 0.5666666666666667, 0.5666666666666667, 0.36666666666666664, 0.6, 0.3333333333333333, 0.5666666666666667, 0.5, 0.5, 0.6, 0.4666666666666667, 0.43333333333333335, 0.6, 0.4666666666666667, 0.5, 0.4, 0.4666666666666667, 0.5, 0.5333333333333333, 0.4666666666666667, 0.4, 0.5, 0.4666666666666667, 0.4, 0.36666666666666664, 0.6666666666666666, 0.5666666666666667, 0.4, 0.6666666666666666, 0.5333333333333333, 0.6, 0.5, 0.5, 0.4666666666666667, 0.4666666666666667, 0.43333333333333335, 0.6, 0.5666666666666667, 0.6, 0.43333333333333335, 0.6333333333333333, 0.5, 0.6, 0.4, 0.5666666666666667, 0.43333333333333335, 0.4, 0.5666666666666667, 0.5, 0.6, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.4666666666666667, 0.4, 0.4, 0.4, 0.4666666666666667, 0.5666666666666667, 0.6333333333333333, 0.36666666666666664, 0.4666666666666667, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.5666666666666667, 0.43333333333333335, 0.4, 0.4666666666666667, 0.4, 0.5333333333333333, 0.5666666666666667, 0.5666666666666667, 0.4666666666666667, 0.36666666666666664, 0.5, 0.43333333333333335, 0.5333333333333333, 0.5666666666666667, 0.43333333333333335, 0.36666666666666664, 0.5, 0.4666666666666667, 0.3333333333333333, 0.5, 0.4666666666666667, 0.5666666666666667, 0.5666666666666667, 0.5, 0.43333333333333335, 0.5, 0.4666666666666667, 0.6333333333333333, 0.5333333333333333, 0.4666666666666667, 0.43333333333333335, 0.6666666666666666, 0.5, 0.6333333333333333, 0.5333333333333333, 0.5666666666666667, 0.4, 0.5, 0.4, 0.43333333333333335, 0.4, 0.5333333333333333, 0.36666666666666664, 0.43333333333333335, 0.5, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.4666666666666667, 0.5, 0.4, 0.4666666666666667, 0.5, 0.5666666666666667, 0.5, 0.4, 0.36666666666666664, 0.5333333333333333, 0.5, 0.6333333333333333, 0.5, 0.3, 0.3333333333333333, 0.7333333333333333, 0.43333333333333335, 0.5333333333333333, 0.5, 0.6666666666666666, 0.5, 0.5666666666666667, 0.5333333333333333, 0.5, 0.3333333333333333, 0.4, 0.5333333333333333, 0.5333333333333333, 0.6333333333333333, 0.5, 0.6, 0.43333333333333335, 0.5, 0.5, 0.4, 0.3, 0.5333333333333333, 0.4, 0.6, 0.36666666666666664, 0.5333333333333333, 0.5, 0.3333333333333333, 0.43333333333333335, 0.36666666666666664, 0.5, 0.43333333333333335, 0.6, 0.5, 0.5666666666666667, 0.7333333333333333, 0.4, 0.5666666666666667, 0.5666666666666667, 0.5666666666666667, 0.6333333333333333, 0.5666666666666667, 0.5, 0.4666666666666667, 0.43333333333333335, 0.43333333333333335, 0.6, 0.4666666666666667, 0.6, 0.6333333333333333, 0.6333333333333333, 0.5, 0.5, 0.8, 0.5333333333333333, 0.36666666666666664, 0.5333333333333333, 0.5666666666666667, 0.43333333333333335, 0.4, 0.6, 0.43333333333333335, 0.5, 0.5333333333333333, 0.43333333333333335, 0.5666666666666667, 0.36666666666666664, 0.6666666666666666, 0.5, 0.6333333333333333, 0.5333333333333333, 0.26666666666666666, 0.5333333333333333, 0.5333333333333333, 0.5666666666666667, 0.3333333333333333, 0.4, 0.4666666666666667, 0.6, 0.7, 0.36666666666666664, 0.3333333333333333, 0.4666666666666667, 0.4666666666666667, 0.5333333333333333, 0.3, 0.5, 0.4666666666666667, 0.3333333333333333, 0.7, 0.4666666666666667, 0.4, 0.5666666666666667, 0.43333333333333335, 0.23333333333333334, 0.3333333333333333, 0.5666666666666667, 0.23333333333333334, 0.5, 0.5666666666666667, 0.6666666666666666, 0.43333333333333335, 0.4666666666666667, 0.4666666666666667, 0.5333333333333333, 0.43333333333333335, 0.4666666666666667, 0.6, 0.6, 0.36666666666666664, 0.3, 0.5, 0.4, 0.6, 0.5666666666666667, 0.6333333333333333, 0.4, 0.36666666666666664, 0.36666666666666664, 0.43333333333333335, 0.5666666666666667, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.5666666666666667, 0.4666666666666667, 0.7, 0.4666666666666667, 0.6, 0.6, 0.4666666666666667, 0.5333333333333333, 0.6, 0.6333333333333333, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.7, 0.5, 0.5, 0.5333333333333333, 0.36666666666666664, 0.4666666666666667, 0.6666666666666666, 0.5, 0.43333333333333335, 0.43333333333333335, 0.5333333333333333, 0.26666666666666666, 0.4666666666666667, 0.4, 0.4, 0.5, 0.5666666666666667, 0.36666666666666664, 0.5666666666666667, 0.43333333333333335, 0.4666666666666667, 0.6333333333333333, 0.5, 0.8, 0.4666666666666667, 0.5, 0.4666666666666667, 0.3333333333333333, 0.4666666666666667, 0.5666666666666667, 0.5666666666666667, 0.3, 0.5333333333333333, 0.5, 0.5333333333333333, 0.5, 0.6, 0.6333333333333333, 0.5333333333333333, 0.6333333333333333, 0.4, 0.5, 0.5, 0.6666666666666666, 0.4666666666666667, 0.36666666666666664, 0.4, 0.5, 0.43333333333333335, 0.5666666666666667, 0.43333333333333335, 0.5, 0.3, 0.4666666666666667, 0.5333333333333333, 0.6333333333333333, 0.4666666666666667, 0.7, 0.4666666666666667, 0.6, 0.5333333333333333, 0.43333333333333335, 0.5666666666666667, 0.6333333333333333, 0.5333333333333333, 0.5666666666666667, 0.5, 0.4, 0.5, 0.7666666666666667, 0.6333333333333333, 0.4666666666666667, 0.4666666666666667, 0.5333333333333333, 0.6333333333333333, 0.4666666666666667, 0.36666666666666664, 0.5666666666666667, 0.4666666666666667, 0.5, 0.6, 0.4, 0.6, 0.43333333333333335, 0.36666666666666664, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.5, 0.5666666666666667, 0.6666666666666666, 0.5333333333333333, 0.43333333333333335, 0.5666666666666667, 0.4666666666666667, 0.5, 0.6666666666666666, 0.36666666666666664, 0.43333333333333335, 0.5333333333333333, 0.3333333333333333, 0.43333333333333335, 0.5333333333333333, 0.36666666666666664, 0.6666666666666666, 0.5333333333333333, 0.43333333333333335, 0.4, 0.6666666666666666, 0.5333333333333333, 0.4666666666666667, 0.43333333333333335, 0.3333333333333333, 0.36666666666666664, 0.6666666666666666, 0.5, 0.5333333333333333, 0.5333333333333333, 0.5, 0.7, 0.43333333333333335, 0.43333333333333335, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.43333333333333335, 0.5666666666666667, 0.4, 0.5, 0.4, 0.36666666666666664, 0.6, 0.5666666666666667, 0.6666666666666666, 0.43333333333333335, 0.5666666666666667, 0.5, 0.43333333333333335, 0.3333333333333333, 0.5333333333333333, 0.3333333333333333, 0.5666666666666667, 0.6, 0.4, 0.6, 0.6, 0.5, 0.4666666666666667, 0.3333333333333333, 0.43333333333333335, 0.6, 0.4666666666666667, 0.4, 0.6, 0.3, 0.5666666666666667, 0.5666666666666667, 0.5333333333333333, 0.6666666666666666, 0.5, 0.5333333333333333, 0.5333333333333333, 0.43333333333333335, 0.4666666666666667, 0.4666666666666667, 0.6333333333333333, 0.5, 0.3333333333333333, 0.5333333333333333, 0.5, 0.43333333333333335, 0.5666666666666667, 0.43333333333333335, 0.4, 0.4666666666666667, 0.5666666666666667, 0.5666666666666667, 0.5, 0.6, 0.36666666666666664, 0.4666666666666667, 0.6333333333333333, 0.5666666666666667, 0.6333333333333333, 0.43333333333333335, 0.4666666666666667, 0.4, 0.7666666666666667, 0.6333333333333333, 0.4, 0.5666666666666667, 0.4, 0.4, 0.6, 0.6, 0.4, 0.43333333333333335, 0.4, 0.6, 0.4, 0.43333333333333335, 0.4666666666666667, 0.3, 0.5333333333333333, 0.4666666666666667, 0.6, 0.43333333333333335, 0.6, 0.5, 0.4666666666666667, 0.5666666666666667, 0.36666666666666664, 0.6, 0.43333333333333335, 0.5333333333333333, 0.3, 0.6666666666666666, 0.5, 0.6666666666666666, 0.43333333333333335, 0.6, 0.5333333333333333, 0.43333333333333335, 0.6, 0.43333333333333335, 0.5333333333333333, 0.43333333333333335, 0.4, 0.43333333333333335, 0.43333333333333335, 0.4666666666666667, 0.5333333333333333, 0.5333333333333333, 0.6, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.5333333333333333, 0.5666666666666667, 0.5333333333333333, 0.4666666666666667, 0.5, 0.43333333333333335, 0.43333333333333335, 0.5, 0.6, 0.5, 0.43333333333333335, 0.6, 0.6, 0.4666666666666667, 0.5666666666666667, 0.5666666666666667, 0.4666666666666667, 0.36666666666666664, 0.4, 0.6, 0.43333333333333335, 0.5666666666666667, 0.4666666666666667, 0.5, 0.5, 0.4, 0.5666666666666667, 0.4, 0.5, 0.5, 0.5666666666666667, 0.6333333333333333, 0.5333333333333333, 0.43333333333333335, 0.6, 0.36666666666666664, 0.6, 0.43333333333333335, 0.3333333333333333, 0.4666666666666667, 0.5333333333333333, 0.5, 0.5666666666666667, 0.6, 0.5666666666666667, 0.5333333333333333, 0.4, 0.5, 0.43333333333333335, 0.5666666666666667, 0.43333333333333335, 0.5666666666666667, 0.5666666666666667, 0.5333333333333333, 0.36666666666666664, 0.5333333333333333, 0.4, 0.5, 0.4666666666666667, 0.36666666666666664, 0.43333333333333335, 0.5, 0.5333333333333333, 0.5666666666666667, 0.5666666666666667, 0.5, 0.5666666666666667, 0.3, 0.7, 0.5666666666666667, 0.36666666666666664, 0.5666666666666667, 0.4, 0.5, 0.5666666666666667, 0.5666666666666667, 0.5333333333333333, 0.5, 0.5666666666666667, 0.6, 0.36666666666666664, 0.5666666666666667, 0.43333333333333335, 0.5, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.5666666666666667, 0.5, 0.5, 0.4, 0.4666666666666667, 0.4666666666666667, 0.4, 0.5, 0.5, 0.4666666666666667, 0.43333333333333335, 0.43333333333333335, 0.6333333333333333, 0.6666666666666666, 0.5666666666666667, 0.5, 0.5, 0.5333333333333333, 0.5, 0.4666666666666667, 0.6, 0.6, 0.5, 0.6, 0.5, 0.36666666666666664, 0.6333333333333333, 0.4, 0.43333333333333335, 0.6, 0.3333333333333333, 0.5333333333333333, 0.4666666666666667, 0.6, 0.4666666666666667, 0.3, 0.6, 0.4666666666666667, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.4, 0.6, 0.4, 0.5, 0.5333333333333333, 0.7, 0.6333333333333333, 0.4666666666666667, 0.5333333333333333, 0.5, 0.6, 0.6333333333333333, 0.6, 0.6, 0.43333333333333335, 0.5333333333333333, 0.4666666666666667, 0.4666666666666667, 0.7333333333333333, 0.5333333333333333, 0.3333333333333333, 0.5333333333333333, 0.4666666666666667, 0.6, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.3333333333333333, 0.6666666666666666, 0.5333333333333333, 0.7, 0.6, 0.6, 0.5, 0.5333333333333333, 0.4666666666666667, 0.4, 0.3333333333333333, 0.4666666666666667, 0.4666666666666667, 0.5, 0.5333333333333333, 0.6, 0.6, 0.5333333333333333, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.43333333333333335, 0.5333333333333333, 0.4666666666666667, 0.5, 0.4666666666666667, 0.43333333333333335, 0.4, 0.6, 0.5333333333333333, 0.6, 0.36666666666666664, 0.43333333333333335, 0.4, 0.5333333333333333, 0.5, 0.4666666666666667, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.5, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.43333333333333335, 0.6, 0.5333333333333333, 0.43333333333333335, 0.4, 0.3333333333333333, 0.4666666666666667, 0.6, 0.5666666666666667, 0.36666666666666664, 0.5, 0.5, 0.6666666666666666, 0.43333333333333335, 0.6, 0.5, 0.3333333333333333, 0.5, 0.5333333333333333, 0.43333333333333335, 0.6333333333333333, 0.5, 0.5333333333333333, 0.5, 0.43333333333333335, 0.5333333333333333, 0.6, 0.5333333333333333, 0.43333333333333335, 0.6, 0.4666666666666667, 0.4666666666666667, 0.36666666666666664, 0.36666666666666664, 0.6333333333333333, 0.5, 0.43333333333333335, 0.43333333333333335, 0.5333333333333333, 0.4666666666666667, 0.43333333333333335, 0.6333333333333333, 0.5, 0.4666666666666667, 0.5333333333333333, 0.4666666666666667, 0.6, 0.5333333333333333, 0.36666666666666664, 0.5333333333333333, 0.3333333333333333, 0.4666666666666667, 0.5333333333333333, 0.36666666666666664, 0.4666666666666667, 0.6, 0.6333333333333333, 0.5, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.6, 0.5666666666666667, 0.5, 0.6, 0.4666666666666667, 0.36666666666666664, 0.6, 0.5333333333333333, 0.3333333333333333, 0.5, 0.6, 0.5333333333333333, 0.6666666666666666, 0.5, 0.6333333333333333, 0.4666666666666667, 0.6, 0.5666666666666667, 0.43333333333333335, 0.5666666666666667, 0.5666666666666667, 0.6333333333333333, 0.6, 0.6, 0.43333333333333335, 0.7333333333333333, 0.6, 0.6, 0.5, 0.36666666666666664, 0.5666666666666667, 0.5666666666666667, 0.6333333333333333, 0.3, 0.6, 0.5, 0.43333333333333335, 0.6, 0.5333333333333333, 0.4666666666666667, 0.6333333333333333, 0.4666666666666667, 0.4, 0.3, 0.6333333333333333, 0.36666666666666664, 0.5, 0.4666666666666667, 0.6333333333333333, 0.4666666666666667, 0.3, 0.43333333333333335, 0.4, 0.5333333333333333, 0.4666666666666667, 0.5666666666666667, 0.4, 0.43333333333333335, 0.4, 0.43333333333333335, 0.43333333333333335, 0.5666666666666667, 0.5, 0.36666666666666664, 0.4666666666666667, 0.5, 0.5, 0.4666666666666667, 0.5333333333333333, 0.6, 0.6333333333333333, 0.43333333333333335, 0.5666666666666667, 0.7, 0.5333333333333333, 0.3333333333333333, 0.3333333333333333, 0.5666666666666667, 0.43333333333333335, 0.36666666666666664, 0.4666666666666667, 0.43333333333333335, 0.5, 0.5, 0.4666666666666667, 0.4666666666666667, 0.5666666666666667, 0.5666666666666667, 0.6666666666666666, 0.6, 0.3333333333333333, 0.43333333333333335, 0.3333333333333333, 0.4, 0.6, 0.5666666666666667, 0.5666666666666667, 0.36666666666666664, 0.4666666666666667, 0.6, 0.43333333333333335, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.5333333333333333, 0.5666666666666667, 0.6, 0.5, 0.5, 0.5, 0.6, 0.36666666666666664, 0.36666666666666664, 0.5333333333333333, 0.5666666666666667, 0.5, 0.43333333333333335, 0.43333333333333335, 0.5, 0.4666666666666667, 0.4, 0.5333333333333333, 0.6333333333333333, 0.4666666666666667, 0.5333333333333333, 0.5333333333333333, 0.5, 0.5333333333333333, 0.3, 0.7, 0.5, 0.4, 0.5, 0.5333333333333333, 0.4666666666666667, 0.4, 0.5333333333333333, 0.5333333333333333, 0.5333333333333333, 0.36666666666666664, 0.3, 0.6, 0.5666666666666667, 0.5, 0.4, 0.5, 0.5, 0.5, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.6, 0.5, 0.43333333333333335, 0.3, 0.6666666666666666, 0.43333333333333335, 0.4, 0.5333333333333333, 0.5333333333333333, 0.4, 0.43333333333333335, 0.4666666666666667, 0.26666666666666666, 0.6, 0.5333333333333333, 0.4, 0.4666666666666667, 0.6333333333333333, 0.43333333333333335, 0.5333333333333333, 0.6333333333333333, 0.5333333333333333, 0.5666666666666667, 0.4666666666666667, 0.4666666666666667, 0.6, 0.3333333333333333, 0.5, 0.5333333333333333, 0.4666666666666667, 0.5, 0.6333333333333333, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.5333333333333333, 0.5, 0.4666666666666667, 0.5, 0.7333333333333333, 0.5, 0.4, 0.6, 0.3333333333333333, 0.6, 0.5, 0.3333333333333333, 0.5333333333333333, 0.5666666666666667, 0.43333333333333335, 0.5333333333333333, 0.4666666666666667, 0.36666666666666664, 0.5333333333333333, 0.5, 0.43333333333333335, 0.4666666666666667, 0.5, 0.5666666666666667, 0.6, 0.4666666666666667, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.4666666666666667, 0.36666666666666664, 0.5666666666666667, 0.4666666666666667, 0.6, 0.4666666666666667, 0.5666666666666667, 0.5, 0.36666666666666664, 0.36666666666666664, 0.5, 0.5333333333333333, 0.6, 0.5333333333333333, 0.4, 0.5, 0.6333333333333333, 0.43333333333333335, 0.4666666666666667, 0.5333333333333333, 0.5666666666666667, 0.6666666666666666, 0.5333333333333333, 0.3333333333333333, 0.5333333333333333, 0.4666666666666667, 0.5, 0.5333333333333333, 0.5666666666666667, 0.5, 0.5, 0.4, 0.5, 0.43333333333333335, 0.7, 0.5, 0.5333333333333333, 0.4, 0.43333333333333335, 0.4, 0.5, 0.5333333333333333, 0.5666666666666667, 0.5, 0.7666666666666667, 0.4666666666666667, 0.6666666666666666, 0.6666666666666666, 0.5, 0.5, 0.6, 0.3333333333333333, 0.5, 0.6666666666666666, 0.6333333333333333, 0.6, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.3, 0.4666666666666667, 0.4666666666666667, 0.4, 0.4, 0.4666666666666667, 0.5333333333333333, 0.5, 0.6, 0.5, 0.4666666666666667, 0.4666666666666667, 0.4, 0.5666666666666667, 0.4, 0.6666666666666666, 0.5, 0.5, 0.5666666666666667, 0.6666666666666666, 0.6, 0.5666666666666667, 0.4666666666666667, 0.6, 0.43333333333333335, 0.5, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.6, 0.5666666666666667, 0.6333333333333333, 0.5333333333333333, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.3333333333333333, 0.5, 0.3333333333333333, 0.4666666666666667, 0.4666666666666667, 0.6, 0.43333333333333335, 0.5, 0.7333333333333333, 0.36666666666666664, 0.5, 0.6, 0.4666666666666667, 0.5, 0.6666666666666666, 0.5333333333333333, 0.5, 0.6, 0.6333333333333333, 0.4666666666666667, 0.7, 0.3333333333333333, 0.4, 0.43333333333333335, 0.43333333333333335, 0.5, 0.5666666666666667, 0.5333333333333333, 0.3333333333333333, 0.4666666666666667, 0.6333333333333333, 0.3333333333333333, 0.5666666666666667, 0.5333333333333333, 0.6, 0.4, 0.4666666666666667, 0.5, 0.6333333333333333, 0.43333333333333335, 0.5333333333333333, 0.6, 0.3333333333333333, 0.3, 0.36666666666666664, 0.4666666666666667, 0.43333333333333335, 0.6333333333333333, 0.5, 0.5, 0.5, 0.6333333333333333, 0.4666666666666667, 0.5, 0.5, 0.5, 0.43333333333333335, 0.5, 0.6333333333333333, 0.5, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.43333333333333335, 0.5, 0.4, 0.4, 0.36666666666666664, 0.43333333333333335, 0.6333333333333333, 0.5, 0.5666666666666667, 0.6333333333333333, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.5, 0.4666666666666667, 0.43333333333333335, 0.5333333333333333, 0.6333333333333333, 0.4666666666666667, 0.5333333333333333, 0.3, 0.5, 0.5666666666666667, 0.5, 0.5, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.6333333333333333, 0.5666666666666667, 0.4666666666666667, 0.5333333333333333, 0.5333333333333333, 0.5666666666666667, 0.5, 0.6, 0.36666666666666664, 0.6, 0.26666666666666666, 0.4666666666666667, 0.5, 0.4666666666666667, 0.7333333333333333, 0.5333333333333333, 0.43333333333333335, 0.5, 0.4666666666666667, 0.4666666666666667, 0.5333333333333333, 0.7, 0.6, 0.43333333333333335, 0.43333333333333335, 0.5666666666666667, 0.5333333333333333, 0.5333333333333333, 0.43333333333333335, 0.5666666666666667, 0.36666666666666664, 0.5, 0.6333333333333333, 0.6333333333333333, 0.5666666666666667, 0.5, 0.5, 0.43333333333333335, 0.36666666666666664, 0.5, 0.5666666666666667, 0.5666666666666667, 0.6, 0.5333333333333333, 0.5333333333333333, 0.43333333333333335, 0.4666666666666667, 0.5, 0.4, 0.5666666666666667, 0.4666666666666667, 0.43333333333333335, 0.6333333333333333, 0.5666666666666667, 0.4666666666666667, 0.7, 0.43333333333333335, 0.43333333333333335, 0.43333333333333335, 0.5666666666666667, 0.6, 0.6, 0.5333333333333333, 0.6, 0.4666666666666667, 0.6, 0.4, 0.4666666666666667, 0.5333333333333333, 0.4666666666666667, 0.6666666666666666, 0.5, 0.6333333333333333, 0.4, 0.43333333333333335, 0.4666666666666667, 0.5, 0.6333333333333333, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.43333333333333335, 0.5, 0.5333333333333333, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.4666666666666667, 0.5333333333333333, 0.6333333333333333, 0.5, 0.6, 0.5333333333333333, 0.5333333333333333, 0.6, 0.5666666666666667, 0.6333333333333333, 0.4666666666666667, 0.4, 0.5333333333333333, 0.5666666666666667, 0.6, 0.6, 0.43333333333333335, 0.5, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.5333333333333333, 0.6, 0.5666666666666667, 0.5333333333333333, 0.5333333333333333, 0.6, 0.4, 0.5, 0.6333333333333333, 0.36666666666666664, 0.43333333333333335, 0.5, 0.43333333333333335, 0.6666666666666666, 0.3333333333333333, 0.6333333333333333, 0.5666666666666667, 0.6333333333333333, 0.4666666666666667, 0.4666666666666667, 0.43333333333333335, 0.5333333333333333, 0.5333333333333333, 0.6, 0.43333333333333335, 0.43333333333333335, 0.43333333333333335, 0.4, 0.5333333333333333, 0.5666666666666667, 0.4666666666666667, 0.5, 0.5666666666666667, 0.4666666666666667, 0.26666666666666666, 0.6666666666666666, 0.5333333333333333, 0.5, 0.6666666666666666, 0.5333333333333333, 0.5333333333333333, 0.7, 0.43333333333333335, 0.43333333333333335, 0.36666666666666664, 0.43333333333333335, 0.5666666666666667, 0.5, 0.36666666666666664, 0.43333333333333335, 0.5, 0.5333333333333333, 0.3333333333333333, 0.4, 0.6, 0.5333333333333333, 0.5333333333333333, 0.4666666666666667, 0.4, 0.4, 0.5333333333333333, 0.6, 0.5333333333333333, 0.5666666666666667, 0.5, 0.5666666666666667, 0.5666666666666667, 0.4666666666666667, 0.5, 0.5, 0.5666666666666667, 0.36666666666666664, 0.43333333333333335, 0.4, 0.43333333333333335, 0.4666666666666667, 0.43333333333333335, 0.43333333333333335, 0.5, 0.4666666666666667, 0.4666666666666667, 0.5333333333333333, 0.6333333333333333, 0.5, 0.4666666666666667, 0.7666666666666667, 0.6, 0.5, 0.2, 0.6666666666666666, 0.4, 0.5, 0.5, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.5, 0.3333333333333333, 0.36666666666666664, 0.5333333333333333, 0.5, 0.6333333333333333, 0.43333333333333335, 0.5, 0.6666666666666666, 0.6, 0.4, 0.4, 0.5666666666666667, 0.43333333333333335, 0.6666666666666666, 0.43333333333333335, 0.4666666666666667, 0.4, 0.3, 0.4, 0.5, 0.5666666666666667, 0.6666666666666666, 0.5, 0.5333333333333333, 0.5666666666666667, 0.6666666666666666, 0.4666666666666667, 0.5333333333333333, 0.4, 0.7333333333333333, 0.3, 0.43333333333333335, 0.4, 0.43333333333333335, 0.4, 0.4, 0.6, 0.3333333333333333, 0.43333333333333335, 0.6, 0.6, 0.4, 0.36666666666666664, 0.36666666666666664, 0.5333333333333333, 0.5333333333333333, 0.5, 0.6333333333333333, 0.5666666666666667, 0.4, 0.5333333333333333, 0.5, 0.4666666666666667, 0.5, 0.5, 0.4, 0.3, 0.5, 0.36666666666666664, 0.4666666666666667, 0.4, 0.5, 0.5333333333333333, 0.43333333333333335, 0.6333333333333333, 0.3, 0.26666666666666666, 0.5333333333333333, 0.6, 0.5, 0.7, 0.43333333333333335, 0.4, 0.4666666666666667, 0.6, 0.5, 0.6, 0.5333333333333333, 0.5, 0.6, 0.43333333333333335, 0.4666666666666667, 0.5333333333333333, 0.5, 0.43333333333333335, 0.6, 0.36666666666666664, 0.5333333333333333, 0.4666666666666667, 0.4, 0.5, 0.6, 0.3333333333333333, 0.6, 0.5, 0.4, 0.4666666666666667, 0.6, 0.6333333333333333, 0.36666666666666664, 0.7, 0.4666666666666667, 0.5, 0.4666666666666667, 0.4666666666666667, 0.4666666666666667, 0.4, 0.4, 0.5333333333333333, 0.5333333333333333, 0.36666666666666664, 0.6, 0.5333333333333333, 0.43333333333333335, 0.4666666666666667, 0.36666666666666664, 0.43333333333333335, 0.5, 0.5, 0.5333333333333333, 0.36666666666666664, 0.4666666666666667, 0.43333333333333335, 0.43333333333333335, 0.4666666666666667, 0.4666666666666667, 0.6333333333333333, 0.5666666666666667, 0.4666666666666667, 0.4, 0.6, 0.4666666666666667, 0.5333333333333333, 0.5666666666666667, 0.6, 0.5, 0.5333333333333333, 0.6333333333333333, 0.6333333333333333, 0.4666666666666667, 0.5666666666666667, 0.5333333333333333, 0.5333333333333333, 0.36666666666666664, 0.6333333333333333, 0.4666666666666667, 0.4, 0.36666666666666664, 0.5, 0.6333333333333333, 0.43333333333333335, 0.5, 0.6666666666666666, 0.43333333333333335, 0.43333333333333335, 0.6666666666666666, 0.7, 0.36666666666666664, 0.5333333333333333, 0.6, 0.43333333333333335, 0.5666666666666667, 0.5333333333333333, 0.5666666666666667, 0.4666666666666667, 0.43333333333333335, 0.5333333333333333, 0.5, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.5333333333333333, 0.5, 0.36666666666666664, 0.5, 0.6, 0.6333333333333333, 0.4666666666666667, 0.4666666666666667, 0.5, 0.43333333333333335, 0.4, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.4, 0.5333333333333333, 0.6, 0.6, 0.43333333333333335, 0.4666666666666667, 0.43333333333333335, 0.6, 0.5, 0.5666666666666667, 0.5666666666666667, 0.5, 0.4666666666666667, 0.4666666666666667, 0.43333333333333335, 0.5333333333333333, 0.6333333333333333, 0.6666666666666666, 0.43333333333333335, 0.5333333333333333, 0.4, 0.43333333333333335, 0.4, 0.4, 0.4666666666666667, 0.5, 0.5333333333333333, 0.6, 0.6666666666666666, 0.43333333333333335, 0.5333333333333333, 0.5666666666666667, 0.5666666666666667, 0.26666666666666666, 0.6666666666666666, 0.6, 0.5333333333333333, 0.43333333333333335, 0.6, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.3333333333333333, 0.5, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.43333333333333335, 0.7, 0.4, 0.43333333333333335, 0.5, 0.4, 0.43333333333333335, 0.5333333333333333, 0.5, 0.5, 0.36666666666666664, 0.43333333333333335, 0.4666666666666667, 0.3, 0.5666666666666667, 0.5666666666666667, 0.6, 0.5666666666666667, 0.5, 0.4666666666666667, 0.5, 0.6333333333333333, 0.4, 0.36666666666666664, 0.4, 0.7, 0.43333333333333335, 0.5333333333333333, 0.5666666666666667, 0.36666666666666664, 0.4666666666666667, 0.6, 0.3, 0.43333333333333335, 0.5, 0.5666666666666667, 0.5333333333333333, 0.4, 0.43333333333333335, 0.4, 0.5333333333333333, 0.36666666666666664, 0.6333333333333333, 0.5, 0.7333333333333333, 0.5666666666666667, 0.5, 0.6333333333333333, 0.4666666666666667, 0.5333333333333333, 0.4666666666666667, 0.4666666666666667, 0.36666666666666664, 0.6666666666666666, 0.5333333333333333, 0.6333333333333333, 0.36666666666666664, 0.4666666666666667, 0.4666666666666667, 0.4, 0.4666666666666667, 0.5, 0.5, 0.36666666666666664, 0.6333333333333333, 0.3333333333333333, 0.4, 0.36666666666666664, 0.43333333333333335, 0.5, 0.36666666666666664, 0.5666666666666667, 0.5, 0.6, 0.4666666666666667, 0.5, 0.43333333333333335, 0.43333333333333335, 0.36666666666666664, 0.3, 0.5666666666666667, 0.5666666666666667, 0.4, 0.5333333333333333, 0.4666666666666667, 0.4666666666666667, 0.43333333333333335, 0.6333333333333333, 0.5333333333333333, 0.5666666666666667, 0.5333333333333333, 0.4666666666666667, 0.36666666666666664, 0.6666666666666666, 0.6333333333333333, 0.4666666666666667, 0.6, 0.4666666666666667, 0.5666666666666667, 0.3333333333333333, 0.5, 0.6333333333333333, 0.3333333333333333, 0.4666666666666667, 0.43333333333333335, 0.6, 0.6, 0.6, 0.4, 0.6, 0.5, 0.7, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.5, 0.5, 0.4666666666666667, 0.5333333333333333, 0.3333333333333333, 0.43333333333333335, 0.5, 0.4, 0.5666666666666667, 0.5333333333333333, 0.36666666666666664, 0.4666666666666667, 0.5666666666666667, 0.5666666666666667, 0.36666666666666664, 0.5, 0.5333333333333333, 0.5, 0.4, 0.43333333333333335, 0.43333333333333335, 0.3, 0.4666666666666667, 0.5, 0.4666666666666667, 0.4, 0.6333333333333333, 0.43333333333333335, 0.4666666666666667, 0.4, 0.5333333333333333, 0.6666666666666666, 0.5333333333333333, 0.4666666666666667, 0.4, 0.43333333333333335, 0.5333333333333333, 0.5333333333333333, 0.5666666666666667, 0.5, 0.5666666666666667, 0.36666666666666664, 0.4666666666666667, 0.5, 0.6333333333333333, 0.5333333333333333, 0.4, 0.4666666666666667, 0.7, 0.5, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.3, 0.5, 0.5666666666666667, 0.5, 0.6333333333333333, 0.5, 0.4666666666666667, 0.5333333333333333, 0.5, 0.5, 0.5666666666666667, 0.5666666666666667, 0.3333333333333333, 0.36666666666666664, 0.43333333333333335, 0.6, 0.6666666666666666, 0.5333333333333333, 0.36666666666666664, 0.43333333333333335, 0.6, 0.5, 0.5666666666666667, 0.5, 0.5333333333333333, 0.6, 0.7, 0.36666666666666664, 0.4666666666666667, 0.4666666666666667, 0.5333333333333333, 0.43333333333333335, 0.5, 0.5333333333333333, 0.5, 0.4666666666666667, 0.6, 0.6666666666666666, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.43333333333333335, 0.8333333333333334, 0.3, 0.6333333333333333, 0.43333333333333335, 0.6333333333333333, 0.43333333333333335, 0.6, 0.43333333333333335, 0.3, 0.5, 0.4, 0.43333333333333335, 0.43333333333333335, 0.43333333333333335, 0.5666666666666667, 0.5666666666666667, 0.4, 0.36666666666666664, 0.5333333333333333, 0.4666666666666667, 0.6, 0.6, 0.5333333333333333, 0.4666666666666667, 0.6666666666666666, 0.7666666666666667, 0.6333333333333333, 0.3, 0.5333333333333333, 0.6333333333333333, 0.6, 0.4, 0.5, 0.6333333333333333, 0.6, 0.4666666666666667, 0.4666666666666667, 0.4666666666666667, 0.6333333333333333, 0.43333333333333335, 0.4666666666666667, 0.36666666666666664, 0.6, 0.43333333333333335, 0.36666666666666664, 0.5333333333333333, 0.5333333333333333, 0.4666666666666667, 0.6333333333333333, 0.6, 0.4666666666666667, 0.5, 0.6, 0.6, 0.5333333333333333, 0.4666666666666667, 0.4, 0.5333333333333333, 0.5666666666666667, 0.6, 0.4, 0.36666666666666664, 0.5666666666666667, 0.43333333333333335, 0.4, 0.5, 0.5333333333333333, 0.5666666666666667, 0.6, 0.4, 0.4, 0.5333333333333333, 0.4, 0.4666666666666667, 0.5, 0.4666666666666667, 0.6, 0.5, 0.4, 0.5666666666666667, 0.6333333333333333, 0.5666666666666667, 0.43333333333333335, 0.4666666666666667, 0.4, 0.4666666666666667, 0.4666666666666667, 0.36666666666666664, 0.3333333333333333, 0.6, 0.36666666666666664, 0.6, 0.5, 0.5666666666666667, 0.43333333333333335, 0.5666666666666667, 0.5, 0.4, 0.36666666666666664, 0.6, 0.5666666666666667, 0.5666666666666667, 0.5333333333333333, 0.4666666666666667, 0.6, 0.7333333333333333, 0.3333333333333333, 0.43333333333333335, 0.6666666666666666, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.5333333333333333, 0.5333333333333333, 0.4666666666666667, 0.6, 0.43333333333333335, 0.5333333333333333, 0.3333333333333333, 0.43333333333333335, 0.5333333333333333, 0.5666666666666667, 0.5333333333333333, 0.4666666666666667, 0.6, 0.43333333333333335, 0.5, 0.4666666666666667, 0.7666666666666667, 0.36666666666666664, 0.5, 0.7, 0.5666666666666667, 0.4, 0.5, 0.5, 0.5, 0.43333333333333335, 0.43333333333333335, 0.4666666666666667, 0.5, 0.5, 0.6666666666666666, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.5666666666666667, 0.4, 0.5333333333333333, 0.4666666666666667, 0.4666666666666667, 0.6333333333333333, 0.36666666666666664, 0.4666666666666667, 0.5, 0.6, 0.43333333333333335, 0.7333333333333333, 0.5, 0.36666666666666664, 0.3, 0.4, 0.6, 0.36666666666666664, 0.5666666666666667, 0.4, 0.4666666666666667, 0.3333333333333333, 0.43333333333333335, 0.5666666666666667, 0.4, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.6666666666666666, 0.5, 0.43333333333333335, 0.5666666666666667, 0.4, 0.5666666666666667, 0.5, 0.5666666666666667, 0.5, 0.6, 0.5, 0.7333333333333333, 0.6, 0.6333333333333333, 0.6333333333333333, 0.4666666666666667, 0.5, 0.5, 0.4666666666666667, 0.4666666666666667, 0.4666666666666667, 0.4666666666666667, 0.5666666666666667, 0.43333333333333335, 0.6666666666666666, 0.5, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.4666666666666667, 0.5333333333333333, 0.6333333333333333, 0.5333333333333333, 0.5666666666666667, 0.5, 0.4, 0.5333333333333333, 0.6666666666666666, 0.36666666666666664, 0.5, 0.5666666666666667, 0.6333333333333333, 0.4, 0.3333333333333333, 0.43333333333333335, 0.43333333333333335, 0.5333333333333333, 0.26666666666666666, 0.43333333333333335, 0.6, 0.5, 0.5, 0.4, 0.6333333333333333, 0.4, 0.5333333333333333, 0.4666666666666667, 0.5666666666666667, 0.5, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.4666666666666667, 0.6666666666666666, 0.6, 0.4666666666666667, 0.43333333333333335, 0.5333333333333333, 0.43333333333333335, 0.7, 0.4, 0.4666666666666667, 0.5, 0.6666666666666666, 0.3333333333333333, 0.5333333333333333, 0.4, 0.4666666666666667, 0.5, 0.5333333333333333, 0.4666666666666667, 0.5, 0.4666666666666667, 0.43333333333333335, 0.43333333333333335, 0.43333333333333335, 0.5, 0.4, 0.36666666666666664, 0.4666666666666667, 0.6, 0.5333333333333333, 0.4666666666666667, 0.4666666666666667, 0.5666666666666667, 0.3, 0.43333333333333335, 0.36666666666666664, 0.5333333333333333, 0.36666666666666664, 0.43333333333333335, 0.7333333333333333, 0.5, 0.43333333333333335, 0.5666666666666667, 0.6333333333333333, 0.5666666666666667, 0.5, 0.4, 0.7, 0.4666666666666667, 0.4666666666666667, 0.23333333333333334, 0.4666666666666667, 0.6, 0.6333333333333333, 0.43333333333333335, 0.5666666666666667, 0.4666666666666667, 0.4, 0.6, 0.4, 0.6333333333333333, 0.6333333333333333, 0.5333333333333333, 0.5333333333333333, 0.5333333333333333, 0.3333333333333333, 0.6, 0.43333333333333335, 0.43333333333333335, 0.6, 0.6, 0.5, 0.6, 0.5, 0.5333333333333333, 0.43333333333333335, 0.5666666666666667, 0.5, 0.36666666666666664, 0.5, 0.5, 0.5333333333333333, 0.4666666666666667, 0.5, 0.5333333333333333, 0.5333333333333333, 0.5, 0.5333333333333333, 0.4666666666666667, 0.6, 0.43333333333333335, 0.5, 0.5333333333333333, 0.43333333333333335, 0.5666666666666667, 0.4666666666666667, 0.5, 0.43333333333333335, 0.5, 0.4666666666666667, 0.43333333333333335, 0.3333333333333333, 0.5333333333333333, 0.4, 0.43333333333333335, 0.5666666666666667, 0.5666666666666667, 0.43333333333333335, 0.7, 0.43333333333333335, 0.5, 0.5, 0.6333333333333333, 0.5666666666666667, 0.4666666666666667, 0.5333333333333333, 0.6, 0.5, 0.4666666666666667, 0.5, 0.43333333333333335, 0.5333333333333333, 0.4, 0.5333333333333333, 0.6666666666666666, 0.5666666666666667, 0.6, 0.36666666666666664, 0.36666666666666664, 0.36666666666666664, 0.5333333333333333, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.36666666666666664, 0.4666666666666667, 0.36666666666666664, 0.3333333333333333, 0.5333333333333333, 0.6, 0.6333333333333333, 0.4, 0.6, 0.5666666666666667, 0.4666666666666667, 0.4, 0.5333333333333333, 0.5666666666666667, 0.5666666666666667, 0.5666666666666667, 0.6333333333333333, 0.5333333333333333, 0.43333333333333335, 0.43333333333333335, 0.36666666666666664, 0.5666666666666667, 0.5, 0.5666666666666667, 0.4666666666666667, 0.4666666666666667, 0.5, 0.36666666666666664, 0.6, 0.36666666666666664, 0.5666666666666667, 0.5333333333333333, 0.6, 0.4666666666666667, 0.6, 0.36666666666666664, 0.5, 0.5333333333333333, 0.36666666666666664, 0.5, 0.7333333333333333, 0.5, 0.4, 0.5666666666666667, 0.5, 0.5333333333333333, 0.7, 0.5333333333333333, 0.6333333333333333, 0.5, 0.43333333333333335, 0.4, 0.5, 0.5333333333333333, 0.36666666666666664, 0.4, 0.43333333333333335, 0.4, 0.5, 0.4, 0.4, 0.4666666666666667, 0.43333333333333335, 0.4666666666666667, 0.6333333333333333, 0.43333333333333335, 0.43333333333333335, 0.5666666666666667, 0.7, 0.6, 0.7, 0.5333333333333333, 0.6666666666666666, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.36666666666666664, 0.5333333333333333, 0.43333333333333335, 0.5, 0.4666666666666667, 0.6, 0.43333333333333335, 0.43333333333333335, 0.5, 0.6333333333333333, 0.4666666666666667, 0.4666666666666667, 0.43333333333333335, 0.3333333333333333, 0.43333333333333335, 0.5333333333333333, 0.5, 0.5, 0.5333333333333333, 0.6666666666666666, 0.6666666666666666, 0.4, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.6, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.3, 0.6, 0.43333333333333335, 0.5, 0.5, 0.5333333333333333, 0.4, 0.5666666666666667, 0.6, 0.5, 0.6, 0.3, 0.6333333333333333, 0.6333333333333333, 0.6, 0.6333333333333333, 0.36666666666666664, 0.6, 0.5, 0.43333333333333335, 0.5666666666666667, 0.5, 0.5333333333333333, 0.4666666666666667, 0.4, 0.5333333333333333, 0.4, 0.43333333333333335, 0.43333333333333335, 0.3333333333333333, 0.6, 0.4, 0.5, 0.5333333333333333, 0.5, 0.5, 0.43333333333333335, 0.6333333333333333, 0.5, 0.36666666666666664, 0.5666666666666667, 0.6, 0.5, 0.5, 0.6666666666666666, 0.5333333333333333, 0.5, 0.4666666666666667, 0.5, 0.4, 0.5333333333333333, 0.4666666666666667, 0.3333333333333333, 0.5666666666666667, 0.36666666666666664, 0.4, 0.6333333333333333, 0.4666666666666667, 0.4, 0.43333333333333335, 0.6, 0.4666666666666667, 0.43333333333333335, 0.4, 0.5, 0.4, 0.5, 0.5, 0.5666666666666667, 0.5666666666666667, 0.43333333333333335, 0.5333333333333333, 0.6666666666666666, 0.43333333333333335, 0.6666666666666666, 0.5666666666666667, 0.5, 0.43333333333333335, 0.5, 0.6, 0.6333333333333333, 0.4, 0.43333333333333335, 0.7, 0.4666666666666667, 0.4, 0.5, 0.5666666666666667, 0.4666666666666667, 0.5, 0.5666666666666667, 0.5, 0.6333333333333333, 0.6333333333333333, 0.5, 0.4, 0.4, 0.5, 0.6666666666666666, 0.36666666666666664, 0.5, 0.7, 0.43333333333333335, 0.7, 0.6, 0.3333333333333333, 0.5333333333333333, 0.6, 0.4666666666666667, 0.3333333333333333, 0.5333333333333333, 0.6, 0.4666666666666667, 0.6666666666666666, 0.5, 0.4666666666666667, 0.5, 0.43333333333333335, 0.5, 0.43333333333333335, 0.4, 0.4666666666666667, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.7, 0.5333333333333333, 0.6, 0.6, 0.5333333333333333, 0.43333333333333335, 0.7, 0.4, 0.6666666666666666, 0.6, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.4, 0.5666666666666667, 0.4, 0.6666666666666666, 0.5333333333333333, 0.36666666666666664, 0.5666666666666667, 0.5333333333333333, 0.43333333333333335, 0.5333333333333333, 0.4, 0.6333333333333333, 0.36666666666666664, 0.43333333333333335, 0.7666666666666667, 0.43333333333333335, 0.5333333333333333, 0.5333333333333333, 0.4666666666666667, 0.6, 0.3333333333333333, 0.43333333333333335, 0.5333333333333333, 0.4, 0.4666666666666667, 0.4, 0.5333333333333333, 0.5333333333333333, 0.5666666666666667, 0.5333333333333333, 0.5, 0.5, 0.5, 0.4666666666666667, 0.5, 0.5666666666666667, 0.5333333333333333, 0.6, 0.4666666666666667, 0.5666666666666667, 0.4666666666666667, 0.4, 0.4666666666666667, 0.5333333333333333, 0.5, 0.3, 0.4666666666666667, 0.5666666666666667, 0.43333333333333335, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.4666666666666667, 0.6, 0.36666666666666664, 0.5, 0.5, 0.4, 0.3, 0.5, 0.5, 0.5, 0.43333333333333335, 0.36666666666666664, 0.5666666666666667, 0.6333333333333333, 0.6333333333333333, 0.5, 0.4666666666666667, 0.6, 0.4, 0.43333333333333335, 0.5333333333333333, 0.4, 0.6, 0.4, 0.5, 0.5666666666666667, 0.6666666666666666, 0.5333333333333333, 0.43333333333333335, 0.6333333333333333, 0.5333333333333333, 0.43333333333333335, 0.5666666666666667, 0.5333333333333333, 0.4666666666666667, 0.6, 0.5, 0.5333333333333333, 0.5333333333333333, 0.4, 0.5333333333333333, 0.5, 0.4666666666666667, 0.5, 0.43333333333333335, 0.6333333333333333, 0.4, 0.4666666666666667, 0.5666666666666667, 0.4, 0.43333333333333335, 0.6333333333333333, 0.43333333333333335, 0.4, 0.6666666666666666, 0.5666666666666667, 0.43333333333333335, 0.4666666666666667, 0.3, 0.6333333333333333, 0.36666666666666664, 0.4666666666666667, 0.43333333333333335]

```
# Create dataframe with single coin flip
df = pd.DataFrame({'one-sample': one_sample})
df.head()
```

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>one-sample</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>0</td>
    </tr>
    <tr>
      <th>2</th>
      <td>1</td>
    </tr>
    <tr>
      <th>3</th>
      <td>0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>0</td>
    </tr>
  </tbody>
</table>
</div>

```
# Plot histogram to look at distribution of a single coin flip
df.hist()
```

```
# Plot histogram to look at distribution of all coin flips
ax = plt.hist(sample_means, bins=30)
plt.title(f'Distrobution of {n} sample means \n (of 30 coinflips each)')
```

What does the Central Limit Theorem State? That no matter the initial distribution of the population, the distribution of sample means taken will approximate a normal distribution as $n \rightarrow \infty$.

This has very important implications for hypothesis testing and is precisely the reason why the t-distribution begins to approximate the normal distribution as our sample size increases.

## Standard Error of the Mean

What does it mean to "estimate"? the Population mean?

```
import numpy as np
import pandas as pd

# Average Height
mu = 70
sigma = 3

lambda_heights = np.random.normal(mu, sigma, 2000)
print(len(lambda_heights))
lambda_heights
```

    2000

    array([68.92817782, 70.68080849, 70.84815227, ..., 71.9329789 ,
           72.95420131, 69.26269905])

```
import seaborn as sns

sns.distplot(lambda_heights)
plt.title('Distribution of Heights (in inches)');
```

```
print("Population Mean:", lambda_heights.mean())
print("Population Standard Deviation:", lambda_heights.std())
```

    Population Mean: 70.10478040161063
    Population Standard Deviation: 3.0471790369770257

```
population = pd.DataFrame({'heights': lambda_heights})
print(population.shape)
population.head()
```

    (2000, 1)

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>heights</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>68.928178</td>
    </tr>
    <tr>
      <th>1</th>
      <td>70.680808</td>
    </tr>
    <tr>
      <th>2</th>
      <td>70.848152</td>
    </tr>
    <tr>
      <th>3</th>
      <td>71.049019</td>
    </tr>
    <tr>
      <th>4</th>
      <td>67.155002</td>
    </tr>
  </tbody>
</table>
</div>

```
# Take a random sample and print sample mean

sample1 = population.sample(100)
print(sample1.shape)
sample1.head()
```

    (100, 1)

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>heights</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>426</th>
      <td>68.915750</td>
    </tr>
    <tr>
      <th>879</th>
      <td>67.162627</td>
    </tr>
    <tr>
      <th>1221</th>
      <td>73.774971</td>
    </tr>
    <tr>
      <th>157</th>
      <td>67.217545</td>
    </tr>
    <tr>
      <th>1546</th>
      <td>69.635305</td>
    </tr>
  </tbody>
</table>
</div>

```
print('Sample Mean #1: {}'.format(sample1['heights'].mean()))
```

    Sample Mean #1: 70.06299784862186

```
# Take a different random sample and print sample meansample1 = population.sample(100)

sample2 = population.sample(100)
print(sample2.shape)
sample2.head()

```

    (100, 1)

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>heights</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>68.928178</td>
    </tr>
    <tr>
      <th>229</th>
      <td>69.574037</td>
    </tr>
    <tr>
      <th>864</th>
      <td>71.035020</td>
    </tr>
    <tr>
      <th>1743</th>
      <td>69.323640</td>
    </tr>
    <tr>
      <th>1832</th>
      <td>69.840297</td>
    </tr>
  </tbody>
</table>
</div>

```
print('Sample Mean #2: {}'.format(sample2['heights'].mean()))
```

    Sample Mean #2: 69.91663772312324

## Build and Interpret a Confidence Interval

```
coinflips_100 = np.random.binomial(n=1, p=0.5, size=100)

sample_std = np.std(coinflips_100)
print('Sample Standard Dev: {}'.format(sample_std))
sample_size = len(coinflips_100)
print('Sample Size: {}'.format(sample_size))
```

    Sample Standard Dev: 0.4998999899979995
    Sample Size: 100

```
standard_error = sample_std / np.sqrt(sample_size)
print(standard_error)
```

    0.04998999899979995

### What confidence level do we want our confidence interval to represent?

95% confidence Interval? 99% confidence interval?

```
from scipy import stats
help(stats.t.ppf)
```

    Help on method ppf in module scipy.stats._distn_infrastructure:

    ppf(q, *args, **kwds) method of scipy.stats._continuous_distns.t_gen instance
        Percent point function (inverse of `cdf`) at q of the given RV.

        Parameters
        ----------
        q : array_like
            lower tail probability
        arg1, arg2, arg3,... : array_like
            The shape parameter(s) for the distribution (see docstring of the
            instance object for more information)
        loc : array_like, optional
            location parameter (default=0)
        scale : array_like, optional
            scale parameter (default=1)

        Returns
        -------
        x : array_like
            quantile corresponding to the lower tail probability q.

```
t = stats.t.ppf(0.975, sample_size-1)
t
```

    1.9842169515086827

```
sample_mean = coinflips_100.mean()
confidence_interval = (sample_mean - t * standard_error, sample_mean + t * standard_error)
margin_of_error = t * standard_error

print('Sample Mean: {}'.format(sample_mean))
print('Margin of Error: {}'.format(margin_of_error))
print('Confidence Interval: {}'.format(confidence_interval))
```

    Sample Mean: 0.51
    Margin of Error: 0.09919100342130516
    Confidence Interval: (0.41080899657869485, 0.6091910034213052)

## Graphically Represent a Confidence Interval

```
import seaborn as sns

sns.kdeplot(coinflips_100)
plt.axvline(x=sample_mean, color='k')
plt.axvline(x=confidence_interval[0], color='r')
plt.axvline(x=confidence_interval[1], color='r')

```

## Relationship between Confidence Intervals and T-tests

Confidence Interval == Bounds of statistical significance for our t-test

A sample mean that falls inside of our confidence interval will "FAIL TO REJECT" our null hypothesis

A sample mean that falls outside of our confidence interval will "REJECT" our null hypothesis

```
from scipy.stats import t, ttest_1samp
```

```
import numpy as np

coinflip_means = []
for x in range(0,100):
  coinflips = np.random.binomial(n=1, p=.5, size=30)
  coinflip_means.append(coinflips.mean())

print(coinflip_means)
```

    [0.36666666666666664, 0.5666666666666667, 0.4666666666666667, 0.5333333333333333, 0.3333333333333333, 0.5, 0.43333333333333335, 0.4, 0.4666666666666667, 0.4666666666666667, 0.43333333333333335, 0.4, 0.6333333333333333, 0.5, 0.5666666666666667, 0.43333333333333335, 0.6666666666666666, 0.36666666666666664, 0.5, 0.6333333333333333, 0.43333333333333335, 0.43333333333333335, 0.4, 0.43333333333333335, 0.5, 0.5, 0.6, 0.5, 0.43333333333333335, 0.4, 0.6666666666666666, 0.43333333333333335, 0.4, 0.36666666666666664, 0.5, 0.26666666666666666, 0.6, 0.5333333333333333, 0.4, 0.6333333333333333, 0.4, 0.4, 0.6, 0.5666666666666667, 0.6333333333333333, 0.4, 0.43333333333333335, 0.3333333333333333, 0.5, 0.5, 0.43333333333333335, 0.4, 0.5333333333333333, 0.43333333333333335, 0.4666666666666667, 0.43333333333333335, 0.5, 0.36666666666666664, 0.5666666666666667, 0.6333333333333333, 0.36666666666666664, 0.5, 0.5, 0.6, 0.5, 0.5333333333333333, 0.5, 0.43333333333333335, 0.4666666666666667, 0.6333333333333333, 0.4666666666666667, 0.26666666666666666, 0.5333333333333333, 0.6, 0.5, 0.5666666666666667, 0.4666666666666667, 0.5333333333333333, 0.5333333333333333, 0.6, 0.4666666666666667, 0.4, 0.6, 0.5, 0.36666666666666664, 0.43333333333333335, 0.5, 0.5, 0.5333333333333333, 0.4666666666666667, 0.43333333333333335, 0.5666666666666667, 0.5666666666666667, 0.5666666666666667, 0.6333333333333333, 0.5666666666666667, 0.6666666666666666, 0.43333333333333335, 0.6, 0.4]

```
np.mean(coinflip_means)
```

    0.48933333333333323

```
# 95% confidence interval

t_stat = stats.t.ppf(0.975, 99)
print('T Statistic: {}'.format(t_stat))

std_sample = np.std(coinflip_means)
std_error = std_sample / np.sqrt(len(coinflip_means))

conf_intv = stats.t.interval(0.95, 99, loc=np.mean(coinflip_means), scale=std_error)
print('95% confidence interval: {}'.format(conf_intv))
```

    T Statistic: 1.9842169515086827
    95% confidence interval: (0.4716135859254542, 0.5070530807412122)

A null hypothesis that's just inside of our confidence interval == fail to reject

```
ttest_1samp(coinflip_means, 0.5)
```

    Ttest_1sampResult(statistic=-1.1884418854216423, pvalue=0.23750245455769936)

```
ttest_1samp(coinflip_means, 0.3)
```

    Ttest_1sampResult(statistic=21.09484346623394, pvalue=2.0786935334173473e-38)

```
#lower boundry
ttest_1samp(coinflip_means, conf_intv[0])
```

    Ttest_1sampResult(statistic=1.974270939245137, pvalue=0.051137143877129705)

A null hypothesis that's just outside of our confidence interval == reject

```
#upper boundry
ttest_1samp(coinflip_means, conf_intv[1])
```

    Ttest_1sampResult(statistic=-1.974270939245137, pvalue=0.051137143877129705)

```
def confidence_interval(data, confidence=0.95):
  """
  Calculate a confidence interval around a sample mean for given data.
  Using t-distribution and two-tailed test, default 95% confidence.

  Arguments:
    data - iterable (list or numpy array) of sample observations
    confidence - level of confidence for the interval

  Returns:
    tuple of (mean, lower bound, upper bound)
  """
  data = np.array(data)
  mean = np.mean(data)
  n = len(data)
  stderr = stats.sem(data)
  interval = stderr * stats.t.ppf((1 + confidence) / 2.0, n - 1)
  return (mean, mean - interval, mean + interval)
```

## Run a $\chi^{2}$ Test "by hand" (Using Numpy)

```
df = pd.read_csv('https://raw.githubusercontent.com/ryanleeallred/datasets/master/adult.csv', na_values=" ?")
print(df.shape)
df.head()
```

    (32561, 15)

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>age</th>
      <th>workclass</th>
      <th>fnlwgt</th>
      <th>education</th>
      <th>education-num</th>
      <th>marital-status</th>
      <th>occupation</th>
      <th>relationship</th>
      <th>race</th>
      <th>sex</th>
      <th>capital-gain</th>
      <th>capital-loss</th>
      <th>hours-per-week</th>
      <th>country</th>
      <th>salary</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>39</td>
      <td>State-gov</td>
      <td>77516</td>
      <td>Bachelors</td>
      <td>13</td>
      <td>Never-married</td>
      <td>Adm-clerical</td>
      <td>Not-in-family</td>
      <td>White</td>
      <td>Male</td>
      <td>2174</td>
      <td>0</td>
      <td>40</td>
      <td>United-States</td>
      <td><=50K</td>
    </tr>
    <tr>
      <th>1</th>
      <td>50</td>
      <td>Self-emp-not-inc</td>
      <td>83311</td>
      <td>Bachelors</td>
      <td>13</td>
      <td>Married-civ-spouse</td>
      <td>Exec-managerial</td>
      <td>Husband</td>
      <td>White</td>
      <td>Male</td>
      <td>0</td>
      <td>0</td>
      <td>13</td>
      <td>United-States</td>
      <td><=50K</td>
    </tr>
    <tr>
      <th>2</th>
      <td>38</td>
      <td>Private</td>
      <td>215646</td>
      <td>HS-grad</td>
      <td>9</td>
      <td>Divorced</td>
      <td>Handlers-cleaners</td>
      <td>Not-in-family</td>
      <td>White</td>
      <td>Male</td>
      <td>0</td>
      <td>0</td>
      <td>40</td>
      <td>United-States</td>
      <td><=50K</td>
    </tr>
    <tr>
      <th>3</th>
      <td>53</td>
      <td>Private</td>
      <td>234721</td>
      <td>11th</td>
      <td>7</td>
      <td>Married-civ-spouse</td>
      <td>Handlers-cleaners</td>
      <td>Husband</td>
      <td>Black</td>
      <td>Male</td>
      <td>0</td>
      <td>0</td>
      <td>40</td>
      <td>United-States</td>
      <td><=50K</td>
    </tr>
    <tr>
      <th>4</th>
      <td>28</td>
      <td>Private</td>
      <td>338409</td>
      <td>Bachelors</td>
      <td>13</td>
      <td>Married-civ-spouse</td>
      <td>Prof-specialty</td>
      <td>Wife</td>
      <td>Black</td>
      <td>Female</td>
      <td>0</td>
      <td>0</td>
      <td>40</td>
      <td>Cuba</td>
      <td><=50K</td>
    </tr>
  </tbody>
</table>
</div>

```
df['hours-per-week'].hist(bins=20)
```

```
df.corr()
```

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>age</th>
      <th>fnlwgt</th>
      <th>education-num</th>
      <th>capital-gain</th>
      <th>capital-loss</th>
      <th>hours-per-week</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>age</th>
      <td>1.000000</td>
      <td>-0.076646</td>
      <td>0.036527</td>
      <td>0.077674</td>
      <td>0.057775</td>
      <td>0.068756</td>
    </tr>
    <tr>
      <th>fnlwgt</th>
      <td>-0.076646</td>
      <td>1.000000</td>
      <td>-0.043195</td>
      <td>0.000432</td>
      <td>-0.010252</td>
      <td>-0.018768</td>
    </tr>
    <tr>
      <th>education-num</th>
      <td>0.036527</td>
      <td>-0.043195</td>
      <td>1.000000</td>
      <td>0.122630</td>
      <td>0.079923</td>
      <td>0.148123</td>
    </tr>
    <tr>
      <th>capital-gain</th>
      <td>0.077674</td>
      <td>0.000432</td>
      <td>0.122630</td>
      <td>1.000000</td>
      <td>-0.031615</td>
      <td>0.078409</td>
    </tr>
    <tr>
      <th>capital-loss</th>
      <td>0.057775</td>
      <td>-0.010252</td>
      <td>0.079923</td>
      <td>-0.031615</td>
      <td>1.000000</td>
      <td>0.054256</td>
    </tr>
    <tr>
      <th>hours-per-week</th>
      <td>0.068756</td>
      <td>-0.018768</td>
      <td>0.148123</td>
      <td>0.078409</td>
      <td>0.054256</td>
      <td>1.000000</td>
    </tr>
  </tbody>
</table>
</div>

```
df.describe(exclude='number')
```

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>workclass</th>
      <th>education</th>
      <th>marital-status</th>
      <th>occupation</th>
      <th>relationship</th>
      <th>race</th>
      <th>sex</th>
      <th>country</th>
      <th>salary</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>count</th>
      <td>30725</td>
      <td>32561</td>
      <td>32561</td>
      <td>30718</td>
      <td>32561</td>
      <td>32561</td>
      <td>32561</td>
      <td>31978</td>
      <td>32561</td>
    </tr>
    <tr>
      <th>unique</th>
      <td>8</td>
      <td>16</td>
      <td>7</td>
      <td>14</td>
      <td>6</td>
      <td>5</td>
      <td>2</td>
      <td>41</td>
      <td>2</td>
    </tr>
    <tr>
      <th>top</th>
      <td>Private</td>
      <td>HS-grad</td>
      <td>Married-civ-spouse</td>
      <td>Prof-specialty</td>
      <td>Husband</td>
      <td>White</td>
      <td>Male</td>
      <td>United-States</td>
      <td><=50K</td>
    </tr>
    <tr>
      <th>freq</th>
      <td>22696</td>
      <td>10501</td>
      <td>14976</td>
      <td>4140</td>
      <td>13193</td>
      <td>27816</td>
      <td>21790</td>
      <td>29170</td>
      <td>24720</td>
    </tr>
  </tbody>
</table>
</div>

```
cut_points = [0, 9, 19, 29, 39, 49, 500]
label_names = ['0-9', '10-19', '20-29', '30-39', '40-49', '50+']
df['Hours_per_week_categories'] = pd.cut(df['hours-per-week'], cut_points, labels=label_names)
df['Hours_per_week_categories'].value_counts()
```

    40-49    18336
    50+       6462
    30-39     3667
    20-29     2392
    10-19     1246
    0-9        458
    Name: Hours_per_week_categories, dtype: int64

```
df.sex.value_counts()
```

     Male      21790
     Female    10771
    Name: sex, dtype: int64

```
df = df.sort_values(by='Hours_per_week_categories', ascending=True)
contingency_table = pd.crosstab(df['sex'], df['Hours_per_week_categories'], margins=True)
contingency_table
```

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>Hours_per_week_categories</th>
      <th>0-9</th>
      <th>10-19</th>
      <th>20-29</th>
      <th>30-39</th>
      <th>40-49</th>
      <th>50+</th>
      <th>All</th>
    </tr>
    <tr>
      <th>sex</th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Female</th>
      <td>235</td>
      <td>671</td>
      <td>1287</td>
      <td>1914</td>
      <td>5636</td>
      <td>1028</td>
      <td>10771</td>
    </tr>
    <tr>
      <th>Male</th>
      <td>223</td>
      <td>575</td>
      <td>1105</td>
      <td>1753</td>
      <td>12700</td>
      <td>5434</td>
      <td>21790</td>
    </tr>
    <tr>
      <th>All</th>
      <td>458</td>
      <td>1246</td>
      <td>2392</td>
      <td>3667</td>
      <td>18336</td>
      <td>6462</td>
      <td>32561</td>
    </tr>
  </tbody>
</table>
</div>

## Expected Value Calculation
\begin{align}
expected_{i,j} =\frac{(row_{i} \text{total})(column_{j} \text{total}) }{(\text{total observations})}
\end{align}

```
row_sums = contingency_table.iloc[0:2, 6].values
col_sums = contingency_table.iloc[2, 0:6].values
print(row_sums, col_sums)
```

    [10771 21790] [  458  1246  2392  3667 18336  6462]

```
total = contingency_table.loc['All', 'All']
total
```

    32561

```
expected = []
for i in range(len(row_sums)):
  expected_row = []
  for col in col_sums:
    expected_val = (col * row_sums[i]) / total
    expected_row.append(expected_val)
  expected.append(expected_row)

expected = np.array(expected)
print(expected.shape)
print(expected)
```

    (2, 6)
    [[  151.50388502   412.16995793   791.26046497  1213.02346365
       6065.44811277  2137.59411566]
     [  306.49611498   833.83004207  1600.73953503  2453.97653635
      12270.55188723  4324.40588434]]

```
contingency_table
```

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>Hours_per_week_categories</th>
      <th>0-9</th>
      <th>10-19</th>
      <th>20-29</th>
      <th>30-39</th>
      <th>40-49</th>
      <th>50+</th>
      <th>All</th>
    </tr>
    <tr>
      <th>sex</th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Female</th>
      <td>235</td>
      <td>671</td>
      <td>1287</td>
      <td>1914</td>
      <td>5636</td>
      <td>1028</td>
      <td>10771</td>
    </tr>
    <tr>
      <th>Male</th>
      <td>223</td>
      <td>575</td>
      <td>1105</td>
      <td>1753</td>
      <td>12700</td>
      <td>5434</td>
      <td>21790</td>
    </tr>
    <tr>
      <th>All</th>
      <td>458</td>
      <td>1246</td>
      <td>2392</td>
      <td>3667</td>
      <td>18336</td>
      <td>6462</td>
      <td>32561</td>
    </tr>
  </tbody>
</table>
</div>

## Chi-Squared Statistic with Numpy

\begin{align}
\chi^2 = \sum \frac{(observed_{i}-expected_{i})^2}{(expected_{i})}
\end{align}

For the $observed$ values we will just use a version of our contingency table without the margins as a numpy array. In this way, if our observed values array and our expected values array are the same shape, then we can subtract them and divide them directly which makes the calculations a lot cleaner. No for loops!

```
observed = pd.crosstab(df['sex'], df['Hours_per_week_categories']).values
observed
```

    array([[  235,   671,  1287,  1914,  5636,  1028],
           [  223,   575,  1105,  1753, 12700,  5434]])

```
chi_square = ((observed - expected) **2 / (expected)).sum()
chi_square
```

    2287.190943926107

## Run a $\chi^{2}$ Test using Scipy

```
chi_sqrt, p_val, dof, expected = stats.chi2_contingency(observed)
print(chi_sqrt, p_val, dof, expected)
```

    2287.190943926107 0.0 5 [[  151.50388502   412.16995793   791.26046497  1213.02346365
       6065.44811277  2137.59411566]
     [  306.49611498   833.83004207  1600.73953503  2453.97653635
      12270.55188723  4324.40588434]]

Null Hypothesis: Hours worked per week bins is **independent** of sex.

Due to a p-value of 0, we REJECT the null hypothesis that hours worked per week and sex are independent, and conclude that there is an association between hours worked per week and sex.

## Assignment - Build a confidence interval

A confidence interval refers to a neighborhood around some point estimate, the size of which is determined by the desired p-value. For instance, we might say that 52% of Americans prefer tacos to burritos, with a 95% confidence interval of +/- 5%.

52% (0.52) is the point estimate, and +/- 5% (the interval $[0.47, 0.57]$) is the confidence interval. "95% confidence" means a p-value $\leq 1 - 0.95 = 0.05$.

In this case, the confidence interval includes $0.5$ - which is the natural null hypothesis (that half of Americans prefer tacos and half burritos, thus there is no clear favorite). So in this case, we could use the confidence interval to report that we've failed to reject the null hypothesis.

But providing the full analysis with a confidence interval, including a graphical representation of it, can be a helpful and powerful way to tell your story. Done well, it is also more intuitive to a layperson than simply saying "fail to reject the null hypothesis" - it shows that in fact the data does *not* give a single clear result (the point estimate) but a whole range of possibilities.

How is a confidence interval built, and how should it be interpreted? It does *not* mean that 95% of the data lies in that interval - instead, the frequentist interpretation is "if we were to repeat this experiment 100 times, we would expect the average result to lie in this interval ~95 times."

For a 95% confidence interval and a normal(-ish) distribution, you can simply remember that +/-2 standard deviations contains 95% of the probability mass, and so the 95% confidence interval based on a given sample is centered at the mean (point estimate) and has a range of +/- 2 (or technically 1.96) standard deviations.

Different distributions/assumptions (90% confidence, 99% confidence) will require different math, but the overall process and interpretation (with a frequentist approach) will be the same.

Your assignment - using the data from the prior module ([congressional voting records](https://archive.ics.uci.edu/ml/datasets/Congressional+Voting+Records)):

### Confidence Intervals:
1. Generate and numerically represent a confidence interval
2. Graphically (with a plot) represent the confidence interval
3. Interpret the confidence interval - what does it tell you about the data and its distribution?

### Chi-squared tests:
4. Take a dataset that we have used in the past in class that has **categorical** variables. Pick two of those categorical variables and run a chi-squared tests on that data
  - By hand using Numpy
  - In a single line using Scipy

Stretch goals:

1. Write a summary of your findings, mixing prose and math/code/results. *Note* - yes, this is by definition a political topic. It is challenging but important to keep your writing voice *neutral* and stick to the facts of the data. Data science often involves considering controversial issues, so it's important to be sensitive about them (especially if you want to publish).
2. Apply the techniques you learned today to your project data or other data of your choice, and write/discuss your findings here.
3. Refactor your code so it is elegant, readable, and can be easily run for all issues.

```
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
```

```
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/voting-records/house-votes-84.data'

cols = ['party', 'handicapped_infants', 'water_cost_sharing', 'budget', 'doc_fees', 'el_salvador_aid', 'religion_in_school',
       'anti_satellite_test_ban', 'aid_nicaraguan_contras', 'mx_missile', 'immigration', 'synfuels_corp_cuts', 'edu_spending',
        'right_to_sue', 'crime', 'duty_free_export', 'admin_act_s_africa']
df = pd.read_csv(url, header=None, names=cols, na_values='?')
```

```
mapping = {'n': 0, 'y': 1}
for col in df.columns:
  df.replace({col:mapping}, inplace=True)
```

```
df = df.fillna(0.5)
```

```
df.head()
```

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>party</th>
      <th>handicapped_infants</th>
      <th>water_cost_sharing</th>
      <th>budget</th>
      <th>doc_fees</th>
      <th>el_salvador_aid</th>
      <th>religion_in_school</th>
      <th>anti_satellite_test_ban</th>
      <th>aid_nicaraguan_contras</th>
      <th>mx_missile</th>
      <th>immigration</th>
      <th>synfuels_corp_cuts</th>
      <th>edu_spending</th>
      <th>right_to_sue</th>
      <th>crime</th>
      <th>duty_free_export</th>
      <th>admin_act_s_africa</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>republican</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>republican</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.5</td>
    </tr>
    <tr>
      <th>2</th>
      <td>democrat</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>3</th>
      <td>democrat</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>democrat</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
    </tr>
  </tbody>
</table>
</div>

```
df.isna().sum()
```

    party                      0
    handicapped_infants        0
    water_cost_sharing         0
    budget                     0
    doc_fees                   0
    el_salvador_aid            0
    religion_in_school         0
    anti_satellite_test_ban    0
    aid_nicaraguan_contras     0
    mx_missile                 0
    immigration                0
    synfuels_corp_cuts         0
    edu_spending               0
    right_to_sue               0
    crime                      0
    duty_free_export           0
    admin_act_s_africa         0
    dtype: int64

```
democrat = df[df['party'] == 'democrat']
republican = df[df['party'] == 'republican']
```

```
print(democrat.shape)
democrat.head()
```

    (267, 17)

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>party</th>
      <th>handicapped_infants</th>
      <th>water_cost_sharing</th>
      <th>budget</th>
      <th>doc_fees</th>
      <th>el_salvador_aid</th>
      <th>religion_in_school</th>
      <th>anti_satellite_test_ban</th>
      <th>aid_nicaraguan_contras</th>
      <th>mx_missile</th>
      <th>immigration</th>
      <th>synfuels_corp_cuts</th>
      <th>edu_spending</th>
      <th>right_to_sue</th>
      <th>crime</th>
      <th>duty_free_export</th>
      <th>admin_act_s_africa</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>2</th>
      <td>democrat</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>3</th>
      <td>democrat</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>democrat</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>5</th>
      <td>democrat</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>6</th>
      <td>democrat</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
    </tr>
  </tbody>
</table>
</div>

```
print(republican.shape)
republican.head()
```

    (168, 17)

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>party</th>
      <th>handicapped_infants</th>
      <th>water_cost_sharing</th>
      <th>budget</th>
      <th>doc_fees</th>
      <th>el_salvador_aid</th>
      <th>religion_in_school</th>
      <th>anti_satellite_test_ban</th>
      <th>aid_nicaraguan_contras</th>
      <th>mx_missile</th>
      <th>immigration</th>
      <th>synfuels_corp_cuts</th>
      <th>edu_spending</th>
      <th>right_to_sue</th>
      <th>crime</th>
      <th>duty_free_export</th>
      <th>admin_act_s_africa</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>republican</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>republican</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.5</td>
    </tr>
    <tr>
      <th>7</th>
      <td>republican</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.5</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>8</th>
      <td>republican</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>10</th>
      <td>republican</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.5</td>
      <td>0.5</td>
      <td>1.0</td>
      <td>1.0</td>
      <td>0.0</td>
      <td>0.0</td>
    </tr>
  </tbody>
</table>
</div>

```
sample = democrat['handicapped_infants'].values
sample
```

    array([0.5, 0. , 1. , 0. , 0. , 1. , 0. , 1. , 1. , 1. , 1. , 1. , 1. ,
           1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. ,
           1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. ,
           1. , 1. , 1. , 1. , 1. , 1. , 0. , 0. , 0. , 1. , 1. , 1. , 0. ,
           0. , 1. , 1. , 1. , 1. , 1. , 1. , 0. , 1. , 1. , 1. , 1. , 1. ,
           1. , 0.5, 1. , 1. , 1. , 0. , 0. , 1. , 0. , 1. , 0. , 0. , 0. ,
           0. , 0.5, 1. , 0. , 0. , 0. , 1. , 0.5, 0. , 0. , 0. , 0. , 1. ,
           0. , 0. , 0. , 0. , 0. , 0. , 0. , 1. , 0. , 0. , 1. , 1. , 0. ,
           0. , 1. , 0. , 0. , 0.5, 1. , 0.5, 0. , 1. , 0.5, 0. , 1. , 0. ,
           1. , 1. , 0. , 0. , 0. , 0. , 0. , 1. , 0. , 1. , 1. , 1. , 0. ,
           0. , 1. , 0. , 0. , 0. , 0. , 1. , 1. , 0. , 0. , 0. , 1. , 0. ,
           1. , 0. , 0. , 0. , 1. , 1. , 1. , 0. , 1. , 1. , 0. , 1. , 1. ,
           1. , 1. , 0. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. , 1. ,
           0. , 1. , 0. , 0. , 0. , 0. , 0. , 1. , 1. , 1. , 1. , 1. , 1. ,
           1. , 0. , 1. , 0. , 0. , 0. , 1. , 1. , 0. , 1. , 0. , 1. , 0. ,
           1. , 0. , 1. , 1. , 1. , 0. , 1. , 1. , 1. , 1. , 1. , 0. , 0. ,
           0. , 1. , 1. , 0. , 0. , 0. , 1. , 0. , 0. , 0. , 1. , 1. , 1. ,
           1. , 0. , 1. , 1. , 0. , 1. , 1. , 0. , 0. , 0. , 1. , 1. , 1. ,
           1. , 1. , 1. , 1. , 0. , 1. , 0. , 1. , 0.5, 1. , 1. , 1. , 1. ,
           1. , 0. , 1. , 0. , 1. , 1. , 1. , 0. , 1. , 1. , 1. , 0. , 0. ,
           0. , 0. , 0. , 1. , 0.5, 1. , 0. ])

```
sample_mean = np.mean(sample)
sample_std = np.std(sample)
sample_size = len(sample)
samp_standard_error = sample_std / np.sqrt(sample_size)
t_val = stats.t.ppf(0.975, sample_size-1)

print('Dem handicapped infants mean: {}'.format(sample_mean))
print('Dem handicapped infants St Dev: {}'.format(sample_std))
print('Dem handicapped infants size: {}'.format(sample_size))
print('Dem handicapped infants standard error: {}'.format(samp_standard_error))
print('Dem handicapped infants T value: {}'.format(t_val))

```

    Dem handicapped infants mean: 0.601123595505618
    Dem handicapped infants St Dev: 0.4809855009663819
    Dem handicapped infants size: 267
    Dem handicapped infants standard error: 0.029435834625069865
    Dem handicapped infants T value: 1.9689223241409017

```
sample_margin_error = t_val * samp_standard_error
confidence_interval = (sample_mean - sample_margin_error, sample_mean + sample_margin_error)

print('Dem handicapped infants Margin of Error: {}'.format(sample_margin_error))
print('Dem handicapped infants Confidence Interval: {}'.format(confidence_interval))
```

    Dem handicapped infants Margin of Error: 0.057956871923019786
    Dem handicapped infants Confidence Interval: (0.5431667235825982, 0.6590804674286378)

```
sns.distplot(sample)
plt.axvline(sample_mean, color='black')
plt.axvline(confidence_interval[0], color='green')
plt.axvline(confidence_interval[1], color='green')
```

```
sns.kdeplot(sample)
plt.axvline(sample_mean, color='black')
plt.axvline(confidence_interval[0], color='green')
plt.axvline(confidence_interval[1], color='green')
```

## Function to determine confidence interval of congressional data.

```
def conf_intv(df):
  print(df['party'].values[0])
  print('----------------------------------------------------------------------------------------------------------')
  for col in cols:
    if col != 'party':
      votes = df[col].values
      size = len(votes)
      mean = np.mean(votes)
      st_dev = np.std(votes)
      stnd_err = (st_dev / np.sqrt(size))
      t_value = stats.t.ppf(0.975, size-1)
      error_marg = t_value * stnd_err
      confidence_interval = (mean - error_marg, mean + error_marg)
      print(f'Confidence Interval of votes on the issue of {col}: {confidence_interval}')
      sns.kdeplot(votes)
      plt.axvline(mean, color='black')
      plt.axvline(confidence_interval[0], color='red')
      plt.axvline(confidence_interval[1], color='red')
      plt.show();
      print('----------------------------------------------------------------------------------------------------------')

```

```
conf_intv(democrat)
```

```
print(democrat['party'].values[0])
```

    democrat

## Central Limit

```
def random_samples(array, n_samp):
  random_samp_means = []
  for i in range(0, n_samp):
    random_sample = np.random.choice(array, size=array.shape[0])
    random_samp_means.append(random_sample.mean())
  return random_samp_means

```

```
ran_samp_means = random_samples(republican['handicapped_infants'], 1000)
sns.distplot(ran_samp_means, bins=20);
```

```
ran_samp_means = random_samples(democrat['handicapped_infants'], 1000)
sns.distplot(ran_samp_means, bins=20);
```

## Chi Squared

```
!wget https://resources.lendingclub.com/LoanStats_2018Q4.csv.zip
```

    --2019-08-10 01:41:42--  https://resources.lendingclub.com/LoanStats_2018Q4.csv.zip
    Resolving resources.lendingclub.com (resources.lendingclub.com)... 64.48.1.20
    Connecting to resources.lendingclub.com (resources.lendingclub.com)|64.48.1.20|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [application/zip]
    Saving to: ‘LoanStats_2018Q4.csv.zip’

    LoanStats_2018Q4.cs     [        <=>         ]  21.56M  1.71MB/s    in 13s

    2019-08-10 01:41:55 (1.70 MB/s) - ‘LoanStats_2018Q4.csv.zip’ saved [22606280]

```
!unzip LoanStats_2018Q4.csv.zip
```

    Archive:  LoanStats_2018Q4.csv.zip
      inflating: LoanStats_2018Q4.csv

```
df = pd.read_csv('LoanStats_2018Q4.csv', header=1, skipfooter=2)
print(df.shape)
df.head()
```

    /usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:1: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support skipfooter; you can avoid this warning by specifying engine='python'.
      """Entry point for launching an IPython kernel.

    (128412, 144)

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>id</th>
      <th>member_id</th>
      <th>loan_amnt</th>
      <th>funded_amnt</th>
      <th>funded_amnt_inv</th>
      <th>term</th>
      <th>int_rate</th>
      <th>installment</th>
      <th>grade</th>
      <th>sub_grade</th>
      <th>emp_title</th>
      <th>emp_length</th>
      <th>home_ownership</th>
      <th>annual_inc</th>
      <th>verification_status</th>
      <th>issue_d</th>
      <th>loan_status</th>
      <th>pymnt_plan</th>
      <th>url</th>
      <th>desc</th>
      <th>purpose</th>
      <th>title</th>
      <th>zip_code</th>
      <th>addr_state</th>
      <th>dti</th>
      <th>delinq_2yrs</th>
      <th>earliest_cr_line</th>
      <th>inq_last_6mths</th>
      <th>mths_since_last_delinq</th>
      <th>mths_since_last_record</th>
      <th>open_acc</th>
      <th>pub_rec</th>
      <th>revol_bal</th>
      <th>revol_util</th>
      <th>total_acc</th>
      <th>initial_list_status</th>
      <th>out_prncp</th>
      <th>out_prncp_inv</th>
      <th>total_pymnt</th>
      <th>total_pymnt_inv</th>
      <th>...</th>
      <th>percent_bc_gt_75</th>
      <th>pub_rec_bankruptcies</th>
      <th>tax_liens</th>
      <th>tot_hi_cred_lim</th>
      <th>total_bal_ex_mort</th>
      <th>total_bc_limit</th>
      <th>total_il_high_credit_limit</th>
      <th>revol_bal_joint</th>
      <th>sec_app_earliest_cr_line</th>
      <th>sec_app_inq_last_6mths</th>
      <th>sec_app_mort_acc</th>
      <th>sec_app_open_acc</th>
      <th>sec_app_revol_util</th>
      <th>sec_app_open_act_il</th>
      <th>sec_app_num_rev_accts</th>
      <th>sec_app_chargeoff_within_12_mths</th>
      <th>sec_app_collections_12_mths_ex_med</th>
      <th>sec_app_mths_since_last_major_derog</th>
      <th>hardship_flag</th>
      <th>hardship_type</th>
      <th>hardship_reason</th>
      <th>hardship_status</th>
      <th>deferral_term</th>
      <th>hardship_amount</th>
      <th>hardship_start_date</th>
      <th>hardship_end_date</th>
      <th>payment_plan_start_date</th>
      <th>hardship_length</th>
      <th>hardship_dpd</th>
      <th>hardship_loan_status</th>
      <th>orig_projected_additional_accrued_interest</th>
      <th>hardship_payoff_balance_amount</th>
      <th>hardship_last_payment_amount</th>
      <th>debt_settlement_flag</th>
      <th>debt_settlement_flag_date</th>
      <th>settlement_status</th>
      <th>settlement_date</th>
      <th>settlement_amount</th>
      <th>settlement_percentage</th>
      <th>settlement_term</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>10000</td>
      <td>10000</td>
      <td>10000.0</td>
      <td>36 months</td>
      <td>10.33%</td>
      <td>324.23</td>
      <td>B</td>
      <td>B1</td>
      <td>NaN</td>
      <td>< 1 year</td>
      <td>MORTGAGE</td>
      <td>280000.0</td>
      <td>Not Verified</td>
      <td>Dec-2018</td>
      <td>Current</td>
      <td>n</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>debt_consolidation</td>
      <td>Debt consolidation</td>
      <td>974xx</td>
      <td>OR</td>
      <td>6.15</td>
      <td>2</td>
      <td>Jan-1996</td>
      <td>0</td>
      <td>18.0</td>
      <td>NaN</td>
      <td>14</td>
      <td>0</td>
      <td>9082</td>
      <td>38%</td>
      <td>23</td>
      <td>w</td>
      <td>8540.01</td>
      <td>8540.01</td>
      <td>1936.77</td>
      <td>1936.77</td>
      <td>...</td>
      <td>28.6</td>
      <td>0</td>
      <td>0</td>
      <td>367828</td>
      <td>61364</td>
      <td>20900</td>
      <td>54912</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>1</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>4000</td>
      <td>4000</td>
      <td>4000.0</td>
      <td>36 months</td>
      <td>23.40%</td>
      <td>155.68</td>
      <td>E</td>
      <td>E1</td>
      <td>Security</td>
      <td>3 years</td>
      <td>RENT</td>
      <td>90000.0</td>
      <td>Source Verified</td>
      <td>Dec-2018</td>
      <td>Current</td>
      <td>n</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>debt_consolidation</td>
      <td>Debt consolidation</td>
      <td>070xx</td>
      <td>NJ</td>
      <td>26.33</td>
      <td>0</td>
      <td>Sep-2006</td>
      <td>4</td>
      <td>59.0</td>
      <td>NaN</td>
      <td>15</td>
      <td>0</td>
      <td>5199</td>
      <td>19.2%</td>
      <td>20</td>
      <td>w</td>
      <td>3510.60</td>
      <td>3510.60</td>
      <td>926.28</td>
      <td>926.28</td>
      <td>...</td>
      <td>0.0</td>
      <td>0</td>
      <td>0</td>
      <td>98655</td>
      <td>66926</td>
      <td>21900</td>
      <td>71555</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>2</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>5000</td>
      <td>5000</td>
      <td>5000.0</td>
      <td>36 months</td>
      <td>17.97%</td>
      <td>180.69</td>
      <td>D</td>
      <td>D1</td>
      <td>Administrative</td>
      <td>6 years</td>
      <td>MORTGAGE</td>
      <td>59280.0</td>
      <td>Source Verified</td>
      <td>Dec-2018</td>
      <td>Late (16-30 days)</td>
      <td>n</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>debt_consolidation</td>
      <td>Debt consolidation</td>
      <td>490xx</td>
      <td>MI</td>
      <td>10.51</td>
      <td>0</td>
      <td>Apr-2011</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>8</td>
      <td>0</td>
      <td>4599</td>
      <td>19.1%</td>
      <td>13</td>
      <td>w</td>
      <td>4456.17</td>
      <td>4456.17</td>
      <td>895.96</td>
      <td>895.96</td>
      <td>...</td>
      <td>0.0</td>
      <td>0</td>
      <td>0</td>
      <td>136927</td>
      <td>11749</td>
      <td>13800</td>
      <td>10000</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>3</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>23000</td>
      <td>23000</td>
      <td>23000.0</td>
      <td>60 months</td>
      <td>20.89%</td>
      <td>620.81</td>
      <td>D</td>
      <td>D4</td>
      <td>Operator</td>
      <td>5 years</td>
      <td>RENT</td>
      <td>68107.0</td>
      <td>Source Verified</td>
      <td>Dec-2018</td>
      <td>Current</td>
      <td>n</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>debt_consolidation</td>
      <td>Debt consolidation</td>
      <td>672xx</td>
      <td>KS</td>
      <td>0.52</td>
      <td>0</td>
      <td>Feb-1997</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>5</td>
      <td>0</td>
      <td>976</td>
      <td>13%</td>
      <td>10</td>
      <td>w</td>
      <td>21597.84</td>
      <td>21597.84</td>
      <td>3686.64</td>
      <td>3686.64</td>
      <td>...</td>
      <td>0.0</td>
      <td>0</td>
      <td>0</td>
      <td>7500</td>
      <td>976</td>
      <td>3300</td>
      <td>0</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>4</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>8000</td>
      <td>8000</td>
      <td>8000.0</td>
      <td>36 months</td>
      <td>23.40%</td>
      <td>311.35</td>
      <td>E</td>
      <td>E1</td>
      <td>Manager</td>
      <td>10+ years</td>
      <td>OWN</td>
      <td>43000.0</td>
      <td>Source Verified</td>
      <td>Dec-2018</td>
      <td>Current</td>
      <td>n</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>debt_consolidation</td>
      <td>Debt consolidation</td>
      <td>357xx</td>
      <td>AL</td>
      <td>33.24</td>
      <td>0</td>
      <td>Jan-1995</td>
      <td>0</td>
      <td>NaN</td>
      <td>107.0</td>
      <td>8</td>
      <td>1</td>
      <td>9019</td>
      <td>81.3%</td>
      <td>16</td>
      <td>w</td>
      <td>7021.26</td>
      <td>7021.26</td>
      <td>1852.50</td>
      <td>1852.50</td>
      <td>...</td>
      <td>100.0</td>
      <td>1</td>
      <td>0</td>
      <td>199744</td>
      <td>31078</td>
      <td>2300</td>
      <td>32206</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>N</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
  </tbody>
</table>
<p>5 rows × 144 columns</p>
</div>

```
df[['annual_inc', 'term', 'loan_amnt', 'loan_status', ]].isna().sum()
```

    annual_inc     0
    term           0
    loan_amnt      0
    loan_status    0
    dtype: int64

```
df = df[['annual_inc', 'term', 'loan_amnt', 'loan_status']]
df.head()
```

<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>annual_inc</th>
      <th>term</th>
      <th>loan_amnt</th>
      <th>loan_status</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>280000.0</td>
      <td>36 months</td>
      <td>10000</td>
      <td>Current</td>
    </tr>
    <tr>
      <th>1</th>
      <td>90000.0</td>
      <td>36 months</td>
      <td>4000</td>
      <td>Current</td>
    </tr>
    <tr>
      <th>2</th>
      <td>59280.0</td>
      <td>36 months</td>
      <td>5000</td>
      <td>Late (16-30 days)</td>
    </tr>
    <tr>
      <th>3</th>
      <td>68107.0</td>
      <td>60 months</td>
      <td>23000</td>
      <td>Current</td>
    </tr>
    <tr>
      <th>4</th>
      <td>43000.0</td>
      <td>36 months</td>
      <td>8000</td>
      <td>Current</td>
    </tr>
  </tbody>
</table>
</div>

```
df['loan_amnt'].hist(bins=20)
```

```
income_cuts = [0, 20000, 40000, 60000, 80000, 100000, 120000, 140000, 160000, 180000, 200000, 1000000000000000]
income_labels = ['0-20k', '20k-40k', '40k-60k', '60k-80k', '80k-100k', '100k-120k', '120k-140k', '140k-160k', '160k-180k', '180k-200k', '200k+']
df['annual_income_cuts'] = pd.cut(df['annual_inc'], income_cuts, labels=income_labels)
```

```
df['annual_income_cuts'].value_counts()
```

    40k-60k      31414
    60k-80k      26737
    20k-40k      20215
    80k-100k     17907
    100k-120k    10137
    120k-140k     6096
    140k-160k     4338
    200k+         4066
    0-20k         3023
    160k-180k     2478
    180k-200k     1769
    Name: annual_income_cuts, dtype: int64

```

```

## Resources

- [Interactive visualize the Chi-Squared test](https://homepage.divms.uiowa.edu/~mbognar/applets/chisq.html)
- [Calculation of Chi-Squared test statistic](https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test)
- [Visualization of a confidence interval generated by R code](https://commons.wikimedia.org/wiki/File:Confidence-interval.svg)
- [Expected value of a squared standard normal](https://math.stackexchange.com/questions/264061/expected-value-calculation-for-squared-normal-distribution) (it's 1 - which is why the expected value of a Chi-Squared with $n$ degrees of freedom is $n$, as it's the sum of $n$ squared standard normals)