diff --git a/module1-vectors-and-matrices/Eli_Fulton_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb b/module1-vectors-and-matrices/Eli_Fulton_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb new file mode 100644 index 00000000..2293692a --- /dev/null +++ b/module1-vectors-and-matrices/Eli_Fulton_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb @@ -0,0 +1,917 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Eli Fulton LS_DS_131_Vectors_and_Matrices_Assignment.ipynb", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yXA3GwWhY9KL", + "colab_type": "text" + }, + "source": [ + "# Part 1 - Scalars and Vectors\n", + "\n", + "For the questions below it is not sufficient to simply provide answer to the questions, but you must solve the problems and show your work using python (the NumPy library will help a lot!) Translate the vectors and matrices into their appropriate python representations and use numpy or functions that you write yourself to demonstrate the result or property. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oNOTv43_Zi9L", + "colab_type": "text" + }, + "source": [ + "## 1.1 Create a two-dimensional vector and plot it on a graph" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "XNqjzQzrkVG7", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "b0a22392-c1bb-429d-d5c9-84b5f44c5c30" + }, + "source": [ + "import math\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "\n", + "vector = np.array([0.2, 0.4])\n", + "\n", + "plt.arrow(0, 0, vector[0], vector[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.show()" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "unKFT619lk3e", + "colab_type": "text" + }, + "source": [ + "## 1.2 Create a three-dimensional vecor and plot it on a graph" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "atUEd3T6llKm", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "outputId": "800f06a4-e3e8-4ae8-f0db-ee4a47e711f8" + }, + "source": [ + "three_d_vector_set = np.array([[0, 0, 0, .2, .4, .7]])\n", + "\n", + "X, Y, Z, U, V, W = zip(*three_d_vector_set)\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "ax.quiver(X, Y, Z, U, V, W, length=1)\n", + "ax.set_xlim([0, 1])\n", + "ax.set_ylim([0, 1])\n", + "ax.set_zlim([0, 1])\n", + "ax.set_xlabel('X')\n", + "ax.set_ylabel('Y')\n", + "ax.set_zlabel('Z')\n", + "plt.show()" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "b7qFxbKxZmI2", + "colab_type": "text" + }, + "source": [ + "## 1.3 Scale the vectors you created in 1.1 by $5$, $\\pi$, and $-e$ and plot all four vectors (original + 3 scaled vectors) on a graph. What do you notice about these vectors? " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ah6zMSLJdJwL", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "606aed7c-b77c-410b-d162-cbaa3162661f" + }, + "source": [ + "from math import e, pi\n", + "print(e)\n", + "print(pi)" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "text": [ + "2.718281828459045\n", + "3.141592653589793\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "3qpwDlzXkVf5", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "f86880c8-628e-4df6-b7b6-903083f6a647" + }, + "source": [ + "vector_2 = np.multiply(5, vector)\n", + "vector_3 = np.multiply(pi, vector)\n", + "vector_4 = np.multiply(-e, vector)\n", + "\n", + "plt.arrow(0, 0, vector_2[0], vector_2[1], head_width=.02, head_length=0.01, color = 'y')\n", + "plt.arrow(0, 0, vector_3[0], vector_3[1], head_width=.02, head_length=0.01, color = 'g')\n", + "plt.arrow(0, 0, vector[0], vector[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.arrow(0, 0, vector_4[0], vector_4[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.xlim(-1.5, 3.5) \n", + "plt.ylim(-1.5, 3.5)\n", + "plt.show()" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wrgqa6sWimbH", + "colab_type": "text" + }, + "source": [ + "## 1.4 Graph vectors $\\vec{a}$ and $\\vec{b}$ and plot them on a graph\n", + "\n", + "\\begin{align}\n", + "\\vec{a} = \\begin{bmatrix} 5 \\\\ 7 \\end{bmatrix}\n", + "\\qquad\n", + "\\vec{b} = \\begin{bmatrix} 3 \\\\4 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "I1BGXA_skV-b", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "30b3dec0-8d67-413a-97ff-ccbb0034260e" + }, + "source": [ + "vector_a = np.array([5, 7])\n", + "vector_b = np.array([3, 4])\n", + "\n", + "plt.arrow(0, 0, vector_a[0], vector_a[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.arrow(0, 0, vector_b[0], vector_b[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.xlim(-0.5, 8) \n", + "plt.ylim(-0.5, 8)\n", + "plt.show()" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW0AAAD8CAYAAAC8TPVwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAZ/ElEQVR4nO3deZRU9Z338feXRVkGF6AFZFEiiNuMSzpEBDWKMBAR1MEIZ/RJzEQMCLKpMc6ZeMyTTEZHBTVq5IiTzMGRyOLG4wIRHVwQbAhRBER2QaALUFkFmv4+f9xqqoGGroa6fe+t+rzO4Vh1q8CPHvh4/d3f915zd0REJBnqRB1ARESyp9IWEUkQlbaISIKotEVEEkSlLSKSICptEZEEyaq0zWykmX1qZgvN7HkzaxB2MBEROVS1pW1mrYE7gGJ3Pw+oCwwIO5iIiBwq2+WRekBDM6sHNAK+DC+SiIgcTr3qvuDu68zsIWANsAuY7u7TD/6emQ0CBgE0btz4u2eddVaus4qI5K158+Ztcvei6r5n1Y2xm9nJwBTgRuBrYBIw2d0nHO7nFBcXe0lJSc0Si4gUMDOb5+7F1X0vm+WRq4CV7p5y973AVOCSYw0oIiI1l01prwEuNrNGZmZAd2BxuLFERKQq1Za2u88BJgPzgU/SP2dcyLlERKQK1V6IBHD3+4D7Qs4iIiLV0ESkiEiCqLRFRBJEpS0ikiAqbRGRBFFpi4gkiEpbRCRBVNoiIgmi0hYRSRCVtohIgqi0RUQSRKUtIpIgKm0RkQRRaYuIJIhKW0QkQVTaIiIJotIWEUkQlbaISIJUW9pm1snMFlT6sdXMRtRGOBEROVC1jxtz98+ACwDMrC6wDngx5FwiIlKFmi6PdAeWu/vqMMKIyJE9+iiYgXvUSSQqNS3tAcDzVX1gZoPMrMTMSlKp1LEnE5EDPPwwjBgBHTsGxS2FKevSNrPjgL7ApKo+d/dx7l7s7sVFRUW5yiciwODBcOedMGwYLF0adRqJUrVr2pX0Bua7+8awwojIobp3h5kzYexYGD486jQStZqU9kAOszQiIrnnDi1bQmkpTJ0K110XdSKJg6xK28waAz2A28KNIyIA+/ZBvfSfztmz4eKLo80j8ZFVabv7DqBZyFlEBNi5Exo3Dl5//jl06BBtHomXmiyPiEjISkuhRYvgdSoFzZtHm0fiR2PsIjGxdGmmsHfuVGFL1VTaIjHw/vvQqVPwet8+aNgw2jwSXyptkYhNngzdusGpp0J5OdTRn0o5Av32EInQI4/ADTdAjx6wbp0mHaV6Km2RiAwZAqNHw9ChMH161GkkKbR7RCQCV10Fb70FY8YE9xMRyZZKW6QWuUOrVrBxI0yZAtdfH3UiSRqVtkgt0ZSj5IJKW6QWaMpRckWlLRKyVApOOSXzWkMzciy0e0QkREuXZgpbU46SCyptkZB88EFmyrGsTFOOkhsqbZEQTJ4MXbtmphzr1o06keQLlbZIjlVMOV51laYcJfdU2iI5dPvtmSnHGTOiTiP5KNsn15wEPAOcBzjwU3efHWYwkaTRlKPUhmy3/D0KvOHu/dNPZW8UYiaRRHEP1q43bNCUo4Sv2tI2sxOBy4CfALj7HmBPuLFEkqHylOMHH0CXLtHmkfyXzZp2eyAF/JeZ/dXMnkk/6FekoO3cmSnszz9XYUvtyKa06wEXAU+5+4XADuCeg79kZoPMrMTMSlKpVI5jisRLKpUZS0+lNJYutSeb0l4LrHX3Oen3kwlK/ADuPs7di929uKioKJcZRWLl88815SjRqba03X0D8IWZpWe76A4sCjWVSEx98AGceWbwWlOOEoVs92kPA54zs4+BC4B/Dy+SSDxNmaIpR4leVlv+3H0BUBxyFpHYGjMGRo0K9mJraEaipIlIkWoMHRoU9u23q7AlerqftsgRVEw5PvIIjBwZdRoRlbZIldyhdWtYv15TjhIvKm2Rg2jKUeJMpS1Sya5d0Ch9Z52lS6Fjx2jziBxMpS2SVvlZjqWloBkxiSPtHhHh0ClHFbbElUpbCt7s2ZpylORQaUtBmzIFLrkEWrXSlKMkg0pbCtbYsdC/P3TvDl9+qWc5SjKotKUgDR0aDMsMGQJ/+UvUaUSyp90jUnB69AiKWlOOkkQqbSkYlaccJ0+Gf/qnqBOJ1JxKWwpC5SnH998PLj6KJJFKW/Kephwln6i0Ja9t2pQZlNGUo+QD7R6RvLVsWaakd+xQYUt+yOpM28xWAduAfUCZu+spNhJrs2dn1q3LyjQ0I/mjJmfaV7j7BSpsibupU4PCbtlSU46Sf7Q8Inll7NhgK1/37sHWPk05Sr7JtrQdmG5m88xsUFVfMLNBZlZiZiWpVCp3CUWyNGyYphwl/2W7e6Sbu68zs1OAGWa2xN1nVf6Cu48DxgEUFxd7jnOKHFHPnsFDdzXlKPkuq9J293Xpv5aa2YtAZ2DWkX+WSPjcoU2b4IZPmnKUQlBtaZtZY6COu29Lv+4J/Dr0ZCLVqHyRUVOOUiiyOdNuAbxowRWdesD/uPsboaYSqYamHKVQVVva7r4COL8WsohkRVOOUsi05U8SRVOOUuhU2pIYH36YWQYpK8ssj4gUEpW2JMKLL0KXLtCihaYcpbCptCX2Hn0Urr8+mHLcsEFTjlLYVNoSa3fcASNGwODBmnIUAd1PW2LsH/8Rpk+Hhx+GUaOiTiMSDyptiR13aNsW1q2DSZOgf/+oE4nEh0pbYqXyRcb33oOuXaPNIxI3Km2JjcpTjp99BmeeGW0ekThSaUssVJ5y3LgRTjkl2jwicaXdIxK5g6ccVdgih6fSlkhpylGkZlTaEhlNOYrUnEpbIvHYY8GU45VXaspRpCZU2lLr7rgDhg+Hn/8c3nor6jQiyaLdI1KrevWCN9+Ehx6C0aOjTiOSPCptqRXu0K4drF0LL7wAN9wQdSKRZMq6tM2sLlACrHP3PuFFknyjKUeR3KnJmfZwYDFwQkhZJA8ddsrRXVcfRY5CVhcizawNcDXwTLhxJJ9s2pQp7I0bKxX2Qw9BnTrBHaFEpEayPdMeC9wNNDncF8xsEDAIoF27dseeTBJt+XLo0CF4vWNHpaGZm2+GCROC/X6tW0eWTySpqj3TNrM+QKm7zzvS99x9nLsXu3txkZ62WtA+/DBT2PunHCuuRE6YAE8/DVOmRJpRJKmyOdPuCvQ1sx8CDYATzGyCu98UbjRJopdeguuuC+4fsn9oZvduaNAg+MKsWXDppZFmFEmyas+03f2X7t7G3U8HBgAzVdhSlcceCwr7iiuCNWwzghcVhb16tQpb5BhpIlJyYvjwzJTjzJnpg/PnQ8uWwevt24PlERE5JjUarnH3d4B3QkkiidW7N7zxxkFTjn/+MwwYEJxl79yp7X0iOaIzbTlqFdcW33gjmHLcX9i/+EVQ2L17Bxu1VdgiOaMxdjkqh51yvPTS4MCvfw3/9m+R5RPJVyptqbFvv4WGDYPX+6ccK7f4Sy9Bv36R5RPJZyptqZHNm6F58+D1/mc5bt0KJ54YHFy4EM49N7J8IvlOa9qSteXLM4W9/1mOy5ZlCnvzZhW2SMhU2pKVOXOqmHKcMSPzgMe9e6Fp08jyiRQKlbZU66WX4OKLgyem71+6HjMGevaE884LtpHU00qbSG1QacsRPf54MOX4gx9AaWl6997AgTBqFAweDJ98EnVEkYKi0yM5rBEj4NFH4bbb4A9/IDijPvXU4KYi48fDT38adUSRgqPSlipVTDn+53/CnXdy4E2f3n8fLrkk0nwihUqlLQdwh9NPhzVrgkn0H/0IWL8+OMOG4IO2baOMKFLQVNqyX+X5mHffhW7dgI8+gs6dg4MHPM1ARKKgC5ECBFOOFYW9ZEm6sJ97LijsE04IGl2FLRI5lbaweXNmLH3jRujUieDuTzfdBNdcA998o5s+icSElkcK3IoVcMYZwev9qx/f/z7MnQu/+x3cc0+k+UTkQCrtAjZnTjA0A8GUY132gaV/S0ybBldfHV04EalSNg/2bWBmc83sb2b2qZndXxvBJFwvvxwUdvPm6QuQ27/JTDUuWqTCFompbNa0dwNXuvv5wAVALzO7ONxYEqbf/x6uvTaYckylwJZ+BiedFHy4ZQucfXak+UTk8LJ5sK+7+/b02/rpHx5qKgnNyJEwbBgMGgRvv00wQXPWWcGHe/fCySdHmk9Ejiyr3SNmVtfMFgClwAx3n1PFdwaZWYmZlaRSqVznlBz44Q9h7Fh48EF4+mmCccfeveGii3TTJ5GEyKq03X2fu18AtAE6m9l5VXxnnLsXu3txUVFRrnPKMaiYcnz99WDK8a67gP794e67g9PuefOijigiWarp09i/NrO3gV7AwnAiSS4dMuXY1aFZ82Dt+o9/hB//ONJ8IlIz1Za2mRUBe9OF3RDoATwQejI5ZpWf5bhkCXQ67Vuokz7w4YfBfmwRSZRszrRbAX8ys7oEyykvuPu0cGPJsTrkWY5lX0LD1sGBdesyN4ASkUSptrTd/WPgwlrIIjlyyJTjJ5WmaHbtytxiVUQSR/ceyTNz52YKu6wMGk3604FTNCpskURTaeeRV14JlqmbNUtfgBx5B/zkJ3D99ekpGt30SSTpVNp54ve/h3794PLLYdMmsOLvBg94fPBBmDIl6ngikiOapsgDI0cGQzO33grjniwDqx988Prr0KtXtOFEJKdU2gl39dXw2mvBCfVdP/sK6jcNPliyJH1jbBHJJyrtBGvfHlatgokT4cZ/WAxNzwk++PprOPHESLOJSDhU2gl0yJTjN/8PzukTHCgry3woInlHFyIT5pBnOb73H9CnT7BtxF2FLZLnVNoJsmVLZix9wwbodHc/+OUvYdSoYCxdRPKelkcSYuVK+M53gtfbtzmNTz0Rtm2DCRPgn/852nAiUmtU2gkwd27m3k5l23ZRt0mjzAff+150wUSk1ml5JOYqphybNoXyNWszhf3llypskQKk0o6xJ54Iphwvuww2v/oB1q5t8MG330KrVtGGE5FIqLRjatQoGDo0mHL83/8zHrp2hZYtg/1+xx8fdTwRiYhKO4b69IExY+CBB2BcvSHws5/BgAGwfr1u+iRS4HQhMma+851gp8jEiXDjb/4eFi6ERx4JbjAiIgVPpR0TlaccZ80s49Ir0zd9mj4devSILpiIxEo2z4hsC/w30AJwYJy7Pxp2sEJS+VmOn83ewpldmgVvPv8cOnSILpiIxE42Z9plwGh3n29mTYB5ZjbD3ReFnK0gbNkSPLQAIPXOpzTvcl7w5ptv4IQTogsmIrFU7YVId1/v7vPTr7cBi4HWYQcrBCtXZgp7159fofkP0oW9b58KW0SqVKPdI2Z2OsFDfudU8dkgMysxs5JUKpWbdHnso48yY+n77v+/NLixH3TrFtz0qY429YhI1bJuBzP7O2AKMMLdtx78ubuPc/didy8uKirKZca88+qr0LkznHwylPf+IXXu+xXcfXdwn1URkSPIqrTNrD5BYT/n7lPDjZTfnngC+vaFS7s5W3Y1xF5/Pdjf98ADUUcTkQSotrTNzIDxwGJ3fyT8SPlr9OhgynHIj3cw6706wbaRefPgxhujjiYiCZHN7pGuwM3AJ2a2IH3sXnd/LbxY+eeaa2DaNHjynjUM/o/TgoMbNkCLFtEGE5FEqba03f09QLPTx+CMM2DFCvjLfe/S/f7LgoO7d8Nxx0UbTEQSRxORIao85bj0znF0vP82aNcueBqv7iEiIkdBe8tCUvlZjltuGETHh26Dm26C1atV2CJy1HSmHYLMlKOz94yzqTfpM3jsMRg2LOpoIpJwKu0cq3iWYz32spfjYDnw1ltw5ZVRRxORPKDlkRyqmHJsxqagsAGWL1dhi0jOqLRzpGLKsWuTj9lEeiJ069bMrLqISA6otHPgySeDKcd7z36R97adHxzctw+aNIk2mIjkHZX2MRo9Gm6/HV6+8D5+u/h6uOIK3fRJREKjC5HHoG/fYFlkRYcetP/rX+Dee+G3v406lojkMZX2UTrjDFi5opx9Vp86y8ph0iTo3z/qWCKS51TaNVQx5diY7ZTTJHgA24IFcP75UUcTkQKg0q6B3buhQQM4jVWson1wsLQUdP9wEaklulqWpS1bgsK+nHcyhb17twpbRGqVSjsLFc9yHMyTvMMVwYJ2ebnu0icitU6lXY2SkmA+Zjy38CS3wy23wLJluumTiERCa9pHMG0aXHONs8I60N5XwFNPwc9/HnUsESlg1Za2mT0L9AFK3f288CPFw1NPwfAhe3COD3aIvPMOXH551LFEpMBlszzyR6BXyDli5c474VdDUuzh+ODAypUqbBGJhWweNzbLzE4PP0o89O0La15dQIoLgwPbt0PjxtGGEhFJy9mFSDMbZGYlZlaSSqVy9cvWqg4d4PhXJ7GAC6F+/eCmTypsEYmRnJW2u49z92J3Ly5K2N7l8vJgM8gty+9lEj+Cnj1hzx7d9ElEYqfgW2n37mAsfSZX8K/8Dn71K3jzzahjiYhUqaC3/G3ZAs2bleOkn8A7dSpcd120oUREjqDaM20zex6YDXQys7Vm9i/hxwrfqlVwWrNtlFcU9scfq7BFJPay2T0ysDaC1KaSEvjR91awjTOCA6kUNG8ebSgRkSwU3Jr2tGlw9/dmsqKisPfsUWGLSGIUVGn/4Q/w5jWPM5PucPbZwbaR+vWjjiUikrWCKe277oJGg2/mce6AW2+FRYt00ycRSZyC2D3Sr6/z+Kun0Y4vYNy4oLRFRBIo70v73A67+XR5g+DNu+9Ct27RBhIROQZ5W9rl5dCq7kY20jI4sHo1tGsXbSgRkWOUl6W9ezd0aTCfjXw3OLBjBzRqFG0oEZEcyLsLkV99BT9uMJH5fJfyho2CU24Vtojkibwq7VWr4Ommv2AiAynrdTV1du7QDhERySt5U9rz5sHa9t24hwfZ9+vfUO/1aVFHEhHJubxY05728j76XBv8o/hLL1O3X9+IE4mIhCPxpT1+zFb+ZdSJwZuFC7Fzz402kIhIiBJd2g/cuoxfPNMxeLN5MzRtGm0gEZGQJba077tkBvfP7hm82bsX6iX2H0VEJGuJvBD570VjuH92T75q9w/grsIWkYKRqNIuL4fnbQD3bhrFumuHcPLqv0UdSUSkViXmFHX3t85XDVsxkI2s+82ztP7XW6KOJCJS67I60zazXmb2mZktM7N7wg51sK/Wf8vxDevQko1sfvUDFbaIFKxsnhFZF3gC6A2cAww0s3PCDlbhi7nrOfnUhgDsWPIFzfp0qa2/tYhI7GSzPNIZWObuKwDMbCLQD1gUZjCA3dv20Pb7pwJQtnUnjZs0DPtvKSISa9ksj7QGvqj0fm362AHMbJCZlZhZSSqVykm44xrXZ1a/h/F95dRTYYuI5G73iLuPc/didy8uKirKya9pdYzLXhqF1dFNn0REILvSXge0rfS+TfqYiIjUsmxK+yOgo5m1N7PjgAHAK+HGEhGRqlR7IdLdy8xsKPAmUBd41t0/DT2ZiIgcIqvhGnd/DXgt5CwiIlKNRI2xi4gUOpW2iEiCqLRFRBJEpS0ikiAqbRGRBFFpi4gkiEpbRCRBzN1z/4uapYDVOfrlmgObcvRrhSHO+ZTt6MU5X5yzQbzzxTlbJ3dvUt2XQnlyjbvn5o5RgJmVuHtxrn69XItzPmU7enHOF+dsEO98cc+Wzfe0PCIikiAqbRGRBElCaY+LOkA14pxP2Y5enPPFORvEO1/is4VyIVJERMKRhDNtERFJU2mLiCRIrEvbzHqZ2WdmtszM7ok6T2Vm9qyZlZrZwqizHMzM2prZ22a2yMw+NbPhUWeqYGYNzGyumf0tne3+qDMdzMzqmtlfzWxa1FkOZmarzOwTM1uQ7Rax2mJmJ5nZZDNbYmaLzaxL1JkqmFmn9L+zih9bzWxE1LkqmNnI9J+HhWb2vJk1OOx347qmbWZ1gaVAD4InwH8EDHT3RZEGSzOzy4DtwH+7+3lR56nMzFoBrdx9vpk1AeYB18bh352ZGdDY3bebWX3gPWC4u38YcbT9zGwUUAyc4O59os5TmZmtAordPXYDImb2J+Bdd38m/WjCRu7+ddS5DpbulnXA9909V0OAx5KnNcGfg3PcfZeZvQC85u5/rOr7cT7T7gwsc/cV7r4HmAj0izjTfu4+C9gSdY6quPt6d5+ffr0NWAy0jjZVwAPb02/rp3/E5szBzNoAVwPPRJ0lSczsROAyYDyAu++JY2GndQeWx6GwK6kHNDSzekAj4MvDfTHOpd0a+KLS+7XEpHiSxMxOBy4E5kSbJCO9/LAAKAVmuHtssgFjgbuB8qiDHIYD081snpkNijpMJe2BFPBf6aWlZ8yscdShDmMA8HzUISq4+zrgIWANsB74xt2nH+77cS5tOUZm9nfAFGCEu2+NOk8Fd9/n7hcAbYDOZhaL5SUz6wOUuvu8qLMcQTd3vwjoDdyeXqaLg3rARcBT7n4hsAOI1XUogPSyTV9gUtRZKpjZyQSrCO2BU4HGZnbT4b4f59JeB7St9L5N+phkIb1ePAV4zt2nRp2nKun/fX4b6BV1lrSuQN/0uvFE4EozmxBtpAOlz8pw91LgRYJlxDhYC6yt9H9NkwlKPG56A/PdfWPUQSq5Cljp7il33wtMBS453JfjXNofAR3NrH36v44DgFcizpQI6Yt944HF7v5I1HkqM7MiMzsp/bohwYXmJdGmCrj7L929jbufTvD7baa7H/aMp7aZWeP0hWXSSw89gVjsXnL3DcAXZtYpfag7EPmF7yoMJEZLI2lrgIvNrFH6z253gutQVQrlLn+54O5lZjYUeBOoCzzr7p9GHGs/M3se+AHQ3MzWAve5+/hoU+3XFbgZ+CS9dgxwr7u/FmGmCq2AP6Wv4NcBXnD32G2ti6kWwIvBn2vqAf/j7m9EG+kAw4Dn0idZK4BbIs5zgPR/6HoAt0WdpTJ3n2Nmk4H5QBnwV44w0h7bLX8iInKoOC+PiIjIQVTaIiIJotIWEUkQlbaISIKotEVEEkSlLSKSICptEZEE+f8eaqupIKwR9QAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QN6RU_3gizpw", + "colab_type": "text" + }, + "source": [ + "## 1.5 find $\\vec{a} - \\vec{b}$ and plot the result on the same graph as $\\vec{a}$ and $\\vec{b}$. Is there a relationship between vectors $\\vec{a} \\thinspace, \\vec{b} \\thinspace \\text{and} \\thinspace \\vec{a-b}$" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "68sWHIOPkXp5", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "825afc9b-f1a5-4897-ca1d-9611787c9b07" + }, + "source": [ + "vector_difference = vector_a - vector_b\n", + "\n", + "plt.arrow(0, 0, vector_a[0], vector_a[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.arrow(0, 0, vector_b[0], vector_b[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.arrow(0, 0, vector_difference[0], vector_difference[1], head_width=.02, head_length=0.01, color = 'g')\n", + "plt.xlim(-0.5, 8) \n", + "plt.ylim(-0.5, 8)\n", + "plt.show()" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1ZPVuJAlehu_", + "colab_type": "text" + }, + "source": [ + "## 1.6 Find $c \\cdot d$\n", + "\n", + "\\begin{align}\n", + "\\vec{c} = \\begin{bmatrix}7 & 22 & 4 & 16\\end{bmatrix}\n", + "\\qquad\n", + "\\vec{d} = \\begin{bmatrix}12 & 6 & 2 & 9\\end{bmatrix}\n", + "\\end{align}\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2_cZQFCskYNr", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "96c66eea-6221-47da-c5ed-6f128d50000e" + }, + "source": [ + "vector_c = np.array([7, 22, 4, 16])\n", + "vector_d = np.array([12, 6, 2, 9])\n", + "\n", + "(vector_c * vector_d).sum()" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "368" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 9 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cLm8yokpfg9B", + "colab_type": "text" + }, + "source": [ + "## 1.7 Find $e \\times f$\n", + "\n", + "\\begin{align}\n", + "\\vec{e} = \\begin{bmatrix} 5 \\\\ 7 \\\\ 2 \\end{bmatrix}\n", + "\\qquad\n", + "\\vec{f} = \\begin{bmatrix} 3 \\\\4 \\\\ 6 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ku-TdCKAkYs8", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "a55ef45f-f257-4808-85ad-0eacd19c1663" + }, + "source": [ + "vector_e = np.array([5, 7, 2])\n", + "vector_f = np.array([3, 4, 6])\n", + "\n", + "np.cross(vector_e, vector_f)" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([ 34, -24, -1])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-TN8wO2-h53s", + "colab_type": "text" + }, + "source": [ + "## 1.8 Find $||g||$ and then find $||h||$. Which is longer?\n", + "\n", + "\\begin{align}\n", + "\\vec{g} = \\begin{bmatrix} 1 \\\\ 1 \\\\ 1 \\\\ 8 \\end{bmatrix}\n", + "\\qquad\n", + "\\vec{h} = \\begin{bmatrix} 3 \\\\3 \\\\ 3 \\\\ 3 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-5VKOMKBlgaA", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "a222ea0c-ad5c-4e95-f14a-27428434d838" + }, + "source": [ + "vector_g = np.array([1, 1, 1, 8])\n", + "vector_h = np.array([3, 3, 3, 3])\n", + "\n", + "norm_g = ((vector_g[0] ** 2) + (vector_g[1] ** 2) + (vector_g[2] ** 2) + (vector_g[3] ** 2)) ** (1/2)\n", + "norm_h = ((vector_h[0] ** 2) + (vector_h[1] ** 2) + (vector_h[2] ** 2) + (vector_h[3] ** 2)) ** (1/2)\n", + "print(norm_g)\n", + "print(norm_h)" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "text": [ + "8.18535277187245\n", + "6.0\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "njrWIMS-ZAoH", + "colab_type": "text" + }, + "source": [ + "# Part 2 - Matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GjkcAVIOmOnn", + "colab_type": "text" + }, + "source": [ + "## 2.1 What are the dimensions of the following matrices? Which of the following can be multiplied together? See if you can find all of the different legal combinations.\n", + "\\begin{align}\n", + "A = \\begin{bmatrix}\n", + "1 & 2 \\\\\n", + "3 & 4 \\\\\n", + "5 & 6\n", + "\\end{bmatrix}\n", + "\\qquad\n", + "B = \\begin{bmatrix}\n", + "2 & 4 & 6 \\\\\n", + "\\end{bmatrix}\n", + "\\qquad\n", + "C = \\begin{bmatrix}\n", + "9 & 6 & 3 \\\\\n", + "4 & 7 & 11\n", + "\\end{bmatrix}\n", + "\\qquad\n", + "D = \\begin{bmatrix}\n", + "1 & 0 & 0 \\\\\n", + "0 & 1 & 0 \\\\\n", + "0 & 0 & 1\n", + "\\end{bmatrix}\n", + "\\qquad\n", + "E = \\begin{bmatrix}\n", + "1 & 3 \\\\\n", + "5 & 7\n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Z69c-uPtnbIx", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# 3 by 2\n", + "\n", + "matrix_a = np.array([[1, 2], [3, 4], [5, 6]])\n", + "\n", + "# 1 by 3\n", + "\n", + "matrix_b = np.array([[2, 4, 6]])\n", + "\n", + "# 2 by 3\n", + "\n", + "matrix_c = np.array([[9, 6, 3], [4, 7, 11]])\n", + "\n", + "# 3 by 3\n", + "\n", + "matrix_d = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n", + "\n", + "# 2 by 2\n", + "\n", + "matrix_e = np.array([[1, 3], [5, 7]])\n", + "\n", + "# A can be multiplied with C and E; B can be multiplied with A and D; C can be multiplied with A and D; D can be multiplied with A and itself; and E can be multiplied with C " + ], + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lMOlCoM3ncGa", + "colab_type": "text" + }, + "source": [ + "## 2.2 Find the following products: CD, AE, and BA. What are the dimensions of the resulting matrices? How does that relate to the dimensions of their factor matrices?" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zhKwiSItoE2F", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 156 + }, + "outputId": "eb03c4a8-0691-46a9-bff9-2c58a5d1406b" + }, + "source": [ + "# 2 by 3\n", + "print(np.matmul(matrix_c, matrix_d))\n", + "print(\"\")\n", + "\n", + "# 3 by 2\n", + "print(np.matmul(matrix_a, matrix_e))\n", + "print(\"\")\n", + "\n", + "# 1 by 2\n", + "print(np.matmul(matrix_b, matrix_a))" + ], + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[ 9 6 3]\n", + " [ 4 7 11]]\n", + "\n", + "[[11 17]\n", + " [23 37]\n", + " [35 57]]\n", + "\n", + "[[44 56]]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p2jmaGLgoFPN", + "colab_type": "text" + }, + "source": [ + "## 2.3 Find $F^{T}$. How are the numbers along the main diagonal (top left to bottom right) of the original matrix and its transpose related? What are the dimensions of $F$? What are the dimensions of $F^{T}$?\n", + "\n", + "\\begin{align}\n", + "F = \n", + "\\begin{bmatrix}\n", + "20 & 19 & 18 & 17 \\\\\n", + "16 & 15 & 14 & 13 \\\\\n", + "12 & 11 & 10 & 9 \\\\\n", + "8 & 7 & 6 & 5 \\\\\n", + "4 & 3 & 2 & 1\n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Wl3ElwgLqaAn", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 86 + }, + "outputId": "ced377aa-0e75-4b46-eccd-7eeea8c3aba0" + }, + "source": [ + "matrix_f = np.array([[20, 19, 18, 17], [16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]])\n", + "\n", + "matrix_f.T" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[20, 16, 12, 8, 4],\n", + " [19, 15, 11, 7, 3],\n", + " [18, 14, 10, 6, 2],\n", + " [17, 13, 9, 5, 1]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 16 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "13ik2LEEZLHn", + "colab_type": "text" + }, + "source": [ + "# Part 3 - Square Matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sDBAPUwfp7f7", + "colab_type": "text" + }, + "source": [ + "## 3.1 Find $IG$ (be sure to show your work) 😃\n", + "\n", + "You don't have to do anything crazy complicated here to show your work, just create the G matrix as specified below, and a corresponding 2x2 Identity matrix and then multiply them together to show the result. You don't need to write LaTeX or anything like that (unless you want to).\n", + "\n", + "\\begin{align}\n", + "G= \n", + "\\begin{bmatrix}\n", + "13 & 14 \\\\\n", + "21 & 12 \n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZnqvZBOYqar3", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "b66ba03a-b8fc-4959-951b-269f3f40bcf0" + }, + "source": [ + "matrix_g = np.array([[13, 14], [21, 12]])\n", + "identity_matrix_2 = np.array([[1, 0], [0, 1]])\n", + "\n", + "np.matmul(identity_matrix_2, matrix_g)" + ], + "execution_count": 17, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[13, 14],\n", + " [21, 12]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 17 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DZ_0XTDQqpMT", + "colab_type": "text" + }, + "source": [ + "## 3.2 Find $|H|$ and then find $|J|$.\n", + "\n", + "\\begin{align}\n", + "H= \n", + "\\begin{bmatrix}\n", + "12 & 11 \\\\\n", + "7 & 10 \n", + "\\end{bmatrix}\n", + "\\qquad\n", + "J= \n", + "\\begin{bmatrix}\n", + "0 & 1 & 2 \\\\\n", + "7 & 10 & 4 \\\\\n", + "3 & 2 & 0\n", + "\\end{bmatrix}\n", + "\\end{align}\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "5QShhoXyrjDS", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "48066b8c-e426-4bb6-8900-d18c15aedf9f" + }, + "source": [ + "matrix_h = np.array([[12, 11], [7, 10]])\n", + "matrix_j = np.array([[0, 1, 2], [7, 10, 4], [3, 2, 0]])\n", + "\n", + "print(np.linalg.det(matrix_h))\n", + "print(np.linalg.det(matrix_j))" + ], + "execution_count": 18, + "outputs": [ + { + "output_type": "stream", + "text": [ + "43.000000000000014\n", + "-19.999999999999996\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2gZl1CFwrXSH", + "colab_type": "text" + }, + "source": [ + "## 3.3 Find $H^{-1}$ and then find $J^{-1}$" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nyX6De2-rio1", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "outputId": "9e69bf84-f8d0-40a0-c05c-491439167993" + }, + "source": [ + "print(np.linalg.inv(matrix_h))\n", + "print(\"\")\n", + "print(np.linalg.inv(matrix_j))" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[ 0.23255814 -0.25581395]\n", + " [-0.1627907 0.27906977]]\n", + "\n", + "[[ 0.4 -0.2 0.8 ]\n", + " [-0.6 0.3 -0.7 ]\n", + " [ 0.8 -0.15 0.35]]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vvd4Pe86rjhW", + "colab_type": "text" + }, + "source": [ + "## 3.4 Find $HH^{-1}$ and then find $J^{-1}J$. Is $HH^{-1} == J^{-1}J$? Why or Why not? \n", + "\n", + "Please ignore Python rounding errors. If necessary, format your output so that it rounds to 5 significant digits (the fifth decimal place)." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "xVQ9cGyvhPUX", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "outputId": "96853b51-e470-4c37-df08-750cc225d0d1" + }, + "source": [ + "print(np.matmul(matrix_h, np.linalg.inv(matrix_h)))\n", + "print(\"\")\n", + "print(np.matmul(np.linalg.inv(matrix_j), matrix_j))" + ], + "execution_count": 21, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[1.00000000e+00 5.55111512e-16]\n", + " [2.22044605e-16 1.00000000e+00]]\n", + "\n", + "[[ 1.00000000e+00 2.22044605e-16 0.00000000e+00]\n", + " [-1.11022302e-16 1.00000000e+00 0.00000000e+00]\n", + " [-1.66533454e-16 -1.11022302e-16 1.00000000e+00]]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "V0iTO4McYjtk", + "colab_type": "text" + }, + "source": [ + "# Stretch Goals: \n", + "\n", + "A reminder that these challenges are optional. If you finish your work quickly we welcome you to work on them. If there are other activities that you feel like will help your understanding of the above topics more, feel free to work on that. Topics from the Stretch Goals sections will never end up on Sprint Challenges. You don't have to do these in order, you don't have to do all of them. \n", + "\n", + "- Write a function that can calculate the dot product of any two vectors of equal length that are passed to it.\n", + "- Write a function that can calculate the norm of any vector\n", + "- Prove to yourself again that the vectors in 1.9 are orthogonal by graphing them. \n", + "- Research how to plot a 3d graph with animations so that you can make the graph rotate (this will be easier in a local notebook than in google colab)\n", + "- Create and plot a matrix on a 2d graph.\n", + "- Create and plot a matrix on a 3d graph.\n", + "- Plot two vectors that are not collinear on a 2d graph. Calculate the determinant of the 2x2 matrix that these vectors form. How does this determinant relate to the graphical interpretation of the vectors?\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "32Iy3xeLjoSm", + "colab_type": "code", + "colab": {} + }, + "source": [ + "def dot_prod(v_1, v_2):\n", + " final = []\n", + " if len(v_1) == len(v_1):\n", + " final = (v_1 * v_2).sum()\n", + " return final" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "vK2cF8S7jtqO", + "colab_type": "code", + "colab": {} + }, + "source": [ + "def norm(vector):\n", + " final = 0\n", + " for i in vector:\n", + " final += i ** 2\n", + " final = final ** (1/2)\n", + " return final" + ], + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/module2-intermediate-linear-algebra/Eli_Fulton_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb b/module2-intermediate-linear-algebra/Eli_Fulton_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb new file mode 100644 index 00000000..625c6f38 --- /dev/null +++ b/module2-intermediate-linear-algebra/Eli_Fulton_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb @@ -0,0 +1,1496 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Eli Fulton LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GSNiYn8lr6nN", + "colab_type": "text" + }, + "source": [ + "# Statistics" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3d4izUhQvh2_", + "colab_type": "text" + }, + "source": [ + "## 1.1 Sales for the past week was the following amounts: [3505, 2400, 3027, 2798, 3700, 3250, 2689]. Without using library functions, what is the mean, variance, and standard deviation of of sales from last week? (for extra bonus points, write your own function that can calculate these two values for any sized list)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "w1iZfYvBtEA1", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 36 + }, + "outputId": "f9446189-7942-4cac-9800-fc6a790f5726" + }, + "source": [ + "# sales set\n", + "\n", + "sales = [3505, 2400, 3027, 2798, 3700, 3250, 2689]\n", + "\n", + "# function for caluclating three values\n", + "\n", + "def stat_returns(value_set, return_mean, return_variance, return_std):\n", + "\n", + " # variables to be printed\n", + "\n", + " mean = 0\n", + " variance = 0\n", + " std = 0\n", + "\n", + " # create the mean\n", + "\n", + " for num in value_set:\n", + " mean += num / len(value_set)\n", + "\n", + " # create the variance\n", + "\n", + " for num in value_set:\n", + " variance += ((num - mean) ** 2) / (len(value_set) - 1)\n", + "\n", + " # standard deviation (based off of variance)\n", + "\n", + " std = variance ** (1/2)\n", + " \n", + " # set up returns\n", + "\n", + " return_str = \"\"\n", + " \n", + " if return_mean == True:\n", + " return_str += (str(mean) + \" \")\n", + " if return_variance == True:\n", + " return_str += (str(variance) + \" \")\n", + " if return_std == True:\n", + " return_str += (str(std))\n", + "\n", + " return return_str\n", + "\n", + "stat_returns(sales, True, True, True)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'3052.714285714286 214387.90476190476 463.02041505953576'" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 1 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oh63KaOctEp_", + "colab_type": "text" + }, + "source": [ + "## 1.2 Find the covariance between last week's sales numbers and the number of customers that entered the store last week: [127, 80, 105, 92, 120, 115, 93] (you may use librray functions for calculating the covariance since we didn't specifically talk about its formula)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "G7ZB0krot564", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "b2e70574-ba8b-459d-fe88-f9a3739dd404" + }, + "source": [ + "import numpy as np\n", + "\n", + "# set up customers\n", + "\n", + "customers = [127, 80, 105, 92, 120, 115, 93]\n", + "\n", + "# call np.cov()\n", + "\n", + "covariance = np.cov(sales, customers)\n", + "\n", + "covariance" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[214387.9047619 , 7604.35714286],\n", + " [ 7604.35714286, 290.95238095]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 2 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "J9SbUY9mt66I", + "colab_type": "text" + }, + "source": [ + "## 1.3 Find the standard deviation of customers who entered the store last week. Then, use the standard deviations of both sales and customers to standardize the covariance to find the correlation coefficient that summarizes the relationship between sales and customers. (You may use library functions to check your work.)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vFJms2YRrKhY", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "f5b276e8-d186-4dd7-fc53-a41b6713b205" + }, + "source": [ + "correlation_c = covariance / (float(stat_returns(sales, False, False, True)) ** 2)\n", + "\n", + "correlation_c" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1. , 0.03547008],\n", + " [0.03547008, 0.00135713]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 3 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IbZVf7nmujPJ", + "colab_type": "text" + }, + "source": [ + "## 1.4 Use pandas to import a cleaned version of the titanic dataset from the following link: [Titanic Dataset](https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_clean.csv)\n", + "\n", + "## Calculate the variance-covariance matrix and correlation matrix for the titanic dataset's numeric columns. (you can encode some of the categorical variables and include them as a stretch goal if you finish early)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0TWgUIiaCFzq", + "colab_type": "code", + "colab": {} + }, + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "df = pd.read_csv('https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_clean.csv')" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "mDsNcZqatB2W", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 332 + }, + "outputId": "55c9f21f-2d65-498f-c912-62492f64de3c" + }, + "source": [ + "df.cov()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0pclasssurvivedagesibspparchfarebodyhas_cabin_number
Unnamed: 0143117.500000284.357034-53.967125-1442.93981225.8287461.172783-9410.735123591.579132-95.438885
pclass284.3570340.701969-0.127248-3.9546050.0530900.013287-24.227788-2.876653-0.249992
survived-53.967125-0.1272480.236250-0.314343-0.0140880.0347766.1460230.0000000.061406
age-1442.939812-3.954605-0.314343165.850021-2.559806-1.459378114.41661381.6229221.463138
sibsp25.8287460.053090-0.014088-2.5598061.0850520.3368338.641768-8.708471-0.003946
parch1.1727830.0132870.034776-1.4593780.3368330.7491959.9280314.2371900.013316
fare-9410.735123-24.2277886.146023114.4166138.6417689.9280312678.959738-179.16468410.976961
body591.579132-2.8766530.00000081.622922-8.7084714.237190-179.1646849544.6885673.625689
has_cabin_number-95.438885-0.2499920.0614061.463138-0.0039460.01331610.9769613.6256890.174613
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 pclass ... body has_cabin_number\n", + "Unnamed: 0 143117.500000 284.357034 ... 591.579132 -95.438885\n", + "pclass 284.357034 0.701969 ... -2.876653 -0.249992\n", + "survived -53.967125 -0.127248 ... 0.000000 0.061406\n", + "age -1442.939812 -3.954605 ... 81.622922 1.463138\n", + "sibsp 25.828746 0.053090 ... -8.708471 -0.003946\n", + "parch 1.172783 0.013287 ... 4.237190 0.013316\n", + "fare -9410.735123 -24.227788 ... -179.164684 10.976961\n", + "body 591.579132 -2.876653 ... 9544.688567 3.625689\n", + "has_cabin_number -95.438885 -0.249992 ... 3.625689 0.174613\n", + "\n", + "[9 rows x 9 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 5 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LoetLXZ9t0Ko", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 332 + }, + "outputId": "6116ac6c-9c49-4cf3-fef9-31ab51cf0a56" + }, + "source": [ + "df.corr()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0pclasssurvivedagesibspparchfarebodyhas_cabin_number
Unnamed: 01.0000000.897822-0.293717-0.2961720.0655940.003584-0.4812150.015558-0.603727
pclass0.8978221.000000-0.312469-0.3663700.0608320.018322-0.558629-0.034642-0.713857
survived-0.293717-0.3124691.000000-0.050199-0.0278250.0826600.244265NaN0.302250
age-0.296172-0.366370-0.0501991.000000-0.190747-0.1308720.1718920.0590590.271887
sibsp0.0655940.060832-0.027825-0.1907471.0000000.3735870.160238-0.099961-0.009064
parch0.0035840.0183220.082660-0.1308720.3735871.0000000.2215390.0510990.036806
fare-0.481215-0.5586290.2442650.1718920.1602380.2215391.000000-0.0431100.507253
body0.015558-0.034642NaN0.059059-0.0999610.051099-0.0431101.0000000.083796
has_cabin_number-0.603727-0.7138570.3022500.271887-0.0090640.0368060.5072530.0837961.000000
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 pclass ... body has_cabin_number\n", + "Unnamed: 0 1.000000 0.897822 ... 0.015558 -0.603727\n", + "pclass 0.897822 1.000000 ... -0.034642 -0.713857\n", + "survived -0.293717 -0.312469 ... NaN 0.302250\n", + "age -0.296172 -0.366370 ... 0.059059 0.271887\n", + "sibsp 0.065594 0.060832 ... -0.099961 -0.009064\n", + "parch 0.003584 0.018322 ... 0.051099 0.036806\n", + "fare -0.481215 -0.558629 ... -0.043110 0.507253\n", + "body 0.015558 -0.034642 ... 1.000000 0.083796\n", + "has_cabin_number -0.603727 -0.713857 ... 0.083796 1.000000\n", + "\n", + "[9 rows x 9 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7K0Xfh8MvYkl", + "colab_type": "text" + }, + "source": [ + "# Orthogonality" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Pe3eOZ2fvdZ-", + "colab_type": "text" + }, + "source": [ + "## 2.1 Plot two vectors that are orthogonal to each other. What is a synonym for orthogonal?" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YLSBk7hJvvCx", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 286 + }, + "outputId": "2d91b4e5-da65-419b-da73-87dbb95ad9e9" + }, + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# orthogonal vectors\n", + "\n", + "orth_vector_1 = np.array([2, -6])\n", + "orth_vector_2 = np.array([9, 3])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1, 10)\n", + "plt.ylim(-7, 4)\n", + "\n", + "plt.arrow(0, 0, orth_vector_1[0], orth_vector_1[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.arrow(0, 0, orth_vector_2[0], orth_vector_2[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.show()\n", + "\n", + "# orthogonal means that the dot product is equal to 0 and that the vectors form right angles with each other\n", + "\n", + "print((orth_vector_1 * orth_vector_2).sum())" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + }, + { + "output_type": "stream", + "text": [ + "0\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7AS4V1Nhvvxz", + "colab_type": "text" + }, + "source": [ + "## 2.2 Are the following vectors orthogonal? Why or why not?\n", + "\n", + "\\begin{align}\n", + "a = \\begin{bmatrix} -5 \\\\ 3 \\\\ 7 \\end{bmatrix}\n", + "\\qquad\n", + "b = \\begin{bmatrix} 6 \\\\ -8 \\\\ 2 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "F_-y54YSz47k", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "523c20c7-1432-4ca4-d6e4-4a47923cb960" + }, + "source": [ + "# vector a and vector b\n", + "\n", + "vector_a = np.array([-5, 3, 7])\n", + "vector_b = np.array([6, -8, 2])\n", + "\n", + "# not orthogonal, since the dot product isn't 0\n", + "\n", + "(vector_a * vector_b).sum()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "-40" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MiNjyqiEz5SG", + "colab_type": "text" + }, + "source": [ + "## 2.3 Compute the following values: What do these quantities have in common?\n", + "\n", + "## What is $||c||^2$? \n", + "\n", + "## What is $c \\cdot c$? \n", + "\n", + "## What is $c^{T}c$?\n", + "\n", + "\\begin{align}\n", + "c = \\begin{bmatrix} 2 & -15 & 6 & 20 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "IlV_uaYK1EQB", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 69 + }, + "outputId": "45ea41bd-3b69-4702-bb3c-88d57ac0ece9" + }, + "source": [ + "# vector c\n", + "\n", + "vector_c = np.array([2, -15, 6, 20])\n", + "\n", + "# these values are all just forms of the values of vector c squared (norm squared, dot product with itself, multiplying its transpose (which is just itself) by itself)\n", + "\n", + "print(str(((vector_c[0] ** 2) + (vector_c[1] ** 2) + (vector_c[2] ** 2) + (vector_c[3] ** 2))))\n", + "print(str((vector_c * vector_c).sum()))\n", + "print(str(vector_c.T * vector_c))" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "665\n", + "665\n", + "[ 4 225 36 400]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MK_TpWqk1Evk", + "colab_type": "text" + }, + "source": [ + "# Unit Vectors" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Kpit6WWO1b8l", + "colab_type": "text" + }, + "source": [ + "## 3.1 Using Latex, write the following vectors as a linear combination of scalars and unit vectors:\n", + "\n", + "\\begin{align}\n", + "d = \\begin{bmatrix} 7 \\\\ 12 \\end{bmatrix}\n", + "\\qquad\n", + "e = \\begin{bmatrix} 2 \\\\ 11 \\\\ -8 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oBCj1sDW2ouC", + "colab_type": "text" + }, + "source": [ + "$i_2 = \\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$j_2 = \\begin{bmatrix} 0 \\\\ 1 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$i_3 = \\begin{bmatrix} 1 \\\\ 0 \\\\ 0 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$j_3 = \\begin{bmatrix} 0 \\\\ 1 \\\\ 0 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$k_3 = \\begin{bmatrix} 0 \\\\ 0 \\\\ 1 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$d = 7i_2 + 12j_2$\n", + "\n", + "$e = 2i_3 + 11j_3 - 8k_3$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dAdUQuep1_yJ", + "colab_type": "text" + }, + "source": [ + "## 3.2 Turn vector $f$ into a unit vector:\n", + "\n", + "\\begin{align}\n", + "f = \\begin{bmatrix} 4 & 12 & 11 & 9 & 2 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "I3W8ZiHR1_Fa", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "13ccd13b-5abc-4f84-e85c-87fc62e03533" + }, + "source": [ + "# vector f\n", + "\n", + "vector_f = np.array([4, 12, 11, 9, 2])\n", + "\n", + "# divide by the norm to make a unit vector\n", + "\n", + "new_unit_vector = np.multiply((1 / ((366) ** (1/2))), vector_f)\n", + "new_unit_vector" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([0.20908335, 0.62725005, 0.57497921, 0.47043754, 0.10454167])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "o39UyP-I5lpP", + "colab_type": "text" + }, + "source": [ + "# Linear Independence / Dependence " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ajfBqYe45sT5", + "colab_type": "text" + }, + "source": [ + "## 4.1 Plot two vectors that are linearly dependent and two vectors that are linearly independent (bonus points if done in $\\mathbb{R}^3$)." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "gfHJgokIsr6P", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "58e0e112-512c-4b34-e6b2-a33b0b47fb3d" + }, + "source": [ + "# linearly dependent vectors\n", + "\n", + "ld_vector_1 = np.array([3, 7])\n", + "ld_vector_2 = np.array([12, 28])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1, 13)\n", + "plt.ylim(-1, 29)\n", + "\n", + "plt.arrow(0, 0, ld_vector_2[0], ld_vector_2[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.arrow(0, 0, ld_vector_1[0], ld_vector_1[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Lxy_zt49eoHM", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "d64a80b8-ec5f-4cd7-fc68-6f6cf4e851e0" + }, + "source": [ + "# linearly independent vectors\n", + "\n", + "li_vector_1 = np.array([3, 7])\n", + "li_vector_2 = np.array([7, 17])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1, 8)\n", + "plt.ylim(-1, 18)\n", + "\n", + "plt.arrow(0, 0, li_vector_2[0], li_vector_2[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.arrow(0, 0, li_vector_1[0], li_vector_1[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TrJ0MT_n3SvO", + "colab_type": "text" + }, + "source": [ + "# Span" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "86iXLzwM2z8l", + "colab_type": "text" + }, + "source": [ + "## 5.1 What is the span of the following vectors?\n", + "\n", + "\\begin{align}\n", + "g = \\begin{bmatrix} 1 & 2 \\end{bmatrix}\n", + "\\qquad\n", + "h = \\begin{bmatrix} 4 & 8 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "G2LK2RWL39Q4", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "3e6b47c0-38ca-4c98-ef65-12072efa7cb8" + }, + "source": [ + "# the line that g and h are on, since h is a multiple of g\n", + "\n", + "# vectors\n", + "\n", + "vector_g = np.array([1, 2])\n", + "vector_h = np.array([4, 8])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(0, 5)\n", + "plt.ylim(0, 9)\n", + "\n", + "plt.arrow(0, 0, vector_h[0], vector_h[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.arrow(0, 0, vector_g[0], vector_g[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l1deylUj4IHH", + "colab_type": "text" + }, + "source": [ + "## 5.2 What is the span of $\\{l, m, n\\}$?\n", + "\n", + "\\begin{align}\n", + "l = \\begin{bmatrix} 1 & 2 & 3 \\end{bmatrix}\n", + "\\qquad\n", + "m = \\begin{bmatrix} -1 & 0 & 7 \\end{bmatrix}\n", + "\\qquad\n", + "n = \\begin{bmatrix} 4 & 8 & 2\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "p1i_ueD25ZcP", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "outputId": "3e389993-2623-48dd-a91b-e578d88e8e92" + }, + "source": [ + "# R^2, since all three of these vectors are linearly independent\n", + "\n", + "# vectors\n", + "\n", + "vector_l = np.array([[0, 0, 0, 1, 2, 3]])\n", + "vector_m = np.array([[0, 0, 0, -1, 0, 7]])\n", + "vector_n = np.array([[0, 0, 0, 4, 8, 2]])\n", + "\n", + "# plot them\n", + "\n", + "X_1, Y_1, Z_1, U_1, V_1, W_1 = zip(*vector_l)\n", + "X_2, Y_2, Z_2, U_2, V_2, W_2 = zip(*vector_m)\n", + "X_3, Y_3, Z_3, U_3, V_3, W_3 = zip(*vector_n)\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "ax.quiver(X_1, Y_1, Z_1, U_1, V_1, W_1, length=1)\n", + "ax.quiver(X_2, Y_2, Z_2, U_2, V_2, W_2, length=1)\n", + "ax.quiver(X_3, Y_3, Z_3, U_3, V_3, W_3, length=1)\n", + "ax.set_xlim([-2, 5])\n", + "ax.set_ylim([-1, 9])\n", + "ax.set_zlim([1, 8])\n", + "ax.set_xlabel('X')\n", + "ax.set_ylabel('Y')\n", + "ax.set_zlabel('Z')\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IBqe7X1732kX", + "colab_type": "text" + }, + "source": [ + "# Basis" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YeUZVHRM6PpT", + "colab_type": "text" + }, + "source": [ + "## 6.1 Graph two vectors that form a basis for $\\mathbb{R}^2$\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "utvF3Pkt8NP6", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "2e75bd97-77f5-46ad-df99-a6a5e7f6d5e4" + }, + "source": [ + "# vectors\n", + "\n", + "vector_i = np.array([0, 1])\n", + "vector_j = np.array([1, 0])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1, 2)\n", + "plt.ylim(-1, 2)\n", + "\n", + "plt.arrow(0, 0, vector_i[0], vector_i[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.arrow(0, 0, vector_j[0], vector_j[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "20yPFBDUxxnS", + "colab_type": "text" + }, + "source": [ + "## 6.2 What does it mean to form a basis?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3w4tEayT8M0o", + "colab_type": "text" + }, + "source": [ + "To form a basis for a vector space means to establish a set of \"essential\" vectors that are linearly independent (i.e. they are not combinations of multiples of one another) so that the different combinations of multiples of these \"essential\" vectors form a unique space." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EHmUxbcY6vD3", + "colab_type": "text" + }, + "source": [ + "# Rank" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IpJwt9kw6v8U", + "colab_type": "text" + }, + "source": [ + "## 7.1 What is the Rank of P?\n", + "\n", + "\\begin{align}\n", + "P = \\begin{bmatrix} \n", + "1 & 2 & 3 \\\\\n", + " -1 & 0 & 7 \\\\\n", + "4 & 8 & 2\n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xhKUKhIloJnz", + "colab_type": "text" + }, + "source": [ + "P's rank is 3, since there are no combinations of multiples of any two row vectors that can sum to the third (i.e. they are all linearly independent)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jGqFMBYY7mHD", + "colab_type": "text" + }, + "source": [ + "## 7.2 What does the rank of a matrix tell us?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vjg1IiCD8nnP", + "colab_type": "text" + }, + "source": [ + "The rank of a matrix is the number of linearly independent row vectors within the matrix. It gives us the basis of the row vector space." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0Db2sc_V8QD6", + "colab_type": "text" + }, + "source": [ + "# Linear Projections\n", + "\n", + "## 8.1 Line $L$ is formed by all of the vectors that can be created by scaling vector $v$ \n", + "\\begin{align}\n", + "v = \\begin{bmatrix} 1 & 3 \\end{bmatrix}\n", + "\\end{align}\n", + "\n", + "\\begin{align}\n", + "w = \\begin{bmatrix} -1 & 2 \\end{bmatrix}\n", + "\\end{align}\n", + "\n", + "## find $proj_{L}(w)$\n", + "\n", + "## graph your projected vector to check your work (make sure your axis are square/even)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "hp5z2WTBCNKx", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "991727fe-e909-433a-9772-d9717feae0fd" + }, + "source": [ + "# vectors\n", + "\n", + "v = np.array([1, 3])\n", + "w = np.array([-1, 2])\n", + "\n", + "# calculate projection scalar by using dot product over norm of v squared\n", + "\n", + "proj = np.multiply(((w * v).sum())/10, v)\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1.5, 4) \n", + "plt.ylim(-1, 4)\n", + "\n", + "x_vals = np.array(axes.get_xlim())\n", + "y_vals = 3*x_vals\n", + "\n", + "plt.plot(x_vals, y_vals, '--', color='b', linewidth=1)\n", + "plt.arrow(0, 0, v[0], v[1], linewidth=3, head_width=.05, head_length=0.05, color ='red')\n", + "plt.arrow(0, 0, proj[0], proj[1], linewidth=3, head_width=.05, head_length=0.05, color ='gray')\n", + "plt.arrow(0, 0, w[0], w[1], linewidth=3, head_width=.05, head_length=0.05, color ='yellow')\n", + "\n", + "plt.show()" + ], + "execution_count": 86, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TKkrPwRM-Oar", + "colab_type": "text" + }, + "source": [ + "# Stretch Goal\n", + "\n", + "## For vectors that begin at the origin, the coordinates of where the vector ends can be interpreted as regular data points. (See 3Blue1Brown videos about Spans, Basis, etc.)\n", + "\n", + "## Write a function that can calculate the linear projection of each point (x,y) (vector) onto the line y=x. run the function and plot the original points in blue and the new projected points on the line y=x in red. \n", + "\n", + "## For extra points plot the orthogonal vectors as a dashed line from the original blue points to the projected red points." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cp52kZra-ykj", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "67fadc9c-bf6c-4950-c985-81238d9ada02" + }, + "source": [ + "import pandas as pd\n", + "\n", + "# Creating a dataframe for you to work with -Feel free to not use the dataframe if you don't want to.\n", + "x_values = [1, 4, 7, 3, 9, 4, 5]\n", + "y_values = [4, 2, 5, 0, 8, 2, 8]\n", + "\n", + "data = {\"x\": x_values, \"y\": y_values}\n", + "\n", + "df = pd.DataFrame(data)\n", + "\n", + "df.head()\n", + "\n", + "plt.scatter(df.x, df.y)\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "EZTA6Tj6BGDb", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "e40d9090-674e-4c35-a817-f176bf2b17c1" + }, + "source": [ + "def plot_proj_point(x_set, y_set):\n", + " plt.xlim(min(x_set) - 2, max(x_set) + 2) \n", + " plt.ylim(min(y_set) - 2, max(y_set) + 2)\n", + " \n", + " projected_x_points = np.array([])\n", + " projected_y_points = np.array([])\n", + "\n", + " for i in range(0, len(x_set)):\n", + " projected_x_points = np.append(projected_x_points, (x_set[i] + y_set[i])/2)\n", + "\n", + " for i in range(0, len(y_set)):\n", + " projected_y_points = np.append(projected_y_points, (x_set[i] + y_set[i])/2)\n", + " \n", + " # set up the line variables\n", + "\n", + " axes = plt.gca()\n", + " x_vals = np.array(axes.get_xlim())\n", + " y_vals = x_vals\n", + "\n", + " # plot the points and the line y = x\n", + " \n", + " plt.plot(x_vals, y_vals, '--', color='b', linewidth=1)\n", + "\n", + " for i in range(0, len(x_set)):\n", + " plt.scatter(x_set[i], y_set[i], c='blue')\n", + "\n", + " for i in range(0, len(projected_x_points)):\n", + " plt.scatter(projected_x_points[i], projected_y_points[i], c='red')\n", + "\n", + " # now plot the line between the two points\n", + " \n", + " #extra_x_vals = [orig_point[0], proj[0]]\n", + " #extra_y_vals = [orig_point[1], proj[1]]\n", + " #plt.plot(extra_x_vals, extra_y_vals, '--')\n", + " \n", + " plt.show()\n", + "\n", + "plot_proj_point(x_values, y_values)" + ], + "execution_count": 89, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/module3-dimensionality-reduction/Eli_Fulton_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb b/module3-dimensionality-reduction/Eli_Fulton_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb new file mode 100644 index 00000000..beaeffe9 --- /dev/null +++ b/module3-dimensionality-reduction/Eli_Fulton_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb @@ -0,0 +1,1481 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Eli Fulton LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GSNiYn8lr6nN", + "colab_type": "text" + }, + "source": [ + "# Statistics" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3d4izUhQvh2_", + "colab_type": "text" + }, + "source": [ + "## 1.1 Sales for the past week was the following amounts: [3505, 2400, 3027, 2798, 3700, 3250, 2689]. Without using library functions, what is the mean, variance, and standard deviation of of sales from last week? (for extra bonus points, write your own function that can calculate these two values for any sized list)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "w1iZfYvBtEA1", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 36 + }, + "outputId": "f9446189-7942-4cac-9800-fc6a790f5726" + }, + "source": [ + "# sales set\n", + "\n", + "sales = [3505, 2400, 3027, 2798, 3700, 3250, 2689]\n", + "\n", + "# function for caluclating three values\n", + "\n", + "def stat_returns(value_set, return_mean, return_variance, return_std):\n", + "\n", + " # variables to be printed\n", + "\n", + " mean = 0\n", + " variance = 0\n", + " std = 0\n", + "\n", + " # create the mean\n", + "\n", + " for num in value_set:\n", + " mean += num / len(value_set)\n", + "\n", + " # create the variance\n", + "\n", + " for num in value_set:\n", + " variance += ((num - mean) ** 2) / (len(value_set) - 1)\n", + "\n", + " # standard deviation (based off of variance)\n", + "\n", + " std = variance ** (1/2)\n", + " \n", + " # set up returns\n", + "\n", + " return_str = \"\"\n", + " \n", + " if return_mean == True:\n", + " return_str += (str(mean) + \" \")\n", + " if return_variance == True:\n", + " return_str += (str(variance) + \" \")\n", + " if return_std == True:\n", + " return_str += (str(std))\n", + "\n", + " return return_str\n", + "\n", + "stat_returns(sales, True, True, True)" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'3052.714285714286 214387.90476190476 463.02041505953576'" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 1 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oh63KaOctEp_", + "colab_type": "text" + }, + "source": [ + "## 1.2 Find the covariance between last week's sales numbers and the number of customers that entered the store last week: [127, 80, 105, 92, 120, 115, 93] (you may use librray functions for calculating the covariance since we didn't specifically talk about its formula)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "G7ZB0krot564", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "b2e70574-ba8b-459d-fe88-f9a3739dd404" + }, + "source": [ + "import numpy as np\n", + "\n", + "# set up customers\n", + "\n", + "customers = [127, 80, 105, 92, 120, 115, 93]\n", + "\n", + "# call np.cov()\n", + "\n", + "covariance = np.cov(sales, customers)\n", + "\n", + "covariance" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[214387.9047619 , 7604.35714286],\n", + " [ 7604.35714286, 290.95238095]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 2 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "J9SbUY9mt66I", + "colab_type": "text" + }, + "source": [ + "## 1.3 Find the standard deviation of customers who entered the store last week. Then, use the standard deviations of both sales and customers to standardize the covariance to find the correlation coefficient that summarizes the relationship between sales and customers. (You may use library functions to check your work.)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vFJms2YRrKhY", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "f5b276e8-d186-4dd7-fc53-a41b6713b205" + }, + "source": [ + "correlation_c = covariance / (float(stat_returns(sales, False, False, True)) ** 2)\n", + "\n", + "correlation_c" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1. , 0.03547008],\n", + " [0.03547008, 0.00135713]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 3 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IbZVf7nmujPJ", + "colab_type": "text" + }, + "source": [ + "## 1.4 Use pandas to import a cleaned version of the titanic dataset from the following link: [Titanic Dataset](https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_clean.csv)\n", + "\n", + "## Calculate the variance-covariance matrix and correlation matrix for the titanic dataset's numeric columns. (you can encode some of the categorical variables and include them as a stretch goal if you finish early)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0TWgUIiaCFzq", + "colab_type": "code", + "colab": {} + }, + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "df = pd.read_csv('https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_clean.csv')" + ], + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "mDsNcZqatB2W", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 332 + }, + "outputId": "55c9f21f-2d65-498f-c912-62492f64de3c" + }, + "source": [ + "df.cov()" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0pclasssurvivedagesibspparchfarebodyhas_cabin_number
Unnamed: 0143117.500000284.357034-53.967125-1442.93981225.8287461.172783-9410.735123591.579132-95.438885
pclass284.3570340.701969-0.127248-3.9546050.0530900.013287-24.227788-2.876653-0.249992
survived-53.967125-0.1272480.236250-0.314343-0.0140880.0347766.1460230.0000000.061406
age-1442.939812-3.954605-0.314343165.850021-2.559806-1.459378114.41661381.6229221.463138
sibsp25.8287460.053090-0.014088-2.5598061.0850520.3368338.641768-8.708471-0.003946
parch1.1727830.0132870.034776-1.4593780.3368330.7491959.9280314.2371900.013316
fare-9410.735123-24.2277886.146023114.4166138.6417689.9280312678.959738-179.16468410.976961
body591.579132-2.8766530.00000081.622922-8.7084714.237190-179.1646849544.6885673.625689
has_cabin_number-95.438885-0.2499920.0614061.463138-0.0039460.01331610.9769613.6256890.174613
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 pclass ... body has_cabin_number\n", + "Unnamed: 0 143117.500000 284.357034 ... 591.579132 -95.438885\n", + "pclass 284.357034 0.701969 ... -2.876653 -0.249992\n", + "survived -53.967125 -0.127248 ... 0.000000 0.061406\n", + "age -1442.939812 -3.954605 ... 81.622922 1.463138\n", + "sibsp 25.828746 0.053090 ... -8.708471 -0.003946\n", + "parch 1.172783 0.013287 ... 4.237190 0.013316\n", + "fare -9410.735123 -24.227788 ... -179.164684 10.976961\n", + "body 591.579132 -2.876653 ... 9544.688567 3.625689\n", + "has_cabin_number -95.438885 -0.249992 ... 3.625689 0.174613\n", + "\n", + "[9 rows x 9 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 5 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LoetLXZ9t0Ko", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 332 + }, + "outputId": "6116ac6c-9c49-4cf3-fef9-31ab51cf0a56" + }, + "source": [ + "df.corr()" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0pclasssurvivedagesibspparchfarebodyhas_cabin_number
Unnamed: 01.0000000.897822-0.293717-0.2961720.0655940.003584-0.4812150.015558-0.603727
pclass0.8978221.000000-0.312469-0.3663700.0608320.018322-0.558629-0.034642-0.713857
survived-0.293717-0.3124691.000000-0.050199-0.0278250.0826600.244265NaN0.302250
age-0.296172-0.366370-0.0501991.000000-0.190747-0.1308720.1718920.0590590.271887
sibsp0.0655940.060832-0.027825-0.1907471.0000000.3735870.160238-0.099961-0.009064
parch0.0035840.0183220.082660-0.1308720.3735871.0000000.2215390.0510990.036806
fare-0.481215-0.5586290.2442650.1718920.1602380.2215391.000000-0.0431100.507253
body0.015558-0.034642NaN0.059059-0.0999610.051099-0.0431101.0000000.083796
has_cabin_number-0.603727-0.7138570.3022500.271887-0.0090640.0368060.5072530.0837961.000000
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 pclass ... body has_cabin_number\n", + "Unnamed: 0 1.000000 0.897822 ... 0.015558 -0.603727\n", + "pclass 0.897822 1.000000 ... -0.034642 -0.713857\n", + "survived -0.293717 -0.312469 ... NaN 0.302250\n", + "age -0.296172 -0.366370 ... 0.059059 0.271887\n", + "sibsp 0.065594 0.060832 ... -0.099961 -0.009064\n", + "parch 0.003584 0.018322 ... 0.051099 0.036806\n", + "fare -0.481215 -0.558629 ... -0.043110 0.507253\n", + "body 0.015558 -0.034642 ... 1.000000 0.083796\n", + "has_cabin_number -0.603727 -0.713857 ... 0.083796 1.000000\n", + "\n", + "[9 rows x 9 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7K0Xfh8MvYkl", + "colab_type": "text" + }, + "source": [ + "# Orthogonality" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Pe3eOZ2fvdZ-", + "colab_type": "text" + }, + "source": [ + "## 2.1 Plot two vectors that are orthogonal to each other. What is a synonym for orthogonal?" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YLSBk7hJvvCx", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 286 + }, + "outputId": "2d91b4e5-da65-419b-da73-87dbb95ad9e9" + }, + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# orthogonal vectors\n", + "\n", + "orth_vector_1 = np.array([2, -6])\n", + "orth_vector_2 = np.array([9, 3])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1, 10)\n", + "plt.ylim(-7, 4)\n", + "\n", + "plt.arrow(0, 0, orth_vector_1[0], orth_vector_1[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.arrow(0, 0, orth_vector_2[0], orth_vector_2[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.show()\n", + "\n", + "# orthogonal means that the dot product is equal to 0 and that the vectors form right angles with each other\n", + "\n", + "print((orth_vector_1 * orth_vector_2).sum())" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + }, + { + "output_type": "stream", + "text": [ + "0\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7AS4V1Nhvvxz", + "colab_type": "text" + }, + "source": [ + "## 2.2 Are the following vectors orthogonal? Why or why not?\n", + "\n", + "\\begin{align}\n", + "a = \\begin{bmatrix} -5 \\\\ 3 \\\\ 7 \\end{bmatrix}\n", + "\\qquad\n", + "b = \\begin{bmatrix} 6 \\\\ -8 \\\\ 2 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "F_-y54YSz47k", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "523c20c7-1432-4ca4-d6e4-4a47923cb960" + }, + "source": [ + "# vector a and vector b\n", + "\n", + "vector_a = np.array([-5, 3, 7])\n", + "vector_b = np.array([6, -8, 2])\n", + "\n", + "# not orthogonal, since the dot product isn't 0\n", + "\n", + "(vector_a * vector_b).sum()" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "-40" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MiNjyqiEz5SG", + "colab_type": "text" + }, + "source": [ + "## 2.3 Compute the following values: What do these quantities have in common?\n", + "\n", + "## What is $||c||^2$? \n", + "\n", + "## What is $c \\cdot c$? \n", + "\n", + "## What is $c^{T}c$?\n", + "\n", + "\\begin{align}\n", + "c = \\begin{bmatrix} 2 & -15 & 6 & 20 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "IlV_uaYK1EQB", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 69 + }, + "outputId": "45ea41bd-3b69-4702-bb3c-88d57ac0ece9" + }, + "source": [ + "# vector c\n", + "\n", + "vector_c = np.array([2, -15, 6, 20])\n", + "\n", + "# these values are all just forms of the values of vector c squared (norm squared, dot product with itself, multiplying its transpose (which is just itself) by itself)\n", + "\n", + "print(str(((vector_c[0] ** 2) + (vector_c[1] ** 2) + (vector_c[2] ** 2) + (vector_c[3] ** 2))))\n", + "print(str((vector_c * vector_c).sum()))\n", + "print(str(vector_c.T * vector_c))" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "text": [ + "665\n", + "665\n", + "[ 4 225 36 400]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MK_TpWqk1Evk", + "colab_type": "text" + }, + "source": [ + "# Unit Vectors" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Kpit6WWO1b8l", + "colab_type": "text" + }, + "source": [ + "## 3.1 Using Latex, write the following vectors as a linear combination of scalars and unit vectors:\n", + "\n", + "\\begin{align}\n", + "d = \\begin{bmatrix} 7 \\\\ 12 \\end{bmatrix}\n", + "\\qquad\n", + "e = \\begin{bmatrix} 2 \\\\ 11 \\\\ -8 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oBCj1sDW2ouC", + "colab_type": "text" + }, + "source": [ + "$i_2 = \\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$j_2 = \\begin{bmatrix} 0 \\\\ 1 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$i_3 = \\begin{bmatrix} 1 \\\\ 0 \\\\ 0 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$j_3 = \\begin{bmatrix} 0 \\\\ 1 \\\\ 0 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$k_3 = \\begin{bmatrix} 0 \\\\ 0 \\\\ 1 \\end{bmatrix}\n", + "\\qquad$\n", + "\n", + "$d = 7i_2 + 12j_2$\n", + "\n", + "$e = 2i_3 + 11j_3 - 8k_3$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dAdUQuep1_yJ", + "colab_type": "text" + }, + "source": [ + "## 3.2 Turn vector $f$ into a unit vector:\n", + "\n", + "\\begin{align}\n", + "f = \\begin{bmatrix} 4 & 12 & 11 & 9 & 2 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "I3W8ZiHR1_Fa", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "13ccd13b-5abc-4f84-e85c-87fc62e03533" + }, + "source": [ + "# vector f\n", + "\n", + "vector_f = np.array([4, 12, 11, 9, 2])\n", + "\n", + "# divide by the norm to make a unit vector\n", + "\n", + "new_unit_vector = np.multiply((1 / ((366) ** (1/2))), vector_f)\n", + "new_unit_vector" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([0.20908335, 0.62725005, 0.57497921, 0.47043754, 0.10454167])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "o39UyP-I5lpP", + "colab_type": "text" + }, + "source": [ + "# Linear Independence / Dependence " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ajfBqYe45sT5", + "colab_type": "text" + }, + "source": [ + "## 4.1 Plot two vectors that are linearly dependent and two vectors that are linearly independent (bonus points if done in $\\mathbb{R}^3$)." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "gfHJgokIsr6P", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "58e0e112-512c-4b34-e6b2-a33b0b47fb3d" + }, + "source": [ + "# linearly dependent vectors\n", + "\n", + "ld_vector_1 = np.array([3, 7])\n", + "ld_vector_2 = np.array([12, 28])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1, 13)\n", + "plt.ylim(-1, 29)\n", + "\n", + "plt.arrow(0, 0, ld_vector_2[0], ld_vector_2[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.arrow(0, 0, ld_vector_1[0], ld_vector_1[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.show()" + ], + "execution_count": 23, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Lxy_zt49eoHM", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "d64a80b8-ec5f-4cd7-fc68-6f6cf4e851e0" + }, + "source": [ + "# linearly independent vectors\n", + "\n", + "li_vector_1 = np.array([3, 7])\n", + "li_vector_2 = np.array([7, 17])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1, 8)\n", + "plt.ylim(-1, 18)\n", + "\n", + "plt.arrow(0, 0, li_vector_2[0], li_vector_2[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.arrow(0, 0, li_vector_1[0], li_vector_1[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.show()" + ], + "execution_count": 24, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TrJ0MT_n3SvO", + "colab_type": "text" + }, + "source": [ + "# Span" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "86iXLzwM2z8l", + "colab_type": "text" + }, + "source": [ + "## 5.1 What is the span of the following vectors?\n", + "\n", + "\\begin{align}\n", + "g = \\begin{bmatrix} 1 & 2 \\end{bmatrix}\n", + "\\qquad\n", + "h = \\begin{bmatrix} 4 & 8 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "G2LK2RWL39Q4", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "3e6b47c0-38ca-4c98-ef65-12072efa7cb8" + }, + "source": [ + "# the line that g and h are on, since h is a multiple of g\n", + "\n", + "# vectors\n", + "\n", + "vector_g = np.array([1, 2])\n", + "vector_h = np.array([4, 8])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(0, 5)\n", + "plt.ylim(0, 9)\n", + "\n", + "plt.arrow(0, 0, vector_h[0], vector_h[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.arrow(0, 0, vector_g[0], vector_g[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.show()" + ], + "execution_count": 27, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l1deylUj4IHH", + "colab_type": "text" + }, + "source": [ + "## 5.2 What is the span of $\\{l, m, n\\}$?\n", + "\n", + "\\begin{align}\n", + "l = \\begin{bmatrix} 1 & 2 & 3 \\end{bmatrix}\n", + "\\qquad\n", + "m = \\begin{bmatrix} -1 & 0 & 7 \\end{bmatrix}\n", + "\\qquad\n", + "n = \\begin{bmatrix} 4 & 8 & 2\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "p1i_ueD25ZcP", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "outputId": "3e389993-2623-48dd-a91b-e578d88e8e92" + }, + "source": [ + "# R^2, since all three of these vectors are linearly independent\n", + "\n", + "# vectors\n", + "\n", + "vector_l = np.array([[0, 0, 0, 1, 2, 3]])\n", + "vector_m = np.array([[0, 0, 0, -1, 0, 7]])\n", + "vector_n = np.array([[0, 0, 0, 4, 8, 2]])\n", + "\n", + "# plot them\n", + "\n", + "X_1, Y_1, Z_1, U_1, V_1, W_1 = zip(*vector_l)\n", + "X_2, Y_2, Z_2, U_2, V_2, W_2 = zip(*vector_m)\n", + "X_3, Y_3, Z_3, U_3, V_3, W_3 = zip(*vector_n)\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "ax.quiver(X_1, Y_1, Z_1, U_1, V_1, W_1, length=1)\n", + "ax.quiver(X_2, Y_2, Z_2, U_2, V_2, W_2, length=1)\n", + "ax.quiver(X_3, Y_3, Z_3, U_3, V_3, W_3, length=1)\n", + "ax.set_xlim([-2, 5])\n", + "ax.set_ylim([-1, 9])\n", + "ax.set_zlim([1, 8])\n", + "ax.set_xlabel('X')\n", + "ax.set_ylabel('Y')\n", + "ax.set_zlabel('Z')\n", + "plt.show()" + ], + "execution_count": 32, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADnCAYAAAC9roUQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9eXQsd3ktuqvnQS2pNbR0NM86OrPOfBzwlBhMgAQbx74BAmSCewNZdhKS3BdWwnVYwZCEECAvwGPKA96F5MJ1ICaY2I6Nwb4+k318fCZNrZ5bLfU8V3dV1/tD/MrV3dVzlaw+rr2W1gFZ+lV1qWrX9/u+b++P4jgOChQoUKBgZ6B6rU9AgQIFCl5PUEhXgQIFCnYQCukqUKBAwQ5CIV0FChQo2EEopKtAgQIFOwhNjf+utDYoUKBAQeOgKv0HJdJVoECBgh2EQroKFChQsINQSFeBAgUKdhAK6SpQoEDBDkIhXQUKFCjYQSikq0CBAgU7CIV0FShQoGAHoZCuAgUKFOwgFNJVoECBgh2EQroKFChQsINQSFeBAgUKdhAK6SpQoEDBDkIhXQUKFCjYQdRyGVOgoCI4jkOhUABN02AYBhqNBiqVCmq1GiqVCiqVChRV0WxJgYLXJagagykVa0cFZeA4DizLgmGYov8NAB6PBwaDAX19fQDAkzD5UshYwesEFW9wJdJVUDdKyZaiKNA0jfX1dTAMg46ODmQyGZ5cye/k83nkcrkiolXIWMHrFUqkq6AmOI4DwzBgWZYn21QqBbvdjnQ6jbGxMajVamQyGWxsbCCfz4OiKKjVapjNZpjNZphMJpjNZuj1+qJ1S+8/hYwV3CSoeMMqpKugIgjZktQBRVGIx+Ow2+1gGAaTk5Po7e3lo1+VSgWPxwOVSoWhoSEwDIN0Oo1UKsV/0TQNlUpVRsYGg6HouOSLkG0oFMLAwACfNybkrJCxgl0KJb2goH4UCgUkEglQFAWtVgsAiEajsNvtUKlUmJqaQnd3N//zQuKjKIqPXjUaDTo7O9HZ2Vm0PsuyPBnHYjH4fD5ks1moVCqehAkhG41GAIDT6URfX19RaoPjuKqRsULICnYjFNJVwKNQKPBpBKfTCavVCgBYX1+HwWDA/Pw8LBZL1TUoikKhUKj6M2q1GhaLpWwtlmWRyWSQSqUQj8fh9/uRzWYBAJlMBi6Xq4iMSd5YWMgTnodKpYJGo1HIWMGugkK6r3OQbXw+n+fJkuM4pFIpBAIB9Pb24uDBgzCZTHWtJ4x0G4VarUZHRwc6OjqKvl8oFHDu3DmYTCYkk0kEAgFkMhkAgNFoLIqMTSYTT6qkna30/Eh0LExVKGSsYKegkO7rFKTHlmGYIrL1+XxwuVxQq9WYnJzE6OhoU2tLCUKSNput6PuFQgHZbJbPF29tbSGdToPjuCIyNpvNMBqNUKvV/OdmWRbZbBbLy8vYu3cvABSlKUh0rJCxAqmhkO7rDKVkS1EUWJaFx+OB1+vF4OAgTpw4AY/HA42m8dtjJwmK5IBNJhP6+/v573Mch0wmw+eNQ6EQ0uk0CoUCDAYDT8QGg4FvcROSsbCAB0A0Z6x0VChoFgrpvk4g1mObz+fhdruxsbGBkZERnD59midalUrVVMSqUqlq5nTlBkVRPBkTkQawfQ2y2SxPxuFwGKlUCufOnYNery+KjE0mEzQaTVUyVtrbFDQDhXRvcoiRbS6Xg8PhQCgUwtjYGG655Ra+KEVQT0Gs2jF3IyiKgtFohNFoRG9vLxiGQTabxeLiInK5HJLJJNLpNHw+H1KpFFiWhU6nKyNjrVZblAsXE35ks1l0dnYqZKygDArp3qQQEzRks1msr68jHo9jYmICc3NzZWRL0GzE2o7EQlEU9Ho99Ho9ent7+e9zHIdcLodUKoV0Oo2NjQ2kUikwDAOtVltExmazmSdjAHjllVdw7NixouMokbECQCHdmw5iggaiHstms5icnMS+fftqPuiNRLqV+nR3O0rTBaUQknFPT0/RfxOS8ebmJlKpFPL5PDQaDcxmM/L5POLxOE/GBAzDIJ/PF61FyFcRfrw+oJDuTYJCoYBcLge/34/BwUFQFIVYLAa73Y5CoYCpqSlYrda6H2SVSlVGDvWgnUi3Feh0Ouh0Or6XmSCfzyOVSiEYDCIYDMLpdCKXyxVJosmXTqfjf680BaQIP25eKKTb5hAKGhiGgdvthk6nw/r6OjQaDaanp9HV1dXwus2S5+uFdCtBq9Wiu7sbOp0Os7Oz/PcZhuFb28LhMNxuN2iahlqtLlLhlfpTlAo/wuEw//OK8KM9oZBuG0JM0ABs+xMQJdfCwkKZyKARNNK9QKJsg8HQVqRbK70gJTQaDbq6uspegCzL8mQcjUbh9XpFJdGkxS0SiUCtVsNoNCrCjzaFQrpthEqCho2NDTidTnR3d8NoNOLgwYMtH6uenC7LsnC73XxPL4nIOI6Dx+OB2WxGR0dHUU7z9YBGXjpqtboufwq/349MJgOappFOp/l8MRF+kJcdaW/L5XJlx1GEH7sDCum2AcQEDYVCAV6vFx6PB/39/Th27Bj0ej2ef/55SY5ZrXuBpDF8Ph/27NmDkydPolAoQKVSIRQKwev1gqIobG1t8V67lar9ryXkinSlWLeSP8W1a9f4DotEIlFREk3ImOxYSnuNyb+K8GPnoZDuLoZYjy2JLoWEJwd5iaUJ8vk8XC4XNjY2MDw8jNOnT0OtVvPpBWA7p6nT6TA8PFz0u6TaTzwdhK1XHR0dRWTRjBJuN0HOtAXHcfz1EqJQKPBmQUJJNIAiFR7pNRZT4V2/fh379u0DoLS3yYn2vrtvUoiRLcMwcDgc2NrawsjICM6cOQO1Wi3bOQgj3VwuB6fTic3NTYyOjvJkKwR5GCvldCtV+wkZJ5NJ+P1+UVFCR0eHbHni3RrpVgLZ6ZRC6FFc+vNCf4pgMIhMJlMmiTabzUin0zwZKxM/5INCursIYoIGmqbhcDgQiUQwPj6OmZmZioIGKUGIfmlpCcFgEOPj4zhz5kzNYzdaSBMjY6EoIZVKwefzIZPJiMp1zWZz0y8fuYictHvthrWr+VMIyTgcDvPX2GAwlPkaE0k0ULnXWCHj+qCQ7i6AmKAhk8nAbrcjlUphYmICe/fu3bEbOJvNwul0IhgMYmFhAbOzszUfdPKSkKJ7QUyUkEgkcPz4cV6um0ql4PV6kUqlRKM2soWudc5yQO5IVwpCF0qi+/r6eDvP48ePg6Zpnoy9Xi/S6TRYloVery/rqKiHjMn56vV6hYyhkO5rCpKHi0Qi6O3tBUVRSCQSsNvtyOVymJqa4r+/EyBEH4/HMTg4CAAYGhqq63drpRekQDW5rpAowuGwqKsY+RKSlhzXtlIKQKq15YiiyTlTFAWDwQCDwVBREp1KpYpSQSQvLyRkoSSaZVlcuHABR48eLRN+CFvbXi8dFQrpvgYQChqIwYparYbdbgdFUbx6rBkIK9P1gsiEU6kUpqamsG/fPqTTacRisbqPKcROR5DViKJ0C03I2Gg0QqfTIZvNIplMwmQySUZm7RDpiq1bbWdQSRJNcr+ViqRk18GyLAqFAnQ6XREZvx4nfiiku0OoJGiIx+MIBoMAUNc4nFogBbB68pzJZBJ2ux2ZTAZTU1Po6+trOWLdTQ9G6RaagPjthsNhRKNROJ3OMvNz0iEgHAtUL+TuXpArOm8mN05RVE1JdCKRAMuyuHr1apE/hTAyFkqib/aJHwrpygwxQQMABAIBOBwO/qY7fPiwJMdTqVRgWbbqA5RIJLC2toZ8Po+pqSn09PSU3bjNuow168O7kyB+u8D2wM39+/cDeJWMSTfF5uZmzR5YMcitdJNjbZZlJY+giSTaaDQiHA7z93g+ny8ymHe5XGX+FISQ9Xp9TeFHOp1GZ2cntFotH9SUik12ExTSlQliggaO4+D3++FyudDT04PFxUVoNBpcvHhRsuNWI8tYLIa1tTUUCgVMT09XTWG0kpuVg3SbSZvUQul5Cs3PhZX+0h5YIRmXFpaMRuOOyoulghykK1xbGARotVpRSTTDMDwZRyIReDwe0DRd1A5HrrdQcr6ysoJ9+/aBYRj8+Mc/xssvv4xPfOITsnwWKaCQrsSoJGjwer3wer2w2Ww4fvw4v50iPy8VxEg3EolgbW0NKpWqbgOcZiPWdvJeAOqLGqv1wBKSSCQS2NjYQDabRaFQQKFQgMPh4NMUhCR2K5pNL9QDhmHqWluj0dQlifb5fEX+FOl0GolEAul0GpFIpCmDp52EQroSoRLZEgXX0NAQTp06Vaa2kvpBJKTLcRzC4TDsdju0Wi3m5uYa2nI1Ozmi3Ui3FahUKtHpxdFoFB6PB0ajUZQkSk1sdgMZ10pJtbp2KyrDSpJolmX57p9EIoFPfepTeOGFF1AoFHD58mXs27cPH/7wh1si4c985jP4yle+AoqicPDgQXz961+HwWBoej1AId2WISZoyOfzcDgcCAaDFRVccoH4H1y9ehVGo7Fpt7FWJke0C+nKlQYgxaWBgQEMDAzw368WsZW2tZFc5k5Brq4IQD5CV6vVvKHS1NQUvvSlL+FTn/oU9u3bh8OHD+PatWtFBbpG4fV68bnPfQ7Xrl2D0WjE/fffj+985zt4//vf39J5K6TbJMQEDcJxOOPj43WJCqQ8n62tLWxtbSGXy+HAgQNl2+FGUC95MgwDl8uFzc1NPh9K5KOt3PDNns9uQKU+3WoRWzqdRjKZLMplEq9doTeFXNdAzpxuvemFZlB6PWKxGPr6+rB//36+QNoKGIZBJpOBVqtFOp2uu2+9GhTSbRCkqEJuUOE4nEwmU/c4HKnAcRwCgQDW19fR2dkJm82GoaGhlggXqJ32EDqNDQ0NYf/+/aBpGolEAvl8nm8PErqLEfLYLYY2u0WRVomMhYWlcDgMl8uFdDqNixcvik6haOWekzOnK2fqovS84/E4uru7JVl7eHgYH/nIRzA2Ngaj0Yg3velNeNOb3tTyurvj7m8DCAUNZ8+exS233MKPw2FZtmLrVb1o9EEtFArY2NiAw+GA1WrF4uIiDAYDlpeXJS3MlUJItsRpTKVSIZfLQa/Xw2KxwOfzYXFxEUCxu9jGxgaSySQvKRUScT2yXTmwmw1vSgtLhUIBL774Ig4fPsxfU2HLFel/rTQSqBrkzulKuesRgmGYopd4PB6XrJAWiUTw/e9/H+vr6+ju7sav/dqv4Vvf+hbe8573tLSuQrpVUEnQQGSNrYzDEaIRQUOhUIDP54PL5UJvby/vo1u6ltQgaQS/319k6wgUR4ylZFPN0IZ4KJQqxYTb6WbECa815BQwELWWWMsV6X9NJpPY2tqCw+EoEiMIdxyldqCFQkG2HYichF5KurFYrGk1ZymefPJJTE5O8u2D9957L55//nmFdOVAJUEDuZEZhsHs7Kxk2xi1Wl3zxiRtZ263u6ztTAipSbca2TaLah4KlcQJ2WwWLpcLFosFHR0dkhSadrOJuRhqeTpU6n8VynQrGcunUinZotGdJl2pnsuxsTG88MILSKfTMBqNeOqpp3D8+PGW11VIVwDS9kV04qR4Q9Rj3d3dOHjwIK5fvw6j0SjZcYkRuBiIabnX68Xg4GBN03KpSJdhGNA0jbNnz0pGtrVQTZxw8eJF6PX6oqp/6YTdjo4O2YijEchJ5s1E/UQZVkpGwtRPIpFAPB6Hy+WS3Fh+J0mXGPBIgVOnTuG+++7D0aNHodFosLi4iA984AMtr6uQLsR7bMk23u12o6+vr2gbr1arwTBM0ba+FRDprhDCCLNSj2+ltVohXeFxKYra0Xa3SiCae5vNVnQNSKEpmUwiFArB6XTy22lCGtWKd+0Y6UqZahGmftLpNGw2G7q6upDP5/nUTzVjeeKzWwulxCglhGvLURh9+OGH8fDDD0u65uuadCuRLYksK43DIekAqSBcL5/Pw+l0IhAINBVhihF4PWAYBk6nExsbGxgZGcHp06dx9uzZ15xwq6GSgklIGmLFO0IacuS+gfYhXbG1SY9xT09PmZuYMDIu9dmtZiy/U5EuId3dIDaphtcl6Yr12BLS2dzcxPDwcNVxOMLJt1JArVYjm80iEAjwI3HqmdJQaa1SI+lqECPbZt2m5EQjfbparRZWq7Vq8c7tdiORSCCXyyGXy7XsLCaEXJMjXksBQzVrx1LT81Jj+XQ6zfe6Sk2+DMPwCrFsNssbGe1mvK5IV4xsaZrG+vo6IpEIxsbG6iI7KSNdmqYRi8UQDAYxNTXVNNkS1JtekIps2wVixbtoNIpAIIDR0VHR4l2pMKFeya5cJuY7Eek2impexjRNI5lMYmNjAz6fjzdbEhrLkzRFs59LGOlGo9Fd7S5G8LogXWIJJyTbdDqN9fV1JBIJTE5ONjQOR4pIl6jXIpEIjEYjpqamiiSjzaJWeqFRsm1Hx6xGUK14V02yK8wZlxbv5Ix05fpbSJ0CEJKx3W4vss+sZixfOnKp1nUUkq6UnQty4qYmXfLghEIh2Gy2snE4k5OT2L9/f8M3ciuRLiH7eDzOk73D4ZAsv1gp0hWSbb3pC+I0Vs/12QlylrpQUu2chWY2pf4JJCouFSYQIk6n07Jsc+UceClnFC1ELWN54dRiobF8pd7tUtLd7Q5jwE1IuqWCBpqm4fP5oNfrYbfbAaClcTjAdqTbSN4UEB+JQx74ZotfYigl3WbIloAUFneDOGG3RNtqtbpm8S4ejyMcDvP3XelWutmIsh1NaepFtR0HiYzFjOUTiQRisRhCoRBCoZAS6e4kKgkaEokEwuEwVCoVZmdnJcn5kMJXPUgmk1hbW0M2m8X09LTooEkpc8SEdIVdEM0W5hptP2u3VISU5yss3rEsC4PBAJvNVlS883g8fJGpmbFAcpKunO1zraDSCHnigfLKK68gk8ngH//xH/Hkk08il8vB4/Fg//79+OAHP1iUZ24ES0tLeOCBB/j/b7fb8Zd/+Zd46KGHWvo8wE1AumKCBgDY3Nzkx+EYDAYcOXJEsmPWk9ONx+NYW1sDwzA1fRnUanXZCJJmwXEcYrEYzp0711IXBFB/x0AikYDT6YROp+NbsdqNgKWEcBx9LeVdpUkUYubnu2XX0QjkOmeSW1epVJiamsKnP/1pfPnLX4ZWq8Wdd96Jq1evttQbPD8/j0uXLgHY3gUMDw/jnnvukeTc25Z0xXpsOY7jfQmsViuOHDkCg8GA559/XtJjV4tMyUgcjuPqTmNIEemSyNbv90OtVvNGNK2gVqSbSCSwuroKlmUxMjKCfD6PRCIBmqZx/vz5IsUYyY82qxZqJ2vHWi+cZot3RG2Vy+Wg1WolfanJWaCT21WOnHssFsPevXsls3UkeOqppzA9PY3x8XFJ1ms70q1Etm63Gx6Pp6ovgVQQi3SbGYlDUE0GXAulaYRjx47h+vXrkkQXlYgumUxidXUV+XweMzMzsFqtyOVy/N8jFArhxIkTRUUnoeafRMRS5DlbwW5TpNUq3nk8HqTTaVy7dq2seEe+pJLASoWdzBXL1b3wne98B7/+678u2XptR7osyyKfz9c9DkcOkMiUjMRZW1uDTqdreoR6M4U0IdkK+4tzuZxsnRCpVIrPT8/MzBQ1yZeC4zjRopNQ2ZRMJuF2u0XHn3d0dOyaUTaNQmoyJ9fRYrHAarViz549AF41skkmkwgEAkilUrw8vZHinZw7CDlJt/Q6y0G6uVwOP/jBD/DII49Itmbbka5KpWp4HI7UVXi1Wo10Oo1z587BaDRi3759TY3EEa5XL+mSz765uSkq5pDSZYxEuul0Gmtra0in0xWLgWK/J/Yz1ZRNpUMeiVm82WxGNptFNBqF1WqVbBez2yLdWii9h8WMbEqVd2LFO0LGpHgnZ/59p3wXAHlI90c/+hGOHj0qSQ89QduRbiwWw6VLlzAxMVH3OBytVot8Pt+yQQ3Hcdjc3ITdbgdN01hcXJSkH7Me0q1FtgRSkm6hUMDq6ipomsb09DT6+vrqejibyb9SFMUTgs1m479PttakC8Xn8yGfz/PmKyQqfq1SFGJ4LWXA1Yp32WyWJ2PSBwsABoMBuVwOwWBQ8mGZO+kwFo/HJfPSJfj2t78taWoBaEPS7ezsxJkzZxq6KUgOtlnS5TiOn9LQ1dWFw4cP49KlS5I1wFcj3XrJlqDZ0elCZLNZ2O12hMNhTExMYHJysqHrLWXRi2ytDQYDJicneZ09ieaSyWRZNEeImLRi7XSKQk4ZcLPrCkUJpcW7WCyGlZUVxOPxisq7ZkcCtauXLrCdTnviiSfwpS99SbI1gTYkXeKE1Aiale0WCgX4/X44nc6ikThSQ6yQJiTb8fHxlj0Z6gHxoQiHw5iamgIAdHd3N3y9d6LToJITViaTQTKZFE1RlEp32y29IEcErVKpoNfrYTKZ+L858OoOo9JIICEZVyve7STpSrGbFcJsNiMUCkm2HkHbkW4zaJR0C4UCvF4vXC5XmZeuHBBGurlcjnc72ymyzeVyWF9fRygUwsTEBObn50FRFKLRaN3kKSRaOUi3njWFrVhiKYpS311gm3SEBixSEES7WTuKrVtNeUfIWFi8E3akCK+lnJOA5fbSlQttR7rN3Mwkp1sLpSNxTpw4sSOTCEgnxsrKyo6SrTCaFsuRN5sf3m09tZUIxOfzIRaLgWGYIktCodafFJwaue/akXTrJcZqxTvyYhNey0KhwBOwsHgnBcSKdO3Q7dJ2pAs0/lDXinQbHYlDzkGKhyCXy8HhcCCVSsFoNO4I2TIMA4fDUdZuVopmybMdbnxg+74wGo0YHR3lvydMUZBorlqKQgztRrosy7a0brWOlKWlJeh0OmQymaLiHVHekWvZTPFOGEVns1lZd6NSoi1Jt1FUMqgho2nIOPFG+nxJSqDZm5WQ7dbWFsbHx2E2mzEyMtLUWvVCOIqnHolwK5GuXFMZ5IYwRSFEpRSFcJ4Y+fe1GkzZLOTKu1IUBZVKhZ6enqLImPgmkNy73+8vKt4Jr2W14p3QwLxdHMaA1xHpEm07UCwsGBkZqTolotqazQzBKyVbQnwul6uhdWpB+OATEQl5udRrWL6bIl05UhaNkGOlFIWwJ5Zsq9PpNBiGQWdnJ99JIUUXRTtOpBDL6QrJVQhh8S4cDtcs3gnXbhcvXaBNSbfZ9IKQ8OqdElEJpEhQL4THnpiYwMzMjGw3Ork+hUIBHo8HHo8HQ0NDTc1bazZi3U05XTkh1kXx8ssvY3x8nLd7DAQCyGazRb3IhIwbqRnImV6Qq9jViPdCo8W7fD6PXC6Hl156CV6vtyWBUimi0Sh+53d+B1euXAFFUfja176GM2fOSLJ2W5Juo+A4DsFgEOFwuGWyJSCRbi0IOwPGx8erkq1U21KKouByufgcdbPy6HpfbplMBmtrawAAi8UChmEkHdwpF+RUYplMJuh0uqKe2NI2rGopCjES3MnuBakgBaFXKt5dvnwZPT09uHjxIh599FHcuHEDR44cwcTEBP7mb/4Gs7OzTR/zwQcfxN13343vfve7yOVyfC5aCrQl6db7oAib/FUqVcOiimqoFemWkm0t9RzJEbcimSRj4xOJBKxWa10FwWqoFenSNI21tTXEYjGMj49DpVIhlUohk8ng2rVrfH6URHUdHR3Q6/VtU2hrFpVyr9VSFGKV/1IvilYLXpVAxqvLATnzxYVCAX19fXjve98Lk8kEr9eLP/uzP4PT6SxqGWwUsVgMzz77LP7pn/4JwKuj6qVCW5JuLaTTadjtdn7+2fT0NC5fvizpw14p0m2UbAlacRojlpYOhwM2mw1WqxXj4+MtO05VKogJP+PU1BQWFhZ4T+Oenh4kk0mMjIzAbDbzBZNYLAav1wuapovcsQih1HowX+ucrpzrkoe6dHox8dwlExOSySRefPHFouvWrFJMCLkj3Z2IoqPRKLq7u6FSqTA5OdnSuuvr6+jv78dv/uZv4uWXX8axY8fw2c9+tiwH3SzaknQr3WClI3HI/DMyUUJKlEa6zZKtcL1Gt+REnry+vo7e3l6+r/jSpUuSbO+JuRCBsNWs2mckBCksmAgNQ4TuWH6/H8lkskzC+3p3GRPz3D1//jyOHj2KdDpdNqNNq9WWkXG9Eabc9oty/Q2FL4t4PI6ZmRlJ1mUYBi+++CI+//nP49SpU3jwwQfxyU9+Eh//+MclWb8tSbcUZNgkTdOYmpoqc8GSwo+gFMLinFDN1SjZCs+xXqLkOA6BQAB2ux1Wq7VMMSeV6Q0hT2H3A+n2qPYZa0WllXJ0YhJeYoSeTqeRSCSg1+t3xL6zFciZK1ar1bBYLGUWoqRoV5qiMBgMZV4UpX+7dpxIUQopuxdGRkYwMjKCU6dOAQDuu+8+fPKTn5RkbaDNSVc4Emd6erqqv6vU4DgOfr8fHo8HExMTmJubw7fPe7D+8go++pb5hterJ9LlOA5bW1tYW1tDV1cXjh49KuoFISXpRiIR+P1+7Nmzp+5x7c26jIlJeBmG4V3GgsEgvF4vP4NMSCYmk6lhotst6QUpIJzRJjwP4iwmHOoozLWbzWbkcrm2J914PC4Z6Q4ODmJ0dBRLS0uYn5/HU089hX379kmyNtCmpJvJZHD58mUArU/2bRTEFCYQCMBiseDkyZPbMt4Ch4d/uAQAePuhQRwabqxRuxrpku6LtbU1WCwWHDlyBEajseJarZIueaGsrKzAYDA0XJCTMv+q0WjQ1dUFs9mMsbExdHR08GRSOiGWtGQJUxSv1SSF3ZAWqeQsxrIsn6KIRCKIRCJIJBK8f4KwH7bVwq6cY4CELwqpxRGf//zn8e53vxu5XA5TU1P4+te/LtnabUm6Go0GMzMzDV3kVmW7QgeuiYkJ9PX1IRgM8jeVP/bqdOC/+MF1fO+Dp6BW1X/DiZEux3EIhUJYW1uDyWTCoUOH6rKTbJZ0iV/w2toaenp6MDc3h3g83jBxye29ICSTvr4+/vuVxgORSQpC7125zbt3M0pTFJlMBjMzM9BoNHxU7Pf7kUqlinYVpebntbCT/b+xWEzS4OvIkSO4cOGCZOsJ0Zakq9frG36rkRxso60fpWRLHLiIUQqBO/Kq4u36RhL/fMGLd52sX9Zb2r0QDoexulu+fPwAACAASURBVLoKg8GAAwcONFQ5bbQTgpD76uoqLBYLn7YIhUJNK9JeC3FEtfFAhExCoRDfc0k8A0gBbyfMjXYjSDBSK0WRSqWwtbXFqzvFvCiELzE5h1Lm83lZSVdOtCXpNoNGSbcS2RKURqau8PaDrFMDVrMen3lqFW/eZ0NvR33HI4W0SCSC1dVVaLXapscANRLpRiIRPo1QGknvNpexZl8AYpMUCoUC1tfXQdN0keSUCBWE2+x2z3fWQrWItJr5OdlVRCIRuN3usmGZarV6x6YM0zRdNeW2m/C6Id167R2FZDs5OVlGtgSlfbqucAZaNYWjY93YiNMIp3L42ydW8Mg99Y2CzuVy8Hq9MJvN2Lt3b1MDLgnq6YSIx+NYWVmBSqXCwsKC6PEaIU/hNZLLT1dKEPNuo9GIoaEh/vvCqNjtdiOVSgF41RXrtRJ5yLlzaCbtplKpqnZRpFIpbG5uIh6P49y5c7xnsdCLopWXWbt66QJtSrrN3Oy17B1pmobdbkckEqlKtgSlfbruSAYjViNOTVrxuaft+I1To/jGC2688+gwjo9XrqrG43Gsrq4ik8mgr68Pe/fubfizlaJahErGpzMMg9nZ2appmt0W6e4ExLwUhK5YYiKPZnpjG4WcbV1SGukIUxQmkwnhcBjT09NFhc/SFEWpF0U9z3e7eukCbUq6gHSeutlsFuvr6zzZ7t27t64/nlh6YcxqxMkJKzgOODLahSevb+Hhx67jf//XU9Cqi2/qRCKB1dVVsCyLmZkZ/qaUAmJkKZzoOzs7W1d73W5yGZMD9RbSqok8xHpjyT0lpchDzk4AuUDSFpUKnyRFkUqlEIlE4PF4RBWLYl0UQtIl/hXtgrYl3UZRSrrNki2BUHDBcRxckQyOj1txaLgLeo0KL7tj+Ohb5vCh71zGt8668Zu3jAN4NdLM5/OYmZnhk/9bW1uSedAKlWTEfyIWi2FmZqbuib5knd3kp7vboudKhadz587BbDYXecWSyQnCqLiRIpNcto5yolb3Qj0pitIuCkLEqVSKr3fEYrEyP4vdjLYl3WYi3Xw+X0S2U1NTDZOtGCLpPFI0i1GrETqNCkdGu3DeGcX/dfccbpvtxeeetuP2KQsSmx5ks1lMT08XFXWAxhRptaBWq5FOp7G0tFTkjyDXgMlYLIbl5WXkcjmYzWYwDAOTyYRcLidZR0C7RHnEuNtms4mKPJLJJDY2NpBMJstEHtV8d9tRNdZsy1i1LgpyDcPhMILBIL7yla/gpZdeQiwWw+OPP46DBw9iaGiopftlYmICFosFarUaGo1GktYxiqLuAfAxoI1Jtxn4/X74/f6mIttqcIW381NjPdvV05PjVvzDT+yIZxl85M5xvPPLIfzFv17GZ+47UCZRJmjGe0EMDMMgEAggFAphfn4ec3NzTX/OWpFuKpXCysoKGIbBzMwM9Ho9MpkMXC4Xkskkrl69inw+X9R0b7FYJJ2T1Qp2sk+XiDyEOfRSxVjpaCCLxcJHdu1IuqRHWgqUpihyuRxsNhsWFxfxr//6r/j2t7+NZ555Bp///OfxJ3/yJ7jttttaOt7TTz9dlAppFRzHPQrgUaCNSbcRe8f19XUEg0GYTCYcPXpU0gdtO7Ww3S421rPdbnVy0gruGeDRn13GXksev3F8AF89F8ByjMItfeLHbpV0hf4IVqsVQ0NDGB4ebno9oHKkm81msbq6ilQqhZmZGfT29oJlWeTzeVgsFnR1dUGlUmFoaIjvk00kEkgmk/ycLOHMsXrUY+0S6TaCaoqxUpFHLpcDy7JYW1uTrAMAgKxjleTs0yU5XYPBgP7+fhw5ckRSfwQ50bakWwvCXObk5CT27NkDj8cj6cNLIkFXOAOKAka6Dchms9AlfNCogLWEGu/7paNYZAp4cjWOh3+4hH/7vdPQacoflGZJl0yHcLvd/HSIWCyGQCAg2ecjyOfzsNvtCIVCmJ6e5l3cSiEka2GfbD3qsWrb7XawdpTiHMVEHrFYDG63G11dXUUvLzHP4kanUcipGtuJ8etSCyMoisKb3vQmUBSFD37wg/jABz4g5dram450S8mW5DLJiA8pQYjSHc7A1qHD+toKwuEwpqamsDiawdUtept0tGr8+Vv34ne++RK++pwT/+22cr/PZlRkQg9d4XQIOVzGnE4n/H5/RUvH0j7dWsevpB4T226T9jzyANfjv3szQqvVoq+vr+zlJbR6JNMohCkdofS5FHKSrth8NCnXJvd7PB6XtJD2s5/9DMPDw9jc3MRdd92FvXv34tZbb5Vq+Y+3LemWRiiVyJagXnFEIyADL5d8IXRrtgcRkv7ekxMpfOHZdSSyDCwGDd4404s377PhC8+u422HBjFqLVbP1BvpCm0dhR66QkhFusD2dX3hhRcamrHWSquZ2HabYRhcu3aNN+Ip9d+1WCxNCRbkinTlSIVUyulWsnoUijxcLleRyENIxjtlMi7n2rFYDGNjY5KtTdJyNpsN99xzD86dOycJ6VIUdTuAd7Yt6RIIybZalb6WOKJRECPuy5cvI5Bkcfv8QJGy6eSkFf/3T9Zx0RXF7XPbkcmf3T2Hn66G8Fc/WsIX33WkaL1a3QulTmOVbB3JWq26jG1sbMBut4NlWdxyyy2vmcsYAD53Z7PZ+EIUx3F8hFdJsGCxWGAymXY0Kt4tc8wqiTyE7mIejweZTAYMw2BlZaXmjLZGIWdOV/hyi0ajOHTokCTrkl5ri8WCVCqF//iP/8Bf/MVftLwuRVFWAF8H8K62Jd1cLocbN27UJFsCqYzMhdMTdDodhsYmEH7yMl9EIzgy0gWtmsI5R4Qn3cEuAz502yT+5olVPHVjC7+499Vortr5VfNHEEMrpBsMBrG6uorOzk4cP34cFy9e3DUuY8I1hZN1KwkWSmW8pbPa5MBOR7qNQKVS8Z+fIB6Pw+PxoK+vr0zk0ep8OzkjXeF5SOmlGwgEcM899wDYftbf9a534e6775Zi6f8KwAbgC21LuizLore3t6n+02bAMAxcLhf8fj9GR0dx5swZrKyswBulAbzaLkZg0KpxeKQL5xyRou+/78wYHr3kx1/9aAm3TPXAqKt8U8ZiMayurkKlUjVkftMM6ZJeW51OV7eFZCW8ljJgsR7P0gjP5XIhn8+DZVmYzWYUCoWqec9GICfpyrEuy7IV+2LT6TRSqRTi8Th8Pl/DIg+5SLf03pJyasTU1BRefvllSdYSguO4RwA8ArRx94LJZNoR6R9pxfJ6vRgZGSnKa2o0Grg2t3t0R3vKHY5OjFvx//zMgWSWQYdh+1Jr1Sp87G178Rtfv4gv/nQdf/CL5XOdkskkVlZWwLJsTX8EMTRSlCPHKhQKmJ+fl6Qgsdu8F8QiPABYWVmBWq0GTdNFlo+kR7YZI/TdHOk2sq5wJ1Eq8hDz3BXOtyNjgcg6UqOUzNvJ1hFoY9Jt5o/ZiJE5y7Jwu93weDwYHh7GmTNnyt7aarUanuj29nXMWh4Znpzoxhee5XDRHcVts32C71vxq4cH8dXnnPjVw3sw1bftlVsoFHD58mVks1nMzMw0PX6oHnWbsNe2Xi+GeiGXy5jUa5IOinqN0IVFu0rKMTlHAO2GXLFGoxGdbyfsOiHz7dLpNG7cuFEUGUuR4y01u4nH4wrp7lbU46kr7HsdHBzE6dOnK94oGo0GniiNToMG3abyaOjIaDe0agrnHZEi0gWAP3nTLP5zKYiP/3AJ/3j/AtbX15HJZDA/P9+QP4IYqqUXhIM0Z2Zm0N/fLxlJkHV2W6TbCCq1stE0zQ/NFCrHhIRCRgm1U6QrRQqgUtfJ2bNnsWfPHn6kkt1u53uxSyd5NHLNSkk3nU63jZcu0Mak24q9oxjpFgoF+Hw+OJ1ODAwM1DUXTKPRwBfPiaYWAMCkU+PAUGdZXhcA+jr0+P3bJvCJH6/iSz86j/9yyxyi0WhFmXAjEPt9hmHgdDqxsbGBiZ8P0pQrF97OpCsGiqJgMBhgMBiKomKhn0IgEMDa2hqfK5bDZUyOTgA5864qlUpU+kxeYEKbx0bm24l56baTRLptSReQxt6xUCjA7/fD4XCgv7+/oSGMarUa/ngeR8Yr50FPTVjx5eecSNEMzPrty006IKYKG5jtM+B7dg6/89Y+aDQuySMaYeRO0iRy3KC5XA6RSASdnZ27anJErfVaIUMxP4VkMom1tbUyl7FWvXflzOnKReaVcsViLzChyCMYDMLhcFQUebSzly7Q5qTbKISkSxrtHQ5HRZFBTajU2EwxZZ0LQpyYsOKLP3XgJXcMZya7eX+E0dFR/MItt+CvJhJ44Cvn8Q9P23FXv1qy3kby+dbX19Hf31+kWJMSQrVaZ2cnnE4naJoGx3F8pdtisbQc7bXTQ6XVastcxip575K2LJIrrmTiLWf3ghztc43ex2Iij0rz7Yh/rs/nw8bGBjQajWRpHZZlcfz4cQwPD+Oxxx5reT0xvO5IN5/P843/VqsVx44da/qm20oxYDmUqcuEWBztgkZF4YnLTlCBG2XKrsMjXbj/6DC+cdaNhds6sdCi0xgRUaTTaUSj0ZY+X63jeL1eOJ1O/jMxDAOKohCNRuHz+WCxWMrkvIRciIPWa7kt3ElFWqVWtkwmg0QiUTRnTGxO224ppNULqXLFYvPt3G438vk8PB4PnnzySXi9Xhw5cgT9/f346Ec/ijvuuKPpY372s5/FwsIC4vF4S+deDW1Nuo1sY0mF1efzob+/v6qiq174E9uy4kqRLsdxiAYDGLcAL/tS+PNfOSP69v+DX5rGj69v4muX07jjaPOquWg0ipWVFX7218LCQtNrCSEkEo7jsLW1hdXVVfT29vLpGOHfQaVSQa1Wo7+/v6iwIoz2PB4PUqkUOI4ryuVZLJa2mgJQikbIUTiRQohSCW86nUY2m0UikeDNu6WaXixXTlduCXBHRwduvfVWjIyMIJ1O49FHH8Xm5mZLuzmPx4Mf/vCH+OhHP4q/+7u/k/CMi9HWpFsPhPJZiqIwPDyMmZny3thm4IsT0i1uFyv1R7h9/wj+3xc8yBUo0QtuNenwx3fN4KPfv45/e2UT7/6Fxnplhb22ZKjl888/3+zHKgLphFCr1YhGo1heXobRaMTi4mLFinGll2E14UIikUAoFILD4ShyGyORMcdxbVGckyINICbhvXHjBp87Fl4n0srWbCeAXJHuTpndxGIx/roI0znN4KGHHsJf//VfI5FItHyO1dDWpFvt5uI4DqFQCGtrazCZTDh06BDi8bhkc8gAwBujoVUBAxY9f0xC8J2dnXw0fVoVxFefd+OSO4pbpntF17r3yBC+8dwaPvdTD952dBxdxtrRXiaTwerqKtLpNObm5sp6FaXYPhOHNuLDUGlycCnqJUgx4UJp36ff70csFkM4HEYoFJIsPdFOhjccx/GfW/i90k4AoVexUOCx06qxnfDSBYpJtxU89thjsNlsOHbsGJ555pmW16uGtibdSgiHw1hdXYXBYMCBAwf47Vs6nZbU9MYTyaLPSEGlovhjGo3GMhnt0bFuqFUUzjoiFUlXpaLwoVO9eOjf/fjMU2v4H2+rPBU4l8vxk4unp6dFe22FEWqzoGkamUwGV69exdzcXNmIoUpotXtBrO+TmHfrdLoyXwWSniAk81qmJ3ZSBlytEyCVSvE9xWtra2WjgUhxczfndCuhlHSlkAA/99xz+MEPfoB///d/RzabRTwex3ve8x5861vfanntUrQ16ZbehJFIBKurq9BqtaJeBVLbO7oiGfQbKVy4cAEajaaiP0KHXoP9eyw474hWXW+m14B7D/TiOxc8uHdxDw4NF7/BS3ttq42Jb4V0haY+Wq0Wi4uLDeW/5WoZ02g0oukJ0isbDAbLzNAJEYt1T7RbpFsvOdbyKk4kEtjY2EA2m0U2m+X7aQkhS+Uw1k6k+8gjj+CRRx4BADzzzDP427/9W1kIF2hz0iWIxWK8jp7kNMUgpb1jIpGAI5jEmQHU5Y9wYsKKb7zgQibHVjS5UavVeN+xXvzEkcDDjy3hX373BNQqiu+1dblcGBkZqavXthnTm0KhAK/XW3ScS5cuNUygO9mnKzZRtpRgSntlhXliOc5xNyrSKqnGXnzxRdhsNr7ILKXD2E6kF6LRaMtjqXYabU26qVQKV69eBcdxdRGfFKSbTqe386iZDD577zxCPmddOaVTE1Z89TknLnliODMl7nOgVqth4Dj89zfP4Y++ewX/fMGD20fUWF9fx8DAQFVJstha9ZIux3HY3NzE2tpaWU9vMwQql/dCIz8rRjClto+hUIgXdDRrcFOK3Uq61dbt6ekpWruaV7HwOlXLqZPdhhwQRv3xeBz79++XdP3bb78dt99+u6RrCtHWpKtWqzE1NVX39qIV0s1ms1hbW0MikeCHMVIUhefj7roetGNj3VBRwHlHpCrp0jSNX95vw/98oQN/8+MlTL5tsCnhRr2RbiQSwfLyMsxms2gbXTMR826VAZd2TywtLcFms0Gj0VSc1VYtPSGGdiNdsfOt5FUsbGWr5FVssVig0+lkTS8IEY/HJSmk7STamnSNRmPDqpdGCYQUrcLhMKanp7Fv376im5SM2al1Hh0GDfbtEfdhEK6VSqVw4cIF/MaCDl/Mm9E7NNFUP2YtsiRtZhzHYf/+/RW9endLpCsXhEqoPXv2AKienqgV6ckZkcrplVEPqk2jSCQSCIfDvFdxPp8HTdPI5XKSeRWLQUov3Z1CW5OunNJQhmGwvr6Ozc1NTE5OVixakei5HvI/OdGNb53zgM6z0GuLo4BkMgm73Y58Po/FxUVYLBbc/QvNR02V7B1pmsbq6iqSyaRom5nYOrsl0pXDe0EMtdITiUSirHuCkDFR5UkNuRRpraJSy98rr7yCrq4uZLNZXiFJWtnqMbWphNKXT7t56QJtTrpygJiWE3+EWkWrRkann5yw4mvPu3DJE8Opye1ogfTaZjIZDA0NIZ1O80UhKe0dyUtka2sLU1NTZRF7tXV2Q6S7G7wXKok7SHvW1tYWQqEQWJZFJBIpkjw3WogSw264BvWAnGdvb2+RgKaSV7Gwla2aVzFQLrpQSLdNIJbHErpxNTL5tpE88bGxblAUcN4RxeJwB9bW1hCNRjEzM4O+vj7E43HJ1DCEdAuFAm/GPjo6itOnTzcUMdUzTp1lWTgcDvh8PhiNRphMJuRyOWSzWUnIRi5IkX8t7Z7wer3gOA69vb1IJBIV0xNkaOZujF6lgFjKrVYrW6lPh7D/mowFYhimKDpOJpN1j7HaLWhr0m3FU5f84TiOg8/ng8PhwMDAQMNuXI1Eup1GLRYGOvDMdR8WdX5MTk5i7969/OdoZK1aoCgKoVAIy8vLsNlsTbuMVYtahdduaGgIR48eBcMwiMfjCAQCWFpaAk3T0Gq1ZWSzW4m4VZA0AElPlDqNJRKJsrHowijPYrHI1moldq5yod5CWqVUDvEqJi8tMhaI9NoT68fdmnaphrYmXaDxrSz5o2k0miJ/hKasHVF/pEsizmFdBj/xFnD0xK0w6orzWc0U+sQQDofh8/nQ0dHRsstYpZwuIXSr1Yrjx49Do9EUtRXpdDocOHAAFEWBYRiebEh+TzjgkEQy1R5SOVIWOy2O0Gq1ZYUo4iNL0hNEbk1mjsnZUyxX0Q9oPQct5lXMcRw2NjZ4w6VPf/rTcLvduPPOO3Ho0CE88MADuOWWW5o6Xjabxa233gqapsEwDO677z48/PDDTZ9/NbQ96TYKtVqNra0t+Hw+dHV1tew2Vis6FfraDgwM4FdOL+CJf7mCK74kTkwU56JajXQTiQSWl5ehUqkwNDQkyajxUrJLJpNYWlqCWq3GoUOHeCkpUb/5fD54PB6MjY2B4zi+8EF6YUdGRngiJr2gxF+WOI4Jo+KdivqkQqNEXslHNpPJIJlMIh6Pw+v1Ip1O46WXXip6UbWantipti6pQFEUf70OHTqEO+64A3fccQe+973v4fLly3V5glSCXq/Hf/7nf6KjowP5fB5veMMb8Ja3vAWnT5+W8BNso73uaBE0EgERw5RcLofDhw+3NGacoFKkSywQ19bWYLVa+Ui6L50HRQHnHJEy0q1noKQYyJBJYnzT3b1tli5F1Ewi3dKuh87OziJSJeZCPT09OHnyJE+W5BwIMQt/h/SCDg4O8n9H4i9bGvUxDAOWZdHV1SWLP7BUkMpkyGQywWQy8emJ8+fPY//+/Xzu0+l0Ip1OF425IS+rel9Ucka6ckHYKZRIJGCxWNDT09OymIGiKD43TFre5EqBtT3p1gMiE9ZoNLDZbOjv75eEcIHtSKXUzyESiWBlZQVGoxFHjhwpquB2m7SYH+jAeWe5D0OjkW4+n8f6+jqCwWDZkMlmCVwMxPR9cnISCwsLPIESB7KVlRXodDocOnSozO6RPNRi/ayEgMm/AHgDF5vNxn8WmqZht9uRSqVw/fp15HI56HQ6PkKsVfGuhHbxXiBBhVifrLAjgKgKxdITYgXNdot0geICXTQalbRHl2VZHDt2DKurq/jQhz6EU6dOSba2EG1PutVucKHPLInOSJuKVNBoNMhkMgC237wrKysAUNH8BthuHfuXi17kmAJ0mlfJqN6HtVAowOVywev1YmxsTLQjQaVStWTuQ4pkLpcLPT09/A3IsiwoiuJFI+l0ui4JdinI+QofeiEBky9gOxdKSJZEfiRPLJzOW+qt8FpMpthpIq/UEUDSE0IZL5lIQa5PpTlmrUJOIUc+n+fTgVILI9RqNS5duoRoNIp77rkHV65cwYEDByRbn6DtSVcMxB8hm81idna2qI9PaqcxtVqNbDaLy5cvI5vN8tv7ajg5YcU3XnDjFV8cx8bqv2mE+WEyHr5SpNKMqIFAWCQbHx8vWosQ/ubmJqampiQd4S5GxMlkEqurqwCAsbEx/jwoiuILLSqVChRFIZ/P80UpMnGBbL+FUTFZXw6ClINwGl1TLD0BFMt4nU4nEokEGIbB9evX6/LerRdyGpgLI12pvHRL0d3djTvuuAOPP/64Qrq1UMkfQQhSZZcCuVwOHo8H4XAYBw8eRF9fX10Px/HxbaI9tx6pm3RDoRBWVlbQ1dVVV6dFM6RLCnHCIlksFsPq6io8Hg8oikI2m4XNZuNTCXJFNAzDwG63IxqNlr04yediWZafKEHykyTCHRoa4lMsJE/s9/uRTCZ5F61UKoVoNAqNRiPJ6BtAHuWYVGuWpidIjWNgYKBojDxJTwgLmpUGZopBTocx0nkESBvpbm1tQavVoru7G5lMBk888QT+9E//VJK1S9H2pCvc6lbyRxBCCqcxod/snj17QFFUUY9hLVhNOswNdOC8M4L/hsmqPxuPx7G8vAyNRlNmjl4NjZAuTdNYWVlBKpUqK5J1dnZicnISKysrsFgsGBsbQzqdxtLSEi9+IFFkZ2dny0RMBl663W6MjY1hdnZW1KBd+C8gXrAjpEz6QAcGBviCXTabxY0bNxCLxbCxsVFmctOsikyu6Fkuo3GNRtNQekIYEVfqnpB7PhohXSnNbvx+P973vveBZVkUCgXcf//9eNvb3ibJ2qVoe9INBoO4du1aTVNvglZIV5hLJRJhmqYRi8UaXuvUhBXffdGLPFuAVl184xJSWFlZAU3TmJuba/jmqqfnl7w8SKpg3759RUWyTCbDR74HDx4UJXyappFIJHhBBMmtCom43tamcDiMlZUV9PT04MSJEw1FS40W7HQ6HVQqFUZGRvjPRbbfiUQCPp+vKWFHu5GuGDnWSk+QeXal6RtCxnKSrjDSjUajDQU71XDo0CG89NJLkqxVC21PulartSFpKxnD3giEyqvBwcEidZdarW6KxE9MdOObZ9244otjcbR4i7S0tIRIJMLLg5t5iKt1LwjHp4+MjJQVyfL5POx2O5LJJGZnZ6tu4ciIbOG4GKK8isfjWF9fRyqVKpLLdnZ2oqOjg/+bpdNpLC8vg6Io0Q6IViCWJybdJcKRNcD2vdHd3Q2r1QqKopoSdrQT6Ta6brXuCeFoIJqmQVEUHA5HU+mJaiiNdKUaMruTaHvS1Wg0Dal1NBpN3a1UlXptS9drinTHt3OU5x1RLI5280Y7qVQKw8PDdUXt1VApvRAMBouiSWFETFRzgUAAExMTRRLlRiCmvGIYhm/2d7vdSCaTfOTJsiwmJiYwNDQkawsTSaPkcjns37+/aPR5pYiYCDs6Ozv5gl01YUc6nebzylLlNeXqBmh1hh4g3j0RCAQQi8VgNBorpicsFguMRmNTLxNyLdrR7Aa4CUi3UdTbvSA09y7ttRWiGRcuAOgx6zBrM+PsehhvndLC4XBgz5496Onp4XOPraCUdBOJBJaWlqDVanH48GHo9fqitqxAIMCfw8mTJyWPrEgU2d3dzUfaLpcLNpsNBoMBiUQCFy9eRKFQ4LerRMXW6qBJkhba2NjA9PS06O6hUgsbUF6wI1tqk8mEwcFB/lqTdEwkEsHGxoZoQaoZYYdc/gLEy0BqFAoFPodeaoJOdg3C9ETprqHel1U7eukCNwHpNkpOtQpMQiltNXPvVsFxHA4MGPCjayFEYkY+ir506ZIkogbyOUvVahaLpYg8otEoVldXYbFYcOzYMcmq+JVA8ra9vb1FyjUCYoodj8d5VRrDMDx5ESKul7zITmVgYKDhl0mtgp0wUge2Uy0ajQajo6P8fUNy3rFYDB6PpylhR7tN7K20rk6nQ29vb9FUaWF6YmNjA8lkEizL8tMoyDUSuy+VSLdNUOnmJr29NE3XzGO2ilgshuXlZUyaOGRZgO0c4m8qqZzGOI5DMpnEiy++yI9pFxbJSKGO4zjs27evaKstB4hyTaVSVc3bVjLFzmQyiMfjiEQicLlcoGkaBoOhiIiFI3VSqRSWl5eh1Wpx5MgRyeZ1VSrYkZe1TqeDyWQqEnZYrdai9sVGhR27JadbL8hLsh5U7YB7ggAAIABJREFUEneQ9E00GoXb7UYul4NWqwVN0/B6vQgEAm05qge4CUi31W04TdNYW1tDLBbD7OysaG+vVEin01hZWUE+n8f8/DwmF/T4u7M/xTlHBIdHtm+eVkmXbN0dDgcAFBXJgFfNzGOxGGZmZoryrnKASJXF+m3rhbCaPjg4CGD7c9I0zXsQe71eZLNZaLVasCyLfD6P6elp3tdBLpDrGYlEyoQxlRR2ZOS5UNjBsmzZVAqSxiCexlJHplLkdMXQap9upRltiUQCN27cQCgUwsc//nFcv34db33rW3H48GG84x3vwFve8pamjud2u/He974XgUAAFEXhAx/4AB588MGmz78W2p50geZs/4gn59bWFu8p0OzDSR6KSlFDLpfjDctnZ2eLKv3T/Wacc0Twu2+YANCavSOxvOvp6cHx48dx/vx5xONxPor1eDzw+XyYmJjA3NycrGRExrl7PB6Mj4+L9tu2AoqiinwahGq93t5e6PV6bG1twel08s5UJCKWQh5MJijb7XaMjIzgxIkTdeeJhQU7YdGORLhqtZon4kwmw49GJ6knk8lUlJ5oNiUkJgNmCxy2kjR8MRreaBb+GA1nOI0rvgRckSzevNCHT75joea6cpC5SqWCyWTC/v378eijj+KNb3wjnnzySVy5cqVlG8lPf/rTOHr0KBKJBI4dO4a77roL+/btk/DsBceTZdVdDJZlwTAMzp49W9G3oFGQDobSm59MVNjY2CgzLCc4Md6Nf3tlAwxbgEatairSFSuSsSyLkZEROBwOxGIx5PN5dHR08PlGuabWAtvqudXVVd6nWG57RpKu6ezsxMmTJ8uKQ6SFLZFIwOl0IplM8mkM4fj1eomC2FsajcaG8+CNFOwA8MY1er0e4+PjvOMb6ZV1OBwNTS/OswVsxGn4YzTOr6fB+DawlfbBF8vCF6MRiNNgCpUDmEAiV/MzykW6QocxEmSZzeaW7Rf37NnDDyW1WCxYWFiA1+tVSLca6ol0hb2pFEXhyJEjkhXJSolSeKzh4eGqc9ZOTVrxnQteXNtI4NBwV0OkS/KymUymrEhGtrCbm5vo7e3F+Pg4/7A6HI6i3lmSU2s1Aqw3bysViN0kTdNYWFio+PesZB5OiNjr9SKRSIDjuCIiLvXzFUqT5+fnJcsnVsoTMwwDl8uFQCCA+fl5/r4gBSlhFwYRLoSicVxcdsMXpxHNqZBgtYjkKAQzHDYSOWwlcxByKoUU+i06DHUZsH9PB2b7zfDHslgLpsAUABUFFDhgYdCM//HWOewbrO1Zu5OkK3Xg4HA48NJLL8nmMAbcJKRbDWQbuLa2xkdeN27ckNSJn0S6pK+XRHliUVcphP26h4a76rJkFA6ZJAIKYZGM9KOyLIu9e/fyZGQ2m8t6Z6tFgKUihkogYgqSF5e7oixsAWvWdEetVvMtbMJ1SV41EAhgdXWV386TTo/R0VHRVILUiEajWFpaQn9/P06dOsX/DZLZPLzRDLyRDLyxLHzR7QjVH9/+CqWK2yFVFI1+kxo9BgrTHQWcsmkw3G3CeJ8ZSIVx/PB+XPSm8R/Xt/DMcgg5lkOPSQubRQ9fjMZwtwF/9ItTuHOu/lpHvdOxG4Vw3WQy2ZJpuRiSySTe+c534u///u+LCntS46YmXdKeZDabiyZESOG/IIRarUYsFsP169dhNBqxuLhYd5TXb9Fjss+E844IfvsXxqtGuhzHwePxwOVyYXR0tKxIRtIZ4XCYN/ypBo1GUzbdlkSAQhEDgDI1Gck9C/O2c3NzSNIM/ud5D951YqSuz98ogsEgVldXMTAwwIs7pIJKpSqrpCcSCVy/fh0qlQp9fX0IBoPw+/0wGo1FEbFUAziD8TReeGUZ/hgNdWc/tlZY+C5cgzeWgS9KI5opJlWtmsKeTgOGuvW41WbGUKceA5067OnUY6hLj/4OHTQqii/YFQoFbIZj+M+lLTx+ncafP/8i8gXAalDhzikz0qwKz63HkWfV+MgvTuHXjw8V2Y/Wg52IdGOxmKTEmM/n8c53vhPvfve7ce+990q2rhhuCtItvdnj8ThWVlagVqtFe22ltHdMpVIIh8OIx+M4cOBAU2/fk+NW/PDKBtgCJ2qKznEcTzYkWhcW3IhMmYzJmZmZaZoAxCJAUlmPx+PweDxIJpNgGAb5fB6dnZ181d4RyuCBr15AkmbBccC7T0pHvMRkR6PRSNoCVgkklRCLxcpSCcIJF7FYDG63GzRNQ6/X80Tc2dkpmldN5RisB9PwRrM/z6NuR6veaBaeSAbpvLCI6oRBo8JQtwFDXQYcHOrEUJcBwz///0PdBvR16KAS+VuXFuxSNINnV8N4YimE5+wR0AyHLh1w3+Ie3D5jxVVfFF87u4F0roDbRzX4lSk1bOYIfB6mYWGHnK1oQi9dqdI7HMfht3/7t7GwsIA//MM/lGTNargpSJeAtGTlcrmqJjFSRLqk1Yz0Cg4MDDS93TkxYcU/X/TixkYC/ZriSDcej2NpaQl6vV5USRYMBmG329Hf3y9b0UqtVvMtTqT/1WAwYM+ePcjlcggEAviX55fwxZdp5AuAmgLumDBIEvEIW7J2InVBhh86HA6Mjo6Kdl0IW9hISxNpYSO7BL/fj0wmA61WWxQR/8yZwh9+7xq/VodejUGLDhZVDrePG7EwbsOI1cQTq9Wkbdp7I51j8ZOVCH58bRPProSQZQro69DhHQdtWLBkMdlRQNjQiU/8hx3OSBanJ7rwR3dOYG7AUvR5mhF2yJF+EUa6Uk6NeO655/DNb34TBw8exJEjRwAAn/jEJ/DLv/zLkqxfipuCdHO5HJaWlngDDGFLlhhaIV2hrePU1BQWFhbgdDpb6q09OfFzf11HBG+fM4NlWb5IRozRSccByduSKRUGg2FHIj9h3lbYj8oUCviXGzS+8hIN8pj92kErYqEteBx2FAoFPlIi5FPPi6GU/FqJ3usF6UowmUw4fvx4QxJZYQub0PmKSF/J3DdEUnjwqAFjvR2Y6LeAySSQyWSwsLAoSY4ynWPx7GoIj199lWh7zTrcu7gHb17ox5AuC5fTgULnIL74Ygz/Z30Jk71G/MP9+/GGqe2/KbmXSQGyUWGHXKPdS9MLUpHuG97wBlnH0ZfipiDdRCKBnp6euntthSN26kWhUIDH44Hb7cbIyEhRR0KzTmMEA50GjPcYedINhUIIhUKiRbJcLsdX7EnHgpwQy9uSaxxO5fBH37uKs44ojNptD4oCB/zeL+1DX4eO//1UKsVbP5LxSWazuSgCFBIcaQGzWCwNk18zIC+UeDyO+fl5SXOFpdLXQz8/ntvthtvthNFoBMdxuHbtGn8tyFe9u4RMnsWzKyE8/vOINpMvoNesxT1H9uDuff04OtaNHL3tH+wsaPB4sBv/+0kHOvQa/Nnds3jg2FCZvWglAyCS9+7u7uad2EqFHel0GhcuXKg4saNZyEW6O42bgnT7+voaIr1G7B2F3Q+kklwaqanV6panUZwY78bjVwO4cjUGg16PEydOACgukjmdTgSDwYqmLVKjWr/tZW8cD/2vKwinchi3GrERz6IA4B2HB3nCBVBk6Ugg9FcQDlM0GAygaRocx2Hv3r2yP1TCaHpsbEx2wQjwam5ap9PhzJkzfI+vkLh8Ph8/4UJoqi58OWXyLH66GsLjV7fwk5UgT7S/engQd++z4dhYN9Qq6uedHk64fX68nOnBNy4EkM0X8K4TI/i92ybQbRR/odUj7BCKeIh0mwwrXVxcrOip0KywQyHdXYRGHxStVlsXSQudxoTdD6XQaDRIpVINnQMBKZJZmRCSuQJMe/aCir1qhUeUViTClsMBrBQkb0umVQg7MTiOwz9f9OGRH6/AZtHj1tlePHkjiLv29uHJG0G8//RYzfWF/gpDQ0NF5vAkIlxZWQHDMDCZTHxHAfFllQJEUNLR0bEj0XShUOAVkHNzc2W5aWHeXPg7hLg2NzdxbXkVlwJ5vBQEXgrkkWU4WE1a/MqhbaI9Pr5NtASxWAw3btzActqEb74CeKI+3Dbbiz++axpTfY17bdQiYpJ/J94TRqMRBoOBl2KXCjucTic/aLIeYYeQdOPxOCYmJhr+DLsBNwXpNopaOd1kMonl5WUAqMtprNn0grBI9s43HsKXX7mAy4Esbuk14/Lly6BpGvl8HhaLBTMzM+ju7paVcIXbbDHTn2yexV/++zL+9eUNvGG6B6cmuvHpp+x4/+kRPPryBu6Y78NkX2Oj7cnsN5vNVjZokxifxONxhEIhrK+vI5/P80RM8sSNEHE+n+fn6O3du1f29Azw6mccHBzEiRMn6v4bqlQqaA0mXPVk8eNrLJ5eziKTZ2E1avBLM104uUeDMQMNlglDH8vAsR7mp1u43W5c8yfwqEONFz1BzPSb8eV3H8YvTEvrtUE+C0kJDQ8PY2hoiCdZsYkdlYQdZI4d8dAQRvmEyIXHUyLd1xCNRrqVSJcMtkwmk6LRSLX1GimkZbNZLC8v83lZUnwY6TbgRXcc9x2cQCqVQmdnJ4aHh0HTNC/5ZFmWz4c2UpiqBmHetpIvgzuSwYP/6wpubCTxe7dO4PhYF373/7uM22d7MdRtQCzD4LfOjNZ9TDItQqVS4fDhw6J9zULjEyLTFDqOhcNhOJ1O5HK5or7Zzs7OsvYmsmNwOp0YHx9v2SS+HtA0jeXlZRQKhYaKndk8i5+thfHja5t4ejmEdI6F1aTF2w8N4M0L/Tgx0Q2NgLjJeCdCWnZ/CD90qfB/NjhY9Cr8wRsH8cCJMVjMjb0Q60E+n8fy8jJyuVzZZ6x3dFKliR2EiIPBIDKZDL8De/rpp7G5uSmJ4vG3fuu38Nhjj8Fms+HKlSstr1cPbgrSbRSlpCtUeNUabCmGeiNd0vsZDAZ5RzNhkezYaCeeWtrC9RtZzJe0vA0NDQHYfsCEhSmimmqmQwDYbjlbW1tDX18fTp48KVrs+MlKCH/66Hab0xf+y0FM95tx/1cuYrzXiE/86gLu/8oFHB7uxOJo7b5J0v0RCoUwOzvbsMtZJccx0jcbjUbhcrmQy+VgMBjQ2dkJrVYLv9+Pzs7OHUklcBwHt9sNn8/H22rWAs2w+OlqMdF2G7V464EBvHlfP06WEK0QhKgcbi8eX8/h+ytq5FkO7zkxhAcOdgG5NNbXtj2VyfSGRufXiSEQCMBut2NiYqIuN7da6QlhKyRFUfw5ks934cIFDAwM8Kmh3//934dGo8Hb3/52fOxjH2vqM7z//e/Hhz/8Ybz3ve9t6vebwU1Bus1IQMnUT7fbDY/Hg9HR0abNb2pFusLOh7GxsTIlGclp9nERJHMcOkf3oqtLfNsrdNonRCzsENjY2OA7BIRy3tJqeLW8LX/eHId//IkDX3jWgbmBDnz21w6gt0OL93z9RRQ4Dv/wwEG84IjAE83ij++q3tIlLFoRVy6pUiWV+maTySQ/5Viv1yMajeLKlStFfhNSKckIYrEYlpaWisYhVQLNbEe0j1/dwjPLQaR4orXhzQs2nJysTLQEHMfB5XLh+y+58agdCCTz+MX5PnzkrmmM95RHto3OrxM9b5rGjRs3oFarWza+r7dgF4lEoFKpYDab8dBDD+GJJ57AD37wA3R1dW234jWJW2+9lbdB3SncFKTbDPL5PF544QXYbDbRjoRGUCldIfRi6O/v54tgwqrvxsYGb4zzwO1H8dUrZ3HBFcPeOoxFCIQPzfDwMIBXiTgWi8Hv9/PbXLPZzOeK5+fnK0aa0Uwe//3Ra3h2NYxfOTSAj711HnqNCn/43atY2Uzhi79+COM9Rvzpo9cw1mPEnfOVe6PJGPmdKloRhZ7L5SqKwoQevPF4nPfgrUdJVgv5/7+9746Pqk67PzOZlt4TQkLqlBRIIAWC0hQRRMUVC1gWVmHZ9V0QRXlRUYFVEemsuAqL4k90Ude1owGEFxQwDRJaJpPe26RNyUwy7f7+CN/LnUlPZiaFOZ8PHwV07p1Jcu7zfZ7znKPX0wkdlvlrTHQYjDhf3IK0vAb8n6yTaD2dObgnLgDzYwMwNdyri3yrJ6hUKhz7/Rq+LDIhv1EPSaAbtj0Yh2kRPbfF+ptfB6DL6YnNZtOfq6VFqTXBJGLSg9fpdIiPj4fJZMLu3btRWVkJPp8PHo9Hf8+PFowZ0u2vp25zczMKCgpgMBiQmpo6qMwqS3Tnl0AGCwKBAFOmTAGPxzNrJbS0tKCoqAheXl5mRBTsJUBWWSueHOIKraVUi1T1lZWV8Pb2houLCwoLCwGgi8FNUaMWa764ijplB15fKMaSpM7ByD/PluKEVI7186IwQ+iLrLIWXK1R4fWFYrOpOQHRFGu1WkgkErsMrchw0sPDo4vMzdKDl4D0Q5mbZDwez+yU0NPmFbOC7ynMU2cw4XxxM9LyGnD6BtF6CDhYEBeABQMkWqDzhJRxtQAfZTfiQo0Bvq48vHG/BH9ICOr269AXmPl1zGuQ01NtbS3y8/Oh0WjA5/MRFBQENpsNvV5v0wcoCVElD87Lly9j7dq1WLRoEUpLS23+8LYVxgzp9gVm9tmkSZNw+fJlq8mPmD9kWq0WhYWFZssLTLIlAyQnJydMnDgRLi7mR8CUMC+cLWyCiaK63akfDIhvg7+/P6ZPn252lOvOV6FWbQKMeuxaGIxpws6V0FOyRuw/W4ZF8YH4U2rnwOzw75XwduHiDwnjzK5H2inV1dWIjIxEQECAzYdWpNJsa2vr1eaxO3S3SdbdSi9ZgSVETFFUjxtsOoMJF0puEq26o5No58cGYEGsP6ZFeA+IaAkqaurxz9MFOF5uBAXgz7eHYtWMMLjyrfujTGJ03NzcUFFRAaVSiSlTpoDL5dL5dcXFxbSsbzD5dT1Br9dDJpPBaDQiMTERAPDmm2/izJkz+PDDDxEfH2+NtzhsGDOk21Ola+k5S57mpDq1llcBRVEoKCigN8nIkMxoNNLTWKKM6C2DLSXMC99erkOxvA2igKH5/TL7tj1Nz7vThxqNRsxOUkF9Y8Mov1aJtzLaIfTm4M+T3TpXQLUsnClswt9mh0PAvUniZKGit8GcNUG8iysrK4cUG28JPp8PPp9vdoTW6XRQKpVQKBQoLi5Ge3s77UHc2NgIgYsbcuvacULaiNOyRqg6DPAQcDAvxh8LYgMwLcIbvEEQLQBo29vx0amrOHpdg+Z2ExbEBuCFuyIR7GU7z2LisEaWY8ix3zK/TqPRQKVSoaWlhVaT9JZf1xvIskxkZCQCAwORk5ODtWvXYvHixfj1119HbXXLxJghXUsQzSkhQUvPVbKVZg25VVVVFdra2hAaGoqpU6cCMB+SVVZWor6+vl+kkBLWScZZ5a2DJl2mFnUwIZtOTk7w9vKCt5cXWjV6PH8qG+7OPOx6UASuqR0VFRX4R0YzeGwg2VOD6upq8Hg8VFdXg8Vi2cXAHLjZwvH09LRLQgWPx6P79KGhoQgJCYG2Q4dT12twIqsSv1dooDFQcOEAqSHOuEsSiNnR4+Dl4T7oBwFFUTh+sRDvnqtBqZLCxPHu2He3EEmhttOoGo1G2qw9Nja211MDU9bXV34dadkwtbdMra5MJgNFUUhKSgJFUdiyZQvOnTuHjz/+GBMnTrTJe33sscdw5swZNDY2IiQkBFu2bMGKFStsci2CMUO65IvH3G4i2VzdTWL7u5XWEyyHZERLyhyS1dfXo6ysDEFBQf3eJAv2EiDIk4/MstYBe9Iyj/Xh4eFD1qIaTCY8/9U11Ks68MnyKRDdCM9Udxhw8YfzeHBKEIQT/FFWVgaVSgUulwsul4vy8nK6HzoUSVJPYPaKB9pKGCy0Wi3dnpoYn4CL1Rq8/30+TssaoWw3wJ3Pwd1xgZgfG4CUCW5o13T2QyvLyyDTaAaV01ZY04Stx/KQUWtAgBsPbz8QhfvjA63WduoOLS0tkMlkGD9+PJKTkwf1/dNT75ycFJhmOU5OTnBycoJarYanpydiYmJw9epVPPfcc3jkkUdw9uxZmz5Mjx49arPX7gljhnTJxLq0tBTjxo3rst1kiaE4jRFZkIuLCz0ka2trQ3Z2Njw8PODk5ITGxkZ4enoOWFLDYrGQEuaF88XNA8oxY/ZtrXWs336iGBllrXhrUTSdVgwAbnwOvvtrClqbm1BQUICQkBBMmTIFbDabdqFiSpKYhENigQbzw8xsJURERCAwMNDmvWLyEK+qqYVCMA7ny9px+udsmmjnRvthfow/pkf6mJl9uwj4XRQChHD6iktSajqw86er+C5fBTabjWdmhWPFbaFw4dmuVWMwGOg2XE/LKkMFj8eDn58f3bLR6XTIy8uDwWBAcHAwPv30UzzxxBNobm7G3XffDW9vb2g0GpumOAwHxgzpkriZlJSUfpHcYEiXVDt6vZ6OwSFDsokTJ9Kibb1eT+tCr169Sv9QeXp69ksXmhLmje+v1KOkUYMo/9535MnKMo/Hs6rF439zavFpZhWWTQvBg5ODzP5OpVKhrlgGV1fXLg+V7tIomNrQkpISaG5UfuRzIRVxb58LedB5eXnZpZUAAPLGZnyXno8rCg4yqw1QtpfBje+EuRJ/zI/1x20WRNsbOBxOt1ItZlySUqXCb1V6fFNshFIHzJd448W7xQj2tv4mGRPkxBYWFma1nnhvoCgK9fX1KC0tpVt/WVlZ+OWXX/DXv/4Vf/nLX5CXl4ecnBy7Wi7aC6w+3tSoecck5be/KCkpgbOzM71e2htIf5jE4Pj5+dHJrWRIRrxmhUKh2Q8WUxeqVCrR3t5Ob0oRIrZ8SFQ0a7FgfzpeXyjG0uTuNYg6nQ4lJSVQqVS9GrYPBrmVCiz/JAfJoV448EQ8LdAnUfJtbW1DloAxiVipVEKj0YDD4ZhVfi4uLrQqgcjObN1K0BtNOF8ox38yS5BV3QG1noIb3wl3SvwwPyYAt0f1n2gHggtFcrx1LB+lCgNiA52xKtkHwQJ9r3FJQ0VHRwdkMhkAIDo62mpqnr6umZ+fDw6HA7FYDIPBgK1btyIrKwsHDhxATEzv8e6jCD0+ucZMpTtQ9MfekbmxRvrDFEXR5M5c9+zJs4DP58Pf35+WI5E9eaVSabayynTTGufujkB3PrLKW7uQrrX7tpaoU7ZjzZfXMM5DgF0Px4FzY5mDXLOnKPmBojuRvl6vp0m4oaEBCoUCBoMB3t7eGD9+PNhstk2i4/VGEzLLWpF2vR4npA1QdZjgwmVjbnTnwsLtUd7gc2xztKcoCu+dvI5/pssR4MbFjsWxWBhnLrHrTtYH3NRXD9R/l+lDQSpNW4OpZyaLFRkZGXjxxRfx+OOP4/Tp03Y5vYwEjJlK12QyDSj3jGgvIyMju/wd00M3ICAAYWFhXTbJ5HI5SktLERgYiNDQ0CFVHkw3LfLr/VwtpM0mHF0SDk9PT7i7u6OlpYX29Q0PD7e6HKtdb8Sy/5eDkkYNjj6dBFGAKx3u6evri4iICJtLwIDOKJaCggJ4e3sjODiYNrghFTFzcWGwG2QGkwmZpa1Iy2vAyXw5FFoDBE7AtBBnLE6JwCyxn82IlqCtrQ35+fnQsgS4onLG07eFmcnveoPJZKJbE0ql0sx/t6fVb6CzRUYCVEUikV2IrqOjA1KpFDweDyKRCAaDAW+++SYuXbqEgwcPQiKR2PwehgGOStcSPfV0mUOyxMREcLlcs+UGEnpJhmjW2Gjrzk2rlFWN9J8KUNdGQamsRFNTE1gsFnx8fMDj8egIamspAyiKwus/ynCtRoV3l0xEiDsbly9fBgC7ScB0Oh29WMJcpXVxcTFLNiZT8J42yHoiYkK0x6UNOCltRKtWDxeeE5LH8TDFj4OHbo+Fn7f12jQ9wWQyobS0FE1NTXTo5YwBvgabze7Wf5dUxMzVb7LOq9Fo0NraiujoaJtnzQE3K2qyNuzr64vff/8d69evxx//+Efs3LnTLg/xkYYxQ7pDtXckoZYGg6HLkIzFYtFLFkajkf57W2Lqjf35jLJm3BZgQmJiItzd3enKhhwzmW5MzAn4QPHR75X48Wo9Vs8OQzhHiStXSvoV424NkGj5qqqqfm2wWU7BAfPeeU1NDe2p4OrmjmK1Ey5UavF/hS1o0ejhzHXCHWJfTA/mwc8ghzBiAu0Ba2uQNfRx48YhOTnZqnK67iLkTSYT5HI5CgsLweFw4OTkBJlMRkfpkIrY2ksH7e3tkEqlEAgESE5Ohk6nw0svvYQrV67g888/h1gstur1RhPGDOkOFIR0mUMy8jQ2Go30JpnRaERZWRk9RLMHCZlMJrDUcnjygMJW4NmFN/WS3W2PEbIhUqSBKgN+K2rC7l+KMTvSA5O5deByresC1htIK8HHx2dIUjdm79xgMiGrrBXfXK3DL7JaKNqN4DsBCX5s3BbrgmmhHtCqFXBxcUF0dLJdBkhM31lbSbIswayoExISzHw4uotLsjSHHwwRE+lmZWUl7UlNqtunnnoKe/bsuSWrWybGTE+XoijodLp+//cajQaXLl0Ci8VCWFgYxo8fb2asTL55qqqqEBoaapdKiET3kF7yezkaXKxQ4P+eu21A12YOpPrqg5Y2arDkw2z48ClsvdMPE6NFdptiFxYWQqfTQSKR9OjK1V8YTCZklyuQlteAX6RyNN+oaOeIfbEgNgAzhT7gsCgUFxdDLpfDy8sLOp0OHR0dZmqS7gzQhwLmAMle2mKg82Emk8nomUNfD1Di08xUlAw0Lon0i11cXCAUCtHR0YEtW7YgLy8PBw8ehFAotPbbHMno8Ys8ZkgXQL/CIcmQrKioCHq9HrfffnuXIVljYyNKSkrg7++PsLAwuwwbmHpboVAIgUCALy5WY8uxAvz0t2kI9x2aVrM76ZqBxcWm82qodRQ+WhqNiRF9y+eGCqYSghh8D5aEjCYK2eWdw7Bf8uVoatPDmcvGbJEfFsT5Y6bQF843BlMkMicoKAgTJkygSYipJiGE09HRQSfCYts4AAAgAElEQVRRkF+DeRBpNBrk5+fD2dkZQqHQLr4BBoPBzPjH0lBpIGAOeMlnQ+KSmC0tLpdLJ49IJBJ4eXnh3Llz2LBhA1auXIlnnnnmVqxubw3S1el0vYqpyVHWxcUFUVFRyM7ORnJyMjgcDlgsFlQqFQoLCyEQCBAVFWW1RYO+7pkZEcRsHZQ2anDvPzPw9/skeDhxvNWuSVEUysor8NKxUuQ1U/j7nf4IFXR0ka4N9ojZE0jQ51CUEEYThYsVN1QH0kY0teloop0f649ZoptEC9yMRqIoChKJpF9fUyYRk1/ks2GSTU9EbDKZUF5ejoaGBpqE7AFihWjLkxkzLomY3KjVavB4PBQUFIDL5eL3339HZWUlDh48iKioKKvfwyjBrU26xE7RaDRCLBbD1dUVJpMJxcXFaG5uNuvhEncjW/cziQa4pqamx2MnRVGYtfsCpkd6Y/uDsVa5bktLCwoLC/FDBRv/zVOZLWB0J12zzGQja84DAWklEOP0gVZfRhOFSxWtSMuT44RUjqY2HQQcNmaLfTE/NgCzhL5dVmRJRV1TU0MvtAwFTLIhhNPdQ6qtrQ0ymcxMamhrELMYk8mE6Ohoq7ZHegIZflZXV0MikYDP5+PgwYP49ttvoVKpwOPxEBYWhk8//XTMrfH2E7cG6er1erM2AXHbamlpMRuSEYE9GZLJ5XJafE9+oJiTYE9Pzz6HUf2FZd82LCysVxJb99V15FYpcGrt9CFdn1R8JpMJJUYfvHqsGI8mjcfme3vXSJJen0KhoD8bk8lkVvH1JF0jD5ba2tp+Z4URGE0Ucio7e7QnpHI0qjuJdpaok2hni7oSLQEzMseW2mJLW0O5XA6DwQAvLy/4+PjYTBnAvD7pF0dFRZmZy9gSGo0GUqkU7u7uiIqKgkajweuvv46SkhL861//Qnh4OB0jFBoaatMe9p49e3Do0CGwWCxMmjQJhw8ftssJtR+4tUiX6TQWHh6OoKCgLkOy2tpaVFZWIiQkBMHBwV1IgxiUEP9U5jDK09OTHkYNBN31bfvC59nV+PtPBUhbnYpQn4FPvI1GI33UFYlEqOvg4cmPL2HieHd8+MfJg/J3JXpQQsTdSdf0ej0KCwvh5+fX70WO7oiWz2FjtsiXbh248nrur5NrarVaREdHD3k41x8wfQTCw8MRGBhoVhGT04JlRTzUOYFWq0V+fj74fD5EIpFd+sWESOvq6hAdHQ0PDw+cPXsWL7/8Mp555hmsWrXKLpU9QXV1NWbMmIG8vDw4Ozvj0UcfxcKFC/GnP/3JbvfQC26N5Qjy5C8pKUFgYCCmTZtGV7RAp5a3qakJxcXFdHBgT9/83RmUkGGUQqFAVVUVPXAhJNxTD5TpWSASiQbkk5DM8NcdCOmSgWFJSQnGjx+PqVOnokmjx5ojF+HtwsXeRyYO2lC7Oz2o0WiESqVCU1MTSkpK6Mm3wWBAQ0NDj9I1E0XhUoUCx6UNOJEnh/wG0c4S+mJBXN9ES94rWWsNDw9HTEyMXRQChPh4PJ6Z8U93sfEk+oYp0WK2bfqb4Mw81ovF4gGnKQ8WbW1tkEql8PT0RHJyMjQaDZ577jlUVFTg+++/R1hYmF3uwxIGgwFarRZcLhcajYYOax3JGFOVbl5eHtrb2xEVFUVvkgGdZEuSYblcLoRCoVV0kqTPRyo+UtUwd+JbW1tRV1c3aLkQRVGYues8Zgh9sO0P/evrqtVqyGQyemrO4/GgM5jw1Cc5kNap8elTiYgNsm5eGTld1NXV0a0EYmpDPh9yWnBzd0elhosLVe04XdiMBpUOPCc2Zol8sOBG66C/8TPkvbq6utJfd1uD+V4HS3xMIiZtG8vvHcv+uVqtRn5+Pjw9PREZGWkXRQBFUSgvL0d9fT1iYmLg7u6OM2fO4JVXXsHq1auxYsUKu1a3lti3bx82btwIZ2dn3H333fjss8+G7V4scGu0F3Q6HR2tTvq2pMrUaDQDrjIHA3L0rq6uRn19PdhsNp02SyrigfrJPvefa7hao8Sptbf1+t8xEyMkEgldiVIUhU0/yvBVTi12PRSLe+ICh/QeLUH8GYjErjsyMFEUcisVOHa1Difz5WhsM4DLBib6sjE9hI/ZIl+M8/Xqt06WpBu0tLTQR117gPSLiQLDmoRDEpyZREwSnElFFxMTY5cVXqCT5KVSKd0bV6vVePXVV1FdXY0DBw4gNDTULvfRE1paWvDQQw/hiy++gJeXFx555BE8/PDDePLJJ4f1vm7g1mgvbNy4kY75lkgk+OKLL5CamjpkPehA0NbWRsvOUlNTIRAIzLbGSkpK0NbWBi6XS5NwXz67U8O9cEIqR3WrtttMLMucMEvnsaPZ1fgqpxarZoRZlXCZcqzu/BlMFIXLVcrOHm2eHPWqDvCc2Jgh7Kxo54h94cpzots2TNe13to2JBQxODgYKSkpdvm6MvWvvUWsDwXMBGcSK97S0kIvHHh5eaGwsBAURXVJcLZm1Uskb3K5nE7mOH36NDZu3Ii1a9fiqaeeGtbqluCXX35BREQEPaBdvHgxLly4MFJIt0eMKdJduXIlLly4gF27duHSpUuIi4uDTCZDUlISUlJSEBcXZ7PjZ299Wycnpy7G3jqdjj52E68AgUBAr/kyiYbkpmWWteLByebERiRg3t7e3faoM0pb8HZaEeaIfPHsHRFWea/M47WlHMtEUbhCiFYqR52yA1wnFmZE+WLdXZG4Q+wHN4vWgWW0C1OeRRZVDAYDBAIBtFot+Hw+4uPjhyT8HwhIHzY0NNTqVpo9wWg0oqioCCqVCgkJCWYkzzS2qa6uhlqt7kLEgzVDUqvVyMvLg5+fH5KTk6FSqbB69Wo0NDTg2LFjmDBhgjXf5pAQGhqK9PR0aDQaODs749SpU0hOTh7u2+oTY6q9AHQ+/dLS0ug+T25uLtLT05GVlYXr16/DxcUFSUlJSE5ORnJy8pC1lISAamtrhxQ3TgT5hIgVCgU9bHH38MDjX1RgttgXb9/o6xIDHoPB0KP2tapFi0cPXYSPKxefr0jqQnaDAdnsCggIQHh4OO1xe6VaibTrDThuRrQ+mB8bgDvEfnAXDP7aJpMJZWVlqK2thb+/P0wmE5RKJe2gRR5S1q742tvbkZ+fDycnJ0gkErusRwM3P2OirOnP9xOxeiQnKqIosayIe/peJ59xY2MjXd2ePHkSr7/+OtatW4dly5aNiOrWEps2bcIXX3wBDoeDKVOm4NChQ3bRKfcDt0ZPty9QFIXm5mZkZWXRRFxeXo6QkE6DF0LG3t7efX6jk2BKopQYqqdud2D2+F5NK0dxsw7bZwroXnV4eDhCQkK6vdc2nQFPfHQJdcoOfL4iachrxMxWglgshkAg6CTaPDmO5zVYnWgJSL+4u2UDZsWnUCjMUhZI22YwrmtMc3qi77YH9Ho9ZDIZ7XQ3VL0p0/y8OyImnw9RJpCevFKpxMsvv4zm5mZ88MEHdKvDgQHBQbo9gTzhMzIykJGRgezsbKhUKsTExNAknJCQYPYDQDx1BQIBhEKhXZ6sn2ZUYuvxIrwzgw9hkDecnZ2hUqloVzFmf5jH52PdV3k4JZPjwOMJuD1q8LIi0t+rr6+HUChEdTsXx/PkOC5tQK2iAxw2g2glvvAQWKd9o9PpzPLo+qs2IdI1JtGQYEzyGfW26KJSqZCfnw9vb2+7mbYztb5DOS31B5afT1NTEx11lZeXB4FAgMOHD2P9+vV48sknR2R1O0rgIN2BQK/X4+rVqzQRX7lyBRwOBzExMaiqqkJcXBw2bNhg1ynyL9lSvPKrGn+/V4iHk8z7akxTb4VCgS+vq/FdiQErEr2wPHXCoA1bmpo6034VHG9caXHCCWkjahTt4LBZuD3KB/Nj/XGnxM9qRAuYDwWtNQC1zGMjg0ymooTL5dI5d/aKdQdutjC4XC7EYrFdJG9AZ+EglUoRGBiI4OBgXLlyBVu3bkVxcTEEAgHc3d2xZs0aLF261C73MwbhIN2hgKIo7N69Gx988AGmT58OpVJJr/Ey+8PWtu0jXr9KpRJCkQgL/3UVcyX+eHNRdI//zy/5cjz75TXcG+uHF2b40zpZvV4PV1dXM0VAT1WcRqNBWqYUGTU6XJRTqLlR0d4W6Y0FcZ2tA09n65ODUqmETCajdai2dHdjPqjkcjnUajWcnZ0REBBgpiixFcjDpaqqyq4tDJPJREvtYmNj4eLigp9//hlbtmzBhg0b8Pjjj4PNZkOlUkGj0SAw0LryQku0trZi5cqVuHbtGlgsFj766CNMnz7dpte0ExykO1T89ttvSElJodsMxG+XVMOZmZlobGyESCRCcnIykpKSkJiYOCjPBma1FxYWhqCgILBYLKz54ioKGtQ4vqb7b8qCejUe++gShP4u+ORPU8wyvphifIVCAZVKBYqizFZ3SxVGfJVRgrMlKjS2U+CwWZge6Y0FsQG4U2IbogVuyrHUarVdUjkImGm4JMmAub7LtHi0VJQMBSQbzc3NDUKh0G62hwqFAvn5+Rg3bhxCQ0PR0tKCDRs2QKvV4r333utXMra1sXz5csycORMrV66ETqeDRqOxmyubjeEgXXvAaDRCKpUiIyMDWVlZuHTpEoxGI+Lj4+lqOCYmptcKjthPenl5dan2PkmvxLYTRTj93HSM8zAfsrRq9Hj0UDY6DCb858/JCHDvu0ozGAy4WCLHT9fqcKZYAbmWApsFJATycZfYGwsmBWOcj7vN+ovMXqa9jOLJdclDrbc0XEtnMeIna+m61t+KnGn5GB0dbfNFHQKj0Yji4mIolUrExsbC2dkZx44dwxtvvIFXXnkFS5cutcvnbgmFQoHJkyejpKRkWK5vYzhIdzhAfmgvXryIzMxMZGRk0GucRDucnJyM4OBglJeXo66uDgKBgLaftIS0ToWHDmbjnQdjcP+kcfSf640mrPrsMi5VKvDJ8ilICOn5h5miKEjr1DfkXQ2obGmHEwuY6M/FA4mhuCvaDyy9lq6IiS6WWe1Z49hNLBDJMNJeciyyZeXp6YmoqKgBV5mW67tM6Rr5jLqTrimVSuTn59MGQPYaULW2tiI/Px/jx4/HhAkT0NzcjPXr18NgMOC9996zefugN+Tm5mLVqlWIjY3F5cuXkZSUhH379tnFqMgOcJDuSAGxdiRtifT0dFy9ehU8Hg+PPvoo5syZg8TERHh6enZ5+htNFG7feQ53x/jj7/ff7Ou+lVaAzzKrsfWBaPwhoesRkSbavAYcz7tJtPHjBJjsY8LDqSJEBPdsC0gMvYmGmPjIMvvD/a32iJ1mU1MTxGKx3Y6SRqMRpaWlaG5utvraMFO6RtZ3gU7pmpubG5RKJb3Ca6/WCVmuUKvViImJgbOzM77//nts3boVGzduxJIlS4a9uszOzkZqairOnz+PadOmYe3atfDw8MAbb7wxrPdlJThIdySCoijMnTsXCxYswMKFC5GTk4PMzExcvHgRGo0GcXFxdFti4sSJ4PP5+NvnV1HS2IafV6cCAP6bU4PXfpBh+bQQbJgvMnvt/PrOijYtT47KFi2cWCxMi/DC7ROcEcJqhig0qF/5Wd3dt0ajMTP6YXrskmrP8nUbGxtRVFTUJTLH1iDLBqTas9dGWXV1NcrKysDn80FRlJk722A8OPqLlpYWyGQyBAcHIyQkBE1NTXjhhRfAYrGwf/9+u/nu9oW6ujqkpqairKwMQOfcZNu2bTh27Njw3ph14CDdkQqdTtft0Vqn0yE3N5ce0l27dq1zTXjaYuQLYnH4D+PB8QzAU0cuY2q4Fz54PB5OLBby69U4nidHWl4DKpo7iXZquBcWxAXg9jA3NFSWwMnJCSKRyKpmz8yNKLKoQEjGxcUFjY2NYLPZVhH99xdE62utZYP+gvj6dnR0mGmMmR7NltI18rAigaGDgdFoRGFhITQaDWJiYiAQCPDtt99i27ZteO211/DII48Me3VriZkzZ+LQoUOQSCTYvHkz2trasGPHjuG+LWvAQbqjHRRFobW1FV+dzsRbWQaMrz2HWu8EcFhGzORXgD0+FvltLqhS6MBmAdPCvTE/NgB3RfvBU+BEr3iKRCK7ebASP4qGhgbaW5fH43Ux+rE2iLKkoqLCrokKwE2fhvDwcIwbN65PkmNK10gbgvTQmcnNfaG5uRkFBQX06rBcLscLL7wALpeLd999d0CpHfZEbm4urVyIjIzE4cOH7aZ/tzEcpDtWYDRRmPz3E2AB0OqN8HV2Qp3aAFAU+IpysCpzEO3egdTJcUhJSUFRURG0Wi3mz59v1yM9UWH4+vqaJUd0dHSYtSU6OjroVAVCxkPR5xI5lqurK4RCoV2SnIHO90V8GsRi8ZAGg5ahmL2lExsMBhQWFqK9vR0xMTHg8/n4+uuvsX37dmzevBmLFy8ecdXtLYKxS7rr16/HDz/8AB6Ph6ioKBw+fHis6Px6xJ8/ycbJvHqwAEyP8sXCSUFYMHEc/Nz4MBgMuH79On744QccPHgQzs7O8PX1RVxcHL3IIZFIbKYNJUfr9vZ2SCSSPifRPYVhMo1s+uOYZTKZUFpaiqamJkgkErvJsZhVtUgkGnIAZk/X6E66xuFwoNVq4eHhgdDQUOj1erzwwgtwdnbGvn37bHIvDvQbY5d0T5w4gTvvvBMcDgcbNmwAALzzzjvDfFe2xylpPeJDvODfgx73xRdfxKJFizBz5kyo1WpcvHiR1g+TCjQpKQlJSUmYOnVqv47CvYEZmTPYlAwCSyMby6BQyyEUGRwR0b+9qnkS0Gjvqlqv16OgoABarRb+/v64cOECduzYgYaGBiQkJODBBx/EPffcA5FI1PeLOWArjF3SZeKbb77BV199NZIiO0YkSJZcZmYm7bZGvHGJfnjKlClwc3PrF3GSGBk3NzebReYYDAaz6J+2tjZwOBwYDAawWCx62cAeR2li51lfXw+JRGLXk1VjYyMKCwvpnnF9fT3WrVsHd3d37NixA3V1dcjKyoJIJMKcOXPsck9Go5HWm//44492ueYowK1Buvfffz+WLFky4p3jRyKMRiMKCgqQnp6OzMxM5OTkQKfTYdKkSTQRx8bGmhEqicxpbW01iweyNZgBpP7+/mCz2TZd22VCpVJBKpXaJK6nN5DqligxuFwuvvzyS+zZswdvvvkmFi1aNGy92927dyM7OxtKpdJBujcxukn3rrvuQl1dXZc/f+utt/DAAw/Q/56dnY2vv/7aMTiwEtrb25GTk2NmAu/m5oakpCRwOBxIpVLs2bPHbtpXoPNIn5+fD4FA0CV6nNn7JBUxMYJn9ocH088myxUtLS12XXIAOuOJioqK6LZNfX091q5dCx8fH+zZs8duapTuUFVVheXLl2Pjxo3YvXu3g3RvYnSTbl/4+OOPceDAAZw6dcoqES7/+c9/sHnzZkilUmRmZo6KCBB7gKIo5Obm4n/+53/Q3t6O8ePHo7y8HKGhobTJT1JSUr9M4AcKpm/BQI70xAiekDDZFmNqY/taUiA9Y3suVwCdcjKZTAaKohAdHQ0Oh4PPP/8c//jHP7B161bce++9w15gPPzww3j55ZehUqmwc+dOB+nexNgNpkxLS8P27dtx9uxZq2VmTZw4EV9//TX+8pe/WOX1xgpYLBbYbDa2bduG2bNnA7ipGsjIyMDp06exfft2qNVqxMbG0mqJ+Pj4IS0mtLa2QiaTwd/fHykpKQM60jPDHgmIkbdCoUBJSQk0Gg04HI5ZW4IEihYWFkKr1SIhIaHfRurWANH7RkZGIjAwELW1tVi7di38/f1x9uzZEaFl/fHHH2l70zNnzgz37YwajPpKVygUoqOjg/YjTU1NxQcffGCV154zZw527tzpqHQHCJ1OZ2YCf/XqVXC5XEyZMoXuDwuFwj7JU6/Xo6ioiN6wsmUQJVlSIBWxWq2GXq+Hj48PgoODOxM57GDKo9PpkJ+fDxaLBYlEAg6Hg3//+9/Yv38/3n77bSxcuHDYq1uCl19+GUeOHAGHw6G1xYsXL8ann3463Lc2EjC22wu2goN0rQOKoqBUKpGdnU2vNRcXFyMwMNDMBJ7E1JhMJtTU1HTxE7YHCOlRFIWIiAhotVqaiJlG8J6enoPuD/eE+vp6lJSU0Ft0NTU1ePbZZxEUFIRdu3aNaP35mTNnHO0Fc4zd9sJg0Z/hnLWQlpaGtWvXwmg0YuXKlXjppZes+vojHSwWC56enpg7dy7mzp0L4KanLXFae++999DU1ISQkBDU1tbirrvuwrp16+wmA2PqjJkeux4eHrT9IbF1VCgUqK2tpQ3QhxqEydxmS05OhpOTEz755BO8//77eOeddzB//vwRU906MHQ4Kt1eYI1K12g0QiwW4+TJk3Tq8NGjRxEbG2vFOx0beP/99/Huu+/i3nvvhUKhQE5ODiiKMjOBJwMla0Kr1UIqlcLZ2RlCoXBAMjNm0KNCoaCDQpn9YWdn525Jk0jfysrKaKKvqqrCs88+iwkTJmDnzp1226yzNyiKwsyZM7Fx40bcc889ADoH2B9++CHS0tKG+e6sAkelO1zIzMyEUChEZGQkAGDp0qX47rvvHKTbDaZOnYqcnBzaBIesCBMT+B07dkAmk8Hb25tWSqSkpCA4OHhQlSAzal0ikQxqOOXk5AQvLy+zo79er6dJuK6ujjaxYRr9UBQFqVQKLpdLV7dEhbNjxw7MmzdvTFe3LBYLH3zwAR555BHccccdMBgMeOWVV8YK4fYKR6XbDb755husWbMGcrkcXl5emDx5Mo4fPz6o1/rqq6+QlpaGQ4cOAQCOHDmCjIwM7N+/35q3fMuAoijI5XKzbLqamhpERETQ1XBiYiI8PDx6JS2SIGGPqHWKosyMfuRyOe2ZcOrUKYSHh+Ozzz6DSCTC9u3b7bZkMhLwv//7v3B1dUVbWxvc3d3x2muvDfctWQuOQdpwwUG6tofJZEJRURG9TXfx4kW0t7d3MYHn8XjQarW081pMTIyZlMzWaG9vh1QqBZ/Ph0gkglarxauvvorff/8dFEXBxcUFqampdvneqKysxLJly1BfXw8Wi4VVq1Zh7dq1Nr+uJdra2pCYmAgej4fs7GybJjDbGY72wnAhODgYlZWV9O+rqqoQHBw85Nd9+umnaZ3ktWvXhvx6oxlsNhtisRhisRjLli0D0DmcIibwBw4cwLVr16DX66FWq/HYY4/hscces1sWF3Eiq6yspOPWKyoqsHr1aojFYmRkZMDNzQ0dHR0oLi62yz1xOBzs2rULiYmJUKlUSEpKwrx58+ze9nJ1dcWSJUvg5uY2lgi3VzgqXRvDYDBALBbj1KlTCA4ORkpKCv79738jLi5uSK/766+/ws3NDcuWLbvlSbc/2Lx5M86cOYNly5ahqqoKWVlZKC0tRXBwMF0NJyUlwdfX16q9VDKkc3FxobXJH374IQ4fPoxdu3bhzjvvHBG92wceeACrV6/GvHnz7H7tzZs3w83NDS+++KLdr21DOCrd4QKHw8H+/fsxf/58GI1GPP3000MmXACYNWsWnS3lQN9Yvnw5Nm3aZEZwxC0sPT0dv/32G3bv3g2FQoHo6Gh6SDfYTTQiiauqqoJYLIaPjw/KysqwevVqxMbG4ty5c3b1b+gNZWVlyMnJwbRp04b7Vm4JOEjXDli4cCEWLlw43LdxSyMiIqLLn7HZbISHhyM8PBxLly4F0Kk8uH79OtLT0/HZZ59h/fr1YLPZ9DZdcnIyxGJxr4M3rVaLvLw8uLm5ISUlBQBw8OBBfPzxx9i7dy9mz549IqpboHOg+NBDD2Hv3r231ABvOOFoL4xilJWV4b777nO0F2wIiqJoE3jitlZQUAB/f3+ahFNSUhAYGAiTyYScnBwYDAZaglZaWoo1a9Zg0qRJ2Lp1q936yP2BXq/Hfffdh/nz52PdunXDfTtjDQ71wliELUh3pEy1RzLI9hrTBL6yshJ6vR4pKSl46qmnMHnyZBw9ehRHjhzBvn37MHPmzBFT3QKd72H58uXw8fHB3r17h/t2xiIcpDsWYQvSra2tRW1trdlU+9tvv3Usc/SCY8eOYdOmTVi3bh06OjqQkZGBtLQ0TJ06FR9//LFNjXoGi3PnzmHmzJmYNGkSvba8detWRxvMenCQ7ljDY489hjNnzqCxsRGBgYHYsmULVqxYYfXrDOdUe7SgubkZLi4uZvaVFEWNqMrWAbvDQboODBxlZWWYNWsWrl275hiyOODAwNAj6don4MmBUQfHVNsBB2wDB+k60AV6vR4PPfQQnnjiCSxevNhqr9ve3o6pU6ciISEBcXFx2LRpk9Ve2wEHRgscpOuAGSiKwooVKxATE2N1GRGfz8fp06dx+fJl5ObmIi0tDenp6Va9xq2CtLQ0SCQSCIVCbNu2bbhvx4EBwEG6Dpjh/PnzOHLkCE6fPo3Jkydj8uTJ+Omnn6zy2iwWi97C0uv10Ov1jmHTIGA0GvG3v/0NP//8M/Ly8nD06FHk5eUN92050E84SHcUo7KyEhEREWhubgbQmVobERExpPXgGTNmgKIoXLlyBbm5ucjNzbWqjMhoNGLy5MkICAjAvHnzHKungwDTo5nH49EezQ6MDjhIdxRjwoQJeOaZZ+j4n5deegmrVq1CeHj48N5YL3ByckJubi6qqqqQmZnp2KYbBKqrqzFhwgT69yEhIaiurh7GO3JgIHCQ7ijH888/j/T0dOzduxfnzp0bNU5NXl5euOOOO6yeFGA0GjFlyhTcd999Vn1dBxywFhykO8rB5XKxY8cOPP/889i7d++A8r3sDblcjtbWVgCdpjAnT55EdHS0Va+xb98+xMTEWPU1Rxps5dHsgH3gIN0xgJ9//hlBQUEj/qheW1uLO+64A/Hx8UhJScG8efOsWpFWVVXh2LFjWLlypdVecyQiJSUFhYWFKC0thU6nw+eff45FixYN92050E84rB1HOXJzc3Hy5Emkp6djxowZWFJ2hN8AAAFDSURBVLp0KYKCgob7trpFfHw8cnJybPb6zz33HLZv3w6VSmWza4wE2Mqj2QH7wFHpjmJQFIVnnnkGe/fuRWhoKNavXz9qerrWBokuSkpKGu5bsQsWLlyIgoICFBcXY+PGjcN9Ow4MAH15LzgwgsFisVYBmEtR1JIbv3cCkAXgeYqizg7rzdkZLBbrbQB/BGAAIADgAeBriqKetNLrlwFQATACMFAUlWyN13Xg1oODdB0Yc2CxWHMAvEhRlNUaxjdIN5miqEZrvaYDtyYc7QUHHHDAATvCUek64EA/wGKxSgG0oNPu9ABFUQeH+ZYcGKVwqBcccKB/mEFRVDWLxQoAcJLFYuVTFPXrcN+UA6MPjvaCAw70AxRFVd/4ZwOAbwBMHd47cmC0wkG6DjjQB1gsliuLxXIn/w7gbgAjexPFgRGL/w/9mYp95qjGqAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IBqe7X1732kX", + "colab_type": "text" + }, + "source": [ + "# Basis" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YeUZVHRM6PpT", + "colab_type": "text" + }, + "source": [ + "## 6.1 Graph two vectors that form a basis for $\\mathbb{R}^2$\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "utvF3Pkt8NP6", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "2e75bd97-77f5-46ad-df99-a6a5e7f6d5e4" + }, + "source": [ + "# vectors\n", + "\n", + "vector_i = np.array([0, 1])\n", + "vector_j = np.array([1, 0])\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1, 2)\n", + "plt.ylim(-1, 2)\n", + "\n", + "plt.arrow(0, 0, vector_i[0], vector_i[1], head_width=.02, head_length=0.01, color = 'r')\n", + "plt.arrow(0, 0, vector_j[0], vector_j[1], head_width=.02, head_length=0.01, color = 'b')\n", + "plt.show()" + ], + "execution_count": 33, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "20yPFBDUxxnS", + "colab_type": "text" + }, + "source": [ + "## 6.2 What does it mean to form a basis?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3w4tEayT8M0o", + "colab_type": "text" + }, + "source": [ + "To form a basis for a vector space means to establish a set of \"essential\" vectors that are linearly independent (i.e. they are not combinations of multiples of one another) so that the different combinations of multiples of these \"essential\" vectors form a unique space." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EHmUxbcY6vD3", + "colab_type": "text" + }, + "source": [ + "# Rank" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IpJwt9kw6v8U", + "colab_type": "text" + }, + "source": [ + "## 7.1 What is the Rank of P?\n", + "\n", + "\\begin{align}\n", + "P = \\begin{bmatrix} \n", + "1 & 2 & 3 \\\\\n", + " -1 & 0 & 7 \\\\\n", + "4 & 8 & 2\n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xhKUKhIloJnz", + "colab_type": "text" + }, + "source": [ + "P's rank is 3, since there are no combinations of multiples of any two row vectors that can sum to the third (i.e. they are all linearly independent)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jGqFMBYY7mHD", + "colab_type": "text" + }, + "source": [ + "## 7.2 What does the rank of a matrix tell us?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vjg1IiCD8nnP", + "colab_type": "text" + }, + "source": [ + "The rank of a matrix is the number of linearly independent row vectors within the matrix. It gives us the basis of the row vector space." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0Db2sc_V8QD6", + "colab_type": "text" + }, + "source": [ + "# Linear Projections\n", + "\n", + "## 8.1 Line $L$ is formed by all of the vectors that can be created by scaling vector $v$ \n", + "\\begin{align}\n", + "v = \\begin{bmatrix} 1 & 3 \\end{bmatrix}\n", + "\\end{align}\n", + "\n", + "\\begin{align}\n", + "w = \\begin{bmatrix} -1 & 2 \\end{bmatrix}\n", + "\\end{align}\n", + "\n", + "## find $proj_{L}(w)$\n", + "\n", + "## graph your projected vector to check your work (make sure your axis are square/even)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "hp5z2WTBCNKx", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "4694955a-c0f4-4e8a-a94f-043eff214f2c" + }, + "source": [ + "# vectors\n", + "\n", + "v = np.array([1, 3])\n", + "w = np.array([-1, 2])\n", + "b = np.array([1, 1])\n", + "\n", + "# calculate projection scalar by using dot product over norm of v squared\n", + "\n", + "proj = np.multiply(((w * v).sum())/10, v)\n", + "\n", + "# plot them\n", + "\n", + "plt.xlim(-1.5, 4) \n", + "plt.ylim(-1, 4)\n", + "\n", + "x_vals = np.array(axes.get_xlim())\n", + "y_vals = 3*x_vals\n", + "\n", + "plt.plot(x_vals, y_vals, '--', color='b', linewidth=1)\n", + "plt.arrow(0, 0, v[0], v[1], linewidth=3, head_width=.05, head_length=0.05, color ='red')\n", + "plt.arrow(0, 0, proj[0], proj[1], linewidth=3, head_width=.05, head_length=0.05, color ='gray')\n", + "plt.arrow(0, 0, w[0], w[1], linewidth=3, head_width=.05, head_length=0.05, color ='yellow')\n", + "\n", + "plt.show()" + ], + "execution_count": 54, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TKkrPwRM-Oar", + "colab_type": "text" + }, + "source": [ + "# Stretch Goal\n", + "\n", + "## For vectors that begin at the origin, the coordinates of where the vector ends can be interpreted as regular data points. (See 3Blue1Brown videos about Spans, Basis, etc.)\n", + "\n", + "## Write a function that can calculate the linear projection of each point (x,y) (vector) onto the line y=x. run the function and plot the original points in blue and the new projected points on the line y=x in red. \n", + "\n", + "## For extra points plot the orthogonal vectors as a dashed line from the original blue points to the projected red points." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cp52kZra-ykj", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "64fc0430-20c4-458c-a372-aa5794008473" + }, + "source": [ + "import pandas as pd\n", + "\n", + "# Creating a dataframe for you to work with -Feel free to not use the dataframe if you don't want to.\n", + "x_values = [1, 4, 7, 3, 9, 4, 5]\n", + "y_values = [4, 2, 5, 0, 8, 2, 8]\n", + "\n", + "data = {\"x\": x_values, \"y\": y_values}\n", + "\n", + "df = pd.DataFrame(data)\n", + "\n", + "df.head()\n", + "\n", + "plt.scatter(df.x, df.y)\n", + "plt.show()" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "EZTA6Tj6BGDb", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "10461399-6847-4327-c488-4de366cd1f8d" + }, + "source": [ + "def plot_proj_point(x, y):\n", + " plt.xlim(x - 2, x + 2) \n", + " plt.ylim(y - 2, y + 2)\n", + " \n", + " orig_point = np.array([x, y])\n", + " b = np.array([1, 1])\n", + " proj = np.array(((orig_point * b).sum() / (b * b).sum()) * b)\n", + " \n", + " x_vals = np.array(axes.get_xlim())\n", + " y_vals = x_vals\n", + " \n", + " plt.plot(x_vals, y_vals, '--', color='b', linewidth=1)\n", + " plt.scatter(proj[0], proj[1], c='red')\n", + " plt.scatter(orig_point[0], orig_point[1], c='blue')\n", + " \n", + " extra_x_vals = [orig_point[0], proj[0]]\n", + " extra_y_vals = [orig_point[1], proj[1]]\n", + " plt.plot(extra_x_vals, extra_y_vals, '--')\n", + " \n", + " plt.show()\n", + "\n", + "plot_proj_point(2, 3)" + ], + "execution_count": 57, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/module3-dimensionality-reduction/Eli_Fulton_LS_DS_133_High_Dimensional_Data_Assignment.ipynb b/module3-dimensionality-reduction/Eli_Fulton_LS_DS_133_High_Dimensional_Data_Assignment.ipynb new file mode 100644 index 00000000..04e876f7 --- /dev/null +++ b/module3-dimensionality-reduction/Eli_Fulton_LS_DS_133_High_Dimensional_Data_Assignment.ipynb @@ -0,0 +1,1834 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Eli Fulton LS_DS_133_High_Dimensional_Data_Assignment.ipynb", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7wMWCkE1RZpM", + "colab_type": "text" + }, + "source": [ + "# Vertical Line Test" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "W0-g7aprRv2j", + "colab_type": "text" + }, + "source": [ + "## 1.1 Create two graphs, one that passes the vertical line test and one that does not." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "fIJhCtF6RW_U", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ckeTKqMgRy7g", + "colab_type": "text" + }, + "source": [ + "## 1.2 Why are graphs that don't pass the vertical line test not considered \"functions?\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Gtl20YeDR6x-", + "colab_type": "text" + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "g21uN62xSKSk", + "colab_type": "text" + }, + "source": [ + "# Functions as Relations" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gwkcV-EMSMNd", + "colab_type": "text" + }, + "source": [ + "## 2.1 Which of the following relations are functions? Why?\n", + "\n", + "\\begin{align}\n", + "\\text{Relation 1: } \\{(1, 2), (3, 2), (1, 3)\\}\n", + "\\\\\n", + "\\text{Relation 2: } \\{(1, 3), (2, 3), (6, 7)\\}\n", + "\\\\\n", + "\\text{Relation 3: } \\{(9, 4), (2, 1), (9, 6)\\}\n", + "\\\\\n", + "\\text{Relation 4: } \\{(6, 2), (8, 3), (6, 4)\\}\n", + "\\\\\n", + "\\text{Relation 5: } \\{(2, 6), (2, 7), (2, 4)\\}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "y0U30PrlTAAa", + "colab_type": "text" + }, + "source": [ + "# Functions as a mapping between dimensions\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pw-OU9qmT5Ua", + "colab_type": "text" + }, + "source": [ + "## 3.1 for the following functions what is the dimensionality of the domain (input) and codomain (range/output)?\n", + "\n", + "\\begin{align}\n", + "m(𝑥_1,𝑥_2,𝑥_3)=(x_1+x_2, x_1+x_3, x_2+x_3)\n", + "\\\\\n", + "n(𝑥_1,𝑥_2,𝑥_3,𝑥_4)=(x_2^2 + x_3, x_2x_4)\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "k4tKHjdHUevC", + "colab_type": "text" + }, + "source": [ + "## 3.2 Do you think it's possible to create a function that maps from a lower dimensional space to a higher dimensional space? If so, provide an example." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2nEWvwVyVWdW", + "colab_type": "text" + }, + "source": [ + "# Vector Transformations" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1n0-6FsYVcVk", + "colab_type": "text" + }, + "source": [ + "## 4.1 Plug the corresponding unit vectors into each function. Use the output vectors to create a transformation matrix.\n", + "\n", + "\\begin{align}\n", + "p(\\begin{bmatrix}x_1 \\\\ x_2 \\end{bmatrix}) = \\begin{bmatrix} x_1 + 3x_2 \\\\2 x_2 - x_1 \\\\ \\end{bmatrix}\n", + "\\\\\n", + "\\\\\n", + "q(\\begin{bmatrix}x_1 \\\\ x_2 \\\\ x_3\\end{bmatrix}) = \\begin{bmatrix} 4x_1 + x_2 + 2x_3 \\\\2 x_2 - x_1 + 3x_3 \\\\ 5x_1 - 2x_3 + x_2 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "n5HUOQIxZ2gp", + "colab_type": "text" + }, + "source": [ + "## 4.2 Verify that your transformation matrices are correct by choosing an input matrix and calculating the result both via the traditional functions above and also via vector-matrix multiplication." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0UANR1IEaVWE", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vEoiri3mak7j", + "colab_type": "text" + }, + "source": [ + "# Eigenvalues and Eigenvectors" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5HY0R4u7anIr", + "colab_type": "text" + }, + "source": [ + "## 5.1 In your own words, give an explanation for the intuition behind eigenvalues and eigenvectors." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VdehMwBtatKI", + "colab_type": "text" + }, + "source": [ + "# The Curse of Dimensionality" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4oVrJax-a3SK", + "colab_type": "text" + }, + "source": [ + "## 6.1 What are some of the challenges of working with high dimensional spaces?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZiBJxsZla88c", + "colab_type": "text" + }, + "source": [ + "## 6.2 What is the rule of thumb for how many observations you should have compared to parameters in your model?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NZmqdeygbHJx", + "colab_type": "text" + }, + "source": [ + "# Principal Component Analysis" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7iEheetpbJdN", + "colab_type": "text" + }, + "source": [ + "## 7.1 Code for loading and cleaning the 2013 national dataset from the [Housing Affordability Data System (HADS)](https://www.huduser.gov/portal/datasets/hads/hads.html) --housing data, can be found below. \n", + "\n", + "## Perform PCA on the processed dataset `national_processed` (Make sure you standardize your data!) and then make a scatterplot of PC1 against PC2. Some of our discussion and work around PCA with this dataset will continue during tomorrow's lecture and assignment.\n", + "\n", + "Not only does this dataset have decent amount columns to begin with (99), but in preparing the data for PCA we have also [one-hot-encoded](https://hackernoon.com/what-is-one-hot-encoding-why-and-when-do-you-have-to-use-it-e3c6186d008f#targetText=One%20hot%20encoding%20is%20a,the%20entry%20in%20the%20dataset.) all of the categorical variables. This has the effect of creating a new column for each individual category of each categorical variable. After processing this dataset has 64738 columns. --Das a lot of columns.\n", + "\n", + "Don't worry too much about the mechanics of one-hot encoding right now, you will learn and experiment with a whole bunch of categorical encoding approaches in unit 2. \n", + "\n", + "The code below will read in the dataset and perform the one-hot encoding of the categorical variables. Start adding your PCA code at the bottom of the provided code." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Us4nNFs02HlD", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 351 + }, + "outputId": "974e831f-cd76-41ed-c225-8ab4d1fea275" + }, + "source": [ + "from urllib.request import urlopen\n", + "from zipfile import ZipFile\n", + "from io import BytesIO\n", + "import os.path\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Read Natinal Data \n", + "national_url = 'https://www.huduser.gov/portal/datasets/hads/hads2013n_ASCII.zip'\n", + "national_file = 'thads2013n.txt'\n", + "\n", + "if os.path.exists(national_file):\n", + " national = pd.read_csv(national_file)\n", + "else: \n", + " z_national = urlopen(national_url)\n", + " zip_national = ZipFile(BytesIO(z_national.read())).extract(national_file)\n", + " national = pd.read_csv(zip_national)\n", + "\n", + "print(national.shape)\n", + "national.head()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "(64535, 99)\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CONTROLAGE1METRO3REGIONLMEDFMRL30L50L80IPOVBEDRMSBUILTSTATUSTYPEVALUEVACANCYTENURENUNITSROOMSWEIGHTPERZINC2ZADEQZSMHCSTRUCTURETYPEOWNRENTUTILITYOTHERCOSTCOST06COST12COST08COSTMEDTOTSALASSISTEDGLMEDGL30GL50GL80APLMEDABL30...COST08RELPOVCATCOST08RELFMRPCTCOST08RELFMRCATCOST12RELAMIPCTCOST12RELAMICATCOST12RELPOVPCTCOST12RELPOVCATCOST12RELFMRPCTCOST12RELFMRCATCOSTMedRELAMIPCTCOSTMedRELAMICATCOSTMedRELPOVPCTCOSTMedRELPOVCATCOSTMedRELFMRPCTCOSTMedRELFMRCATFMTZADEQFMTMETRO3FMTBUILTFMTSTRUCTURETYPEFMTBEDRMSFMTOWNRENTFMTCOST06RELPOVCATFMTCOST08RELPOVCATFMTCOST12RELPOVCATFMTCOSTMEDRELPOVCATFMTINCRELPOVCATFMTCOST06RELFMRCATFMTCOST08RELFMRCATFMTCOST12RELFMRCATFMTCOSTMEDRELFMRCATFMTINCRELFMRCATFMTCOST06RELAMICATFMTCOST08RELAMICATFMTCOST12RELAMICATFMTCOSTMEDRELAMICATFMTINCRELAMICATFMTASSISTEDFMTBURDENFMTREGIONFMTSTATUS
0'100003130103'82'3''1'737389561573826213403221106722006'1'140000-6'1'163117.394239118021'1'5331'1'169.000000213.750000648.588189803.050535696.905247615.1567120-97373815738262134032251616.620234.571429...472.898038248.4026352290.250487484.001102237.0776242222.339102464.3469362'1 Adequate''-5''2000-2009''1 Single Family''2 2BR''1 Owner''4 200%+ Poverty''4 200%+ Poverty''4 200%+ Poverty''4 200%+ Poverty''3 150-200% Poverty''2 50.1 - 100% FMR''2 50.1 - 100% FMR''2 50.1 - 100% FMR''2 50.1 - 100% FMR''1 LTE 50% FMR''2 30 - 50% AMI''2 30 - 50% AMI''2 30 - 50% AMI''2 30 - 50% AMI''2 30 - 50% AMI''.''2 30% to 50%''-5''-5'
1'100006110249'50'5''3'5584611001716528604457442421841980'1'1130000-6'1'162150.7255444122961'1'4871'1'245.33333358.3333331167.6407811669.6434051324.6712181058.988479123000-95584617165286044574455846.019911.400000...4120.4246563103.0940636275.7689994151.785764365.3884684174.909320396.2716802'1 Adequate''-5''1980-1989''1 Single Family''4 4BR+''1 Owner''3 150-200% Poverty''4 200%+ Poverty''4 200%+ Poverty''3 150-200% Poverty''4 200%+ Poverty''3 GT FMR''3 GT FMR''3 GT FMR''2 50.1 - 100% FMR''3 GT FMR''4 60 - 80% AMI''4 60 - 80% AMI''6 100 - 120% AMI''4 60 - 80% AMI''7 120% AMI +''.''1 Less than 30%''-5''-5'
2'100006370140'53'5''3'5584611001375022897366141547041985'1'1150000-6'1'172213.789404227974'1'14051'1'159.00000037.5000001193.3932091772.6270061374.5821751068.02516828000-95584613750228973661444676.819937.500000...4124.9620163109.4529056458.3392394161.147910365.9464494276.153890497.0931972'1 Adequate''-5''1980-1989''1 Single Family''4 4BR+''1 Owner''4 200%+ Poverty''4 200%+ Poverty''4 200%+ Poverty''4 200%+ Poverty''3 150-200% Poverty''3 GT FMR''3 GT FMR''3 GT FMR''2 50.1 - 100% FMR''2 50.1 - 100% FMR''4 60 - 80% AMI''5 80 - 100% AMI''6 100 - 120% AMI''4 60 - 80% AMI''4 60 - 80% AMI''.''3 50% or More''-5''-5'
3'100006520140'67'5''3'558469491375022897366141396431985'1'1200000-6'1'162364.585097232220'1'2791'1'179.00000070.6666671578.8576122351.1693411820.4429001411.7002240-95584613750228973661444676.817875.000000...4191.8274923161.9267097673.4945124247.752301397.2248015404.3827634148.7566103'1 Adequate''-5''1980-1989''1 Single Family''3 3BR''1 Owner''4 200%+ Poverty''4 200%+ Poverty''4 200%+ Poverty''4 200%+ Poverty''4 200%+ Poverty''3 GT FMR''3 GT FMR''3 GT FMR''3 GT FMR''2 50.1 - 100% FMR''6 100 - 120% AMI''7 120% AMI +''7 120% AMI +''5 80 - 100% AMI''4 60 - 80% AMI''.''1 Less than 30%''-5''-5'
4'100007130148'26'1''3'609917371480124628394211549221980'1'1-6-6'2'10042314.524902296874'1'7595'2'146.00000012.500000759.000000759.000000759.000000759.0000009690006099114801246283942148792.816651.125000...3102.985075355.3087073195.9721153102.985075355.3087073195.9721153102.9850753'1 Adequate''Central City''1980-1989''5 50+ units''2 2BR''2 Renter''3 150-200% Poverty''3 150-200% Poverty''3 150-200% Poverty''3 150-200% Poverty''4 200%+ Poverty''3 GT FMR''3 GT FMR''3 GT FMR''3 GT FMR''3 GT FMR''3 50 - 60% AMI''3 50 - 60% AMI''3 50 - 60% AMI''3 50 - 60% AMI''7 120% AMI +''0 Not Assisted''1 Less than 30%''-5''-5'
\n", + "

5 rows × 99 columns

\n", + "
" + ], + "text/plain": [ + " CONTROL AGE1 METRO3 ... FMTBURDEN FMTREGION FMTSTATUS\n", + "0 '100003130103' 82 '3' ... '2 30% to 50%' '-5' '-5'\n", + "1 '100006110249' 50 '5' ... '1 Less than 30%' '-5' '-5'\n", + "2 '100006370140' 53 '5' ... '3 50% or More' '-5' '-5'\n", + "3 '100006520140' 67 '5' ... '1 Less than 30%' '-5' '-5'\n", + "4 '100007130148' 26 '1' ... '1 Less than 30%' '-5' '-5'\n", + "\n", + "[5 rows x 99 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 2 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "O5zrMTud2qFU", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "22a279ad-ad46-46ba-82c4-47ff31864e01" + }, + "source": [ + "# Look at datatypes\n", + "# a lot of object datatypes even though they seem to be strings of numbers.\n", + "national.dtypes" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "CONTROL object\n", + "AGE1 int64\n", + "METRO3 object\n", + "REGION object\n", + "LMED int64\n", + "FMR int64\n", + "L30 int64\n", + "L50 int64\n", + "L80 int64\n", + "IPOV int64\n", + "BEDRMS int64\n", + "BUILT int64\n", + "STATUS object\n", + "TYPE int64\n", + "VALUE int64\n", + "VACANCY int64\n", + "TENURE object\n", + "NUNITS int64\n", + "ROOMS int64\n", + "WEIGHT float64\n", + "PER int64\n", + "ZINC2 int64\n", + "ZADEQ object\n", + "ZSMHC int64\n", + "STRUCTURETYPE int64\n", + "OWNRENT object\n", + "UTILITY float64\n", + "OTHERCOST float64\n", + "COST06 float64\n", + "COST12 float64\n", + " ... \n", + "COSTMedRELAMICAT int64\n", + "COSTMedRELPOVPCT float64\n", + "COSTMedRELPOVCAT int64\n", + "COSTMedRELFMRPCT float64\n", + "COSTMedRELFMRCAT int64\n", + "FMTZADEQ object\n", + "FMTMETRO3 object\n", + "FMTBUILT object\n", + "FMTSTRUCTURETYPE object\n", + "FMTBEDRMS object\n", + "FMTOWNRENT object\n", + "FMTCOST06RELPOVCAT object\n", + "FMTCOST08RELPOVCAT object\n", + "FMTCOST12RELPOVCAT object\n", + "FMTCOSTMEDRELPOVCAT object\n", + "FMTINCRELPOVCAT object\n", + "FMTCOST06RELFMRCAT object\n", + "FMTCOST08RELFMRCAT object\n", + "FMTCOST12RELFMRCAT object\n", + "FMTCOSTMEDRELFMRCAT object\n", + "FMTINCRELFMRCAT object\n", + "FMTCOST06RELAMICAT object\n", + "FMTCOST08RELAMICAT object\n", + "FMTCOST12RELAMICAT object\n", + "FMTCOSTMEDRELAMICAT object\n", + "FMTINCRELAMICAT object\n", + "FMTASSISTED object\n", + "FMTBURDEN object\n", + "FMTREGION object\n", + "FMTSTATUS object\n", + "Length: 99, dtype: object" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 3 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "yIrOjVmd2yLz", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "outputId": "d855cbbd-42ba-47a2-aba9-584813e9c5ab" + }, + "source": [ + "# check for null values\n", + "national.isnull().sum().any()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "False" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 4 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2u9tdmwX3KL_", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "ce3e8bc6-7571-4b9b-8b4f-b8ae7c94f837" + }, + "source": [ + "# check for number of categorical vs numeric columns\n", + "cat_cols = national.columns[national.dtypes=='object']\n", + "num_cols = national.columns[national.dtypes!='object']\n", + "\n", + "print(f'{len(cat_cols)} categorical columns')\n", + "print(f'{len(num_cols)} numerical columns')" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "32 categorical columns\n", + "67 numerical columns\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "UMHOtOs_3gcL", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "9194fefa-217a-49e4-cd81-b2d416d77b19" + }, + "source": [ + "# We're making a copy of our data in case we mess something up.\n", + "national_processed = national.copy()\n", + "\n", + "# Categorically Encode our Variables:\n", + "# They need to all be numeric before we do PCA.\n", + "# https://pbpython.com/categorical-encoding.html\n", + "\n", + "# Cast categorical columns to \"category\" data type\n", + "national_processed[cat_cols] = national_processed[cat_cols].astype('category')\n", + "\n", + "national_processed.dtypes" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "CONTROL category\n", + "AGE1 int64\n", + "METRO3 category\n", + "REGION category\n", + "LMED int64\n", + "FMR int64\n", + "L30 int64\n", + "L50 int64\n", + "L80 int64\n", + "IPOV int64\n", + "BEDRMS int64\n", + "BUILT int64\n", + "STATUS category\n", + "TYPE int64\n", + "VALUE int64\n", + "VACANCY int64\n", + "TENURE category\n", + "NUNITS int64\n", + "ROOMS int64\n", + "WEIGHT float64\n", + "PER int64\n", + "ZINC2 int64\n", + "ZADEQ category\n", + "ZSMHC int64\n", + "STRUCTURETYPE int64\n", + "OWNRENT category\n", + "UTILITY float64\n", + "OTHERCOST float64\n", + "COST06 float64\n", + "COST12 float64\n", + " ... \n", + "COSTMedRELAMICAT int64\n", + "COSTMedRELPOVPCT float64\n", + "COSTMedRELPOVCAT int64\n", + "COSTMedRELFMRPCT float64\n", + "COSTMedRELFMRCAT int64\n", + "FMTZADEQ category\n", + "FMTMETRO3 category\n", + "FMTBUILT category\n", + "FMTSTRUCTURETYPE category\n", + "FMTBEDRMS category\n", + "FMTOWNRENT category\n", + "FMTCOST06RELPOVCAT category\n", + "FMTCOST08RELPOVCAT category\n", + "FMTCOST12RELPOVCAT category\n", + "FMTCOSTMEDRELPOVCAT category\n", + "FMTINCRELPOVCAT category\n", + "FMTCOST06RELFMRCAT category\n", + "FMTCOST08RELFMRCAT category\n", + "FMTCOST12RELFMRCAT category\n", + "FMTCOSTMEDRELFMRCAT category\n", + "FMTINCRELFMRCAT category\n", + "FMTCOST06RELAMICAT category\n", + "FMTCOST08RELAMICAT category\n", + "FMTCOST12RELAMICAT category\n", + "FMTCOSTMEDRELAMICAT category\n", + "FMTINCRELAMICAT category\n", + "FMTASSISTED category\n", + "FMTBURDEN category\n", + "FMTREGION category\n", + "FMTSTATUS category\n", + "Length: 99, dtype: object" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ymxU-aPtQ1eq", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "02fe0fad-81bb-404c-a4cd-92242cfe4c6c" + }, + "source": [ + "# Replace all category cell values with their numeric category codes\n", + "for col in cat_cols:\n", + " national_processed[col] = national_processed[col].cat.codes\n", + "\n", + "print(national_processed.shape)\n", + "national_processed.head()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "(64535, 99)\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CONTROLAGE1METRO3REGIONLMEDFMRL30L50L80IPOVBEDRMSBUILTSTATUSTYPEVALUEVACANCYTENURENUNITSROOMSWEIGHTPERZINC2ZADEQZSMHCSTRUCTURETYPEOWNRENTUTILITYOTHERCOSTCOST06COST12COST08COSTMEDTOTSALASSISTEDGLMEDGL30GL50GL80APLMEDABL30...COST08RELPOVCATCOST08RELFMRPCTCOST08RELFMRCATCOST12RELAMIPCTCOST12RELAMICATCOST12RELPOVPCTCOST12RELPOVCATCOST12RELFMRPCTCOST12RELFMRCATCOSTMedRELAMIPCTCOSTMedRELAMICATCOSTMedRELPOVPCTCOSTMedRELPOVCATCOSTMedRELFMRPCTCOSTMedRELFMRCATFMTZADEQFMTMETRO3FMTBUILTFMTSTRUCTURETYPEFMTBEDRMSFMTOWNRENTFMTCOST06RELPOVCATFMTCOST08RELPOVCATFMTCOST12RELPOVCATFMTCOSTMEDRELPOVCATFMTINCRELPOVCATFMTCOST06RELFMRCATFMTCOST08RELFMRCATFMTCOST12RELFMRCATFMTCOSTMEDRELFMRCATFMTINCRELFMRCATFMTCOST06RELAMICATFMTCOST08RELAMICATFMTCOST12RELAMICATFMTCOSTMEDRELAMICATFMTINCRELAMICATFMTASSISTEDFMTBURDENFMTREGIONFMTSTATUS
0082207373895615738262134032211067220060140000-61163117.394239118021153310169.000000213.750000648.588189803.050535696.905247615.1567120-97373815738262134032251616.620234.571429...472.898038248.4026352290.250487484.001102237.0776242222.339102464.34693621051204444311111111120200
115042558461100171652860445744242184198001130000-61162150.7255444122961148710245.33333358.3333331167.6407811669.6434051324.6712181058.988479123000-95584617165286044574455846.019911.400000...4120.4246563103.0940636275.7689994151.785764365.3884684174.909320396.27168021031403443422213335370100
225342558461100137502289736614154704198501150000-61172213.7894042279741140510159.00000037.5000001193.3932091772.6270061374.5821751068.02516828000-95584613750228973661444676.819937.500000...4124.9620163109.4529056458.3392394161.147910365.9464494276.153890497.09319721031404444322212345340300
33674255846949137502289736614139643198501200000-61162364.585097232220127910179.00000070.6666671578.8576122351.1693411820.4429001411.7002240-95584613750228973661444676.817875.000000...4191.8274923161.9267097673.4945124247.752301397.2248015404.3827634148.75661031031304444422222566440100
44260260991737148012462839421154922198001-6-6210042314.524902296874175951146.00000012.500000759.000000759.000000759.000000759.0000009690006099114801246283942148792.816651.125000...3102.985075355.3087073195.9721153102.985075355.3087073195.9721153102.98507531135213333422223222271100
\n", + "

5 rows × 99 columns

\n", + "
" + ], + "text/plain": [ + " CONTROL AGE1 METRO3 REGION ... FMTASSISTED FMTBURDEN FMTREGION FMTSTATUS\n", + "0 0 82 2 0 ... 0 2 0 0\n", + "1 1 50 4 2 ... 0 1 0 0\n", + "2 2 53 4 2 ... 0 3 0 0\n", + "3 3 67 4 2 ... 0 1 0 0\n", + "4 4 26 0 2 ... 1 1 0 0\n", + "\n", + "[5 rows x 99 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 7 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6NS5AQpcQ8Je", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "3cbe9b8e-05e4-4126-f072-030c8d2ac7b4" + }, + "source": [ + "# Now we only ahve numeric columns (ints and floats)\n", + "national_processed.dtypes" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "CONTROL int32\n", + "AGE1 int64\n", + "METRO3 int8\n", + "REGION int8\n", + "LMED int64\n", + "FMR int64\n", + "L30 int64\n", + "L50 int64\n", + "L80 int64\n", + "IPOV int64\n", + "BEDRMS int64\n", + "BUILT int64\n", + "STATUS int8\n", + "TYPE int64\n", + "VALUE int64\n", + "VACANCY int64\n", + "TENURE int8\n", + "NUNITS int64\n", + "ROOMS int64\n", + "WEIGHT float64\n", + "PER int64\n", + "ZINC2 int64\n", + "ZADEQ int8\n", + "ZSMHC int64\n", + "STRUCTURETYPE int64\n", + "OWNRENT int8\n", + "UTILITY float64\n", + "OTHERCOST float64\n", + "COST06 float64\n", + "COST12 float64\n", + " ... \n", + "COSTMedRELAMICAT int64\n", + "COSTMedRELPOVPCT float64\n", + "COSTMedRELPOVCAT int64\n", + "COSTMedRELFMRPCT float64\n", + "COSTMedRELFMRCAT int64\n", + "FMTZADEQ int8\n", + "FMTMETRO3 int8\n", + "FMTBUILT int8\n", + "FMTSTRUCTURETYPE int8\n", + "FMTBEDRMS int8\n", + "FMTOWNRENT int8\n", + "FMTCOST06RELPOVCAT int8\n", + "FMTCOST08RELPOVCAT int8\n", + "FMTCOST12RELPOVCAT int8\n", + "FMTCOSTMEDRELPOVCAT int8\n", + "FMTINCRELPOVCAT int8\n", + "FMTCOST06RELFMRCAT int8\n", + "FMTCOST08RELFMRCAT int8\n", + "FMTCOST12RELFMRCAT int8\n", + "FMTCOSTMEDRELFMRCAT int8\n", + "FMTINCRELFMRCAT int8\n", + "FMTCOST06RELAMICAT int8\n", + "FMTCOST08RELAMICAT int8\n", + "FMTCOST12RELAMICAT int8\n", + "FMTCOSTMEDRELAMICAT int8\n", + "FMTINCRELAMICAT int8\n", + "FMTASSISTED int8\n", + "FMTBURDEN int8\n", + "FMTREGION int8\n", + "FMTSTATUS int8\n", + "Length: 99, dtype: object" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WAJ8bjVcEwhA", + "colab_type": "code", + "colab": {} + }, + "source": [ + "### Your Code Here" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RQx7UvsucIrL", + "colab_type": "text" + }, + "source": [ + "# Stretch Goals\n", + "\n", + "## 1) Perform further data exploration on the HADS national dataset (the version before we one-hot encoded it) Make scatterplots and see if you can see any resemblance between the original scatterplots and the plot of the principal components that you made in 7.1. \n", + "\n", + "(You may or may not not see very much resemblance depending on the variables you choose, and that's ok!)\n", + "\n", + "## 2) Study \"Scree Plots\" and then try and make one for your PCA dataset. How many principal conponents do you need to retain in order for your PCs to contain 90% of the explained variance? \n", + "\n", + "We will present this topic formally at the beginning of tomorrow's lecture, so if you figure this stretch goal out, you're ahead of the game. \n", + "\n", + "## 3) Explore further the intuition behind eigenvalues and eigenvectors by creating your very own eigenfaces:\n", + "\n", + "Prioritize self-study over this stretch goal if you are not semi-comfortable with the topics of PCA, Eigenvalues, and Eigenvectors.\n", + "\n", + "![Eigenfaces](https://i.pinimg.com/236x/1c/f1/01/1cf101a9859437a5d096a04b05be06b4--faces-tattoo.jpg)\n", + "\n", + "You don't necessarily have to use this resource, but this will get you started: \n", + "[Eigenface Tutorial](https://sandipanweb.wordpress.com/2018/01/06/eigenfaces-and-a-simple-face-detector-with-pca-svd-in-python/)" + ] + } + ] +} \ No newline at end of file diff --git a/module4-clustering/Eli_Fulton_LS_DS_134_Clustering_Assignment.ipynb b/module4-clustering/Eli_Fulton_LS_DS_134_Clustering_Assignment.ipynb new file mode 100644 index 00000000..adaa55f1 --- /dev/null +++ b/module4-clustering/Eli_Fulton_LS_DS_134_Clustering_Assignment.ipynb @@ -0,0 +1,814 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Eli Fulton LS_DS_134_Clustering_Assignment.ipynb", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "y-3rVFtGLMJM", + "colab_type": "text" + }, + "source": [ + "# K-Means Clustering" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_VS3FFSFLR3a", + "colab_type": "text" + }, + "source": [ + "# 1) Use the \"Breast Cancer Wisconsin (Diagnostic) Data Set\" from Kaggle to try and cluster types of cancer cells. \n", + "\n", + "Here's the original dataset for your reference:\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "899RK3bBn4OE", + "colab_type": "text" + }, + "source": [ + "## This is a supervised learning dataset\n", + "\n", + "(Because it has **labels** - The \"diagnosis\" column.)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ws5R9X6hLJQ2", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 261 + }, + "outputId": "7807afc5-449e-46d2-9f9b-2df323b823e3" + }, + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.decomposition import PCA # You don't necessarily have to use this\n", + "from sklearn.cluster import KMeans # You don't necessarily have to use this\n", + "from sklearn.preprocessing import StandardScaler # You don't necessarily have to use this\n", + "\n", + "df = pd.read_csv(\"https://raw.githubusercontent.com/ryanleeallred/datasets/master/Cancer_Cells.csv\")\n", + "print(df.shape)\n", + "df.head()" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "text": [ + "(569, 33)\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
iddiagnosisradius_meantexture_meanperimeter_meanarea_meansmoothness_meancompactness_meanconcavity_meanconcave points_meansymmetry_meanfractal_dimension_meanradius_setexture_seperimeter_searea_sesmoothness_secompactness_seconcavity_seconcave points_sesymmetry_sefractal_dimension_seradius_worsttexture_worstperimeter_worstarea_worstsmoothness_worstcompactness_worstconcavity_worstconcave points_worstsymmetry_worstfractal_dimension_worstUnnamed: 32
0842302M17.9910.38122.801001.00.118400.277600.30010.147100.24190.078711.09500.90538.589153.400.0063990.049040.053730.015870.030030.00619325.3817.33184.602019.00.16220.66560.71190.26540.46010.11890NaN
1842517M20.5717.77132.901326.00.084740.078640.08690.070170.18120.056670.54350.73393.39874.080.0052250.013080.018600.013400.013890.00353224.9923.41158.801956.00.12380.18660.24160.18600.27500.08902NaN
284300903M19.6921.25130.001203.00.109600.159900.19740.127900.20690.059990.74560.78694.58594.030.0061500.040060.038320.020580.022500.00457123.5725.53152.501709.00.14440.42450.45040.24300.36130.08758NaN
384348301M11.4220.3877.58386.10.142500.283900.24140.105200.25970.097440.49561.15603.44527.230.0091100.074580.056610.018670.059630.00920814.9126.5098.87567.70.20980.86630.68690.25750.66380.17300NaN
484358402M20.2914.34135.101297.00.100300.132800.19800.104300.18090.058830.75720.78135.43894.440.0114900.024610.056880.018850.017560.00511522.5416.67152.201575.00.13740.20500.40000.16250.23640.07678NaN
\n", + "
" + ], + "text/plain": [ + " id diagnosis ... fractal_dimension_worst Unnamed: 32\n", + "0 842302 M ... 0.11890 NaN\n", + "1 842517 M ... 0.08902 NaN\n", + "2 84300903 M ... 0.08758 NaN\n", + "3 84348301 M ... 0.17300 NaN\n", + "4 84358402 M ... 0.07678 NaN\n", + "\n", + "[5 rows x 33 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 3 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IHDDqaU-ove4", + "colab_type": "text" + }, + "source": [ + "## Now it's an unsupervised learning dataset\n", + "\n", + "(Because we've removed the diagnosis label) - Use this version." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "86MHoPJon_aC", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 243 + }, + "outputId": "dbeac02a-3798-431f-cf65-b597dd38e207" + }, + "source": [ + "df = df.drop('diagnosis', axis=1)\n", + "df.head()" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "execute_result", + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idradius_meantexture_meanperimeter_meanarea_meansmoothness_meancompactness_meanconcavity_meanconcave points_meansymmetry_meanfractal_dimension_meanradius_setexture_seperimeter_searea_sesmoothness_secompactness_seconcavity_seconcave points_sesymmetry_sefractal_dimension_seradius_worsttexture_worstperimeter_worstarea_worstsmoothness_worstcompactness_worstconcavity_worstconcave points_worstsymmetry_worstfractal_dimension_worstUnnamed: 32
084230217.9910.38122.801001.00.118400.277600.30010.147100.24190.078711.09500.90538.589153.400.0063990.049040.053730.015870.030030.00619325.3817.33184.602019.00.16220.66560.71190.26540.46010.11890NaN
184251720.5717.77132.901326.00.084740.078640.08690.070170.18120.056670.54350.73393.39874.080.0052250.013080.018600.013400.013890.00353224.9923.41158.801956.00.12380.18660.24160.18600.27500.08902NaN
28430090319.6921.25130.001203.00.109600.159900.19740.127900.20690.059990.74560.78694.58594.030.0061500.040060.038320.020580.022500.00457123.5725.53152.501709.00.14440.42450.45040.24300.36130.08758NaN
38434830111.4220.3877.58386.10.142500.283900.24140.105200.25970.097440.49561.15603.44527.230.0091100.074580.056610.018670.059630.00920814.9126.5098.87567.70.20980.86630.68690.25750.66380.17300NaN
48435840220.2914.34135.101297.00.100300.132800.19800.104300.18090.058830.75720.78135.43894.440.0114900.024610.056880.018850.017560.00511522.5416.67152.201575.00.13740.20500.40000.16250.23640.07678NaN
\n", + "
" + ], + "text/plain": [ + " id radius_mean ... fractal_dimension_worst Unnamed: 32\n", + "0 842302 17.99 ... 0.11890 NaN\n", + "1 842517 20.57 ... 0.08902 NaN\n", + "2 84300903 19.69 ... 0.08758 NaN\n", + "3 84348301 11.42 ... 0.17300 NaN\n", + "4 84358402 20.29 ... 0.07678 NaN\n", + "\n", + "[5 rows x 32 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "rskC80k3OKMA", + "colab_type": "text" + }, + "source": [ + "## Let's do it!\n", + "\n", + "- You might want to do some data exploration to see if you can find specific columns that will help you find distinct clusters of cells\n", + "- You might want to use the elbow method to decide on the number of clusters to use.\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "U92Y3jNKPpjJ", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + }, + "outputId": "7ee03d58-b877-4a98-ee95-7d45afd81e3f" + }, + "source": [ + "X, y = make_blobs(n_samples=100, centers=3, n_features=2)\n", + "df = pd.DataFrame(dict(x=X[:,0], y=X[:,1], label=y))\n", + "\n", + "colors = {0:'red', 1:'blue', 2:'green'}\n", + "fig, ax = plt.subplots()\n", + "grouped = df.groupby('label')\n", + "for key, group in grouped:\n", + " group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])\n", + "plt.show() " + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7ghqYSxrP_FE", + "colab_type": "text" + }, + "source": [ + "## Check you work: \n", + "\n", + "This is something that in a truly unsupervised learning situation **WOULD NOT BE POSSIBLE**. But for educational purposes go back and grab the true diagnosis column (label) from the original dataset. Take your cluster labels and compare them to the original diagnosis column. You can make scatterplots for each to see how they compare or you can calculate a percent accuracy score like: \n", + "\\begin{align}\n", + "\\frac{\\text{Num Correct Labels}}{\\text{Num Total Observations}}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OIG7-yGLP-eA", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# Your Code Here" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BedOTS0eJ9_K", + "colab_type": "text" + }, + "source": [ + "# 2) Perform PCA on your dataset first and *then* use k-means clustering. \n", + "\n", + "- You need to standardize your data before PCA.\n", + "- First try clustering just on PC1 and PC2 so that you can make a scatterplot of your clustering.\n", + "- Then use use a scree plot to decide how many principal components to include in your clustering, and use however many principal components you need in order to retain 90% of the variation of the original dataset\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "dW1AeAK8PNah", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + }, + "outputId": "994a28d3-c789-479b-b33f-0e9449da9461" + }, + "source": [ + "X, y = make_blobs(n_samples=100, centers=3, n_features=2)\n", + "df = pd.DataFrame(dict(x=X[:,0], y=X[:,1], label=y))\n", + "\n", + "colors = {0:'red', 1:'blue', 2:'green'}\n", + "fig, ax = plt.subplots()\n", + "grouped = df.groupby('label')\n", + "for key, group in grouped:\n", + " group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])\n", + "plt.show() " + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PkrfbzfBROpP", + "colab_type": "text" + }, + "source": [ + "## Check your work: \n", + "\n", + "- Compare your PC1, PC2 clustering scatterplot to the clustering scatterplots you made on the raw data\n", + "- Calculate accuracy scores for both the PC1,PC2 Principal component clustering and the 90% of explained variance clustering.\n", + "\n", + "How do your accuracy scores -when preprocessing the data with PCA- compare to the accuracy when simply clustering on the raw data?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wKBwVaGOOYsq", + "colab_type": "text" + }, + "source": [ + "# Stretch Goals:\n", + "\n", + "- Study for the Sprint Challenge\n", + "- Work on your Data Storytelling Project" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "9p2djjY5LNWd", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file