{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Exploring Linear Trends\n", "> We start the course with an initial exploration of linear relationships, including some motivating examples of how linear models are used, and demonstrations of data visualization methods from matplotlib. We then use descriptive statistics to quantify the shape of our data and use correlation to quantify the strength of linear relationships between two variables. This is the Summary of lecture \"Introduction to Linear Modeling in Python\", via datacamp.\n", "\n", "- toc: true \n", "- badges: true\n", "- comments: true\n", "- author: Chanseok Kang\n", "- categories: [Python, Datacamp, Statistics, Modeling]\n", "- image: images/plot_cdfs.png" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "plt.rcParams['figure.figsize'] = (10, 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction to Modeling Data\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Reasons for Modeling: Interpolation\n", "One common use of modeling is interpolation to determine a value \"inside\" or \"in between\" the measured data points. In this exercise, you will make a prediction for the value of the dependent variable ```distances``` for a given independent variable ```times``` that falls \"in between\" two measurements from a road trip, where the distances are those traveled for the given elapse times." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "times = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0]\n", "distances = [0.00, 44.05, 107.16, 148.44, 196.40, 254.44, 300.00]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The distance traveled is 125.0\n" ] } ], "source": [ "# Compute the total change in distance and change in time\n", "total_distance = distances[-1] - distances[0]\n", "total_time = times[-1] - times[0]\n", "\n", "# Estimate the slope of the data from the ratio of the changes\n", "average_speed = total_distance / total_time\n", "\n", "# Predict the distance traveled for a time not measured\n", "elapse_time = 2.5\n", "distance_traveled = average_speed * elapse_time\n", "print(\"The distance traveled is {}\".format(distance_traveled))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Reasons for Modeling: Extrapolation\n", "Another common use of modeling is **extrapolation** to estimate data values \"outside\" or \"beyond\" the range (min and max values of ```time```) of the measured data. In this exercise, we have measured distances for times 0 through 5 hours, but we are interested in estimating how far we'd go in 8 hours. Using the same data set from the previous exercise, we have prepared a linear model ```distance = model(time)```. Use that ```model()``` to make a prediction about the distance traveled for a time much larger than the other times in the measurements." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def model(time, a0=0, a1=50):\n", " \"\"\"\n", " Purpose: \n", " For a given value of time, compute the model value for distance\n", " Args:\n", " time (float, np.ndarray): elapse time in units of hours\n", " a0 (float): default=0, coefficient for the Zeroth order term in the model, i.e. a0 + a1*x\n", " a1 (float): default=50, coefficient for the 1st order term in the model, i.e. a0 + a1*x\n", " Returns:\n", " distance (float, np.ndarray): model values corresponding to input time array, \n", " with the same length/size.\n", " \"\"\"\n", " distance = a0 + (a1*time)\n", " return distance" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "400\n", "True\n" ] } ], "source": [ "# Select a time not measured\n", "time = 8\n", "\n", "# Use the model to compute a predicted distance for that time.\n", "distance = model(time)\n", "\n", "# Inspect the value of the predicted distance traveled.\n", "print(distance)\n", "\n", "# Determin if we will make it without refueling\n", "answer = (distance <= 400)\n", "print(answer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Reasons for Modeling: Estimating Relationships\n", "Another common application of modeling is to compare two data sets by building models for each, and then comparing the models. In this exercise, you are given data for a road trip two cars took together. The cars stopped for gas every 50 miles, but each car did not need to fill up the same amount, because the cars do not have the same fuel efficiency (MPG). Complete the function ```efficiency_model(miles, gallons)``` to estimate efficiency as average miles traveled per gallons of fuel consumed. Use the provided dictionaries ```car1``` and ```car2```, which both have keys ```car['miles']``` and ```car['gallons']```." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "car1 = {'gallons': np.array([ 0.03333333, 1.69666667, 3.36 , 5.02333333,\n", " 6.68666667, 8.35 , 10.01333333, 11.67666667,\n", " 13.34 , 15.00333333, 16.66666667]),\n", " 'miles': np.array([ 1. , 50.9, 100.8, 150.7, 200.6, 250.5, 300.4, 350.3,\n", " 400.2, 450.1, 500. ])}\n", "\n", "car2 = {'gallons': np.array([ 0.02 , 1.018, 2.016, 3.014, 4.012, 5.01 , 6.008,\n", " 7.006, 8.004, 9.002, 10. ]),\n", " 'miles': np.array([ 1. , 50.9, 100.8, 150.7, 200.6, 250.5, 300.4, 350.3,\n", " 400.2, 450.1, 500. ])}" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "car2 is the best\n" ] } ], "source": [ "# Complete the function to model the efficiency.\n", "def efficiency_model(miles, gallons):\n", " return np.mean( miles / gallons )\n", "\n", "# Use the function to estimate the efficiency for each car.\n", "car1['mpg'] = efficiency_model(car1['miles'] , car1['gallons'] )\n", "car2['mpg'] = efficiency_model(car2['miles'] , car2['gallons'] )\n", "\n", "# Finish the logic statement to compare the car efficiencies.\n", "if car1['mpg'] > car2['mpg'] :\n", " print('car1 is the best')\n", "elif car1['mpg'] < car2['mpg'] :\n", " print('car2 is the best')\n", "else:\n", " print('the cars have the same efficiency')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing Linear Relationships\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the Data\n", "Everything in python is an object, even modules. Your goal in this exercise is to review the use of the object oriented interfaces to the python library matplotlib in order to visualize measured data in a more flexible and extendable work flow. The general plotting work flow looks like this:\n", "```python\n", "import matplotlib.pyplot as plt \n", "fig, axis = plt.subplots()\n", "axis.plot(x, y, color=\"green\", linestyle=\"--\", marker=\"s\")\n", "plt.show()\n", "```" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "times = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0])\n", "distances = np.array([0.25, 0.93, 2.32, 3.76, 3.88, 4.88, 6.79, 7.38, 7.77, 9.27, 9.77])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Create figure and axis objects using subplots()\n", "fig, axis = plt.subplots()\n", "\n", "# Plort line using the axis.plot() method\n", "line = axis.plot(times, distances, linestyle=' ', marker='o', color='red')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice how linestyle=' ' means no line at all, just markers. Also note that your plot style is different than the context figure; I've hidden some more complex styling with title text and grid lines." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the Model on the Data\n", "Continuing with the same measured data from the previous exercise, your goal is to use a predefined model() and measured data times and measured_distances to compute modeled distances, and then plot both measured and modeled data on the same axis." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def model(x, y, a0=0, a1=1):\n", " \"\"\"\n", " Purpose: \n", " For a given data set, input as two arrays, x and y, \n", " compute the model value for all modeled values 'ym'\n", " Args:\n", " x (float, np.ndarray):\n", " y (float, np.ndarray): \n", " a0 (float): default=0, coefficient for the Zeroth order term in the model, i.e. a0 + a1*x\n", " a1 (float): default=50, coefficient for the 1st order term in the model, i.e. a0 + a1*x\n", " Returns:\n", " ym (float, np.ndarray): model values corresponding to input x array, with the same length/size.\n", " \"\"\"\n", " ym = a0 + (a1*x)\n", " return ym" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlAAAAEvCAYAAACKfv/MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3de5zN1f7H8dei0diMbi7JZG/ddJHcim4aukfUSaEdhUxRUjoVDanDkO6SU+2UlP0jRZejqxOjckoRlYzk1MykFI3kMm4zs35/rGlOLhMzs/f+7pl5Px8Pj2a+s/f3+zGr4W191/ezjLUWEREREdl/1bwuQERERKSiUYASERERKSUFKBEREZFSUoASERERKSUFKBEREZFSUoASERERKaUDYnmxunXr2kAgENVrbNmyhVq1akX1GlJ6Gpf4ozGJTxqX+KMxiT+xGpPFixf/aq2tt7evxTRABQIBFi1aFNVrZGRkkJKSEtVrSOlpXOKPxiQ+aVzij8Yk/sRqTIwx2SV9TbfwREREREpJAUpERESklBSgREREREoppmug9mbnzp2sXr2abdu2ReR8Bx10EJmZmRE5V0WUmJhIcnIyCQkJXpciIiJSaXkeoFavXk1SUhKBQABjTLnPt2nTJpKSkiJQWcVjrSU3N5fVq1fTpEkTr8sRERGptDy/hbdt2zYOO+ywiISnqs4Yw2GHHRax2TwRERHZO88DFKDwFEH6XoqIiETfPgOUMeY5Y8xaY8yyPx071BgzxxjzbdF/D4lumdFljKFXr17Fn+fn51OvXj06d+7sYVX7lpKSEvW+WiIiIrKn/ZmBeh64aLdjQ4H3rbXHAu8XfV5h1apVi2XLlrF161YA5syZQ6NGjTypJT8/35PrioiIyP7bZ4Cy1n4ArN/tcFdgStHHU4DLIlxXicLhMIFAgGrVqhEIBAiHwxE578UXX8ybb74JwLRp0+jZs2fx17Zs2ULfvn059dRTadmyJa+//joAWVlZnH322bRq1YpWrVrxn//8B4A1a9bQvn17WrRoQbNmzfjwww8BqF27dvE5X3nlFa677joArrvuOoYMGUKHDh246667Srze1q1b6dGjB82bN6d79+7FgU9ERKTKWL+eI196CTyecCjrU3gNrLVrAKy1a4wx9Ut6oTEmFUgFaNCgARkZGbt8/aCDDmLTpk37ddEZM2YwaNCg4uCQnZ1N//792bZtG1dddRUABQUF+32+P7v00ksZN24c55xzDkuXLqVHjx7MmzePTZs2cd9993H66aczfvx4NmzYQIcOHWjbti01a9Zk1qxZJCYmsmrVKvr168f8+fOZPHkyKSkp3HHHHRQUFJCXl1dc0x//3bp1Kzt37mTTpk3s3LmT5cuX8+qrr1K9enVGjhy51+tNnjyZhIQEFixYwLJlyzj77LPZsmXLHr/fbdu27fF99trmzZvjrqaqTmMSnzQu8UdjEh8SfvuN5FdeodFrr3F0Xh5Ljz2WDa1aeVZP1NsYWGtDQAigTZs2dve9azIzM/e77cCoUaP2mHXZunUro0aNol+/fkDZ2xicfvrprF69mtmzZ9O5c2d8Ph8HHHAASUlJZGRk8M477zBx4kQAduzYwW+//cYRRxzBzTffzNKlS6levTorV64kKSmJs846i759+1KtWjUuu+wyWrRoUXydP2qrWbMmCQkJJCUlkZCQQM+ePTn44IMBSrzewoULueWWW0hKSuL000+nefPm1KpVa4/fb2JiIi1btiz19yCatJdU/NGYxCeNS/zRmHhszRp48EF46inYtg2uuorPLriAU/v29bSssgaoX4wxDYtmnxoCayNZVElycnJKdby0unTpwt///ncyMjLIzc0tPm6tZebMmTRt2nSX19977700aNCAL774gsLCQhITEwFo3749H3zwAW+++Sa9evXijjvuoHfv3rs8Ibd7q4E/7ypd0vVAT9mJiEgVkZMDDzwAkya523XBINx9NzRtypY4mBEsaxuDN4Briz6+Fng9MuX8tcaNG5fqeGn17duXe+65h5NPPnmX4xdeeCETJkzAWgvAkiVLAPj9999p2LAh1apV48UXX6SgoABwtxbr169P//796devH59//jngbmFmZmZSWFjIq6++WmIdJV2vffv2xWu+li1bxpdffhmR37eIiEjc+O476N8fjjkGQiHo3RtWroQpUwgvWkQgEKBjx44RXQddFvvTxmAa8DHQ1Biz2hjTD7gfON8Y8y1wftHnUZeeno7P59vlmM/nIz09PSLnT05OZvDgwXscHzFiBDt37qR58+Y0a9aMESNGADBw4ECmTJlCu3btWLlyZfEsUkZGBi1atKBly5bMnDmz+Jz3338/nTt3pmPHjjRs2LDEOkq6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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Pass times and measured distances into model\n", "model_distances = model(times, distances)\n", "\n", "# Create figure and axis objects and call axis.plot() twice to plot data and model distances versus times\n", "fig, axis = plt.subplots()\n", "axis.plot(times, distances, linestyle=' ', marker='o', color='black', label='Measured');\n", "axis.plot(times, model_distances, linestyle='-', marker=None, color='red', label='Modeled');\n", "\n", "# Add grid lines and a legend to your plot\n", "axis.grid(True);\n", "axis.legend(loc='best');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visually Estimating the Slope & Intercept\n", "Building linear models is an automated way of doing something we can roughly do \"manually\" with data visualization and a lot of trial-and-error. The visual method is not the most efficient or precise method, but it does illustrate the concepts very well, so let's try it!\n", "\n", "Given some measured data, your goal is to guess values for slope and intercept, pass them into the model, and adjust your guess until the resulting model fits the data. \n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "xd = np.array([2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0])\n", "yd = np.array([4.25, 4.43, 5.32, 6.26, 5.88, 6.38, 7.79, 7.88, 7.77, 8.77, 8.77])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def model(a0=2, a1=1):\n", " \"\"\"\n", " Purpose: \n", " For a given data set, input as two arrays, x and y, \n", " compute the model value for all modeled values 'ym'\n", " Args:\n", " trial_intercept (float): default=0, coefficient for the Zeroth order term in the model, \n", " i.e. a0 + a1*x\n", " trial_slope (float): default=50, coefficient for the 1st order term in the model, i.e. a0 + a1*x\\n Returns:\\n xm (float, np.ndarray): model values for independent variable\\n ym (float, np.ndarray): model values of depedent variable, with the same length/size as xm.\n", " \"\"\"\n", " xm = np.linspace(-5, 15, 41)\n", " ym = a0 + (a1*xm)\n", " return xm, ym" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def plot_data_and_model(xd, yd, xm, ym):\n", " \"\"\"\n", " Purpose:\n", " Plot both the measured data and the model on the same figure.\n", " Measured data will be black point markers with no line\n", " Modeled data will be a solid red line with no point markers\n", " Args:\n", " xd (np.ndarray): numpy array of indendent variable, measured data\n", " yd (np.ndarray): numpy array of dendent variable, measured data\n", " xm (np.ndarray): numpy array of indendent variable, model data\n", " ym (np.ndarray): numpy array of dendent variable, model data\n", " Returns:\n", " fig (plt.figure): matplotlib figure object\n", " \"\"\"\n", " from matplotlib.ticker import MultipleLocator\n", " fig, axis = plt.subplots()\n", " axis.plot(xd, yd, color=\"black\", linestyle=\" \", marker=\"o\", label=\"Measured\")\n", " axis.plot(xm, ym, color=\"red\", linestyle=\"-\", marker=None, label=\"Modeled\")\n", " axis.axvline(0, color='black')\n", " axis.axhline(0, color='black')\n", " axis.xaxis.set_major_locator(MultipleLocator(5.0))\n", " axis.xaxis.set_minor_locator(MultipleLocator(1.0))\n", " axis.yaxis.set_major_locator(MultipleLocator(5.0))\n", " axis.yaxis.set_minor_locator(MultipleLocator(1.0))\n", " axis.set_xlim([-11, 11])\n", " axis.set_ylim([-11, 11])\n", " axis.grid(True, which=\"both\")\n", " axis.legend(loc=2)\n", " return fig" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAEvCAYAAACZqb84AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXwV1d3H8c8JIBA2FxKMAgkuUGWJKG6PjywquLG4UbAREIS4oAVbqGC0aiGAuGBFbAVFEAIIKqK1KkJZ3OuC5UEoSNlEUXYIQghJzvPHhDRAAgHmztx78n2/XvdF7tx753vuTEJ+mZl7fsZai4iIiIj4Jy7sAYiIiIi4RgWWiIiIiM9UYImIiIj4TAWWiIiIiM9UYImIiIj4TAWWiIiIiM8qhj0AAGNMB6BD1apV+9SrVy/ieQUFBcTFRba2dCUjqBxXMoLKcSUjiJzvv/8eay3169ePWMZ+ruwXV/a9SxlB5UQkw1oq7dzJCVu3ErdvH/knnEDuKaeQV6OGvzkHCWJ7rVixYrO1NqHEB621UXNr2LChDcK8efOUEWU5rmQEleNKRhA5rVq1sqmpqRHN2M+V/eLKvncpI6gcXzP27LF2zBhr69e3Fqxt0cLaN9+08+bO9S/jMILYXsCXtpSaRqcIRURExD+7d8OoUXDGGdC3L9StC+++C//8J3TqBAEc7YsGUXGKUERERGJcdjaMGQNPPw2bNkGbNjB5svevMWGPLnAqsEREROTYbd8Ozz4LzzwD27bBNdfAQw/BZZeFPbJQRX2BtW/fPtavX09OTo5v66xVqxbLli3zbX2xlFGlShXq1q1LpUqVIjQqEREpFzZv9k4FPvcc7NwJHTt6hdWFF4Y9sqgQ9QXW+vXrqVGjBikpKRifDjFmZ2dTI8KfXojGDGstW7ZsYf369TRo0CCCIxMREWf99BM8+ST85S+wZw/ccgtkZEBqatgjiypRf6VZTk4Op5xyim/FVXlmjOGUU07x9WigiIiUE+vXw29/Cw0aeEeubroJliyB6dNVXJUg6o9gASqufKRtKSIiR2X1ahgxAl5+GayF7t1h8GA466ywRxbVfDmCZYwZb4zZaIxZUmzZycaYD4wx3xX+e5IfWWEwxtCtW7ei+3l5eSQkJNC+ffsQR3VkrVu35ssvvwx7GCIiEotWrICePeHss2HCBOjdG777Dl56ScVVGfh1inACcM1BywYBc621ZwNzC+/HpGrVqrFkyRL27NkDwAcffMDpp58eyljy8vJCyRURkXLi22/hN7+Bc86BV1+F++6DVavg+echJSXs0cUMXwosa+1CYOtBizsBEwu/ngjc4EfWkWRlZZGSkkJcXBwpKSlkZWX5st5rr72Wd955B4CpU6dy6623Fj32yy+/0KtXLy688EKaN2/OrFmzAFizZg2XX345559/Pueffz6ffPIJABs2bKBly5acd955NGnShA8//BCA6tWrF63ztdde4/bbbwfg9ttv53e/+x1t2rThgQceKMpr1arVAXl79uyha9euNGvWjC5duhQVhCIiIke0aBGN//hHaNIE3noLBgzwTg+OGgUhHVSIZcab6d2HFRmTAvzNWtuk8P52a+2JxR7fZq095DShMSYdSAdISEi4YPr06Qc8XqtWLc4q46HI6dOnc9999x1QWFStWpXRo0fz61//umhZfn4+FSpUKPN7S0pK4oMPPuDxxx9n3LhxXHnllYwYMYJnn32WGTNm8Nhjj9GoUSO6du3K9u3badOmDQsWLKBixYrExcVRpUoVVq5cyR133MGCBQsYPXo0OTk5DBw4kPz8fHbv3k2NGjVISkpiw4YNALz55pu89957/PWvf+Wuu+5iy5YtTJs2jQoVKhTlde7cmezsbNq0acNHH33Eyy+/zNKlS3n++edZsmQJl19+OXPnzuX8888/4P2sXLmSHTt2lPn979q164DiLxJcyQgqx5WMIHL69+9Pfn4+o0ePjljGfq7sF1f2vUsZkcypsXQpyZMnU/vTT9lXrRo/3HQT62++mbxatXzPgtjfXsW1adPmK2ttixIfLK2HztHegBRgSbH72w96fNuR1lFSL8KlS5eWuSdQcnKyBQ65JScnH/C8nTt3lnmd1lpbrVo1a621F1xwgR0/frwdPHiwnTdvnr3++uuLljdu3Nimpqba1NRUW69ePfvFF1/Y7du329tuu802adLEpqam2qpVq1prrV2wYIE988wz7SOPPGIXLVp0SI611s6YMcP26NHDWmttjx497IQJE4oe25/XtGnTorylS5faTp062bnFejw1b97cfvHFF4e8n6PZptbGYP+rEDOCynElI4gc9SKMzoygclzJiEjOwoXWtm3r9Qk8+WRrhw61H779tr8Z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KY21MHeuV0wtXAiJiTByJNx1F9SoEfboREQkiqnAEjmYtfDuu96pwE8/hdNO81rb9OkD8fFhj05ERGKACiyR/QoKYNYsr7D6+mtITvZmYO/ZEypXDnt0IiISQ+LCHoBI6PLz4dVXvfY1N93k9QocPx6++847HajiSkREjpIKLCm/8vLglVegcWPo2tUrtCZPhmXLvKNWlSqFPUIREYlROkUo5U9uLkyc6M28vnq1d+Rqxgzv6FWc/uYQEZHjp98mUm7E5ebCmDFw1lmQng61a8Nbb8GiRXDLLSquRETENzqCJeXD229z8e23w9atcNllMG4ctGsHxoQ9MhERcZB6ESojKnIinVF9xQpSxoxhfc+ebE9NjWhh5cL2CiojiBz1IozOjKByXMkIKseVjKBy1IvwIK70WnKpn5MrGUHluJIRRI56EUZnRlA5rmQEleNKRlA5HKYXoS46EREREfGZCiwRERERn6nAEhEREfGZCiwRERERn6nAEhEREfGZCiwRERERn6nAEhEREfGZCiwRERERn6nAEhEREfGZCiwRERERn6kXoTKiIseVjKByXMkIIke9CKMzI6gcVzKCynElI6gc9SI8iCu9llzq5+RKRlA5rmQEkaNehNGZEVSOKxlB5biSEVQO6kUoIiIiEhwVWCIiIiI+U4ElIiIi4jMVWCIiIiI+U4ElIiIi4jMVWCIiIiI+U4ElIiIi4rOIFVjGmEeNMT8YY74pvF0XqSwRERGRaFIxwusfZa19MsIZIiIiIlFFpwhFREREfBbpAuteY8xiY8x4Y8xJEc4SERERiQrH1ezZGDMHOLWEhzKAz4DNgAWGAEnW2l4lrCMdSAdISEi4YPr06cc8nrJypZmlSw0zXckIKseVjCBy1Ow5OjOCynElI6gcVzKCygm92TOQAiw50vPU7Dn6MoLKcSUjqBxXMoLIUbPn6MwIKseVjKByXMkIKocwmj0bY5KK3b0RWBKpLBEREZFoEslPEY40xpyHd4pwDXBnBLNEREREokbECixrbbdIrVtEREQkmmmaBhERERGfqcASERER8ZkKLBERERGfqcASERER8ZkKLBERERGfqcASERER8ZkKLBERERGfHVcvQt8GYUwHoENSUlKfKVOmRDzPlV5LLvVzciUjqBxXMoLIUS/C6MwIKseVjKByXMkIKif0XoRlvakXYfRlBJXj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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Look at the plot data and guess initial trial values\n", "trial_slope = 1\n", "trial_intercept = 2\n", "\n", "# input thoses guesses into the model function to compute the model values.\n", "xm, ym = model(trial_intercept, trial_slope)\n", "\n", "# Compare your your model to the data with the plot function\n", "fig = plot_data_and_model(xd, yd, xm, ym)\n", "plt.show()\n", "\n", "# Repeat the steps above until your slope and intercept guess makes the model line up with the data.\n", "final_slope = 1\n", "final_intercept = 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Quantifying Linear Relationships\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Mean, Deviation, & Standard Deviation\n", "The mean describes the center of the data. The standard deviation describes the spread of the data. But to compare two variables, it is convenient to normalize both. In this exercise, you are provided with two arrays of data, which are highly correlated, and you will compute and visualize the normalized deviations of each array.\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "x = np.array([ 3.20141089, 3.57332076, 4.2284669 , 4.27233051, 4.49370529,\n", " 4.5713193 , 4.74611933, 4.9143694 , 5.06416613, 5.12046366,\n", " 5.1332596 , 5.1382451 , 5.19463348, 5.30012277, 5.32111385,\n", " 5.361098 , 5.3622485 , 5.42139975, 5.55601804, 5.56564872,\n", " 5.57108737, 5.60910021, 5.74438063, 5.82636432, 5.85993128,\n", " 5.90529103, 5.98816951, 6.00284592, 6.2829785 , 6.28362732,\n", " 6.33858905, 6.3861864 , 6.41291216, 6.57380586, 6.68822271,\n", " 6.73736858, 6.9071052 , 6.92746243, 6.97873601, 6.99734545,\n", " 7.0040539 , 7.17582904, 7.26593626, 7.49073203, 7.49138963,\n", " 7.65143654, 8.18678609, 8.20593008, 8.23814334, 8.39236527])\n", "\n", "y = np.array([ 146.48264883, 167.75876162, 229.73232314, 205.23686657,\n", " 224.99693822, 239.79378267, 246.65838372, 264.14477475,\n", " 268.91257002, 267.25180588, 248.54953839, 265.25831322,\n", " 263.03153004, 251.08035094, 280.93733241, 276.53088378,\n", " 268.59007072, 268.62252076, 265.21874 , 280.37743899,\n", " 283.47297931, 271.72788298, 299.42217399, 279.79758387,\n", " 270.70401032, 306.18168601, 295.17313188, 298.81898515,\n", " 305.35499931, 297.3187572 , 330.10944498, 312.07619563,\n", " 338.08560914, 337.16702908, 331.10617501, 325.46645358,\n", " 337.66440893, 333.64162871, 370.85149057, 351.59390525,\n", " 362.27985309, 345.48425572, 365.1976818 , 386.90415177,\n", " 371.05186831, 393.39852867, 397.95134137, 395.98005292,\n", " 415.89087335, 415.63691073])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def plot_cdfs(dx, dy, zx, xy):\n", " array_index = list(range(len(x)))\n", " fig, axes = plt.subplots(nrows=2, ncols=1)\n", " axes[0].plot(array_index, dx, color=\"blue\")\n", " axes[0].plot(array_index, dy, color=\"red\")\n", " axes[0].set_ylabel(\"Deviations of X and Y\")\n", " axes[1].plot(array_index, zx, color=\"blue\")\n", " axes[1].plot(array_index, zy, color=\"red\")\n", " axes[1].set_ylabel(\"Normalized Deviations of X and Y\")\n", " axes[1].set_xlabel(\"Array Index\")\n", " plt.tight_layout" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Compute the deviations by subtracting the mean offset\n", "dx = x - np.mean(x)\n", "dy = y - np.mean(y)\n", "\n", "# Normalize the data by dividing the deviations by the standard deviation\n", "zx = dx / np.std(x)\n", "zy = dy / np.std(y)\n", "\n", "# Plot comparison of the raw data and the normalized data\n", "fig = plot_cdfs(dx, dy, zx, zy)\n", "plt.savefig('../images/plot_cdfs.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Covariance vs Correlation\n", "Covariance is a measure of whether two variables change (\"vary\") together. It is calculated by computing the products, point-by-point, of the deviations seen in the previous exercise, ```dx[n]*dy[n]```, and then finding the average of all those products.\n", "\n", "Correlation is in essence the normalized covariance. In this exercise, you are provided with two arrays of data, which are highly correlated, and you will visualize and compute both the covariance and the correlation." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def plot_normalized_deviations(zx, zy):\n", " fig, axis = plt.subplots()\n", " lines = axis.plot(zx * zy, color=\"purple\")\n", " axis.axhline(0, color=\"black\", linestyle=\"--\")\n", " axis.set_ylabel(\"Product of Normalized Deviations\")\n", " axis.set_xlabel(\"Array Index\")\n", " axis.set_title(\"Correlation = np.mean(zx*zy) = {:0.2f}\".format(correlation))\n", " plt.show()\n", " return fig" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Covariance: 69.67981827138166\n", "Correlation: 0.9824333697735637\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Compute the covariance from the deviations\n", "dx = x - np.mean(x)\n", "dy = y - np.mean(y)\n", "covariance = np.mean(dx * dy)\n", "print(\"Covariance: \", covariance)\n", "\n", "# Compute the correlation from the normalized deviations.\n", "zx = dx / np.std(x)\n", "zy = dy / np.std(y)\n", "correlation = np.mean(zx * zy)\n", "print(\"Correlation: \", correlation)\n", "\n", "# Plot the normalized deviations for visual inspection\n", "fig = plot_normalized_deviations(zx, zy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Correlation Strength\n", "Intuitively, we can look at the plots provided and \"see\" whether the two variables seem to \"vary together\".\n", "\n", "Recall that deviations differ from the mean, and we normalized by dividing the deviations by standard deviation. In this exercise you will compare the 3 data sets by computing correlation, and determining which data set has the most strongly correlated variables x and y. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "data_sets = {'A': {'correlation': np.nan,\n", " 'x': np.array([ 2.55041235, 2.60839969, 2.79619981, 2.84385271, 3.15184751,\n", " 3.21906477, 3.23462037, 3.33976744, 3.47394544, 3.56125803,\n", " 3.67786134, 3.7339611 , 3.86496991, 4.10019474, 4.24786673,\n", " 4.24920164, 4.29714059, 4.31952159, 4.41315702, 4.41783781,\n", " 4.42072788, 4.42420154, 4.62362038, 4.63538281, 4.70730828,\n", " 4.7073288 , 4.71777962, 4.82716962, 4.85543965, 4.98312847,\n", " 5.08441026, 5.13865324, 5.21421035, 5.24607654, 5.26107949,\n", " 5.30245284, 5.39280917, 5.42952286, 5.46962252, 5.62089269,\n", " 5.67820005, 5.80961067, 5.92308322, 5.95929341, 6.02818114,\n", " 6.32140278, 6.83206096, 6.90378732, 6.97401602, 7.31534773]),\n", " 'y': np.array([ 5.18184568, 5.12052882, 5.42316911, 5.84062449,\n", " 6.5614449 , 6.67094956, 6.25943637, 6.60223178,\n", " 7.03070673, 7.36640234, 7.23592912, 7.42150745,\n", " 7.45335607, 7.90133782, 8.69886493, 8.83746328,\n", " 8.57627865, 8.88992641, 8.91672304, 8.67439568,\n", " 8.93180467, 9.23291221, 9.23828425, 9.66192654,\n", " 8.75968029, 9.62013323, 9.45732102, 9.57958741,\n", " 9.73381949, 9.46936471, 10.11390254, 10.36658462,\n", " 10.79789421, 10.36258554, 10.32003559, 10.47946642,\n", " 11.01446886, 10.9412335 , 10.80680499, 11.37010224,\n", " 11.3806695 , 11.86138259, 11.67065318, 11.83667129,\n", " 11.95833524, 12.27692683, 13.73815199, 13.87283846,\n", " 13.9493104 , 14.57204868])},\n", " 'B': {'correlation': np.nan,\n", " 'x': np.array([ 2.19664381, 2.406278 , 2.47343147, 2.72871597, 3.06636806,\n", " 3.51128038, 3.87855402, 4.09926408, 4.18003832, 4.20434562,\n", " 4.29194259, 4.41336839, 4.50269971, 4.58240329, 4.59650649,\n", " 4.60918513, 4.74669209, 4.77111432, 4.82900646, 4.84738553,\n", " 5.00264796, 5.01962047, 5.02286149, 5.04517742, 5.09524948,\n", " 5.15589119, 5.24177672, 5.26908573, 5.30974025, 5.36136493,\n", " 5.42179707, 5.50681676, 5.58929395, 5.69179864, 5.84444261,\n", " 5.94426748, 6.05209339, 6.07448552, 6.07964661, 6.10895368,\n", " 6.19165516, 6.23993253, 6.30742282, 6.30947322, 6.32371148,\n", " 6.43754466, 6.64768944, 6.65144774, 6.79088371, 7.98870064]),\n", " 'y': np.array([ 7.75732279, -0.97068431, -0.66103018, 5.05375913,\n", " 3.93976632, 6.44408273, 9.17318937, 8.05647607,\n", " 10.62302986, 14.59132646, 4.68693984, 8.54535728,\n", " 10.23727485, 8.33081153, 13.32821592, -0.38344428,\n", " 17.61579867, 4.97170349, 10.50554646, 12.51365356,\n", " 6.86355506, 11.88747988, 12.86263588, 12.18438671,\n", " 6.48548172, 18.34315419, 11.39140361, 5.92753502,\n", " 13.14739828, 10.8807806 , 12.70116343, -3.24043311,\n", " 16.46301037, 11.99411949, 12.34700338, 10.16815219,\n", " 15.17366173, 16.0886504 , 13.24263662, 17.78585212,\n", " 12.70267957, 10.88000673, 8.5034434 , 10.28007359,\n", " 15.91379868, 12.5473011 , 11.91631483, 15.41604806,\n", " 9.30581229, 13.92987605])},\n", " 'C': {'correlation': np.nan,\n", " 'x': np.array([ 1.50176362, 1.96665095, 2.78558362, 2.84041313, 3.11713161,\n", " 3.21414912, 3.43264917, 3.64296175, 3.83020766, 3.90057957,\n", " 3.9165745 , 3.92280638, 3.99329185, 4.12515346, 4.15139231,\n", " 4.2013725 , 4.20281062, 4.27674969, 4.44502255, 4.45706091,\n", " 4.46385921, 4.51137526, 4.68047579, 4.7829554 , 4.8249141 ,\n", " 4.88161379, 4.98521188, 5.00355739, 5.35372312, 5.35453415,\n", " 5.42323631, 5.482733 , 5.5161402 , 5.71725733, 5.86027839,\n", " 5.92171072, 6.13388149, 6.15932804, 6.22342001, 6.24668181,\n", " 6.25506737, 6.46978631, 6.58242032, 6.86341504, 6.86423703,\n", " 7.06429567, 7.73348261, 7.7574126 , 7.79767917, 7.99045658]),\n", " 'y': np.array([-17.70183793, -12.68730947, 33.47056284, -7.0881775 ,\n", " 6.7091949 , 23.53735376, 21.11660059, 35.3641024 ,\n", " 31.59072152, 24.91144186, -4.53019043, 20.56341545,\n", " 13.01493562, -12.96994045, 30.97956936, 21.31852956,\n", " 9.13346253, 4.82402639, -10.28277321, 12.10650699,\n", " 16.42274434, -4.27572923, 27.95621636, -7.98933795,\n", " -24.3197774 , 26.39886103, 3.51656715, 7.99064142,\n", " -2.69282132, -14.98633586, 30.93027062, -0.05643774,\n", " 37.60752021, 24.35144564, 6.68442643, -5.53101698,\n", " 0.5483712 , -7.08171402, 45.84065377, 15.1244233 ,\n", " 30.91342343, -7.33806017, 16.06140272, 32.57262109,\n", " 8.36830187, 30.62642269, -1.88612137, -6.30071951,\n", " 21.66576814, 9.91409021])}}" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(3, 1, figsize=(5, 10))\n", "\n", "axs[0].scatter(data_sets['A']['x'], data_sets['A']['y']);\n", "axs[0].set_ylim([-20, 20]);\n", "axs[0].axhline(0, linestyle='--');\n", "axs[0].grid(True);\n", "axs[0].set_title('Dataset A, Correlation = ?');\n", "axs[1].scatter(data_sets['B']['x'], data_sets['B']['y']);\n", "axs[1].set_ylim([-20, 20]);\n", "axs[1].axhline(0, linestyle='--');\n", "axs[1].grid(True);\n", "axs[1].set_title('Dataset B, Correlation = ?');\n", "axs[2].scatter(data_sets['C']['x'], data_sets['C']['y']);\n", "axs[2].set_ylim([-20, 20]);\n", "axs[2].axhline(0, linestyle='--');\n", "axs[2].grid(True);\n", "axs[2].set_title('Dataset C, Correlation = ?');" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "data set A has correlation 1.00\n", "data set B has correlation 0.54\n", "data set C has correlation 0.09\n" ] } ], "source": [ "# Complete the function that will compute correlation.\n", "def correlation(x,y):\n", " x_dev = x - np.mean(x)\n", " y_dev = y - np.mean(y)\n", " x_norm = x_dev / np.std(x)\n", " y_norm = y_dev / np.std(y)\n", " return np.mean(x_norm * y_norm)\n", "\n", "# Compute and store the correlation for each data set in the list.\n", "for name, data in data_sets.items():\n", " data['correlation'] = correlation(data['x'], data['y'])\n", " print('data set {} has correlation {:.2f}'.format(name, data['correlation']))\n", "\n", "# Assign the data set with the best correlation.\n", "best_data = data_sets['A']" ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 4 }