From c7bc09b8a5525e4887b95059696d80e44d3ea6d5 Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Wed, 5 Aug 2020 22:22:16 -0600 Subject: [PATCH 01/10] Created using Colaboratory --- ..._131_Vectors_and_Matrices_Assignment.ipynb | 974 ++++++++++++++++++ 1 file changed, 974 insertions(+) create mode 100644 Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb diff --git a/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb b/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb new file mode 100644 index 00000000..5e145a60 --- /dev/null +++ b/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb @@ -0,0 +1,974 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Ray_Arbizu_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": {} + }, + "source": [ + "import math\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ], + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "fdQlWxO_Bmtw", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# Vector Examples \n", + "roadking = [.4, .5]\n", + "goldwing = [.5, .4]\n", + "shadow = [.1, .3]" + ], + "execution_count": 16, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "DMZ_IukZDG9n", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "outputId": "b1812b1e-3834-4b1d-b024-671ceb3f320f" + }, + "source": [ + "# Examine their \"components\". These are not scalars.\n", + "print(roadking[0])\n", + "\n", + "for bike in [roadking, goldwing, shadow]:\n", + " print(bike[1])" + ], + "execution_count": 17, + "outputs": [ + { + "output_type": "stream", + "text": [ + "0.4\n", + "0.5\n", + "0.4\n", + "0.3\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "243xaWmlCL9b", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "885036cf-726c-4b78-de7a-ea70b764b732" + }, + "source": [ + "# plot a vector using matplotlib\n", + "fig, ax = plt.subplots()\n", + "ax.grid()\n", + "plt.xlim(-.2,.8)\n", + "plt.ylim(-.1,.6)\n", + "\n", + "plt.arrow(0, 0, \n", + " roadking[0], \n", + " roadking[1], \n", + " head_width=.03, \n", + " head_length=0.03,\n", + " linewidth=3,\n", + " color = 'red')\n", + "plt.show()" + ], + "execution_count": 18, + "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": 34 + }, + "outputId": "eed75c8f-bb87-4bab-e4be-dac3ab594747" + }, + "source": [ + "# add a third dimention to 'roadking'\n", + "roadking = [.5, .5, .5]\n", + "vector = np.array([[0,0,0,\n", + " roadking[0], roadking[1], roadking[2]]])\n", + "vector" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0. , 0. , 0. , 0.5, 0.5, 0.5]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 19 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "VcQgLQ_YEInx", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 119 + }, + "outputId": "0de4e474-31d4-4f0a-deff-0cc3c2767b9f" + }, + "source": [ + "# unzip that vector\n", + "X, Y, Z, U, V, W = zip(*vector)\n", + "for letter in [X, Y, Z, U, V, W]:\n", + " print(letter)" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "text": [ + "(0.0,)\n", + "(0.0,)\n", + "(0.0,)\n", + "(0.5,)\n", + "(0.5,)\n", + "(0.5,)\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cbU60UHrEIeb", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 248 + }, + "outputId": "b8c2e1b4-6b03-4212-ac64-308ea19968f7" + }, + "source": [ + "# display that in 3D\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "ax.quiver(X, Y, Z, U, V, W, length=1, color='blue',linewidth=5)\n", + "ax.set_xlim([0, 2])\n", + "ax.set_ylim([0, 2])\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": 21, + "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": 51 + }, + "outputId": "dd448807-c15b-4d83-ee48-c7f61ae87dce" + }, + "source": [ + "from math import e, pi\n", + "print(e)\n", + "print(pi)" + ], + "execution_count": 22, + "outputs": [ + { + "output_type": "stream", + "text": [ + "2.718281828459045\n", + "3.141592653589793\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1yd_gqbNHeHx", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "outputId": "7e27d1c6-c6c9-4bd2-8e99-801641a2f439" + }, + "source": [ + "ultra_classic = np.multiply(5, roadking)\n", + "goldwing_plus = np.multiply(e, goldwing)\n", + "shadow1300cc = np.multiply(pi, shadow)\n", + "victory = [e, pi]\n", + "print(ultra_classic)\n", + "print(goldwing_plus)\n", + "print(shadow1300cc)\n", + "print(victory)" + ], + "execution_count": 23, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[2.5 2.5 2.5]\n", + "[1.35914091 1.08731273]\n", + "[0.31415927 0.9424778 ]\n", + "[2.718281828459045, 3.141592653589793]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "3qpwDlzXkVf5", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 432 + }, + "outputId": "c7d611b8-e435-46ef-bc2c-30000186eb2b" + }, + "source": [ + "# Plotting scaled Vectors by 5, pi and e... also adding vector of pi and e\n", + "fig, ax = plt.subplots(figsize=(10, 7))\n", + "ax.grid()\n", + "plt.xlim(-.2,3)\n", + "plt.ylim(-.1,3.5)\n", + "\n", + "for bike, vector in [('blue',roadking), ('crimson',goldwing), ('darkblue',shadow), ('lightblue', victory)]:\n", + " plt.arrow(0, 0,\n", + " vector[0],\n", + " vector[1],\n", + " head_width=.05,\n", + " head_length=0.05,\n", + " linewidth=10,\n", + " color = bike)\n", + "\n", + "for nbike, vector in [('limegreen', ultra_classic), ('limegreen', goldwing_plus), ('limegreen', shadow1300cc), ('limegreen', victory)]:\n", + " plt.arrow(0,0, \n", + " vector[0],\n", + " vector[1],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=2,\n", + " color = nbike)\n", + "\n", + "plt.show()" + ], + "execution_count": 24, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlsAAAGfCAYAAABoVBdOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3gUVdsG8Hu276b3BAglNKkWsPsKiCAiIioKVhARxYaKvPbX9llRFMGGgiKCCNipYomKDcFCLyGUkEB6375zvj/AhSGzIQm72ZL7d11cZJ5zdvZkLggPszP3SEIIEBEREVFgaIK9ACIiIqJIxmaLiIiIKIDYbBEREREFEJstIiIiogBis0VEREQUQGy2iIiIiALouM2WJEkmSZLWSpL0jyRJmyVJelJlzlhJkoolSfr78K/xgVkuERERUXjRNWCOA8AFQogaSZL0ANZIkrRCCPHbMfM+FkLc6f8lEhEREYWv4zZb4lDqac3hTf3hX0xCJSIiImqAhpzZgiRJWgDrAXQC8LoQ4neVaVdKknQ+gB0A7hVC5KnsZwKACQBgNpv7ZGZmNnnh/iTLMjQaXr4WCDy2gcNjG1g8voHDYxs4PLaBs2PHjhIhREpTXis15nE9kiTFA/gMwF1CiE1H1ZMA1AghHJIk3QpglBDigvr21bdvX7Fu3bqmrNnvsrOz0b9//2AvIyLx2AYOj21g8fgGDo9t4PDYBo4kSeuFEH2b8tpGtb9CiAoA3wMYcky9VAjhOLz5LoA+TVkMERERUaRpyN2IKYfPaEGSJDOAQQC2HTMn46jN4QC2+nORREREROGqIddsZQCYe/i6LQ2ARUKIpZIkPQVgnRDiSwB3S5I0HIAbQBmAsYFaMBEREVE4acjdiBsAnKpS/99RXz8E4CH/Lo2IiIgo/PGWBSIiIqIAYrNFREREFEBstoiIiIgCiM0WERERUQCx2SIiIiIKIDZbRERERAHEZouIiIgogNhsEREREQUQmy0iIiKiAGKzRURERBRAbLaIiIiIAojNFhEREVEAsdkiIiIiCiA2W0REREQBxGaLiIiIKIDYbBEREREFEJstIiIiogBis0VEREQUQGy2iIiIiAKIzRYRERFRALHZIiIiopAjhIAsRLCX4Re6YC+AiIiISAiBKocbxTYniq0OVNjduLB9MjRaKdhLO2FstoiIiKjZCSFQ5XSjxOpEsdWJEpsDTs+RM1kd4i3QayPjAzg2W0RERBRwQghUO92HGiurE8U2J5we2ef8jvGWZlxdYLHZIiIiIr8TQqDG6UGx1YFi26EGy1FPc3W0ZLMBsUZ9gFfYfNhsERER0QkTQqDGdai5+vejwYY2V8fqmBA5Z7UANltERETUBEII1Lo8hz8WPHT2yu5uWnN1NJNOg4xokx9WGDrYbBEREdFxCSFgPdxc/XvHYGObK4ewYp9nM/bJG1Ejl+ES493QSQbFnKx4CzRS+N+BeDQ2W0RERKRKCIG8KhuKrIeaK1sTmqs8zxbskzdij2cDDsq7IHBkHzGuZFxgGOvdlgC0j4usjxABNltERETkgyRJSDQbUFjbuEZrp3st1rg+xgF5p6K5OlYbTTfldowJJp22yesNVZERYEFEREQBEW3Q4fRWCRjYPhkZ0cYGvWaH53cUyNvrbbTipFR00vZV1LISok5oraGKzRYREREdV5xRj7NbJ6J/2ySkWAz1zu2gPRlRiK93Th/dUGgk5VmsRFPkxD0cjc0WERERNVii2YD/ZCbhvDaJPud0152Pbrr/+BzXQo+T9YMUtdPS4yBF2IXx/+I1W0RERNQoLo+MNfvLVMdsohrTrNcoaj21A7Dd8wtccAAAeuj6wSLFeccNGgmZMebALTjI2GwRERFRg+VV2fDHgQrVsQ2ub/GV8xXvthY6TLYshF4yoUaMwy/ORfjTvQJ9dcMUr2sXZ4FWE5lntQA2W0RERNQAshD4encxrC5PnTG3cGGm7SbUiiNN2GDDrThdf6l3O1pKwGDjrThbfxViNMqPILMi6DmIathsERERUb3KbE5k7ytVHdvn2YR59gcVtUnmeYjWJKjOP7bRSo8yIsoQ2e1IZH93RERE1GRCCPxeUIGCGrvKmIyPHU9hl2edt3aqbgguNtzRqAvdO0Zo3MPR2GwRERFRHVaXGytzi1XHyuQCvGmboKjdYp6JVE171fnnZyahoMaO3IpayOJIPVqvRepxYiQiAZstIiIiUthaUo2tpTWqY9875+IX12LvditNV4wxvVgnMwsAks0G/CczEZIkIdliQKeEKGwrrcbeShsEgKz4qIiNezgamy0iIiICcCjS4aucQtUxm6jBNOtoRW2U8XF00p2uOv+8NolIjVImzlv0WpyWHo/OidHYXlqDtnGRG/dwNDZbREREhP1VNqz1Eemw0fUdvnRO825L0GCKZRH0kqnOXJ1GwiUd0+qNcogx6NA3o/6E+UjCZouIiKgFk4XA6t3FqFWJdPAIF2babkaNOBJgOshwC87QX6a6r1PSYpEVH/kXvDcWmy0iIqIWqr5IhzzPZnxgf0BRqy/S4ZKOqTDq6l63RQ1otiRJMgH4EYDx8PwlQojHj5ljBPABgD4ASgGMEkLs8ftqiYiI6IQJIbD2QAXyq9UjHRY5nkaO5w9v7RTdYAw13KV6MXvHeAt6p8a2iAvdm6ohZ7YcAC4QQtRIkqQHsEaSpBVCiN+OmnMzgHIhRCdJkkYDeAHAqACsl4iIiE6A1eXBytwi1bFy+SDesI1X1MabXkOaNkt1/oXtkxFr1Pt9jZHmuM2WEEIA+Pf+T/3hX+KYaZcBeOLw10sAzJQkSTr8WiIiIgoB20qrsaVEPdIh2zkPP7s+9m5naDpjrOml40Y60PFJDemHJEnSAlgPoBOA14UQDxwzvgnAECHE/sPbuwCcKYQoOWbeBAATACAtLa3PwoUL/fJNnKiamhpER0cHexkRicc2cHhsA4vHN3B4bAPH17EVACodLtXXyEJGoZyrqCVoWsEkqT+vMFqvgy6CHxrty4ABA9YLIfo25bUNukBeCOEBcIokSfEAPpMkqacQYlNj30wIMQvALADo27ev6N+/f2N3ERDZ2dkIlbVEGh7bwOGxDSwe38DhsQ0ctWO7v9qGtQXqkQ6b3N/jC8fLitoUyxIYJBPkY+ZqJQnDOtUf6UDqGnU3ohCiQpKk7wEMAXB0s5UPIBPAfkmSdADicOhCeSIiIgoCWQh8s7sYNT4iHV633YLqoz6AutAwHmfqR6ju65TUWGS1gGcYBkpD7kZMAeA63GiZAQzCoQvgj/YlgDEAfgUwEsB3vF6LiIgoOOqPdNiCD+z/VdTuNs9FjCZJdf7QjqkwMdLhhDTkzFYGgLmHr9vSAFgkhFgqSdJTANYJIb4EMBvAPEmScgCUARjte3dEREQUKGsLyrFfNdJBYInjGezwHAkTOFk3CJcY7la90D0r3oKTGengFw25G3EDgFNV6v876ms7gKv8uzQiIiJqKKvLgwqHC2UqjVaFfBCvHxPpcLPpNaQz0qFZMEGeiIgozG0vrcHmkmpoVMZ+cM7HGtdH3u00TUeMM01TjXRIMutxfmYSz2b5GZstIiKiMOWSZXy1s1B1zC5q8LJVeVXPVcbH0EV3pur8c9skIi3K6Pc1EpstIiKisJRfbcPvPiIdNrt/wOeOqYrav5EOx9JIwKWd0hnpEEBstoiIiMKILAS+3VOCaqe7zpgQAjOt41ApjjyOZ6BhHM7SX6G6r5NTY9GRkQ4Bx2aLiIgoTJTbXfh+b4nq2H7PVujlXYpG6y7z+4jVJKvOZ6RD82GzRUREFOKEEFh3oAJ5PiIdPnE8i+2eXzEeh+447K0biGGGe1QvdO8Qb8EpjHRoVmy2iIiIQpjV5cHK3CLVsQq5EK/bblbUbjZNR7q2o+r8ge2TEcdIh2bHZouIiChE/RvpoOZH5wL85Frg3U7VtEe6phOESqOVaNKjX1tGOgQLmy0iIqIQ45ZlfOkz0qEWL1tHKWojjY+gq+5sSNImHPusvHNaJyA9uu5diNR82GwRERGFkPxqO34vKFcdU490WAyDZK4zVwJwaed06BjpEHRstoiIiEKALAS+21OCKpVIB49w4y3bbagQB721C/RjcbZhpOq+GOkQWthsERERBVl9kQ75nu143z5ZUWOkQ3hhs0VERBQkQgisP1iJfVU21bFPHc9jm+dnb62XbgAuNdyneqF7+zgLqox6NlohiM0WERFRENhcHqzwEelQKRdhpm2cojbO9CoytJ1U5w9sl4w4kx7Z2/y+TPIDNltERETNbEdZDTYVq0c6rHEuxA+uD73bKVJbjDfPgEaqe8YqwaRHf0Y6hDw2W0RERM2kvkgHh7DiJevVitqVxodxku4c1flnt05ABiMdwgKbLSIiomZQUG3Hbz4iHba61+BTx/OK2v2WRTBKFtX5wzunQafR+H2NFBhstoiIiAJIFgLf7y1BpUM90mGW7XaUiQJvbYB+DM4xXKW6r94pseiUyEiHcMNmi4iIKEAq7C5816hIh/cQq0lRnX9xx1SYeadhWGKzRURE5GfHi3T43PEitnh+8tZ6avtjuHGy6oXu7eLMOC0tjhfBhzE2W0RERH5kc3uwYlfDIx1uMr2CVtrOqvMvaJeMeJPe72uk5sVmi4iIyE92ltVgo49Ih5+di5Dt+sC7nSxl4hbzTNVIh3ijHgPaMdIhUrDZIiIiOkGNj3R4CCfpzlWdz0iHyMNmi4iI6AQcqLHj13xGOpBvbLaIiIiaQBYC2XtLUOEj0uEd250oFfu9tf76G3Gu4eo6cwGgV0oMOidGB2ytFFxstoiIiBqpvkiHAs9OvGe/V1G70zwHcZpU1fmMdIh8bLaIiIgaSAiBPwsrsbdSPdLhC8dL2Oz5wVvrrj0fI4xT1CMdYs04LZ2RDi0Bmy0iIqIGqC/SoUouxgzbTYraWNPLaK3tqjqfkQ4tC5stIiKi48gpq8WG4irVsV+ci/G9a653O1FqhQnmN6CV6v4TG2fUYUC7ZGh4NqtFYbNFRETkQ2MjHa4wPohuuvNU55/VKgGtYhjp0BKx2SIiIlJRX6TDNvcv+MTxrKLGSAfyhc0WERHRUYQQyN5XinK7q86YLDx4x3YXSsQ+b62f/nqcZxituq+eKTHowkiHFo/NFhER0WGVdhe+9RHpcMCTgzn2exS1eiMdslJh1jPSgdhsERERQQiBvworscdHpMOXjmnY5PneW+umPQ+XGx9QjW1oG2tGH0Y60FHYbBERUYtmd3uw3GekQwlm2MYqavVFOgxol4wERjrQMdhsERFRi7WrvBb/FKlHOvzq/ATfud7zbidIGbjV/KZqpEOsQYcL2jPSgdSx2SIiohbHLQt8tfMghMqYU9gw1XqVona58b/orjtfdV+MdKDjYbNFREQtysEaO37xEemw3f0rljieUdQmWz6GSYpSnc9IB2oINltERNQiHC/SYbZtEorEHm/tP/prcb7hWtV99UyOQZckRjpQw7DZIiKiiFfpcOHbPeqRDgc9uzDbPklRu8M8G/GaNNX5Q7JSYWGkAzUCmy0iIopYQgj8XViF3ZVW1bGlzlexwf2tt9ZVew6uND6kGtuQGWtGX0Y6UBOw2SIioojU2EiHMaapaKPtpjqfkQ50IthsERFRxKkv0uE316f41jnHux0npWGi+S1opbrNVIxBh4FhGOlg9Vix3bYdW2q3YIt1C25MuxFdLerZYBR4bLaIiChieGSBr3IOQlbJdHAKO6ZaRypqI4xT0EPXT3VfZ7aKR+sYcyCW6Vc22YYd1h3YYt0C4RQYuWUk9tj3QBwVbLHNug2Luy+GRuKdk8Fw3GZLkqRMAB8ASAMgAMwSQkw/Zk5/AF8A2H249KkQ4in/LpWIiMi3g7V2/LJfPdJhh/t3LHY8rahNtiyESVK/o/DSzmnQh0GkQ3ZFNqbkToEMGQAw3j0eu+2768zrEdWDjVYQNeTMlhvAZCHEn5IkxQBYL0nSaiHElmPm/SSEGOb/JRIREfkmhMAP+0pR5iPSYY79PhTKu7y18/TXoJ/hOtV99UiOQdcwinTYUrvF22j5YpAMuL3V7c20IlJz3GZLCHEAwIHDX1dLkrQVQGsAxzZbREREzarK4cI3PiMdcjHbfreidof5XcRr0lXnh2Okw+jU0Sh0FWJp2VKfc65NvRbpBvXvmZqHJITawwp8TJak9gB+BNBTCFF1VL0/gE8A7AdQAOB+IcRmlddPADABANLS0vosXLjwBJbuPzU1NYiODp//yYQTHtvA4bENLB7fwPHXsbW5PXB4VM7qCKBSFMF65J8pmKQoJEgZgMp17gaNJuyarH/ZZBv22Pd4t5PdySjRHWk+tZIWncydoAE/QjxRAwYMWC+E6NuU1za42ZIkKRrADwCeEUJ8esxYLABZCFEjSdJQANOFEJ3r21/fvn3FunXrmrJmv8vOzkb//v2DvYyIxGMbODy2gcXjGzgnemzri3Solkvxmm2MolZfpEP/tklINBuavJZgqfXU4rLNl6HcfeQatQRdAiYWTcSrya/CKh/KFbu/zf24JvWaYC0zokiS1ORmq0GtriRJehw6czX/2EYLAIQQVUKImsNfLweglyQpuSkLIiIi8iW3vNZno/W763NFoxUrpeBBy2eqjVa0QYsRXdLDrtESQuCtgrdw/j/nKxqtd7u8i296f4MkXRI+6f4JBsUPQqYxEyOTR9azN2ouDbkbUQIwG8BWIcQ0H3PSARQKIYQkSWfgUBNX6teVEhFRi+WRBZbmHISngZEOlxkno6dugOq+wiXS4VhbrVtx/bbrFbVrUq7B5DaTFan2qYZUPJ/1PKrcVdBrGMQaChpyN+K5AG4AsFGSpL8P1x4G0BYAhBBvARgJYKIkSW4ANgCjRWMuBiMiIvKhsNaBn/eXqY7tdK/FIocyaajeSIdOadBrw+v6Jbtsx+ito5HnyPPWdJIOq3utRqwu1ufr6huj5tWQuxHXQPWSQsWcmQBm+mtRREREQgj8mFeKUpt6pMN79sk4KOd4a+fqR6G/4QbVfXVPjsZJSTEBW2ugzCuch1fzX1XUZnaaibNjzw7SiqgpmCBPREQhp75Ih0J5N9613aWo3W5+BwmaDNX54RjpkGvLxVVbr1LUhicNx2NtH2M4aRhis0VERCFDCIENRVXYVWFVHVvunIG/3V97a520p+Nq42OQVBqQ1jEmnJERr7ieKdS5ZBfG7RiHLVZllOXXvb5Gkj4pSKuiE8Vmi4iIQoLD7cEyH3ca1sjlmG5TfkR4o+kFZGp7qM4Px0iHT0s+xTP7nlHUXsp6CQPi1S/0p/DBZouIiIIut6IWfxdWqY6tdX2B1c53vNsxUhLuML8LrVT3TrsovRaDOqRAE0Zns/Y79uOyzZcpahfEX4DnOzwPrRReH3+SOjZbREQUNB5ZYFlOIdwqN7C7hB1TrVdDHPXsv+GG+9BLf4Hqvs7IiEeb2PCJdHALN+7OuRu/V/+uqC/vuRxphrQgrYoCgc0WEREFRVGtA2t8RDrkuP/Ax44nFbX7LAthjpBIhxVlK/DonkcVtafbPY2hSUODtCIKJDZbRETU7H7cV4oSm7NOXRYezLVPQYG8w1s7R38VBhjG1JkLAN2SotEtOXwiHQqdhRi6SdlQnR5zOmZ0mgG9yseiFBnYbBERUbOpcrhQ4XBBVmm0iuQ9eMd2p6I20TwLiZpWqvsakpUCiz48/hnzCA8e2v0Qvq34VlH/vPvnyDRlBmlV1FzC408pERGFvX+KKrGr3FrnobxCCKxwvo6/3Cu9tY7avhhl/J9qpEOraBPObBU+kQ7ZFdmYnDtZUXso8yGMTOFzC1sKNltERBRQDreMZbsKVcfUIh1uMD2PttqeqvPDKdKhzFWGQRsHKWrdLN0wp8scGDTh8T2Qf7DZIiKigNldYcVfhZWqY3+4vsLXzre921FSAu40z4EuzCMdZCHj//b9H74o/UJRX9RtETqaOwZpVRRMbLaIiMjvPLLA8l2FcMl1Ix2EEHiudgRkuL21Sw33ord+oOq+Ts+IR2aYRDr8XvU7bs+5XVGb1HoSbky7MUgrolDAZouIiPyqvkiHXe71iJbzFI3WfZaPYJbU7ygMl0iHanc1Bm8cDKc4cuF/G2MbLOy2EGZNeDSKFDhstoiIyC+EEFizvwzFVvVIhw/sDyBf3obxGA8AOFs/EhcYxqru66SkaHQPg0gHIQReyX8F84vmK+rzus5D96juQVoVhRo2W0REdMKqnW6s3l2sOlYs78Us2x2K2kTz20jUtFadf1FWCqLCINLhn5p/MG7HOEXt5vSbMTFjYtjcKUnNI/T/NBMRUUjbUFSFnPLaOnUhBFY638Sf7uXeWpb2NGRoOkFWabRaRRtxZquEkG9UrB4rLtt8GcrcRz4qjdPG4cueXyJaq55wTy0bmy0iImoSh0fGshwfkQ6iHNOtykiH603PoZ22FyBtqjO/X9skJIV4pIMQArMOzMKsg7MU9Xe7vItTo08N0qooHLDZIiKiRttTYcWfPiId1rmWYZXzTe+2BXG4y/K+aqSDRafF4KzQj3TYZt2G67Zdp6iNThmN+9vcH/Jn4ij42GwREVGDeWSBFbsK4VSJdHAJB6ZZr4UbDm9tmGESTtYPqjMXCI9IB7tsx7Vbr8Vex15vTQstVvdejThdXBBXRuGEzRYRETVIsdWBn/LUIx1y3X/iI8f/FLV7LQtgkWJV5w/rlAZDiEc6fFj4IV7Jf0VRm9FpBs6JPSdIK6JwxWaLiIjqJYTAz/vLUOQj0uFD+0PIk7d4a2fpr8BAw7g6c4FDkQ5FB/Qh3Wjttu3GyK3K5xYOSxyGx9s9Do3KsxqJjofNFhER+VR/pMM+zLIp09JvM7+NJF+RDh1SEGXQocjvq/QPl+zCzTtuxmbrZkX9615fI0mfFKRVUSRgs0VERKo2FlVhp49Ih1XOt7Devcxb66A5FdeYnoSkcuYnI9qIs0I80uHTkk/xzL5nFLWpHabigoQLgrQiiiRstoiISKG+SIdaUYFXrdcrateZnkV7bW/V+f0yk5BkCd1Ih3xHPoZvHq6o9Y/rjxezXoRW0gZpVRRp2GwREZHXnkor/jyoHumw3rUcK51veLfNiMHdlrnQSXWbKbNOg4uyUkM20sEt3JiUMwm/Vf+mqC/ruQzphvQgrYoiFZstIiKCRxZYmVsEh0euM+YSDrxivQ4u2L21Swx34xT9YNV99U2PQ9s4S8DWeqJWlq3EI3seUdSebPckhiUNC9KKKNKx2SIiauHqjXTw/IWP7I8pavda5sMiqWdMhXKkQ5GzCBdvulhR6xPdB693fh16lcBVIn9hs0VE1EIJIfBLfjkKax11xmThwXz7I9gnH3m0zhm6yzDIeIvqvromRqFHinqmVrB5hAcP734Y31R8o6h/3v1zZJoyg7QqaknYbBERtUA1Tje+9hHpUCLn4W3bREXtNvNbSNK0UZ0/uEMKog2h+c/JDxU/4L7c+xS1BzIfwNUpVwdpRdQShebfDiIiCphNxVXYUVY30gEAvnbMwh/uL73b7TW9ca3p/1QjHdKjjDi7dWhGOpS7ynHhxgsVta7mrni/6/swaEL37kiKTGy2iIhaCKdHxlKfkQ6VeNWqfNDydaZn0F57sur88zOTkByCkQ6ykPHMvmfweennivrH3T5GJ3OnIK2KWjo2W0RELcDeSivW+4h0+NO1EiucM73bRkThHss81UgHk1aDIR1DM9JhbdVaTMxRfvx5V6u7MDZ9bHAWRHQYmy0ioghWX6SDWzjxqvV6OGD11oYa7sSp+iGq++qTHod2IRjpUO2uxkUbL4JDHLnQv7WhNT7u/jHMGnMQV0Z0CJstIqIIVWJ14se8UtWx3Z6/scD+qKJ2j2U+osIo0kEIgVfzX8WHRR8q6vO6zkP3qO5BWhVRXWy2iIgiTH2RDkLImG9/FHvlDd7a6brhGGycoLqvLolR6BmCkQ4bajbgph03KWo3p9+MiRkTQ/KCfWrZ2GwREUWQxkY63Gp+E8ka9aypUIx0sHqsGLF5BErdR87YxWpj8VXPrxCtjQ7iyoh8C62/RURE1GT1RTqsdryDte4vvNttNT1xvelZ1UiHtCgjzgmxSAchBN45+A7ePvC2ov5O53dwWsxpQVoVUcOw2SIiCnP1RTpYRSVeOSbS4RrT08jSnqo6//zMRCRbjH5f44nYbt2Oa7ddq6iNShmFKW2mhFRDSOQLmy0iojC2r9KKdT4iHf5yrcJy5wzvtgFm3GuZrxrpYNRqMCQrFVpN6DQvdtmO67Zehz2OPd6aBhp80/sbxOnUL+QnCkVstoiIwpAsDkU62N3qkQ7TrTfCjhpvbYjhdvTRD1XdVyhGOswvnI9p+dMUtRkdZ+CcuHOCtCKipmOzRUQUZuqLdNjj2YD59ocVtXCKdNht342RW0YqapckXoIn2j0Bjcr1ZUThgM0WEVGYEELg1/xyHPQR6fCR/X/YLf/trfXVDcNgw62q1zV1TohCr9TQiXRwyS7csvMWbKzdqKiv6rUKyfrkIK2KyD/YbBERhYFapxurfEQ6lMr5eMt2q6I2wfwGUjRtVeeHWqTDZyWf4f/2/Z+i9mKHFzEwYWCQVkTkX6Hzt42IiFRtLqnG9tIa1bFvnXPwm+tT73ampjuuNz0HjaStMzfVYsC5bRJD5g6+fEc+hm8erqj1i+uHqVlToVVZP1G4Om6zJUlSJoAPAKQBEABmCSGmHzNHAjAdwFAAVgBjhRB/+n+5REQtR/2RDlV4xaqMQ7jG+BSydOqZU//JTERKCEU63JlzJ36t+lVRW9pzKTIMGUFaEVHgNOTMlhvAZCHEn5IkxQBYL0nSaiHElqPmXAyg8+FfZwJ48/DvRETUBPuqbFh3oEJ17B/Xaix1Hvk/rw5G3GdZAL1Ut5kyaDW4OIQiHVaVrUKuNVfRaD3Z7kkMSxoWxFURBdZxmy0hxAEABw5/XS1J0lYArQEc3WxdBuADIYQA8JskSfGSJGUcfi0RETWQLARW5RbBphrp4MJr1jGwocpbu8gwEX31l6ju67T0OLQPkUiHYmcxhmwaAgAYj/EAgNOiT8Mbnd+AXtIHc2lEAR+g7pkAACAASURBVCcd6o8aOFmS2gP4EUBPIUTVUfWlAJ4XQqw5vP0tgAeEEOuOef0EABMAIC0trc/ChQtPdP1+UVNTg+hoPlMrEHhsA4fHNrCCcXw9QqDa6VYdcwobSuV8RS1N00H12iwAiDPqERrnsoB8Zz6q3EcaxGR3MuJi4mBQCVelE8OfC4EzYMCA9UKIvk15bYMvkJckKRrAJwDuObrRagwhxCwAswCgb9++on///k3Zjd9lZ2cjVNYSaXhsA4fHNrCa8/gKIfBbQTkO1KhHOix0PI5cz1/eWh/dJbjIcBsgSTj2/FcoRTr8WPkj7t11r6L2QOYDSNmcwj+7AcKfC6GpQc2WJEl6HGq05gshPlWZkg/g6MfGtzlcIyKietQX6VAm5+PNOpEOryNF0051/qAOKYgJgUiHclc5Ltx4oaLWxdwFc7vOhUFjQDayg7MwoiBpyN2IEoDZALYKIab5mPYlgDslSVqIQxfGV/J6LSKi+m0pqcY2H5EO3znfx6+uJd7tNppuuMH0fEhHOggh8Gzes/i0RPl/8oXdFqKzuXOQVkUUfA35L9C5AG4AsFGSpH+jiR8G0BYAhBBvAViOQ7EPOTgU/XCT/5dKRBQZXB4ZX/mIdLCJakyzXqOojTY+iY66Pqrzz2uTiNSo4Ec6rK1ei4k7Jypqd7a6Ezel858DoobcjbgGqP86y8N3Id7hr0UREUWqvCob/vAZ6fANljpf9W5rocNky0LoJVOduXqNhKEd04Ie6VDtrsaQTUNgl+3eWoYhA4u7L4ZZYw7iyohCR/A/3CciagFkIfD17mJYXZ46Y27hwkzbTagVR5qwwYZbcbr+UtV9nZoWhw7xwY10EEJgev50zCuap6jP7ToXPaN6BmlVRKGJzRYRUYCV2pz4YV+p6tg+zybMsz+oqE2yzEO0lKA6/5KOaTDqNH5fY2NsrN2IsdvHKmo3pd2EO1rdEfTrxohCEZstIqIAEULg94IKFNTYVcZkfOx4Crs8R+IIT9NdjCGG21Ublk4JUegd5EgHm8eGy7dcjmLXkbsno7XRWNZzGaK1zHYi8oXNFhFRANS63FiV6yvSoQBv2iYoareYZyJV0151/qD2KYgxBu/HtRAC7x58F28deEtRn9V5FvrEqF+4T0RHsNkiIvKzrSXV2Ooj0uF751z84lrs3W6l6YoxphdVIx1SLAacF+RIhx3WHbhmm/LuyKuSr8IDmQ/wI0OiBmKzRUTkJ/VHOtRgmnW0ojbK+Dg66U5XnR/sSAeH7MD1265Hrj1XUf+297eI18UHaVVE4YnNFhGRH+yvsmGtj0iHja7v8KXzSCa0BA2mWBapRjroNBIuCXKkw4KiBXh5/8uK2vSO03Fe3HlBWhFReGOzRUR0AmQhsHp3MWpVIh08woWZtptRI8q8tcGGCThdP1x1X8GOdNhj34Mrt1ypqA1NHIon2z0JjRTcOyCJwhmbLSKiJiqzOZHtI9Ihz7MZH9gfUNQmmechWuMr0iEVRl3d67aag0t24dadt+Kf2n8U9VW9ViFZnxyUNRFFEjZbRESNJITA2gMVyK9Wj3RY5HgaOZ4/vLVTdBdhqOFO1QvKO8Zb0Ds1NmgXm39R8gWe2veUovZChxdwYcKFPl5BRI3FZouIqBGsLjdW+oh0KJcP4A3bLYraePMMpGk6qM6/sH0yYo16v6+xIQocBbh0szKh/vy48/FS1kvQqtwZSURNx2aLiKiBtpVWY0uJeqRDtnMefnZ97N3O0HTGWNNLqpEOyWYD/pMZnEgHt3Djvl334eeqnxX1pT2WIsOY0ezrIWoJ2GwRER1HfZEOdlGDl4+JdLja+Dg6+4h0OLdNItKCFOnwdfnXeGj3Q4ra4+0ex/Ak9Qv2icg/2GwREdVjf7UNawt8RDq4v8eXDmVEwhTLEhhUIh20koRhnYIT6VDsLMaQTUMUtVOjT8Wbnd+EXgrOx5hELQmbLSIiH77OLUKNj0iH1223oFqUeGsXGsbjTP0I1f2ckhqLrISogK3TF1nIeHTPo1hVvkpR/7T7p2hnatfs6yFqqdhsEREdo8zmRIXDBVml0crzbMEH9v8qanebP0CMJlF1X0M7psIUhEiHnyp/wj277lHUprSZgtGpo328gogChc0WEdFhQgj8caAC+6vtODbCUwiBJY5nsMPzm7d2sm4QLjHcrXqhe1a8BScHIdKh3F2OCzcoYxs6mztjbte5MGqC9/gfopaMzRYREQCry4OVuUWqY+XyQbxhG6+o3Wx6DenaLNX5wYh0EELgubzn8EnJJ4r6wpMWorOlc7OuhYiU2GwRUYu3rbQGW0qqVcd+cM7HGtdH3u00TUeMM01TjXRIMutxfmZSs5/N+qP6D9y28zZF7Y5Wd2Bc+rhmXQcRqWOzRUQtlkuW8dVO9UgHWch4pnaYonaV8TF00Z2pOj8YkQ7VnmoM3TgUVtnqraUb0rGk2xKYteZmXQsR+cZmi4hapPxqG373EemwyZ2NFFk55ivSQSMBl3ZKb9ZIByEEZhTMwNzCuYr6+13fR6+oXs22DiJqGDZbRNSiyELg2z0lqHa664x5hAtv2m5FpSjCeBy6RmugYRzO0l+huq+TU2PRsZkjHTbWbsTY7WMVtTFpY3BXq7uC9nxFIqofmy0iajHK7U58v7dUdWy/Zyvm2qcoaneb5yJGk6Q6v7kjHWweG67cciUKXUc+9ozWRmNpz6WI0cY02zqIqPHYbBFRxBNCYN2BCuRV21XHPnE8i+2eX7213rqByNB0gqzSaHWIt+CUZo50mH1gNt448Iai9nbnt9E3pm+zrYGImo7NFhFFtPoiHSrkQrxuu1lRu9k0HenajoC0qc78ge2TEdeMkQ47rTsxepsyhHRk8kg8mPkgPzIkCiNstogoYm0vrcFmH5EOPzoX4CfXAu92qqY9bjZNV410SDTp0a9t80U6OGQHbth2A3bZdynq3/T+Bgm6hGZZAxH5D5stIoo49UU62EUtXraOUtRGGh9BV93ZqvPPaZ2A9Oi6dyEGysKihZi6f6qiNr3jdJwXd16zrYGI/IvNFhFFlPxqO34vKFcd2+z+AZ87lI3MFMtiGCT1TKrhndOha6ZIh732vbhii/KuxyEJQ/B0+6ehkY59eBARhRM2W0QUEWQh8N2eElSpRjq48ZbtNlSIg97aBfqbcLbhStV9nZwai7wD+mZptFzChVt33Ip/av9R1Ff2WokUfUrA35+IAo/NFhGFvXK7C9/vLVEdy/dsw/v2+xW1u8zvI1aTrDr/30iHPL+vsq4vS7/Ek3ufVNSe7/A8BiUMaoZ3J6LmwmaLiMKWEALrD1ZiX5VNdexTx/PY5vnZW+ulG4BLDfepXujeIc6CU9KaJ9LhgOMAhm1WPgro3NhzMa3jNOgk/lgmijT8W01EYcnm8mCFj0iHSrkIM23KhzCPM72KDG0n1fkD2yUjzhT4SAe3cGPyrslYU7VGUf+qx1doZWwV8PcnouBgs0VEYWdHWQ02FatHOvzk/Ag/uuZ7t1OkthhvnqEa6ZBg0qN/M0U6rC5fjQd3P6ioPd7ucQxPGh7w9yai4GKzRURhwy3L+NJHpINDWPGS9WpF7UrjwzhJd47q/OaKdCh2FWPIxiGK2slRJ+Ptzm9Dr2m+gFQiCh42W0QUFgqq7fjNR6TDVvcafOp4XlG737IIRsmiOr85Ih1kIeOxPY9hZflKRf2T7p+gval9QN+biEILmy0iCmmyEPh+bwkqHeqRDrNst6NMFHhrA/RjcI7hKtV99U6NRaeEqICt9V9rKtdg0q5Jitr9be7HNanXBPy9iSj0sNkiopBVYXfhO5+RDtvxvn2yolZfpMPFHVNh1tW9bsufKtwVGLhhoKLW0dQR806aB6PGGND3JqLQxWaLiELO8SIdPne8iC2en7y1ntr+GG6crHqhe/s4M05NiwvoRfBCCDyf9zyWlCxR1D866SN0sXQJ2PsSUXhgs0VEIaWxkQ43mV5BK21n1fkXtEtGfIAjHdZXr8eEnRMUtdszbse49HHN9uBqIgptbLaIKGTsLKvBRh+RDj87FyHb9YF3O1nKxC3mmaqRDvEmPQYEONKh2lONSzZeglq51ltL06fhk+6fwKxVf9YiEbVMbLaIKOgaH+nwEE7Snas6/+zWCcgIYKSDEAIzCmZgbuFcRf39ru+jV1SvgL0vEYUvNltEFFQHauz4Nd9fkQ5p0Gk0fl/jvzbVbsKY7WMUtRtTb8Tdre/mR4ZE5BObLSIKiuNFOrxjuxOlYr+31l9/I841XF1nLgD0SolB58TogK3V5rFh5NaROOg86K1FaaKwrNcyxGhjAva+RBQZ2GwRUbOrL9KhwLMD79nvU9TuNM9BnCZVdX6gIx3mHJyD1wteV9Te6vwWTo85PWDvSUSR5bjNliRJcwAMA1AkhOipMt4fwBcAdh8ufSqEeMqfiySiyCCEwJ+FldhbqR7p8IXjJWz2/OCtddeejxHGKaof0bWLNeO09MBFOjiEA33+7KOoXZl8JR7KfIgfGRJRozTkzNb7AGYC+KCeOT8JIYb5ZUVEFJFsbg9W7FKPdKiSizHDdpOiNtb0Mlpru6rOD2Skg0N2YMz2Mehn6wfEHal/0/sbJOgSAvKeRBTZjttsCSF+lCSpfeCXQkSRKqesFhuKq1THfnEuxveuI3f2JUqtMcH8OrRS3R9PcUYdBrRLhiZAZ5Y+LvoYL+5/EQDQD/0AAK92fBX/iftPQN6PiFoGSQhx/EmHmq2l9XyM+AmA/QAKANwvhNjsYz8TAEwAgLS0tD4LFy5s6rr9qqamBtHRgbu4tiXjsQ2ccDm2FQ6Xal0WMgrlXEUtQZMOk6T+PUXpddAH6OHRTuHELtsuRS3NnYbE2MSAvF9LFy5/dsMRj23gDBgwYL0Qom9TXuuPZisWgCyEqJEkaSiA6UII9Tjno/Tt21esW7eu8SsOgOzsbPTv3z/Yy4hIPLaBE+rHtr5Ih23uX/CJ41lFLRiRDi7hwsSdE/FXzV+K+sqeK7H5l80hfXzDWaj/2Q1nPLaBI0lSk5utE74bUQhRddTXyyVJekOSpGQhhPqtRkQU0YQQ+H5fKSrsdc9oycKDd2x3oUTs89b66a/HeYbRqvvqmRKDLgGKdPiq9Cs8sfcJRe259s9hcOLggLwfEbVcJ9xsSZKUDqBQCCEkSToDgAZA6QmvjIjCTqXdhW99RDoc8ORgjv0eRa3eSIesVJj1/o90OOA4gGGblffznBt7LqZ1nAadynViREQnqiHRDx8B6A8gWZKk/QAeB6AHACHEWwBGApgoSZIbgA3AaNGQzyaJKGIIIfBXYSX2+Ih0+NIxDZs833tr3bTn4XLjA6oRCm1jzegTgEgHt3BjSu4U/Fj5o6L+VY+v0MrYyq/vRUR0tIbcjXjNccZn4lA0BBG1QHa3B8t9RjqUYIZtrKJWX6TDgHbJSAhApMM35d/ggd0PKGqPtX0MI5JH+P29iIiOxXPmRNRkOeW12FCkHunwq/MTfOd6z7udIGXgVvObzRrpUOIqwUUbL1LUTo46GW93fht6TWByuoiIjsVmi4gazS0LfLXzINSuF3AKG6Zar1LULjf+F91156vu66xWCWgVY/Lr+mQh4/G9j2N52XJFfUn3Jehg6uDX9yIiOh42W0TUKAdr7PjFR6TDdvevWOJ4RlGbbPkYJilKdX4gIh1+rvwZd++6W7mGNpNxbeq1fn0fIqKGYrNFRA0ihED2vlKU+4h0mG2bhCKxx1s7X38d/mNQv+SzZ3IMuiT5N9Khwl2BgRsGKmpZpix8eNKHMGqMfn0vIqLGYLNFRMdV6XDh2z0Nj3S4wzwb8Zo01flDslJh8WOkgxACL+S9gMUlixX1BSctQFeL+oX4RETNic0WEfkkhMDfhVXYXWlVHfvK+Qo2ur/z1rpqz8GVxodUYxsyY83o6+dIh/XV6zFh5wRF7baM2zA+fbzfoyOIiJqKzRYRqWpspMMY01S00XZTne/vSIcaTw2GbRqGak+1t5aqT8Un3T+BRav+yB8iomBhs0VEdewqr8U/PiIdfnN9im+dc7zb8VIabjO/rRrpEGvQ4YL2/ot0EELg9YLX8V7he4r6e13eQ+/o3n55DyIif2OzRUReHlngq5yDkFUyHZzCjqnWkYraCOMU9ND1U93Xma3i0TrG7Le1ba7djBu336io3ZB6Aya1nsSPDIkopLHZIiIAwMFaO37Zrx7psMP9OxY7nlbUJlsWwiSp31F4aec06P0U6WCTbbhqy1U44DzgrZk1ZqzouQIxuhi/vAcRUSCx2SJq4YQQ+GFfKcp8RDrMsd+LQjnXWztPfw36Ga5T3VeP5Bh09WOkw3sH38PMAuXTwN7s/CbOiDnDb+9BRBRobLaIWrAqhwvf+Ih0OOjJxWy7Mhz0DvO7iNekq873Z6RDji0Ho7aOUtQuT7ocD7d9GBrJvyGoRESBxmaLqAUSQuCfoirkVqhHOix1TscG9zfeWhftWRhpfEQ90iHGhL4Z8X65bsopOzFm+xjssO1Q1L/p9Q0S9AknvH8iomBgs0XUwtQX6VAtl+I12xhFrb5Ih/5tk5BoNvhlXYuKF+GFvBcUtVeyXsH58erPVCQiChdstohakPoiHX53fY5vnO96t2OlFNxungWtVDcfK8agxcD2KX6JdNhn34fLt1yuqA2KH4RnOjwDreS/pHkiomBhs0XUAnhkgaU5B+FpYKTDZcbJ6KkboLovf0U6uIQLd+y8A+tr1ivqK3quQKoh9YT3T0QUKthsEUW4wloHft5fpjq2070WixxPKWrNEemwtHQpHt/7uKL2bPtncVHiRSe8byKiUMNmiyhCCSHwY14pSm3qkQ7v2SfjoJzjrZ2rH4X+hhtU99U9ORonJZ14ptUB5wEM2zRMUTs79my82vFV6FQS6ImIIgF/uhFFoPoiHQrl3XjXdpeidrv5XSQEMNLBIzyYkjsFP1T+oKh/2eNLtDa2PqF9ExGFOjZbRBFECIENRVXY5SPSYblzBv52f+2tddaeiauMj6rGNrSJMeF0P0Q6fFf+HabsnqKoPdr2UVyefLmPVxARRRY2W0QRov5IhzK8ZlM+V/BG0wvI1PZQne+PSIcSVwku2qi8BqtXVC+80/kd6DV173AkIopUbLaIIkBuRS3+LlSPdFjr+gKrne94t2OkJNxhflc10iFar8WFHU4s0kEWMp7Y+wSWlS1T1Jd0X4IOpg5N3i8RUbhis0UUxg5FOhTCI+pmOriEHS9arwJwZGy44T700l+guq8zMuLRJvbEIh1+qfoFd+Uorwe7r/V9uC5N/VmKREQtAZstojDllgW+2HlQdSzH/Qc+djypqN1nWQizr0iHTmnQa5se6VDprsSFGy6EDNlb62DqgA9P+hAmjanJ+yUiigRstojCjBACP+WVocblrjMmCw/et9+PA/JOb+0c/dUYYLixzlwA6JYUjW7JTY90EEJg6v6p+Lj4Y0V9wUkL0NXStcn7JSKKJGy2iMLI0ZEOx56HKpL34B3bnYraRPMsJGpaqe5rSFYKLPqm/wj4q+YvjN8xXlG7NeNW3JJ+i18eSk1EFCnYbBGFiX+KKrGrXD3SYYXzdfzlXumtddKejquNj0GS6n402DrGhDNOINKhxlOD4ZuGo9JT6a0l65PxWffPYNFamrRPIqJIxmaLKMQ53DKW7SpUHauRyzHdpkx9v8H0PNpqe6rOP5FIByEE3ih4A3MK5yjq73V5D72jezdpn0RELQGbLaIQtrvCir8KK1XHakUlptse9G5HSQm40zwHOpVIhyi9FoNOINJhS+0W3LBd2dRdl3od7m19Lz8yJCI6DjZbRCHIIwss21UIt6we6fCSdTTGyWO9tUsN96K3fqDqvk7PiEdmEyMdbLINo7aMQr4z31szSkas6rUKMboTf1YiEVFLwGaLKMQU1TqwZn+Z6liOex0+djyhqN1n+QhmSb3xOZFIh7kH5+K1gtcUtTc7vYkzYs9o0v6IiFoqNltEIUIIgTX7y1BsddYZk4UHH9j/i3x5u7cWLSXgkailqvs6kUiHHFsORm0dpaiNSBqBR9o+Ao3KBfdERFQ/NltEIaDa4cbqPcWqY+qRDm8jRlN+VIToERdlpSCqCZEOTtmJsdvHYrttu6K+utdqJOoTG70/IiI6hM0WUZBtKKpCTnltnboQAiudb+JP93JvLUvbB6ONjx+OdChXzG8VbcKZrZoW6bC4eDGez3teUZuWNQ394vs1el+BVuOpQYGjAPnOfO/v+Y58FDgLUOmuxIJuC5CsTw72MomIvNhsEQVJvZEOohzTrcq7/643PYd22l6q8/u1TUJSEyId8ux5GLFlhKJ2YfyFeLbDs9BK2kbvL5Am5UzCxtqNinwvNYuKF+H2Vrc306qIiI6PzRZREOypsOJPH5EO61xLscr5lnfbgjjcZXlfNdLBotdicBMiHVzChTt33ol1NesU9RU9VyDVkNqofTWHA84DWFO15rjzEnWJuCrlqmZYERFRw7HZImpGHllg+a5CuFQjHRx42ToaHri8tWGGSThZP0h1X1F6HQZlNb4xWla6DP/b+z9F7Zn2z2BI4pBG76u5JOgSMCJpBD4v/dznHA00eK7Dc0jRpzTjyoiIjo/NFlEzKbY68FOeeqTDLvd6LHQ8rqjda1kAixSrOn9YpzT8cmC76pgvB50HccmmSxS1s2LOwvRO06GTQvtHwQ7rjnobLQCY2Goi+sb0baYVERE1XGj/hCWKAEII/Ly/DEU+Ih3m2R/CfnmLt3aW/goMNIxT3ddJSdHo3shIB4/w4L+5/0V2Zbai/kWPL9DG2KZR+2puv1f9jttz6l5/pYUWHni82+fGnouxaWObcWVERA3HZosogKqdbqzerR7pUCzvwyybspG4zfw2kjStVedf1CEFUYbG/ZX9ruI7TMmdoqg90vYRXJF8RaP209yyK7IxOXdynfoT7Z7ApUmXwuqx4tl9z2JF+Qqk69PxVPunmAFGRCGLzRZRgGwsqsJOH5EOq5xvYb17mbfWQXMqrjE9eTjSQSkj2oizWiU0KtKh1FWKwRsHK2o9LT3xbpd3odfUvdA+VCwvXY7H9j5Wpz61w1RckHCBd9uiteDp9k/jtJjT0NncGfG6+OZcJhFRo7DZIvIzh0fGshz1SIdaUYFXrdcrateZnkV7bW/V+f0yk5BkaXikgyxkPLn3SSwtUybLL+62GFnmrAbvpzkJIbC4ZDFeyHuhztjMTjNxduzZqq+TJCnkz9AREQFstoj8ak+lFX8eVI90WO9ajpXON7zbZsTibstc1UgHs06Di7JSGxXp8GvVr7gzR5k0f0/re3BD2g0+XhFcQgi8X/g+ZhbMrDM2u8tsnBJ9ShBWRUTkf8dttiRJmgNgGIAiIURPlXEJwHQAQwFYAYwVQvzp74UShTKPLLAitwhOT90H6LiEA69Yr4ULDm/tEsPdOEU/uM5cAOibEY+2seYGv3eluxKDNgxSXDDeztgOC7otgEljasR30TxkIeONgjfwXuF7dcbmnzQfJ1lOCsKqiIgCpyFntt4HMBPABz7GLwbQ+fCvMwG8efh3ohahvkiHXM9f+MiuvAbpXst8WKQ41fnDOqXBoG34hd5T86ZiYfFCRe3Dkz5EN0u3Bu+jubiFGy/lvYTFJYvrjC3pvgQdTB2CsCoiosA7brMlhPhRkqT29Uy5DMAHQggB4DdJkuIlScoQQhzw0xqJQtKhSIdyFFkddcZk4cF8+yPYJ2/y1s7UjcCFxvGq++qaGI0eKQ2PdPir5i9stW5VNFq3pN+CWzNubdKzEQPJJbvwxN4nsLJ8paJu1pixqNsitDK2CtLKiIiahz+u2WoNIO+o7f2Ha2y2QoRdtmPOwTnoYOqAixMvDvZyIkKN042vfUQ6lMh5eNs2UVG7zfwWkjTqmVaDO6QguoGRDrWeWly66VJUeioxHocatyRdEj7r8RmitFGN+A4Czy7b8UDuA3Ues5OiT8G8k+Yx6Z2IWgzp0Amp40w6dGZrqY9rtpYCeF4Isebw9rcAHhBCrFOZOwHABABIS0vrs3DhwmOnBEVNTQ2io6ODvYyAqPHU4KDrIFyyC/G6eGQYMpr3/SPw2NrdMuweT90BAVSJEtSKCm/JIJmRJLUGVE426TUaROkb/rDnYlcxSlwl3u1kdzKio6Nh1jT8+q7mIENGniMPVo9VUTdqjGhnagctQusB175E4p/dUMFjGzg8toEzYMCA9UKIJj2mwh9ntvIBZB613eZwrQ4hxCwAswCgb9++on///n54+xOXnZ2NUFmLvxQ4CvDS/pfwQ+UP3lpbY1t81uOzZl1HJB1bp0fGUp+RDpV41Xqdonad6RmkaU9G3UvmgfMzk5DcwEiHrdatuH6bMi7i2tRrkZKTElLHttJdiVt23IJd9l2Keu+o3pjRaQaiteH1D0Ak/dkNNTy2gcNjG5r80Wx9CeBOSZIW4tCF8ZW8Xit4nLIT8wrnYfbB2XAI5bVE+xz7UOoqRZI+KUirC197K61Y7yPS4U/XSqxwHokvMCIK91jmQSfVbaZMOg2GNDDSwS7bMWrrKOx37PfWDJIBq3qtQqwuFtk52Y3/RgKg1FWKG7bdgEKXshE9O/ZsTM2aGnJn3oiImltDoh8+AtAfQLIkSfsBPA5ADwBCiLcALMeh2IccHIp+uClQi6X6ra1ai+fynsM+xz6fc/6u+RsDEwY246rCm0cWWJlbBIdKpINbOPGK9To4YfPWhhruxKn6Iar76pMeh3Zxlga97weFH2B6/nRF7Y1Ob+DM2NC50feA8wBGbRmFWlmZkj84YTCebPckDJqGh7ESEUWyhtyNeM1xxgWAO/y2ImqyD4s+rLfRAoC/a9lsNVSJ1YEffUQ67Pb8jQX2RxU1f0Q65NpycdXWqxS1y5Iuw6NtHw2ZZ//tte/FFVvqJrdfkXwFCjVMxgAAIABJREFUHsh8ADqJWclEREfjT8UIclbsWfi75u86ZxqO9lfNX824ovAkhMAv+eUorK0b6SCEjPn2R7BX3uitnaG7DIOMt6juq0tiFHqmxB73PZ2yE+N2jMNW61ZFfXWv1UjUJzbyOwiMHdYduGZb3f97jUkbgzta3QGtFB4XvhMRNTc2WxHk2tRrMTplNHLtuRi1dZS3btaYYZMPfdS13bodtZ7akIsJCBWNjXS41fwmkjWZqvMbGumwpHgJnst7TlF7Oetl9I/v37BFB9jG2o0Yu31snfrEjIkYlz4uZM64ERGFKjZbEUYjaTDn4Bzv9rKey5CiT8Fe+15ssW7BVutWFDoLQ/ahxMG0qbgKO8rUzwqudryDte4vvNvtNL1wnekZSCqNRlqUEee0TjhuuGieIw8jNo9Q1AbGD8RzHZ4LibNEa6vWYmLOxDr1KW2mYFTKqJALTyUiClVstiJMtacaq8pXAQC6mLsg3ZAOAMgyZyHLnIVhScOCubyQVF+kg1VU4pVjIh2uMT2NLO2pqvPPz0xEssVY7/u5hAt35dyFP6r/UNSX91yONENaI1YeGNkV2ZicO7lO/Yl2T+DSpEuDsCIiovDGZivC3LjtRu/Xs7vMDuJKwsO+SivW+Yh0+Mu1CsudM7zbBphxr2W+aqSDUXso0kGrqf9sz/LS5Xhsr/JZiU+3fxpDE4c2YfX+tbxsOR7b81id+tQOU3FBwgVBWBERUWRgsxVB9jv2e+9GHJ40HBZtw2IGWiJZHIp0sLvVIx2mW2+EHTXe2hDD7eijV2+IGhLpUOgsxNBNytefGXMmpneaDr2kb8J34B9CCCwpWYLn856vMzaj0wycE3tOEFZFRBRZ2GxFkMs2X+b9+pG2jwRxJaGtxOrEj3mlqmN7PP9gvl157O6xzEdUEyMdPMKDB3c/iO8qvlPUv+jxBdoY1Z+V2ByEEJhbOBczCmbUGXu3y7s4NVr9Y1IiImo8NlsR4uhIh8ltJjPrSIUQAr/ml+Ogj0iHBfbHsEf+x1vrqxuGwYZbVS8Eb0ikw/cV3+P+3PsVtYczH8aVKVc28Ts4cbKQ8WbBm5hTOKfO2IcnfYhulm5BWBURUWTjv8gRYvyO8d6vr0mpN4e2Rap1urHKR6RDqbwfb9luU9QmmN9Aiqat6vzjRTqUucowaOMgRa2HpQfe7fJu0FLV3cKNl/e/jEXFi+qMLem2BB3MHYKwKiKiloHNVgT4vORz79czOs7gLfnH2Fxcje1lNapj3zhm43f3kYdzZ2p64HrTs9CoRC+kWow4t43vSAdZyHh639P4svRLRX1xt8VBi9pwyS48te8pLC9brqgbJSMWd1+M1sbWQVkXEVFLwmYrzP37D/y/zonjBc3/qj/SoQqvWK9V1K4xPoUs3Wmq8/+TmYiUeiIdfqv6DXfkKJ9aNan1JNyYdqOPVwSWXbbjwdwH8VPVT4p6sj4ZH3b9ECmGlKCsi4ioJWKzFeZeyX/F+/WSbkuCuJLQsq/KhnUHKlTH/nZ9jWXO17zbehhxr2UB9FLdZup4kQ5V7ioM2jgIbuH21toa2+Kjbh/BpDGd4HfReFaPFZN2TcKfNX8q6u2M7TC762wk6BKafU1ERC0dm60wZpftWFC0AACQoEvgdTc4FOmwKrcINtVIBxdes46BDVXe2kWGieirv0R1X6elx6G9j0gHIQSm5U/zHv9/Besi8yp3FSbsnICdtp2Kek9LT8zsPBMx2phmXxMRER3CZiuM3Z1zt/frxd3/v737jo6q2h44/j1TUyAJNUFAugjiUwGx/x4WUBHBgg+wAEoTRcD6sIGABRURKTaKIBYUxAdiwwIoqCgoijRBOiRAEkra9PP7I3GSmymEkMkkZH/WYq179zn3zpnDLNnOnLvP/CiOpGLIyHWxIkRJh13eP3jH8ZghNiLuHeJVUtD+1zVPxh6ipMO67HX0/6u/ITYgZQB317u73NfLZbgz6LOlD2muNEP8ooSLeLHpi8SaYst1PEIIIQJJslVJZbgzWJu9FoCLEy6u0j8Paa35af9hUrODl3SY5xzNdm9haYx2luu42hY8MWpRI56z6wYv6ZDjzaH7hu4c9hz2x2pYarDorEXlvrF3qiuVLXlbeHC9cVudzjU6M6bRmKg99SiEECKQJFuVVNENjCc0nRDFkURXuJIOmb59vJY32BAbFDuNOqZGQft3alKH6kFKOmiteSP1DaanTTfEo1H8c7djNzduvBGAAbqw3McNtW5g5Okjo1qNXgghRHCSbFVCW3O3kuvLBaBfcj/spvAbH5+qNqZnsTkjeEmHb11v8aP7I/95A1Mr7ogZH6Kkg41LGtQM+k3XptxN3L75dkOsd53ePNjgwXL9yXBr7lZ6be4VEL+j7h3cV/8+zEHelxBCiIpBkq1KqOg/uveedm+YnqemcCUd8nQWE3ONRV172cfQzNIuaP9QJR0cPge9N/X27zUJYFEWlp69lERL8K17ImF9znr6bekXEL+73t20ONaCjg06lttYhBBClI4kW5XM8iPL/cfjGo/DpELvy3cq2nMsj19ClHT43f01S1yT/OdmrDwY9z5WFViCwWpSdGmWHLSkw9wDc5m0b5IhNrX5VC5KuOgkR19yP2f9zJCtQwLiDzZ4kN51eqOUYvmW5eU2HiGEEKUnyVYlorXmwe2FC6K71OwSxdGUL5/WLN1+iFyPN6DNo91Mzb2THAqTsM62wZxvvT7ovc5LTqRJUmBJh+1527ll0y2GWLda3Xjy9CfLLaldcWQFD2x/ICA+utForq95vewOIIQQlZAkW5XInANz/MezW86O3kDKWUaeixW7g5d02O39k7mOkYbY8Li5VFPBn868rlkydosxcXL73PT/qz8bcjcY4kvPXkota62TGHnJfZ75OU/sfCIg/nyT57mqxlXlMgYhhBCRIclWJeHWbqbsn+I/Pzv+7CiOpnxorVm9/zD7Q5R0+MA5hr+9a/2xtpZrucZ2T9Bvf5rXiOdfQUo6LExfyDO7nzHEJjSdwOVJl5fBOwhPa83C9IU8u+fZgLbJzSZzSeIlER+DEEKIyJNkq5IYvXO0//jTNp9GcSTlI8ft4cvtoUo67Oe1vEGG2MDYqdQ1NQ7av1PjOlS3Gz/qe5176b6huyF2RdIVjG8yPuJP9mmtmXtwLq/seyWgLRrlJIQQQkSWJFuVQJY3iy8PfwlAi9gWpNhSojyiyNqUnsWmECUdlrlm84O7cA/I00wt6RvzQtCSDnXibFxarKSDR3sYtm0Yq7NWG/p+2ubTiM+rT/t4PfV1ZqbNDGiL1jY/QgghIk+SrUqg7+a+/uOZZwT+Q32qcHt9fBKypEM2E3ONdaZ62kfT3HJ+0P6XNqhJ3XhjSYdg66LGNRpHl1qRfdDAoz1M3DuRDw59ENA2v9V8msY2jejrCyGEiC5Jtiq4fc597HLuAuD6mteX+7Yw5SVcSYc/3N/wietl/7kJMw/FfVDikg4HXQe59s9rDf3Or34+U5pPiWjFdbfPzbjd4/g00/izr03ZmN96Pg3sDSL22kIIISoOSbYquG4buvmPn2gU+LRaZefTmq92HCLHHVjSwavdTM3rT7bO9Mc62wZxvrVbQF8ILOng1V4e3fEo3xz5xtDvf63/R8OYhmX0DgI5fU4e3fEoK46uMMRrWWrx7pnvUsdWJ2KvLYQQouKRZKsC+y27cPPkB+o/gEWdWn9dmXkulp9ISYfYuVQzhSrpUBe7pXDd1vIjyw01yQAebfgoPer0OMlRh5brzWXE3yP8G4T/o5G9ETNbzqzSm4ULIURVdmr9632KGfBX4UbDt9a9NYojKVtaa37ef4R92Y4gbT4+dI5jm/cXf+xcy9V0sQ0NWtKhWY04zqlbuH1OpjuTTus7Gfq0imvFrDNmYTPZyvBdFDrmOcbdW+9mS94WQ/ysuLOY1mIa1c3VI/K6QgghKgdJtiqoRemL/MeTm00+ZSqH57o9fBGipMNhXyqv5g00xAbETiHZ1CRo/6sa1ybBnr/myqd9PL37aRZlLDL0+bDVhzSLbVYGIw+U6c6k75a+7HftN8QvqH4BLzV9iVhzbEReVwghROUiyVYF5NM+xu4e6z8/VYpbbs7IYmN68JIOy11zWeUufFqvnqkF/WImBC3pUDvWxmUNC0s6rD62mnu23WPoM+y0YfRN6RtwbVlIc6XRa1MvsrxZhvhVSVcxrvG4iH2DJoQQonKSZKsCenlf4ZN381vNj+JIyka4kg4Onc1LxUo6/Mc+mhYhSjpc0qAmyQUlHbI8WXRe3xmXdvnbG9gbMK/VPGJNZf+t0m7Hbm7ceGNAvHut7jx6+qMRfbJRCCFE5SXJVgXj8Dl47+B7ACRZkip9DSa3T4dMtNZ7lrHY+VKRiOLhuPnYgpR0sCjFdc3zSzporXl538u8e/BdQ5+5LefSOr51WQ4fgK15W+m1qVdA/La6tzG8/vCIV5wXQghRuUmyVcEM3zbcf7yg9YIwPSs2n9Z8veMQuW5PQJtXu5mWN4AsXfgkYifbQDpYuwf0BTg3OYGmSfn1xX7P/p27/rrL0N4/pT9D6g0p83Vt63PW029Lv4D44HqDGZAyAJMyBV4khBBCFCPJVgWS4c5gTfYaAC5KuKjSlgooWtKheDqyx7uRtx2PGGLDYt+muqlm0Ht1aVaXGIuZXG8u3Td0J9NTWHMr0ZzI4jaLqWauVqbj/znrZ4ZsHRIQf7DBg/Su0/uUeVhBCCFE+ZBkqwK5cUPheqCXmr4UpmfFpLXml9Qj7M0KVtJBM9/5NFu9hXsSnmPpzHW2+4ImL02T4jinbgIAb+x/gzfT3jS0R2LD5u+OfMf92+8PiI86fRTdanWTJEsIIUSpSLJVQWzN3UqOLweAvsl9sZvsx7miYsl1e/li+8GgbYd9abyaN8AQ6x8zmRRz8PVoVzWuTe5hK+9+t5mXq99maOtZpycPN3i4TBOfLzK/4PGdjwfExzcZT6canYJcIYQQQpScJFsVRK/NhQuwh542NIojOXGbM7LZmJ4VtC3Ll8mreYWV4FNMzbgzZmLQkg45h6wsfKkWw353kjihJzGNd/nbzJj56l9fkWhJDLiuNLTWfJzxMc/sfiagbXKzyadMuQ0hhBDRJ8lWBbDiSOEeeuMajas0C6/dPh+fbA1f0mGALvxG6xb7k5xhuSBo/7H9a/L7Kjt1b3uHBgteNrRNaT6FixMuLpMxa62Ze3Aur+x7JaBteovptK3etkxeRwghhPiHJFtRprXmge0P+M+71OoSxdGU3L6sPFbvPxK07U/PchY5JxhiD8ctCFrSwZkH/S5MwVRvJ23XGvct7FqzK6MbjS6T5NOnfbyR+gYz0mYEtEWqZIQQQggBkmxF3ZwDc/zHs1vOjt5ASsinNd/sPESWyxvQ5tVuXssbzFFduHYrwVSbx+OXBL3Xm2MSWDrfxhkz+xLfZoOh7dMzl5ISV+ukx+vRHl7e+zLzDs0LaIvkVj5CCCHEPyTZiiK3djNl/xT/+dnxZ0dxNMd32OFi2a6MoG17vZuY43jYEBsWO4d4lYovSP+7LqmL5f8Wcd5q45qp7Q+9yFvDriDlJH/Nc2s3T+96miWZxkTPoiwsaL2AhvaGJ/cCQgghRAlJshVFT+18yn+8pE3wb3+iLScHflun2eE6QvxpwUs6fOR8li3eH/2xf1muoqtteMETg6mG/p+/G8fbM7Nos7SDIX5kWUe2P/ICl15spnvw2qYl4vQ5eWzHYyw/utwQr2GpwXtnvkddW93S31wIIYQoBUm2oiTbm80Xh78AoHlMc+rZ6kV5RIGOHYNhD3jp9vBB4oO0H/EdYFpef0Osf8wrpJiD/zQ3onsS9vseos0nPxni67t8ivtACgATJkBpqjrkenMZ8fcI1mavNcRPt5/OrDNmUcNaOQvECiGEqPxKlGwppa4BXgHMwAyt9fhi7f2AF4F9BaGpWuvAlcjCr8/mPv7jWS1nRXEkoaW6s+n2cPCSDt+53uN793v+87qmJvSPmRS0pMPm36y8NOcXGr/3hCG+c9QYMj/t6j+/5Ra4IPjDiiEd8xzj7q13syVviyF+VtxZTGsxjerm6id2QyGEEKKMHTfZUkqZgWlAJ2Av8ItSarHWemOxrh9orStXgago2efcxy5nfg2prjW7Em8O9r1R9IQv6ZDDS7k9DbEe9idoabkwaP/UPfBR26tpXGRpVtaadmy9dxp4rP6Y1QrPPVfyMWa6M+m7pS/7XfsN8Q7VOzCx6URizbElv5kQQggRQSX5ZqsDsE1rvR1AKTUP6A4UT7ZECXXb0M1//GSjJ6M4kkDhSjps8Kzgf84XDbGH4+ZjU4GJjcPhZdTSKTx4VmPjPbr/D+fewMXp99wDzUrwYGCaK41bN93KUe9RQ/zKpCsZ13hcpau8L4QQ4tSntNbhOyjVA7hG6/zqlEqpO4ALin6LVfAz4nPAIeAv4H6t9Z4g9xoEDAJITk5uN29e4OP40ZCdnU21amW7mXEoeb48djp2ApBsS6amJfgGzNGQ5fLgDfJ50BoO6V14tdsfq65qU82UFPQ+BzPy8Cbl/6Jc21ObdEs6rrQUPIdDr5s691wwB/4C6efWbrblbQuIJ1mSSLGloKh6+xaW5+e2KpL5jRyZ28iRuY2cyy+/fK3Wun1pri2rBfKfAO9rrZ1KqcHAHOCK4p201m8CbwK0b99ed+zYsYxe/uQsX76c8hpLu1/b+Y/XnLemQmxufNjhZtmu9KBt+7ybme14yBC7L3Y2cabaASUdcvRRJuXeBnUKY3ftHMp9Pfqj3baQrz9+PFx5JWifD+/BTNy79uPZnYp71362Hd3MkBu/zu9YZKee2+rexvD6wzEHWSNWVZTn57YqkvmNHJnbyJG5rZhKkmztA4r+7tOAwoXwAGitixZfmgG8cPJDO/UsSl/kP57cbHLUEy2tNWvSjrLnWF7QtoXO8Wz2rvLHzrZcwfW2+wPGrbWPNze9Tnqjzwzxjf/5AMeQvYZEq7rKoqEplYbm/TQwp9IqIZWea1PZfXEqnt2paKcLgG0tvTw22RkwrkEpgxhYb2Cl2dJICCGEKEmy9QvQQinVhPwkqxdwa9EOSql6Wut/Cip1AzaV6ShPAT7tY+zusf7zaG90nOf28vn2g0HbjvoOMjXvLkPsrphJ1DM3D+i7w7uO9xxPQKPCWO7U26n7zkXcbF5PisnD1OpP5CdXplQSTdnGG3jBuazwdMO/vIx5MTDJeqD+A9xa99aoJ6hCCCHEiTpusqW19iilhgJfkl/6YZbWeoNSaiywRmu9GBimlOoGeIBMoF8Ex1wpTdo3yX88v9X8KI4E/srM5s9DwUs6fO96n+/c7/rP66hGDIidHFDSwaGzeSW7Dx6Tyx+rlWpm0mAbdudCSFwIwDbT7VxoX8Hx/NrBy/hxgUnWEw0e54Y6N0qSJYQQotIq0ZotrfVnwGfFYqOKHD8KPFq2Qzt1OHwO3j2Yn8AkmhNpGts0KuPw+HwsDlHSwalzmZD7H0PsZvtjnGm52BDTWvONaxarPR9DkV/ynhtqp9nWE18/9cO/PUx6zBUQf2BqTXo+Nw9L3ZPfH1EIIYSIJqkgXw6GbxvuP/7orI+iMob9WQ5+2n84aNtGz/d87HzeEHso7kPsKs4QC7b/4Y3vW+g123pCTwNqNN9c6+XNEYFJ1sgn7LRda+W0hS9gSZZESwghROUnyVaEZbozWZO9BoALq19IDUv5bhvj05plu9I56vQEtHm1hzfyhnBYF+5feLm1Hxfbehj6uXQer+UNJltn+mPxWTCtTyxxuSeWZC252cPcQe6AtqcestN6ff43YzWfGEjsJeeV+L5CCCFERSbJVoR1//MG//HEZhPL9bWPONx8G7KkwxZmOx40xO6LnU2Cqbb/XGvNSvc8wxougEceSKL9hsBvpULxKc2C290suD0w4Xv2PjvN/yr8+TGu88Uk3XdrQD8hhBCispJkK0J27DjCkKfnkXtvDgB9k/uWW3VzrTVr046yO0RJh4+dL7DJ+70/1sbckW72Bw2L0NO825npGGa49uC8nux98WEeNqUyPeERmlt2hR2Hz6TJqKN57IvAcUwYFMPpu4zlGywNU6g79XGUSco6CCGEOHVIslXGnE4PL7zwC88+u5rWq+b640NPK59tI0+0pMOdMS9zmrmF/9yjXczIG0aG3uuPaa+JPzp9hfdoEtVUDhOrjw2baHnMmjdHuFje2cuAtMKK9GY3vDwwhpTUIMmU1ULyjDGYaySU9K0KIYQQlYIkW2Vo6dKdDB36DVu3HibxssK6r31c95dLEc5wJR1WuT5kuftt/3lt1ZCBsVMNJR1+di/iK9d0w3Xbhk7h2I8Xk6SOMi/p9rBJlsuqmTzSxc+Xeg3xhCPw/L0x1EoPPQe1xw4lpm3rsO9PCCGEqIwk2SoDe/dmcf/9y1iw4K+CiKbZpO/87c7vzoALI/f6J17S4VHOtBQWVU337eGNvCGGPhlLrmPXU09Rh0xW1biBZHMGoTjsmufHOtlwrnEDn+T9isY7TcwYExfiynxxnS8mof9NYfsIIYQQlZUkWyfB7fYyadJaxoz5kZycwifskvsUFtDf0q8TKxvv45FHIjOG1GwHP+4LXtJhk2clC53jDbGiJR282s1cx0j2+bYY+vzR+UuSD7v5o+bVxClHyNfOideMfd7BjhbGzaub/mXiyZF24nMU254IP35rs4YkvzFaipYKIYQ4ZUmyVUorVuzh3nu/ZsOGYt/4WHzUH/67/zRnfW1W7t2Hz6cxmcouoTheSYfpeUMN6646Wvtwia3wG6517qV86ppsuG77wy9Qc0VzNte4EWqGfu1jiZrHJzk4cJoxyWrzm4lHRtuJcZbsfapYO8mzxmGqFv6bLyGEEKIyk2TrBKWl5fDwwyt4552NQdsbP/WT/3j9dd0AOHzYwaZNGZx1Vu2g15yocCUd9nv/4i3HA4bYfbFvkWCqk3+tL41peQOM91v+b2JHDmRN4iAIUwYso7aPR151kJVojHdYaWbYeBs294klk7WffwB762YndI0QQghR2UiyVUIej4/XXlvHE0+s5Nix4DWmTPFual6bv4A8b1si7rR4f9vKlftOOtnSWvPrgaPsOhq8pMMi5wQ2eAv3IWxt/j9usD+MUgqf9vKBcwzbvb8aL+w2gaXOUZD4S8jXTavn4/4ZDrzFPi0dvzQz6BUbFu+Jf2NXvXcXEnp3OeHrhBBCiMpGkq0S+Omn/QwZ8jXr1gUvqfCPM+cs9R9vubOToe277/YyePA5pR5DnsfL538Hf/1jvkNMybvTEOsX8xL1zS0B2OBZwf+cLxrabWP68s4P84FRhLK7kY+H3gxcs9VloYU+062YfKGTrNgrLiDlrafZ+fmXYLOCq3BNm611U2qPvz/ktUIIIcSpRJKtMDIy8hg58jtmzFh/3L62etnENDmWf92SxvhyrYb2lSv3BrusRLZmZrM+REmHH1zzWeae4z+vpRowMHYqZmUhy5fB5Ly+hv7W35oy5/FULN75IV9v2xleHpviDIj3eMdCj3esmHToJKvajVdSd8pjKLsNAHOtRBp89hppA0bh2bkfVS0uf51WXEzY9yyEEEKcKiTZCsLn08ycuZ6RI78jMzP003hFtVnyif9419gLAtp3785iz55jNGxY8qKdJ1rS4Sb7SFpZLsWnvXzseJ6NRarEA7xyZwz19qdBiE2jN57t5akJgUnWHW9a6fqRJexm09XvuJ46zz+AsgZ+pOzntKTBNzM5NGw81W68Eluz00PeRwghhDjVSLJVzK+/HuCee75m9erU43cuEH/uIf/x3onngTd48c6VK/fRu3fJkq1wJR02e37gI+ezhtg/JR22en7mQ+dYQ9udb8Ry7cLQidKvHbyMHxeYZA2aZOPKz81hk6ykob2p+cRglNkcsg+AOaEayW+NkxIPQgghqhxJtgocOeLgySdX8eqr6/D59PEvKKLlzK/9xwffbRmyX36y1SrsvbTWLNuVwRGnO6DNp71Mz7uPdL3bH/u39Q4utfUkRx9lQk5XQ//6GUm80NeJNcRTgj/828OkxwIX+4941sbFK8J/NGo+OpCkEbef0D6GkmgJIYSoiqp8sqW1JjPTwZlnzuLAgdwTvr7m9dv9x9uG/ZtQP9FBfrIVzlGHm29ClHRI9W5jlmOEITY0dhYJqg6fOafym+cLQ9tzI+vS7LfsgPFoNN9e4+WN+wOTrP+OstNudfhvqGo/O5yEATdL4iSEEEKUUJVPtnw+TWyshWefvYw1a9JYu/YA69YdwuXyHv9ipWn81Gr/6bFVp4Xtvn79IY4ccZCUZFwcrrXmtwNH2RmipMNi50T+9C7zx1qZL+NG+yPs8v0RsLF0l+2X0XfIWhTZxvug+fQmD28PDvzGbPTDds76I3ySVWfyo1KqQQghhCiFKp9smc0mYmMt3HXX2dx119kAuFxeNmxIZ82aA6xde8CfhBVXf8Rv/uONtxw/EdEafvhhP126NPXHHB4vn4Us6ZDOlLx+hli/mJeoZarPi7k9cFO4zipR1eWFETWpsXGtob9PaRbc5mbBHYGV5p8dZqf5lvBJVvKscVS7vuNx3pkQQgghQqnyyVYwNpuZ885L5rzzkhk4MD/Wrt1cfv21MOFSNi/Jt+fvKeg5YsOxPTHYrQJ8//1ef7K17XAOfxw8FrTfD64FLHPP9p/XUPUYFPMqKzxz+cmx0NB3cPpDXNHndZS38Nssn0kzd4CbT28OTLImDIrh9F3h11rVmzeBuCsDn6oUQgghxImRZKsEUlOzDYkWQLNXCiu1b7z5uhLfa+XKfXh8msVb04K2u3QeL+beYojdaH+ERFWX5/NuNMQvtt5Cv1FpJK181R/zmDVvDnex/Grjz6AmL0waEEPK/vBJ1mmLpxJ7UemLrwohhBDCSJKtEmjSZLrh3FJyAKCxAAAPi0lEQVTDQUKH/OTr2E8peI4Y12B9/HF39uzJ8v/8uGlTpv8JR5dNhUy0gpV0GBY7h1mO+8nWmf6YnXjui3uLdp0HY87L/ynRZdVMHuni50uNSVb1o/DCPTHUSg+fZDX4egb2c0I/SSmEEEKI0pFk6zh+++0ATqcxgWn98RL/8d/3/5+h7bLLGnDDDS0MsexsF7+tO8heqxd7ki3gNXzay8y84RzUOwvvY70VhQqoAH97zHNc+Po66r7fDwCHXfPCGCd/nucz9KubqnhmeAyJR8M/Ndhw1VxsZzQO20cIIYQQpSfJ1nG0bTvXcB7T/AiW6vlP9KXNboV2GReYf/nlzQH38FoVh+qYsRO4GD1YSYeettF84BpjiLWzXMfVtrtpfdMQbIcyyY3TjBvv5O+WxiSryVbFqP/GEJ8TOslSMTYarpyLtVH4pyeFEEIIcfIk2Qrjo4/+Coi1/uBz//H+qca1TcOHtyU2tnBPRK016w4cY8fRwPpdWms+cb3Mes+3/tgZ5gvJ8O4LSLTuj3uP+l/+RsOne5KVqHloloO0+sbCq2etM/Hf0XZiHKGTLHPdmjT4ZiaWlNoh+wghhBCibEmyFYLWmh49FhtiCZcVFiXd+eSFUGxD5pde6ug/PtGSDudbuvGLx/h6Pe2jaW45nxb9/4sj/W8GfOAgK8l4rw4rzQwbb8MWoko8gLVFI+p/MhVzraSQfYQQQggRGZJshfD00z8Vi2iaT/rOf5b5WRND6/TpnTGb8xeh/304h99DlHT4yb2Qb1yz/OfVVW2ydLoh0Wpjvpxu9vuJ3b6XxMf+Q/83cvFajffpuNTMoEk2LN7QSZa9bSvqzZ+IOaFauLcqhBBCiAiSZCsIl8vLqFGrDLG6d2z2H2/p1yngmgED/oXHp/lkaxrBdlZ0aQcv5vYwxGqq08jU+w2x4bFzqWaqgXXiUzw5eA3MMjRz7ccW+r5pxeQLnWTFdjyflNnPYIqPDdlHCCGEEOVDkq0gbr11iTFg8dFgxDr/ac5645qnFSt6kpbj4Ie9h4Pe7y/PauY7xwXEiyZaN9lH0spyKfu9W3kl5w4YbOx787sWbplrxaRDJ1nx3a8gedrjKHvgE49CCCGEiA5Jtoo5csTBRx9tNcQajy78SfHP67oZ2kwmha9RbNBEy6e9zHSM4KBvR8jXa2HuQA/74+z1beKZnK4B7bdPt3L9AgsqzAbX1W/vSp0XHkRZ5a9TCCGEqGjkX+diipd6MMW7qdllFwB52xJxpcX72xo2T2TSkq5kOgI3d07zbmemY1jY1xoaO4tDvl08l9s9oG3QJBtXfm4Om2Ql3tOLWqPuRpnD728ohBBCiOiRZKuIbdsOs2PHUUOs5eyl/uMtdxau1Rrw5Plce9sZAffQWrPE9Qp/eL4O+TpdbcOxqhim5t0V0DbsORuXLg//11JjZH9q3N8HZQpfFV4IIYQQ0SfJVhEtWsw0nNvqZRPbNP+pwowljfHlWkmsFcOsVYGFSwGyfBkBFd+LaqBac7b1cpa4Xgloe2SUjfarw/911Hp6GImDeqBU+KrwQgghhKg4JNkqsHz57oBYmyWf+I93jb2Aq3u3YNDoDkGvX+3+mK9dM4O2AVxkvYUf3fPZ69poiI96xE6b38P/DFhn0kiq39pFkiwhhBCiEpJkq8Dll39oOI8/55D/OHVKW95b2xt7TOB0BSvpUFQzc3v+9q7hR/d8Q/yZYXZabAmfZCXPGEu17peXZPhCCCGEqKAk2QLS0/MCYi1nFa65mvLfMUG/Vdrq+ZkPnWOD3jOWBPI4xt/eNYb4hMExnL4z/FqrlPdfJP6qC0sydCGEEEJUcFU+2fJ6fezaZaz2XrPrdv9xT/vogETLp7285XiANN/fIe+bR+E9lYZJd8VQb3/4JOu0RVOIvfjcExm+EEIIISq4Kp9sjRixjMaNiwSUpvGY1f7T5pbzDf0PeLcz4zglHf4RQzWeH1GdepuOhu1X/6vpxJx7ZkmHLIQQQohKpErXDsjNdTN16m+G2DXvp/mPB8VO8x9rrVninFyiRCtRJTP6l2HMudoXNtFquPJtmh36XhItIYQQ4hRWpb/Z6tx5gf84oaad6au68XzuTUD+t1J1TI0AyPJlMjmvz3Hvl2xqym0xz/KvQc8Qt2lG8E42K6evegdr49NO/g0IIYQQosKrsslWamo2q1btAyChRgxv/dCDd/Me97ffHfcGAD+7F/GVa3rYe51uakPPmNFU33OYlncMRHm9AX3MdWrQ4JuZWOrVKcN3IYQQQoiKrsomW02aTMdmNzPrh5uJP7SFLH2Unb7f89tM52HDzjM51wM65D3OMF/IjfZHsCgbjZ6cSNKynwL6WJs2oP6nr2KuXSNSb0UIIYQQFViVTLbWrTtIy3Z1GD3ryvzAIXg9d5C/vZ31Wl4IUzvrbMsVXGe7D7OyAtCmc1/MucbyEfbzWlFvwUTMCdXK/g0IIYQQotKocsnW4V+28dTrWwoTLcCtXTjIAfLrYy1wPhv02vaWrnSyDcSk8ouRpkyfR/KchYY+sf9uT8qcZzHFx0boHQghhBCiMilRsqWUugZ4BTADM7TW44u124G3gXZABtBTa72zbId6cvLWbmT9cx+z66ZL6fNIW0Nbuq9wq56i9bH+cYm1J/+23oZShQ9vtrr5HmwH0v3n8dd3pO6rT2CKsUdg9EIIIYSorI6bbCmlzMA0oBOwF/hFKbVYa110k7/+wGGtdXOlVC/geaBnJAZ8ovJ+/J19z8zhSIKd/SP7Y64eb2j/y72axBDXXmG9kwutNxmKmiZ++yONRr3MP5Hqt15HnQkPoaxV7ktCIYQQQpRASTKEDsA2rfV2AKXUPKA7UDTZ6g48VXC8AJiqlFJa69Cry8vBsfW72NH/OTLu7cGRqy4JaN/gWsH/3C8ygAGG+DXWe2hrvTagcnzzQY8Rv3EbAIl3/4daT92DMoff31AIIYQQVZs6Xj6klOoBXKO1HlBwfgdwgdZ6aJE+fxb02Vtw/ndBn/Ri9xoEDAJITk5uN2/evLJ8LwGyczVOnwezNXj7Id9uPNpFbU9t0i3pJKjaxJuSAvopl4eYHXtAaywptTEn14rouE8l2dnZVKsmDwlEgsxtZMn8Ro7MbeTI3EbO5ZdfvlZr3b4015brb19a6zeBNwHat2+vO3bsGNHX82nN9ow81u7OwhrvC2ivqc/iN/eXxO51ktz0hvxrivU5fdTL1Pj2R2qNG0ri4P8E3ZBahLZ8+XIi/fdcVcncRpbMb+TI3EaOzG3FVJLtevYBDYucNyiIBe2jlLIAieQvlI8qk1I0rx1H56aJvPfSOo6kG8szKKVoa7uGJFNy0OvbXN2XM7peRtOD35F0d09JtIQQQghxwkqSbP0CtFBKNVFK2YBewOJifRYDfQuOewDfRnu9VlHzP9zC4tmbuKfTIt6ZuI7so86w/eOnf8QV6zdxxs6lJNxxvSRZQgghhCi14/6MqLX2KKWGAl+SX/phltZ6g1JqLLBGa70YmAnMVUptAzLJT8gqjEGDzqFv37NYvz6dNWvSWDnzL6xJJi7p1ZKYuMIp+HN1GhlLd/LKO0PD3E0IIYQQouRKtGZLa/0Z8Fmx2Kgixw7glrIdWtmy2y20b59C+/Yp/tiv079n64FUbG2TWDl3G6uX7eGzz26O4iiFEEIIcaqp0sWh2g68jHOdblb8sIqJT18W7eEIIYQQ4hRUkjVbpzST3YosyRJCCCFEpFT5ZEsIIYQQIpIk2RJCCCGEiCBJtoQQQgghIui42/VE7IWVOgTsisqLB6oNpB+3lygNmdvIkbmNLJnfyJG5jRyZ28hpqbWuXpoLo/Y0ota6TrReuzil1JrS7nckwpO5jRyZ28iS+Y0cmdvIkbmNHKXUmtJeKz8jCiGEEEJEkCRbQgghhBARJMlWvjejPYBTmMxt5MjcRpbMb+TI3EaOzG3klHpuo7ZAXgghhBCiKpBvtoQQQgghIkiSLSGEEEKICKpSyZZS6hql1Bal1Dal1Mgg7Xal1AcF7auVUo3Lf5SVUwnmtp9S6pBSal3BnwHRGGdlpJSapZQ6qJT6M0S7UkpNLpj7P5RSbct7jJVVCea2o1LqaJHP7ajyHmNlpZRqqJRappTaqJTaoJQaHqSPfHZLoYRzK5/dUlBKxSilflZK/V4wt2OC9DnhXKHKJFtKKTMwDbgWaA30Vkq1LtatP3BYa90ceBl4vnxHWTmVcG4BPtBan1vwZ0a5DrJymw1cE6b9WqBFwZ9BwGvlMKZTxWzCzy3A90U+t2PLYUynCg/woNa6NXAhcG+Q/y7IZ7d0SjK3IJ/d0nACV2itzwHOBa5RSl1YrM8J5wpVJtkCOgDbtNbbtdYuYB7QvVif7sCcguMFwJVKKVWOY6ysSjK3opS01t8BmWG6dAfe1vl+ApKUUvXKZ3SVWwnmVpSS1jpVa/1rwXEWsAmoX6ybfHZLoYRzK0qh4LOYXXBqLfhT/EnCE84VqlKyVR/YU+R8L4EfTn8frbUHOArUKpfRVW4lmVuAmwt+KliglGpYPkOrEko6/6J0Lir4SeFzpdRZ0R5MZVTwM8t5wOpiTfLZPUlh5hbks1sqSimzUmodcBD4Smsd8nNb0lyhKiVbIro+ARprrf8FfEXh/xUIUZH9CjQq+ElhCvC/KI+n0lFKVQM+AkZorY9FezynkuPMrXx2S0lr7dVanws0ADoopdqc7D2rUrK1Dyj6bUqDgljQPkopC5AIZJTL6Cq3486t1jpDa+0sOJ0BtCunsVUFJflsi1LQWh/75ycFrfVngFUpVTvKw6o0lFJW8pOBd7XWC4N0kc9uKR1vbuWze/K01keAZQSu6zzhXKEqJVu/AC2UUk2UUjagF7C4WJ/FQN+C4x7At1qqvpbEcee22DqMbuSvMRBlYzHQp+DJrguBo1rr1GgP6lSglEr5Zy2GUqoD+f/NlP8BK4GCeZsJbNJaTwzRTT67pVCSuZXPbukopeoopZIKjmOBTsDmYt1OOFewlPVAKyqttUcpNRT4EjADs7TWG5RSY4E1WuvF5H945yqltpG/aLZX9EZceZRwbocppbqR/xRNJtAvagOuZJRS7wMdgdpKqb3AaPIXbaK1fh34DOgCbANygTujM9LKpwRz2wMYopTyAHlAL/kfsBK7BLgDWF+w/gXgMeB0kM/uSSrJ3Mpnt3TqAXMKnrI3AR9qrZecbK4g2/UIIYQQQkRQVfoZUQghhBCi3EmyJYQQQggRQZJsCSGEEEJEkCRbQgghhBARJMmWEEIIIUQESbIlhBBCCBFBkmwJIYQQQkTQ/wNXzvz6nxmuxQAAAABJRU5ErkJggg==\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": 51 + }, + "outputId": "7f0cf9df-1287-4710-8be9-eb4c89470cbd" + }, + "source": [ + "# Column Vectors\n", + "a = np.array([5, 7])\n", + "b = np.array([3, 4])\n", + "print(a)\n", + "print(b)\n" + ], + "execution_count": 31, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[5 7]\n", + "[3 4]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vgEjy1cMpTBs", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 378 + }, + "outputId": "98eb7311-44af-4c42-d810-08510fa5b6a4" + }, + "source": [ + "fig, ax = plt.subplots(figsize=(9, 6))\n", + "ax.grid()\n", + "plt.xlim(-.1,8)\n", + "plt.ylim(-.1,8)\n", + "\n", + "plt.arrow(0, 0, a[0], a[1], head_width=.3, head_length=0.3, linewidth=3, color='g')\n", + "plt.arrow(0, 0, b[0], b[1], head_width=.2, head_length=0.2, linewidth=3, color = 'purple')\n", + "plt.show()" + ], + "execution_count": 43, + "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": "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": 378 + }, + "outputId": "516a5644-5dab-44bf-fa7e-8a2383fd684a" + }, + "source": [ + "ab_dif = a - b\n", + "\n", + "fig, ax = plt.subplots(figsize=(9, 6))\n", + "ax.grid()\n", + "plt.xlim(-.1,8)\n", + "plt.ylim(-.1,8)\n", + "\n", + "plt.arrow(0, 0, a[0], a[1], head_width=.3, head_length=0.3, linewidth=3, color='g')\n", + "plt.arrow(0, 0, b[0], b[1], head_width=.2, head_length=0.2, linewidth=3, color = 'purple')\n", + "plt.arrow(b[0], b[1], ab_dif[0], ab_dif[1], head_width=.2, head_length=0.2, linewidth=3, color = 'b')\n", + "plt.show()" + ], + "execution_count": 50, + "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": {} + }, + "source": [ + "c = np.array([7, 22, 4, 16])\n", + "d = np.array([12, 6, 2, 9])" + ], + "execution_count": 51, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "X8DY1mYqyK8P", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "f60c0039-9a03-4f92-c2aa-addf843784a5" + }, + "source": [ + "print(\"Dot Product: \", np.dot(c, d))" + ], + "execution_count": 52, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Dot Product: 368\n" + ], + "name": "stdout" + } + ] + }, + { + "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": 119 + }, + "outputId": "c372419e-d8d6-4398-f20b-e0531a57d6a6" + }, + "source": [ + "e = np.array([[5],[7],[2]])\n", + "f = np.array([[3],[4],[6]])\n", + "print(e)\n", + "print(f)" + ], + "execution_count": 55, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[5]\n", + " [7]\n", + " [2]]\n", + "[[3]\n", + " [4]\n", + " [6]]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "BKd13kuty5sE", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "3158149c-9632-45c7-d093-307778262144" + }, + "source": [ + "print(\"Dot Product: \", (e*f).sum())" + ], + "execution_count": 56, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Dot Product: 55\n" + ], + "name": "stdout" + } + ] + }, + { + "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": 153 + }, + "outputId": "2f904cf2-aaab-4a5e-98e7-098283bdff89" + }, + "source": [ + "g = np.array([[1],[1],[1],[8]])\n", + "h = np.array([[3],[3],[3],[3]])\n", + "print(g)\n", + "print(h)" + ], + "execution_count": 58, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[1]\n", + " [1]\n", + " [1]\n", + " [8]]\n", + "[[3]\n", + " [3]\n", + " [3]\n", + " [3]]\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": [ + "" + ], + "execution_count": 10, + "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": {} + }, + "source": [ + "" + ], + "execution_count": 10, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": 10, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": 10, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": 10, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": 10, + "outputs": [] + }, + { + "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": "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" + ] + } + ] +} \ No newline at end of file From 98e65db756102c910c2ac29418260d061e248b8c Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Wed, 5 Aug 2020 22:25:46 -0600 Subject: [PATCH 02/10] Created using Colaboratory --- ..._LS_DS_131_Vectors_and_Matrices_Assignment.ipynb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb b/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb index 5e145a60..e477162d 100644 --- a/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb +++ b/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb @@ -716,6 +716,19 @@ } ] }, + { + "cell_type": "code", + "metadata": { + "id": "05ZjSBiLArc5", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, { "cell_type": "markdown", "metadata": { From 14e080b19c34eb960d7b5cb2ae1b7bc534ca7be1 Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Thu, 6 Aug 2020 00:31:32 -0600 Subject: [PATCH 03/10] Created using Colaboratory --- ..._131_Vectors_and_Matrices_Assignment.ipynb | 1134 ++++++++++++++++- 1 file changed, 1068 insertions(+), 66 deletions(-) diff --git a/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb b/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb index e477162d..cd49dfe2 100644 --- a/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb +++ b/Ray_Arbizu_LS_DS_131_Vectors_and_Matrices_Assignment.ipynb @@ -56,9 +56,10 @@ "source": [ "import math\n", "import matplotlib.pyplot as plt\n", - "import numpy as np" + "import numpy as np\n", + "import pandas as pd" ], - "execution_count": 15, + "execution_count": 83, "outputs": [] }, { @@ -74,7 +75,7 @@ "goldwing = [.5, .4]\n", "shadow = [.1, .3]" ], - "execution_count": 16, + "execution_count": 60, "outputs": [] }, { @@ -86,7 +87,7 @@ "base_uri": "https://localhost:8080/", "height": 85 }, - "outputId": "b1812b1e-3834-4b1d-b024-671ceb3f320f" + "outputId": "c552c687-182a-4aec-adb2-e3519712fd98" }, "source": [ "# Examine their \"components\". These are not scalars.\n", @@ -95,7 +96,7 @@ "for bike in [roadking, goldwing, shadow]:\n", " print(bike[1])" ], - "execution_count": 17, + "execution_count": 61, "outputs": [ { "output_type": "stream", @@ -118,7 +119,7 @@ "base_uri": "https://localhost:8080/", "height": 269 }, - "outputId": "885036cf-726c-4b78-de7a-ea70b764b732" + "outputId": "e5a1e63c-f322-424a-b0db-540eff07c83e" }, "source": [ "# plot a vector using matplotlib\n", @@ -136,7 +137,7 @@ " color = 'red')\n", "plt.show()" ], - "execution_count": 18, + "execution_count": 62, "outputs": [ { "output_type": "display_data", @@ -172,7 +173,7 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "eed75c8f-bb87-4bab-e4be-dac3ab594747" + "outputId": "7f3b6964-4d03-4c8f-cc0b-5221631dcbc4" }, "source": [ "# add a third dimention to 'roadking'\n", @@ -181,7 +182,7 @@ " roadking[0], roadking[1], roadking[2]]])\n", "vector" ], - "execution_count": 19, + "execution_count": 63, "outputs": [ { "output_type": "execute_result", @@ -193,7 +194,7 @@ "metadata": { "tags": [] }, - "execution_count": 19 + "execution_count": 63 } ] }, @@ -206,7 +207,7 @@ "base_uri": "https://localhost:8080/", "height": 119 }, - "outputId": "0de4e474-31d4-4f0a-deff-0cc3c2767b9f" + "outputId": "89dcec43-d266-4c74-f1e5-eb4ed8ffb25d" }, "source": [ "# unzip that vector\n", @@ -214,7 +215,7 @@ "for letter in [X, Y, Z, U, V, W]:\n", " print(letter)" ], - "execution_count": 20, + "execution_count": 64, "outputs": [ { "output_type": "stream", @@ -239,7 +240,7 @@ "base_uri": "https://localhost:8080/", "height": 248 }, - "outputId": "b8c2e1b4-6b03-4212-ac64-308ea19968f7" + "outputId": "41161e21-2775-4740-f81f-84a147685eaf" }, "source": [ "# display that in 3D\n", @@ -256,7 +257,7 @@ "ax.set_zlabel('Z')\n", "plt.show()" ], - "execution_count": 21, + "execution_count": 65, "outputs": [ { "output_type": "display_data", @@ -292,14 +293,14 @@ "base_uri": "https://localhost:8080/", "height": 51 }, - "outputId": "dd448807-c15b-4d83-ee48-c7f61ae87dce" + "outputId": "76089bdf-d7dc-4d9c-c755-fedbedf775db" }, "source": [ "from math import e, pi\n", "print(e)\n", "print(pi)" ], - "execution_count": 22, + "execution_count": 66, "outputs": [ { "output_type": "stream", @@ -320,7 +321,7 @@ "base_uri": "https://localhost:8080/", "height": 85 }, - "outputId": "7e27d1c6-c6c9-4bd2-8e99-801641a2f439" + "outputId": "d79c2dcb-30a9-4268-ec12-009fc43d0212" }, "source": [ "ultra_classic = np.multiply(5, roadking)\n", @@ -332,7 +333,7 @@ "print(shadow1300cc)\n", "print(victory)" ], - "execution_count": 23, + "execution_count": 67, "outputs": [ { "output_type": "stream", @@ -355,7 +356,7 @@ "base_uri": "https://localhost:8080/", "height": 432 }, - "outputId": "c7d611b8-e435-46ef-bc2c-30000186eb2b" + "outputId": "4857d096-fd09-497b-9297-9274e7c556f4" }, "source": [ "# Plotting scaled Vectors by 5, pi and e... also adding vector of pi and e\n", @@ -384,7 +385,7 @@ "\n", "plt.show()" ], - "execution_count": 24, + "execution_count": 68, "outputs": [ { "output_type": "display_data", @@ -426,7 +427,7 @@ "base_uri": "https://localhost:8080/", "height": 51 }, - "outputId": "7f0cf9df-1287-4710-8be9-eb4c89470cbd" + "outputId": "39c04e9b-9e52-4b4c-9a01-60020c897da0" }, "source": [ "# Column Vectors\n", @@ -435,7 +436,7 @@ "print(a)\n", "print(b)\n" ], - "execution_count": 31, + "execution_count": 69, "outputs": [ { "output_type": "stream", @@ -456,7 +457,7 @@ "base_uri": "https://localhost:8080/", "height": 378 }, - "outputId": "98eb7311-44af-4c42-d810-08510fa5b6a4" + "outputId": "49055090-c011-475e-fd15-c5032fb70693" }, "source": [ "fig, ax = plt.subplots(figsize=(9, 6))\n", @@ -468,7 +469,7 @@ "plt.arrow(0, 0, b[0], b[1], head_width=.2, head_length=0.2, linewidth=3, color = 'purple')\n", "plt.show()" ], - "execution_count": 43, + "execution_count": 70, "outputs": [ { "output_type": "display_data", @@ -504,7 +505,7 @@ "base_uri": "https://localhost:8080/", "height": 378 }, - "outputId": "516a5644-5dab-44bf-fa7e-8a2383fd684a" + "outputId": "278b04fd-544a-4fd6-dc47-6531000fe2b7" }, "source": [ "ab_dif = a - b\n", @@ -519,7 +520,7 @@ "plt.arrow(b[0], b[1], ab_dif[0], ab_dif[1], head_width=.2, head_length=0.2, linewidth=3, color = 'b')\n", "plt.show()" ], - "execution_count": 50, + "execution_count": 71, "outputs": [ { "output_type": "display_data", @@ -563,7 +564,7 @@ "c = np.array([7, 22, 4, 16])\n", "d = np.array([12, 6, 2, 9])" ], - "execution_count": 51, + "execution_count": 72, "outputs": [] }, { @@ -575,12 +576,12 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "f60c0039-9a03-4f92-c2aa-addf843784a5" + "outputId": "eadaa572-3644-4e8f-e8e0-2ac15ec0025c" }, "source": [ "print(\"Dot Product: \", np.dot(c, d))" ], - "execution_count": 52, + "execution_count": 73, "outputs": [ { "output_type": "stream", @@ -616,7 +617,7 @@ "base_uri": "https://localhost:8080/", "height": 119 }, - "outputId": "c372419e-d8d6-4398-f20b-e0531a57d6a6" + "outputId": "6db68acc-5d2c-483e-f55d-f25a45a36007" }, "source": [ "e = np.array([[5],[7],[2]])\n", @@ -624,7 +625,7 @@ "print(e)\n", "print(f)" ], - "execution_count": 55, + "execution_count": 74, "outputs": [ { "output_type": "stream", @@ -649,12 +650,12 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "3158149c-9632-45c7-d093-307778262144" + "outputId": "905612be-1b52-418a-e940-1a3fbd4d8c6a" }, "source": [ "print(\"Dot Product: \", (e*f).sum())" ], - "execution_count": 56, + "execution_count": 75, "outputs": [ { "output_type": "stream", @@ -688,47 +689,108 @@ "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", - "height": 153 + "height": 51 }, - "outputId": "2f904cf2-aaab-4a5e-98e7-098283bdff89" + "outputId": "ba8bfd3c-8c43-4b41-be27-12b288455a76" }, "source": [ + "# Find ||𝑔|| and then find||ℎ||\n", "g = np.array([[1],[1],[1],[8]])\n", "h = np.array([[3],[3],[3],[3]])\n", - "print(g)\n", - "print(h)" + "\n", + "gnorm = np.linalg.norm(g)\n", + "hnorm = np.linalg.norm(h)\n", + "\n", + "print(\"G's Norm: \", gnorm)\n", + "print(\"H's Norm: \", hnorm)" ], - "execution_count": 58, + "execution_count": 77, "outputs": [ { "output_type": "stream", "text": [ - "[[1]\n", - " [1]\n", - " [1]\n", - " [8]]\n", - "[[3]\n", - " [3]\n", - " [3]\n", - " [3]]\n" + "G's Norm: 8.18535277187245\n", + "H's Norm: 6.0\n" ], "name": "stdout" } ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "AIgXp5gjDEz5", + "colab_type": "text" + }, + "source": [ + "### G is longer" + ] + }, { "cell_type": "code", "metadata": { - "id": "05ZjSBiLArc5", + "id": "qgirZEfAb6CE", "colab_type": "code", "colab": {} }, "source": [ - "" + "# Show that the following vectors are orthogonal\n", + "l = [1,0] \n", + "m = [0,1]" ], - "execution_count": null, + "execution_count": 114, "outputs": [] }, + { + "cell_type": "code", + "metadata": { + "id": "FqYq21YlcAT4", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "3c02aaf3-54e4-4670-b241-d99960886dbf" + }, + "source": [ + "# using a plot\n", + "fig, ax = plt.subplots()\n", + "ax.grid()\n", + "plt.xlim(-.25,1.25) \n", + "plt.ylim(-.25,1.25) \n", + "\n", + "plt.arrow(0,0, l[0], l[1],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=10,\n", + " color ='lightblue',\n", + " )\n", + "plt.arrow(0,0, m[0], m[1],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=10,\n", + " color ='orange',\n", + " )\n", + "\n", + "plt.show;" + ], + "execution_count": 117, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, { "cell_type": "markdown", "metadata": { @@ -781,13 +843,46 @@ "metadata": { "id": "Z69c-uPtnbIx", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 102 + }, + "outputId": "2e0d149c-8401-4fdc-961c-6dd9d0a7cfb2" }, "source": [ - "" + "# A is 3 by 2\n", + "# B is 1 by 3\n", + "# C is 2 by 3\n", + "# D is 3 by 3\n", + "# E is 2 by 2\n", + "# THESE CAN BE MULTIPLIED TOGETHER: AC, AE, BA, BD, CA, CD, DA, EC\n", + "\n", + "A = [[1, 2], [2,4], [5,6]]\n", + "B = [2, 4, 6]\n", + "C = [[9, 6, 3], [4, 7, 11]]\n", + "D = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]\n", + "E = [[1, 3], [5, 7]]\n", + "\n", + "print(A)\n", + "print(B)\n", + "print(C)\n", + "print(D)\n", + "print(E)" ], - "execution_count": 10, - "outputs": [] + "execution_count": 86, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[1, 2], [2, 4], [5, 6]]\n", + "[2, 4, 6]\n", + "[[9, 6, 3], [4, 7, 11]]\n", + "[[1, 0, 0], [0, 1, 0], [0, 0, 1]]\n", + "[[1, 3], [5, 7]]\n" + ], + "name": "stdout" + } + ] }, { "cell_type": "markdown", @@ -804,12 +899,113 @@ "metadata": { "id": "zhKwiSItoE2F", "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "a5956077-0c13-41b4-fb84-35733d6a50fd" + }, + "source": [ + "# Multiply C * D\n", + "np.matmul(C, D)" + ], + "execution_count": 87, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 9, 6, 3],\n", + " [ 4, 7, 11]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 87 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "5klzavzQIZMZ", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "f44b4e66-2bff-40c7-8666-998a69d5b2d6" + }, + "source": [ + "# Multiply A * E\n", + "np.matmul(A, E)" + ], + "execution_count": 88, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[11, 17],\n", + " [22, 34],\n", + " [35, 57]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 88 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "QLa4qxJaIiAU", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "981c0761-c049-4cda-9a34-8316261cda08" + }, + "source": [ + "# Multiply B * A\n", + "np.matmul(B, A)" + ], + "execution_count": 89, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([40, 56])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 89 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "mxUC2TdsIydF", + "colab_type": "code", "colab": {} }, "source": [ - "" + "# The Dimensions of the resulting matrices are as follows:\n", + "# CD = 2 by 3 Retained the dimensions of C\n", + "# AE = 3 by 2 Retained the dimensions of A\n", + "# BA = 1 by 2 Retained the dimensions of B\n", + "#\n", + "#Therefore the first mulitpler of RowsXColumns retains dimension of the resulting matrix" ], - "execution_count": 10, + "execution_count": 90, "outputs": [] }, { @@ -838,12 +1034,213 @@ "metadata": { "id": "Wl3ElwgLqaAn", "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "outputId": "dbe530c7-b5a2-45bd-ad23-4fc1e07f955e" + }, + "source": [ + "# Create the Matrix and convert to a Dataframe\n", + "F = np.array([[20, 19, 18, 17], [16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]])\n", + "pd.DataFrame(F)" + ], + "execution_count": 92, + "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", + "
0123
020191817
116151413
21211109
38765
44321
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3\n", + "0 20 19 18 17\n", + "1 16 15 14 13\n", + "2 12 11 10 9\n", + "3 8 7 6 5\n", + "4 4 3 2 1" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 92 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "sDf6o9thL_AZ", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 173 + }, + "outputId": "e8875082-162b-4855-f5c3-46a751eee82b" + }, + "source": [ + "# Now I will Transpose the dataframe... nothing up my sleeve and PRESTO!!!\n", + "pd.DataFrame(F.T)" + ], + "execution_count": 93, + "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", + "
01234
020161284
119151173
218141062
31713951
\n", + "
" + ], + "text/plain": [ + " 0 1 2 3 4\n", + "0 20 16 12 8 4\n", + "1 19 15 11 7 3\n", + "2 18 14 10 6 2\n", + "3 17 13 9 5 1" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 93 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "fXfJOokjM1LK", + "colab_type": "code", "colab": {} }, "source": [ - "" + "# The diagonal numbers of F and F.T are the same 20, 15, 10 and 5\n", + "# Dimensions changed from (F)5 by 4 to (F.T)4 by 5" ], - "execution_count": 10, + "execution_count": null, "outputs": [] }, { @@ -881,12 +1278,188 @@ "metadata": { "id": "ZnqvZBOYqar3", "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 111 + }, + "outputId": "e8758165-08a4-467f-8ab8-b7fec9324de2" + }, + "source": [ + "# Creating G\n", + "G = np.array([[13, 14], [21, 12]])\n", + "pd.DataFrame(G)" + ], + "execution_count": 95, + "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", + "
01
01314
12112
\n", + "
" + ], + "text/plain": [ + " 0 1\n", + "0 13 14\n", + "1 21 12" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 95 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "tsYXwL2QOOmb", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 111 + }, + "outputId": "5ec6127b-d4de-4183-f739-39af690276d7" + }, + "source": [ + "# Creating I\n", + "I = np.array([[1, 0], [0, 1]])\n", + "pd.DataFrame(I)" + ], + "execution_count": 98, + "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", + "
01
010
101
\n", + "
" + ], + "text/plain": [ + " 0 1\n", + "0 1 0\n", + "1 0 1" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 98 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "MYksjpFROeCw", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "5e34d809-0c9a-48be-dda2-dfca24009c1c" + }, + "source": [ + "# Multipling them together\n", + "np.matmul(I, G)" + ], + "execution_count": 99, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[13, 14],\n", + " [21, 12]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 99 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vkQKLTnWOeBq", + "colab_type": "code", "colab": {} }, "source": [ "" ], - "execution_count": 10, + "execution_count": null, "outputs": [] }, { @@ -919,13 +1492,64 @@ "metadata": { "id": "5QShhoXyrjDS", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "5105d36b-8144-4f77-be7f-b9849dc382e4" }, "source": [ - "" + "# Find the determinant of a matrix\n", + "H = np.array([[12, 11], [7, 10]])\n", + "np.linalg.det(H)" ], - "execution_count": 10, - "outputs": [] + "execution_count": 102, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "43.000000000000014" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 102 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vUj9AMRhRnUH", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "f57cb21b-602f-4487-83ed-dfc80135c583" + }, + "source": [ + "# Find the determinant of a matrix\n", + "J = np.array([[0, 1, 2], [7, 10, 4], [3, 2, 0]])\n", + "np.linalg.det(J)" + ], + "execution_count": 101, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "-19.999999999999996" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 101 + } + ] }, { "cell_type": "markdown", @@ -942,13 +1566,152 @@ "metadata": { "id": "nyX6De2-rio1", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 111 + }, + "outputId": "13bec29c-da73-4c9a-8292-264f4686a63a" }, "source": [ - "" + "inverse_H = np.linalg.inv(H)\n", + "pd.DataFrame(inverse_H)" ], - "execution_count": 10, - "outputs": [] + "execution_count": 103, + "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", + "
01
00.232558-0.255814
1-0.1627910.279070
\n", + "
" + ], + "text/plain": [ + " 0 1\n", + "0 0.232558 -0.255814\n", + "1 -0.162791 0.279070" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 103 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Sv_CBB_AS3HR", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + }, + "outputId": "160b8a2e-2775-45ec-ddd7-8a8b01bbd67f" + }, + "source": [ + "inverse_J = np.linalg.inv(J)\n", + "pd.DataFrame(inverse_J)" + ], + "execution_count": 104, + "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", + "
012
00.4-0.200.80
1-0.60.30-0.70
20.8-0.150.35
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 0.4 -0.20 0.80\n", + "1 -0.6 0.30 -0.70\n", + "2 0.8 -0.15 0.35" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 104 + } + ] }, { "cell_type": "markdown", @@ -962,6 +1725,84 @@ "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": "ypO-rTVeT1JF", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "e85d4a6c-772a-401f-f14c-07eab17a8214" + }, + "source": [ + "# Finding HH^-1\n", + "np.matmul(H, inverse_H)" + ], + "execution_count": 105, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1.00000000e+00, 5.55111512e-16],\n", + " [2.22044605e-16, 1.00000000e+00]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 105 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "r9GeQlLNUwYJ", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "3a83d07b-ea7c-495b-b042-8335bfbb560c" + }, + "source": [ + "# Finding J^-1J\n", + "np.matmul(inverse_J, J)" + ], + "execution_count": 106, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 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]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 106 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "1Xk3EfoBVoq9", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# HH^-1 does not appear to be == J^-1J, but I am not sure why" + ], + "execution_count": 107, + "outputs": [] + }, { "cell_type": "markdown", "metadata": { @@ -982,6 +1823,167 @@ "- 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": "H7i6Rl_pV_fw", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# A function that can calculate the dot product of any two vectors of equal length that are passed to it\n", + "def cal_dot_prod (vector1, vector2):\n", + " return print(\"The Dot Product of these two vectors is: \", np.dot(vector1, vector2))\n" + ], + "execution_count": 108, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "XZDTBDJeX0Fc", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "a6840d24-2ca8-4186-885c-29cfbc726a9c" + }, + "source": [ + "# Testing the function\n", + "cal_dot_prod(c, d)" + ], + "execution_count": 111, + "outputs": [ + { + "output_type": "stream", + "text": [ + "The Dot Product of these two vectors is: 368\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "MP-bn9WdYZtY", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# Write a function that can calculate the norm of any vector\n", + "def cal_norm (vec1):\n", + " return print(\"The norm value of your vector is: \", np.linalg.norm(vec1))\n" + ], + "execution_count": 112, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "6k-ZwvOjbeyH", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "427a96d0-f7ba-4065-982c-8ca1f3fcb106" + }, + "source": [ + "# Testing Function \n", + "cal_norm(g)" + ], + "execution_count": 113, + "outputs": [ + { + "output_type": "stream", + "text": [ + "The norm value of your vector is: 8.18535277187245\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "5i_nZi5xdJKR", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZEXakIJEbk3l", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 265 + }, + "outputId": "cb4faca7-f61b-4781-be28-e7171f55eada" + }, + "source": [ + "# Plotting Orthogonal vectors\n", + "xaxe = [1,0]\n", + "yaxe = [0,1]\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.grid()\n", + "plt.xlim(-.25,1.25) \n", + "plt.ylim(-.25,1.25) \n", + "\n", + "plt.arrow(0,0, xaxe[0], xaxe[1],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=10,\n", + " color ='lightblue',\n", + " )\n", + "plt.arrow(0,0, yaxe[0], yaxe[1],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=10,\n", + " color ='orange',\n", + " )\n", + "\n", + "plt.show;" + ], + "execution_count": 118, + "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": "Q46N9ntKdevN", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] } ] } \ No newline at end of file From 190b1f5adefcf00d89ce56c523e04b85cb403abc Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Sun, 9 Aug 2020 10:51:01 -0600 Subject: [PATCH 04/10] Created using Colaboratory --- ...termediate_Linear_Algebra_Assignment.ipynb | 939 ++++++++++++++++++ 1 file changed, 939 insertions(+) create mode 100644 Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb diff --git a/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb b/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb new file mode 100644 index 00000000..c0b37d66 --- /dev/null +++ b/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb @@ -0,0 +1,939 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Ray_Arbizu_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": {} + }, + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import random\n", + "import math" + ], + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "SwGu56RquChW", + "colab_type": "code", + "colab": {} + }, + "source": [ + "wk01_sales = [3505, 2400, 3027, 2798, 3700, 3250, 2689]" + ], + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "sLP6oMpzuCQm", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "e3394c07-2623-47f4-b8b6-7e4b821f8127" + }, + "source": [ + "# The Mean\n", + "tsales01 = sum(wk01_sales)\n", + "mean_sales_wk01 = tsales01/len(wk01_sales)\n", + "print(\"Week 01 Sales Mean: \", mean_sales_wk01)" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Week 01 Sales Mean: 3052.714285714286\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "eli__EleuCCo", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "6825b1dd-1687-4a8e-a94f-f9bea13ef62e" + }, + "source": [ + "# Variance \n", + "def subtract_mean(number):\n", + " return number-mean_sales_wk01 \n", + "lambda x: x-mean_sales_wk01" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + ">" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 6 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "oHFpHB1IyWfL", + "colab_type": "code", + "colab": {} + }, + "source": [ + " # Using 'map' to apply that function to our list\n", + "distances = list(map(subtract_mean, wk01_sales))" + ], + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "4ImQcnu_yW5q", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# Squaring and summing all for those distances\n", + "squared_distances = list(map(lambda x:x**2, distances))" + ], + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZGzulV6OyWoE", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# How long is our list?\n", + "list_length=len(squared_distances)" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "_WuT2fBFyWWD", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "36453e71-9dac-45a5-c894-a876392c1956" + }, + "source": [ + "# Calcualting the Variance\n", + "variance_wk01_sales = sum(squared_distances)/list_length\n", + "print('{:.2f}'.format(variance_wk01_sales, 3))" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "text": [ + "183761.06\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "qzwixr3k3pcL", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "b43e6054-3f95-4493-bcc4-824fb4b0f593" + }, + "source": [ + "# Standard Deviation \n", + "print('{:.2f}'.format(math.sqrt(variance_wk01_sales)))\n", + "print('{:.2f}'.format(np.sqrt(variance_wk01_sales)))" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "text": [ + "428.67\n", + "428.67\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "BTZrXkK-3o5Y", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# Function to calulate and print the Mean, Variance and Standard Deveation \n", + "def weekly_sales(sales_list):\n", + " print('Mean:', np.mean(sales_list))\n", + " print('Var: ','{:.2f}'.format(np.var(sales_list)))\n", + " print('Std: ','{:.2f}'.format(np.std(sales_list)))" + ], + "execution_count": 19, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "gEdQpSfU3ou7", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "74234a13-f597-4ea8-db29-c8f26ff84997" + }, + "source": [ + "# Testing the function\n", + "weekly_sales(wk01_sales)" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Mean: 3052.714285714286\n", + "Var: 183761.06\n", + "Std: 428.67\n" + ], + "name": "stdout" + } + ] + }, + { + "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": "72D-To5tE618", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "fd4d1fd0-e256-4e9e-f3b5-e5888cf367ba" + }, + "source": [ + "df = pd.DataFrame({\"wk01_sales\": wk01_sales})\n", + "print('mean:', df['wk01_sales'].mean())" + ], + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "text": [ + "mean: 3052.714285714286\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "x1XWke3eGUvf", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "808ccdac-cf59-49a1-928c-ad6101424a12" + }, + "source": [ + "df['wk01_cust'] = pd.Series(wk01_cust)\n", + "print('{:.2f}'.format(df.cov().values[0][1]))" + ], + "execution_count": 28, + "outputs": [ + { + "output_type": "stream", + "text": [ + "7604.36\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "G7ZB0krot564", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# Number of customers who entered the store last week\n", + "wk01_cust = [127, 80, 105, 92, 120, 115, 93] " + ], + "execution_count": 21, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "NdrJYoMV-fSq", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "7ab6a808-c0ed-4d83-ed94-548f52c4d3e0" + }, + "source": [ + "print('The Covariance: ', '{:.2f}'.format(np.cov(wk01_sales, wk01_cust)[0][1]))" + ], + "execution_count": 31, + "outputs": [ + { + "output_type": "stream", + "text": [ + "The Covariance: 7604.36\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "v8VuOnjh-ffo", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "8972d083-7043-477e-c3fb-eac713fb653d" + }, + "source": [ + "" + ], + "execution_count": 30, + "outputs": [ + { + "output_type": "stream", + "text": [ + "The Correlation Coefficient: 0.962834\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-0vuubvB-e7Z", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": 34 + }, + "outputId": "c365cd6e-10ec-46e7-91fd-47db80c46b3b" + }, + "source": [ + "print('The Correlation Coefficient:','{:.6f}'.format(df['wk01_sales'].corr(df['wk01_cust'])))" + ], + "execution_count": 32, + "outputs": [ + { + "output_type": "stream", + "text": [ + "The Correlation Coefficient: 0.962834\n" + ], + "name": "stdout" + } + ] + }, + { + "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": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": [ + "Your text here" + ] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": "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": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": [ + "" + ] + }, + { + "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": "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": [ + "" + ] + }, + { + "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": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": 347 + }, + "outputId": "12502200-eafe-4e20-bfb7-2d539c6027cb" + }, + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\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": "iVBORw0KGgoAAAANSUhEUgAAAdkAAAFKCAYAAABRtSXvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAGBhJREFUeJzt3X9s1IX9x/FXe9craXvKlR4VDPgD\nvOFGjDXRBcVfBCWCWQIbtusQFxcnqWy6yAargHxDXALZEicSYfz4Y1sWO1GxS1QMvzK38CNIg+ki\nlrJsK20p1/YGJ6XH9XrfP/jSL3MtV9p73+fu4/PxF+U++fT9Tn88+/lcf+Qlk8mkAABA2uU7PQAA\nAG5FZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAw4k33CcPhaLpPqUCgSJFIT9rPm2lu2UNyzy5u2UNi\nl2zklj0kdrmaYNA/5GM5cSXr9XqcHiEt3LKH5J5d3LKHxC7ZyC17SOwyUjkRWQAAchGRBQDACJEF\nAMAIkQUAwAiRBQDACJEFAMAIkQUAwAiRBQDASMrf+HT+/HktX75cZ8+eVTwe13PPPaf7778/E7MB\nGKZYPKH2zvNKxBMqLHDPLw0A0i3THyspI/vuu+/qlltu0YsvvqiOjg499dRT+vDDD80HA5Baor9f\ndXub1dAUVnc0plJ/oSpCQVXOmipPPjeqgMuc+lhJGdlAIKDPP/9cknTu3DkFAgGzYQBcm7q9zdp9\n5NTAy13nYgMvV88OOTUWkHWc+lhJme958+apra1NjzzyiBYtWqTly5ebDQNg+GLxhBqawoM+1tDU\nqVg8keGJgOzk5MdKyivZ9957TxMnTtS2bdt0/Phx1dbW6p133hny+ECgyOSXL1/trxzkErfsIbln\nl1zdo73zvLqjsUEfi0R75fEVKFhWnOGp0idX3y5f5pY9pNzdxcmPlZSRPXr0qGbOnClJmjZtms6c\nOaNEIiGPZ/CQWvwppGDQb/In9DLNLXtI7tkll/dIxBMq9Req69x/f/II+McocTGes7vl8tvlSm7Z\nQ8rtXaw/Vkb1p+5uuukmHTt2TJLU2tqq4uLiIQMLIHMKCzyqCAUHfawiVMZ3GQP/x8mPlZRXspWV\nlaqtrdWiRYvU19enNWvWmA0D4NpUzpoq6dLzSpForwL+MaoIlQ38P4BLnPpYyUsmk8l0ntDidkIu\n36a4klv2kNyzi1v2iMUT8vgKlLgYd8UVrFveLm7ZQ3LPLhYfK6O6XQwg+xUWeDShrNgVgQUsZfpj\nhcgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITI\nAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIA\nYITIAgBgxJvqgLfeekv19fUDLzc2NqqhocF0KAAA3CBlZBcuXKiFCxdKkg4fPqwPPvjAfCgAANzg\nmm4Xb9y4UTU1NVazAADgKsOO7KeffqoJEyYoGAxazgMAgGvkJZPJ5HAOXL16tebNm6dvfvObVz2u\nry8hr9eTluEAAMhlw47snDlz9Kc//Uk+n++qx4XD0bQMdqVg0G9y3kxzyx6Se3Zxyx4Su2Qjt+wh\nsUuq8w1lWLeLOzo6VFxcnDKwAADg/w0rsuFwWKWlpdazAADgKsOK7PTp07V161brWQAAcBV+4xMA\nAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABG\niCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogs\nAABGiCwAAEaGFdn6+np961vf0oIFC7R//37jkQAAcIeUkY1EItq4caP+8Ic/aNOmTdqzZ08m5gIA\nIOd5Ux1w4MABzZgxQyUlJSopKdHatWszMRcAADkv5ZXsqVOn1NvbqyVLlqi6uloHDhzIxFwAAOS8\nvGQymbzaAb/5zW909OhRvf7662pra9PixYu1b98+5eXlDXp8X19CXq/HZFgAAHJJytvF48aNU0VF\nhbxeryZPnqzi4mJ1d3dr3Lhxgx4fifSkfchg0K9wOJr282aaW/aQ3LOLW/aQ2CUbuWUPiV1SnW8o\nKW8Xz5w5UwcPHlR/f78ikYh6enoUCATSNhwAAG6V8kq2vLxcc+bM0RNPPCFJWrlypfLz+fFaAABS\nSRlZSaqqqlJVVZX1LAAAuAqXpAAAGCGyAAAYIbIAABghsgAAGCGyAAAYIbIAABghsgAAGCGyAAAY\nIbIAABghsgAAGCGyAAAYIbIAABghsgAAGCGyAAAYIbIAABghsgAAGCGyAAAYIbIAABghsgAAGCGy\nAAAYIbIAABghsgAAGCGyAAAYIbIAABghsgBgIBZPqL3zvGLxhNOjwEHeVAccOnRIzz//vG677TZJ\nUigU0qpVq8wHA4BclOjvV93eZjU0hdUdjanUX6iKUFCVs6bKk891zVdNyshK0j333KPXXnvNehYA\nyHl1e5u1+8ipgZe7zsUGXq6eHXJqLDiEL6sAIE1i8YQamsKDPtbQ1Mmt46+gYV3JNjc3a8mSJTp7\n9qyWLl2q++67b8hjA4Eieb2etA14WTDoT/s5neCWPST37OKWPSR2cVp753l1R2ODPhaJ9srjK1Cw\nrDjDU6VPLr5NhpKpXVJG9uabb9bSpUv12GOPqaWlRYsXL9ZHH30kn8836PGRSE/ahwwG/QqHo2k/\nb6a5ZQ/JPbu4ZQ+JXbJBIp5Qqb9QXef+O7QB/xglLsZzci8pd98mg0n3LlcLdsrbxeXl5Zo7d67y\n8vI0efJklZWVqaOjI23DAYBbFBZ4VBEKDvpYRahMhQXpv8uH7JbySra+vl7hcFg/+MEPFA6H1dXV\npfLy8kzMBgA5p3LWVEmXnoONRHsV8I9RRahs4P/x1ZIysrNmzdKyZcu0Z88exeNxrVmzZshbxQDw\nVefJz1f17JC+/eAUeXwFSlyMcwX7FZYysiUlJdq0aVMmZgEA1ygs8ChYVuya5zExMvwIDwAARogs\nAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAA\nRogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEay\nPrKxeELtnecViyecHgUAgGviHc5Bvb29evzxx1VTU6MFCxZYzyRJSvT3q25vsxqawuqOxlTqL1RF\nKKjKWVPlyc/6rw0AABheZN944w1df/311rP8h7q9zdp95NTAy13nYgMvV88OZXQWAABGIuUl4cmT\nJ9Xc3KyHHnooA+NcEosn1NAUHvSxhqZObh0DAHJCyivZdevWadWqVdq5c+ewThgIFMnr9YxqqPbO\n8+qOxgZ9LBLtlcdXoGBZ8aheh1OCQb/TI6SNW3Zxyx4Su2Qjt+whsctIXDWyO3fu1J133qlJkyYN\n+4SRSM+oh0rEEyr1F6rr3H+HNuAfo8TFuMLh6KhfT6YFg/6cnHswbtnFLXtI7JKN3LKHxC6pzjeU\nq0Z2//79amlp0f79+3X69Gn5fD7dcMMNuvfee9M23GAKCzyqCAX/4znZyypCZSosGN2VMgAAmXDV\nyL766qsD/96wYYNuvPFG88BeVjlrqqRLz8FGor0K+MeoIlQ28P8AAGS7YX13sRM8+fmqnh3Stx+c\nIo+vQImLca5gAQA5ZdiR/dGPfmQ5x5AKCzwKlhW75rkAAMBXB7/VAQAAI0QWAAAjRBYAACNEFgAA\nI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNE\nFgAAI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNEFgAAI95UB1y4cEEr\nVqxQV1eXYrGYampq9PDDD2diNgAAclrKyO7bt0/Tp0/XM888o9bWVj399NNEFgCAYUgZ2blz5w78\nu729XeXl5aYDAQDgFnnJZDI5nAOrqqp0+vRpbdq0SdOmTRvyuL6+hLxeT9oGBAAgVw07spL02Wef\n6Wc/+5nq6+uVl5c36DHhcDRtw10WDPpNzptpbtlDcs8ubtlDYpds5JY9JHZJdb6hpPzu4sbGRrW3\nt0uSbr/9diUSCXV3d6dtOAAA3CplZI8cOaLt27dLkjo7O9XT06NAIGA+GAAAuS5lZKuqqtTd3a3q\n6mr98Ic/1OrVq5Wfz4/XAgCQSsrvLh4zZox+9atfZWIWAABchUtSAACMEFkAAIwQWQAAjBBZAACM\nEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjBBZ\nAACMEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjHiHc9D69ev1ySefqK+v\nT88++6weffRR67kAc9Gei2o7EZbfly9/kc/pcQC4UMrIHjx4UCdOnFBdXZ0ikYjmz59PZJHTLvb1\n6ZXfHlVr+Av1J6X8POnGYIleWnyXfN5hfd0JAMOS8nbx3XffrV//+teSpOuuu04XLlxQIpEwHwyw\n8spvj6rlzKXASlJ/Umo584Ve+e1RZwcD4DopI+vxeFRUVCRJ2rFjhx544AF5PB7zwQAL0Z6Lag1/\nMehjreEvFO25mOGJALjZsO+N7d69Wzt27ND27duvelwgUCSvN/0RDgb9aT+nE9yyh5Sbu7SdCA9c\nwX5Zf1KKXuzXrTfl3l6X5eLbZChu2cUte0jsMhLDiuzHH3+sTZs2aevWrfL7rz5YJNKTlsGuFAz6\nFQ5H037eTHPLHlLu7uL35Ss/T4OGNj/v0uO5uJeUu2+TwbhlF7fsIbFLqvMNJeXt4mg0qvXr12vz\n5s0aO3Zs2oYCnOAv8unGYMmgj90YLOG7jAGkVcrIvv/++4pEInrhhRf05JNP6sknn1RbW1smZgNM\nvLT4Lk0aX6L8vEsv5+dJk8Zf+u5iAEinlLeLKysrVVlZmYlZgIzweb36n6fvUbTnoqIX+/k5WQBm\n+KFAfGX5i3y69Sb3PM8EIPvwaxUBADBCZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAwQmQBADBCZAEA\nMEJkAQAwQmQBADBCZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAwQmQBADBC\nZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAwMqzINjU1afbs2fr9739vPQ8AAK6RMrI9PT1au3atZsyY\nkYl5AABwjZSR9fl82rJli8aPH5+JeQAAcA1vygO8Xnm9KQ8DAABfkvZ6BgJF8no96T6tgkF/2s/p\nBLfsIblnF7fsIbFLNnLLHhK7jETaIxuJ9KT7lAoG/QqHo2k/b6a5ZQ/JPbu4ZQ+JXbKRW/aQ2CXV\n+YbCj/AAAGAk5ZVsY2Oj1q1bp9bWVnm9Xu3atUsbNmzQ2LFjMzEfAAA5K2Vkp0+frt/97neZmAUA\nAFfhdjEAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAA\nRogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaI\nLAAARogsAABGiCwAAEa8wznoF7/4hY4dO6a8vDzV1tbqjjvusJ4LWSwWT6i987wS8YQKCzxOjwMA\nWStlZA8fPqx//vOfqqur08mTJ1VbW6u6urpMzIYsk+jvV93eZjU0hdUdjanUX6iKUFCVs6bKk89N\nEQD4spSfGQ8cOKDZs2dLkqZMmaKzZ8/qiy++MB8M2adub7N2HzmlrnMxJZNS17mYdh85pbq9zU6P\nBgBZKWVkOzs7FQgEBl4uLS1VOBw2HQrZJxZPqKFp8Ld7Q1OnYvFEhicCgOw3rOdkr5RMJq/6eCBQ\n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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "EZTA6Tj6BGDb", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file From 8a32de9b2662131f718b35c55eabd54bfd730ed7 Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Tue, 11 Aug 2020 20:44:28 -0600 Subject: [PATCH 05/10] Created using Colaboratory --- ...termediate_Linear_Algebra_Assignment.ipynb | 500 ++++++++++++++++-- 1 file changed, 452 insertions(+), 48 deletions(-) diff --git a/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb b/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb index c0b37d66..75044cb4 100644 --- a/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb +++ b/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb @@ -58,7 +58,7 @@ "import random\n", "import math" ], - "execution_count": 12, + "execution_count": 30, "outputs": [] }, { @@ -83,7 +83,7 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "e3394c07-2623-47f4-b8b6-7e4b821f8127" + "outputId": "6507a9cd-6b46-43c2-b2fe-13b36ffd705b" }, "source": [ "# The Mean\n", @@ -111,7 +111,7 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "6825b1dd-1687-4a8e-a94f-f9bea13ef62e" + "outputId": "55fbf800-8868-44f1-b3e0-42d9329f7a36" }, "source": [ "# Variance \n", @@ -119,7 +119,7 @@ " return number-mean_sales_wk01 \n", "lambda x: x-mean_sales_wk01" ], - "execution_count": 6, + "execution_count": 4, "outputs": [ { "output_type": "execute_result", @@ -131,7 +131,7 @@ "metadata": { "tags": [] }, - "execution_count": 6 + "execution_count": 4 } ] }, @@ -146,7 +146,7 @@ " # Using 'map' to apply that function to our list\n", "distances = list(map(subtract_mean, wk01_sales))" ], - "execution_count": 7, + "execution_count": 5, "outputs": [] }, { @@ -160,7 +160,7 @@ "# Squaring and summing all for those distances\n", "squared_distances = list(map(lambda x:x**2, distances))" ], - "execution_count": 8, + "execution_count": 6, "outputs": [] }, { @@ -174,7 +174,7 @@ "# How long is our list?\n", "list_length=len(squared_distances)" ], - "execution_count": 9, + "execution_count": 7, "outputs": [] }, { @@ -186,14 +186,14 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "36453e71-9dac-45a5-c894-a876392c1956" + "outputId": "c14f4905-be29-4329-a13a-ba240cc221a6" }, "source": [ "# Calcualting the Variance\n", "variance_wk01_sales = sum(squared_distances)/list_length\n", "print('{:.2f}'.format(variance_wk01_sales, 3))" ], - "execution_count": 10, + "execution_count": 8, "outputs": [ { "output_type": "stream", @@ -213,14 +213,14 @@ "base_uri": "https://localhost:8080/", "height": 51 }, - "outputId": "b43e6054-3f95-4493-bcc4-824fb4b0f593" + "outputId": "9d390887-5c28-49be-de55-3fb1dfcf3fe7" }, "source": [ "# Standard Deviation \n", "print('{:.2f}'.format(math.sqrt(variance_wk01_sales)))\n", "print('{:.2f}'.format(np.sqrt(variance_wk01_sales)))" ], - "execution_count": 13, + "execution_count": 9, "outputs": [ { "output_type": "stream", @@ -246,7 +246,7 @@ " print('Var: ','{:.2f}'.format(np.var(sales_list)))\n", " print('Std: ','{:.2f}'.format(np.std(sales_list)))" ], - "execution_count": 19, + "execution_count": 10, "outputs": [] }, { @@ -258,13 +258,13 @@ "base_uri": "https://localhost:8080/", "height": 68 }, - "outputId": "74234a13-f597-4ea8-db29-c8f26ff84997" + "outputId": "c21521dd-54be-4417-9e87-f884ab33d87e" }, "source": [ "# Testing the function\n", "weekly_sales(wk01_sales)" ], - "execution_count": 20, + "execution_count": 11, "outputs": [ { "output_type": "stream", @@ -296,13 +296,13 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "fd4d1fd0-e256-4e9e-f3b5-e5888cf367ba" + "outputId": "9be617c4-a44c-465f-f55d-a88cee8ace46" }, "source": [ "df = pd.DataFrame({\"wk01_sales\": wk01_sales})\n", "print('mean:', df['wk01_sales'].mean())" ], - "execution_count": 27, + "execution_count": 12, "outputs": [ { "output_type": "stream", @@ -322,13 +322,13 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "808ccdac-cf59-49a1-928c-ad6101424a12" + "outputId": "7090044c-8493-48f2-f0a1-bafc95d8061d" }, "source": [ "df['wk01_cust'] = pd.Series(wk01_cust)\n", "print('{:.2f}'.format(df.cov().values[0][1]))" ], - "execution_count": 28, + "execution_count": 16, "outputs": [ { "output_type": "stream", @@ -350,7 +350,7 @@ "# Number of customers who entered the store last week\n", "wk01_cust = [127, 80, 105, 92, 120, 115, 93] " ], - "execution_count": 21, + "execution_count": 15, "outputs": [] }, { @@ -362,12 +362,12 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "7ab6a808-c0ed-4d83-ed94-548f52c4d3e0" + "outputId": "92936670-17e3-4742-8d46-702b161fa032" }, "source": [ "print('The Covariance: ', '{:.2f}'.format(np.cov(wk01_sales, wk01_cust)[0][1]))" ], - "execution_count": 31, + "execution_count": 17, "outputs": [ { "output_type": "stream", @@ -383,25 +383,13 @@ "metadata": { "id": "v8VuOnjh-ffo", "colab_type": "code", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 34 - }, - "outputId": "8972d083-7043-477e-c3fb-eac713fb653d" + "colab": {} }, "source": [ "" ], - "execution_count": 30, - "outputs": [ - { - "output_type": "stream", - "text": [ - "The Correlation Coefficient: 0.962834\n" - ], - "name": "stdout" - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "code", @@ -435,12 +423,12 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "c365cd6e-10ec-46e7-91fd-47db80c46b3b" + "outputId": "b792b7dd-6d78-44bb-d8bc-69b6142b3ef5" }, "source": [ "print('The Correlation Coefficient:','{:.6f}'.format(df['wk01_sales'].corr(df['wk01_cust'])))" ], - "execution_count": 32, + "execution_count": 18, "outputs": [ { "output_type": "stream", @@ -471,11 +459,380 @@ "colab": {} }, "source": [ - "" + "url ='https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_clean.csv'\n", + "titanic_df = pd.read_csv(url)" ], - "execution_count": null, + "execution_count": 19, "outputs": [] }, + { + "cell_type": "code", + "metadata": { + "id": "gpzIkcFiWLvX", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 328 + }, + "outputId": "bf8589f8-65d1-446a-9c9d-cbd87b9bccc5" + }, + "source": [ + "titanic_df.cov()" + ], + "execution_count": 21, + "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": 21 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "R_u5Dw_gX9CH", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 328 + }, + "outputId": "36504511-15b7-41da-a5e5-24e96ec6dbfb" + }, + "source": [ + "titanic_df.corr()" + ], + "execution_count": 22, + "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": 22 + } + ] + }, { "cell_type": "markdown", "metadata": { @@ -493,7 +850,8 @@ "colab_type": "text" }, "source": [ - "## 2.1 Plot two vectors that are orthogonal to each other. What is a synonym for orthogonal?" + "## 2.1 Plot two vectors that are orthogonal to each other. What is a synonym for orthogonal?\n", + "> Perpendicular could be a synonym for orthogonal. " ] }, { @@ -501,13 +859,54 @@ "metadata": { "id": "YLSBk7hJvvCx", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 335 + }, + "outputId": "7c04d858-63b1-474f-883c-313e94d56bbd" }, "source": [ - "" + "# Axis Bounds\n", + "plt.xlim(-1,2) \n", + "plt.ylim(-1,2)\n", + "\n", + "# Unit Vectors\n", + "i_hat = [1.5,0]\n", + "j_hat = [0,1.5]\n", + "\n", + "# Fix Axes\n", + "plt.axes().set_aspect('equal')\n", + "\n", + "# PLot Vectors\n", + "plt.arrow(0, 0, i_hat[0], i_hat[1], linewidth=3, head_width=.05, head_length=0.05, color ='pink')\n", + "plt.arrow(0, 0, j_hat[0], j_hat[1], linewidth=3, head_width=.05, head_length=0.05, color ='blue')\n", + "plt.title(\"basis vectors in R^2\")\n", + "plt.show()" ], - "execution_count": null, - "outputs": [] + "execution_count": 26, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:10: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", + " # Remove the CWD from sys.path while we load stuff.\n" + ], + "name": "stderr" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] }, { "cell_type": "markdown", @@ -566,9 +965,14 @@ "colab": {} }, "source": [ - "" + "C = np.array([[1], [-15], [6], [20]])\n", + "\n", + "cnorm = np.linalg.norm(C)\n", + "#cdot = np.dot(C, C)\n", + "#ctrans = pd.DataFram(c)\n", + "\n" ], - "execution_count": null, + "execution_count": 35, "outputs": [] }, { From 5a90e4e5b4564135f3ebd147242b1172c9c2d0cd Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Thu, 13 Aug 2020 01:05:05 -0600 Subject: [PATCH 06/10] Created using Colaboratory --- ...termediate_Linear_Algebra_Assignment.ipynb | 620 +++++++++++++++--- 1 file changed, 547 insertions(+), 73 deletions(-) diff --git a/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb b/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb index 75044cb4..1443107a 100644 --- a/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb +++ b/Ray_Arbizu_LS_DS_132_Intermediate_Linear_Algebra_Assignment.ipynb @@ -58,7 +58,7 @@ "import random\n", "import math" ], - "execution_count": 30, + "execution_count": 14, "outputs": [] }, { @@ -71,7 +71,7 @@ "source": [ "wk01_sales = [3505, 2400, 3027, 2798, 3700, 3250, 2689]" ], - "execution_count": 2, + "execution_count": 15, "outputs": [] }, { @@ -83,7 +83,7 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "6507a9cd-6b46-43c2-b2fe-13b36ffd705b" + "outputId": "af25749b-d8e8-4d0d-cd6f-a1a700d7fd0a" }, "source": [ "# The Mean\n", @@ -91,7 +91,7 @@ "mean_sales_wk01 = tsales01/len(wk01_sales)\n", "print(\"Week 01 Sales Mean: \", mean_sales_wk01)" ], - "execution_count": 3, + "execution_count": 16, "outputs": [ { "output_type": "stream", @@ -111,7 +111,7 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "55fbf800-8868-44f1-b3e0-42d9329f7a36" + "outputId": "5bea7cda-dbd6-4274-8ae5-78af45ec5127" }, "source": [ "# Variance \n", @@ -119,7 +119,7 @@ " return number-mean_sales_wk01 \n", "lambda x: x-mean_sales_wk01" ], - "execution_count": 4, + "execution_count": 17, "outputs": [ { "output_type": "execute_result", @@ -131,7 +131,7 @@ "metadata": { "tags": [] }, - "execution_count": 4 + "execution_count": 17 } ] }, @@ -146,7 +146,7 @@ " # Using 'map' to apply that function to our list\n", "distances = list(map(subtract_mean, wk01_sales))" ], - "execution_count": 5, + "execution_count": 18, "outputs": [] }, { @@ -160,7 +160,7 @@ "# Squaring and summing all for those distances\n", "squared_distances = list(map(lambda x:x**2, distances))" ], - "execution_count": 6, + "execution_count": 19, "outputs": [] }, { @@ -174,7 +174,7 @@ "# How long is our list?\n", "list_length=len(squared_distances)" ], - "execution_count": 7, + "execution_count": 20, "outputs": [] }, { @@ -186,14 +186,14 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "c14f4905-be29-4329-a13a-ba240cc221a6" + "outputId": "8caee0e4-02d8-4815-f646-fd4d5ea7295b" }, "source": [ "# Calcualting the Variance\n", "variance_wk01_sales = sum(squared_distances)/list_length\n", "print('{:.2f}'.format(variance_wk01_sales, 3))" ], - "execution_count": 8, + "execution_count": 21, "outputs": [ { "output_type": "stream", @@ -213,14 +213,14 @@ "base_uri": "https://localhost:8080/", "height": 51 }, - "outputId": "9d390887-5c28-49be-de55-3fb1dfcf3fe7" + "outputId": "d408c27d-2c81-4706-9b8e-12320ce6c139" }, "source": [ "# Standard Deviation \n", "print('{:.2f}'.format(math.sqrt(variance_wk01_sales)))\n", "print('{:.2f}'.format(np.sqrt(variance_wk01_sales)))" ], - "execution_count": 9, + "execution_count": 22, "outputs": [ { "output_type": "stream", @@ -246,7 +246,7 @@ " print('Var: ','{:.2f}'.format(np.var(sales_list)))\n", " print('Std: ','{:.2f}'.format(np.std(sales_list)))" ], - "execution_count": 10, + "execution_count": 23, "outputs": [] }, { @@ -258,13 +258,13 @@ "base_uri": "https://localhost:8080/", "height": 68 }, - "outputId": "c21521dd-54be-4417-9e87-f884ab33d87e" + "outputId": "68251c05-2069-4123-885b-efa32ce1aed2" }, "source": [ "# Testing the function\n", "weekly_sales(wk01_sales)" ], - "execution_count": 11, + "execution_count": 24, "outputs": [ { "output_type": "stream", @@ -296,13 +296,13 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "9be617c4-a44c-465f-f55d-a88cee8ace46" + "outputId": "193cdd26-26b3-4bb0-8226-f513a5a733f5" }, "source": [ "df = pd.DataFrame({\"wk01_sales\": wk01_sales})\n", "print('mean:', df['wk01_sales'].mean())" ], - "execution_count": 12, + "execution_count": 25, "outputs": [ { "output_type": "stream", @@ -313,6 +313,19 @@ } ] }, + { + "cell_type": "code", + "metadata": { + "id": "9S2l8hJiPvJz", + "colab_type": "code", + "colab": {} + }, + "source": [ + "wk01_cust = [127, 80, 105, 92, 120, 115, 93] " + ], + "execution_count": 26, + "outputs": [] + }, { "cell_type": "code", "metadata": { @@ -322,13 +335,13 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "7090044c-8493-48f2-f0a1-bafc95d8061d" + "outputId": "8dfd9c55-3446-4a2d-ee37-ec3b863e4a91" }, "source": [ "df['wk01_cust'] = pd.Series(wk01_cust)\n", "print('{:.2f}'.format(df.cov().values[0][1]))" ], - "execution_count": 16, + "execution_count": 27, "outputs": [ { "output_type": "stream", @@ -350,7 +363,7 @@ "# Number of customers who entered the store last week\n", "wk01_cust = [127, 80, 105, 92, 120, 115, 93] " ], - "execution_count": 15, + "execution_count": 28, "outputs": [] }, { @@ -362,12 +375,12 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "92936670-17e3-4742-8d46-702b161fa032" + "outputId": "7f92a9c8-e1ff-4184-a6a0-a22fd5332054" }, "source": [ "print('The Covariance: ', '{:.2f}'.format(np.cov(wk01_sales, wk01_cust)[0][1]))" ], - "execution_count": 17, + "execution_count": 29, "outputs": [ { "output_type": "stream", @@ -388,7 +401,7 @@ "source": [ "" ], - "execution_count": null, + "execution_count": 29, "outputs": [] }, { @@ -401,7 +414,7 @@ "source": [ "" ], - "execution_count": null, + "execution_count": 29, "outputs": [] }, { @@ -423,12 +436,12 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "b792b7dd-6d78-44bb-d8bc-69b6142b3ef5" + "outputId": "1e239934-b0dc-47fa-a815-4582cbf4dfdd" }, "source": [ "print('The Correlation Coefficient:','{:.6f}'.format(df['wk01_sales'].corr(df['wk01_cust'])))" ], - "execution_count": 18, + "execution_count": 30, "outputs": [ { "output_type": "stream", @@ -462,7 +475,7 @@ "url ='https://raw.githubusercontent.com/Geoyi/Cleaning-Titanic-Data/master/titanic_clean.csv'\n", "titanic_df = pd.read_csv(url)" ], - "execution_count": 19, + "execution_count": 31, "outputs": [] }, { @@ -474,12 +487,12 @@ "base_uri": "https://localhost:8080/", "height": 328 }, - "outputId": "bf8589f8-65d1-446a-9c9d-cbd87b9bccc5" + "outputId": "7df8f9d7-704f-42f8-c09b-c9cbc9cfbf9c" }, "source": [ "titanic_df.cov()" ], - "execution_count": 21, + "execution_count": 32, "outputs": [ { "output_type": "execute_result", @@ -645,7 +658,7 @@ "metadata": { "tags": [] }, - "execution_count": 21 + "execution_count": 32 } ] }, @@ -658,12 +671,12 @@ "base_uri": "https://localhost:8080/", "height": 328 }, - "outputId": "36504511-15b7-41da-a5e5-24e96ec6dbfb" + "outputId": "7616eac8-53ee-4454-99f4-4c9d19f57475" }, "source": [ "titanic_df.corr()" ], - "execution_count": 22, + "execution_count": 33, "outputs": [ { "output_type": "execute_result", @@ -829,7 +842,7 @@ "metadata": { "tags": [] }, - "execution_count": 22 + "execution_count": 33 } ] }, @@ -863,7 +876,7 @@ "base_uri": "https://localhost:8080/", "height": 335 }, - "outputId": "7c04d858-63b1-474f-883c-313e94d56bbd" + "outputId": "c497da5c-b954-4c20-e0e0-ffbb6833528d" }, "source": [ "# Axis Bounds\n", @@ -883,7 +896,7 @@ "plt.title(\"basis vectors in R^2\")\n", "plt.show()" ], - "execution_count": 26, + "execution_count": 34, "outputs": [ { "output_type": "stream", @@ -934,7 +947,7 @@ "source": [ "" ], - "execution_count": null, + "execution_count": 34, "outputs": [] }, { @@ -962,18 +975,39 @@ "metadata": { "id": "IlV_uaYK1EQB", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "outputId": "81b65bee-9a9a-43b0-f16f-627d2e24e511" }, "source": [ - "C = np.array([[1], [-15], [6], [20]])\n", + "C = np.array([[2], [-15], [6], [20]])\n", + "rowC = np.array([2, -15, 6, 20])\n", + "\n", + "cnorm = np.linalg.norm(C)**2\n", + "cdot = np.dot(rowC, C)\n", + "ctrans = rowC.T\n", + "\n", + "\n", "\n", - "cnorm = np.linalg.norm(C)\n", - "#cdot = np.dot(C, C)\n", - "#ctrans = pd.DataFram(c)\n", + "print(cnorm)\n", + "print(cdot)\n", + "print(np.matmul(ctrans, rowC))\n", "\n" ], "execution_count": 35, - "outputs": [] + "outputs": [ + { + "output_type": "stream", + "text": [ + "665.0\n", + "[665]\n", + "665\n" + ], + "name": "stdout" + } + ] }, { "cell_type": "markdown", @@ -1033,11 +1067,37 @@ "colab": {} }, "source": [ - "" + "f = np.array([4, 11, 9, 2])" ], - "execution_count": null, + "execution_count": 36, "outputs": [] }, + { + "cell_type": "code", + "metadata": { + "id": "CKpbXcTe_huD", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "8dfc4f13-fb0b-473c-8b62-a703aa38a568" + }, + "source": [ + "f_hat = f/np.linalg.norm(f)\n", + "print(f_hat)" + ], + "execution_count": 37, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[0.26846242 0.73827166 0.60404045 0.13423121]\n" + ], + "name": "stdout" + } + ] + }, { "cell_type": "markdown", "metadata": { @@ -1058,6 +1118,122 @@ "## 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": "1_4FZmyu_-I2", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 303 + }, + "outputId": "930a4b37-46cc-49f9-a8a4-cbcc54c8ce97" + }, + "source": [ + "# Linearly dependent vectors\n", + "vector_1 = [0.8, -1.5]\n", + "vector_2 = np.multiply(vector_1, 2)\n", + "print(vector_1, '\\n', vector_2)\n", + "\n", + "# Plot the vectors\n", + "\n", + "fig, ax = plt.subplots(figsize=(4,4))\n", + "ax.grid()\n", + "plt.xlim(-4,4) \n", + "plt.ylim(-4,4)\n", + "\n", + "for myvect, mycolor, width in [(vector_1, 'cyan', 15), (vector_2, 'green', 5)]:\n", + " plt.arrow(0,0,\n", + " myvect[0], \n", + " myvect[1], \n", + " head_width=.2, \n", + " head_length=0.2, \n", + " linewidth=width, \n", + " color=mycolor)" + ], + "execution_count": 38, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[0.8, -1.5] \n", + " [ 1.6 -3. ]\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "-b-3Q-DT_9zQ", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 303 + }, + "outputId": "139886a5-0b9e-4378-8e57-072e0f996944" + }, + "source": [ + "# Linearly independent vectors, not orthogonal\n", + "vector_1 = np.random.randint(low=-5, high=5, size=2)\n", + "vector_2 = np.random.randint(low=-5, high=5, size=2)\n", + "print(vector_1, '\\n', vector_2)\n", + "\n", + "# Set up the grid\n", + "fig, ax = plt.subplots(figsize=(4,4))\n", + "ax.grid()\n", + "plt.xlim(-6,6) \n", + "plt.ylim(-6,6)\n", + "\n", + "# Plot the vectors\n", + "for myvect, mycolor, width in [(vector_1, 'cyan', 15), (vector_2, 'green', 5)]:\n", + " plt.arrow(0,0,\n", + " myvect[0], \n", + " myvect[1], \n", + " head_width=.2, \n", + " head_length=0.2, \n", + " linewidth=width, \n", + " color=mycolor)" + ], + "execution_count": 39, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[-3 -1] \n", + " [4 3]\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, { "cell_type": "markdown", "metadata": { @@ -1081,7 +1257,9 @@ "g = \\begin{bmatrix} 1 & 2 \\end{bmatrix}\n", "\\qquad\n", "h = \\begin{bmatrix} 4 & 8 \\end{bmatrix}\n", - "\\end{align}" + "\\end{align}\n", + "\n", + "> The span is the graphical area that we're able to cover via a linear combination of a set of vectors." ] }, { @@ -1089,13 +1267,59 @@ "metadata": { "id": "G2LK2RWL39Q4", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 517 + }, + "outputId": "fcda030c-3df8-4972-b114-7f4472b9174a" }, "source": [ - "" + "# The two vectors\n", + "g = np.array([1, 2])\n", + "h = np.array([4, 8])\n", + "print(g)\n", + "print(h)\n", + "\n", + "# Plot them on a grid\n", + "fig, ax = plt.subplots(figsize=(8,8))\n", + "ax.grid()\n", + "plt.xlim(-1,9) \n", + "plt.ylim(-1,9)\n", + "\n", + "# Display\n", + "for myvect, mycolor, width in [(g, 'cyan', 15), (h, 'chartreuse', 5)]:\n", + " plt.arrow(0,0,\n", + " myvect[0], \n", + " myvect[1], \n", + " head_width=.2, \n", + " head_length=0.2, \n", + " linewidth=width, \n", + " color=mycolor)\n" ], - "execution_count": null, - "outputs": [] + "execution_count": 40, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[1 2]\n", + "[4 8]\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] }, { "cell_type": "markdown", @@ -1112,7 +1336,9 @@ "m = \\begin{bmatrix} -1 & 0 & 7 \\end{bmatrix}\n", "\\qquad\n", "n = \\begin{bmatrix} 4 & 8 & 2\\end{bmatrix}\n", - "\\end{align}" + "\\end{align}\n", + "\n", + "> The span for 'l' and 'n' are confined to the combination on the same line. However for 'ln' and 'm' the span is the set of all possible vectors." ] }, { @@ -1120,13 +1346,50 @@ "metadata": { "id": "p1i_ueD25ZcP", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 537 + }, + "outputId": "54aea4f1-0c58-426a-b029-6871a64c9a00" }, "source": [ - "" + "# Span of l, m, n \n", + "l = np.array([1, 2, 3])\n", + "m = np.array([-1, 0, 7])\n", + "n = np.array([4, 8, 2])\n", + "\n", + "# Plot them on a grid\n", + "fig, ax = plt.subplots(figsize=(9, 9))\n", + "ax.grid()\n", + "plt.xlim(-2, 9)\n", + "plt.ylim(-2, 9)\n", + "\n", + "# Display\n", + "for myvect, mycolor, width in [(l, 'cyan', 10), (m, 'green', 15), (n, 'chartreuse', 5)]:\n", + " plt.arrow(0,0,\n", + " myvect[0], \n", + " myvect[1], \n", + " head_width=.2, \n", + " head_length=0.2, \n", + " linewidth=width, \n", + " color=mycolor)\n" ], - "execution_count": null, - "outputs": [] + "execution_count": 41, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] }, { "cell_type": "markdown", @@ -1154,13 +1417,41 @@ "metadata": { "id": "utvF3Pkt8NP6", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 281 + }, + "outputId": "4c150459-a8a7-4f1a-d6af-b75f8567bf00" }, "source": [ - "" + "# find basis vectors in 2-d\n", + "v1 = [-2, 2]\n", + "v2 = [2, 2]\n", + "\n", + "# Plot the Scaled Vectors\n", + "plt.arrow(0,0, v1[0], v1[1],head_width=.20, head_length=0.20, color ='crimson')\n", + "plt.arrow(0,0, v2[0], v2[1],head_width=.20, head_length=0.20, color ='green')\n", + "plt.xlim(-3,3) \n", + "plt.ylim(-1,3)\n", + "plt.title(\"Basis for R^2\")\n", + "plt.show()" ], - "execution_count": null, - "outputs": [] + "execution_count": 44, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] }, { "cell_type": "markdown", @@ -1179,7 +1470,7 @@ "colab_type": "text" }, "source": [ - "" + ">**An orthogonal basis is a set of vectors that are linearly independent, span the vector space, and are orthogonal to each other**" ] }, { @@ -1210,6 +1501,32 @@ "\\end{align}" ] }, + { + "cell_type": "code", + "metadata": { + "id": "_VKeQD1GXfxD", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "69d5fd88-7184-4873-c075-3f85d1c855d9" + }, + "source": [ + "P = np.array([[1, 2, 3], [-1, 0, 7], [4, 8, 2]])\n", + "print('P has a rank of', np.linalg.matrix_rank(P))" + ], + "execution_count": 47, + "outputs": [ + { + "output_type": "stream", + "text": [ + "P has a rank of 3\n" + ], + "name": "stdout" + } + ] + }, { "cell_type": "markdown", "metadata": { @@ -1227,7 +1544,7 @@ "colab_type": "text" }, "source": [ - "" + "> **Number of dimensions in a column space**" ] }, { @@ -1258,13 +1575,169 @@ "metadata": { "id": "hp5z2WTBCNKx", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 281 + }, + "outputId": "c7e1846d-580a-4abe-d220-2180ef288fd6" }, "source": [ - "" + "# Plot a line\n", + "\n", + "# Axis Bounds\n", + "plt.xlim(-2,2) \n", + "plt.ylim(-1,4)\n", + "\n", + "# Original Vector\n", + "v = [1,3] \n", + "w = [-1,2]\n", + "\n", + "# Get Vals for L\n", + "axes = plt.gca()\n", + "x_vals = np.array(axes.get_xlim())\n", + "y_vals = 0*x_vals\n", + "\n", + "# Plot Vectors and L\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 ='green')\n", + "plt.arrow(0, 0, w[0], w[1], linewidth=3, head_width=.05, head_length=0.05, color ='red')\n", + "\n", + "plt.title(\"vector w\")\n", + "plt.show()" ], - "execution_count": null, - "outputs": [] + "execution_count": 50, + "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": "6Bxws7EWdIet", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 281 + }, + "outputId": "2fbc0741-6d31-41e6-ade9-405572e3b069" + }, + "source": [ + "# Axis Bounds\n", + "plt.xlim(-2,5) \n", + "plt.ylim(-1,8)\n", + "\n", + "# Original Vector\n", + "v = [1,3] \n", + "w = [-1,2]\n", + "proj = [-1, 3]\n", + "\n", + "# Get Vals for L\n", + "axes = plt.gca()\n", + "x_vals = np.array(axes.get_xlim())\n", + "y_vals = 0*x_vals\n", + "\n", + "# Plot Vectors and L\n", + "plt.plot(x_vals, y_vals, '--', color='b', linewidth=1)\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, v[0], v[1], linewidth=3, head_width=.05, head_length=0.05, color ='green')\n", + "plt.arrow(0, 0, w[0], w[1], linewidth=3, head_width=.05, head_length=0.05, color ='red')\n", + "\n", + "plt.title(\"Shadow of w\")\n", + "plt.show()" + ], + "execution_count": 60, + "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": "jymH7MCIkbqd", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 335 + }, + "outputId": "e4110649-45dc-44a1-a587-855efdc05823" + }, + "source": [ + "# Axis Bounds\n", + "plt.xlim(-1.1,4) \n", + "plt.ylim(-1.1,4)\n", + "\n", + "# Original Vector\n", + "v = [1,1/2] \n", + "w = [2,2]\n", + "proj = np.multiply(2.4,v)\n", + "x_minus_proj = w-proj\n", + "\n", + "# Set axes\n", + "axes = plt.gca()\n", + "plt.axes().set_aspect('equal')\n", + "\n", + "# Get Vals for L\n", + "x_vals = np.array(axes.get_xlim())\n", + "y_vals = 1/2*x_vals\n", + "\n", + "# Plot Vectors and L\n", + "plt.plot(x_vals, y_vals, '--', color='b', linewidth=1)\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, v[0], v[1], linewidth=3, head_width=.05, head_length=0.05, color ='green')\n", + "plt.arrow(0, 0, w[0], w[1], linewidth=3, head_width=.05, head_length=0.05, color ='red')\n", + "plt.arrow(proj[0], proj[1], x_minus_proj[0], x_minus_proj[1], linewidth=3, head_width=.05, head_length=0.05, color = 'yellow')\n", + "\n", + "plt.title(\"non x-axis projection\")\n", + "plt.show()" + ], + "execution_count": 61, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:13: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", + " del sys.path[0]\n" + ], + "name": "stderr" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] }, { "cell_type": "markdown", @@ -1289,9 +1762,9 @@ "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", - "height": 347 + "height": 265 }, - "outputId": "12502200-eafe-4e20-bfb7-2d539c6027cb" + "outputId": "085c6bd6-ea40-43dd-880a-753dedfbb5c9" }, "source": [ "import pandas as pd\n", @@ -1310,18 +1783,19 @@ "plt.scatter(df.x, df.y)\n", "plt.show()" ], - "execution_count": null, + "execution_count": 42, "outputs": [ { "output_type": "display_data", "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdkAAAFKCAYAAABRtSXvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAGBhJREFUeJzt3X9s1IX9x/FXe9craXvKlR4VDPgD\nvOFGjDXRBcVfBCWCWQIbtusQFxcnqWy6yAargHxDXALZEicSYfz4Y1sWO1GxS1QMvzK38CNIg+ki\nlrJsK20p1/YGJ6XH9XrfP/jSL3MtV9p73+fu4/PxF+U++fT9Tn88+/lcf+Qlk8mkAABA2uU7PQAA\nAG5FZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAw4k33CcPhaLpPqUCgSJFIT9rPm2lu2UNyzy5u2UNi\nl2zklj0kdrmaYNA/5GM5cSXr9XqcHiEt3LKH5J5d3LKHxC7ZyC17SOwyUjkRWQAAchGRBQDACJEF\nAMAIkQUAwAiRBQDACJEFAMAIkQUAwAiRBQDASMrf+HT+/HktX75cZ8+eVTwe13PPPaf7778/E7MB\nGKZYPKH2zvNKxBMqLHDPLw0A0i3THyspI/vuu+/qlltu0YsvvqiOjg499dRT+vDDD80HA5Baor9f\ndXub1dAUVnc0plJ/oSpCQVXOmipPPjeqgMuc+lhJGdlAIKDPP/9cknTu3DkFAgGzYQBcm7q9zdp9\n5NTAy13nYgMvV88OOTUWkHWc+lhJme958+apra1NjzzyiBYtWqTly5ebDQNg+GLxhBqawoM+1tDU\nqVg8keGJgOzk5MdKyivZ9957TxMnTtS2bdt0/Phx1dbW6p133hny+ECgyOSXL1/trxzkErfsIbln\nl1zdo73zvLqjsUEfi0R75fEVKFhWnOGp0idX3y5f5pY9pNzdxcmPlZSRPXr0qGbOnClJmjZtms6c\nOaNEIiGPZ/CQWvwppGDQb/In9DLNLXtI7tkll/dIxBMq9Req69x/f/II+McocTGes7vl8tvlSm7Z\nQ8rtXaw/Vkb1p+5uuukmHTt2TJLU2tqq4uLiIQMLIHMKCzyqCAUHfawiVMZ3GQP/x8mPlZRXspWV\nlaqtrdWiRYvU19enNWvWmA0D4NpUzpoq6dLzSpForwL+MaoIlQ38P4BLnPpYyUsmk8l0ntDidkIu\n36a4klv2kNyzi1v2iMUT8vgKlLgYd8UVrFveLm7ZQ3LPLhYfK6O6XQwg+xUWeDShrNgVgQUsZfpj\nhcgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITI\nAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIAYITIAgBghMgCAGCEyAIA\nYITIAgBgxJvqgLfeekv19fUDLzc2NqqhocF0KAAA3CBlZBcuXKiFCxdKkg4fPqwPPvjAfCgAANzg\nmm4Xb9y4UTU1NVazAADgKsOO7KeffqoJEyYoGAxazgMAgGvkJZPJ5HAOXL16tebNm6dvfvObVz2u\nry8hr9eTluEAAMhlw47snDlz9Kc//Uk+n++qx4XD0bQMdqVg0G9y3kxzyx6Se3Zxyx4Su2Qjt+wh\nsUuq8w1lWLeLOzo6VFxcnDKwAADg/w0rsuFwWKWlpdazAADgKsOK7PTp07V161brWQAAcBV+4xMA\nAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABG\niCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogs\nAABGiCwAAEaGFdn6+np961vf0oIFC7R//37jkQAAcIeUkY1EItq4caP+8Ic/aNOmTdqzZ08m5gIA\nIOd5Ux1w4MABzZgxQyUlJSopKdHatWszMRcAADkv5ZXsqVOn1NvbqyVLlqi6uloHDhzIxFwAAOS8\nvGQymbzaAb/5zW909OhRvf7662pra9PixYu1b98+5eXlDXp8X19CXq/HZFgAAHJJytvF48aNU0VF\nhbxeryZPnqzi4mJ1d3dr3Lhxgx4fifSkfchg0K9wOJr282aaW/aQ3LOLW/aQ2CUbuWUPiV1SnW8o\nKW8Xz5w5UwcPHlR/f78ikYh6enoUCATSNhwAAG6V8kq2vLxcc+bM0RNPPCFJWrlypfLz+fFaAABS\nSRlZSaqqqlJVVZX1LAAAuAqXpAAAGCGyAAAYIbIAABghsgAAGCGyAAAYIbIAABghsgAAGCGyAAAY\nIbIAABghsgAAGCGyAAAYIbIAABghsgAAGCGyAAAYIbIAABghsgAAGCGyAAAYIbIAABghsgAAGCGy\nAAAYIbIAABghsgAAGCGyAAAYIbIAABghsgBgIBZPqL3zvGLxhNOjwEHeVAccOnRIzz//vG677TZJ\nUigU0qpVq8wHA4BclOjvV93eZjU0hdUdjanUX6iKUFCVs6bKk891zVdNyshK0j333KPXXnvNehYA\nyHl1e5u1+8ipgZe7zsUGXq6eHXJqLDiEL6sAIE1i8YQamsKDPtbQ1Mmt46+gYV3JNjc3a8mSJTp7\n9qyWLl2q++67b8hjA4Eieb2etA14WTDoT/s5neCWPST37OKWPSR2cVp753l1R2ODPhaJ9srjK1Cw\nrDjDU6VPLr5NhpKpXVJG9uabb9bSpUv12GOPqaWlRYsXL9ZHH30kn8836PGRSE/ahwwG/QqHo2k/\nb6a5ZQ/JPbu4ZQ+JXbJBIp5Qqb9QXef+O7QB/xglLsZzci8pd98mg0n3LlcLdsrbxeXl5Zo7d67y\n8vI0efJklZWVqaOjI23DAYBbFBZ4VBEKDvpYRahMhQXpv8uH7JbySra+vl7hcFg/+MEPFA6H1dXV\npfLy8kzMBgA5p3LWVEmXnoONRHsV8I9RRahs4P/x1ZIysrNmzdKyZcu0Z88exeNxrVmzZshbxQDw\nVefJz1f17JC+/eAUeXwFSlyMcwX7FZYysiUlJdq0aVMmZgEA1ygs8ChYVuya5zExMvwIDwAARogs\nAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAA\nRogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEay\nPrKxeELtnecViyecHgUAgGviHc5Bvb29evzxx1VTU6MFCxZYzyRJSvT3q25vsxqawuqOxlTqL1RF\nKKjKWVPlyc/6rw0AABheZN944w1df/311rP8h7q9zdp95NTAy13nYgMvV88OZXQWAABGIuUl4cmT\nJ9Xc3KyHHnooA+NcEosn1NAUHvSxhqZObh0DAHJCyivZdevWadWqVdq5c+ewThgIFMnr9YxqqPbO\n8+qOxgZ9LBLtlcdXoGBZ8aheh1OCQb/TI6SNW3Zxyx4Su2Qjt+whsctIXDWyO3fu1J133qlJkyYN\n+4SRSM+oh0rEEyr1F6rr3H+HNuAfo8TFuMLh6KhfT6YFg/6cnHswbtnFLXtI7JKN3LKHxC6pzjeU\nq0Z2//79amlp0f79+3X69Gn5fD7dcMMNuvfee9M23GAKCzyqCAX/4znZyypCZSosGN2VMgAAmXDV\nyL766qsD/96wYYNuvPFG88BeVjlrqqRLz8FGor0K+MeoIlQ28P8AAGS7YX13sRM8+fmqnh3Stx+c\nIo+vQImLca5gAQA5ZdiR/dGPfmQ5x5AKCzwKlhW75rkAAMBXB7/VAQAAI0QWAAAjRBYAACNEFgAA\nI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNE\nFgAAI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNEFgAAI0QWAAAjRBYAACNEFgAAI95UB1y4cEEr\nVqxQV1eXYrGYampq9PDDD2diNgAAclrKyO7bt0/Tp0/XM888o9bWVj399NNEFgCAYUgZ2blz5w78\nu729XeXl5aYDAQDgFnnJZDI5nAOrqqp0+vRpbdq0SdOmTRvyuL6+hLxeT9oGBAAgVw07spL02Wef\n6Wc/+5nq6+uVl5c36DHhcDRtw10WDPpNzptpbtlDcs8ubtlDYpds5JY9JHZJdb6hpPzu4sbGRrW3\nt0uSbr/9diUSCXV3d6dtOAAA3CplZI8cOaLt27dLkjo7O9XT06NAIGA+GAAAuS5lZKuqqtTd3a3q\n6mr98Ic/1OrVq5Wfz4/XAgCQSsrvLh4zZox+9atfZWIWAABchUtSAACMEFkAAIwQWQAAjBBZAACM\nEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjBBZ\nAACMEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjBBZAACMEFkAAIwQWQAAjHiHc9D69ev1ySefqK+v\nT88++6weffRR67kAc9Gei2o7EZbfly9/kc/pcQC4UMrIHjx4UCdOnFBdXZ0ikYjmz59PZJHTLvb1\n6ZXfHlVr+Av1J6X8POnGYIleWnyXfN5hfd0JAMOS8nbx3XffrV//+teSpOuuu04XLlxQIpEwHwyw\n8spvj6rlzKXASlJ/Umo584Ve+e1RZwcD4DopI+vxeFRUVCRJ2rFjhx544AF5PB7zwQAL0Z6Lag1/\nMehjreEvFO25mOGJALjZsO+N7d69Wzt27ND27duvelwgUCSvN/0RDgb9aT+nE9yyh5Sbu7SdCA9c\nwX5Zf1KKXuzXrTfl3l6X5eLbZChu2cUte0jsMhLDiuzHH3+sTZs2aevWrfL7rz5YJNKTlsGuFAz6\nFQ5H037eTHPLHlLu7uL35Ss/T4OGNj/v0uO5uJeUu2+TwbhlF7fsIbFLqvMNJeXt4mg0qvXr12vz\n5s0aO3Zs2oYCnOAv8unGYMmgj90YLOG7jAGkVcrIvv/++4pEInrhhRf05JNP6sknn1RbW1smZgNM\nvLT4Lk0aX6L8vEsv5+dJk8Zf+u5iAEinlLeLKysrVVlZmYlZgIzweb36n6fvUbTnoqIX+/k5WQBm\n+KFAfGX5i3y69Sb3PM8EIPvwaxUBADBCZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAwQmQBADBCZAEA\nMEJkAQAwQmQBADBCZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAwQmQBADBC\nZAEAMEJkAQAwQmQBADBCZAEAMEJkAQAwMqzINjU1afbs2fr9739vPQ8AAK6RMrI9PT1au3atZsyY\nkYl5AABwjZSR9fl82rJli8aPH5+JeQAAcA1vygO8Xnm9KQ8DAABfkvZ6BgJF8no96T6tgkF/2s/p\nBLfsIblnF7fsIbFLNnLLHhK7jETaIxuJ9KT7lAoG/QqHo2k/b6a5ZQ/JPbu4ZQ+JXbKRW/aQ2CXV\n+YbCj/AAAGAk5ZVsY2Oj1q1bp9bWVnm9Xu3atUsbNmzQ2LFjMzEfAAA5K2Vkp0+frt/97neZmAUA\nAFfhdjEAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAA\nRogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaILAAARogsAABGiCwAAEaI\nLAAARogsAABGiCwAAEa8wznoF7/4hY4dO6a8vDzV1tbqjjvusJ4LWSwWT6i987wS8YQKCzxOjwMA\nWStlZA8fPqx//vOfqqur08mTJ1VbW6u6urpMzIYsk+jvV93eZjU0hdUdjanUX6iKUFCVs6bKk89N\nEQD4spSfGQ8cOKDZs2dLkqZMmaKzZ8/qiy++MB8M2adub7N2HzmlrnMxJZNS17mYdh85pbq9zU6P\nBgBZKWVkOzs7FQgEBl4uLS1VOBw2HQrZJxZPqKFp8Ld7Q1OnYvFEhicCgOw3rOdkr5RMJq/6eCBQ\n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\nrkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "
" ] }, "metadata": { - "tags": [] + "tags": [], + "needs_background": "light" } } ] @@ -1336,7 +1810,7 @@ "source": [ "" ], - "execution_count": null, + "execution_count": 42, "outputs": [] } ] From d776f64cc929486499e6a032d07fa92367f5c5ae Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Thu, 13 Aug 2020 20:45:57 -0600 Subject: [PATCH 07/10] Created using Colaboratory --- ...133_High_Dimensional_Data_Assignment.ipynb | 2754 +++++++++++++++++ 1 file changed, 2754 insertions(+) create mode 100644 Ray_Arbizu_LS_DS_133_High_Dimensional_Data_Assignment.ipynb diff --git a/Ray_Arbizu_LS_DS_133_High_Dimensional_Data_Assignment.ipynb b/Ray_Arbizu_LS_DS_133_High_Dimensional_Data_Assignment.ipynb new file mode 100644 index 00000000..48aa67d9 --- /dev/null +++ b/Ray_Arbizu_LS_DS_133_High_Dimensional_Data_Assignment.ipynb @@ -0,0 +1,2754 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Ray_Arbizu_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": [ + "# imports\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import math\n", + "plt.rcParams.update({'font.size': 14})" + ], + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "-TVmyt2qk2Nm", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "75f1862a-35c8-4696-cea1-bff0bd082a87" + }, + "source": [ + "# plot a line that passes the vertical line test\n", + "x = np.arange(-10, 11)\n", + "y = x**3 + 2*x\n", + "plt.plot(x, y) \n", + "plt.axvline(x=0, color='r');" + ], + "execution_count": 12, + "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": "wwU4LI3QlEsD", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "3732d53c-dfcf-45e1-9e85-0cad2c06732e" + }, + "source": [ + "# plot a line that doesn't pass the vertical line test\n", + "theta = np.arange(0, 8 * np.pi, 0.1)\n", + "x = np.cos(theta) * np.exp(0.2 * theta)\n", + "y = np.sin(theta) * np.exp(0.2 * theta)\n", + "plt.plot(x, y)\n", + "plt.axvline(x=0, color='red')\n", + "plt.show()" + ], + "execution_count": 13, + "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": "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": [ + "> **The vertical line test means that if you were to pass a vertical line over the function it would only be touching the function in one spot at any given time.**" + ] + }, + { + "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}\n", + "\n", + "> **They are all Functions because a set of ordered pairs which show a valid mapping of domain values to range values is a function**" + ] + }, + { + "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": [ + "def f(vect):\n", + " x1=vect[0][0]\n", + " x2=vect[1][0]\n", + " row1 = np.array([2*x1 + x2])\n", + " row2 = np.array([-3*x2 + x1])\n", + " output_vector=np.array([row1, row2])\n", + " return output_vector" + ], + "execution_count": 14, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "JTUe3w6soWLL", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "9ffd78b5-61bd-40f9-e144-8a2e35180887" + }, + "source": [ + "# Apply f to x-axis unit vector \n", + "i_hat=np.array([[1],[0]])\n", + "a=f(i_hat)\n", + "\n", + "# Apply f to y-axis unit vector\n", + "j_hat=np.array([[0],[1]])\n", + "b=f(j_hat)\n", + "\n", + "T = np.column_stack([a,b])\n", + "T\n", + "\n", + "# Turn those into a dataframe, for comparison\n", + "pd.DataFrame(T)\n", + "\n", + "# use the original function again\n", + "input_vector=np.array([[3],[4]])\n", + "f(input_vector)\n", + "\n" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[10],\n", + " [-9]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 16 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_WlrGMofpEtx", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "e08f3fbb-b647-4045-906e-a39c68347345" + }, + "source": [ + "output_vector=np.matmul(T, input_vector)\n", + "output_vector" + ], + "execution_count": 18, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[10],\n", + " [-9]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cNHu4JXDowa8", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 289 + }, + "outputId": "d892f701-1092-4a44-d2dd-02ef21f568cc" + }, + "source": [ + "# Display that transformation visually.\n", + "plt.arrow(0,0, input_vector[0][0], input_vector[1][0],head_width=.5, head_length=0.5, color ='red')\n", + "plt.arrow(0,0, output_vector[0][0], output_vector[1][0],head_width=.5, head_length=0.5, color ='blue')\n", + "plt.xlim(0,11) \n", + "plt.ylim(-10,5);\n", + "plt.title('f(2*x1+x2, −3*x2+x1)');" + ], + "execution_count": 19, + "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": "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.\n", + "\n", + "> **An eigenvector is any vector that doesn't change its orientation during a given transformation, but an eigenvector might still get scaled by some scalar. It can get stretched or squished, it just can't change the direction in which it is pointing. An eigenvalue is the scalar that represents how its corresponding eigenvector was scaled during the transformation. Eigenvectors and eigenvalues always come in pairs.**" + ] + }, + { + "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?\n", + "\n", + "> **Imagine that we have a dataset with 50 numeric datapoints. How would we graph a single column of data? Well, we have nothing else in the dataset to compare it to, so all that we can do is really plot the values on a one-dimensional number line.**" + ] + }, + { + "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?\n", + "\n", + "> **While these rules of thumb can vary from model to model, some say that you should always make sure that you have 5 times the number of observations as you have 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": 355 + }, + "outputId": "5c951950-0ee0-4893-b680-938dc4f25ed0" + }, + "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": 20, + "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": 20 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "O5zrMTud2qFU", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 221 + }, + "outputId": "6f4ee09a-d99e-43f0-8b7e-a7165eba0d4d" + }, + "source": [ + "# Look at datatypes\n", + "# a lot of object datatypes even though they seem to be strings of numbers.\n", + "national.dtypes" + ], + "execution_count": 21, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "CONTROL object\n", + "AGE1 int64\n", + "METRO3 object\n", + "REGION object\n", + "LMED int64\n", + " ... \n", + "FMTINCRELAMICAT object\n", + "FMTASSISTED object\n", + "FMTBURDEN object\n", + "FMTREGION object\n", + "FMTSTATUS object\n", + "Length: 99, dtype: object" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 21 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "yIrOjVmd2yLz", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "03ad905e-01fc-4e76-9d67-9dd44cc0b82d" + }, + "source": [ + "# check for null values\n", + "national.isnull().sum().any()" + ], + "execution_count": 22, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "False" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 22 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2u9tdmwX3KL_", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "2aedb3ad-5b2c-4f9f-d99b-ebd08082966c" + }, + "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": 23, + "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": 221 + }, + "outputId": "efdd2d49-e628-4955-b0c2-c39b0c1812ec" + }, + "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": 24, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "CONTROL category\n", + "AGE1 int64\n", + "METRO3 category\n", + "REGION category\n", + "LMED int64\n", + " ... \n", + "FMTINCRELAMICAT category\n", + "FMTASSISTED category\n", + "FMTBURDEN category\n", + "FMTREGION category\n", + "FMTSTATUS category\n", + "Length: 99, dtype: object" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 24 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ymxU-aPtQ1eq", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 270 + }, + "outputId": "f77c3ce9-7172-446c-e34d-ff1fc39c7cf4" + }, + "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": 25, + "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": 25 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wlUkomv5tkxa", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 221 + }, + "outputId": "60897109-d8c3-46fb-91fd-e814c6821826" + }, + "source": [ + "national_processed['OWNRENT'].describe" + ], + "execution_count": 29, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 29 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6NS5AQpcQ8Je", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 221 + }, + "outputId": "2d087915-021e-43e0-e71c-f60809e5bf99" + }, + "source": [ + "# Now we only ahve numeric columns (ints and floats)\n", + "national_processed.dtypes" + ], + "execution_count": 26, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "CONTROL int32\n", + "AGE1 int64\n", + "METRO3 int8\n", + "REGION int8\n", + "LMED int64\n", + " ... \n", + "FMTINCRELAMICAT int8\n", + "FMTASSISTED int8\n", + "FMTBURDEN int8\n", + "FMTREGION int8\n", + "FMTSTATUS int8\n", + "Length: 99, dtype: object" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 26 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WAJ8bjVcEwhA", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "3fbb9f58-1468-4c05-b8c0-02a542be1156" + }, + "source": [ + "### Your Code Here\n", + "# start by Standardizing the data since PCA's output is influenced based on the scale of the features of the data.\n", + "from sklearn.preprocessing import StandardScaler\n", + "feature_cols=national_processed.columns[1:]\n", + "feature_cols[:7]" + ], + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index(['AGE1', 'METRO3', 'REGION', 'LMED', 'FMR', 'L30', 'L50'], dtype='object')" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 34 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "szIvsFblsa4T", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# normalizing the features\n", + "x = national_processed.loc[:, feature_cols].values\n", + "x = StandardScaler().fit_transform(x) " + ], + "execution_count": 35, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "oEKRAwnhschV", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "c5dd9aaf-099d-4c28-9bcd-84e35a9738cc" + }, + "source": [ + "# Let's check whether the normalized data has a mean of zero and a standard deviation of one.\n", + "print('{:.2f}'.format(np.mean(x)))\n", + "print(np.std(x))" + ], + "execution_count": 36, + "outputs": [ + { + "output_type": "stream", + "text": [ + "0.00\n", + "0.9948848769417227\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "G4UAj4jYscZr", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 253 + }, + "outputId": "7279dd9e-cbc9-4fad-9545-b9d1b86935a7" + }, + "source": [ + "# convert the normalized features into a dataframe\n", + "normal_nat = pd.DataFrame(x,columns=feature_cols)\n", + "normal_nat.head(5)" + ], + "execution_count": 37, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AGE1METRO3REGIONLMEDFMRL30L50L80IPOVBEDRMSBUILTSTATUSTYPEVALUEVACANCYTENURENUNITSROOMSWEIGHTPERZINC2ZADEQZSMHCSTRUCTURETYPEOWNRENTUTILITYOTHERCOSTCOST06COST12COST08COSTMEDTOTSALASSISTEDGLMEDGL30GL50GL80APLMEDABL30ABL50...COST08RELPOVCATCOST08RELFMRPCTCOST08RELFMRCATCOST12RELAMIPCTCOST12RELAMICATCOST12RELPOVPCTCOST12RELPOVCATCOST12RELFMRPCTCOST12RELFMRCATCOSTMedRELAMIPCTCOSTMedRELAMICATCOSTMedRELPOVPCTCOSTMedRELPOVCATCOSTMedRELFMRPCTCOSTMedRELFMRCATFMTZADEQFMTMETRO3FMTBUILTFMTSTRUCTURETYPEFMTBEDRMSFMTOWNRENTFMTCOST06RELPOVCATFMTCOST08RELPOVCATFMTCOST12RELPOVCATFMTCOSTMEDRELPOVCATFMTINCRELPOVCATFMTCOST06RELFMRCATFMTCOST08RELFMRCATFMTCOST12RELFMRCATFMTCOSTMEDRELFMRCATFMTINCRELFMRCATFMTCOST06RELAMICATFMTCOST08RELAMICATFMTCOST12RELAMICATFMTCOSTMEDRELAMICATFMTINCRELAMICATFMTASSISTEDFMTBURDENFMTREGIONFMTSTATUS
01.4880750.608784-1.3278720.454953-0.528766-0.444470-0.445262-0.553127-0.681429-0.6037001.504196-0.271749-0.142292-0.409728-0.26814-0.518234-0.2537010.1936410.989256-0.345248-0.582421-0.001189-0.538157-0.626460-0.858681-0.1083181.002403-0.524572-0.489431-0.511002-0.535753-0.693001-0.7743030.454953-0.444470-0.445262-0.553127-0.100276-0.139349-0.140598...0.448213-0.508180-0.588115-0.524716-1.139197-0.2942000.432580-0.487463-0.685212-0.580668-0.896546-0.2728480.472927-0.526199-0.452728-0.001189-0.7066471.728565-0.627170-0.612264-0.8586810.6766100.6498380.6157310.7035410.071352-0.518776-0.588115-0.685212-0.452728-1.091609-0.956874-1.028145-1.139197-0.896546-0.779119-0.7092780.549473-0.4621070.0
10.0888122.1842700.576698-0.991324-0.163391-0.123184-0.122457-0.0435661.1401321.2248390.515773-0.271749-0.142292-0.048319-0.26814-0.518234-0.2537010.1936410.2131780.8237430.827974-0.001189-0.584987-0.626460-0.8586810.478101-0.065553-0.214100-0.155728-0.190289-0.2354101.204959-0.774303-0.991324-0.123184-0.122457-0.0435660.108920-0.207233-0.206327...0.448213-0.1351920.796007-0.1027320.682587-0.3165210.432580-0.0844200.716067-0.2034810.115986-0.3991990.167739-0.199905-0.452728-0.001189-0.7066470.467274-0.6271701.390040-0.858681-0.0809370.6498380.615731-0.0523820.7783500.8598200.7960070.716067-0.4527280.9260910.024966-0.0774780.6825870.1159861.171883-0.709278-0.544709-0.4621070.0
20.2199932.1842700.576698-0.991324-0.163391-0.892063-0.892949-0.901606-0.0715641.2248390.705854-0.271749-0.1422920.031993-0.26814-0.518234-0.2537010.7187080.2638080.044416-0.448652-0.0011890.349585-0.626460-0.858681-0.185141-0.208710-0.198696-0.116072-0.164791-0.229295-0.260945-0.774303-0.991324-0.892063-0.892949-0.901606-0.443533-0.201751-0.203806...0.448213-0.0995830.796007-0.0536690.682587-0.0351180.432580-0.0287530.716067-0.1960460.115986-0.1294880.472927-0.191508-0.452728-0.001189-0.7066470.467274-0.6271701.390040-0.8586810.6766100.6498380.6157310.7035410.0713520.8598200.7960070.716067-0.452728-0.0827590.0249660.3978560.6825870.1159860.001282-0.7092781.643655-0.4621070.0
30.8321702.1842700.576698-0.991324-0.546527-0.892063-0.892949-0.901606-0.2801620.3105700.705854-0.271749-0.1422920.232776-0.26814-0.518234-0.2537010.1936410.3848720.044416-0.391586-0.001189-0.796742-0.626460-0.858681-0.0314940.0191970.0318700.1067100.0629910.003272-0.693001-0.774303-0.991324-0.892063-0.892949-0.901606-0.443533-0.634993-0.636447...0.4482130.4251760.7960070.3512041.1380320.2965100.4325800.4861900.7160670.2206770.6222520.2121080.4729270.3365290.923669-0.001189-0.7066470.467274-0.6271700.388888-0.8586810.6766100.6498380.6157310.7035410.7783500.8598200.7960070.7160670.923669-0.0827591.0068071.3485231.1380320.6222520.001282-0.709278-0.544709-0.4621070.0
4-0.960634-0.9667020.576698-0.575434-1.084440-0.655433-0.659250-0.637803-0.068517-0.6037000.515773-0.271749-0.142292-0.570378-0.268141.0978991.554657-0.8564940.3446820.0444160.477364-0.001189-0.3080772.0944011.164576-0.285012-0.380500-0.458529-0.506394-0.479279-0.4384140.8022211.226057-0.575434-0.655433-0.659250-0.637803-0.239947-0.892076-0.895889...0.144074-0.2720580.796007-0.471430-0.683751-0.4395150.129067-0.3745850.716067-0.337774-0.390280-0.3430890.167739-0.1312890.923669-0.0011891.4151340.4672742.095949-0.6122641.164576-0.080937-0.110391-0.147898-0.0523820.7783500.8598200.7960070.7160670.9236690.926091-0.465954-0.552811-0.683751-0.3902801.1718830.773833-0.544709-0.4621070.0
\n", + "

5 rows × 98 columns

\n", + "
" + ], + "text/plain": [ + " AGE1 METRO3 REGION ... FMTBURDEN FMTREGION FMTSTATUS\n", + "0 1.488075 0.608784 -1.327872 ... 0.549473 -0.462107 0.0\n", + "1 0.088812 2.184270 0.576698 ... -0.544709 -0.462107 0.0\n", + "2 0.219993 2.184270 0.576698 ... 1.643655 -0.462107 0.0\n", + "3 0.832170 2.184270 0.576698 ... -0.544709 -0.462107 0.0\n", + "4 -0.960634 -0.966702 0.576698 ... -0.544709 -0.462107 0.0\n", + "\n", + "[5 rows x 98 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 37 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "UOczT8cHyIqp", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# use the sklearn library to import the PCA module\n", + "from sklearn.decomposition import PCA" + ], + "execution_count": 38, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "2SdBZMWsyI-k", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# instantiate the sklearn class\n", + "# pass the desired number of components \n", + "pca_nat = PCA(n_components=2)" + ], + "execution_count": 39, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "xZ6rVX8HyIvr", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# call fit_transform on the aggregate data\n", + "pca_data = pca_nat.fit_transform(x)" + ], + "execution_count": 40, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "p6XnI48ZyIja", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + }, + "outputId": "f615dcea-5668-4d37-f72b-ad4e19cd6743" + }, + "source": [ + "# create a DataFrame that will have \n", + "# the principal component values for all 569 samples\n", + "df_final = pd.DataFrame(data = pca_data, columns = ['comp_1', 'comp_2'])\n", + "df_final.head()" + ], + "execution_count": 41, + "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", + "
comp_1comp_2
0-2.607484-1.380332
12.010313-0.992019
21.1848490.366219
32.7917721.719967
4-1.600407-0.882243
\n", + "
" + ], + "text/plain": [ + " comp_1 comp_2\n", + "0 -2.607484 -1.380332\n", + "1 2.010313 -0.992019\n", + "2 1.184849 0.366219\n", + "3 2.791772 1.719967\n", + "4 -1.600407 -0.882243" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 41 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "JHuuKtvfy2_t", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 304 + }, + "outputId": "4984fd20-85ae-44a7-a829-056e27148f0d" + }, + "source": [ + "# Plotting the DF\n", + "plt.figure(figsize=(10, 10))\n", + "df_final.plot.scatter(\"comp_1\", \"comp_2\");" + ], + "execution_count": 45, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "nAzZtgoMy2zk", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "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 From 4dd590cc2a219360c72130020bce197ad05bfed7 Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Sat, 15 Aug 2020 10:43:43 -0600 Subject: [PATCH 08/10] Created using Colaboratory --- ...bizu_LS_DS_134_Clustering_Assignment.ipynb | 1180 +++++++++++++++++ 1 file changed, 1180 insertions(+) create mode 100644 Ray_Arbizu_LS_DS_134_Clustering_Assignment.ipynb diff --git a/Ray_Arbizu_LS_DS_134_Clustering_Assignment.ipynb b/Ray_Arbizu_LS_DS_134_Clustering_Assignment.ipynb new file mode 100644 index 00000000..63b17492 --- /dev/null +++ b/Ray_Arbizu_LS_DS_134_Clustering_Assignment.ipynb @@ -0,0 +1,1180 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Ray_Arbizu_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": 258 + }, + "outputId": "591b256a-33df-454d-dda2-8cc7b9f95ab3" + }, + "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": 2, + "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": 2 + } + ] + }, + { + "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": 241 + }, + "outputId": "ca0946b5-6917-494a-a754-c4df6fbf06f0" + }, + "source": [ + "df = df.drop('diagnosis', axis=1)\n", + "df.head()" + ], + "execution_count": 3, + "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": 3 + } + ] + }, + { + "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": 334 + }, + "outputId": "71be6be5-6ccc-4734-8451-1aca8011bfc0" + }, + "source": [ + "# Perform K-Means Clustering on the Dataset\n", + "df.describe()" + ], + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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
count5.690000e+02569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.0000000.0
mean3.037183e+0714.12729219.28964991.969033654.8891040.0963600.1043410.0887990.0489190.1811620.0627980.4051721.2168532.86605940.3370790.0070410.0254780.0318940.0117960.0205420.00379516.26919025.677223107.261213880.5831280.1323690.2542650.2721880.1146060.2900760.083946NaN
std1.250206e+083.5240494.30103624.298981351.9141290.0140640.0528130.0797200.0388030.0274140.0070600.2773130.5516482.02185545.4910060.0030030.0179080.0301860.0061700.0082660.0026464.8332426.14625833.602542569.3569930.0228320.1573360.2086240.0657320.0618670.018061NaN
min8.670000e+036.9810009.71000043.790000143.5000000.0526300.0193800.0000000.0000000.1060000.0499600.1115000.3602000.7570006.8020000.0017130.0022520.0000000.0000000.0078820.0008957.93000012.02000050.410000185.2000000.0711700.0272900.0000000.0000000.1565000.055040NaN
25%8.692180e+0511.70000016.17000075.170000420.3000000.0863700.0649200.0295600.0203100.1619000.0577000.2324000.8339001.60600017.8500000.0051690.0130800.0150900.0076380.0151600.00224813.01000021.08000084.110000515.3000000.1166000.1472000.1145000.0649300.2504000.071460NaN
50%9.060240e+0513.37000018.84000086.240000551.1000000.0958700.0926300.0615400.0335000.1792000.0615400.3242001.1080002.28700024.5300000.0063800.0204500.0258900.0109300.0187300.00318714.97000025.41000097.660000686.5000000.1313000.2119000.2267000.0999300.2822000.080040NaN
75%8.813129e+0615.78000021.800000104.100000782.7000000.1053000.1304000.1307000.0740000.1957000.0661200.4789001.4740003.35700045.1900000.0081460.0324500.0420500.0147100.0234800.00455818.79000029.720000125.4000001084.0000000.1460000.3391000.3829000.1614000.3179000.092080NaN
max9.113205e+0828.11000039.280000188.5000002501.0000000.1634000.3454000.4268000.2012000.3040000.0974402.8730004.88500021.980000542.2000000.0311300.1354000.3960000.0527900.0789500.02984036.04000049.540000251.2000004254.0000000.2226001.0580001.2520000.2910000.6638000.207500NaN
\n", + "
" + ], + "text/plain": [ + " id radius_mean ... fractal_dimension_worst Unnamed: 32\n", + "count 5.690000e+02 569.000000 ... 569.000000 0.0\n", + "mean 3.037183e+07 14.127292 ... 0.083946 NaN\n", + "std 1.250206e+08 3.524049 ... 0.018061 NaN\n", + "min 8.670000e+03 6.981000 ... 0.055040 NaN\n", + "25% 8.692180e+05 11.700000 ... 0.071460 NaN\n", + "50% 9.060240e+05 13.370000 ... 0.080040 NaN\n", + "75% 8.813129e+06 15.780000 ... 0.092080 NaN\n", + "max 9.113205e+08 28.110000 ... 0.207500 NaN\n", + "\n", + "[8 rows x 32 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 4 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "v49rtqhq96Jf", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "u8LDVwpS97NY", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "fHRSWr5m97A9", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "EwQB2pXE96AA", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "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": {} + }, + "source": [ + "##### Your Code Here #####" + ], + "execution_count": null, + "outputs": [] + }, + { + "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 From 43bcb59e55508fc5f1105ff1a75258e2515b77c6 Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Sat, 15 Aug 2020 12:54:59 -0600 Subject: [PATCH 09/10] Created using Colaboratory --- ..._1_Sprint_Challenge_3_Linear_Algebra.ipynb | 1195 +++++++++++++++++ 1 file changed, 1195 insertions(+) create mode 100644 Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb diff --git a/Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb b/Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb new file mode 100644 index 00000000..260cfe10 --- /dev/null +++ b/Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb @@ -0,0 +1,1195 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb", + "provenance": [], + "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": "-wQxiT7yC4_v", + "colab_type": "text" + }, + "source": [ + "#Linear Algebra" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aiUlaNJkECCL", + "colab_type": "text" + }, + "source": [ + "## 1.1 Graph vector $\\vec{a}$ \n", + "\n", + "\\begin{align}\n", + "\\vec{a} = \\begin{bmatrix} 3 \\\\ 2 \\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "bfjMZfm8_G_y", + "colab_type": "code", + "colab": {} + }, + "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" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "QpCKt0n5IeiY", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "outputId": "d04388a2-cf36-4707-b9e8-b46de5a5ecc5" + }, + "source": [ + "# Creating vector a\n", + "a = np.array([3, 2])\n", + "\n", + "# plot a vector using matplotlib\n", + "fig, ax = plt.subplots()\n", + "ax.grid()\n", + "plt.xlim(0,4)\n", + "plt.ylim(0,4)\n", + "\n", + "plt.arrow(0, 0, \n", + " a[0], \n", + " a[1], \n", + " head_width=.2, \n", + " head_length=0.20,\n", + " linewidth=3,\n", + " color = 'cyan')\n", + "plt.show()\n" + ], + "execution_count": 11, + "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": "ekevCKtTDwcT", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BDLB08NXEiUN", + "colab_type": "text" + }, + "source": [ + "## 1.2 Find $||\\vec{b}||$. What does the norm of a vector represent?\n", + "> **The norm of a vector represents the size of the vector**\n", + "\n", + "\\begin{align}\n", + "\\vec{b} = \\begin{bmatrix} 17 & -4 & -2 & 1\\end{bmatrix}\n", + "\\end{align}\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Fp3mocAKIfGD", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "d709d179-73d7-472d-e001-9eea5c4fac1f" + }, + "source": [ + "b = np.array([17, -4, -2, 1])\n", + "\n", + "bnorm = np.linalg.norm(b)\n", + "\n", + "print(bnorm)" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "text": [ + "17.60681686165901\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vBbJ0ZyPD6RG", + "colab_type": "text" + }, + "source": [ + "## 1.3 Find $\\vec{c} \\cdot \\vec{d}$ - Are these vectors orthogonal? Why or why not?\n", + "\n", + "> **No because none of the vectors create a right angle, d comes close but no cigar**\n", + "\n", + "\\begin{align}\n", + "\\vec{c} = \\begin{bmatrix}3 & 7 & -2 & 12\\end{bmatrix}\n", + "\\qquad\n", + "\\vec{d} = \\begin{bmatrix}9 & -7 & 4 & 6\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "NYb8BalmIfgY", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "138aff6f-5290-43c3-a1dd-648d3cc4d553" + }, + "source": [ + "# Creating the arrays\n", + "c = np.array([3, 7, -2, 12])\n", + "d = np.array([9, -7, 4, 6])\n", + "\n", + "print(\"Dot Product:\", np.dot(c, d))" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Dot Product: 42\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "fOKEiD8SNcU9", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 592 + }, + "outputId": "cd421ccc-d79d-4c0c-f80e-26be97cb2dcc" + }, + "source": [ + "# using a plot\n", + "fig, ax = plt.subplots(figsize=(10, 10))\n", + "ax.grid()\n", + "plt.xlim(-2.25,13.25) \n", + "plt.ylim(-7.25,13.25) \n", + "\n", + "plt.arrow(0,0, c[0], c[1],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=10,\n", + " color ='lightblue',\n", + " )\n", + "plt.arrow(0,0, c[2], c[3],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=10,\n", + " color ='orange',\n", + " )\n", + "\n", + "plt.arrow(4,0, d[0], d[1],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=10,\n", + " color ='cyan',\n", + " )\n", + "plt.arrow(4,0, d[2], d[3],\n", + " head_width=.05, \n", + " head_length=0.05, \n", + " linewidth=10,\n", + " color ='crimson',\n", + " )\n", + "\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": "code", + "metadata": { + "id": "8Ldb08zQNcJt", + "colab_type": "code", + "colab": {} + }, + "source": [ + "# Plot the Scaled Vectors\n", + "plt.arrow(0,0, v1[0], v1[1],head_width=.20, head_length=0.20, color ='crimson')\n", + "plt.arrow(0,0, v2[0], v2[1],head_width=.20, head_length=0.20, color ='green')\n", + "plt.xlim(-3,3) \n", + "plt.ylim(-1,3)\n", + "plt.title(\"Basis for R^2\")\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gS85sJHWG7iU", + "colab_type": "text" + }, + "source": [ + "## 1.4 Find $E^{-1}$ and $E^{T}$\n", + "\n", + "\\begin{align}\n", + "E = \n", + "\\begin{bmatrix}\n", + " 7 & 4 & 2 \\\\\n", + " 1 & 3 & -1 \\\\\n", + " 2 & 6 & -4\n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "QiISq5egIgSS", + "colab_type": "code", + "colab": {} + }, + "source": [ + "E = np.array([[7, 4, 2], [1, 3, -1], [2, 6, -4]])\n", + "\n" + ], + "execution_count": 35, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "_V6LHMZ5ZAuH", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + }, + "outputId": "a209bce7-faee-49f3-825c-edf6540ceb3f" + }, + "source": [ + "pd.DataFrame(E)" + ], + "execution_count": 32, + "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", + "
012
0742
113-1
226-4
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 7 4 2\n", + "1 1 3 -1\n", + "2 2 6 -4" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 32 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uIByFCNbYz34", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 142 + }, + "outputId": "b69dfb7e-345e-4c99-e795-2925b69444a8" + }, + "source": [ + "pd.DataFrame(E.T)" + ], + "execution_count": 33, + "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", + "
012
0712
1436
22-1-4
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 7 1 2\n", + "1 4 3 6\n", + "2 2 -1 -4" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 33 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_DFQHO2HcPNz", + "colab_type": "text" + }, + "source": [ + "## 1.5 Find $|F|$ - What is one reason why the determinant of a matrix would be 0? \n", + "\n", + "> **When the determinant of a matrix is zero, the volume of the region with sides given by its columns or rows is zero, which means the matrix considered as a transformation takes the basis vectors into vectors that are linearly dependent and define 0 volume.**\n", + "\n", + "\\begin{align}\n", + "F = \n", + "\\begin{bmatrix}\n", + " 2 & -2 & 5 \\\\\n", + " 4 & 1 & 10 \\\\\n", + " 12 & 6 & 30\n", + "\\end{bmatrix}\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zz6pIP_kbCp0", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "98814c01-4f47-4b4b-f3e4-3ffdc86e5196" + }, + "source": [ + "F = np.array([[2, -2, 5], [4, 1, 10], [12, 8, 30]])\n", + "np.linalg.det(F)" + ], + "execution_count": 36, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.0" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 36 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "qQh3we5Kcp6R", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TPzrKzEvC5YU", + "colab_type": "text" + }, + "source": [ + "# Intermediate Linear Algebra" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ap-us2lBGQyi", + "colab_type": "text" + }, + "source": [ + "## 2.1 Suppose that the number of customers at a ski resort as well as the number of inches of fresh powder (snow) was recorded for 7 days. \n", + "\n", + "### Customers: [820, 760, 1250, 990, 1080, 1450, 1600]\n", + "\n", + "### Inches of new snow: [0, 1, 7, 1, 0, 6, 4 ]\n", + "\n", + "## Find the mean, sample variance, and sample standard deviation for both the number of customers and inches of new snow for the week. Remember that on SCs you can use library functions, dataframes, .describe(), etc. \n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "xS-JuHl9JiiP", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 202 + }, + "outputId": "69ba702f-56fd-4978-b4b0-91fc0d1af632" + }, + "source": [ + "customers = [820, 760, 1250, 990, 1080, 1450, 1600]\n", + "snow = [0, 1, 7, 1, 0, 6, 4]" + ], + "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", + "
customerssnow
08200
17601
212507
39901
410800
\n", + "
" + ], + "text/plain": [ + " customers snow\n", + "0 820 0\n", + "1 760 1\n", + "2 1250 7\n", + "3 990 1\n", + "4 1080 0" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cNxeVa0cg40d", + "colab_type": "code", + "colab": {} + }, + "source": [ + "##### Your Code Here #####" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3ePJtK4VLTLH", + "colab_type": "text" + }, + "source": [ + "## 2.2 Are the variances of the number of customers and inches of snow comparable? \n", + "## Why or why not? " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LvTtgZ-5Ndw_", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ixhZVGxfGVFh", + "colab_type": "text" + }, + "source": [ + "## 2.3 Find the variance-covariance matrix for the number of customers and inches of snow at the ski resort. " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "IbglmVaxJjO7", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6Ks3_TbNC5yJ", + "colab_type": "text" + }, + "source": [ + "# PCA" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f6qJAPaaOdzD", + "colab_type": "text" + }, + "source": [ + "## 3.1 Standardize the data so that it has a mean of 0 and a standard deviation of 1. \n", + "\n", + "We have included some code to get you started so that you don't get stuck on something that isn't standardizing the data or PCA.\n", + "\n", + "This might be helpful:\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "bogsxfNyJlAw", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 226 + }, + "outputId": "1ae56f4f-7ad4-4406-e44d-87994466e5af" + }, + "source": [ + "# Let me get you some data to start you off.\n", + "import pandas as pd\n", + "\n", + "data = {\"Country\": [\"England\",\"Wales\",\"Scotland\",\"North Ireland\"], \n", + " \"Cheese\": [105,103,103,66], \n", + " \"Carcass_Meat\": [245,227,242,267], \n", + " \"Other_Meat\": [685, 803, 750, 586], \n", + " \"Fish\": [147, 160, 122, 93], \n", + " \"Fats_and_Oils\": [193, 235, 184, 209], \n", + " \"Sugars\": [156, 175, 147, 139], \n", + " \"Fresh_Potatoes\": [720, 874, 566, 1033], \n", + " \"Fresh_Veg\": [253, 265, 171, 143], \n", + " \"Other_Veg\": [488, 570, 418, 355], \n", + " \"Processed_Potatoes\": [198, 203, 220, 187], \n", + " \"Processed_Veg\": [360, 365, 337, 334], \n", + " \"Fresh_Fruit\": [1102, 1137, 957, 674], \n", + " \"Cereals\": [1472, 1582, 1462, 1494], \n", + " \"Beverages\": [57,73,53,47], \n", + " \"Soft_Drinks\": [1374, 1256, 1572, 1506], \n", + " \"Alcoholic Drinks\": [375, 475, 458, 135], \n", + " \"Confectionery\": [54, 64, 62, 41]}\n", + "\n", + "df = pd.DataFrame(data)\n", + "\n", + "# Look at the data\n", + "df.head()" + ], + "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", + "
Alcoholic DrinksBeveragesCarcass_MeatCerealsCheeseConfectioneryCountryFats_and_OilsFishFresh_FruitFresh_PotatoesFresh_VegOther_MeatOther_VegProcessed_PotatoesProcessed_VegSoft_DrinksSugars
037557245147210554England19314711027202536854881983601374156
147573227158210364Wales23516011378742658035702033651256175
245853242146210362Scotland1841229575661717504182203371572147
31354726714946641North Ireland2099367410331435863551873341506139
\n", + "
" + ], + "text/plain": [ + " Alcoholic Drinks Beverages Carcass_Meat Cereals Cheese Confectionery \\\n", + "0 375 57 245 1472 105 54 \n", + "1 475 73 227 1582 103 64 \n", + "2 458 53 242 1462 103 62 \n", + "3 135 47 267 1494 66 41 \n", + "\n", + " Country Fats_and_Oils Fish Fresh_Fruit Fresh_Potatoes Fresh_Veg \\\n", + "0 England 193 147 1102 720 253 \n", + "1 Wales 235 160 1137 874 265 \n", + "2 Scotland 184 122 957 566 171 \n", + "3 North Ireland 209 93 674 1033 143 \n", + "\n", + " Other_Meat Other_Veg Processed_Potatoes Processed_Veg Soft_Drinks \\\n", + "0 685 488 198 360 1374 \n", + "1 803 570 203 365 1256 \n", + "2 750 418 220 337 1572 \n", + "3 586 355 187 334 1506 \n", + "\n", + " Sugars \n", + "0 156 \n", + "1 175 \n", + "2 147 \n", + "3 139 " + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 22 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2HY91nOpaTTZ", + "colab_type": "code", + "colab": {} + }, + "source": [ + "##### Your Code Here #####" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5U50KZkdJb_s", + "colab_type": "text" + }, + "source": [ + "## 3.2 Perform PCA on the data and graph Principal Component 1 against Principal Component 2. \n", + "\n", + "This might be helpful:\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "RqjwVokgP1fL", + "colab_type": "code", + "colab": {} + }, + "source": [ + "##### Your Code Here #####" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "m_sdj4vvG_tg", + "colab_type": "text" + }, + "source": [ + "## 3.3 What are Eigenvalues and Eigenvectors? -In general, not just in PCA." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QlhJnyR2HUTR", + "colab_type": "text" + }, + "source": [ + "Your Answer Here" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z-RzYKR0C6Wg", + "colab_type": "text" + }, + "source": [ + "# Clustering" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "62efk4plJe54", + "colab_type": "text" + }, + "source": [ + "## 4.1 Use K-Means to cluster the following data and then graph your results. \n", + "\n", + "We have included some code to get you started so that you don't get stuck on something that isn't standardizing clustering.\n", + "\n", + "Prioritize calculating the clusters over graphing them. \n", + "\n", + "Scikit-Learn K-Means Documentation:\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "miK5Aeg-JlzJ", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 202 + }, + "outputId": "298a1e78-03d8-4ff8-d06a-a5bcbda93a89" + }, + "source": [ + "points = pd.read_csv('https://raw.githubusercontent.com/ryanleeallred/datasets/master/points.csv')\n", + "points.head()" + ], + "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", + "
xy
0-7.846803-3.421277
1-3.554323-6.884729
2-0.192822-9.671030
3-6.401456-5.223972
4-0.804026-9.704457
\n", + "
" + ], + "text/plain": [ + " x y\n", + "0 -7.846803 -3.421277\n", + "1 -3.554323 -6.884729\n", + "2 -0.192822 -9.671030\n", + "3 -6.401456 -5.223972\n", + "4 -0.804026 -9.704457" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 29 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "qX0zKKznTzcI", + "colab_type": "code", + "colab": {} + }, + "source": [ + "##### Your Code Here #####" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oxxNyhv_FGKB", + "colab_type": "text" + }, + "source": [ + "# Stretch Goals (AKA how to get a 3):\n", + "\n", + "Complete the stretch goals for each section in order to get a 3 on that section.\n", + "\n", + "## Parts 1 & 2 (do all of the following): \n", + " - Comment your code well with both markdown and inline comments where appropriate\n", + " - Show your work with code and possibly LaTeX \n", + " - Justify your answers particularly well to show advanced mastery of this section\n", + "\n", + "## Part 3 (do all of the following): \n", + " - Create a Scree Plot to show the Proportion of Explained Variance of each Principal Component (more than the first two)\n", + " - If you want to include a the cumulative proportion of explained variance, you might be interested in this NumPy Function: [numpy.cumsum](https://docs.scipy.org/doc/numpy/reference/generated/numpy.cumsum.html)\n", + " - Give a top-notch explanation of eigenvalues and eigenvectors. Feel free to any materials, images, code, graphs, LaTeX, etc. to spruce up your answer.\n", + "\n", + "## Part 4 (do all of the following):\n", + "- Justify your choice of k, both visually (scatterplot) and mathematically (elbow plot)." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "oV5O6iIW9-vl", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file From b01b80ca674386fecdbe38f352f36bf3685dea97 Mon Sep 17 00:00:00 2001 From: jadisiii <66627515+jadisiii@users.noreply.github.com> Date: Mon, 17 Aug 2020 21:38:34 -0600 Subject: [PATCH 10/10] Created using Colaboratory --- ..._1_Sprint_Challenge_3_Linear_Algebra.ipynb | 379 +++++++++--------- 1 file changed, 191 insertions(+), 188 deletions(-) diff --git a/Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb b/Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb index 260cfe10..ade2045b 100644 --- a/Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb +++ b/Ray_Arbizu_DS_Unit_1_Sprint_Challenge_3_Linear_Algebra.ipynb @@ -62,7 +62,7 @@ "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" ], - "execution_count": 3, + "execution_count": null, "outputs": [] }, { @@ -74,7 +74,7 @@ "base_uri": "https://localhost:8080/", "height": 269 }, - "outputId": "d04388a2-cf36-4707-b9e8-b46de5a5ecc5" + "outputId": "ed1f6d6b-e087-4bea-888a-9419a7715b07" }, "source": [ "# Creating vector a\n", @@ -95,7 +95,7 @@ " color = 'cyan')\n", "plt.show()\n" ], - "execution_count": 11, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -149,7 +149,7 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "d709d179-73d7-472d-e001-9eea5c4fac1f" + "outputId": "3f481974-ae73-4caf-ec37-5720e308741d" }, "source": [ "b = np.array([17, -4, -2, 1])\n", @@ -158,7 +158,7 @@ "\n", "print(bnorm)" ], - "execution_count": 13, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -196,7 +196,7 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "138aff6f-5290-43c3-a1dd-648d3cc4d553" + "outputId": "7d83ac13-7754-4376-b9dc-2506d9ab8a54" }, "source": [ "# Creating the arrays\n", @@ -205,7 +205,7 @@ "\n", "print(\"Dot Product:\", np.dot(c, d))" ], - "execution_count": 16, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -225,7 +225,7 @@ "base_uri": "https://localhost:8080/", "height": 592 }, - "outputId": "cd421ccc-d79d-4c0c-f80e-26be97cb2dcc" + "outputId": "d2888cea-da87-487b-faf4-9b8aadd3afca" }, "source": [ "# using a plot\n", @@ -262,7 +262,7 @@ "\n", "plt.show;" ], - "execution_count": 24, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -287,13 +287,7 @@ "colab": {} }, "source": [ - "# Plot the Scaled Vectors\n", - "plt.arrow(0,0, v1[0], v1[1],head_width=.20, head_length=0.20, color ='crimson')\n", - "plt.arrow(0,0, v2[0], v2[1],head_width=.20, head_length=0.20, color ='green')\n", - "plt.xlim(-3,3) \n", - "plt.ylim(-1,3)\n", - "plt.title(\"Basis for R^2\")\n", - "plt.show()" + "" ], "execution_count": null, "outputs": [] @@ -328,7 +322,7 @@ "E = np.array([[7, 4, 2], [1, 3, -1], [2, 6, -4]])\n", "\n" ], - "execution_count": 35, + "execution_count": null, "outputs": [] }, { @@ -340,12 +334,12 @@ "base_uri": "https://localhost:8080/", "height": 142 }, - "outputId": "a209bce7-faee-49f3-825c-edf6540ceb3f" + "outputId": "7a0b4317-1c62-4255-a432-3eba73048426" }, "source": [ "pd.DataFrame(E)" ], - "execution_count": 32, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -407,7 +401,7 @@ "metadata": { "tags": [] }, - "execution_count": 32 + "execution_count": 8 } ] }, @@ -420,12 +414,12 @@ "base_uri": "https://localhost:8080/", "height": 142 }, - "outputId": "b69dfb7e-345e-4c99-e795-2925b69444a8" + "outputId": "1edf1cae-5992-4289-b64b-9441d2836ebd" }, "source": [ "pd.DataFrame(E.T)" ], - "execution_count": 33, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -487,7 +481,7 @@ "metadata": { "tags": [] }, - "execution_count": 33 + "execution_count": 9 } ] }, @@ -521,13 +515,13 @@ "base_uri": "https://localhost:8080/", "height": 34 }, - "outputId": "98814c01-4f47-4b4b-f3e4-3ffdc86e5196" + "outputId": "842a8023-9633-4099-bf99-b0436a686289" }, "source": [ "F = np.array([[2, -2, 5], [4, 1, 10], [12, 8, 30]])\n", "np.linalg.det(F)" ], - "execution_count": 36, + "execution_count": null, "outputs": [ { "output_type": "execute_result", @@ -539,7 +533,7 @@ "metadata": { "tags": [] }, - "execution_count": 36 + "execution_count": 10 } ] }, @@ -588,102 +582,50 @@ "metadata": { "id": "xS-JuHl9JiiP", "colab_type": "code", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 202 - }, - "outputId": "69ba702f-56fd-4978-b4b0-91fc0d1af632" + "colab": {} }, "source": [ "customers = [820, 760, 1250, 990, 1080, 1450, 1600]\n", "snow = [0, 1, 7, 1, 0, 6, 4]" ], "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", - "
customerssnow
08200
17601
212507
39901
410800
\n", - "
" - ], - "text/plain": [ - " customers snow\n", - "0 820 0\n", - "1 760 1\n", - "2 1250 7\n", - "3 990 1\n", - "4 1080 0" - ] - }, - "metadata": { - "tags": [] - }, - "execution_count": 18 - } - ] + "outputs": [] }, { "cell_type": "code", "metadata": { "id": "cNxeVa0cg40d", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 119 + }, + "outputId": "4fc71ebe-ac3f-4d4b-e856-40441c22d00b" }, "source": [ - "##### Your Code Here #####" + "##### Your Code Here #####\n", + "print(\"Customers Mean: \", np.mean(customers))\n", + "print(\"Inches of new snow Mean: \", np.mean(snow))\n", + "print(\"The Sample Variance for customers is: \", np.var(customers))\n", + "print(\"The Sample Variance for snow is: \", np.var(snow))\n", + "print(\"The Standard Deviation for Customer is: \", np.std(customers))\n", + "print(\"The Standard Deviation for Snow is: \", np.std(snow))" ], "execution_count": null, - "outputs": [] + "outputs": [ + { + "output_type": "stream", + "text": [ + "Customers Mean: 1135.7142857142858\n", + "Inches of new snow Mean: 2.7142857142857144\n", + "The Sample Variance for customers is: 84653.06122448981\n", + "The Sample Variance for snow is: 7.346938775510203\n", + "The Standard Deviation for Customer is: 290.95199127087926\n", + "The Standard Deviation for Snow is: 2.7105237087157534\n" + ], + "name": "stdout" + } + ] }, { "cell_type": "markdown", @@ -693,7 +635,10 @@ }, "source": [ "## 2.2 Are the variances of the number of customers and inches of snow comparable? \n", - "## Why or why not? " + "> **With a Pvalue of aproximately 6e-07,**\n", + "## Why or why not? \n", + "> **The Null Hpothesis is that there is NO difference between the means of the Customers and the inches of Snow.** \n", + "> **We reject the Null Hypothesis because With a pvalue of aproximately 6e-07 there is a staistally significant difference between the number of customers and inches of snow.**" ] }, { @@ -701,13 +646,31 @@ "metadata": { "id": "LvTtgZ-5Ndw_", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "82e58fe8-9cf0-4188-c7c2-787752c497aa" }, "source": [ - "" + "from scipy import stats\n", + "stats.f_oneway(customers, snow)" ], "execution_count": null, - "outputs": [] + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "F_onewayResult(statistic=90.97681155926678, pvalue=5.954628350464478e-07)" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 25 + } + ] }, { "cell_type": "markdown", @@ -724,13 +687,69 @@ "metadata": { "id": "IbglmVaxJjO7", "colab_type": "code", - "colab": {} + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "outputId": "f1937616-36c1-49bd-c170-b7170f2b55cb" }, "source": [ - "" + "import seaborn as sn" ], "execution_count": null, - "outputs": [] + "outputs": [ + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n", + " import pandas.util.testing as tm\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YxX4mBQT4iYC", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 299 + }, + "outputId": "f5d8457f-9f44-41e5-94f3-89878907b8cb" + }, + "source": [ + "cst_snw = np.cov(customers, snow, bias=True)\n", + "\n", + "print(cst_snw)\n", + "\n", + "sn.heatmap(cst_snw, annot=True, fmt='g');" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[8.46530612e+04 5.74489796e+02]\n", + " [5.74489796e+02 7.34693878e+00]]\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] }, { "cell_type": "markdown", @@ -765,9 +784,9 @@ "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", - "height": 226 + "height": 173 }, - "outputId": "1ae56f4f-7ad4-4406-e44d-87994466e5af" + "outputId": "446c0fe0-0a7b-4251-f9dd-c672f87e1d41" }, "source": [ "# Let me get you some data to start you off.\n", @@ -821,145 +840,129 @@ " \n", " \n", " \n", - " Alcoholic Drinks\n", - " Beverages\n", - " Carcass_Meat\n", - " Cereals\n", - " Cheese\n", - " Confectionery\n", " Country\n", - " Fats_and_Oils\n", + " Cheese\n", + " Carcass_Meat\n", + " Other_Meat\n", " Fish\n", - " Fresh_Fruit\n", + " Fats_and_Oils\n", + " Sugars\n", " Fresh_Potatoes\n", " Fresh_Veg\n", - " Other_Meat\n", " Other_Veg\n", " Processed_Potatoes\n", " Processed_Veg\n", + " Fresh_Fruit\n", + " Cereals\n", + " Beverages\n", " Soft_Drinks\n", - " Sugars\n", + " Alcoholic Drinks\n", + " Confectionery\n", " \n", " \n", " \n", " \n", " 0\n", - " 375\n", - " 57\n", - " 245\n", - " 1472\n", - " 105\n", - " 54\n", " England\n", - " 193\n", + " 105\n", + " 245\n", + " 685\n", " 147\n", - " 1102\n", + " 193\n", + " 156\n", " 720\n", " 253\n", - " 685\n", " 488\n", " 198\n", " 360\n", + " 1102\n", + " 1472\n", + " 57\n", " 1374\n", - " 156\n", + " 375\n", + " 54\n", " \n", " \n", " 1\n", - " 475\n", - " 73\n", - " 227\n", - " 1582\n", - " 103\n", - " 64\n", " Wales\n", - " 235\n", + " 103\n", + " 227\n", + " 803\n", " 160\n", - " 1137\n", + " 235\n", + " 175\n", " 874\n", " 265\n", - " 803\n", " 570\n", " 203\n", " 365\n", + " 1137\n", + " 1582\n", + " 73\n", " 1256\n", - " 175\n", + " 475\n", + " 64\n", " \n", " \n", " 2\n", - " 458\n", - " 53\n", - " 242\n", - " 1462\n", - " 103\n", - " 62\n", " Scotland\n", - " 184\n", + " 103\n", + " 242\n", + " 750\n", " 122\n", - " 957\n", + " 184\n", + " 147\n", " 566\n", " 171\n", - " 750\n", " 418\n", " 220\n", " 337\n", + " 957\n", + " 1462\n", + " 53\n", " 1572\n", - " 147\n", + " 458\n", + " 62\n", " \n", " \n", " 3\n", - " 135\n", - " 47\n", - " 267\n", - " 1494\n", - " 66\n", - " 41\n", " North Ireland\n", - " 209\n", + " 66\n", + " 267\n", + " 586\n", " 93\n", - " 674\n", + " 209\n", + " 139\n", " 1033\n", " 143\n", - " 586\n", " 355\n", " 187\n", " 334\n", + " 674\n", + " 1494\n", + " 47\n", " 1506\n", - " 139\n", + " 135\n", + " 41\n", " \n", " \n", "\n", "" ], "text/plain": [ - " Alcoholic Drinks Beverages Carcass_Meat Cereals Cheese Confectionery \\\n", - "0 375 57 245 1472 105 54 \n", - "1 475 73 227 1582 103 64 \n", - "2 458 53 242 1462 103 62 \n", - "3 135 47 267 1494 66 41 \n", - "\n", - " Country Fats_and_Oils Fish Fresh_Fruit Fresh_Potatoes Fresh_Veg \\\n", - "0 England 193 147 1102 720 253 \n", - "1 Wales 235 160 1137 874 265 \n", - "2 Scotland 184 122 957 566 171 \n", - "3 North Ireland 209 93 674 1033 143 \n", - "\n", - " Other_Meat Other_Veg Processed_Potatoes Processed_Veg Soft_Drinks \\\n", - "0 685 488 198 360 1374 \n", - "1 803 570 203 365 1256 \n", - "2 750 418 220 337 1572 \n", - "3 586 355 187 334 1506 \n", + " Country Cheese ... Alcoholic Drinks Confectionery\n", + "0 England 105 ... 375 54\n", + "1 Wales 103 ... 475 64\n", + "2 Scotland 103 ... 458 62\n", + "3 North Ireland 66 ... 135 41\n", "\n", - " Sugars \n", - "0 156 \n", - "1 175 \n", - "2 147 \n", - "3 139 " + "[4 rows x 18 columns]" ] }, "metadata": { "tags": [] }, - "execution_count": 22 + "execution_count": 30 } ] },