{ "cells": [ { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from datascience import *\n", "from datetime import date\n", "import matplotlib\n", "%matplotlib inline\n", "import matplotlib.pyplot as plots\n", "default_dpi = plots.rcParamsDefault['figure.dpi']" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x y y2 -y -y2 y0
0 0 0 0 0 0
1 1 2 -1 -2 0
2 2 4 -2 -4 0
3 3 6 -3 -6 0
4 4 8 -4 -8 0
5 5 10 -5 -10 0
" ], "text/plain": [ "x | y | y2 | -y | -y2 | y0\n", "0 | 0 | 0 | 0 | 0 | 0\n", "1 | 1 | 2 | -1 | -2 | 0\n", "2 | 2 | 4 | -2 | -4 | 0\n", "3 | 3 | 6 | -3 | -6 | 0\n", "4 | 4 | 8 | -4 | -8 | 0\n", "5 | 5 | 10 | -5 | -10 | 0" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "example = Table().with_columns([\n", " \"x\", [0, 1, 2, 3, 4, 5],\n", " \"y\", [0, 1, 2, 3, 4, 5],\n", " \"y2\", [0, 2, 4, 6, 8, 10],\n", " \"-y\", [0, -1, -2, -3, -4, -5],\n", " \"-y2\", [0, -2, -4, -6, -8, -10],\n", " \"y0\", [0, 0, 0, 0, 0, 0]\n", "\n", "])\n", "example" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "example.scatter(\"x\")" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: RuntimeWarning: invalid value encountered in true_divide\n", " \n" ] }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x y y2 -y -y2 y0 x (standard units) y (standard units) y2 (standard units) -y (standard units) -y2 (standard units) y0 (standard units)
0 0 0 0 0 0 -1.46385 -1.46385 -1.46385 1.46385 1.46385 nan
1 1 2 -1 -2 0 -0.87831 -0.87831 -0.87831 0.87831 0.87831 nan
2 2 4 -2 -4 0 -0.29277 -0.29277 -0.29277 0.29277 0.29277 nan
3 3 6 -3 -6 0 0.29277 0.29277 0.29277 -0.29277 -0.29277 nan
4 4 8 -4 -8 0 0.87831 0.87831 0.87831 -0.87831 -0.87831 nan
5 5 10 -5 -10 0 1.46385 1.46385 1.46385 -1.46385 -1.46385 nan
" ], "text/plain": [ "x | y | y2 | -y | -y2 | y0 | x (standard units) | y (standard units) | y2 (standard units) | -y (standard units) | -y2 (standard units) | y0 (standard units)\n", "0 | 0 | 0 | 0 | 0 | 0 | -1.46385 | -1.46385 | -1.46385 | 1.46385 | 1.46385 | nan\n", "1 | 1 | 2 | -1 | -2 | 0 | -0.87831 | -0.87831 | -0.87831 | 0.87831 | 0.87831 | nan\n", "2 | 2 | 4 | -2 | -4 | 0 | -0.29277 | -0.29277 | -0.29277 | 0.29277 | 0.29277 | nan\n", "3 | 3 | 6 | -3 | -6 | 0 | 0.29277 | 0.29277 | 0.29277 | -0.29277 | -0.29277 | nan\n", "4 | 4 | 8 | -4 | -8 | 0 | 0.87831 | 0.87831 | 0.87831 | -0.87831 | -0.87831 | nan\n", "5 | 5 | 10 | -5 | -10 | 0 | 1.46385 | 1.46385 | 1.46385 | -1.46385 | -1.46385 | nan" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def standard_units(nums):\n", " return (nums - np.mean(nums)) / np.std(nums)\n", "\n", "example_standard = example.with_columns([\n", " \"x (standard units)\", standard_units(example.column(\"x\")),\n", " \"y (standard units)\", standard_units(example.column(\"y\")),\n", " \"y2 (standard units)\", standard_units(example.column(\"y2\")),\n", " \"-y (standard units)\", standard_units(example.column(\"-y\")),\n", " \"-y2 (standard units)\", standard_units(example.column(\"-y2\")),\n", " \"y0 (standard units)\", standard_units(example.column(\"y0\"))\n", "\n", "\n", "])\n", "example_standard" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x y y2 -y -y2 x (standard units) y (standard units) y2 (standard units) -y (standard units) -y2 (standard units) x * y x * y2 x * -y x * -y2
0 0 0 0 0 -1.46385 -1.46385 -1.46385 1.46385 1.46385 2.14286 2.14286 -2.14286 -2.14286
1 1 2 -1 -2 -0.87831 -0.87831 -0.87831 0.87831 0.87831 0.771429 0.771429 -0.771429 -0.771429
2 2 4 -2 -4 -0.29277 -0.29277 -0.29277 0.29277 0.29277 0.0857143 0.0857143 -0.0857143 -0.0857143
3 3 6 -3 -6 0.29277 0.29277 0.29277 -0.29277 -0.29277 0.0857143 0.0857143 -0.0857143 -0.0857143
4 4 8 -4 -8 0.87831 0.87831 0.87831 -0.87831 -0.87831 0.771429 0.771429 -0.771429 -0.771429
5 5 10 -5 -10 1.46385 1.46385 1.46385 -1.46385 -1.46385 2.14286 2.14286 -2.14286 -2.14286
" ], "text/plain": [ "x | y | y2 | -y | -y2 | x (standard units) | y (standard units) | y2 (standard units) | -y (standard units) | -y2 (standard units) | x * y | x * y2 | x * -y | x * -y2\n", "0 | 0 | 0 | 0 | 0 | -1.46385 | -1.46385 | -1.46385 | 1.46385 | 1.46385 | 2.14286 | 2.14286 | -2.14286 | -2.14286\n", "1 | 1 | 2 | -1 | -2 | -0.87831 | -0.87831 | -0.87831 | 0.87831 | 0.87831 | 0.771429 | 0.771429 | -0.771429 | -0.771429\n", "2 | 2 | 4 | -2 | -4 | -0.29277 | -0.29277 | -0.29277 | 0.29277 | 0.29277 | 0.0857143 | 0.0857143 | -0.0857143 | -0.0857143\n", "3 | 3 | 6 | -3 | -6 | 0.29277 | 0.29277 | 0.29277 | -0.29277 | -0.29277 | 0.0857143 | 0.0857143 | -0.0857143 | -0.0857143\n", "4 | 4 | 8 | -4 | -8 | 0.87831 | 0.87831 | 0.87831 | -0.87831 | -0.87831 | 0.771429 | 0.771429 | -0.771429 | -0.771429\n", "5 | 5 | 10 | -5 | -10 | 1.46385 | 1.46385 | 1.46385 | -1.46385 | -1.46385 | 2.14286 | 2.14286 | -2.14286 | -2.14286" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "example_standard_with_products = example_standard.with_columns([\n", " \"x * y\", example_standard.column(\"x (standard units)\") * example_standard.column(\"y (standard units)\"),\n", " \"x * y2\", example_standard.column(\"x (standard units)\") * example_standard.column(\"y2 (standard units)\"),\n", " \"x * -y\", example_standard.column(\"x (standard units)\") * example_standard.column(\"-y (standard units)\"),\n", " \"x * -y2\", example_standard.column(\"x (standard units)\") * example_standard.column(\"-y2 (standard units)\")\n", " \n", "])\n", "example_standard_with_products" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r_x_y = np.average(example_standard_with_products.column(\"x * y\"))\n", "r_x_y" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r_x_y2 = np.average(example_standard_with_products.column(\"x * y2\"))\n", "r_x_y2" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1.0" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r_x_neg_y = np.average(example_standard_with_products.column(\"x * -y\"))\n", "r_x_neg_y" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1.0" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r_x_neg_y2 = np.average(example_standard_with_products.column(\"x * -y2\"))\n", "r_x_neg_y2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The correlation coefficient measures how close the data is to a straight line. It doesn't matter which straight line, because with standard units, every straight line with a positive slope turns into `y = x`, and every straight line with a negative slope turns into `y = -x`. (For a slope of 0, apparently it's undefined.)" ] }, { "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }