{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Moments: Mean, Variance, Skew, Kurtosis"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a roughly normal-distributed random set of data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "vals = np.random.normal(0, 0.5, 10000)\n",
    "\n",
    "plt.hist(vals, 50)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first moment is the mean; this data should average out to about 0:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0007439085450350233"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(vals)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The second moment is the variance:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.24677424132556297"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.var(vals)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The third moment is skew - since our data is nicely centered around 0, it should be almost 0:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.003476674540831533"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import scipy.stats as sp\n",
    "sp.skew(vals)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The fourth moment is \"kurtosis\", which describes the shape of the tail. For a normal distribution, this is 0:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.07627510862675502"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.kurtosis(vals)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Activity"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Understanding skew: change the normal distribution to be centered around 10 instead of 0, and see what effect that has on the moments.\n",
    "\n",
    "The skew is still near zero; skew is associated with the shape of the distribution, not its actual offset in X."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}