From 2a294efe61cb03f6f7a7d58dff7462cc3615e834 Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Tue, 25 Sep 2018 00:06:44 +0530
Subject: [PATCH 01/12] Created using Colaboratory
---
Anubhab-Bob.ipynb | 70 +++++++++++++++++++++++++++--------------------
1 file changed, 40 insertions(+), 30 deletions(-)
diff --git a/Anubhab-Bob.ipynb b/Anubhab-Bob.ipynb
index 9e2543a..1824a7c 100644
--- a/Anubhab-Bob.ipynb
+++ b/Anubhab-Bob.ipynb
@@ -1,32 +1,42 @@
{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Anubhab-Bob.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ }
},
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "[View in Colaboratory](https://colab.research.google.com/github/Anubhab-Bob/Assignment-2/blob/Anubhab-Bob/Anubhab-Bob.ipynb)"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "A5gF9gMFq3Ck",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ ""
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
From 6882ccdde1cb7d315eadc7a79bdf67dec16a3f5c Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Tue, 25 Sep 2018 00:10:43 +0530
Subject: [PATCH 02/12] Created using Colaboratory
---
Anubhab-Bob.ipynb | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/Anubhab-Bob.ipynb b/Anubhab-Bob.ipynb
index 1824a7c..50191de 100644
--- a/Anubhab-Bob.ipynb
+++ b/Anubhab-Bob.ipynb
@@ -5,8 +5,7 @@
"colab": {
"name": "Anubhab-Bob.ipynb",
"version": "0.3.2",
- "provenance": [],
- "include_colab_link": true
+ "provenance": []
},
"kernelspec": {
"display_name": "Python 3",
@@ -15,16 +14,6 @@
}
},
"cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "view-in-github",
- "colab_type": "text"
- },
- "source": [
- "[View in Colaboratory](https://colab.research.google.com/github/Anubhab-Bob/Assignment-2/blob/Anubhab-Bob/Anubhab-Bob.ipynb)"
- ]
- },
{
"metadata": {
"id": "A5gF9gMFq3Ck",
From a4c4fc24599a19e85776904bf22cca391ba4cf81 Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Thu, 27 Sep 2018 00:18:44 +0530
Subject: [PATCH 03/12] Completed Lists Question.
---
Anubhab_Bob_Assignment_2_Lists.ipynb | 298 +++++++++++++++++++++++++++
1 file changed, 298 insertions(+)
create mode 100644 Anubhab_Bob_Assignment_2_Lists.ipynb
diff --git a/Anubhab_Bob_Assignment_2_Lists.ipynb b/Anubhab_Bob_Assignment_2_Lists.ipynb
new file mode 100644
index 0000000..cfafc21
--- /dev/null
+++ b/Anubhab_Bob_Assignment_2_Lists.ipynb
@@ -0,0 +1,298 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Anubhab_Bob (1).ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "[View in Colaboratory](https://colab.research.google.com/github/Anubhab-Bob/Assignment-2/blob/Anubhab-Bob/Anubhab_Bob_Assignment_2_Lists.ipynb)"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "A5gF9gMFq3Ck",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list=[1, 2, 3, 4, 5, 3]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "QkJs_byK_qPg",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "6517822b-da14-4727-f436-c101ba3ec661"
+ },
+ "cell_type": "code",
+ "source": [
+ "print(dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[1, 2, 3, 4, 5, 3]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "F2QMHeQAB4Ja",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "print(sorted(dummy_list, reverse=True))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "7XeXBwK6CD1i",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "3cefa005-b90a-4e72-8be7-24e06ea943fb"
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list_2 = [2, 200, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n",
+ "dummy_list.extend(dummy_list_2)\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[1, 2, 3, 4, 5, 3, 2, 200, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ujmdan92Du6g",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_dict={}"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "TPaUVjDSEqyv",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "i=0\n",
+ "while i!= len(dummy_list):\n",
+ " if dummy_list[i] not in dummy_dict:\n",
+ " dummy_dict[dummy_list[i]]=1\n",
+ " else:\n",
+ " for key,value in dummy_dict.items():\n",
+ " if key == dummy_list[i]:\n",
+ " dummy_dict[key] = value + 1\n",
+ " break\n",
+ " #print(\"Key: \" + str(key))\n",
+ " #print (\"Value: \" + str(value))\n",
+ " i = i + 1\n",
+ " #print(i)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "TY6jC_gyQbPP",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "for key, value in dummy_dict.items():\n",
+ " print(\"Key: \" + str(key))\n",
+ " print (\"Value: \" + str(value))\n",
+ " #print('\\n')"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "G0Ft30gsucvR",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 510
+ },
+ "outputId": "b3baa9d8-accc-4b8e-e76c-bd35a1052f3f"
+ },
+ "cell_type": "code",
+ "source": [
+ "for key in sorted(dummy_dict.keys()):\n",
+ " print (\"Key :\" + str(key) + '\\t\\t\\t' + \"Value :\" + str(dummy_dict[key]))\n",
+ "\n",
+ "print(\"\\n\\n\")\n",
+ "for key in sorted(dummy_dict.keys(), reverse=True):\n",
+ " print (\"Key :\" + str(key) + '\\t\\t\\t' + \"Value :\" + str(dummy_dict[key]))"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Key :0\t\t\tValue :1\n",
+ "Key :1\t\t\tValue :2\n",
+ "Key :2\t\t\tValue :2\n",
+ "Key :3\t\t\tValue :2\n",
+ "Key :4\t\t\tValue :2\n",
+ "Key :5\t\t\tValue :1\n",
+ "Key :9.45\t\t\tValue :1\n",
+ "Key :12.01\t\t\tValue :1\n",
+ "Key :12.02\t\t\tValue :1\n",
+ "Key :16\t\t\tValue :1\n",
+ "Key :45.67\t\t\tValue :1\n",
+ "Key :90\t\t\tValue :1\n",
+ "Key :200\t\t\tValue :1\n",
+ "\n",
+ "\n",
+ "\n",
+ "Key :200\t\t\tValue :1\n",
+ "Key :90\t\t\tValue :1\n",
+ "Key :45.67\t\t\tValue :1\n",
+ "Key :16\t\t\tValue :1\n",
+ "Key :12.02\t\t\tValue :1\n",
+ "Key :12.01\t\t\tValue :1\n",
+ "Key :9.45\t\t\tValue :1\n",
+ "Key :5\t\t\tValue :1\n",
+ "Key :4\t\t\tValue :2\n",
+ "Key :3\t\t\tValue :2\n",
+ "Key :2\t\t\tValue :2\n",
+ "Key :1\t\t\tValue :2\n",
+ "Key :0\t\t\tValue :1\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "DtOAyHUtvm8Z",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "7414ec65-9a45-4354-fa7a-4e8e8370fde8"
+ },
+ "cell_type": "code",
+ "source": [
+ "x=200\n",
+ "dummy_list.remove(x)\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[1, 2, 3, 4, 5, 3, 2, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Adi6fYUBwnFG",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "ccced705-37e8-45c6-e5ba-a223ace45e16"
+ },
+ "cell_type": "code",
+ "source": [
+ "del dummy_list[5]\n",
+ "print (dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[1, 2, 3, 4, 5, 2, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "OTEasC7uxmOX",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "187e88b3-6f25-43ef-f133-ef3edc147094"
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list.clear()\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
From 0f3a8f8c5c767a843a69f9da8924d462d5ff3e8e Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Sat, 29 Sep 2018 00:36:46 +0530
Subject: [PATCH 04/12] Please check this. I really don't know if it is
alright.
---
Assignment 2(Complete).ipynb | 364 +++++++++++++++++++++++++++++++++++
1 file changed, 364 insertions(+)
create mode 100644 Assignment 2(Complete).ipynb
diff --git a/Assignment 2(Complete).ipynb b/Assignment 2(Complete).ipynb
new file mode 100644
index 0000000..419db63
--- /dev/null
+++ b/Assignment 2(Complete).ipynb
@@ -0,0 +1,364 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Anubhab_Bob (1).ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "[View in Colaboratory](https://colab.research.google.com/github/Anubhab-Bob/Assignment-2/blob/Anubhab-Bob/Assignment%202(Complete).ipynb)"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "A5gF9gMFq3Ck",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list=[1, 2, 3, 4, 5, 3]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "QkJs_byK_qPg",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "print(dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "F2QMHeQAB4Ja",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "print(sorted(dummy_list, reverse=True))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "7XeXBwK6CD1i",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list_2 = [2, 200, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n",
+ "dummy_list.extend(dummy_list_2)\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "ujmdan92Du6g",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_dict={}"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "TPaUVjDSEqyv",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "i=0\n",
+ "while i!= len(dummy_list):\n",
+ " if dummy_list[i] not in dummy_dict:\n",
+ " dummy_dict[dummy_list[i]]=1\n",
+ " else:\n",
+ " for key,value in dummy_dict.items():\n",
+ " if key == dummy_list[i]:\n",
+ " dummy_dict[key] = value + 1\n",
+ " break\n",
+ " #print(\"Key: \" + str(key))\n",
+ " #print (\"Value: \" + str(value))\n",
+ " i = i + 1\n",
+ " #print(i)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "TY6jC_gyQbPP",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "for key, value in dummy_dict.items():\n",
+ " print(\"Key: \" + str(key))\n",
+ " print (\"Value: \" + str(value))\n",
+ " #print('\\n')"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "G0Ft30gsucvR",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "for key in sorted(dummy_dict.keys()):\n",
+ " print (\"Key :\" + str(key) + '\\t\\t\\t' + \"Value :\" + str(dummy_dict[key]))\n",
+ "\n",
+ "print(\"\\n\\n\")\n",
+ "for key in sorted(dummy_dict.keys(), reverse=True):\n",
+ " print (\"Key :\" + str(key) + '\\t\\t\\t' + \"Value :\" + str(dummy_dict[key]))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "DtOAyHUtvm8Z",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "x=200\n",
+ "dummy_list.remove(x)\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "Adi6fYUBwnFG",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "del dummy_list[5]\n",
+ "print (dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "OTEasC7uxmOX",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list.clear()\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "XI0_hACCQlA_",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "import numpy as np"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "VV7zXbLnYp2t",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ },
+ "outputId": "e2e0fda2-13a1-40e3-a28e-2fa1253cdd70"
+ },
+ "cell_type": "code",
+ "source": [
+ "b = np.linspace(1.3,2.5, num=64)\n",
+ "print (b)"
+ ],
+ "execution_count": 21,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[1.3 1.31904762 1.33809524 1.35714286 1.37619048 1.3952381\n",
+ " 1.41428571 1.43333333 1.45238095 1.47142857 1.49047619 1.50952381\n",
+ " 1.52857143 1.54761905 1.56666667 1.58571429 1.6047619 1.62380952\n",
+ " 1.64285714 1.66190476 1.68095238 1.7 1.71904762 1.73809524\n",
+ " 1.75714286 1.77619048 1.7952381 1.81428571 1.83333333 1.85238095\n",
+ " 1.87142857 1.89047619 1.90952381 1.92857143 1.94761905 1.96666667\n",
+ " 1.98571429 2.0047619 2.02380952 2.04285714 2.06190476 2.08095238\n",
+ " 2.1 2.11904762 2.13809524 2.15714286 2.17619048 2.1952381\n",
+ " 2.21428571 2.23333333 2.25238095 2.27142857 2.29047619 2.30952381\n",
+ " 2.32857143 2.34761905 2.36666667 2.38571429 2.4047619 2.42380952\n",
+ " 2.44285714 2.46190476 2.48095238 2.5 ]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JYYLSWaQRKJC",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "n = int(input())\n",
+ "x = np.array([1, 2, 3])\n",
+ "y = np.tile(x,(3*n))\n",
+ "print (y)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "FGwwjf_pTMRs",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "b = np.arange(20)\n",
+ "\n",
+ "#print(b)\n",
+ "\n",
+ "mask = b%2!=0 #perform computations on the list \n",
+ "\n",
+ "#print(mask)\n",
+ "\n",
+ "print(b[mask]) #applying the mask on the numpy array"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "ZRDXe1q4Yw6C",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "#expected output array([2, 4])\n",
+ "a = np.array([1,2,3,2,3,4,3,4,5,6])\n",
+ "b = np.array([7,2,10,2,7,4,9,4,9,8])\n",
+ "np.intersect1d(a,b)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "vrIl330LZDO3",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "a = np.arange(10)\n",
+ "print (a)\n",
+ "a.shape = a.size//-1, 5\n",
+ "print(a)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "atGd8_9_Zjc-",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "a = [1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
+ "np.array(a).tolist()\n",
+ "print(a)\n",
+ "print('\\n')\n",
+ "np.asarray(a)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "L8JI_PAmbcbp",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "d = np.ones((5,5))\n",
+ "d[1:-1,1:-1] = 0\n",
+ "print(d)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "SY2a-sGxU4Q8",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "x = np.zeros((8,8),dtype=int)\n",
+ "x[1::2,::2] = 1\n",
+ "x[::2,1::2] = 1\n",
+ "print(x)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
From 7ef642d45c87c1927a532f1b18f4781640e24a89 Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Thu, 4 Oct 2018 02:46:32 +0530
Subject: [PATCH 05/12] Created using Colaboratory
---
Assignment_2.ipynb | 654 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 654 insertions(+)
create mode 100644 Assignment_2.ipynb
diff --git a/Assignment_2.ipynb b/Assignment_2.ipynb
new file mode 100644
index 0000000..2a5821e
--- /dev/null
+++ b/Assignment_2.ipynb
@@ -0,0 +1,654 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Assignment 2.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "[View in Colaboratory](https://colab.research.google.com/github/Anubhab-Bob/Assignment-2/blob/Anubhab-Bob/Assignment_2.ipynb)"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "A5gF9gMFq3Ck",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list=[1, 2, 3, 4, 5, 3]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "QkJs_byK_qPg",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "54a5acbb-99c1-4976-8427-928829866b40"
+ },
+ "cell_type": "code",
+ "source": [
+ "print(dummy_list)"
+ ],
+ "execution_count": 43,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[1, 2, 3, 4, 5, 3]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "F2QMHeQAB4Ja",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "f25ee66b-52c9-4a33-c6c1-e4e5b39429cd"
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list.reverse()\n",
+ "print(dummy_list)\n",
+ "#for o in reversed(dummy_list):\n",
+ "# print(o)"
+ ],
+ "execution_count": 44,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[3, 5, 4, 3, 2, 1]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "7XeXBwK6CD1i",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "7bac405f-c1a1-47af-f9d1-2bd4da1d9295"
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list_2 = [2, 200, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n",
+ "dummy_list.extend(dummy_list_2)\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 45,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[3, 5, 4, 3, 2, 1, 2, 200, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ujmdan92Du6g",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_dict={}"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "TPaUVjDSEqyv",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "i=0\n",
+ "while i!= len(dummy_list):\n",
+ " if dummy_list[i] not in dummy_dict:\n",
+ " dummy_dict[dummy_list[i]]=1\n",
+ " else:\n",
+ " for key,value in dummy_dict.items():\n",
+ " if key == dummy_list[i]:\n",
+ " dummy_dict[key] = value + 1\n",
+ " break\n",
+ " #print(\"Key: \" + str(key))\n",
+ " #print (\"Value: \" + str(value))\n",
+ " i = i + 1\n",
+ " #print(i)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "TY6jC_gyQbPP",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 890
+ },
+ "outputId": "d9ebd07a-f660-466d-8dc6-f63c75a3562d"
+ },
+ "cell_type": "code",
+ "source": [
+ "for key, value in dummy_dict.items():\n",
+ " print(\"Key: \" + str(key))\n",
+ " print (\"Value: \" + str(value))\n",
+ " print('\\n')"
+ ],
+ "execution_count": 48,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Key: 3\n",
+ "Value: 2\n",
+ "\n",
+ "\n",
+ "Key: 5\n",
+ "Value: 1\n",
+ "\n",
+ "\n",
+ "Key: 4\n",
+ "Value: 2\n",
+ "\n",
+ "\n",
+ "Key: 2\n",
+ "Value: 2\n",
+ "\n",
+ "\n",
+ "Key: 1\n",
+ "Value: 2\n",
+ "\n",
+ "\n",
+ "Key: 200\n",
+ "Value: 1\n",
+ "\n",
+ "\n",
+ "Key: 16\n",
+ "Value: 1\n",
+ "\n",
+ "\n",
+ "Key: 0\n",
+ "Value: 1\n",
+ "\n",
+ "\n",
+ "Key: 9.45\n",
+ "Value: 1\n",
+ "\n",
+ "\n",
+ "Key: 45.67\n",
+ "Value: 1\n",
+ "\n",
+ "\n",
+ "Key: 90\n",
+ "Value: 1\n",
+ "\n",
+ "\n",
+ "Key: 12.01\n",
+ "Value: 1\n",
+ "\n",
+ "\n",
+ "Key: 12.02\n",
+ "Value: 1\n",
+ "\n",
+ "\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "G0Ft30gsucvR",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 84
+ },
+ "outputId": "43c82359-3219-4ac8-c68a-22f99a666d04"
+ },
+ "cell_type": "code",
+ "source": [
+ "'''for key in sorted(dummy_dict.keys()):\n",
+ " print (\"Key :\" + str(key) + '\\t\\t\\t' + \"Value :\" + str(dummy_dict[key]))\n",
+ "\n",
+ "print(\"\\n\\n\")\n",
+ "for key in sorted(dummy_dict.keys(), reverse=True):\n",
+ " print (\"Key :\" + str(key) + '\\t\\t\\t' + \"Value :\" + str(dummy_dict[key]))'''\n",
+ "\n",
+ "dummy_list.sort()\n",
+ "print(dummy_list)\n",
+ "print('\\n')\n",
+ "dummy_list.sort(reverse=True)\n",
+ "print(dummy_list)\n",
+ "#print(sorted(dummy_list, reversed=True))"
+ ],
+ "execution_count": 49,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 9.45, 12.01, 12.02, 16, 45.67, 90, 200]\n",
+ "\n",
+ "\n",
+ "[200, 90, 45.67, 16, 12.02, 12.01, 9.45, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "DtOAyHUtvm8Z",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "247c5ea9-d230-42ab-f6ce-bdd0b0b3ae19"
+ },
+ "cell_type": "code",
+ "source": [
+ "x=200\n",
+ "dummy_list.remove(x)\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 50,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[90, 45.67, 16, 12.02, 12.01, 9.45, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Adi6fYUBwnFG",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "73231223-6081-466f-937b-b759e280aaa6"
+ },
+ "cell_type": "code",
+ "source": [
+ "del dummy_list[5]\n",
+ "print (dummy_list)"
+ ],
+ "execution_count": 51,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[90, 45.67, 16, 12.02, 12.01, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "OTEasC7uxmOX",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "18486a51-d854-4d83-982b-2eb7647e86c6"
+ },
+ "cell_type": "code",
+ "source": [
+ "dummy_list.clear()\n",
+ "print(dummy_list)"
+ ],
+ "execution_count": 52,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "5Tw-3o-kwdZS",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Now the Numpy part"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "XI0_hACCQlA_",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "import numpy as np"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "VV7zXbLnYp2t",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 202
+ },
+ "outputId": "d318cb7b-4b2e-41fa-d1fd-ad931ec931a9"
+ },
+ "cell_type": "code",
+ "source": [
+ "b = np.linspace(1.3,2.5, num=64)\n",
+ "print (b)"
+ ],
+ "execution_count": 54,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[1.3 1.31904762 1.33809524 1.35714286 1.37619048 1.3952381\n",
+ " 1.41428571 1.43333333 1.45238095 1.47142857 1.49047619 1.50952381\n",
+ " 1.52857143 1.54761905 1.56666667 1.58571429 1.6047619 1.62380952\n",
+ " 1.64285714 1.66190476 1.68095238 1.7 1.71904762 1.73809524\n",
+ " 1.75714286 1.77619048 1.7952381 1.81428571 1.83333333 1.85238095\n",
+ " 1.87142857 1.89047619 1.90952381 1.92857143 1.94761905 1.96666667\n",
+ " 1.98571429 2.0047619 2.02380952 2.04285714 2.06190476 2.08095238\n",
+ " 2.1 2.11904762 2.13809524 2.15714286 2.17619048 2.1952381\n",
+ " 2.21428571 2.23333333 2.25238095 2.27142857 2.29047619 2.30952381\n",
+ " 2.32857143 2.34761905 2.36666667 2.38571429 2.4047619 2.42380952\n",
+ " 2.44285714 2.46190476 2.48095238 2.5 ]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JYYLSWaQRKJC",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 50
+ },
+ "outputId": "29491d17-ac3e-4fab-85b6-91862e8f894a"
+ },
+ "cell_type": "code",
+ "source": [
+ "n = int(input())\n",
+ "x = np.array([1, 2, 3])\n",
+ "y = np.tile(x,(3*n))\n",
+ "print (y)"
+ ],
+ "execution_count": 55,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "3\n",
+ "[1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "FGwwjf_pTMRs",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "66dfd586-66ac-4e7f-af97-386793d75a76"
+ },
+ "cell_type": "code",
+ "source": [
+ "b = np.arange(20)\n",
+ "\n",
+ "#print(b)\n",
+ "\n",
+ "mask = b%2!=0 #perform computations on the list \n",
+ "\n",
+ "#print(mask)\n",
+ "\n",
+ "print(b[mask]) #applying the mask on the numpy array"
+ ],
+ "execution_count": 56,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[ 1 3 5 7 9 11 13 15 17 19]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ZRDXe1q4Yw6C",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "outputId": "25134caa-83c5-46db-a54c-bd968458254f"
+ },
+ "cell_type": "code",
+ "source": [
+ "#expected output array([2, 4])\n",
+ "a = np.array([1,2,3,2,3,4,3,4,5,6])\n",
+ "b = np.array([7,2,10,2,7,4,9,4,9,8])\n",
+ "np.intersect1d(a,b)"
+ ],
+ "execution_count": 57,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([2, 4])"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 57
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "vrIl330LZDO3",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 101
+ },
+ "outputId": "31437943-9a45-4f7e-af44-8d9575e8a6e1"
+ },
+ "cell_type": "code",
+ "source": [
+ "a = np.arange(10)\n",
+ "print (a)\n",
+ "print('\\n')\n",
+ "a.shape = a.size//-1, 5\n",
+ "print(a)"
+ ],
+ "execution_count": 58,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[0 1 2 3 4 5 6 7 8 9]\n",
+ "\n",
+ "\n",
+ "[[0 1 2 3 4]\n",
+ " [5 6 7 8 9]]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "atGd8_9_Zjc-",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 84
+ },
+ "outputId": "836cbdae-f78f-4dfc-8bc1-43dab74012dc"
+ },
+ "cell_type": "code",
+ "source": [
+ "a = [1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
+ "np.array(a).tolist()\n",
+ "print(a)\n",
+ "print('\\n')\n",
+ "np.asarray(a)"
+ ],
+ "execution_count": 59,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
+ "\n",
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([1, 2, 3, 4, 5, 6, 7, 8, 9])"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 59
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "L8JI_PAmbcbp",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 101
+ },
+ "outputId": "0ba45318-d34a-4b6d-c09d-42ccffa782f5"
+ },
+ "cell_type": "code",
+ "source": [
+ "d = np.ones((5,5))\n",
+ "d[1:-1,1:-1] = 0\n",
+ "print(d)"
+ ],
+ "execution_count": 60,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[[1. 1. 1. 1. 1.]\n",
+ " [1. 0. 0. 0. 1.]\n",
+ " [1. 0. 0. 0. 1.]\n",
+ " [1. 0. 0. 0. 1.]\n",
+ " [1. 1. 1. 1. 1.]]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "SY2a-sGxU4Q8",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 151
+ },
+ "outputId": "70bdeca0-5a5e-46dd-ed88-694e3f48dd4a"
+ },
+ "cell_type": "code",
+ "source": [
+ "x = np.zeros((8,8),dtype=int)\n",
+ "x[1::2,::2] = 1\n",
+ "x[::2,1::2] = 1\n",
+ "print(x)"
+ ],
+ "execution_count": 61,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[[0 1 0 1 0 1 0 1]\n",
+ " [1 0 1 0 1 0 1 0]\n",
+ " [0 1 0 1 0 1 0 1]\n",
+ " [1 0 1 0 1 0 1 0]\n",
+ " [0 1 0 1 0 1 0 1]\n",
+ " [1 0 1 0 1 0 1 0]\n",
+ " [0 1 0 1 0 1 0 1]\n",
+ " [1 0 1 0 1 0 1 0]]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
From 9521388600e1de3fbeb1c4573b4a625af13dc06e Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Mon, 8 Oct 2018 19:13:16 +0530
Subject: [PATCH 06/12] Created using Colaboratory
---
Assignment_2.ipynb | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/Assignment_2.ipynb b/Assignment_2.ipynb
index 2a5821e..dafb726 100644
--- a/Assignment_2.ipynb
+++ b/Assignment_2.ipynb
@@ -3,7 +3,7 @@
"nbformat_minor": 0,
"metadata": {
"colab": {
- "name": "Assignment 2.ipynb",
+ "name": "Assignment_2.ipynb",
"version": "0.3.2",
"provenance": [],
"include_colab_link": true
@@ -52,7 +52,7 @@
"source": [
"print(dummy_list)"
],
- "execution_count": 43,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -80,7 +80,7 @@
"#for o in reversed(dummy_list):\n",
"# print(o)"
],
- "execution_count": 44,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -107,7 +107,7 @@
"dummy_list.extend(dummy_list_2)\n",
"print(dummy_list)"
],
- "execution_count": 45,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -173,7 +173,7 @@
" print (\"Value: \" + str(value))\n",
" print('\\n')"
],
- "execution_count": 48,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -261,7 +261,7 @@
"print(dummy_list)\n",
"#print(sorted(dummy_list, reversed=True))"
],
- "execution_count": 49,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -291,7 +291,7 @@
"dummy_list.remove(x)\n",
"print(dummy_list)"
],
- "execution_count": 50,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -317,7 +317,7 @@
"del dummy_list[5]\n",
"print (dummy_list)"
],
- "execution_count": 51,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -343,7 +343,7 @@
"dummy_list.clear()\n",
"print(dummy_list)"
],
- "execution_count": 52,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -392,7 +392,7 @@
"b = np.linspace(1.3,2.5, num=64)\n",
"print (b)"
],
- "execution_count": 54,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -430,7 +430,7 @@
"y = np.tile(x,(3*n))\n",
"print (y)"
],
- "execution_count": 55,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -464,7 +464,7 @@
"\n",
"print(b[mask]) #applying the mask on the numpy array"
],
- "execution_count": 56,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -492,7 +492,7 @@
"b = np.array([7,2,10,2,7,4,9,4,9,8])\n",
"np.intersect1d(a,b)"
],
- "execution_count": 57,
+ "execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
@@ -526,7 +526,7 @@
"a.shape = a.size//-1, 5\n",
"print(a)"
],
- "execution_count": 58,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -559,7 +559,7 @@
"print('\\n')\n",
"np.asarray(a)"
],
- "execution_count": 59,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -600,7 +600,7 @@
"d[1:-1,1:-1] = 0\n",
"print(d)"
],
- "execution_count": 60,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
@@ -632,7 +632,7 @@
"x[::2,1::2] = 1\n",
"print(x)"
],
- "execution_count": 61,
+ "execution_count": 0,
"outputs": [
{
"output_type": "stream",
From 553a13a10f351a3662cd0501382bd639ea6b74c7 Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Fri, 28 Dec 2018 01:24:22 +0530
Subject: [PATCH 07/12] Assignment 4 completed. Please check and report if
everything is okay. Thank you.
---
First_Date_with_TensorFlow (Complete).ipynb | 1104 +++++++++++++++++++
1 file changed, 1104 insertions(+)
create mode 100644 First_Date_with_TensorFlow (Complete).ipynb
diff --git a/First_Date_with_TensorFlow (Complete).ipynb b/First_Date_with_TensorFlow (Complete).ipynb
new file mode 100644
index 0000000..6ce7cc9
--- /dev/null
+++ b/First_Date_with_TensorFlow (Complete).ipynb
@@ -0,0 +1,1104 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Copy of First_Date_with_TensorFlow.ipynb",
+ "version": "0.3.2",
+ "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": [
+ " "
+ ]
+ },
+ {
+ "metadata": {
+ "id": "2XXfXed5YLbe",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# First Date with TensorFlow\n",
+ "\n",
+ "Hi all, \n",
+ "\n",
+ "You know what's important for understanding Deep Learning / Machine Learning? \n",
+ "Intuition. Period.\n",
+ "\n",
+ "And Intuition comes when you run the code multiple times.\n",
+ "\n",
+ "So, today I can write a couple of defination and say this is this, this is that. \n",
+ "You Google half of the things up. You find answers which you need to Google further. \n",
+ "In the process, you probably won't even remember what's the first thing you started out with!\n",
+ "\n",
+ "So?\n",
+ "\n",
+ "Hence on, I will execute cells with code. \n",
+ "The neurons in your brain will optimize a function to get a hold of what each function is doing. \n",
+ "**No Theory Just Code.**\n",
+ "\n",
+ "I will at max give a defination that extends for a line. That's it. \n",
+ "Let's get started!\n",
+ "\n",
+ "
\n",
+ "\n",
+ "**RECOMMENDED!** \n",
+ "Write the code in the cells using the signals sent by your brain to your fingers! \n",
+ "Don't just `shift+enter` the cells.\n",
+ "\n",
+ "[Source](https://github.com/iArunava/TensorFlow-NoteBooks)"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "gYWUpE-bYKWP",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Essential imports\n",
+ "import numpy as np\n",
+ "import tensorflow as tf\n",
+ "import matplotlib.pyplot as plt"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "eKpz5NCIYMdi",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let's define some tensors\n",
+ "t1 = tf.constant(2.0, dtype=tf.float32)\n",
+ "t2 = tf.constant([1.0, 2.0], dtype=tf.float32)\n",
+ "t3 = tf.constant([[[1.45, 9.0], [2.0, 3.0], [4.0, 5.0]], \n",
+ " [[1.0, 9.0], [2.0, 3.0], [4.0, 5.0]]])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "vmMcjzTxbWzw",
+ "colab_type": "code",
+ "outputId": "1396b865-0a11-4b31-a1d5-9510e6b20301",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 68
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let's print them out!\n",
+ "print (t1)\n",
+ "print (t2)\n",
+ "print (t3)"
+ ],
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Tensor(\"Const_3:0\", shape=(), dtype=float32)\n",
+ "Tensor(\"Const_4:0\", shape=(2,), dtype=float32)\n",
+ "Tensor(\"Const_5:0\", shape=(2, 3, 2), dtype=float32)\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "10ahnfjYbcop",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Where's Waldo? \n",
+ "I mean, the value? \n",
+ "\n",
+ "So, the thing is you can't print the value of tensors directly. \n",
+ "You have to use `session`, so let's do that!"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ol6O5I7Tb2nb",
+ "colab_type": "code",
+ "outputId": "1c005d9c-951d-48be-94e5-8681eaefca4d",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 204
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "sess = tf.Session()\n",
+ "print (sess.run(t1))\n",
+ "print (\"=======================\")\n",
+ "print (sess.run(t2))\n",
+ "print (\"=======================\")\n",
+ "print (sess.run(t3))\n",
+ "sess.close()"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "2.0\n",
+ "=======================\n",
+ "[1. 2.]\n",
+ "=======================\n",
+ "[[[1.45 9. ]\n",
+ " [2. 3. ]\n",
+ " [4. 5. ]]\n",
+ "\n",
+ " [[1. 9. ]\n",
+ " [2. 3. ]\n",
+ " [4. 5. ]]]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rXKfVs_zb-kU",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Aaahaa!! Just printed those tensors!!! \n",
+ "Feels good! \n",
+ "\n",
+ "For some of you, who are like, dude you got \"No Theory Just Code\" in bold \n",
+ "And you are still using the markdown cells for the theory ?!\n",
+ "\n",
+ "I am just gonna say I am a unreasonable man. \n",
+ "\n",
+ "\n",
+ "So, you are programming with tf. \n",
+ "What ever you do is broken down to 2 basic steps:\n",
+ "- Building the computational Graph!\n",
+ "- Execute that graph using `session`!\n",
+ "\n",
+ "That's all!\n",
+ "\n",
+ " \n",
+ "\n",
+ "Let's compare this 2 steps with what we did above! \n",
+ "So, I defined 3 `tensor`s and these 3 `tensor`s formed my computational Graph. \n",
+ "And then I executed each tensor in this graph using a `session`.\n",
+ "\n",
+ "That simple!\n",
+ "\n",
+ " \n",
+ "\n",
+ "Now, let's define a few more computational graphs and execute them with sessions.\n",
+ "\n",
+ "Okay, to start with let's build this computational graph!\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "FyVz0GNqgreZ",
+ "colab_type": "code",
+ "outputId": "e345fccd-ca78-49bf-b9dd-ae0a6d29da9f",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 51
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let's define the graph\n",
+ "comp_graph_1 = tf.multiply(tf.add(78, 19), 79)\n",
+ "\n",
+ "# Alternatively\n",
+ "comp_graph_1_alt = (tf.constant(78) + tf.constant(19)) * tf.constant(79)\n",
+ "\n",
+ "# Let's execute using session\n",
+ "sess = tf.Session()\n",
+ "print ('Comp Graph 1 : ', sess.run(comp_graph_1))\n",
+ "print ('Comp Graph 1 Alt: ', sess.run(comp_graph_1_alt))\n",
+ "sess.close()"
+ ],
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Comp Graph 1 : 7663\n",
+ "Comp Graph 1 Alt: 7663\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "SVMMtuFYhaQB",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's define a sligtly more involved graph!\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "4856BTvRhiBb",
+ "colab_type": "code",
+ "outputId": "50a23939-418c-4565-bd87-b66b9ee7b2bf",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 68
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let build the graph\n",
+ "# We need to cast cause the tensors operated on should be of the same type\n",
+ "comp_graph_part_1 = tf.cast(tf.subtract(tf.add(7, 8), tf.add(9, 10)), \n",
+ " dtype=tf.float32)\n",
+ "comp_graph_part_2 = tf.divide(tf.cast(tf.multiply(7, 10), dtype=tf.float32), tf.constant(19.5))\n",
+ "comp_graph_complete = tf.maximum(comp_graph_part_1, comp_graph_part_2)\n",
+ "\n",
+ "# Let's execute\n",
+ "sess = tf.Session()\n",
+ "part1_res, part2_res, total_res = sess.run([comp_graph_part_1, comp_graph_part_2, comp_graph_complete])\n",
+ "print ('Complete Result: ', total_res)\n",
+ "print ('Part 1 Result: ', part1_res)\n",
+ "print ('Part 2 Result: ', part2_res)\n",
+ "sess.close()"
+ ],
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Complete Result: 3.5897436\n",
+ "Part 1 Result: -4.0\n",
+ "Part 2 Result: 3.5897436\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "B-_ZDtEbj4N0",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Cool! Let's go! Build another graph and execute it with sessions. \n",
+ "\n",
+ "But this time, it's all you!\n",
+ "\n",
+ "Build this graph and execute it with `session`!\n",
+ "\n",
+ "\n",
+ "\n",
+ "_Remember that `tensors` operated on should be of the same type!_ \n",
+ "_Search up errors and other help you need on Google_"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "-uHNe1BolJY0",
+ "colab_type": "code",
+ "outputId": "25007c20-00d5-4239-ab31-3e319120d77b",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 119
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# Build the graph\n",
+ "# YOUR CODE HERE\n",
+ "node_1 = tf.constant([9, 10], dtype=tf.float32, name='leaf_node1')\n",
+ "node_2 = tf.constant([7, 8.65], dtype=tf.float32, name='leaf_node2')\n",
+ "node_3 = tf.constant(5.6, dtype=tf.float32, name='leaf_node3')\n",
+ "node_4 = tf.constant([7.65, 9], dtype=tf.float32, name='leaf_node4')\n",
+ "node_5 = tf.constant([13.5, 7.18], dtype=tf.float32, name='leaf_node5')\n",
+ "\n",
+ "cg_part_1=(node_1 * node_2)\n",
+ "\n",
+ "cg_part_2=(node_4 + node_5)\n",
+ "\n",
+ "cg_part_3=tf.divide(cg_part_1, node_3)\n",
+ "\n",
+ "comp_graph_2 = tf.minimum(((node_1 * node_2) / node_3),\n",
+ " (node_4 + node_5))\n",
+ "\n",
+ "comp_graph_2_alt=tf.minimum(cg_part_2, cg_part_3)\n",
+ "# Execute \n",
+ "# YOUR CODE HERE\n",
+ "with tf.Session() as sess:\n",
+ " print(sess.run(comp_graph_2))\n",
+ " part1, part2, part3, total = sess.run([cg_part_1, cg_part_2, cg_part_3, comp_graph_2_alt])\n",
+ "print (\"=======================\")\n",
+ "print ('Part 1 Result: ', part1)\n",
+ "print ('Part 2 Result: ', part2)\n",
+ "print ('Part 3 Result: ', part3)\n",
+ "print ('Final Result: ', total)"
+ ],
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[11.25 15.446429]\n",
+ "=======================\n",
+ "Part 1 Result: [63. 86.5]\n",
+ "Part 2 Result: [21.15 16.18]\n",
+ "Part 3 Result: [11.25 15.446429]\n",
+ "Final Result: [11.25 15.446429]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "qmap38WelREN",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's do another! \n",
+ "It's fun! Isn't it?!\n",
+ "\n",
+ "Build and execute this one!\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "0ZhYwAlLmEvB",
+ "colab_type": "code",
+ "outputId": "4b97a028-dc5d-4d7b-b640-b21e85c7b8bd",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 238
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# Build the graph\n",
+ "# YOUR CODE HERE\n",
+ "node_6 = tf.constant([[1.2 , 3.4],\n",
+ " [7.5 , 8.6]], dtype = tf.float32, name='leaf_node6')\n",
+ "node_7 = tf.constant([[7 , 9],\n",
+ " [8 , 6]] , dtype = tf.float32, name='leaf_node7')\n",
+ "node_8 = tf.constant([[2.6 , 18.1],\n",
+ " [7.86 , 9.81],\n",
+ " [9.36 , 10.41]] , dtype = tf.float32, name='leaf_node8')\n",
+ "node_9 = tf.constant([[2.79 , 3.81 , 5.6],\n",
+ " [7.3 , 5.67 , 8.9]] , dtype = tf.float32, name='leaf_node9')\n",
+ "\n",
+ "cg_1 = tf.reduce_mean(node_6, axis = 1)\n",
+ "cg_2 = tf.transpose(node_8)\n",
+ "cg_3 = tf.multiply(node_7 , cg_1)\n",
+ "cg_4 = tf.multiply(node_9 , cg_2)\n",
+ "cg_5 = tf.reduce_sum(cg_4)\n",
+ "cg_com = cg_3 + cg_5\n",
+ "\n",
+ "#cg_1alt = (node_7 * (np.mean(node_6, axis = 1)))\n",
+ "#cg_1alt = (node_7 * (tf.reduce_mean(node_6, axis = 1)))\n",
+ "#cg_2alt = np.sum((node_9 * tf.transpose(node_8)))\n",
+ "#cg_2alt = tf.reduce_sum((node_9 * tf.transpose(node_8)))\n",
+ "#cg_comalt = cg_1alt + cg_2alt\n",
+ "\n",
+ "# Execute \n",
+ "# YOUR CODE HERE\n",
+ "with tf.Session() as sess:\n",
+ " print(sess.run(cg_com))\n",
+ " part_1, part_2, part_3, part_4, part_5, final = sess.run(\n",
+ " [cg_1, cg_2, cg_3, cg_4, cg_5, cg_com])\n",
+ "print (\"=======================\")\n",
+ "print ('Part 1 Result: ', part_1)\n",
+ "print ('Part 2 Result: ', part_2)\n",
+ "print ('Part 3 Result: ', part_3)\n",
+ "print ('Part 2 Result: ', part_4)\n",
+ "print ('Part 3 Result: ', part_5)\n",
+ "print ('Final Result: ', final)"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[[386.1183 442.4683 ]\n",
+ " [388.41827 418.3183 ]]\n",
+ "=======================\n",
+ "Part 1 Result: [2.3000002 8.05 ]\n",
+ "Part 2 Result: [[ 2.6 7.86 9.36]\n",
+ " [18.1 9.81 10.41]]\n",
+ "Part 3 Result: [[16.100002 72.450005]\n",
+ " [18.400002 48.300003]]\n",
+ "Part 2 Result: [[ 7.2539997 29.9466 52.415997 ]\n",
+ " [132.13 55.622704 92.648994 ]]\n",
+ "Part 3 Result: 370.01828\n",
+ "Final Result: [[386.1183 442.4683 ]\n",
+ " [388.41827 418.3183 ]]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "BnB0b6qCmGmg",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "And a final one, before we move on to the next part!\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "GQWyCvsQmMcL",
+ "colab_type": "code",
+ "outputId": "69060a80-9d7f-4b1a-b125-683be586a07a",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 357
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# Build the graph\n",
+ "# YOUR CODE HERE\n",
+ "\n",
+ "node_10 = tf.constant([[7.36 , 8.91 , 10.41],\n",
+ " [5.31 , 9.38 , 7.99]] , dtype = tf.float32, name='leaf_node10')\n",
+ "node_11 = tf.constant([[7.99 , 10.36],\n",
+ " [5.36 , 7.98],\n",
+ " [8.91 , 5.67]] , dtype = tf.float32, name='leaf_node11')\n",
+ "node_12 = tf.constant([[1.0 , 5.6 , 6.1 , 8.0],\n",
+ " [0 , 0 , 7.98 , 9.0],\n",
+ " [0 , 0 , 7.6 , 7],\n",
+ " [0 , 0 , 0 , 8.98]] , dtype = tf.float32, name='leaf_node12')\n",
+ "\n",
+ "c_graph1 = tf.transpose(node_11)\n",
+ "c_graph2 = (node_10 * c_graph1)\n",
+ "c_graph3 = tf.reduce_sum(c_graph2)\n",
+ "c_graph4 = tf.add(c_graph3 , 7.0)\n",
+ "c_graph5 = tf.divide(c_graph4 , 19.6)\n",
+ "c_graph_final = tf.divide(c_graph5 , node_12)\n",
+ "\n",
+ "c_graph_alt = (((tf.reduce_sum(node_10 * tf.transpose(node_11))) + 7.0) / 19.6/node_12)\n",
+ "\n",
+ "# Execute \n",
+ "# YOUR CODE HERE\n",
+ "\n",
+ "with tf.Session() as sess:\n",
+ " print(sess.run(c_graph_final))\n",
+ " pt_1, pt_2, pt_3, pt_4, pt_5, rslt = sess.run(\n",
+ " [c_graph1, c_graph2, c_graph3, c_graph4, c_graph5, c_graph_final])\n",
+ "print (\"\\n\\n=======================\\n\\n\")\n",
+ "print ('Part 1 Result: ', pt_1)\n",
+ "print ('Part 2 Result: ', pt_2)\n",
+ "print ('Part 3 Result: ', pt_3)\n",
+ "print ('Part 2 Result: ', pt_4)\n",
+ "print ('Part 3 Result: ', pt_5)\n",
+ "print ('Final Result: ', rslt)"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "[[19.463488 3.475623 3.1907358 2.432936 ]\n",
+ " [ inf inf 2.4390335 2.1626098]\n",
+ " [ inf inf 2.5609853 2.7804983]\n",
+ " [ inf inf inf 2.1674263]]\n",
+ "\n",
+ "\n",
+ "=======================\n",
+ "\n",
+ "\n",
+ "Part 1 Result: [[ 7.99 5.36 8.91]\n",
+ " [10.36 7.98 5.67]]\n",
+ "Part 2 Result: [[58.8064 47.7576 92.7531 ]\n",
+ " [55.011597 74.8524 45.3033 ]]\n",
+ "Part 3 Result: 374.48438\n",
+ "Part 2 Result: 381.48438\n",
+ "Part 3 Result: 19.463488\n",
+ "Final Result: [[19.463488 3.475623 3.1907358 2.432936 ]\n",
+ " [ inf inf 2.4390335 2.1626098]\n",
+ " [ inf inf 2.5609853 2.7804983]\n",
+ " [ inf inf inf 2.1674263]]\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "12NC7XTPsJw7",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Linear Regression\n",
+ "\n",
+ "Okay, now we will create a dummy dataset and perform linear regression on this dataset!\n",
+ "\n",
+ "\n",
+ "To get you in the habit of looking up for the documentation, I am not providing what some of the following functions does, Google them up!"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hW31RZkjtNwI",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Create the dataset\n",
+ "X = np.linspace(-30.0, 300.0, 300)\n",
+ "Y = 2 * np.linspace(-30.0, 250.0, 300) + np.random.randn(*X.shape)\n",
+ "\n",
+ "# Divide it into train and test\n",
+ "train_X = X[:250]\n",
+ "train_Y = Y[:250]\n",
+ "\n",
+ "test_X = X[250:]\n",
+ "test_Y = Y[250:]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "LQKy6U33y4lt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let's define the hyperparameters\n",
+ "learning_rate = 0.000005\n",
+ "n_epochs = 1000\n",
+ "interval = 50"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "1h1-D8K1uT48",
+ "colab_type": "code",
+ "outputId": "2189ad35-c490-4fe6-b530-27517fff8cc8",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 347
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# let's viz the first 10 datapoints of the dataset\n",
+ "plt.plot(train_X[:10], train_Y[:10], 'g')\n",
+ "plt.show()"
+ ],
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\ngg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "jrsUps0nu8vj",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "** Question ** \n",
+ "Why did I created a session to plot the graph? \n",
+ "[Ans]"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "P3-iuxE4sjAf",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let's define the placeholders\n",
+ "\n",
+ "# Placeholders?\n",
+ "# The input to the model changes on iteration\n",
+ "# So we cannot have a constant in the input as we did before\n",
+ "# And thus we need placeholders which we can change on each \n",
+ "# iteration of the training\n",
+ "\n",
+ "x = tf.placeholder(tf.float32, name='x')\n",
+ "y = tf.placeholder(tf.float32, name='y')"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "8hPRkaoxvRyV",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let's define the linear regression model\n",
+ "\n",
+ "# tf.Variable?\n",
+ "# We define the model parameters as tf.Variables\n",
+ "# as they get updated throghout the training.\n",
+ "# And variables denotes something which changes overtime.\n",
+ "\n",
+ "W = tf.Variable(0.0, name='weight_1')\n",
+ "b = tf.Variable(0.0, name='bias_1')\n",
+ "\n",
+ "pred_y = (W*x) + b"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "cSw1P8bkv96r",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let's define the loss function\n",
+ "# We are going to use the mean squared loss\n",
+ "loss = tf.reduce_mean(tf.square(y - pred_y))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "5G4uQqjsygNj",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Let's define the optimizer\n",
+ "# And specify the which value (i.e. loss) it has to minimize\n",
+ "optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "ttI7ZT-ozAm1",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 721
+ },
+ "outputId": "d0ff4839-1198-44d8-bd4d-79d92dc1a528"
+ },
+ "cell_type": "code",
+ "source": [
+ "# So the graph is now built\n",
+ "# Now let's execute the graph using session\n",
+ "# i.e. lets train the model\n",
+ "\n",
+ "# What it is to train a model?\n",
+ "# To update the paramters in the graph (i.e. tf.Variables)\n",
+ "# So that the loss is minimized\n",
+ "\n",
+ "# Okay let's start!\n",
+ "with tf.Session() as sess:\n",
+ " # We need to initialize the variables in our graph\n",
+ " sess.run(tf.global_variables_initializer())\n",
+ " \n",
+ " for epoch in range(n_epochs):\n",
+ " _, curr_loss = sess.run([optimizer, loss], feed_dict={x:train_X, y:train_Y})\n",
+ " \n",
+ " if epoch % interval == 0:\n",
+ " print ('Loss after epoch', epoch, ' is ', curr_loss)\n",
+ " \n",
+ " print ('Now testing the model in the test set')\n",
+ " final_preds, final_loss = sess.run([pred_y, loss], feed_dict={x:test_X, y:test_Y})\n",
+ " \n",
+ " print ('The final loss is: ', final_loss)\n",
+ " \n",
+ "# Plotting the final predictions against the true predictions\n",
+ "plt.plot(test_X[:10], test_Y[:10], 'g', label='True Function')\n",
+ "plt.plot(test_X[:10], final_preds[:10], 'r', label='Predicted Function')\n",
+ "plt.legend()\n",
+ "plt.show()"
+ ],
+ "execution_count": 20,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Loss after epoch 0 is 48290.105\n",
+ "Loss after epoch 50 is 29.782778\n",
+ "Loss after epoch 100 is 29.7724\n",
+ "Loss after epoch 150 is 29.762121\n",
+ "Loss after epoch 200 is 29.751879\n",
+ "Loss after epoch 250 is 29.741611\n",
+ "Loss after epoch 300 is 29.731339\n",
+ "Loss after epoch 350 is 29.721113\n",
+ "Loss after epoch 400 is 29.710855\n",
+ "Loss after epoch 450 is 29.700636\n",
+ "Loss after epoch 500 is 29.690397\n",
+ "Loss after epoch 550 is 29.680191\n",
+ "Loss after epoch 600 is 29.66994\n",
+ "Loss after epoch 650 is 29.65969\n",
+ "Loss after epoch 700 is 29.6495\n",
+ "Loss after epoch 750 is 29.639277\n",
+ "Loss after epoch 800 is 29.629047\n",
+ "Loss after epoch 850 is 29.618847\n",
+ "Loss after epoch 900 is 29.608654\n",
+ "Loss after epoch 950 is 29.598469\n",
+ "Now testing the model in the test set\n",
+ "The final loss is: 33.011585\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\ndOjNfm9CAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "jgmH3wwt1src",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Okay, so we are doing good! \n",
+ "\n",
+ "Now, let me just put everything here into one function so that you can tweak the hyperparameters easily!\n",
+ "\n",
+ "Or better, do it yourself!"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "OZ5TY7B_4E_v",
+ "colab_type": "code",
+ "outputId": "5f7cfdb6-e69e-40ea-a4e1-4e0eca574301",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 415
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "def linear_regression(learning_rate=0.000005, n_epochs=100, interval=50):\n",
+ " # YOUR CODE HERE\n",
+ "\n",
+ " x = tf.placeholder(tf.float32 , name = 'x')\n",
+ " y = tf.placeholder(tf.float32 , name = 'y')\n",
+ " W = tf.Variable(0.0 , name = 'Weight_1')\n",
+ " b = tf.Variable(0.0 , name = 'bias_1')\n",
+ " pred_y = (W*x) + b\n",
+ " loss = tf.reduce_mean(tf.square(y - pred_y))\n",
+ " optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)\n",
+ " with tf.Session() as sess:\n",
+ " sess.run(tf.global_variables_initializer())\n",
+ " \n",
+ " for epoch in range(n_epochs):\n",
+ " _, curr_loss = sess.run([optimizer, loss], feed_dict={x:train_X, y:train_Y})\n",
+ " \n",
+ " if epoch % interval == 0:\n",
+ " print ('Loss after epoch', epoch, ' is ', curr_loss)\n",
+ " \n",
+ " print ('Now testing the model in the test set')\n",
+ " final_preds, final_loss = sess.run([pred_y, loss], feed_dict={x:test_X, y:test_Y})\n",
+ " \n",
+ " print ('The final loss is: ', final_loss)\n",
+ " plt.plot(test_X[:10], test_Y[:10], 'g', label='True Function')\n",
+ " plt.plot(test_X[:10], final_preds[:10], 'r', label='Predicted Function')\n",
+ " plt.legend()\n",
+ " plt.show()\n",
+ "pass\n",
+ "linear_regression()"
+ ],
+ "execution_count": 21,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Loss after epoch 0 is 48290.105\n",
+ "Loss after epoch 50 is 29.782778\n",
+ "Now testing the model in the test set\n",
+ "The final loss is: 33.2231\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "A6MaclhK4rc6",
+ "colab_type": "code",
+ "outputId": "065e7aa3-2d40-4566-9b49-d3237c69e4e5",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 548
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# Okay! Now let's tweak!\n",
+ "linear_regression(learning_rate=0.000034, n_epochs=500)"
+ ],
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Loss after epoch 0 is 48290.105\n",
+ "Loss after epoch 50 is 29.723145\n",
+ "Loss after epoch 100 is 29.653582\n",
+ "Loss after epoch 150 is 29.584167\n",
+ "Loss after epoch 200 is 29.514908\n",
+ "Loss after epoch 250 is 29.445837\n",
+ "Loss after epoch 300 is 29.376942\n",
+ "Loss after epoch 350 is 29.30818\n",
+ "Loss after epoch 400 is 29.239614\n",
+ "Loss after epoch 450 is 29.171177\n",
+ "Now testing the model in the test set\n",
+ "The final loss is: 32.455235\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nkImIiHTg/wB7E1g/b6J1IAAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "peoHmV2M40uU",
+ "colab_type": "code",
+ "outputId": "cc3b5c21-06bd-4aee-9476-1f50063bf5e5",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 715
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_regression(learning_rate=0.0000006, n_epochs=1000)"
+ ],
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Loss after epoch 0 is 48290.105\n",
+ "Loss after epoch 50 is 5544.9077\n",
+ "Loss after epoch 100 is 660.0498\n",
+ "Loss after epoch 150 is 101.81439\n",
+ "Loss after epoch 200 is 38.018833\n",
+ "Loss after epoch 250 is 30.727413\n",
+ "Loss after epoch 300 is 29.893017\n",
+ "Loss after epoch 350 is 29.796562\n",
+ "Loss after epoch 400 is 29.78446\n",
+ "Loss after epoch 450 is 29.781971\n",
+ "Loss after epoch 500 is 29.780622\n",
+ "Loss after epoch 550 is 29.77936\n",
+ "Loss after epoch 600 is 29.778126\n",
+ "Loss after epoch 650 is 29.776915\n",
+ "Loss after epoch 700 is 29.77566\n",
+ "Loss after epoch 750 is 29.774433\n",
+ "Loss after epoch 800 is 29.77318\n",
+ "Loss after epoch 850 is 29.771988\n",
+ "Loss after epoch 900 is 29.77074\n",
+ "Loss after epoch 950 is 29.76949\n",
+ "Now testing the model in the test set\n",
+ "The final loss is: 33.224064\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nrkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "KjY_KnlE5ClG",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Drive the loss to a minimum."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JKiHjGN15HPX",
+ "colab_type": "code",
+ "outputId": "4bcb2a50-5858-46ea-e393-667d80049851",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1049
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "# YOUR CODE HERE\n",
+ "linear_regression(learning_rate=0.0000556, n_epochs=200000, interval=5000)"
+ ],
+ "execution_count": 28,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Loss after epoch 0 is 48290.105\n",
+ "Loss after epoch 5000 is 20.356878\n",
+ "Loss after epoch 10000 is 13.997063\n",
+ "Loss after epoch 15000 is 9.710622\n",
+ "Loss after epoch 20000 is 6.821608\n",
+ "Loss after epoch 25000 is 4.874446\n",
+ "Loss after epoch 30000 is 3.5620654\n",
+ "Loss after epoch 35000 is 2.6775396\n",
+ "Loss after epoch 40000 is 2.081378\n",
+ "Loss after epoch 45000 is 1.679563\n",
+ "Loss after epoch 50000 is 1.4087588\n",
+ "Loss after epoch 55000 is 1.226228\n",
+ "Loss after epoch 60000 is 1.1032239\n",
+ "Loss after epoch 65000 is 1.0203019\n",
+ "Loss after epoch 70000 is 0.9644026\n",
+ "Loss after epoch 75000 is 0.92674285\n",
+ "Loss after epoch 80000 is 0.90138215\n",
+ "Loss after epoch 85000 is 0.8842748\n",
+ "Loss after epoch 90000 is 0.87272763\n",
+ "Loss after epoch 95000 is 0.864965\n",
+ "Loss after epoch 100000 is 0.85972536\n",
+ "Loss after epoch 105000 is 0.85620254\n",
+ "Loss after epoch 110000 is 0.85381925\n",
+ "Loss after epoch 115000 is 0.85222006\n",
+ "Loss after epoch 120000 is 0.8511251\n",
+ "Loss after epoch 125000 is 0.85038906\n",
+ "Loss after epoch 130000 is 0.8499146\n",
+ "Loss after epoch 135000 is 0.8495802\n",
+ "Loss after epoch 140000 is 0.8493226\n",
+ "Loss after epoch 145000 is 0.84920985\n",
+ "Loss after epoch 150000 is 0.84911305\n",
+ "Loss after epoch 155000 is 0.8490328\n",
+ "Loss after epoch 160000 is 0.8489686\n",
+ "Loss after epoch 165000 is 0.8489226\n",
+ "Loss after epoch 170000 is 0.8489226\n",
+ "Loss after epoch 175000 is 0.8489226\n",
+ "Loss after epoch 180000 is 0.8489226\n",
+ "Loss after epoch 185000 is 0.8489226\n",
+ "Loss after epoch 190000 is 0.8489226\n",
+ "Loss after epoch 195000 is 0.8489226\n",
+ "Now testing the model in the test set\n",
+ "The final loss is: 0.95510364\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
From 98b265ac9e61d5ff08035d6b26189c44eb8f1a72 Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Fri, 28 Dec 2018 01:32:25 +0530
Subject: [PATCH 08/12] Completed Assignment 2. Please take a look.
---
Assignment_2.ipynb | 128 ++++++++++++++++++++++-----------------------
1 file changed, 64 insertions(+), 64 deletions(-)
diff --git a/Assignment_2.ipynb b/Assignment_2.ipynb
index dafb726..530a016 100644
--- a/Assignment_2.ipynb
+++ b/Assignment_2.ipynb
@@ -22,7 +22,7 @@
"colab_type": "text"
},
"source": [
- "[View in Colaboratory](https://colab.research.google.com/github/Anubhab-Bob/Assignment-2/blob/Anubhab-Bob/Assignment_2.ipynb)"
+ " "
]
},
{
@@ -42,17 +42,17 @@
"metadata": {
"id": "QkJs_byK_qPg",
"colab_type": "code",
+ "outputId": "65790928-5ac4-4cac-9033-5cd5c6b6e3f4",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 34
- },
- "outputId": "54a5acbb-99c1-4976-8427-928829866b40"
+ "height": 33
+ }
},
"cell_type": "code",
"source": [
"print(dummy_list)"
],
- "execution_count": 0,
+ "execution_count": 2,
"outputs": [
{
"output_type": "stream",
@@ -67,11 +67,11 @@
"metadata": {
"id": "F2QMHeQAB4Ja",
"colab_type": "code",
+ "outputId": "ffd98b19-842c-4173-fd00-86956c639f63",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 34
- },
- "outputId": "f25ee66b-52c9-4a33-c6c1-e4e5b39429cd"
+ "height": 33
+ }
},
"cell_type": "code",
"source": [
@@ -80,7 +80,7 @@
"#for o in reversed(dummy_list):\n",
"# print(o)"
],
- "execution_count": 0,
+ "execution_count": 3,
"outputs": [
{
"output_type": "stream",
@@ -95,11 +95,11 @@
"metadata": {
"id": "7XeXBwK6CD1i",
"colab_type": "code",
+ "outputId": "b18002de-a2a2-4855-e2da-82dc314d6f59",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 34
- },
- "outputId": "7bac405f-c1a1-47af-f9d1-2bd4da1d9295"
+ "height": 33
+ }
},
"cell_type": "code",
"source": [
@@ -107,7 +107,7 @@
"dummy_list.extend(dummy_list_2)\n",
"print(dummy_list)"
],
- "execution_count": 0,
+ "execution_count": 4,
"outputs": [
{
"output_type": "stream",
@@ -160,11 +160,11 @@
"metadata": {
"id": "TY6jC_gyQbPP",
"colab_type": "code",
+ "outputId": "c6e40202-7c20-4caf-93dc-12e0c76ad1f2",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 890
- },
- "outputId": "d9ebd07a-f660-466d-8dc6-f63c75a3562d"
+ "height": 886
+ }
},
"cell_type": "code",
"source": [
@@ -173,7 +173,7 @@
" print (\"Value: \" + str(value))\n",
" print('\\n')"
],
- "execution_count": 0,
+ "execution_count": 7,
"outputs": [
{
"output_type": "stream",
@@ -239,11 +239,11 @@
"metadata": {
"id": "G0Ft30gsucvR",
"colab_type": "code",
+ "outputId": "8f9a521d-8ceb-475c-fd71-cd4a4b193d64",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 84
- },
- "outputId": "43c82359-3219-4ac8-c68a-22f99a666d04"
+ }
},
"cell_type": "code",
"source": [
@@ -261,7 +261,7 @@
"print(dummy_list)\n",
"#print(sorted(dummy_list, reversed=True))"
],
- "execution_count": 0,
+ "execution_count": 8,
"outputs": [
{
"output_type": "stream",
@@ -279,11 +279,11 @@
"metadata": {
"id": "DtOAyHUtvm8Z",
"colab_type": "code",
+ "outputId": "23b3a649-a150-40d2-909a-09506e32c10f",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 34
- },
- "outputId": "247c5ea9-d230-42ab-f6ce-bdd0b0b3ae19"
+ "height": 33
+ }
},
"cell_type": "code",
"source": [
@@ -291,7 +291,7 @@
"dummy_list.remove(x)\n",
"print(dummy_list)"
],
- "execution_count": 0,
+ "execution_count": 9,
"outputs": [
{
"output_type": "stream",
@@ -306,18 +306,18 @@
"metadata": {
"id": "Adi6fYUBwnFG",
"colab_type": "code",
+ "outputId": "6fa54ac4-c156-4ce3-a0cf-03ffbb5b6d15",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 34
- },
- "outputId": "73231223-6081-466f-937b-b759e280aaa6"
+ "height": 33
+ }
},
"cell_type": "code",
"source": [
"del dummy_list[5]\n",
"print (dummy_list)"
],
- "execution_count": 0,
+ "execution_count": 10,
"outputs": [
{
"output_type": "stream",
@@ -332,18 +332,18 @@
"metadata": {
"id": "OTEasC7uxmOX",
"colab_type": "code",
+ "outputId": "fa25c22f-b308-4b2a-ac63-90d0dbf4faaa",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 34
- },
- "outputId": "18486a51-d854-4d83-982b-2eb7647e86c6"
+ "height": 33
+ }
},
"cell_type": "code",
"source": [
"dummy_list.clear()\n",
"print(dummy_list)"
],
- "execution_count": 0,
+ "execution_count": 11,
"outputs": [
{
"output_type": "stream",
@@ -381,18 +381,18 @@
"metadata": {
"id": "VV7zXbLnYp2t",
"colab_type": "code",
+ "outputId": "7a0112f4-dc8d-4621-9c9f-49f64395f5d2",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 202
- },
- "outputId": "d318cb7b-4b2e-41fa-d1fd-ad931ec931a9"
+ "height": 201
+ }
},
"cell_type": "code",
"source": [
"b = np.linspace(1.3,2.5, num=64)\n",
"print (b)"
],
- "execution_count": 0,
+ "execution_count": 13,
"outputs": [
{
"output_type": "stream",
@@ -417,11 +417,11 @@
"metadata": {
"id": "JYYLSWaQRKJC",
"colab_type": "code",
+ "outputId": "b3b3c270-f675-4506-e784-beee8ca1e2f7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 50
- },
- "outputId": "29491d17-ac3e-4fab-85b6-91862e8f894a"
+ }
},
"cell_type": "code",
"source": [
@@ -430,7 +430,7 @@
"y = np.tile(x,(3*n))\n",
"print (y)"
],
- "execution_count": 0,
+ "execution_count": 14,
"outputs": [
{
"output_type": "stream",
@@ -446,11 +446,11 @@
"metadata": {
"id": "FGwwjf_pTMRs",
"colab_type": "code",
+ "outputId": "6cb8a5f9-16c3-4d19-c99f-709cdb74f778",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 34
- },
- "outputId": "66dfd586-66ac-4e7f-af97-386793d75a76"
+ "height": 33
+ }
},
"cell_type": "code",
"source": [
@@ -464,7 +464,7 @@
"\n",
"print(b[mask]) #applying the mask on the numpy array"
],
- "execution_count": 0,
+ "execution_count": 15,
"outputs": [
{
"output_type": "stream",
@@ -479,11 +479,11 @@
"metadata": {
"id": "ZRDXe1q4Yw6C",
"colab_type": "code",
+ "outputId": "1a88b34c-7a90-4b40-c9d7-7e16fbe9b027",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 34
- },
- "outputId": "25134caa-83c5-46db-a54c-bd968458254f"
+ "height": 33
+ }
},
"cell_type": "code",
"source": [
@@ -492,7 +492,7 @@
"b = np.array([7,2,10,2,7,4,9,4,9,8])\n",
"np.intersect1d(a,b)"
],
- "execution_count": 0,
+ "execution_count": 16,
"outputs": [
{
"output_type": "execute_result",
@@ -504,7 +504,7 @@
"metadata": {
"tags": []
},
- "execution_count": 57
+ "execution_count": 16
}
]
},
@@ -512,11 +512,11 @@
"metadata": {
"id": "vrIl330LZDO3",
"colab_type": "code",
+ "outputId": "25c61d75-1de8-4e4e-e596-40453739cba6",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 101
- },
- "outputId": "31437943-9a45-4f7e-af44-8d9575e8a6e1"
+ "height": 100
+ }
},
"cell_type": "code",
"source": [
@@ -526,7 +526,7 @@
"a.shape = a.size//-1, 5\n",
"print(a)"
],
- "execution_count": 0,
+ "execution_count": 17,
"outputs": [
{
"output_type": "stream",
@@ -545,11 +545,11 @@
"metadata": {
"id": "atGd8_9_Zjc-",
"colab_type": "code",
+ "outputId": "67882dcf-e6ff-4a67-b531-0195b7d8177d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 84
- },
- "outputId": "836cbdae-f78f-4dfc-8bc1-43dab74012dc"
+ }
},
"cell_type": "code",
"source": [
@@ -559,7 +559,7 @@
"print('\\n')\n",
"np.asarray(a)"
],
- "execution_count": 0,
+ "execution_count": 18,
"outputs": [
{
"output_type": "stream",
@@ -580,7 +580,7 @@
"metadata": {
"tags": []
},
- "execution_count": 59
+ "execution_count": 18
}
]
},
@@ -588,11 +588,11 @@
"metadata": {
"id": "L8JI_PAmbcbp",
"colab_type": "code",
+ "outputId": "dac71dd3-e9f4-4a36-be66-04a92d7ecb3f",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 101
- },
- "outputId": "0ba45318-d34a-4b6d-c09d-42ccffa782f5"
+ "height": 100
+ }
},
"cell_type": "code",
"source": [
@@ -600,7 +600,7 @@
"d[1:-1,1:-1] = 0\n",
"print(d)"
],
- "execution_count": 0,
+ "execution_count": 19,
"outputs": [
{
"output_type": "stream",
@@ -619,11 +619,11 @@
"metadata": {
"id": "SY2a-sGxU4Q8",
"colab_type": "code",
+ "outputId": "96dfeeb7-b231-47f2-be76-0bcd1696699a",
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 151
- },
- "outputId": "70bdeca0-5a5e-46dd-ed88-694e3f48dd4a"
+ "height": 150
+ }
},
"cell_type": "code",
"source": [
@@ -632,7 +632,7 @@
"x[::2,1::2] = 1\n",
"print(x)"
],
- "execution_count": 0,
+ "execution_count": 20,
"outputs": [
{
"output_type": "stream",
From 734ca78386d280518e4e6f92b54f53d183dbe202 Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Fri, 28 Dec 2018 01:35:45 +0530
Subject: [PATCH 09/12] Delete First_Date_with_TensorFlow (Complete).ipynb
This had been uploaded in this repository by mistake.
---
First_Date_with_TensorFlow (Complete).ipynb | 1104 -------------------
1 file changed, 1104 deletions(-)
delete mode 100644 First_Date_with_TensorFlow (Complete).ipynb
diff --git a/First_Date_with_TensorFlow (Complete).ipynb b/First_Date_with_TensorFlow (Complete).ipynb
deleted file mode 100644
index 6ce7cc9..0000000
--- a/First_Date_with_TensorFlow (Complete).ipynb
+++ /dev/null
@@ -1,1104 +0,0 @@
-{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "name": "Copy of First_Date_with_TensorFlow.ipynb",
- "version": "0.3.2",
- "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": [
- " "
- ]
- },
- {
- "metadata": {
- "id": "2XXfXed5YLbe",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "# First Date with TensorFlow\n",
- "\n",
- "Hi all, \n",
- "\n",
- "You know what's important for understanding Deep Learning / Machine Learning? \n",
- "Intuition. Period.\n",
- "\n",
- "And Intuition comes when you run the code multiple times.\n",
- "\n",
- "So, today I can write a couple of defination and say this is this, this is that. \n",
- "You Google half of the things up. You find answers which you need to Google further. \n",
- "In the process, you probably won't even remember what's the first thing you started out with!\n",
- "\n",
- "So?\n",
- "\n",
- "Hence on, I will execute cells with code. \n",
- "The neurons in your brain will optimize a function to get a hold of what each function is doing. \n",
- "**No Theory Just Code.**\n",
- "\n",
- "I will at max give a defination that extends for a line. That's it. \n",
- "Let's get started!\n",
- "\n",
- " \n",
- "\n",
- "**RECOMMENDED!** \n",
- "Write the code in the cells using the signals sent by your brain to your fingers! \n",
- "Don't just `shift+enter` the cells.\n",
- "\n",
- "[Source](https://github.com/iArunava/TensorFlow-NoteBooks)"
- ]
- },
- {
- "metadata": {
- "id": "gYWUpE-bYKWP",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Essential imports\n",
- "import numpy as np\n",
- "import tensorflow as tf\n",
- "import matplotlib.pyplot as plt"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "eKpz5NCIYMdi",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Let's define some tensors\n",
- "t1 = tf.constant(2.0, dtype=tf.float32)\n",
- "t2 = tf.constant([1.0, 2.0], dtype=tf.float32)\n",
- "t3 = tf.constant([[[1.45, 9.0], [2.0, 3.0], [4.0, 5.0]], \n",
- " [[1.0, 9.0], [2.0, 3.0], [4.0, 5.0]]])"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "vmMcjzTxbWzw",
- "colab_type": "code",
- "outputId": "1396b865-0a11-4b31-a1d5-9510e6b20301",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 68
- }
- },
- "cell_type": "code",
- "source": [
- "# Let's print them out!\n",
- "print (t1)\n",
- "print (t2)\n",
- "print (t3)"
- ],
- "execution_count": 6,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Tensor(\"Const_3:0\", shape=(), dtype=float32)\n",
- "Tensor(\"Const_4:0\", shape=(2,), dtype=float32)\n",
- "Tensor(\"Const_5:0\", shape=(2, 3, 2), dtype=float32)\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "10ahnfjYbcop",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "Where's Waldo? \n",
- "I mean, the value? \n",
- "\n",
- "So, the thing is you can't print the value of tensors directly. \n",
- "You have to use `session`, so let's do that!"
- ]
- },
- {
- "metadata": {
- "id": "ol6O5I7Tb2nb",
- "colab_type": "code",
- "outputId": "1c005d9c-951d-48be-94e5-8681eaefca4d",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 204
- }
- },
- "cell_type": "code",
- "source": [
- "sess = tf.Session()\n",
- "print (sess.run(t1))\n",
- "print (\"=======================\")\n",
- "print (sess.run(t2))\n",
- "print (\"=======================\")\n",
- "print (sess.run(t3))\n",
- "sess.close()"
- ],
- "execution_count": 7,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "2.0\n",
- "=======================\n",
- "[1. 2.]\n",
- "=======================\n",
- "[[[1.45 9. ]\n",
- " [2. 3. ]\n",
- " [4. 5. ]]\n",
- "\n",
- " [[1. 9. ]\n",
- " [2. 3. ]\n",
- " [4. 5. ]]]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "rXKfVs_zb-kU",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "Aaahaa!! Just printed those tensors!!! \n",
- "Feels good! \n",
- "\n",
- "For some of you, who are like, dude you got \"No Theory Just Code\" in bold \n",
- "And you are still using the markdown cells for the theory ?!\n",
- "\n",
- "I am just gonna say I am a unreasonable man. \n",
- "\n",
- "\n",
- "So, you are programming with tf. \n",
- "What ever you do is broken down to 2 basic steps:\n",
- "- Building the computational Graph!\n",
- "- Execute that graph using `session`!\n",
- "\n",
- "That's all!\n",
- "\n",
- " \n",
- "\n",
- "Let's compare this 2 steps with what we did above! \n",
- "So, I defined 3 `tensor`s and these 3 `tensor`s formed my computational Graph. \n",
- "And then I executed each tensor in this graph using a `session`.\n",
- "\n",
- "That simple!\n",
- "\n",
- " \n",
- "\n",
- "Now, let's define a few more computational graphs and execute them with sessions.\n",
- "\n",
- "Okay, to start with let's build this computational graph!\n",
- "\n",
- ""
- ]
- },
- {
- "metadata": {
- "id": "FyVz0GNqgreZ",
- "colab_type": "code",
- "outputId": "e345fccd-ca78-49bf-b9dd-ae0a6d29da9f",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 51
- }
- },
- "cell_type": "code",
- "source": [
- "# Let's define the graph\n",
- "comp_graph_1 = tf.multiply(tf.add(78, 19), 79)\n",
- "\n",
- "# Alternatively\n",
- "comp_graph_1_alt = (tf.constant(78) + tf.constant(19)) * tf.constant(79)\n",
- "\n",
- "# Let's execute using session\n",
- "sess = tf.Session()\n",
- "print ('Comp Graph 1 : ', sess.run(comp_graph_1))\n",
- "print ('Comp Graph 1 Alt: ', sess.run(comp_graph_1_alt))\n",
- "sess.close()"
- ],
- "execution_count": 8,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Comp Graph 1 : 7663\n",
- "Comp Graph 1 Alt: 7663\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "SVMMtuFYhaQB",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "Let's define a sligtly more involved graph!\n",
- "\n",
- ""
- ]
- },
- {
- "metadata": {
- "id": "4856BTvRhiBb",
- "colab_type": "code",
- "outputId": "50a23939-418c-4565-bd87-b66b9ee7b2bf",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 68
- }
- },
- "cell_type": "code",
- "source": [
- "# Let build the graph\n",
- "# We need to cast cause the tensors operated on should be of the same type\n",
- "comp_graph_part_1 = tf.cast(tf.subtract(tf.add(7, 8), tf.add(9, 10)), \n",
- " dtype=tf.float32)\n",
- "comp_graph_part_2 = tf.divide(tf.cast(tf.multiply(7, 10), dtype=tf.float32), tf.constant(19.5))\n",
- "comp_graph_complete = tf.maximum(comp_graph_part_1, comp_graph_part_2)\n",
- "\n",
- "# Let's execute\n",
- "sess = tf.Session()\n",
- "part1_res, part2_res, total_res = sess.run([comp_graph_part_1, comp_graph_part_2, comp_graph_complete])\n",
- "print ('Complete Result: ', total_res)\n",
- "print ('Part 1 Result: ', part1_res)\n",
- "print ('Part 2 Result: ', part2_res)\n",
- "sess.close()"
- ],
- "execution_count": 9,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Complete Result: 3.5897436\n",
- "Part 1 Result: -4.0\n",
- "Part 2 Result: 3.5897436\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "B-_ZDtEbj4N0",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "Cool! Let's go! Build another graph and execute it with sessions. \n",
- "\n",
- "But this time, it's all you!\n",
- "\n",
- "Build this graph and execute it with `session`!\n",
- "\n",
- "\n",
- "\n",
- "_Remember that `tensors` operated on should be of the same type!_ \n",
- "_Search up errors and other help you need on Google_"
- ]
- },
- {
- "metadata": {
- "id": "-uHNe1BolJY0",
- "colab_type": "code",
- "outputId": "25007c20-00d5-4239-ab31-3e319120d77b",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 119
- }
- },
- "cell_type": "code",
- "source": [
- "# Build the graph\n",
- "# YOUR CODE HERE\n",
- "node_1 = tf.constant([9, 10], dtype=tf.float32, name='leaf_node1')\n",
- "node_2 = tf.constant([7, 8.65], dtype=tf.float32, name='leaf_node2')\n",
- "node_3 = tf.constant(5.6, dtype=tf.float32, name='leaf_node3')\n",
- "node_4 = tf.constant([7.65, 9], dtype=tf.float32, name='leaf_node4')\n",
- "node_5 = tf.constant([13.5, 7.18], dtype=tf.float32, name='leaf_node5')\n",
- "\n",
- "cg_part_1=(node_1 * node_2)\n",
- "\n",
- "cg_part_2=(node_4 + node_5)\n",
- "\n",
- "cg_part_3=tf.divide(cg_part_1, node_3)\n",
- "\n",
- "comp_graph_2 = tf.minimum(((node_1 * node_2) / node_3),\n",
- " (node_4 + node_5))\n",
- "\n",
- "comp_graph_2_alt=tf.minimum(cg_part_2, cg_part_3)\n",
- "# Execute \n",
- "# YOUR CODE HERE\n",
- "with tf.Session() as sess:\n",
- " print(sess.run(comp_graph_2))\n",
- " part1, part2, part3, total = sess.run([cg_part_1, cg_part_2, cg_part_3, comp_graph_2_alt])\n",
- "print (\"=======================\")\n",
- "print ('Part 1 Result: ', part1)\n",
- "print ('Part 2 Result: ', part2)\n",
- "print ('Part 3 Result: ', part3)\n",
- "print ('Final Result: ', total)"
- ],
- "execution_count": 10,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[11.25 15.446429]\n",
- "=======================\n",
- "Part 1 Result: [63. 86.5]\n",
- "Part 2 Result: [21.15 16.18]\n",
- "Part 3 Result: [11.25 15.446429]\n",
- "Final Result: [11.25 15.446429]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "qmap38WelREN",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "Let's do another! \n",
- "It's fun! Isn't it?!\n",
- "\n",
- "Build and execute this one!\n",
- "\n",
- ""
- ]
- },
- {
- "metadata": {
- "id": "0ZhYwAlLmEvB",
- "colab_type": "code",
- "outputId": "4b97a028-dc5d-4d7b-b640-b21e85c7b8bd",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 238
- }
- },
- "cell_type": "code",
- "source": [
- "# Build the graph\n",
- "# YOUR CODE HERE\n",
- "node_6 = tf.constant([[1.2 , 3.4],\n",
- " [7.5 , 8.6]], dtype = tf.float32, name='leaf_node6')\n",
- "node_7 = tf.constant([[7 , 9],\n",
- " [8 , 6]] , dtype = tf.float32, name='leaf_node7')\n",
- "node_8 = tf.constant([[2.6 , 18.1],\n",
- " [7.86 , 9.81],\n",
- " [9.36 , 10.41]] , dtype = tf.float32, name='leaf_node8')\n",
- "node_9 = tf.constant([[2.79 , 3.81 , 5.6],\n",
- " [7.3 , 5.67 , 8.9]] , dtype = tf.float32, name='leaf_node9')\n",
- "\n",
- "cg_1 = tf.reduce_mean(node_6, axis = 1)\n",
- "cg_2 = tf.transpose(node_8)\n",
- "cg_3 = tf.multiply(node_7 , cg_1)\n",
- "cg_4 = tf.multiply(node_9 , cg_2)\n",
- "cg_5 = tf.reduce_sum(cg_4)\n",
- "cg_com = cg_3 + cg_5\n",
- "\n",
- "#cg_1alt = (node_7 * (np.mean(node_6, axis = 1)))\n",
- "#cg_1alt = (node_7 * (tf.reduce_mean(node_6, axis = 1)))\n",
- "#cg_2alt = np.sum((node_9 * tf.transpose(node_8)))\n",
- "#cg_2alt = tf.reduce_sum((node_9 * tf.transpose(node_8)))\n",
- "#cg_comalt = cg_1alt + cg_2alt\n",
- "\n",
- "# Execute \n",
- "# YOUR CODE HERE\n",
- "with tf.Session() as sess:\n",
- " print(sess.run(cg_com))\n",
- " part_1, part_2, part_3, part_4, part_5, final = sess.run(\n",
- " [cg_1, cg_2, cg_3, cg_4, cg_5, cg_com])\n",
- "print (\"=======================\")\n",
- "print ('Part 1 Result: ', part_1)\n",
- "print ('Part 2 Result: ', part_2)\n",
- "print ('Part 3 Result: ', part_3)\n",
- "print ('Part 2 Result: ', part_4)\n",
- "print ('Part 3 Result: ', part_5)\n",
- "print ('Final Result: ', final)"
- ],
- "execution_count": 11,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[[386.1183 442.4683 ]\n",
- " [388.41827 418.3183 ]]\n",
- "=======================\n",
- "Part 1 Result: [2.3000002 8.05 ]\n",
- "Part 2 Result: [[ 2.6 7.86 9.36]\n",
- " [18.1 9.81 10.41]]\n",
- "Part 3 Result: [[16.100002 72.450005]\n",
- " [18.400002 48.300003]]\n",
- "Part 2 Result: [[ 7.2539997 29.9466 52.415997 ]\n",
- " [132.13 55.622704 92.648994 ]]\n",
- "Part 3 Result: 370.01828\n",
- "Final Result: [[386.1183 442.4683 ]\n",
- " [388.41827 418.3183 ]]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "BnB0b6qCmGmg",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "And a final one, before we move on to the next part!\n",
- "\n",
- ""
- ]
- },
- {
- "metadata": {
- "id": "GQWyCvsQmMcL",
- "colab_type": "code",
- "outputId": "69060a80-9d7f-4b1a-b125-683be586a07a",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 357
- }
- },
- "cell_type": "code",
- "source": [
- "# Build the graph\n",
- "# YOUR CODE HERE\n",
- "\n",
- "node_10 = tf.constant([[7.36 , 8.91 , 10.41],\n",
- " [5.31 , 9.38 , 7.99]] , dtype = tf.float32, name='leaf_node10')\n",
- "node_11 = tf.constant([[7.99 , 10.36],\n",
- " [5.36 , 7.98],\n",
- " [8.91 , 5.67]] , dtype = tf.float32, name='leaf_node11')\n",
- "node_12 = tf.constant([[1.0 , 5.6 , 6.1 , 8.0],\n",
- " [0 , 0 , 7.98 , 9.0],\n",
- " [0 , 0 , 7.6 , 7],\n",
- " [0 , 0 , 0 , 8.98]] , dtype = tf.float32, name='leaf_node12')\n",
- "\n",
- "c_graph1 = tf.transpose(node_11)\n",
- "c_graph2 = (node_10 * c_graph1)\n",
- "c_graph3 = tf.reduce_sum(c_graph2)\n",
- "c_graph4 = tf.add(c_graph3 , 7.0)\n",
- "c_graph5 = tf.divide(c_graph4 , 19.6)\n",
- "c_graph_final = tf.divide(c_graph5 , node_12)\n",
- "\n",
- "c_graph_alt = (((tf.reduce_sum(node_10 * tf.transpose(node_11))) + 7.0) / 19.6/node_12)\n",
- "\n",
- "# Execute \n",
- "# YOUR CODE HERE\n",
- "\n",
- "with tf.Session() as sess:\n",
- " print(sess.run(c_graph_final))\n",
- " pt_1, pt_2, pt_3, pt_4, pt_5, rslt = sess.run(\n",
- " [c_graph1, c_graph2, c_graph3, c_graph4, c_graph5, c_graph_final])\n",
- "print (\"\\n\\n=======================\\n\\n\")\n",
- "print ('Part 1 Result: ', pt_1)\n",
- "print ('Part 2 Result: ', pt_2)\n",
- "print ('Part 3 Result: ', pt_3)\n",
- "print ('Part 2 Result: ', pt_4)\n",
- "print ('Part 3 Result: ', pt_5)\n",
- "print ('Final Result: ', rslt)"
- ],
- "execution_count": 12,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[[19.463488 3.475623 3.1907358 2.432936 ]\n",
- " [ inf inf 2.4390335 2.1626098]\n",
- " [ inf inf 2.5609853 2.7804983]\n",
- " [ inf inf inf 2.1674263]]\n",
- "\n",
- "\n",
- "=======================\n",
- "\n",
- "\n",
- "Part 1 Result: [[ 7.99 5.36 8.91]\n",
- " [10.36 7.98 5.67]]\n",
- "Part 2 Result: [[58.8064 47.7576 92.7531 ]\n",
- " [55.011597 74.8524 45.3033 ]]\n",
- "Part 3 Result: 374.48438\n",
- "Part 2 Result: 381.48438\n",
- "Part 3 Result: 19.463488\n",
- "Final Result: [[19.463488 3.475623 3.1907358 2.432936 ]\n",
- " [ inf inf 2.4390335 2.1626098]\n",
- " [ inf inf 2.5609853 2.7804983]\n",
- " [ inf inf inf 2.1674263]]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "12NC7XTPsJw7",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "# Linear Regression\n",
- "\n",
- "Okay, now we will create a dummy dataset and perform linear regression on this dataset!\n",
- "\n",
- "\n",
- "To get you in the habit of looking up for the documentation, I am not providing what some of the following functions does, Google them up!"
- ]
- },
- {
- "metadata": {
- "id": "hW31RZkjtNwI",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Create the dataset\n",
- "X = np.linspace(-30.0, 300.0, 300)\n",
- "Y = 2 * np.linspace(-30.0, 250.0, 300) + np.random.randn(*X.shape)\n",
- "\n",
- "# Divide it into train and test\n",
- "train_X = X[:250]\n",
- "train_Y = Y[:250]\n",
- "\n",
- "test_X = X[250:]\n",
- "test_Y = Y[250:]"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "LQKy6U33y4lt",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Let's define the hyperparameters\n",
- "learning_rate = 0.000005\n",
- "n_epochs = 1000\n",
- "interval = 50"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "1h1-D8K1uT48",
- "colab_type": "code",
- "outputId": "2189ad35-c490-4fe6-b530-27517fff8cc8",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 347
- }
- },
- "cell_type": "code",
- "source": [
- "# let's viz the first 10 datapoints of the dataset\n",
- "plt.plot(train_X[:10], train_Y[:10], 'g')\n",
- "plt.show()"
- ],
- "execution_count": 15,
- "outputs": [
- {
- "output_type": "display_data",
- "data": {
- "image/png": "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\ngg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
- },
- {
- "metadata": {
- "id": "jrsUps0nu8vj",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "** Question ** \n",
- "Why did I created a session to plot the graph? \n",
- "[Ans]"
- ]
- },
- {
- "metadata": {
- "id": "P3-iuxE4sjAf",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Let's define the placeholders\n",
- "\n",
- "# Placeholders?\n",
- "# The input to the model changes on iteration\n",
- "# So we cannot have a constant in the input as we did before\n",
- "# And thus we need placeholders which we can change on each \n",
- "# iteration of the training\n",
- "\n",
- "x = tf.placeholder(tf.float32, name='x')\n",
- "y = tf.placeholder(tf.float32, name='y')"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "8hPRkaoxvRyV",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Let's define the linear regression model\n",
- "\n",
- "# tf.Variable?\n",
- "# We define the model parameters as tf.Variables\n",
- "# as they get updated throghout the training.\n",
- "# And variables denotes something which changes overtime.\n",
- "\n",
- "W = tf.Variable(0.0, name='weight_1')\n",
- "b = tf.Variable(0.0, name='bias_1')\n",
- "\n",
- "pred_y = (W*x) + b"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "cSw1P8bkv96r",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Let's define the loss function\n",
- "# We are going to use the mean squared loss\n",
- "loss = tf.reduce_mean(tf.square(y - pred_y))"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "5G4uQqjsygNj",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Let's define the optimizer\n",
- "# And specify the which value (i.e. loss) it has to minimize\n",
- "optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "ttI7ZT-ozAm1",
- "colab_type": "code",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 721
- },
- "outputId": "d0ff4839-1198-44d8-bd4d-79d92dc1a528"
- },
- "cell_type": "code",
- "source": [
- "# So the graph is now built\n",
- "# Now let's execute the graph using session\n",
- "# i.e. lets train the model\n",
- "\n",
- "# What it is to train a model?\n",
- "# To update the paramters in the graph (i.e. tf.Variables)\n",
- "# So that the loss is minimized\n",
- "\n",
- "# Okay let's start!\n",
- "with tf.Session() as sess:\n",
- " # We need to initialize the variables in our graph\n",
- " sess.run(tf.global_variables_initializer())\n",
- " \n",
- " for epoch in range(n_epochs):\n",
- " _, curr_loss = sess.run([optimizer, loss], feed_dict={x:train_X, y:train_Y})\n",
- " \n",
- " if epoch % interval == 0:\n",
- " print ('Loss after epoch', epoch, ' is ', curr_loss)\n",
- " \n",
- " print ('Now testing the model in the test set')\n",
- " final_preds, final_loss = sess.run([pred_y, loss], feed_dict={x:test_X, y:test_Y})\n",
- " \n",
- " print ('The final loss is: ', final_loss)\n",
- " \n",
- "# Plotting the final predictions against the true predictions\n",
- "plt.plot(test_X[:10], test_Y[:10], 'g', label='True Function')\n",
- "plt.plot(test_X[:10], final_preds[:10], 'r', label='Predicted Function')\n",
- "plt.legend()\n",
- "plt.show()"
- ],
- "execution_count": 20,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Loss after epoch 0 is 48290.105\n",
- "Loss after epoch 50 is 29.782778\n",
- "Loss after epoch 100 is 29.7724\n",
- "Loss after epoch 150 is 29.762121\n",
- "Loss after epoch 200 is 29.751879\n",
- "Loss after epoch 250 is 29.741611\n",
- "Loss after epoch 300 is 29.731339\n",
- "Loss after epoch 350 is 29.721113\n",
- "Loss after epoch 400 is 29.710855\n",
- "Loss after epoch 450 is 29.700636\n",
- "Loss after epoch 500 is 29.690397\n",
- "Loss after epoch 550 is 29.680191\n",
- "Loss after epoch 600 is 29.66994\n",
- "Loss after epoch 650 is 29.65969\n",
- "Loss after epoch 700 is 29.6495\n",
- "Loss after epoch 750 is 29.639277\n",
- "Loss after epoch 800 is 29.629047\n",
- "Loss after epoch 850 is 29.618847\n",
- "Loss after epoch 900 is 29.608654\n",
- "Loss after epoch 950 is 29.598469\n",
- "Now testing the model in the test set\n",
- "The final loss is: 33.011585\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "display_data",
- "data": {
- "image/png": "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\ndOjNfm9CAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
- },
- {
- "metadata": {
- "id": "jgmH3wwt1src",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "Okay, so we are doing good! \n",
- "\n",
- "Now, let me just put everything here into one function so that you can tweak the hyperparameters easily!\n",
- "\n",
- "Or better, do it yourself!"
- ]
- },
- {
- "metadata": {
- "id": "OZ5TY7B_4E_v",
- "colab_type": "code",
- "outputId": "5f7cfdb6-e69e-40ea-a4e1-4e0eca574301",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 415
- }
- },
- "cell_type": "code",
- "source": [
- "def linear_regression(learning_rate=0.000005, n_epochs=100, interval=50):\n",
- " # YOUR CODE HERE\n",
- "\n",
- " x = tf.placeholder(tf.float32 , name = 'x')\n",
- " y = tf.placeholder(tf.float32 , name = 'y')\n",
- " W = tf.Variable(0.0 , name = 'Weight_1')\n",
- " b = tf.Variable(0.0 , name = 'bias_1')\n",
- " pred_y = (W*x) + b\n",
- " loss = tf.reduce_mean(tf.square(y - pred_y))\n",
- " optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(loss)\n",
- " with tf.Session() as sess:\n",
- " sess.run(tf.global_variables_initializer())\n",
- " \n",
- " for epoch in range(n_epochs):\n",
- " _, curr_loss = sess.run([optimizer, loss], feed_dict={x:train_X, y:train_Y})\n",
- " \n",
- " if epoch % interval == 0:\n",
- " print ('Loss after epoch', epoch, ' is ', curr_loss)\n",
- " \n",
- " print ('Now testing the model in the test set')\n",
- " final_preds, final_loss = sess.run([pred_y, loss], feed_dict={x:test_X, y:test_Y})\n",
- " \n",
- " print ('The final loss is: ', final_loss)\n",
- " plt.plot(test_X[:10], test_Y[:10], 'g', label='True Function')\n",
- " plt.plot(test_X[:10], final_preds[:10], 'r', label='Predicted Function')\n",
- " plt.legend()\n",
- " plt.show()\n",
- "pass\n",
- "linear_regression()"
- ],
- "execution_count": 21,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Loss after epoch 0 is 48290.105\n",
- "Loss after epoch 50 is 29.782778\n",
- "Now testing the model in the test set\n",
- "The final loss is: 33.2231\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "display_data",
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAFKCAYAAADMuCxnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3XdYk+fbxvFvBgkkgKLi3nuLo63W\nDrXaWqsd1l2tWtx7oqjUvfeuVuuqs2ptta1dSrV2Kq66xYUbUEASEkjyvH+k5fe2tYoKPAGuz3F4\nCCQ8ObnNwWmSJ9etURRFQQghhBCq0qodQAghhBBSyEIIIYRHkEIWQgghPIAUshBCCOEBpJCFEEII\nDyCFLIQQQngAvZo3Hh19L0OPHxBg4u5da4beRnYna5g+ZB3Th6zjk5M1TB+Pu46BgX7/eVm2foSs\n1+vUjpDlyRqmD1nH9CHr+ORkDdNHRqxjti5kIYQQIquQQhZCCCE8gBSyEEII4QGkkIUQQggPIIUs\nhBBCeAApZCGEEMIDSCELIYQQHiBNg0FsNhvNmzenT58+1KtXj9DQUBwOB3q9npkzZxIYGEiVKlWo\nVatW6vesXr0anS7rvd9t4cK5nDlzijt3YrHZbBQuXAR//1xMmTIzXY7fqlUL8ucvgFb7v/8LLVq0\n/ImP++OPP/DMM8+SkBDPypXLCAkZ/cTHFEIIkXnSVMhLly4lV65cAMybN482bdrQrFkz1q9fz6pV\nqwgJCcHX15d169ZlaNjM0L//YAC+/HInFy5E0q/foHS/jVmzFmAymdL1mJs2radWrafImzeflLEQ\nQmRBDy3kyMhIzp8/T4MGDQAYO3YsRqMRgICAAE6cOJGhAT1FRMRBNm36GKvVSr9+gxk6tB9ffPE9\nAGPGhNCyZRsqVqzElCnjuXfvHk6nk0GDhlO2bLk0Hf+111761/EOHz6ExZLIlSuXuXbtKgMGDKVe\nvfrs3v0FW7duRqPR0K7dO6SkpHDy5B8MGzaAkSPDGD9+DCtXriMi4iDLly9Br9cTGJif0ND3+e67\nrzl27AhxcXe5cuUyHTp0onnzNzNs3YQQQqTNQwt5+vTphIWFsWPHDoDUR3ZOp5MNGzbQt29fAJKT\nkxk6dCjXrl3jlVdeoWvXrk8cbtxPY9gZueOxv1+r1eByKX/7WosybzLu2UmPdbzIyPNs3Lgdg8Fw\n38u3bNnIM888S4sWb3Lx4gXmz5/FvHlLHuu2/nL79i1mzVrAL7/8xGefbaNGjSBWr17BmjUbSU5O\nYfLksUybNocVKz5g1qwFxMfHpX7vrFlTmTt3MQUKFGTOnOl8++1uNBoNkZHn+eCDj7h6NYqxY0dJ\nIQshxH38duNXEpLjaFzilUy5vQcW8o4dOwgKCqJYsWJ/+7rT6SQkJIS6detSr149AEJCQnj99dfR\naDR07NiROnXqUK1atQfeeECA6YHzQE0+BrRaTVp/lvv65/ebfAwPHO79Fz8/b0ym/103d24TlStX\nokiRvABoNJrUy4xGL3LnNnHmzAnu3LnD3r3fAGC3J/3rtnQ6LaGhg1NfXw8ICGDBggX3PZ7ZbKRe\nvWcIDPSjQoVS2O1JxMffply5shQtGgjAypUfph43Xz5fdLoU9HotXl5O9HodVau6H6E3aPA8v//+\nO5UrV+app2pTsGBu/Py8SEqyPHQ90rJe4uFkHdOHrOOTkzX8b4qi8HXk10zZP4X9V/Zj8jKRGJqI\nRvPvLkrvdXxgIYeHhxMVFUV4eDg3b97EYDBQsGBBduzYQYkSJejXr1/qddu3b5/6cd26dTl79uxD\nC/lhO2WE1HyfkJrvp+XnuK/AQL/77iiVll2m7t2zYbUmp143Ls6KomhSP1cUJfVjiyUp9fL+/YdS\ntWr1/7wtp9PF1Klz//YacnT0vfsez2Kx4+XlQ3T0Pe7etZCc7CA+3obNlnzf48bEJBIfb8HhcBEb\na8HhcKZeLzY2AZvNwb17NpKTXURH38NqteJ0uh64Hv+1huLRyDqmD1nHJydreH8uxcWXF3YxP2I2\nR6MPA9C4+MsMfyqUmJjEf13/cdfxsXd7mjdvHtu2bWPLli20bt2aPn36EBMTg5eXFwMGDEi93oUL\nFxg6dCiKouBwOIiIiKBcubS9dppVaTQabDYbNpuNs2fPAFC5clX27QsH4OLFC2za9PETHe9+SpQo\nyZUrl7FardjtdgYN6oOiKGg0WpxOZ+r1/P390Wg03Lx5E4AjRyKoWLHSY/ykQgiRfaU4U9hyZiMv\nbHqG977uyLHoI7xe5i2+b/MjG5pvpWaB2pmW5ZH3Q96wYQN2u51OnToBUKZMGcaNG0fBggVp1aoV\nWq2WRo0aUb169YccKWt7881W9OjRmZIlS1OhgrvoWrVqy+TJ4+jTpxsul4tBg4Y90fHux8fHh+Dg\nXgwa1AeAtm07oNFoqFmzFn36BDN69LjU64aEjGH8+NHodDqKFCnKSy+9zDfffPV4P7AQQmQjNoeN\nTafXs+jwPK7cu4xeq6ddxXfoX3Mw5QLKq5JJoyiK8vCrZYyMftpEnpp5crKG6UPWMX3IOj65nL6G\niSmJrD2xiqVHFnLLehOjzsg7ld6lb82BFPMrnubjZMRT1o/8CFkIIYTIauJsd1lxfBkfHlvKXftd\nzF6+9A0aSK+gfhQwFVA7HiCFLIQQIhu7bb3NB0cXseqPFVhSEsltzM3wp0LpVq0nAd551I73N1LI\nQgghsp2r96JYfGQ+60+uxea0kd9UgGF1RtK5Sld8DZ75ti8pZCGEENlGZNw5FkTM5ZOzm3C4HBTz\nK06/moNoX7Ej3npvteM9kBSyEEKILO+PmOPMPzSbzyM/RUGhXO7yDKg1hJblWuOl81I7XppIIQsh\nhMiyfr/5K/MOzeLby18DUC1fDQbVHkazUs3RabPWjoNSyP9w48Z13n23HRUqVATcM7rfeaczL77Y\n8JGPtW3bZuLi4njhhQbs2xdOcHDP+17vr60Tvbwe/r+4CxfOM2fOjH9t2fjii89QrVqN1M/z5s3L\n+PFTHznzP+3evZvatetz7tyZB/4MQgiRWRRFYd/VcOYdmsWB6/sBeLpgXQbXHkaj4k3uO+YyK5BC\nvo/ixUukFl5CQjxdu75D3br1MBof7/WHcuUqUK5chf+8/K+tE9NSyP/F19c3XfZV/qfly5ezbFn9\nh/4MQgiR0VyKi68vfcX8Q7OIuH0IgIbFXmJQ7WHUK1xf5XRPTgr5Ifz9c5E3bz5iY2NZtepD9Hov\nEhLimDBhGjNmTOb69Ws4HA66detF7dpPcfDgbyxYMJs8efKSN28+ChcuQkTEQbZv38KkSTMeuHXi\n/PlL+fzzT/nuu91oNFqef74B7dt35PbtW4SFjcTLy4uyZdM+QebGjeuMGTOClSvd+1QHB3di0qTp\nfPTRcvLlC+TMmVPcunWT99+fRIUKFVm/fg3h4d+j0Wjp1asfp0+f5MyZM4waNZxWrdqm/gzff/8t\nmzevR6fTUaFCJQYNGsbKlcvuu1WkEEI8KYfLwWfnt7MgYg6n7pwEoFmpFgyqPZSg/LVUTpd+PLqQ\nzePGYNz5+NsvotWQ5x/bL9pbvIllXNq3X7xx4zoJCfHkz+9+47i/vz8jRoxm9+4vyJs3H6Gh7xMX\nF8fAgb1Ys2YTy5YtIixsIuXKlWfYsAEULlwk9VhWq+WBWydGR98mPPx7lixZCUDv3sE0bNiY7ds3\n89JLL9OmTXs+/ng158+fffw1+VNycjJz5ixix46t7N79BSaTifDw71m2bDXXr1/j449XM3JkGBs2\nrGXKlJlERBz882ewsnz5Ylat2oDJZCIkZHDqZf/cKlIKWQjxJOxOO5+c2cSCiDlcSriITqOjVfm2\nDKg1hIp5st9sfo8uZLVcuXKZfv16AGAwGBgzZjx6vXupKleuAsAffxzj6NHDHDt2BAC73U5KSgo3\nbtygXDn3o9igoFrY7fbU4166dJHixUtiNHpjNHozbdqcv93uqVMnuHo1iv793a/TWq0Wbt68zqVL\nF2nYsDEANWvW4ZdffvpX5sTExNTMAGXKlKVdu47/+TPWqFETgMDAApw8eYKzZ89QuXJVtFotRYsW\nY+TIsPt+X1TUFYoWLZ66W1XNmrU5e/Y0ANWrBwGQP39+EhP/vTuKEEKkhTXFyscnV7P4yAJuWK5j\n0Bp4t/J79Ks5kJK5SqkdL8N4dCFbxk16pEez/xQY6Medx5g1+v9fQ/4nvd4r9e93332PJk2a/u1y\nrfZ/G2j9c0y4VqtDUVz/ebt6vRf16tUnJGT0376+fv0aNBrtn8e8//ff7zXkmzdv/O1zh8OR+vFf\n+zH/lVOn0+JyPXysuUbz95/L4UjBaDTe95hCCPEoEuzxfPTHhyw7uphYWywmvYleNfrRu0Y/CvkW\nVjtehnvg9oviv1WuXJUff/wBgLt377Bs2WIA8uUL5MqVSyiKwuHDh/72PQ/bOrFChUpERBzCZrOh\nKArz5s3CbrdRvHgJTp92v27y19PDaWEymbl79w6KohAbG8P161f/87oVKlTi+PGjOBwO7tyJJTTU\nvVPVP4u1WLESXL16BavVAsDhwxFUqFA5zZmEEOKfYpJimPLLBGquq8KUXyeQ4nIwpPZwDnU6wYT6\nU3JEGYOHP0L2ZI0aNSYi4nd69XoPp9PJe++5ny7u0aMPY8aMoGDBQqmvO//lYVsnLly4nDZt2tO3\nb3e0Wi0vvNAAo9Gb1q3bExY2kn379lKmTNr3mfb396dOnafp1u1dypYt98CzpAsVKswrrzSjX78e\nKIpCz559AahUqRLdu79L794DUn+Gvn0HMnRofzQaLdWrB1GjRhAHD/76SOsnhBDXE6+x5MgC1p1c\nTZIjiXw++RhYdxxdq3bDz+CvdrxMJ9svigeSNUwfso7pQ9bxyXnCGl6Ij2Tx4flsOr2eFFcKRXyL\n0jdoAB0qvYvJy6RqtrSS7ReFEEJkWadiTzI/YjY7zm/DpbgonasMA2oNoVX5thh0BrXjqU4KWQgh\nRIZwKS7+iDlGeNQe9lz5jp+u/whA5bxVGVRrKC3KvJnlxltmJClkIYQQ6eam5QbhUXsIj/qeH6L2\nEmuLTb3s6YJ16V9rMC+XaJplx1tmJClkIYQQjy3JkcTP1w8QHrWHH6L2pE7SAihoLkS7iu/QoFgj\nXijakHw++VRM6vmkkIUQQqSZoiicjD2R+ij4lxs/YXe6ByD56H1oVLwxDYo1okGxl6gQUFEeCT8C\nKWQhhBAPdNt6m31X9/5Zwnu4bb2VelmVvNX+LOBGPFOoHt76x9uER0ghCyGE+Ae7085vN35hb9T3\nhEft4Y+YY6mX5fMJpFX5tjQo1ogXizakgLmgikmzFylkIYTI4RRF4ezdM4T/WcA/Xf+RJEcSAAat\ngeeLNqBBsUY0LPYSlfNWQauRIY8ZQQpZCCFyoDu2WPZFhac+DX3dci31sgoBFWlQ/CUaFmtE3UL1\ns8ywjqxOClkIIXKAZGcyh279zm/Hf+TLM19x5PZhFNyDGvN45+Gtsm/ToNhLvFisIYV9izzkaCIj\nSCELIUQ2pCgKF+Mj2fvn25H2X9uHJcW9Lapeq6de4fqpJ2NVDwySp6E9gBSyEEJkE/H2OPZf3cfe\nqO/5IWoPV+5dTr2sTO6yNCjWiDertqCKuRa+hv+eqSzUIYUshBBZlMPl4PDtQ+y94j4ZK+L2QVx/\n7pmey5ibFmXeTD0burh/CcAzNpcQ9yeFLIQQWUiSI4nPz3/K7ktfsv/qDyQkxwOg0+ioU+Dp1Keh\ng/LXQq+VX/FZifxrCSFEFnAh7jyrT3zEptMfE2ePA6C4f0neKteKBsUa8VyR58llzK1ySvEkpJCF\nEMJDOVwOvr70Fav/WMEPV/cC7sEcg2oNo13FDpTOXVblhCI9SSELIYSHuWm5wccn17Du5GpuWK4D\nUK9wfbpUCea10q/L3sHZlBSyEEJ4AEVR+PHaPlb9sYKvLu7CqTjx9fLjvard6VwlmEp5K6sdUWQw\nKWQhhFBRnO0um89sYM2Jjzgfdw5wb9jQtWo3WpZvja+Xr8oJRWaRQhZCCBUcuR3B6j9W8un5rSQ5\nkjBoDbQu344uVYOpU+Bp2bYwB5JCFkKITGJNsfLZ+e2sPrGCw7cjACjhX5LOVYJpX7EjeX3yqpxQ\nqEkKWQghMtj5u+dYc2Ilm85sIN4eh1ajpWnJZnSp2o0GxRrJ2EoBSCELIUSGSHGmsPvSl6w+sZL9\nV8MBCPTJz+Daw+hUuStF/YqpG1B4HClkIYRIRzcSr7Pu5Go+PrWGm5YbANQv/Dxdqgbzaqnm8pYl\n8Z+kkIUQ4gm5FBf7r/7A6hMr2X3xC5yKEz+DP92q9aRzlWAq5KmodkSRBUghCyHEY7pru8Om0xtY\nc2IlF+IjAaiWrwZdqgbTslxrzF5mlROKrEQKWQghHoGiKBy+fYjVJ1ay49w2bE4bRp2RNhXa07Vq\nN2rlryNvWRKPRQpZCCHSwJpi5dNzW1l1YgXHoo8AUCpXaTpXCaZdxQ7k8Za3LIknI4UshBAPcO7u\nWfdblk5vICE5Hq1Gy6ulmtOlSjAvFmsob1kS6UYKWQgh/iHFmcJXF3ex+sRKfry2D4D8pgJ0q96T\nTpW6UMSvqMoJRXYkhSyEEH+6nniNtSdXsf7kWm5ZbwLwXJEX6Fq1G01LvoaXzkvlhCI7k0IWQuRo\nLsXFD1F7WX1iJV9f+hKX4sLfkIse1XvTuUow5QLKqx1R5BBSyEKIHOuu7Q5td77FkejDANQIrEmX\nKsG8We5tecuSyHRSyEKIHMmaYqXTl+04En2YZqVaMLDWEGoWqK12LJGDSSELIXIch8tBj2+68NvN\nX2hZrhVLGq+Qs6WF6uQeKITIURRFYWj4AL65vJsXizZkQaMPpIyFR5B7oRAiR5n8y3g2nv6YoMCa\nrGr6sWz2IDyGFLIQIsdYdnQxCw7PoXSuMmxovg1fg5/akYRIJYUshMgRtp3dQtiBUAqYCrKlxQ7y\n+eRTO5IQfyOFLITI9vZe+Z7+e3rhb8jFpubbKe5fQu1IIgvQ3L2D9vKlTLs9KWQhRLYWcesgXXd3\nRKfRsa7ZJqrkq6p2JOHhNAnxmKZNIk+tquR5sS4oSqbcbpoK2Waz0bhxY7Zv386NGzfo0qULHTt2\npEuXLkRHRwPw+eef8/bbb9O6dWs++eSTDA0thBBpcf7uOd75ojU2ZxLLmqyiXuH6akcSnsxiwWfB\nXPLUqYZ5zgwwmbg3bTZk0naaaSrkpUuXkitXLgDmzZtHmzZt+Pjjj2nSpAmrVq3CarWyePFiVq9e\nzbp161izZg1xcXEZGlwIIR7kpuUGbXe9RawtllkvzqdZ6eZqRxKeym7He+Uy8j5dA99JYwFIHDOO\n2N+OYm/3TqbFeOhgkMjISM6fP0+DBg0AGDt2LEajEYCAgABOnDjB0aNHqVatGn5+7jMWa9WqRURE\nBI0aNcq45EII8R/i7XG03fkWUfeuEPp0GB0rd1Y7kvBEDgfGTzZhnjkV3dUoFJMZy5DhJPXuj5Ir\nd6bHeegj5OnTpzNy5MjUz00mEzqdDqfTyYYNG2jRogUxMTHkyZMn9Tp58uRJfSpbCCEyU5IjiY5f\ntuXUnZMEV+vBoNrD1I4kPI3LhfGz7QS88Az+A/ugjb6NtWdfYn8/hnVkmCplDA95hLxjxw6CgoIo\nVqzY377udDoJCQmhbt261KtXj507d/7tciWNL4AHBJjQ63WPGPnRBAbK+wyflKxh+pB1TB8PWkeH\ny0G3LR359cbPtKnShuVvLZUpXPeRY++LigJffgmjR8PRo6DXQ48eaMLCMBUtiukRD5fe6/jAQg4P\nDycqKorw8HBu3ryJwWCgYMGC7NixgxIlStCvXz8A8ufPT0xMTOr33b59m6CgoIfe+N271ieM/2CB\ngX5ER9/L0NvI7mQN04esY/p40DoqisKQ8P58fuZzni/agNnPLSY2xpLJCT1fTr0veh3Yj3nyeLwO\n/oai0WBv1RbL8FBcpUq7r/CIa/K46/igEn9gIc+bNy/144ULF1KkSBFiYmLw8vJiwIABqZfVqFGD\nMWPGkJCQgE6nIyIiglGjRj1yUCGEeFzTfpvI+lNrqRFYkzVN12PUGdWOJDyAPuIg5ikTMezbC4C9\nWQssI0bjrFRZ5WT/9si7PW3YsAG73U6nTp0AKFOmDOPGjWPo0KEEBwej0Wjo27dv6gleQgiR0VYc\n+4C5h2ZRKldpNry2VUZiCnQnT2CeNgnj7i8ASG7QCEtoGI6anrvFpkZJ6wu+GSCjnzbJqU/NpCdZ\nw/Qh65g+7reOn57bSq9vgwk05eeLlt9Swr+kOuGyiOx+X9ReiMQ8YwrGT7eiURRSnq6LZdT7pDz7\nXLreTqY/ZS2EEJ4sPGoP/b7via/Bj03Nt0sZ52Daa1cxzZmB94Z1aJxOUqrVwBo6huSXXs60wR5P\nSgpZCJElHbkdQdfdHdFqtKx7dRNV81VTO5JQgSY6GtOC2fisXonGbsdRrjyWEaNJbv4GaLPWGfZS\nyEKILOdC3Hk6fNGKJIeVFS+v5dki6ft0pPB8mvg4fJYswLRsKRqrBWex4liGh2Jv1db9dqYsKGum\nFkLkWLcsN2mz8y1ikmKY+eI8mpd5Xe1IIjNZLPis+ADTovlo4+Nw5i+ANWw8to6dwZi1z6yXQhZC\nZBlxtjja7mrJlXuXCXlqFJ2rvKd2JJFZ7HZ81n6Eae4stDHRuAICSAybQFJwDzA96kgPzySFLITI\nEmwOG602teJk7B90rdqNoXVGqB1JZAaHA+/NGzDNmobu2lVcZl8sQ0eQ1Lsfin8utdOlKylkIYTH\nc7qc9Po2mH2X99GizJtMeW4mmixy5qx4TH/OmzZNn4z+QiSKtzfWPgOw9h+Mkjev2ukyhBSyEMKj\nKYpCyL4hfHlxJ41KNWJJ4w/RaTN2Br5QkaJg+GY35qkT0Z/8A0WvJ6lzMNYhw3EVKqx2ugwlhSyE\n8GjTf5/MupOrqJqvOp+2/RR7gjwyzq689v+Aecp4vA4dRNFosLVu5543XbKU2tEyhRSyEMJjrTy+\nnDkHZ1DCvyQbm2/D3+hPNNl3ylROpT/4G+apEzHs/wEA+2uvu+dNV6ykcrLMJYUshPBIn53fzqj9\nw8nnE8iWFjsoYCqgdiSRznQn/sA8bSLGr78CILnhS+5500G1VE6mDilkIYTH2Xc1nD7fdcfs5cvm\n5tsplau02pFEOtJFnsM0Ywren24DIOWZeu550/Xqq5xMXVLIQgiPciz6CJ2/6oAGDWte3UC1wBpq\nRxLpRHs1CtPs6XhvWu+eN109CMuoMFIaNs4y86YzkhSyEMJjXIiPpN2ut7GmWFjxyhqeL/qi2pFE\nOtDcvo1p/ix81nyEJjkZR/kKWEaMIbn561LE/48UshDCI9yy3qLtzreISYpm+gtzaFHmTbUjiSek\nibuLafECfD5cisZqxVm8xP/mTevkrWv/JIUshFBdgj2edjtbcjnhEkPrjKBr1W5qRxJPIjER04dL\n8Vm8AG1CPM4CBbG+P9E9b9pgUDudx5JCFkKoyuaw0fmrDpyIPc67ld8j5KlRakcSj8tmw2fNSkzz\nZ6ONiXHPmx47iaSu3bLNvOmMJIUshFCN0+Wkz3fdOXB9P6+Vfp3pL8yWkZhZUUoK3pvWY5o9Hd31\na7h8/bAMDyWpV18UP3+102UZUshCCFUoisLI/cPYdeEzni38HEsbr5CRmFmNy4Xx062YZkxBf/GC\ne95034FY+w9CyZM9501nJClkIYQqZh2cxpoTK6mStxprX92It95b7UgirRQFw+4vMU+bhP7UCRQv\nL5K6dsM6eDiugoXUTpdlSSELITLd6j9WMvP3qRT3L8mm5tvwN2avbfSyLUXBa1845qkT8Io4hKLV\nYmvbAcuwkbhKlFQ7XZYnhSyEyFQ7I3cwYt8Q8vnkY0vz7RQwF1Q7kkgD/W+/Yp46AcOB/QDYW7zp\nnjddvoLKybIPKWQhRKb58do+en/bDZOXmY2vbaN07rJqRxIPoTt+zD1v+tuvAbC/1ARraBiO6kEq\nJ8t+pJCFEJniePRR3v2yPQoKq5uup0b+mmpHEg+gO38O0/TJeH+2HYDkevWxhL6Po249lZNlX1LI\nQogMdzH+Au12vY0lJZHlL6/ixWIN1Y4k/oM26gqmWdPw3rwBjctFSo2a7o0fGjSSMZcZTApZCJGh\nbltv03bnW0Qn3Wbq8zN5o2xLtSOJ+9DcuoV53ky8165Ck5KCo0JFLCPDSG7WXIo4k0ghCyEyzL3k\nBNrveptLCRcZUns4wdV6qh1J/IPm7h1Mi+bjs+IDNElJOEuUxBIyCnvL1jJvOpNJIQshMoTdaafL\nV+9wPOYonSp3YcTTY9SOJP4fTeI9fJYtwWfJQrT3EnAWKox1wlRsHTqBl5fa8XIkKWQhRLr7ayTm\n/ms/8Gqp5kx/YY6MxPQUSUn4LF2EacFstLGxuPLmJXH8FJK6BIOPj9rpcjQpZCFEulIUhVE/Dmdn\n5A7qFnqWD5qsRK+VXzWqS0nBe8M6mDcT32vXcPn5YxkxmqSefVB8/dROJ5BCFkKkszmHZrDqjxVU\nylOFdc024aOXR12qcjoxbv8E84wp6C5fAh8frP0HY+03ECUgj9rpxP8jhSyEeCiny4ndaSfZacf+\nrz82kp3J2Bw2jtyOYPpvkynuV4LNLbaTy5hb7eg5l6Jg+HIX5umT0J8+5Z43HdwDn4njsOh91U4n\n7kMKWQgP9lcRppbe3/62Y3f8rxiTnfbUy+1OG3ZnMnaHDbvrr+v9+bU/v9f2V8E+7BhOGw6XI82Z\n83rnZXOL7RQ0yyYDqlAUvML3uOdNHzmMotWS1L4j1qEjcBUvgU+gH0TfUzuluA8pZCE80K83fqHn\nN125brmWKbfnpfXCoDPirTNi0Bkx6oz4G/wx6r0xaA14670x6AwYdd4Y//z7b9fXGzFqjRj13rxa\n6jVK5SqdKbnF3+l/+dk9b/rnAwDY3miJNWQUznLlVU4m0kIKWQgP88WFnfT+NpgUVwr1Cz//Zxn+\n/7L8sxT/LElvnfefBen+2KAzpH6P8f/9cR/jz2LVe2PU/vm3zohWo1X7xxZPQH/8KKapEzF+9w0A\n9iavYBkZhrNadZWTiUchhSwnjy/jAAAgAElEQVSEB1l5fDmj9g/HR29i/WvraVS8idqRhAfTnTvr\nnjf9+acAJNd/3j1v+ulnVE4mHocUshAewKW4mPzLeBYenks+n0A2vrZVNl8Q/0l75TLmWdMwbtno\nnjddsxaWUWNJeaGBjLnMwqSQhVBZsjOZQXv7svXsZkrnKsOm5tspmauU2rGEB9Leuolp7ky81612\nz5uuVNk9b7ppMynibEAKWQgV3UtOoOvuTuy7upfaBZ7i42ZbyOuTV+1YwsNo7sS6502vXOaeN12y\nlHve9FutZN50NiKFLIRKblpu0H5XK07EHqdpyWZ80OQjTF4mtWMJD6K5l+CeN710kXvedOEiWCeN\nwNbuHZk3nQ1JIQuhgrN3ztBuV0uuJkbRuUowU5+fKeMlxf8kJeGzaoV73vSdO7jy5SMxZCpJnYPB\n21vtdCKDyG8AITLZLzd+5t0v2xJnj2PUM+8zsNZQ2XhBuCUn471+Laa5M9HdvIHLPxeW0DCs3XuD\nr0zXyu6kkIXIRLsiP6f3d8E4FScLGi2lXcV31I4kPIHTiXHrZswzp6G7cgnFZMI6cCjWvgNQcgeo\nnU5kEilkITLJimMfMPrHEZi8zKx9ZRMNi7+kdiShNkXBsOtzzDMmoz9zGsVgwNq9F9aBw1Dy51c7\nnchkUshCZDCX4iLk2xBm/jSTQJ/8bGy+leqBQWrHEmpSFLz2fod56iS8jh5G0elIeudd97zposXU\nTidUIoUsRAZKdiYzYE9vtp/7hLK5y7Gx+TZK+JdUO5ZQkdcvP2GaMgHDLz8BYHvrbfe86TLlVE4m\n1CaFLEQGSbDH0/XrTuy/Gk69ovVY9fIG8njLe4xzKv3Rw5inTsSw5zsA7K+8imXEGJxVq6mcTHgK\nKWQhMsCNxOu0/6IVJ2P/4NVSzdnWfguJcWnfwlBkH7ozpzFPn4xx12cAJD//IpbQMBx1nlY5mfA0\nUshCpLMzd07TbldLriVepWvVbkx5biY+Xj4kInvQ5iTaSxfd86a3bnbPm65dB0vo++5500LchxSy\nEOnol+s/0emrdsTb4xhTdxz9aw6W9xjnMNqbNzDNmYH3x2vQOBw4KlXBMup9kl9uKvOmxQNJIQuR\nTnZG7qDPd91xKk4WvbSMNhXaqx1JZCJNbCymhXPx+Wg5GpsNR+kyWEeMxv5GS9DKftPi4aSQhUgH\ny48uIexAKCYvM+uabqZBsUZqRxKZRJMQj8/SRfgsW4I28R7OIkWxDhuJrW0H0MuvWJF2cm8R4gm4\nFBcTfn6fJUcWkN9UgI3Nt1EtX3W1Y4nMYLXis3I5pkVz0d69iytfIImhY0jq1FXmTYvHIoUsxGOy\nO+0M+L4Xn57fRrnc5dnYfBvF/UuoHUtktORkvD9eg2nODHS3b+HKlZvE0WNJCu4p86bFE5FCFuIx\nxNvj6Lq7Iz9e28fTBeuyrtkmArzzqB1LZCSnE+MnmzDPmobuymUUkxnL4GEk9RmAkiu32ulENiCF\nLMQjup54jfa73ubUnZM0K9WCpU1W4KP3UTuWyCguF4YvPsc8bRL6c2fd86Z79sE6YChKYKDa6UQ2\nkqZT/2w2G40bN2b79u0ArF27lipVqmCxWFKvU6VKFTp16pT6x+l0ZkxiIVR0+s4pmm1rzKk7Jwmu\n1oOVr6yVMs6uFAXD99+Qu8mL5Ap+F92FSJI6deHOr0ewTJwmZSzSXZoeIS9dupRcuXIBsGPHDmJj\nY8n/j51IfH19WbduXfonFMJD/HTtRzrv7kC8PY6wehPoFzRQ3mOcTXn9fADz5PF4/fYLikaDrWVr\nrCGhOEuXVTuayMYeWsiRkZGcP3+eBg0aANC4cWN8fX3ZuXNnRmcTwmN8dn47fb/rgYLCksYf0qp8\nW7UjiQygPxKBecoEDOF7ALA3fQ3LyDE4K1dRN5jIER76lPX06dMZOXJk6ue+/3EWYXJyMkOHDqVd\nu3asWrUq/RIKobIPji6i+zddMOiMbGy+Tco4G9KdPoV/l3cIeLkBhvA9JL/QkLtffU/C2o1SxiLT\nPPAR8o4dOwgKCqJYsYfvzxkSEsLrr7+ORqOhY8eO1KlTh2rVHryLSUCACb1e92iJH1FgoF+GHj8n\nyKlr6FJcDP9mOHN+mUMh30J89c5X1ChY47GPl1PXMb2l6zpGRsK4cbB+PSgK1KsHkydjaNgQQ/rd\niseR+2L6SO91fGAhh4eHExUVRXh4ODdv3sRgMFCwYEGeffbZf123ffv/jQmsW7cuZ8+efWgh371r\nfczYaRMY6Ed0tAz0fxI5dQ3tTjv9v+/JjvPbKR9QgY3Nt1FYV/yx1yKnrmN6S6911N64jmn2DLw3\nrHXPm65SDcuoMJIbv+KeN52N/63kvpg+HncdH1TiDyzkefPmpX68cOFCihQpct8yvnDhAosXL2bW\nrFk4nU4iIiJo2rTpIwcVwhPE2+Po/FUHfrr+I88UqsfaVzfKe4yzCU1MDKYFc/BZ9SEaux1HmbJY\nR47B3uJNmTctVPfI70NeunQpP/30E9HR0XTv3p2goCBCQkIoWLAgrVq1QqvV0qhRI6pXl/GBIuu5\ndu8q7b94m9N3TtG89Bssafwh3noZg5jVaRLi8Vmy0D1v2pKIs2gxLMNDsbduJ/OmhcfQKIqiqHXj\nGf20iTw18+Ry0hqejD1B+11vc8Nyne7VejGh/lR02vQ5xyEnrWNGeuR1tFj+N286Lg5XYH4sg4dh\n69QVjMaMC+rB5L6YPjL9KWshcooD1/bT+asOJCTHM7beJPoE9Zf3GGdldjveH6/GPGcm2ujbuHLn\nJnHMOPe8abNZ7XRC3JcUssjxPj23lf7f90JBYWnjFbxdvo3akcTjcjjc86ZnTkV3Nco9b3rIcJJ6\n95d508LjSSGLHG3pkUWM/WkUfgZ/Vjddz/NFX1Q7kngcLhfGnTswTZ+M/vw5FKMRa8++WAcMkRGX\nIsuQQhY5kktxMfbAKJYdW0JBcyE2vraNKvmqqh1LPCpFwfDd15inTER/4jiKXk9Sp65Yh4bgKlxE\n7XRCPBIpZJHj2Bw2+n/fi88it1MhoCIbm2+jqN/Dh98Iz+J1YL973vTB39zzplu1xTI8FFep0mpH\nE+KxSCGLHCXOdpfOuzvw8/UD1CtcnzVNN5DbO0DtWOIR6CMOYp4yEcO+vQDYm7XAMmI0zkqVVU4m\nxJORQhY5xrV7V2m3qyVn7p7m9TJvseilZfIe4yxEd/IEzJ1GwGefAZDcoBGW0DAcNWurnEyI9CGF\nLHKEEzF/0P6Lt7lpuUHP6n0YX38KWo1MZsoKtBciMc+YgvHTraAopDxdF8uo90l59jm1owmRrqSQ\nRbYWb49jxfFlLD68gMSUe4x/dgq9g/qpHUukgfbaVUxzZuC9YR0ap5OUqtXxmj6VuDrPuedNC5HN\nSCGLbOmu7Q7Lji1hxbFlJCTHE2AMYHmTVbxZ7m21o4mH0ERHY1owG5/VK93zpsuWwzJyDMnN3yCw\nQK5svfGDyNmkkEW2EpMUwwdHFrHyj+VYUhLJ55OPsHoT6FolGF+DbDnnyTTxcfgsWYBp2VI0VgvO\nYsXd86ZbtZV50yJHkHu5yBZuWW6y+MgC1p74CKvDSn5TAUY8PYpOlbti9pJRiR7NYsFnxQeYFs1H\nGx+HM38BrGHjsXXsnGPnTYucSQpZZGnXE6+x6PA81p1cjd1pp7C5CGH1xtOh0rv46H3UjicexG7H\nZ+1HmObOQhsT7Z43HTaBpOAeYDKpnU6ITCeFLLKkKwmXWRAxl02nPybZlUxxvxIMqDWEthU7YNTJ\noyqP5nDgvXkDplnT0F27isvsi2XoCJJ690Pxz6V2OiFUI4UsspQL8ZEsODSHLWc34nA5KJWrNINq\nDaNV+bZ46bzUjicexOXC+Nl297zpC5Eo3t5Ye/fH2n8wSr58aqcTQnVSyCJLOHf3LPMOzWLbuS24\nFBflcpdnUO1hvFWuFXqt3I09mqJg+GY35qkT0Z/8wz1vunMw1iHDcRUqrHY6ITyG/CYTHu1U7Enm\nHprBZ+c/RUGhUp7KDKkTQvPSb6DT6tSOJx7Ca/8PmKeMx+vQQfe86dbt3POmS5ZSO5oQHkcKWXik\n49FHmXNoJl9c+ByAavlqMKROCK+Wek0mbGUB+oO/YZ46EcP+HwCwv/a6e950xUoqJxPCc0khC48S\ncesgcw7O4JvLuwGolb82Q+qE0KREUzQyncnj6U78gXnaRIxffwVAcsOX3POmg2qpnEwIzyeFLDzC\nrzd+Yc7B6eyN+h6ApwvWZWidETQo1kiKOAvQRZ7DNGMK3p9uAyDlmXruedP16qucTIisQwpZqEZR\nFH66/iNzDs5g/zX3U5vPFXmBIXVCqF/4eSniLEB7NQrT7Ol4b1rvnjddrQbWUWEkN2oi86aFeERS\nyCLTKYrCD1f3MvvgdH698TMADYo1YkidEdQtVE/ldCItNLdvY5o/C581H6FJTsZRrrx73vRrr4NW\nXuMX4nFIIYtMoygK313+mjmHZnDo1kEAXi7RlMF1hlO7wFMqpxNpoYm7i2nxAnw+XIrGasVZvASW\nYSOxt24HOjnrXYgnIYUsMpxLcbH74pfMOTSDY9FHAGhWqgVD6gynemCQyulEmiQmYvpwKT6LF6BN\niMdZoCDW9ye6500bDGqnEyJbkEIWGcbpcrLrwmfMOTiTU3dOoEHDG2VaMrjOcCrnraJ2PJEWNhs+\na1Zimj8bbUwMroAAEt+fSNJ73WXetBDpTApZpDuHy8GO89uYd2gWZ++eQavR0qp8WwbVGkb5PBXU\njifSIiUF703rMc2eju76NVy+fliGh5LUqy+Kn7/a6YTIlqSQRbpJcaaw7dwW5h6aycX4C+i1etpX\n7MjAWkMonbus2vFEWrhcGD/dinn6ZHSXLrrnTfcdiLX/IJQ8edVOJ0S2JoUsnliyM5lNp9ezIGIO\nV+5dxkvrRafKXRlQazAl/EuqHU+khaJg2P0l5mmT0J86geLlRVLXblgHD8dVsJDa6YTIEaSQxWOz\nOWysP7WWRYfncS3xKkadkeBqPegXNIgifkXVjifSQlHw2heOeeoEvCIOoWi12Np2wDJsJK4SJdVO\nJ0SOIoUsHpk1xcq6k6tYdHg+t6w38dH70LNGX/oFDaSAuaDa8UQa6X/7FfPUCRgO7AfA3uJN97zp\n8vI6vxBqkEIWj2RX5OeE7BtMTFI0Jr2Z/jUH06tGPwJNgWpHE2mkO37MPW/6268BsL/UBGtoGI7q\n8hY0IdQkhSzSJMmRxPsHRrHmxEp89D4MqT2cHjX6kMdbTvTJKnTnz2GaPhnvz7YDkFyvPpbQ93HU\nleloQngCKWTxUKfvnKLnN105decklfJUZvnLq6mQp6LasUQaaaOuYJo1De/NG9C4XKTUqOne+KFB\nI5k3LYQHkUIW/0lRFD489CEDdw8kyZFElyrBjK8/BR+9j9rRRBpobt3CPG8m3mtXoUlJwVGhIpaR\nYSQ3ay5FLIQHkkIW9xVvj2No+EA+j/yUXMbcLH7pQ5qXeV3tWCINNHfvYFo0H58VH6BJSsJZoiSW\nkFHYW7aWedNCeDApZPEvB2/+Rq9vg7ly7zL1i9VnQYNlFPMrrnYs8RCaxHv4LFuCz5KFaO8l4CxU\nGOuEqdg6dAIvL7XjCSEeQgpZpHIpLhYdnsfUXyfiUlwMqRPC9Fcnczc2Se1o4kGSkvBZvRLTgtlo\nY2Nx5c1L4vgpJHUJBh95eUGIrEIKWQBwy3qLvt/1YN/VvRQ0F2JJ4w95rsgL6LVyF/FYKSl4b1iH\nac4MdDeu4/LzxzJiNEk9+6D4+qmdTgjxiOS3rWDPlW/p931PYpJieLlEU+Y3WkpeH3k7k8dyOjFu\n/wTzjCnoLl9C8fHB2n8w1n4DUQLyqJ1OCPGYpJBzsGRnMlN+ncCSIwswaA1Mqj+N7tV7o5EzcD2T\nomD4chfm6ZPQnz7lnjcd3AProGG4CsiENCGyOinkHOpi/AV6ffseh29HUDpXGZa/vIrqgTKpySMp\nCl7he9zzpo8cRtFqSWrfEevQEbiKl1A7nRAinUgh50Dbz33CsPBBJKbco02F9kx7fha+BnnN0RPp\nf/nZPW/65wMA2N5oiTVkFM5y5VVOJoRIb1LIOYglxcKo/cPZePpjzF6+LH5pOa0rtFM7lrgP/fGj\nmKZOxPjdNwDYm7yCZWQYzmrVVU4mhMgoUsg5xPGYY/T8pivn485RPTCI5U0+onTusmrHEv+gO3sG\n8/TJGHfuACC5/vPuedNPP6NyMiFERpNCzuYUReGjP5Yz9sBokl3J9KzRlzF1x2HUGdWOJv4f7ZXL\nmGdNw7hlo3vedM1aWEaNJeWFBjLmUogcQgo5G7tji2XQ3n7svvgFeb3zsvClD2hc4hW1Y4n/R3vr\nJqa5M/Fet9o9b7pSZfe86abNpIiFyGGkkLOpn68foPe33bhuucZzRV5gSeMPKWgupHYs8SfNnVj3\nvOmVy9AkJeEoVRpryCjsb74t86aFyKGkkLMZp8vJnEMzmH1wOho0hD4dxoBaQ9Bp5Ze8J9DcS3DP\nm166yD1vunARrJNGYGv3jsybFiKHk0LORq4nXqP3d934+foBivoW44MmH/F0ITkZyCMkJeGzZKF7\n3vSdO7jy5SMxZCpJnYPB21vtdEIIDyCFnE3svvglA/f05q79Ls1Lv8GcBgvI7R2gdiyRnIz3+rUw\nfxa+16/j8s+FJTQMa/fe4OurdjohhAeRQs7ibA4bE34OY8XxZXjrvJnxwlw6V3lPxl+qzenEuHUz\n5pnT0F25BCYT1oFDsfYdgJJb/qMkhPg3KeQs7Pzdc3T/pgsnYo9TIaAiy19eTaW8ldWOlbMpCoZd\nn2OeMRn9mdMoBgPW7r0wTRyHRWtSO50QwoNJIWdBiqKw6fR6QvcPw+qw0qlyVybWn4rJS37hq0ZR\n8Nr7Heapk/A6ehhFpyPpnXfd86aLFsMU6AfR99ROKYTwYFLIWcy95ASG/zCY7ec+wd+QixUvr+H1\nsm+pHStH8/rlJ0xTJmD45ScAbG+97Z43XaacysmEEFmJFHIWcvjWIXp++x6XEi5Su8BTLGvyEcX9\nZbcfteiPHsY8dSKGPd8BYH/lVSwjxuCsWk3lZEKIrEgKOQtwKS6WHlnE5F/H4XQ5GVhrKCFPjcJL\nJ+9bVYPuzGn3vOldnwGQ/PyLWELDcNR5WuVkQoisTJuWK9lsNho3bsz27dsBWLt2LVWqVMFisaRe\n5/PPP+ftt9+mdevWfPLJJxmTNgeKtkbT4YtWjP95DHm887KlxQ5G1x0rZawC7aWL+PXrScCLdTHu\n+oyU2nWI2/o58dt2ShkLIZ5Ymh4hL126lFy5cgGwY8cOYmNjyZ8/f+rlVquVxYsXs3XrVry8vGjV\nqhVNmjQhd+7cGZM6h/ghai99v+/BbestGhVvzMJGywg0BaodK8fR3ryBac4MvD9eg8bhwFGpCpZR\n75P8clOZNy2ESDcPLeTIyEjOnz9PgwYNAGjcuDG+vr7s3Lkz9TpHjx6lWrVq+Pm5N7mvVasWERER\nNGrUKGNSZ3MpzhSm/zaZhYfnotfqGffsZHrV6ItWk6YnNEQ60cTGYlo4F5+PlqOx2XCULoN1xGjs\nb7QErfxbCCHS10MLefr06YSFhbFjh3t/Vt/7TBeKiYkhT548qZ/nyZOH6OjodIyZc1xJuEzPb9/j\n0K3fKelfiuUvryIofy21Y+UomoR4fJYuwmfZErSJ93AWKYp12EhsbTuAXk67EEJkjAf+dtmxYwdB\nQUEUK1bskQ6qKEqarhcQYEKvz9hNDwID/TL0+OnpkxOf0H1nd+Lt8XSo1oGlry3F3+ivdqwstYZP\nxGqFRYtg+nS4cwfy54fJk9D16IGftzdPugo5Zh0zmKzjk5M1TB/pvY4PLOTw8HCioqIIDw/n5s2b\nGAwGChYsyLPPPvu36+XPn5+YmJjUz2/fvk1QUNBDb/zuXetjxk6bwEA/orPAMAZripWwAyNZd3I1\nJr2JBY2W0rZCB+wJGqJRN39WWcMnkpyM97rVmObORHf7Fq5cubGOHktScE/3vOl7Ke4/TyBHrGMm\nkHV8crKG6eNx1/FBJf7AQp43b17qxwsXLqRIkSL/KmOAGjVqMGbMGBISEtDpdERERDBq1KhHDpoT\nnYo9SY9vunDm7mmq5qvO8iarKBsgAyUyhcPhnjc9axq6K5dRTGYsg4eR1GcASi45IVEIkbke+QWx\npUuX8tNPPxEdHU337t0JCgoiJCSEoUOHEhwcjEajoW/fvqkneIl/UxSF327+ypYzG/jkzCZsThvd\nq/UirN4EvPWyFV+Gc7kwfPE55mmT0J8765433bMP1gFDUQLlLHYhhDo0Slpf8M0AGf20iac9NRN1\n7wpbzmxky5mNXIy/AEBhcxGmvTCbpqWaqZzu/jxtDZ+IomDY8y2mKRPxOn4URafD1qET1iEhuIoU\nzdCbzlbrqCJZxycna5g+Mv0pa/HkElMS2RX5GVvObOTHa/sA8NH78Ha5NrSt2IHni7yITpuxJ7YJ\n8Pr5AObJ4/H67RcUjQZby9ZYQ0Jxli6rdjQhhACkkDOES3Fx4Np+Np/ZwK7Iz7E63BPN6hWuT9sK\nHWhR5g38DOqfPZ0T6I9EYJ4yAUP4HgDsTV/DMnIMzspV1A0mhBD/IIWcji7EnWfzmQ18cmYzVxOj\nACjuX5K2FQbQunw7SuYqpXLCnEN3+hTmaZMwfukeYJP8QkMsoWNw1H5K5WRCCHF/UshPKN4ex47z\n29l8egMHb/0GgK+XHx0qdqJtxQ48U6ieTNjKRNqLFzDPnIpx2xY0ikJKnaexjHqflOdeUDuaEEI8\nkBTyY3C4HPwQtYdNpzew+9IX2J12NGh4sWhD2lbsQLNSLTB5mdSOmaNob1zHNHsG3hvWuudNV6mG\nZVQYyY1fkXnTQogsQQr5EZyKPcnmMxvYenYzt623ACiXuzxtK3agVfm2FPYtonLCnEcTE4NpwRx8\nVn2Ixm7HUaYs1pFjsLd4U+ZNCyGyFCnkh4hNimX7uS1sPrORY9FHAMhtzE3Xqt1oW6EDNfPXRiOP\nwDKdJiEenyUL3fOmLYk4ixbDMjwUe+t2Mm9aCJElyW+u+0h2JvPd5W/YdGY9313+GofLgU6j4+US\nTWlbsQMvl3wVo86odsycyWLBZ+VyTIvmoo2LwxWYn3tjxmLr2AWM8m8ihMi6pJD/pCgKx6KPsPnM\nBraf+4Q7tjsAVMlbjbYV29OyXBvym/I/5Cgiw9jteH+8GvOcmWijb+PKnZvEMeNJCu4BZrPa6YQQ\n4onl+EK+ZbnJJ2c3s+XMBk7fOQVAPp9AetboS9sKHaiar5rKCXM4hwPjJ5swz5yK7moULrMvliEh\nJPXuJ/OmhRDZSo4s5CRHErsvfsHmMxsIj9qDS3Fh0BpoXvoN2lXsQMNijfHSeakdM2dzuTDu3IFp\n+mT058+hGI1Ye/XDOmAISr58aqcTQoh0l2MK+f9v6PDZ+U9JSI4HoFb+2rSp2IG3yr5NgHcelVMK\nFAXDd19jnjIR/YnjKHo9SZ26Yh0agquwnMUuhMi+sn0hR927widnNrHlzEYuxEcCUMhcmC5VgmlT\noT3l81RQOaH4i9eB/e550wd/c8+bbtUWy/BQXKVKqx1NCCEyXLYs5L82dPj0yy3svbQXkA0dPJk+\n4iDmKRMx7HP/W9mbtcAyYjTOSpVVTiaEEJkn2xSyoigcuL6fTafX/21Dh7qFnqVdxXdkQwcPpDt5\nwj1vevcXACQ3aIQlNAxHzdoqJxNCiMyXbQp5y5mN9N/TC3Bv6NCmfH96P9sdP4dsOO9ptBciMc+Y\ngvHTre5500/Xdc+bfvY5taMJIYRqsk0h1y38LANrDaVR8capGzoEBshG3J5Ee+0qpjkz8N6wDo3T\nSUq1GlhDx5D80ssyb1oIkeNlm0Iu4V+S0XXHqh1D3IcmOhrTgtn4rF7pnjddrjyWEaNJbv6GzJsW\nQog/ZZtCFp5HEx+Hz5IFmJYtRWO14CxW3D1vulVbmTcthBD/IL8VRfqzWPBZ8QGmRfPRxsfhzF8A\na9h4bB07y7xpIYT4D1LIIv3Y7fis/QjTvNnuedMBASSGTXDPmzbJ/tBCCPEgUsjiyTkceG/egGn2\n9P/Nmx46wj1v2j+X2umEECJLkEIWj8/lwvjZdkwzpqCPPI/i7Y21zwCs/Qej5M2rdjohhMhSpJDF\no1MUDN/sxjx1IvqTf7jnTXcJxjp4OK5ChdVOJ4QQWZIUsngkXvt/wDxlAl6HfnfPm27THsuwkbhK\nllI7mhBCZGlSyCJN9Id+d8+b3h8OgP21193zpitWUjeYEEJkE1LI4sGOHcM/ZCTGr78CILlRY/e8\n6Ro1VQ4mhBDZixSyuC9d5DlMM6bAju0YFYWUZ+phGT2WlLrPqh1NCCGyJSlk8Tfaq1GYZk/He9N6\nNE4n1KpFXMhoUho2lnnTQgiRgaSQBQCa27cxzZ+Fz5qP0CQn4yhfAcuIMeTq+g4pMYlqxxNCiGxP\nCjmH08TdxbR4AT4fLkVjteIsXuJ/86Z1OnlULIQQmUQKOadKTMT04VJ8Fi9AmxCPs0BBrGMnYXvn\nXTAY1E4nhBA5jhRyTmOz4bNmJab5s9HGxLjnTY+dRFLXbjJvWgghVCSFnFOkpOC9ab173vT1a7h8\n/bAMDyWpV18UP3+10wkhRI4nhZzduVwYP93qnjd98YJ73nTfgVj7D0LJI/OmhRDCU0ghZ1eKgmH3\nl5inTUJ/6gSKlxdJXbu5500XLKR2OiGEEP8ghZzdKApe+8IxT52AV8QhFK0WW9sO7nnTJUqqnU4I\nIcR/kELORvS//Yp56gQMB/YDYG/xpnvedPkKKicTQgjxMFLI2YDu+DHM0yZi/PZrAOwvNcEaGoaj\nepDKyYQQQqSVFHIWpjt/DtP0yXh/th2A5Hr1sYS+j6NuPZWTCSGEeFRSyFmQNuoKplnT8N68AY3L\nRUqNmlhGvU9Kg0YyWca2LLgAAAw0SURBVEsIIbIoKeQsRHPrFuZ5M/FeuwpNSgqOChWxjAwjuVlz\nKWIhhMjipJCzAM3dO5gWzcdnxQdokpJwliiJJWQU9pat3fOmhRBCZHlSyB5Mk3gPn2VL/q+9ew+K\n6r6jAH52F1Z2YcVHoL7SV8Ym1leqJg2xqIBVjPiIEFBCrAbRUTQRtaxoNDGJUdSi1SRqba1Wm9GJ\nk7E040xiaplJ6iNNJNb4ABOJOBhEhIhyd9lw+faPrZtHVVZZuD/wfP5i5K6cOaMeL7v7A7bXN8B8\ntQZ6127QXlwBd+pTQHCw0fGIiCiAOMgqcrlg2/Yn2Nf/DubLl9HQuTOuLXsFrinpgM1mdDoiImoG\nHGSVfP01Qt7YAXveKli+vIAGR3vUOhfDNWMWJMxhdDoiImpGHGQV6DravfUmQle9Asu5LyA2G7Q5\nWdBmPwvp2MnodERE1AI4yEYSgXXf2wjNfRlBp095z5tOnw5t7gI0/KCL0emIiKgFcZCNIILgggPe\n86Y/KYSYzXBNSoM234mGH/7I6HRERGQADnILCzp8yHve9KF/AQDcYx+H5lwMvefPDE5GRERG4iC3\nkKD/fAL7ipfQ7h/7AQB1vx4JbeFzqO/b3+BkRESkAg5yM7MUFyE0dzna/X0vAMDz6K9Qu+h51D/8\nS4OTERGRSjjIzcR87guErlmJdm/u8p43/YsBqM1Ziq+HxvCYSyIi+j8c5AAzXyyHPW8VQnZu9543\n3evnqHU+B8+o0RxiIiK6KQ5ygJiqLsO+YR1sW//gPW/6xz9BrXMx6sYn8rxpIiJqFAe5iUxXa7zn\nTW989Zvzpl/OhXvikzxvmoiI/ObXILvdbiQkJGDWrFmIiopCdnY2dF1HREQEVq9eDavVit69e2PA\ngAG+x2zbtg2Wtnxn6HLB9uc/es+brqpCwz334Fr2Crh+kw6EhBidjoiIWhm/Bnnjxo0IDw8HAKxf\nvx6pqakYNWoU8vLysGfPHqSmpiIsLAw7duxo1rBK8HgQ8te/wL52NSzlX6KhfThqc5ZAy5gJhIUZ\nnY6IiFopc2MXfP755/jss88wbNgwAMCRI0cQFxcHAIiJicGhQ4eaNaAydB3tdr+BTo8OgsM5D+aa\nK9CenY+qfx+DlvVbjjERETVJo3fIubm5WLJkCfbu9b6P1uVywWq1AgA6d+6MS5cuAQA8Hg/mz5+P\nsrIyjBw5ElOnTm30i3fsaEdQUPN+Wzsiook/JUkEeOstYOlS4ORJwGoFnnkGppwc2Lt0gT0wMZXW\n5A4JAHsMFPbYdOwwMALd4y0Hee/evXjwwQdx77333vDzIuL7ODs7G2PHjoXJZEJaWhoGDRqEvn37\n3vKLV1drdxDZfxERDly6dPXOHiyC4H++h9AVLyP4WCHEYoH7ycne86Z7/K+PO/29W5EmdUg+7DEw\n2GPTscPAuNMebzXitxzkgoICnD9/HgUFBSgvL4fVaoXdbofb7UZISAguXryIyMhIAMCkSZN8j3vk\nkUdQXFzc6CCrKvjwQdhfeRHWwwcBAO7HE6FlL4J+X0+DkxERUVt1y0Fet26d7+MNGzage/fuKCws\nxDvvvINx48bh3XffRXR0NM6ePYvXXnsNa9asga7rOHr0KOLj45s9fKAFHStE6IqXYD3wHgCgbuQo\n1Dqfg96ndf7HgoiIWo/bfh/ynDlz4HQ6sXv3bnTr1g3jx49HcHAwunTpgqSkJJjNZsTGxqJfv37N\nkbdZWIpOe8+bfvtvAABP9FDU5ixB/aCHDU5GRER3C5N8+4ngFtbcz2M09j1+8xcl3vOm9+z2njc9\ncJD3vOkhw5o1V2vC55sCgz0GBntsOnYYGC3+HHJbZS7/8pvzpuvrUd+rN2oXLYVnRDzPmyYiIkPc\nVYNsunwZ9g1rvedNu92o/+l90JyLUTduAmBu9C3ZREREzeauGGRTzRXYNr4K2+bXYb52FXr3HtAW\nLIQ7JRUIuisqICIixbXtNdI02Dasg/3VtTBXV6Phnghcy3kOrqem8rxpIiJSStscZI8HITu2Ab9f\ng7DycjSEd8C1xc/DlT6DR1wSEZGS2tYg19ej3Z7dCF2zEpbSc0BoKGqzFsA16xlIeAej0xEREd1U\nmxlky5litJ+SiqAzxRCrFdqMWbC/+Dw0k83oaERERI1qM4McdOI4LCVn4XpqCrR52Wjo3gP2CMdd\ncd40ERG1fm1mkOvGJ6JuzHjA0rw/PYqIiKg5tK0333KMiYiolWpbg0xERNRKcZCJiIgUwEEmIiJS\nAAeZiIhIARxkIiIiBXCQiYiIFMBBJiIiUgAHmYiISAEcZCIiIgVwkImIiBTAQSYiIlKASUTE6BBE\nRER3O94hExERKYCDTEREpAAOMhERkQI4yERERArgIBMRESmAg0xERKSAIKMDNNWqVavw8ccfo76+\nHjNmzMCIESMAAO+//z6mTZuGoqIiAMDp06exaNEiAEBcXBwyMzMNy6wif3tcu3Ytjhw5AhHB8OHD\nkZGRYWRspXy/wwMHDuDEiRPo0KEDACA9PR3Dhg1Dfn4+tm/fDrPZjOTkZDzxxBMGJ1eLvz3u27cP\nW7duhdlsRlRUFLKysgxOrhZ/e7xu3rx5sFqtWLlypUGJ1eNvhwHbF2nFDh06JNOmTRMRkaqqKhk6\ndKiIiLjdbklLS5PBgwf7rk1KSpJPP/1UdF2XrKws0TTNiMhK8rfHoqIiSUlJERERXdclPj5eKioq\nDMmsmht16HQ65cCBA9+5rra2VkaMGCE1NTXicrlk9OjRUl1dbURkJfnbo6ZpEhMTI1evXpWGhgZJ\nSkqSM2fOGBFZSf72eN0HH3wgiYmJ4nQ6WzKm0m6nw0DtS6u+Q37ooYfQr18/AED79u3hcrmg6zo2\nbdqE1NRUrF69GgBQWVkJTdPQu3dvAEBeXp5hmVXkb48OhwN1dXXweDzQdR1msxk2m83I6Mq4WYff\nd+zYMfTt2xcOhwMAMGDAABw9ehSxsbEtmldV/vZos9mQn5+PsLAwAECHDh3w1VdftWhWlfnbIwB4\nPB5s3LgRM2fOxP79+1syptL87TCQ+9Kqn0O2WCyw2+0AgD179mDIkCEoLS3F6dOnMWrUKN91ZWVl\nCA8Px8KFCzFx4kRs27bNoMRq8rfHrl27Ij4+HjExMYiJicHEiRN9/yDe7W7UocViwc6dOzF58mRk\nZWWhqqoKlZWV6NSpk+9xnTp1wqVLl4yKrRx/ewTg+7NXVFSEsrIy9O/f37DcqrmdHjdv3oxJkybx\n7/L3+NthQPelSff0iti/f78kJSVJTU2NZGRkyLlz50REJCYmRkRECgsLJTo6WqqqqkTTNBkzZowU\nFxcbGVlJjfVYWloqiYmJomma1NTUyGOPPSaVlZVGRlbOtzs8ePCgnDx5UkRENm/eLMuWLZP8/HxZ\nvny57/q8vDzZtWuXUXGV1ViP15WUlEhCQoLv8/RdjfVYUlIi06dPFxGRw4cP81vWN9BYh4Hcl1Z9\nhwx4X3S0adMmbNmyBZqm4ezZs1iwYAGSk5NRUVGBtLQ0dO7cGT179kTHjh1hs9kwcOBAnDlzxujo\nSvGnx+PHj6N///6w2WxwOBy4//77UVxcbHR0ZXy7Q4fDgaioKPTq1QsAEBsbi+LiYkRGRqKystL3\nmIqKCkRGRhoVWUn+9AgA5eXlyMzMxMqVK32fp2/402NBQQEuXLiA5ORkLFu2DAUFBdiyZYvBydXh\nT4cB3ZdA/k+ipdXU1EhCQsJN79Ku39mJiKSkpEh1dbXoui4pKSly6tSploqpPH97PH78uCQnJ4uu\n6+LxeGT06NFy/vz5loyqrBt1OHv2bCktLRURkZ07d8oLL7wgLpdLhg8fLleuXJFr1675XuBFXv72\nKCLy9NNPy4cffmhITtXdTo/X8Q75u26nw0DtS6t+Ude+fftQXV2NuXPn+n4tNzcX3bp1+79rc3Jy\nkJGRAZPJhOjoaDzwwAMtGVVp/vbYp08fDB48GKmpqQCApKQk9OjRo0WzqupGHU6YMAFz586FzWaD\n3W7HihUrEBISgvnz5yM9PR0mkwmZmZm+F3iR/z2WlJTgo48+wvr1633XTZkyBXFxcUbEVo6/PdLN\n3U6HgdoX/vhFIiIiBbT655CJiIjaAg4yERGRAjjIRERECuAgExERKYCDTEREpAAOMhERkQI4yERE\nRArgIBMRESngvy5pVG+fzySIAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
- },
- {
- "metadata": {
- "id": "A6MaclhK4rc6",
- "colab_type": "code",
- "outputId": "065e7aa3-2d40-4566-9b49-d3237c69e4e5",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 548
- }
- },
- "cell_type": "code",
- "source": [
- "# Okay! Now let's tweak!\n",
- "linear_regression(learning_rate=0.000034, n_epochs=500)"
- ],
- "execution_count": 22,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Loss after epoch 0 is 48290.105\n",
- "Loss after epoch 50 is 29.723145\n",
- "Loss after epoch 100 is 29.653582\n",
- "Loss after epoch 150 is 29.584167\n",
- "Loss after epoch 200 is 29.514908\n",
- "Loss after epoch 250 is 29.445837\n",
- "Loss after epoch 300 is 29.376942\n",
- "Loss after epoch 350 is 29.30818\n",
- "Loss after epoch 400 is 29.239614\n",
- "Loss after epoch 450 is 29.171177\n",
- "Now testing the model in the test set\n",
- "The final loss is: 32.455235\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "display_data",
- "data": {
- "image/png": "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\nkImIiHTg/wB7E1g/b6J1IAAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
- },
- {
- "metadata": {
- "id": "peoHmV2M40uU",
- "colab_type": "code",
- "outputId": "cc3b5c21-06bd-4aee-9476-1f50063bf5e5",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 715
- }
- },
- "cell_type": "code",
- "source": [
- "linear_regression(learning_rate=0.0000006, n_epochs=1000)"
- ],
- "execution_count": 23,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Loss after epoch 0 is 48290.105\n",
- "Loss after epoch 50 is 5544.9077\n",
- "Loss after epoch 100 is 660.0498\n",
- "Loss after epoch 150 is 101.81439\n",
- "Loss after epoch 200 is 38.018833\n",
- "Loss after epoch 250 is 30.727413\n",
- "Loss after epoch 300 is 29.893017\n",
- "Loss after epoch 350 is 29.796562\n",
- "Loss after epoch 400 is 29.78446\n",
- "Loss after epoch 450 is 29.781971\n",
- "Loss after epoch 500 is 29.780622\n",
- "Loss after epoch 550 is 29.77936\n",
- "Loss after epoch 600 is 29.778126\n",
- "Loss after epoch 650 is 29.776915\n",
- "Loss after epoch 700 is 29.77566\n",
- "Loss after epoch 750 is 29.774433\n",
- "Loss after epoch 800 is 29.77318\n",
- "Loss after epoch 850 is 29.771988\n",
- "Loss after epoch 900 is 29.77074\n",
- "Loss after epoch 950 is 29.76949\n",
- "Now testing the model in the test set\n",
- "The final loss is: 33.224064\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "display_data",
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAFKCAYAAADMuCxnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xd4k+XbxvFvdpuUQoGy996U8VOG\nylZUcLERFCwIsmeZRfbeGwTZeyqouKCCOKHsvYSy20ILTZq0SZ73j2B9VYQCbZ+0vT7HwUEh6ZMz\nNzl6kuTJdWsURVEQQgghhKq0agcQQgghhBSyEEII4RWkkIUQQggvIIUshBBCeAEpZCGEEMILSCEL\nIYQQXkCv5o1HRt5P1eMHBJi5e9eWqreR0ckapgxZx5Qh6/jsZA1TxtOuY2Bglv+8LEM/Q9brdWpH\nSPdkDVOGrGPKkHV8drKGKSM11jFDF7IQQgiRXkghCyGEEF5AClkIIYTwAlLIQgghhBeQQhZCCCG8\ngBSyEEII4QWkkIUQQggvkKzBIHa7nSZNmtCtWzdq1qzJkCFDcDqd6PV6pkyZQmBgIOXLl6dq1apJ\n37N8+XJ0uvT3ebc5c2Zw5swp7tyJxm63ky9ffvz9szJ+/JQUOX7z5k3JlSs3Wu1f/xeaO3fxMx/3\nxx9/4Pnna3HvXixLly4iJGTYMx9TCCFE2klWIS9YsICsWbMCMHPmTFq2bMlrr73GmjVrWLZsGSEh\nIfj5+bFq1apUDZsWevbsC8CXX+7g4sUL9OjRJ8VvY+rU2ZjN5hQ95vr1a6ha9X/kyJFTylgIIdKh\nxxbyhQsXOH/+PHXr1gXg448/xmQyARAQEMCJEydSNaC3CA8/wPr1q7HZbPTo0Zf+/XvwxRffAzB8\neAjvvNOSMmXKMn78KO7fv4/L5aJPn4GUKFEyWcd//fUG/zreoUMHsVrjuHLlMteuXaVXr/7UrFmb\nXbu+YPPmDWg0Glq3fpfExEROnjzOgAG9GDw4lFGjhrN06SrCww+wePF89Ho9gYG5GDJkBN999zVH\njx4mJuYuV65cpm3b9jRp8laqrZsQQojkeWwhT5o0idDQULZv3w6Q9MzO5XKxdu1aunfvDkBCQgL9\n+/fn2rVrvPLKK3Ts2PGZw438aTg7Lmx/6u/XajW43crf/q5p8bcYWWvsUx3vwoXzrFu3FaPR+NDL\nN25cx/PP16Jp07e4dOkis2ZNZebM+U91W3+6ffsWU6fO5pdffuKzz7ZQuXIQy5cvYcWKdSQkJDJu\n3MdMnDidJUsWMnXqbGJjY5K+d+rUCcyYMY/cufMwffokvv12FxqNhgsXzrNw4adcvRrBxx8PlUIW\nQoiH+O3Gr9xLiKFh4VfS5PYeWcjbt28nKCiIggUL/u3vXS4XISEh1KhRg5o1awIQEhLCG2+8gUaj\noV27dlSvXp2KFSs+8sYDAsyPnAdq9jWi1WqSe18e6p/fb/Y1PnK495+yZPHBbP7rutmymSlXriz5\n8+cAQKPRJF1mMhnIls3MmTMnuHPnDnv2fAOAwxH/r9vS6bQMGdI36f31gIAAZs+e/dDjWSwmatZ8\nnsDALJQuXRSHI57Y2NuULFmCAgUCAVi69JOk4+bM6YdOl4her8VgcKHX66hQwfMMvW7dF/n9998p\nV64c//tfNfLkyUaWLAbi462PXY/krJd4PFnHlCHr+OxkDf+boih8feFrxu8bz74r+zAbzMQNiUOj\n+XcXpfQ6PrKQw8LCiIiIICwsjJs3b2I0GsmTJw/bt2+ncOHC9OjRI+m6bdq0Sfq6Ro0anD179rGF\n/LidMkKqjCCkyojk3I+HCgzM8tAdpZKzy9T9+3ZstoSk68bE2FAUTdKfFUVJ+tpqjU+6vGfP/lSo\nUOk/b8vlcjNhwoy/vYccGXn/ocezWh0YDL5ERt7n7l0rCQlOYmPt2O0JDz1uVFQcsbFWnE430dFW\nnE5X0vWio+9htzu5f99OQoKbyMj72Gw2XC73I9fjv9ZQPBlZx5Qh6/jsZA0fzq24+fLiTmaFT+NI\n5CEAGhZ6mYH/G0JUVNy/rv+06/jUuz3NnDmTLVu2sHHjRlq0aEG3bt2IiorCYDDQq1evpOtdvHiR\n/v37oygKTqeT8PBwSpZM3nun6ZVGo8Fut2O32zl79gwA5cpVYO/eMAAuXbrI+vWrn+l4D1O4cBGu\nXLmMzWbD4XDQp083FEVBo9HicrmSrufv749Go+HmzZsAHD4cTpkyZZ/ingohRMaV6Epk45l1vLT+\neT74uh1HIw/zRvG3+b7lj6xtspkquaulWZYn3g957dq1OBwO2rdvD0Dx4sUZOXIkefLkoXnz5mi1\nWurXr0+lSpUec6T07a23mvPhh+9TpEgxSpf2FF3z5q0YN24k3bp1wu1206fPgGc63sP4+voSHNyV\nPn26AdCqVVs0Gg1VqlSlW7dghg0bmXTdkJDhjBo1DJ1OR/78BWjQ4GW++earp7vDQgiRgdiddtaf\nXsPcQzO5cv8yeq2e1mXepWeVvpQMKKVKJo2iKMrjr5Y6UvtlE3lp5tnJGqYMWceUIev47DL7GsYl\nxrHyxDIWHJ7DLdtNTDoT75Z9j+5VelMwS6FkHyc1XrJ+4mfIQgghRHoTY7/LkmOL+OToAu467mIx\n+NE9qDddg3qQ25xb7XiAFLIQQogM7LbtNguPzGXZ8SVYE+PIZsrGwP8NoVPFLgT4ZFc73t9IIQsh\nhMhwrt6PYN7hWaw5uRK7y04uc24GVB/M++U74mf0zo99SSELIYTIMC7EnGN2+Aw2nV2P0+2kYJZC\n9KjShzZl2uGj91E73iNJIQshhEj3jkcdY9bBaXx+YRsKCiWzlaJX1X68U7IFBp1B7XjJIoUshBAi\n3fr95q/MPDiVby9/DUDFnJXpU20ArxVtgk6bvnYclEL+hxs3rvPee60pXboM4JnR/e6771OnTr0n\nPtaWLRuIiYnhpZfqsndvGMHBXR56vT+3TjQYHv+/uIsXzzN9+uR/bdlYp87zVKxYOenPOXLkYNSo\nCU+c+Z927dpFtWq1OXfuzCPvgxBCpBVFUdh7NYyZB6ey//o+AJ7LU4O+1QZQv1Cjh465TA+kkB+i\nUKHCSYV3714sHTu+S40aNTGZnu79h5IlS1OyZOn/vPzPrROTU8j/xc/PL0X2Vf6nxYsXs2hR7cfe\nByGESG1uxc3Xf3zFrINTCb99EIB6BRvQp9oAauarrXK6ZyeF/Bj+/lnJkSMn0dHRLFv2CXq9gXv3\nYhg9eiKTJ4/j+vVrOJ1OOnXqSrVq/+PAgd+YPXsa2bPnIEeOnOTLl5/w8ANs3bqRsWMnP3LrxFmz\nFvD559v47rtdaDRaXnyxLm3atOP27VuEhg7GYDBQokTyJ8jcuHGd4cMHsXSpZ5/q4OD2jB07iU8/\nXUzOnIGcOXOKW7duMmLEWEqXLsOaNSsIC/sejUZL1649OH36JGfOnGHo0IE0b94q6T58//23bNiw\nBp1OR+nSZenTZwBLly566FaRQgjxrJxuJ5+d38rs8OmcunMSgNeKNqVPtf4E5aqqcrqU49WFbBk5\nHNOOp99+Ea2G7P/YftHR9C2sI5O//eKNG9e5dy+WXLk8Hxz39/dn0KBh7Nr1BTly5GTIkBHExMTQ\nu3dXVqxYz6JFcwkNHUPJkqUYMKAX+fLlTzqWzWZ95NaJkZG3CQv7nvnzlwLw0UfB1KvXkK1bN9Cg\nwcu0bNmG1auXc/782adfkwcSEhKYPn0u27dvZteuLzCbzYSFfc+iRcu5fv0aq1cvZ/DgUNauXcn4\n8VMIDz/w4D7YWLx4HsuWrcVsNhMS0jfpsn9uFSmFLIR4Fg6Xg01n1jM7fDp/3LuETqOjealW9Kra\njzLZM95sfq8uZLVcuXKZHj0+BMBoNDJ8+Cj0es9SlStXHoDjx49y5Mghjh49DIDD4SAxMZEbN25Q\nsqTnWWxQUFUcDkfScf/44xKFChXBZPLBZPJh4sTpf7vdU6dOcPVqBD17et6ntdms3Lx5nT/+uES9\neg0BqFKlOr/88tO/MsfFxSVlBihevAStW7f7z/tYuXIVAAIDc3Py5AnOnj1DuXIV0Gq1FChQkMGD\nQx/6fRERVyhQoFDSblVVqlTj7NnTAFSqFARArly5iIv79+4oQgiRHLZEG6tPLmfe4dncsF7HqDXy\nXrkP6FGlN0WyFlU7Xqrx6kK2jhz7RM9m/ykwMAt3nmLW6P9/D/mf9HpD0u/vvfcBjRo1/tvlWu1f\nG2j9c0y4VqtDUdz/ebt6vYGaNWsTEjLsb3+/Zs0KNBrtg2M+/Psf9h7yzZs3/vZnp9OZ9PWf+zH/\nmVOn0+J2P36suUbz9/vldCZiMpkeekwhhHgS9xyxfHr8ExYdmUe0PRqz3kzXyj34qHIP8vrlUzte\nqnvk9oviv5UrV4Eff/wBgLt377Bo0TwAcuYM5MqVP1AUhUOHDv7tex63dWLp0mUJDz+I3W5HURRm\nzpyKw2GnUKHCnD7ted/kz5eHk8NstnD37h0URSE6Oorr16/+53VLly7LsWNHcDqd3LkTzZAhnp2q\n/lmsBQsW5urVK9hsVgAOHQqndOlyyc4khBD/FBUfxfhfRlNlVXnG/zqaRLeTftUGcrD9CUbXHp8p\nyhi8/BmyN6tfvyHh4b/TtesHuFwuPvjA83Lxhx92Y/jwQeTJkzfpfec/PW7rxDlzFtOyZRu6d++M\nVqvlpZfqYjL50KJFG0JDB7N37x6KF0/+PtP+/v5Ur/4cnTq9R4kSJR95lnTevPl45ZXX6NHjQxRF\noUuX7gCULVuWzp3f46OPeiXdh+7de9O/f080Gi2VKgVRuXIQBw78+kTrJ4QQ1+OuMf/wbFadXE68\nM56cvjnpXWMkHSt0IovRX+14aU62XxSPJGuYMmQdU4as47PzhjW8GHuBeYdmsf70GhLdieT3K0D3\noF60LfseZoNZ1WzJJdsvCiGESLdORZ9kVvg0tp/fgltxUyxrcXpV7UfzUq0w6oxqx1OdFLIQQohU\n4VbcHI86SljEbnZf+Y6frv8IQLkcFehTtT9Ni7+V7sZbpiYpZCGEECnmpvUGYRG7CYv4nh8i9hBt\nj0667Lk8NehZtS8vF26cbsdbpiYpZCGEEE8t3hnPz9f3Exaxmx8ididN0gLIY8lL6zLvUrdgfV4q\nUI+cvjlVTOr9pJCFEEIkm6IonIw+kfQs+JcbP+FweQYg+ep9qV+oIXUL1qduwQaUDigjz4SfgBSy\nEEKIR7ptu83eq3selPBubttuJV1WPkfFBwVcn+fz1sRH/3Sb8AgpZCGEEP/gcDn47cYv7In4nrCI\n3RyPOpp0WU7fQJqXakXdgvWpU6AeuS15VEyasUghCyFEJqcoCmfvniHsQQH/dP1H4p3xABi1Rl4s\nUJe6BetTr2ADyuUoj1YjQx5TgxSyEEJkQnfs0eyNCEt6Gfq69VrSZaUDylC3UAPqFaxPjby1082w\njvROClkIITKBBFcCB2/9zm/HfuTLM19x+PYhFDyDGrP7ZOftEs2oW7ABdQrWI59f/sccTaQGKWQh\nhMiAFEXhUuwF9jz4ONK+a3uxJnq2RdVr9dTMVzvpZKxKgUHyMrQXkEIWQogMItYRw76re9kT8T0/\nROzmyv3LSZcVz1aCugXr81aFppS3VMXP+N8zlYU6pJCFECKdcrqdHLp9kD1XPCdjhd8+gPvBnulZ\nTdloWvytpLOhC/kXBrxjcwnxcFLIQgiRjsQ74/n8/DZ2/fEl+67+wL2EWAB0Gh3Vcz+X9DJ0UK6q\n6LXyIz49kX8tIYRIBy7GnGf5iU9Zf3o1MY4YAAr5F+Htks2pW7A+L+R/kaymbCqnFM9CClkIIbyU\n0+3k6z++YvnxJfxwdQ/gGczRp+oAWpdpS7FsJVROKFKSFLIQQniZm9YbrD65glUnl3PDeh2Amvlq\n06F8MK8Xe0P2Ds6gpJCFEMILKIrCj9f2suz4Er66tBOX4sLPkIUPKnTm/fLBlM1RTu2IIpVJIQsh\nhIpi7HfZcGYtK058yvmYc4Bnw4aOFTrxTqkW+Bn8VE4o0ooUshBCqODw7XCWH1/KtvObiXfGY9Qa\naVGqNR0qBFM993OybWEmJIUshBBpxJZo47PzW1l+YgmHbocDUNi/CO+XD6ZNmXbk8M2hckKhJilk\nIYRIZefvnmPFiaWsP7OWWEcMWo2WxkVeo0OFTtQtWF/GVgpAClkIIVJFoiuRXX98yfITS9l3NQyA\nQN9c9K02gPblOlIgS0F1AwqvI4UshBAp6EbcdVadXM7qUyu4ab0BQO18L9KhQjCvFm0iH1kS/0kK\nWQghnpFbcbPv6g8sP7GUXZe+wKW4yGL0p1PFLrxfPpjS2cuoHVGkA1LIQgjxlO7a77D+9FpWnFjK\nxdgLAFTMWZkOFYJ5p2QLLAaLyglFeiKFLIQQT0BRFA7dPsjyE0vZfm4Ldpcdk85Ey9Jt6FihE1Vz\nVZePLImnIoUshBDJYEu0se3cZpadWMLRyMMAFM1ajPfLB9O6TFuy+8hHlsSzkUIWQohHOHf3rOcj\nS6fXci8hFq1Gy6tFm9ChfDB1CtaTjyyJFCOFLIQQ/5DoSuSrSztZfmIpP17bC0Auc246VepC+7Id\nyJ+lgMoJRUYkhSyEEA9cj7vGypPLWHNyJbdsNwF4If9LdKzQicZFXsegM6icUGRkUshCiEzNrbj5\nIWIPy08s5es/vsStuPE3ZuXDSh/xfvlgSgaUUjuiyCSkkIUQmdZd+x1a7Xibw5GHAKgcWIUO5YN5\nq2Qz+ciSSHNSyEKITMmWaKP9l605HHmI14o2pXfVflTJXU3tWCITk0IWQmQ6TreTD7/pwG83f+Gd\nks2Z33CJnC0tVCePQCFEpqIoCv3DevHN5V3UKVCP2fUXShkLryCPQiFEpjLul1GsO72aoMAqLGu8\nWjZ7EF5DClkIkWksOjKP2YemUyxrcdY22YKfMYvakYRIIoUshMgUtpzdSOj+IeQ252Fj0+3k9M2p\ndiQh/kYKWQiR4e258j09d3fF35iV9U22Usi/sNqRRDqguXsH7eU/0uz2pJCFEBla+K0DdNzVDp1G\nx6rX1lM+ZwW1Iwkvp7kXi3niWLJXrUD2OjVAUdLkdpNVyHa7nYYNG7J161Zu3LhBhw4daNeuHR06\ndCAyMhKAzz//nGbNmtGiRQs2bdqUqqGFECI5zt89x7tftMDuimdRo2XUzFdb7UjCm1mt+M6eQfbq\nFbFMnwy+vtyfMBXSaDvNZBXyggULyJo1KwAzZ86kZcuWrF69mkaNGrFs2TJsNhvz5s1j+fLlrFq1\nihUrVhATE5OqwYUQ4lFuWm/QaufbRNujmVpnFq8Va6J2JOGtHA58li4ix3OV8Rv7MSgQN3wk0b8f\nxdGmXZrFeOxgkAsXLnD+/Hnq1q0LwMcff4zJZAIgICCAEydOcOTIESpWrEiWLJ4zFqtWrUp4eDj1\n69dPveRCCPEfYh0xtNrxNhH3rzDkuVDalXtf7UjCGzmdmDatxzJlArqrEShmC9Z+A4n/qCdK1mxp\nHuexz5AnTZrE4MGDk/5sNpvR6XS4XC7Wrl1L06ZNiYqKInv27EnXyZ49e9JL2UIIkZbinfG0+7IV\np+6cJLjih/SpNkDtSMLbuN2YPttKwEvP49+7G9rI29i6dCf696PYBoeqUsbwmGfI27dvJygoiIIF\nC/7t710uFyEhIdSoUYOaNWuyY8eOv12uJPMN8IAAM3q97gkjP5nAQPmc4bOSNUwZso4p41Hr6HQ7\n6bSxHb/e+JmW5Vuy+O0FMoXrITLtY1FR4MsvYdgwOHIEdDro3BlNaCjmggUxP+HhUnodH1nIYWFh\nREREEBYWxs2bNzEajeTJk4ft27dTuHBhevToAUCuXLmIiopK+r7bt28TFBT02Bu/e9f2jPEfLTAw\nC5GR91P1NjI6WcOUIeuYMh61joqi0C+sJ5+f+ZwXC9Rl2gvziI6ypnFC75dZH4uG/fuwjBuF4cBv\nKBoNjndaYA0ZirtYcc8VnnBNnnYdH1XijyzkmTNnJn09Z84c8ufPT1RUFAaDgV69eiVdVrlyZYYP\nH869e/fQ6XSEh4czdOjQJw4qhBBPa+JvY1hzaiWVA6uwovEaTDqT2pGEF9CHH8AyfgzGvXsAcLza\nBOugYbjKlVc52b898W5Pa9euxeFw0L59ewCKFy/OyJEj6d+/P8HBwWg0Grp37550gpcQQqS2JUcX\nMuPgVIpmLcba1zfLSEyB7uQJLBPHYtr1BQAJdephHRKKs2p1lZP9N42S3Dd8U0Fqv2ySWV+aSUmy\nhilD1jFlPGwdt53bTNdvgwk05+KLd76lsH8RdcKlExn9sai9eAHL5PGYtm1Goygk/u95rENHkFj7\nxRS9nTR/yVoIIbxZWMRuenzfBT9jFtY32SplnIlpr13FPH0yPmtXoXG5SKxQCduQ4SQ0fCXNBns8\nKylkIUS6dPh2OB13tUOr0bLq1fVUyFlR7UhCBZrISMyzp+G7fCkahwNniZLYBg3D0fQt0KavM+yl\nkIUQ6c7FmPO0/aI58U4bS15eSa38L6gdSaQxTWwMvvNnY160AI3NiqtgIawDBuNo0Rr06bPa0mdq\nIUSmdct6k5Y73iYqPoopdWbSpPgbakcSaclqxXfJQsxzZ6GNjcEdmIu40JHY23UAU/o+s14KWQiR\nbsTYY2i18x2u3L9MyP+G8n75D9SOJNKKw4Hvyk8xz5iKNioSd7ZsxA0fRXzwh2CxqJ0uRUghCyHS\nBbvTTvP1zTkZfZyOFTrRv/ogtSOJtOB04rNhLeapE9Fdu4rb4oe1Xwjx3Xqi+GdVO12KkkIWQng9\nl9tF12+D2Xt5L02Lv8X4F6agSSdnzoqn9GDetHnSOPQXL6CYTNi69sDWqx9Kzpxqp0sVUshCCK+m\nKAohe/vx5aUd1C9an/kNP0GnTd0Z+EJFioLxm11YJoxBf/I4il5P/PvB2PoNxJ03n9rpUpUUshDC\nq036fRyrTi6jQs5KbGu1Dcc9eWacURn2/YBl/CgMBw+gaDTYW7TGOmAw7qLF1I6WJqSQhRBea+mx\nxUw/MJnC/kVY12QL/iZ/Ism4U6YyK/2B37BMGINx3w8AOF5/wzNvukxZlZOlLSlkIYRX+uz8Vobu\nG0hO30A2Nt1ObnNutSOJFKY7cRzLxDGYvv4KgIR6DTzzpoOqqpxMHVLIQgivs/dqGN2+64zF4MeG\nJlspmjVzvGSZWegunMM8eTw+27YAkPh8Tc+86Zq1VU6mLilkIYRXORp5mPe/aosGDSteXUvFwMpq\nRxIpRHs1AvO0SfisX+OZN12xMrahoSTUb5Ru5k2nJilkIYTXuBh7gdY7m2FLtLLklRW8WKCO2pFE\nCtDcvo151lR8V3yKJiEBZ8lSWAcPJ+H1N9LdvOnUJIUshPAKt2y3aLXjbaLiI5n00nSaFn9L7Uji\nGWli7mKeNxvfTxagsdlwFSr817xpnXx07Z+kkIUQqrvniKX1jne4fO8P+lcfRMcKndSOJJ5FXBzm\nTxbgO2822nuxuHLnwTZiDPZ274PRqHY6ryWFLIRQld1p5/2v2nIi+hjvlfuAkP8NVTuSeFp2O74r\nlmKeNQ1tVBTugADiRowh/oPOYDarnc7rSSELIVTjcrvo9l1n9l/fx+vF3mDSS9NkJGZ6lJiIz/o1\nmKdNQnf9Gm6/LFgHDCb+ox4oWfzVTpduSCELIVShKAqD9w1g58XPqJXvBRY0XCIjMdMbtxvTts2Y\nJ49Hf+kiio8Ptu69sfXog5Ijh9rp0h0pZCGEKqYemMiKE0spn6MiK19dh4/eR+1IIrkUBeOuL7FM\nHIv+1AnPvOmOnbD1HYg7T16106VbUshCiDS3/PhSpvw+gUL+RVjfZAv+poy1jV6GpSgY9oZhmTAa\nQ/hBFK0We6u2nnnThYuonS7dk0IWQqSpHRe2M2hvP3L65mRjk63ktuRRO5JIBv1vv2KZMBrj/n0A\nOJq+5Zk3Xaq0yskyDilkIUSa+fHaXj76thNmg4V1r2+hWLYSakcSj6E7fswzb/qbXQA4GjTCNiQU\nZ6UglZNlPFLIQog0cSzyCO992QYFheWN11A5VxW1I4lH0J0/h3nyOHy2bwUgoWZtrENG4KxRU+Vk\nGZcUshAi1V2KvUjrnc2wJsax+OVl1ClYT+1I4j9oI678NW/a7SaxchXPxg9168u86VQmhSyESFW3\nbbdpteNtIuNvM+HFKbxZ4h21I4mH0Ny65Zk3vXKZZ9506TJYB4eS8FoTKeI0IoUshEg19xPu0WZn\nM/64d4l+1QYSXLGL2pHEP2ju3vHMm16y0DNvunARrCFDcbzTQuZNpzEpZCFEqnC4HHT46l2ORR2h\nfbkODHpuuNqRxP+jibuP7+IH86bv38OVNx+2UeOxt20PBoPa8TIlKWQhRIr7cyTmvms/8GrRJkx6\nabqMxPQWdju+C+d65k1HR+POkYO4UeOJ7xAMvr5qp8vUpJCFEClKURSG/jiQHRe2UyNvLRY2Wope\nKz9qVJeYiM+61TBjMn7XruHO4o910DDiu3RD8cuidjqBFLIQIoVNPziZZceXUDZ7eVa9th5fvTzr\nUpXLhWnbZiyTx6P74xL4+mLr2Rdbj94oAdnVTif+HylkIcRjudwuHC4HCS4Hjn/9spPgSsDutHP4\ndjiTfhtHoSyF2dB0K1lN2dSOnnkpCsavvsAycQz606dQDAbigz/Ed8xIrHo/tdOJh5BCFsKL/VmE\nSaX3t98dOJx/FWOCy5F0ucNlx+FKwOG043D/eb0Hf/fge+1/FuzjjuGy43Q7k505h08ONjTdSh6L\nbDKgCkXB8MMez7zpQ+EoWi3xbdph6z8Id6HC+AZmgcj7aqcUDyGFLIQX+vXGL3T5piPXrdfS5PYM\nWgNGnQkfnQmjzoRJZ8Lf6I9J74NRa8RH74NRZ8Sk88H04Pe/XV9vwqQ1YdL78GrR1ymatVia5BZ/\np//1F8+86Z9+BMD+5jvYQobiKllK5WQiOaSQhfAyX1zcwUffBpPoTqR2vhcflOH/L8sHpfigJH10\nPg8K0vO1UWdM+h7T//vlOcaDYtX7YNI++F1nQqvRqn23xTPQHzuCecIYTN99A4Cj0StYB4fiqlhJ\n5WTiSUghC+FFlh5bzNB9A/HTuLNYAAAgAElEQVTVm1nz+hrqF2qkdiThxXTnzmKeNA6fz7cBkFD7\nRc+86eeeVzmZeBpSyEJ4AbfiZtwvo5hzaAY5fQNZ9/pm2XxB/CftlctYpk7EtHGdZ950lapYh35M\n4kt1ZcxlOiaFLITKElwJ9NnTnc1nN1Asa3HWN9lKkaxF1Y4lvJD21k3MM6bgs2o5msREnGXLeeZN\nN35NijgDkEIWQkX3E+7RcVd79l7dQ7Xc/2P1axvJ4ZtD7VjCy2juRGOeOwvfpYvQxMfjKlIU66Bh\nON5qJvOmMxApZCFUctN6gzY7m3Mi+hiNi7zGwkafYjaY1Y4lvIgm7j6+C+fhu2CuZ950vvzYxg7C\n3vpdmTedAUkhC6GCs3fO0HrnO1yNi+D98sFMeHGKjJcUf4mPx3fZEsxzpnvmTefMSVzIBOLfDwYf\nH7XTiVQiPwGESGO/3PiZ975sRYwjhqHPj6B31f6y8YLwSEjAZ+0qzNMno7t5A7d/VqxDQrF1/gj8\nZLpWRieFLEQa2nHhM7p91wmX4mJ2/QW0LvOu2pGEN3C5MG3ZiGXyBHRX/kAxm7H17o+tey+UbAFq\npxNpRApZiDSy5OhChv04CLPBwspX1lOvUAO1Iwm1KQrGL3ZgmTQW/ZnTKEYjts5dsfUegJIrl9rp\nRBqTQhYilbkVNyHfhjDlpykE+uZiXZPNVAoMUjuWUJOiYNjzPZYJYzAcOYSi0xH/7nueedMFCqqd\nTqhEClmIVORwOei9uxtbz22iRLaSrGuyhcL+RdSOJVRk+OUnzONHY/zlJwDsbzfzzJsuXlLlZEJt\nUshCpJJ7jlg67mrHvms/ULNATZa9vJbsPvIZ48xKf+QQlgljMO7+DgDHK69iHTQcV4WKKicT3kIK\nWYhUcCPuOm2+aM7J6OO8WrQJW9psJC4m+VsYioxDd+Y0lknjMO38DICEF+tgHRKKs/pzKicT3kYK\nWYgUdubOaVrvfIdrcVfpWKET41+Ygq/BlzhkD9rMRHv5DyxTJmDavMEzb7padaxDRnjmTQvxEFLI\nQqSgn6/v572v2hDriGF4jZH0rNJXPmOcyWhv3sA8fTI+a1Y+mDddHuvQESS83FjmTYtHkkIWIoV8\nfn4b3b7rjBs3cxssomXpNmpHEmlIEx2Nec4MfD9djMZux1msOLZBw3C8+Q5oZb9p8XhSyEKkgMVH\n5hO6fwhmg4VljVdTt2B9tSOJNKK5fw/fBXPxXTgPbdx9XPkLYBswGHurtqCXH7Ei+eTRIsQzcCtu\nRv0UyoIjc8hlzs26JluomLOS2rFEWrDZ8P30E8+86bt3cecMJG7IcOLbd5R50+KpSCEL8ZQcLge9\nvu/KtvNbKJmtFOuabKGQf2G1Y4nUlpCAz+oVmGdMQXfrJu6s2Ygb9jHxwV1k3rR4JlLIQjyFWEcM\nHb56l/3X9/Fcnhqsem09AT7Z1Y4lUpPLhWnTeixTJ6K7chnFbMHadwDx3XqhZM2mdjqRAUghC/GE\nrsddo83OZpy6c5LXijZlQaMl+Op91Y4lUovbjfGLz7FMHIv+3FnPvOku3bD16o8SGKh2OpGBJOvU\nP7vdTsOGDdm6dSsAK1eupHz58lit1qTrlC9fnvbt2yf9crlcqZNYCBWdij7Ja1sacurOSYIrfsjS\nV1ZKGWdUioLx+2/I1qgOWYPfQ3fxAvHtO3Dn18NYx0yUMhYpLlnPkBcsWEDWrFkB2L59O9HR0eT6\nx04kfn5+rFq1KuUTCuElfrr2I+991YZ7CbGE1hxNj6De8hnjDMrw834s40Zh+O0XFI0G+zstsIUM\nwVWshNrRRAb22EK+cOEC58+fp27dugA0bNgQPz8/duzYkdrZhPAan53fSvfvPkRBYX7DT2heqpXa\nkUQq0B8OxzJ+NMaw3QA4Gr+OdfBwXOXKqxtMZAqPfcl60qRJDB48OOnPfv9xFmFCQgL9+/endevW\nLFu2LOUSCqGyhUfm0vmbDhh1JtY12SJlnAHpTp/Cv8O7BLxcF2PYbhJeqsfdr77n3sp1UsYizTzy\nGfL27dsJCgqiYMHH788ZEhLCG2+8gUajoV27dlSvXp2KFR+9i0lAgBm9XvdkiZ9QYGCWVD1+ZpBZ\n19CtuBnwzQBm/DKDvH55+erdr6icp/JTHy+zrmNKS9F1vHABRo6ENWtAUaBmTRg3DmO9ehhT7la8\njjwWU0ZKr+MjCzksLIyIiAjCwsK4efMmRqORPHnyUKtWrX9dt02bv8YE1qhRg7Nnzz62kO/etT1l\n7OQJDMxCZKQM9H8WmXUNHS4HPb7rwmcXtlIqoDTrmmwhn67QU69FZl3HlJZS66i9cR3ztMn4rF2J\nxunEWb4i1qGhJDR8xTNvOgP/W8ljMWU87To+qsQfWcgzZ85M+nrOnDnkz5//oWV88eJF5s2bx9Sp\nU3G5XISHh9O4ceMnDiqEN4h1xPD+V2356fqPPJ+3JitfXSefMc4gNFFRmGdPx3fZJ2gcDpzFS2Ab\nPBxH07dk3rRQ3RN/DnnBggX89NNPREZG0rlzZ4KCgggJCSFPnjw0b94crVZL/fr1qVRJxgeK9Ofa\n/au0+aIZp++cokmxN5nf8BN89DIGMb3T3IvFd/4cfBfNR2uNw1WgINaBQ3C0aC3zpoXX0CiKoqh1\n46n9som8NPPsMtManow+QZudzbhhvU7nil0ZXXsCOm3KnOOQmdYxNT3xOlqt+C5djHnuDLQxMbgD\nc2HtNxB7uw5gMqVaTm8mj8WUkeYvWQuRWfx4bS/vf9WW+wn3+LjmWLoF9ZTPGKdnDgc+q5djmT4F\nbeRt3NmyETd8FPHBH4LFonY6IR5KCllketvObabn911RUFjQcAnNSrVUO5J4Wk6nZ970lAnorkZ4\n5k33G0j8Rz1l3rTwelLIItNSFIUFR+Yy8qdhZDH6s7zxGl4sUEftWOJpuN2YdmzHPGkc+vPnUEwm\nbF26Y+vVT0ZcinRDCllkSm7FzYj9Q1h8dAF5LHlZ9/oWyuesoHYs8aQUBeN3X2MZPwb9iWMoej3x\n7Tti6x+CO19+tdMJ8USkkEWmY3fa6fF9Fz6/sI3SAWVY12QLBbI8fviN8C6G/fs886YP/OaZN928\nFdaBQ3AXLaZ2NCGeihSyyFRi7Hd5f1dbfr6+n5r5arOi8Vqy+QSoHUs8AX34ASzjx2DcuwcAx2tN\nsQ4ahqtsOZWTCfFspJBFpnH1fgRtdjbjzN3TvFH8beY2WCSfMU5HdCdPwIyJBHz2GQAJdetjHRKK\ns0o1lZMJkTKkkEWmcCLqOG2+aMZN6w26VOrGqNrj0WpkMlN6oL14Acvk8Zi2bQZFIfG5GliHjiCx\n1gtqRxMiRUkhiwwt1hHDJ0cXMv/wHOIS7zOq1ng+CuqhdiyRDNprVzFPn4zP2lVoXC4SK1bGMHE8\nMdVf8MybFiKDkUIWGdIdezSLj8znk2OLuJ9wjwBTAIsbLeOtks3UjiYeQxMZiXn2NHyXL/XMmy5Z\nCuugYSQ0eZPA3Fkz9MYPInOTQhYZSqQtkoVH5vLp8U+wJsaR0zeQvjXH0KFCMH6Gh+/lLbyDJjYG\n3/mzMS9agMZmxVWwkGfedPNWMm9aZAryKBcZwi3rTeYensXKE58S74wntzkPg58bRvtyHTEbzGrH\nE49iteK7ZCHmubPQxsbgypUbW+go7O3ez7TzpkXmJIUs0rVr968y9/BMVp9cgcPlIL9fAXpU6cO7\nZd+TM6i9ncOB78pPMc+YijYqEndAAHGhoz3zps3ynyiR+Ughi3Tpyr3LzAqfzvrTq0l0J1LIvwi9\nq/ajVem2GHVGteOJR3E68dmwFvPUieiuXcVt8cPafxDxH/VA8c+qdjohVCOFLNKVi7EXmHVwGpvO\nrsfpdlIsa3H6VBtAs5ItMegMascTj+J2Y/psq2fe9MULKD4+2Lr1wtazL0qOHGqnE0J1UsgiXTh3\n9ywzDk5h67lNuBU3pQJK07faQN4s8Q56rTyMvZqiYPxmF5YJY9CfPO6ZN90hGFvfgbjz5lM7nRBe\nQ36SCa92KvokMw5O5rPz21BQKJu9PP2rh9Ck+Jsy2CMdMOz7Acv4URgOHvDMm27ZBuuAwbiLFFU7\nmhBeRwpZeKVjkUeYdmAyX17aAUClwCD6VQuhcdHXpIjTAf2B37BMGINx3w8AOJq86Zk3XbqMysmE\n8F5SyMKrhN86wPQDk/nm8i4AquWuTr9qITQs/Aoamc7k9XQnjmOZOAbT118BkFC/oWfedOUqKicT\nwvtJIQuv8OuNX5h+YBJ7Ir4H4Pm8NelffRB1CtSTIk4HdBfOYZ48Hp9tWwBIfL6mZ950zdoqJxMi\n/ZBCFqpRFIWfrv/ItAOT+PHaXgBezF+HftVDqJXvBSnidEB7NQLztEn4rF/jmTddKQjbkOEk1G8k\n86aFeEJSyCLNKYpCWMRuph+czK83fgagXsEG9Ks+iOfz1lA5nUgOze3bmGdNxXfFp2gSEnCWKo11\n0HASmrwhRSzEU5JCFmlGURS+u/w10w9O5uCtAwC8XLgx/aqHUDV3dZXTieTQxNzFPG82vp8sQGOz\n4SpU+K950zqd2vGESNekkEWqcytuvrr0BTMOTuFo5GEAXi/2Bv2qDaRiYGWV04lkiYvD/MkCfOfN\nRnsvFlfuPNg+Hov93ffAKJPRhEgJUsgi1bjcLnZe/IzpB6Zw6s4JNGh4q8Q79Kk2kHI5yqsdTySH\n3Y7viqWYZ01DGxXlmTf98VjiO3aSedNCpDApZJHinG4n289vYcaBKZyLOYtWo6VFqdb0qTaAkgGl\n1I4nkiMxEZ/1azBPm4Tu+jXcflmwDhxCfNfuKFn81U4nRIYkhSxSTKIrkS3nNjLj4BQuxV5Er9XT\ntkx7elXrR7GsxdWOJ5LD7ca0bTPmyePRX7romTfdvTe2nn1Qssu8aSFSkxSyeGYJrgTWn17D7PDp\nXLl/GYPWwHvlPqBX1b4U8i+sdjyRHIqCcdeXWCaORX/qBIrBQHzHTp5503nyqp1OiExBClk8NbvT\nzppTK5l7aCbX4q5i0pnoVLELPar0IZ9ffrXjieRQFAx7w7BMGI0h/CCKVou9VVvPvOnCRdROJ0Sm\nIoUsnpgt0caqk8uYe2gWt2w3MevNdK3cg+5BvchtyaN2PJFM+t9+xTJhNMb9+wBwNH3LM2+6VGmV\nkwmROUkhiyey88LnhOztS1R8JBaDH72q9KNrUA9y+uZUO5pIJt2xo555099+DYCjQSNsQ0JxVgpS\nOZkQmZsUskiWeGc8I/YPZcWJpfjqfelXPYQPK31Edh850Se90J0/h3nSOHw+2wpAQo1aWId+jLNG\nTZWTCSFAClkkw+k7p+jyTUdO3TlJuRwVWNxoGaWyy8ua6YU24grmqRPx2bAWjdtNYuUqWIeEkliv\ngYy5FMKLSCGL/6QoCp8c/ITeu3oT74zngwqdGVlrHD56H7WjiWTQ3LqFZeYUfFYuQ5OYiLN0Gc+8\n6debShEL4YWkkMVDxTpi6B/Wm88vbCObKRvzGy7h9WJN1Y4lkkFz9w7mubPwXbIQTXw8rsJFPPOm\nm7WUedNCeDEpZPEvB27+Rtdvg7ly/zIvFHqB2XUWUSBLQbVjicfQxN3Hd9F8fOfPQXv/Hq48ebGN\nGo+9bXuZNy1EOiCFLJK4FTdzD81kwq9jcCtu+lcfxMRXx3I3Ol7taOJR4uPxXb4U8+xpaKOjcWfP\nTtyo8cR3CAZfX7XTCSGSSQpZAHDLdovu333I3qt7yGPJy4KGS6id/0X0WnmIeK3ERHzWrsI8fTK6\nG9dxZ/HHOmgY8V26ofhlUTudEOIJyU9bwe4r39Lj+y5ExUfxcuHGzKq/gBy+8nEmr+VyYdq6Ccvk\n8egu/4Hi64utZ19s3XvJvGkh0jEp5EwswZXA+F9HM//wbIxaI+NemESnil3RyBm43klRMH65E8uk\nsehPn/LMmw7+EFufAbhzy4Q0IdI7KeRM6lLsRbp++wGHbodTLGtxPnl5ORUDK6sdSzyMomAI2+2Z\nN334EIpWS3ybdtj6D8JdSDbvECKjkELOhLae28SAsD7EJd6nVem2THhpKn4GP7VjiYfQ//KzZ970\nz/sBsL/5DraQobhKyr7SQmQ0UsiZiDXRytB9A1l3ejUWgx/zGiymRenWascSD6E/dgTzhDGYvvsG\nAEfDlz3zpivKqxhCZFRSyJnEsaijdPmmI+djzlE5sAqLGi2lWLYSascS/6A7ewbLpHGYdmwHIKHW\nC1iHjMD5fA2VkwkhUpsUcganKAqfHl/Mx/uHkeBOoGvlHgyvMRKjTgZFeBPtlctYpk7EtHGdZ950\nUBWsQz8msU49GXMpRCYhhZyB3bFH02dPD3Zd+oIcPjmY02AhDQu/onYs8f9ob93EPGMKPquWe+ZN\nlymLdXAoCa++LkUsRCYjhZxB/Xx9Px9924nr1mu8mL8O8xouJo8lr9qxxAOaO9GeedNLF3nmTRcp\nijVkKI63m8u8aSEyKSnkDMbldjH94GSmHZiEBg1Dnx9Bzyp90Wnlh7w30Ny/55k3vWCuZ9503nzY\nxkzE3qYdGAxqxxNCqEgKOQO5HneNj77rxM/X91PAryALG33Kc3mfVzuWAM+86flzPPOm79zBnSMH\ncaPHE9+hE/jIdpZCCCnkDGPXpS/pvfsj7jru0qTYm0yvO5tsPgFqxxIJCfisWQmzpuJ3/Tpu/6xY\nBw8n/sOPZN60EOJvpJDTObvTzuifQ1lybBE+Oh+m1JnJe+U6yvhLtblcmDZvwDJlIrorf4DZjK1X\nP8+86YDsaqcTQnghKeR07Pzdc3T+pgMnoo9ROqAMi19eTtkc5dSOlbkpCsadn2OZPA79mdMoRiO2\nTl0wjxmJVWdRO50QwotJIadDiqKw/vQahuwbgM1po325joypPQGzwax2tMxLUTDs+Q7LhLEYjhxC\n0emIb9veM2+6YCHMgVkg8r7aKYUQXkwKOZ25n3CPgT/0Zeu5Tfgbs7Lk5RW8UeJttWNlaoZffsI8\nfjTGX34CwP52M8+86eIlVU4mhEhPpJDTkUO3DtLl2w/4494lqud+joWNllLIX3b7UYv+yCEsE8Zg\n3P0dAI5XXsU6aDiuChVVTiaESI+kkNMBt+JmweG5jPt1JC63i95V+xPyv6EYdPK5VTXozpz2zJve\n+RkACS/WwTokFGf151ROJoRIz7TJuZLdbqdhw4Zs3boVgJUrV1K+fHmsVmvSdT7//HOaNWtGixYt\n2LRpU+qkzYQibZG0/aI5o34eTnafHGx64zOG1fhYylgF2j8ukaVHFwLq1MC08zMSq1UnZvPnxG7Z\nIWUshHhmyXqGvGDBArJmzQrA9u3biY6OJleuXEmX22w25s2bx+bNmzEYDDRv3pxGjRqRLVu21Emd\nSfwQsYfu33/IbdstGhRqxOz6Cwk0B6odK9PR3ryBefpkfFavQON04ixbHuvQESS83FjmTQshUsxj\nC/nChQucP3+eunXrAtCwYUP8/PzYsWNH0nWOHDlCxYoVyZLFM+igatWqhIeHU79+/dRJncEluhKZ\n9Ns45hyagV6rZ2StcXSt3B2tJlkvaIgUoomOxjxnBr6fLkZjt+MsVhzboGE43nwHtPJvIYRIWY8t\n5EmTJhEaGsr27Z79Wf38/P51naioKLJn/2vYQfbs2YmMjEzBmJnHlXuX6fLtBxy89TtF/Iuy+OVl\nBOWqqnasTEVzLxbfBXPxXTQfbdx9XPkLYBswGHurtqCX0y6EEKnjkT9dtm/fTlBQEAULFnyigyqK\nkqzrBQSY0etTd9ODwMD0M55w04lNdN7RmVhHLG0rtmXB6wvwN/mrHStdreEzsdlg7lyYNAnu3IFc\nuWDcWHQffkgWHx+edRUyzTqmMlnHZydrmDJSeh0fWchhYWFEREQQFhbGzZs3MRqN5MmTh1q1av3t\nerly5SIqKirpz7dv3yYoKOixN373ru0pYydPYGAWItPBMAZboo3Q/YNZdXI5Zr2Z2fUX0Kp0Wxz3\nNESibv70sobPJCEBn1XLMc+Ygu72LdxZs2Eb9jHxwV3Azw/uJ3p+PYNMsY5pQNbx2ckapoynXcdH\nlfgjC3nmzJlJX8+ZM4f8+fP/q4wBKleuzPDhw7l37x46nY7w8HCGDh36xEEzo1PRJ/nwmw6cuXua\nCjkrsbjRMkoEyECJNOF0euZNT52I7splFLMFa98BxHfrhZJVTkgUQqStJ35DbMGCBfz0009ERkbS\nuXNngoKCCAkJoX///gQHB6PRaOjevXvSCV7i3xRF4bebv7LxzFo2nVmP3WWnc8WuhNYcjY9etuJL\ndW43xi8+xzJxLPpzZz3zprt0w9arP0qgnMUuhFCHRknuG76pILVfNvG2l2Yi7l9h45l1bDyzjkux\nFwHIZ8nPxJem0bjoayqnezhvW8NnoigYd3+LefwYDMeOoOh02Nu2x9YvBHf+Aql60xlqHVUk6/js\nZA1TRpq/ZC2eXVxiHDsvfMbGM+v48dpeAHz1vjQr2ZJWZdryYv466LSpe2KbAMPP+7GMG4Xht19Q\nNBrs77TAFjIEV7ESakcTQghACjlVuBU3+6/tY8OZtey88Dk2p2eiWc18tWlVui1Ni79JFqP6Z09n\nBvrD4VjGj8YYthsAR+PXsQ4ejqtceXWDCSHEP0ghp6CLMefZcGYtm85s4GpcBACF/IvQqnQvWpRq\nTZGsRVVOmHnoTp/CMnEspi89A2wSXqqHdchwnNX+p3IyIYR4OCnkZxTriGH7+a1sOL2WA7d+A8DP\nkIW2ZdrTqkxbns9bUyZspSHtpYtYpkzAtGUjGkUhsfpzWIeOIPGFl9SOJoQQjySF/BScbic/ROxm\n/em17PrjCxwuBxo01ClQj1Zl2vJa0aaYDWa1Y2Yq2hvXMU+bjM/alZ550+UrYh0aSkLDV2TetBAi\nXZBCfgKnok+y4cxaNp/dwG3bLQBKZitFqzJtaV6qFfn88qucMPPRREVhnj0d32WfoHE4cBYvgW3w\ncBxN35J500KIdEUK+TGi46PZem4jG86s42jkYQCymbLRsUInWpVuS5Vc1dDIM7A0p7kXi+/8OZ55\n09Y4XAUKYh04BEeL1jJvWgiRLslProdIcCXw3eVvWH9mDd9d/hqn24lOo+Plwo1pVaYtLxd5FZPO\npHbMzMlqxXfpYsxzZ6CNicEdmIv7w0Zgb98RTPJvIoRIv6SQH1AUhaORh9lwZi1bz23ijv0OAOVz\nVKRVmTa8U7Ilucy5HnMUkWocDnxWL8cyfQrayNu4s2UjbvhIz7xpi0XtdEII8cwyfSHfst5k09kN\nbDyzltN3TgGQ0zeQLpW706p0WyrkrKhywkzO6cS0aT2WKRPQXY3wzJvuN5D4j3rKvGkhRIaSKQs5\n3hnPrktfsOHMWsIiduNW3Bi1RpoUe5PWZdpSr2BDDDqD2jEzN7cb047tmCeNQ3/+HIrJhK1Ld2y9\n+sm8aSFEhpRpCvn/b+jw2flt3EuIBaBqrmq0LNOWt0s0I8Anu8opBYqC8buvMU8Yi+H4URS9nvj2\nHbH1D8GdT85iF0JkXBm+kCPuX2HTmfVsPLOOi7EXAMhryUeH8sG0LN2GUtlLq5xQ/Mmwfx+W8aMx\n/P6rZ95081ZYBw7BXbSY2tGEECLVZchC/nNDh21fbmTPH3sA2dDBm+kPHfTMm/7B82/leK0p1kHD\ncJUtp3IyIYRIOxmmkBVFYf/1faw/veZvGzrUyFuL1mXelQ0dvJDu1EnPvOmvdgKQULc+1iGhOKtU\nUzmZEEKkvQxTyBvPrKPn7q6AZ0OHlqV68lGtzmRxyglA3kZ78YJn3vTWTZ5508/V8MybrvWC2tGE\nEEI1GaaQa+SrRe+q/alfqGHShg6BAbIRtzfRXruKefpkfNauQuNykVixMrYhw0lo8LLMmxZCZHoZ\nppAL+xdhWI2P1Y4hHkITGYl59jR8ly/1zJsuURLr4OEkNHlT5k0LIcQDGaaQhffRxMbgO3825kUL\n0NisuAoW8sybbt5K5k0LIcQ/yE9FkfKsVnyXLMQ8dxba2BhcuXJjCx2Fvd37Mm9aCCH+gxSySDkO\nBz6rlmGZMfWvedOho4kP/hDMsj+0EEI8ihSyeHZOJz4b12GeOhHd1QjcFj+s/QcR/1EPFP+saqcT\nQoh0QQpZPD23G9Pn2zzzpi+cR/HxwfZRT2w9+6LkzKl2OiGESFekkMWTUxSM3+7CMmEs+hPHPPOm\n3w/G1m8g7rz51E4nhBDpkhSyeCKGH/diGTcKw8HfPfOmW7T2zJsuUlTtaEIIka5JIYtk0R/8Hcv4\nMRj3hQEP5k0PHo6rTFl1gwkhRAYhhSwe7ehR/AcNwbTrSwAS6jXwzJsOqqpyMCGEyFikkMVD6S6e\nxzx5PGzbgklRSHy+pmfedM3aakcTQogMSQpZ/I322lXM0ybhs241GpcLqlQhNmQYCfUbybxpIYRI\nRVLIAgDN7dt/zZtOSMBZshTWwcPJ2uFdEqKtascTQogMTwo5k9PE3MV3/hzMi+ejsdlwFSqMdcBg\nHC1ag04nmz8IIUQakULOrOLiMC9ZiO+82Z5507nzYBsxxjNv2mhUO50QQmQ6UsiZjd2O78pPMc+c\nhjYqEndAAHEjxhD/QWeZNy2EECqSQs4sEhPx2bDWM2/6+jXcflmwDhjsmTedxV/tdEIIkelJIWd0\nbjem7Vs886YvXfTMm+7eG1uPPig5cqidTgghxANSyBmVomD8+issE8agP3XCM2+6YydsfQfizpNX\n7XRCCCH+QQo5o1EUDHvDsEwYjSH8IIpWi71VW6wDBuMuXETtdEIIIf6DFHIGov/tVywTRmPcvw8A\nR9O3sA4ahqtUaZWTCSGEeBwp5AxAd+wololjMH37NQCOBo2wDQnFWSlI5WRCCCGSSwo5HdOdP4d5\n0jh8PtsKQEKNWtiGjiCxRi2VkwkhhHhSUsjpkDbiCuapE/HZsBaN201i5SpYh4SSWK+BzJsWQoh0\nSgo5HdHcuoVl5hR8VhpwKugAAAwaSURBVC5Dk5iIs1RprINDSXi9qRSxEEKkc1LI6YDm7h3Mc2fh\nu2Qhmvh4XIWKYA0ZgqNZS8+8aSGEEOmeFLIX08Tdx3fRfHznz0F7///au/egqO47CuBnl4fswgpi\noT7Tp42O8VEfE4lFBRyCER9RAkox4wsdRVNRBxSN0SQqqEWrSdHaWqw2oxMnY2nGmcTUMpPUR5po\nrPEBJBJxMIgIEeEurFy+/WPj5qWyysL9AefzFyN35cwZ9XjZ3R/V0Lt1h7ZuA+oSZ/C8aSKidoaD\nrCK7HZbcv8C6/fcw37yJxuBg1KxdD/usuYDFYnQ6IiJqARxkldy5A7839sGavQleX15Do60zatMy\nYJ+/kOdNExG1cxxkFeg6Or31Jvw3bYDXlS8gFgu0RUugLfodJJjnTRMRdQQcZCOJwPfI2/DPehXe\nly5CfHxgn53sPG/6x92MTkdERK2Ig2wEEfjkH3OeN/3JGed509N+6zxv+rGfGJ2OiIgMwEFuZd4n\nTzjPmz7xHwBA3cRnoaWvgt7nVwYnIyIiI3GQW4n3/z6BdeMr6PSvowCA+rHRzvOmBwwyOBkREamA\ng9zCvAoL4J+1Hp3+eRgA4HjqN6hduQYNT44wOBkREamEg9xCzFe+gP+WTHR684DzvOnBv0Ztxku4\nMzqCx1wSEdEPcJA9zHy9DNbsTfDbv9d53nTffs7zpseN5xATEdF9cZA9xFR5E9Yd22DZ8yfnedM/\n/Rlq0zJQ/2wcz5smIqImcZCbyXS72nnedM5rzvOmu/eA9kom6qYnAT4+RscjIqI2wq1BrqurQ2xs\nLBYuXIiwsDCkpaVB13WEhIRg8+bN8PX1Rf/+/TFkyBDXY3Jzc+HVnu8M7XZY/vpn53nTlZVo7NoV\nNS9vgH3mXMDPz+h0RETUxrg1yDk5OQgMDAQAbN++HYmJiRg3bhyys7Nx6NAhJCYmIiAgAPv27WvR\nsEpwOOD397/BunUzvMq+RGPnQNSuWA37vAWQAJvR6YiIqI0yN3XB559/js8++wxjxowBAJw6dQpR\nUVEAgIiICJw4caJFAypD19Hp4BsIfmoYbOlLYa6+Be2Fpaj871loS9M4xkRE1CxN3iFnZWXhxRdf\nxOHDzvfR2u12+H79s3i7du2KGzduAAAcDgeWLVuG0tJSPP3005g1a1aTX7xLFyu8vVv229ohIc0c\nShHgrbeANWuACxecP4d48WKYMjJg7dYNVs/EVFqzOyQA7NFT2GPzsUPP8HSPDxzkw4cPY/Dgwejd\nu/c9Py8iro/T0tIwceJEmEwmJCUlYdiwYRgwYMADv3hVlfYIkd0XEmLDjRu3H+3BIvD593vw3/gq\nfM5+fd504gxoy9LR2Psx5zWP+nu3Ic3qkFzYo2ewx+Zjh57xqD0+aMQfOMj5+fm4evUq8vPzUVZW\nBl9fX1itVtTV1cHPzw/Xr19HaGgoAGD69Omux40YMQKFhYVNDrKqfE4eh3XDy/A9eRwAUDd5CrS0\nVdB/2cfgZERE1F49cJC3bdvm+njHjh3o2bMnzpw5g3feeQeTJk3Cu+++i/DwcFy+fBmvv/46tmzZ\nAl3Xcfr0acTExLR4eE/zPnsG/htfge+x9wAA9dExqE1fDX3AQIOTERFRe/fQ70NevHgx0tPTcfDg\nQfTo0QOTJ0+Gj48PunXrhri4OJjNZkRGRmLgwLYzYl4Fl5znTb/9DwCAI3w0alesRsPwJw1ORkRE\nHYVJvv1EcCtr6ecxmvoev/mLYud504cOOs+bHjoMtSvX4M6oMS2aqy3h802ewR49gz02Hzv0jFZ/\nDrm9Mpd9+c150w0NaOjXH7UZa+CIjuF500REZIgONcimmzdh3bHVed50XR0afv4LaOmrUD9pCmBu\n8i3ZRERELaZDDLKp+hYsOa/BsuuPMNfcht6zF7TlK1CXkAh4d4gKiIhIce17jTQNlh3bYH1tK8xV\nVWj8UQhqVq6GfcYsnjdNRERKaZ+D7HDAb18u8IctCCgrQ2NgEGpWvQT7nPlAQIDR6YiIiH6gfQ1y\nQwM6HToI/y2Z8Cq5Avj7ozZ1OewLX4AEBhmdjoiI6L7azSB7FRWi88xEeBcVQnx9oc1fCOvLL0Ez\nWYyORkRE1KR2M8je58/Bq/gy7DNmQluahsaevWANsXWI86aJiKjtazeDXD95KuonTAa8WvanRxER\nEbWE9vXmW44xERG1Ue1rkImIiNooDjIREZECOMhEREQK4CATEREpgINMRESkAA4yERGRAjjIRERE\nCuAgExERKYCDTEREpAAOMhERkQI4yERERAowiYgYHYKIiKij4x0yERGRAjjIRERECuAgExERKYCD\nTEREpAAOMhERkQI4yERERArwNjpAc23atAkff/wxGhoaMH/+fERHRwMA3n//fcydOxcFBQUAgEuX\nLiEjIwMAEBUVhZSUFMMyq8jdHrdu3YpTp05BRDB27FgkJycbGVsp3+/w2LFjOH/+PIKCggAAc+bM\nwZgxY5CXl4e9e/fCbDYjPj4ezz33nMHJ1eJuj0eOHMGePXtgNpsRFhaG1NRUg5Orxd0e71q6dCl8\nfX2RmZlpUGL1uNuhx/ZF2rATJ07I3LlzRUSksrJSRo8eLSIidXV1kpSUJCNHjnRdGxcXJ59++qno\nui6pqamiaZoRkZXkbo8FBQWSkJAgIiK6rktMTIyUl5cbklk19+owPT1djh079p3ramtrJTo6Wqqr\nq8Vut8v48eOlqqrKiMhKcrdHTdMkIiJCbt++LY2NjRIXFydFRUVGRFaSuz3e9cEHH8jUqVMlPT29\nNWMq7WE69NS+tOk75OHDh2PgwIEAgM6dO8Nut0PXdezcuROJiYnYvHkzAKCiogKapqF///4AgOzs\nbMMyq8jdHm02G+rr6+FwOKDrOsxmMywWi5HRlXG/Dr/v7NmzGDBgAGw2GwBgyJAhOH36NCIjI1s1\nr6rc7dFisSAvLw8BAQEAgKCgIHz11VetmlVl7vYIAA6HAzk5OViwYAGOHj3amjGV5m6HntyXNv0c\nspeXF6xWKwDg0KFDGDVqFEpKSnDp0iWMGzfOdV1paSkCAwOxYsUKTJs2Dbm5uQYlVpO7PXbv3h0x\nMTGIiIhAREQEpk2b5voHsaO7V4deXl7Yv38/nn/+eaSmpqKyshIVFRUIDg52PS44OBg3btwwKrZy\n3O0RgOvPXkFBAUpLSzFo0CDDcqvmYXrctWsXpk+fzr/L3+Nuhx7dl2bd0yvi6NGjEhcXJ9XV1ZKc\nnCxXrlwREZGIiAgRETlz5oyEh4dLZWWlaJomEyZMkMLCQiMjK6mpHktKSmTq1KmiaZpUV1fLM888\nIxUVFUZGVs63Ozx+/LhcuHBBRER27dol69atk7y8PFm/fr3r+uzsbDlw4IBRcZXVVI93FRcXS2xs\nrOvz9F1N9VhcXCzz5s0TEZGTJ0/yW9b30FSHntyXNn2HDDhfdLRz507s3r0bmqbh8uXLWL58OeLj\n41FeXo6kpCR07doVffr0QZcuXWCxWDB06FAUFRUZHV0p7vR47tw5DBo0CBaLBTabDY8//jgKCwuN\njq6Mb3dos9kQFhaGfv36AQAiIyNRWFiI0NBQVFRUuB5TXl6O0NBQoyIryZ0eAaCsrAwpKSnIzMx0\nfZ6+4U6P+fn5uHbtGuLj47Fu3Trk5+dj9+7dBidXhzsdenRfPPk/idZWXV0tsbGx971Lu3tnJyKS\nkJAgVVVVouu6JCQkyMWLF1srpvLc7fHcuXMSHx8vuq6Lw+GQ8ePHy9WrV1szqrLu1eGiRYukpKRE\nRET2798va9euFbvdLmPHjpVbt25JTU2N6wVe5ORujyIis2fPlg8//NCQnKp7mB7v4h3ydz1Mh57a\nlzb9oq4jR46gqqoKS5Yscf1aVlYWevTo8YNrV65cieTkZJhMJoSHh6Nv376tGVVp7vb4xBNPYOTI\nkUhMTAQAxMXFoVevXq2aVVX36nDKlClYsmQJLBYLrFYrNm7cCD8/Pyxbtgxz5syByWRCSkqK6wVe\n5H6PxcXF+Oijj7B9+3bXdTNnzkRUVJQRsZXjbo90fw/Toaf2hT9+kYiISAFt/jlkIiKi9oCDTERE\npAAOMhERkQI4yERERArgIBMRESmAg0xERKQADjIREZECOMhEREQK+D+CrVpIDevY3AAAAABJRU5E\nrkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
- },
- {
- "metadata": {
- "id": "KjY_KnlE5ClG",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "## Drive the loss to a minimum."
- ]
- },
- {
- "metadata": {
- "id": "JKiHjGN15HPX",
- "colab_type": "code",
- "outputId": "4bcb2a50-5858-46ea-e393-667d80049851",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 1049
- }
- },
- "cell_type": "code",
- "source": [
- "# YOUR CODE HERE\n",
- "linear_regression(learning_rate=0.0000556, n_epochs=200000, interval=5000)"
- ],
- "execution_count": 28,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Loss after epoch 0 is 48290.105\n",
- "Loss after epoch 5000 is 20.356878\n",
- "Loss after epoch 10000 is 13.997063\n",
- "Loss after epoch 15000 is 9.710622\n",
- "Loss after epoch 20000 is 6.821608\n",
- "Loss after epoch 25000 is 4.874446\n",
- "Loss after epoch 30000 is 3.5620654\n",
- "Loss after epoch 35000 is 2.6775396\n",
- "Loss after epoch 40000 is 2.081378\n",
- "Loss after epoch 45000 is 1.679563\n",
- "Loss after epoch 50000 is 1.4087588\n",
- "Loss after epoch 55000 is 1.226228\n",
- "Loss after epoch 60000 is 1.1032239\n",
- "Loss after epoch 65000 is 1.0203019\n",
- "Loss after epoch 70000 is 0.9644026\n",
- "Loss after epoch 75000 is 0.92674285\n",
- "Loss after epoch 80000 is 0.90138215\n",
- "Loss after epoch 85000 is 0.8842748\n",
- "Loss after epoch 90000 is 0.87272763\n",
- "Loss after epoch 95000 is 0.864965\n",
- "Loss after epoch 100000 is 0.85972536\n",
- "Loss after epoch 105000 is 0.85620254\n",
- "Loss after epoch 110000 is 0.85381925\n",
- "Loss after epoch 115000 is 0.85222006\n",
- "Loss after epoch 120000 is 0.8511251\n",
- "Loss after epoch 125000 is 0.85038906\n",
- "Loss after epoch 130000 is 0.8499146\n",
- "Loss after epoch 135000 is 0.8495802\n",
- "Loss after epoch 140000 is 0.8493226\n",
- "Loss after epoch 145000 is 0.84920985\n",
- "Loss after epoch 150000 is 0.84911305\n",
- "Loss after epoch 155000 is 0.8490328\n",
- "Loss after epoch 160000 is 0.8489686\n",
- "Loss after epoch 165000 is 0.8489226\n",
- "Loss after epoch 170000 is 0.8489226\n",
- "Loss after epoch 175000 is 0.8489226\n",
- "Loss after epoch 180000 is 0.8489226\n",
- "Loss after epoch 185000 is 0.8489226\n",
- "Loss after epoch 190000 is 0.8489226\n",
- "Loss after epoch 195000 is 0.8489226\n",
- "Now testing the model in the test set\n",
- "The final loss is: 0.95510364\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "display_data",
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
- }
- ]
-}
\ No newline at end of file
From 4a879d45ff59f6459e380c9141e897eda45d06d8 Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Fri, 28 Dec 2018 01:36:31 +0530
Subject: [PATCH 10/12] Delete Assignment_2.ipynb
---
Assignment_2.ipynb | 654 ---------------------------------------------
1 file changed, 654 deletions(-)
delete mode 100644 Assignment_2.ipynb
diff --git a/Assignment_2.ipynb b/Assignment_2.ipynb
deleted file mode 100644
index 530a016..0000000
--- a/Assignment_2.ipynb
+++ /dev/null
@@ -1,654 +0,0 @@
-{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "name": "Assignment_2.ipynb",
- "version": "0.3.2",
- "provenance": [],
- "include_colab_link": true
- },
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- }
- },
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "view-in-github",
- "colab_type": "text"
- },
- "source": [
- " "
- ]
- },
- {
- "metadata": {
- "id": "A5gF9gMFq3Ck",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "dummy_list=[1, 2, 3, 4, 5, 3]"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "QkJs_byK_qPg",
- "colab_type": "code",
- "outputId": "65790928-5ac4-4cac-9033-5cd5c6b6e3f4",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "print(dummy_list)"
- ],
- "execution_count": 2,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[1, 2, 3, 4, 5, 3]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "F2QMHeQAB4Ja",
- "colab_type": "code",
- "outputId": "ffd98b19-842c-4173-fd00-86956c639f63",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "dummy_list.reverse()\n",
- "print(dummy_list)\n",
- "#for o in reversed(dummy_list):\n",
- "# print(o)"
- ],
- "execution_count": 3,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[3, 5, 4, 3, 2, 1]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "7XeXBwK6CD1i",
- "colab_type": "code",
- "outputId": "b18002de-a2a2-4855-e2da-82dc314d6f59",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "dummy_list_2 = [2, 200, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n",
- "dummy_list.extend(dummy_list_2)\n",
- "print(dummy_list)"
- ],
- "execution_count": 4,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[3, 5, 4, 3, 2, 1, 2, 200, 16, 4, 1, 0, 9.45, 45.67, 90, 12.01, 12.02]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "ujmdan92Du6g",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "dummy_dict={}"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "TPaUVjDSEqyv",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "i=0\n",
- "while i!= len(dummy_list):\n",
- " if dummy_list[i] not in dummy_dict:\n",
- " dummy_dict[dummy_list[i]]=1\n",
- " else:\n",
- " for key,value in dummy_dict.items():\n",
- " if key == dummy_list[i]:\n",
- " dummy_dict[key] = value + 1\n",
- " break\n",
- " #print(\"Key: \" + str(key))\n",
- " #print (\"Value: \" + str(value))\n",
- " i = i + 1\n",
- " #print(i)"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "TY6jC_gyQbPP",
- "colab_type": "code",
- "outputId": "c6e40202-7c20-4caf-93dc-12e0c76ad1f2",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 886
- }
- },
- "cell_type": "code",
- "source": [
- "for key, value in dummy_dict.items():\n",
- " print(\"Key: \" + str(key))\n",
- " print (\"Value: \" + str(value))\n",
- " print('\\n')"
- ],
- "execution_count": 7,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Key: 3\n",
- "Value: 2\n",
- "\n",
- "\n",
- "Key: 5\n",
- "Value: 1\n",
- "\n",
- "\n",
- "Key: 4\n",
- "Value: 2\n",
- "\n",
- "\n",
- "Key: 2\n",
- "Value: 2\n",
- "\n",
- "\n",
- "Key: 1\n",
- "Value: 2\n",
- "\n",
- "\n",
- "Key: 200\n",
- "Value: 1\n",
- "\n",
- "\n",
- "Key: 16\n",
- "Value: 1\n",
- "\n",
- "\n",
- "Key: 0\n",
- "Value: 1\n",
- "\n",
- "\n",
- "Key: 9.45\n",
- "Value: 1\n",
- "\n",
- "\n",
- "Key: 45.67\n",
- "Value: 1\n",
- "\n",
- "\n",
- "Key: 90\n",
- "Value: 1\n",
- "\n",
- "\n",
- "Key: 12.01\n",
- "Value: 1\n",
- "\n",
- "\n",
- "Key: 12.02\n",
- "Value: 1\n",
- "\n",
- "\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "G0Ft30gsucvR",
- "colab_type": "code",
- "outputId": "8f9a521d-8ceb-475c-fd71-cd4a4b193d64",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 84
- }
- },
- "cell_type": "code",
- "source": [
- "'''for key in sorted(dummy_dict.keys()):\n",
- " print (\"Key :\" + str(key) + '\\t\\t\\t' + \"Value :\" + str(dummy_dict[key]))\n",
- "\n",
- "print(\"\\n\\n\")\n",
- "for key in sorted(dummy_dict.keys(), reverse=True):\n",
- " print (\"Key :\" + str(key) + '\\t\\t\\t' + \"Value :\" + str(dummy_dict[key]))'''\n",
- "\n",
- "dummy_list.sort()\n",
- "print(dummy_list)\n",
- "print('\\n')\n",
- "dummy_list.sort(reverse=True)\n",
- "print(dummy_list)\n",
- "#print(sorted(dummy_list, reversed=True))"
- ],
- "execution_count": 8,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 9.45, 12.01, 12.02, 16, 45.67, 90, 200]\n",
- "\n",
- "\n",
- "[200, 90, 45.67, 16, 12.02, 12.01, 9.45, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "DtOAyHUtvm8Z",
- "colab_type": "code",
- "outputId": "23b3a649-a150-40d2-909a-09506e32c10f",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "x=200\n",
- "dummy_list.remove(x)\n",
- "print(dummy_list)"
- ],
- "execution_count": 9,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[90, 45.67, 16, 12.02, 12.01, 9.45, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "Adi6fYUBwnFG",
- "colab_type": "code",
- "outputId": "6fa54ac4-c156-4ce3-a0cf-03ffbb5b6d15",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "del dummy_list[5]\n",
- "print (dummy_list)"
- ],
- "execution_count": 10,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[90, 45.67, 16, 12.02, 12.01, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "OTEasC7uxmOX",
- "colab_type": "code",
- "outputId": "fa25c22f-b308-4b2a-ac63-90d0dbf4faaa",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "dummy_list.clear()\n",
- "print(dummy_list)"
- ],
- "execution_count": 11,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "5Tw-3o-kwdZS",
- "colab_type": "text"
- },
- "cell_type": "markdown",
- "source": [
- "# Now the Numpy part"
- ]
- },
- {
- "metadata": {
- "id": "XI0_hACCQlA_",
- "colab_type": "code",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "import numpy as np"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "id": "VV7zXbLnYp2t",
- "colab_type": "code",
- "outputId": "7a0112f4-dc8d-4621-9c9f-49f64395f5d2",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 201
- }
- },
- "cell_type": "code",
- "source": [
- "b = np.linspace(1.3,2.5, num=64)\n",
- "print (b)"
- ],
- "execution_count": 13,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[1.3 1.31904762 1.33809524 1.35714286 1.37619048 1.3952381\n",
- " 1.41428571 1.43333333 1.45238095 1.47142857 1.49047619 1.50952381\n",
- " 1.52857143 1.54761905 1.56666667 1.58571429 1.6047619 1.62380952\n",
- " 1.64285714 1.66190476 1.68095238 1.7 1.71904762 1.73809524\n",
- " 1.75714286 1.77619048 1.7952381 1.81428571 1.83333333 1.85238095\n",
- " 1.87142857 1.89047619 1.90952381 1.92857143 1.94761905 1.96666667\n",
- " 1.98571429 2.0047619 2.02380952 2.04285714 2.06190476 2.08095238\n",
- " 2.1 2.11904762 2.13809524 2.15714286 2.17619048 2.1952381\n",
- " 2.21428571 2.23333333 2.25238095 2.27142857 2.29047619 2.30952381\n",
- " 2.32857143 2.34761905 2.36666667 2.38571429 2.4047619 2.42380952\n",
- " 2.44285714 2.46190476 2.48095238 2.5 ]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "JYYLSWaQRKJC",
- "colab_type": "code",
- "outputId": "b3b3c270-f675-4506-e784-beee8ca1e2f7",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 50
- }
- },
- "cell_type": "code",
- "source": [
- "n = int(input())\n",
- "x = np.array([1, 2, 3])\n",
- "y = np.tile(x,(3*n))\n",
- "print (y)"
- ],
- "execution_count": 14,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "3\n",
- "[1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "FGwwjf_pTMRs",
- "colab_type": "code",
- "outputId": "6cb8a5f9-16c3-4d19-c99f-709cdb74f778",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "b = np.arange(20)\n",
- "\n",
- "#print(b)\n",
- "\n",
- "mask = b%2!=0 #perform computations on the list \n",
- "\n",
- "#print(mask)\n",
- "\n",
- "print(b[mask]) #applying the mask on the numpy array"
- ],
- "execution_count": 15,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[ 1 3 5 7 9 11 13 15 17 19]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "ZRDXe1q4Yw6C",
- "colab_type": "code",
- "outputId": "1a88b34c-7a90-4b40-c9d7-7e16fbe9b027",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "#expected output array([2, 4])\n",
- "a = np.array([1,2,3,2,3,4,3,4,5,6])\n",
- "b = np.array([7,2,10,2,7,4,9,4,9,8])\n",
- "np.intersect1d(a,b)"
- ],
- "execution_count": 16,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "array([2, 4])"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 16
- }
- ]
- },
- {
- "metadata": {
- "id": "vrIl330LZDO3",
- "colab_type": "code",
- "outputId": "25c61d75-1de8-4e4e-e596-40453739cba6",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 100
- }
- },
- "cell_type": "code",
- "source": [
- "a = np.arange(10)\n",
- "print (a)\n",
- "print('\\n')\n",
- "a.shape = a.size//-1, 5\n",
- "print(a)"
- ],
- "execution_count": 17,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[0 1 2 3 4 5 6 7 8 9]\n",
- "\n",
- "\n",
- "[[0 1 2 3 4]\n",
- " [5 6 7 8 9]]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "atGd8_9_Zjc-",
- "colab_type": "code",
- "outputId": "67882dcf-e6ff-4a67-b531-0195b7d8177d",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 84
- }
- },
- "cell_type": "code",
- "source": [
- "a = [1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
- "np.array(a).tolist()\n",
- "print(a)\n",
- "print('\\n')\n",
- "np.asarray(a)"
- ],
- "execution_count": 18,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
- "\n",
- "\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "array([1, 2, 3, 4, 5, 6, 7, 8, 9])"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 18
- }
- ]
- },
- {
- "metadata": {
- "id": "L8JI_PAmbcbp",
- "colab_type": "code",
- "outputId": "dac71dd3-e9f4-4a36-be66-04a92d7ecb3f",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 100
- }
- },
- "cell_type": "code",
- "source": [
- "d = np.ones((5,5))\n",
- "d[1:-1,1:-1] = 0\n",
- "print(d)"
- ],
- "execution_count": 19,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[[1. 1. 1. 1. 1.]\n",
- " [1. 0. 0. 0. 1.]\n",
- " [1. 0. 0. 0. 1.]\n",
- " [1. 0. 0. 0. 1.]\n",
- " [1. 1. 1. 1. 1.]]\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "metadata": {
- "id": "SY2a-sGxU4Q8",
- "colab_type": "code",
- "outputId": "96dfeeb7-b231-47f2-be76-0bcd1696699a",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 150
- }
- },
- "cell_type": "code",
- "source": [
- "x = np.zeros((8,8),dtype=int)\n",
- "x[1::2,::2] = 1\n",
- "x[::2,1::2] = 1\n",
- "print(x)"
- ],
- "execution_count": 20,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "[[0 1 0 1 0 1 0 1]\n",
- " [1 0 1 0 1 0 1 0]\n",
- " [0 1 0 1 0 1 0 1]\n",
- " [1 0 1 0 1 0 1 0]\n",
- " [0 1 0 1 0 1 0 1]\n",
- " [1 0 1 0 1 0 1 0]\n",
- " [0 1 0 1 0 1 0 1]\n",
- " [1 0 1 0 1 0 1 0]]\n"
- ],
- "name": "stdout"
- }
- ]
- }
- ]
-}
\ No newline at end of file
From 5b2128968084a7bc7d860c28e56bb71a2d5f9473 Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Mon, 21 Jan 2019 16:39:00 +0530
Subject: [PATCH 11/12] Assignment 5 Part 1 (Pandas) Solved.
---
Intro_to_pandas.ipynb | 1703 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 1703 insertions(+)
create mode 100644 Intro_to_pandas.ipynb
diff --git a/Intro_to_pandas.ipynb b/Intro_to_pandas.ipynb
new file mode 100644
index 0000000..e968a90
--- /dev/null
+++ b/Intro_to_pandas.ipynb
@@ -0,0 +1,1703 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "Copy of intro_to_pandas.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "YHIWvc9Ms-Ll",
+ "TJffr5_Jwqvd"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ " "
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "JndnmDMp66FL"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "hMqWDc_m6rUC",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "rHLcriKWLRe4"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Intro to pandas"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "QvJBqX8_Bctk"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objectives:**\n",
+ " * Gain an introduction to the `DataFrame` and `Series` data structures of the *pandas* library\n",
+ " * Access and manipulate data within a `DataFrame` and `Series`\n",
+ " * Import CSV data into a *pandas* `DataFrame`\n",
+ " * Reindex a `DataFrame` to shuffle data"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "TIFJ83ZTBctl"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "[*pandas*](http://pandas.pydata.org/) is a column-oriented data analysis API. It's a great tool for handling and analyzing input data, and many ML frameworks support *pandas* data structures as inputs.\n",
+ "Although a comprehensive introduction to the *pandas* API would span many pages, the core concepts are fairly straightforward, and we'll present them below. For a more complete reference, the [*pandas* docs site](http://pandas.pydata.org/pandas-docs/stable/index.html) contains extensive documentation and many tutorials."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "s_JOISVgmn9v"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Basic Concepts\n",
+ "\n",
+ "The following line imports the *pandas* API and prints the API version:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "aSRYu62xUi3g",
+ "outputId": "4c052cad-dfa4-4fae-c502-c2e62f3fb85e",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 33
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import pandas as pd\n",
+ "pd.__version__"
+ ],
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "u'0.22.0'"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 2
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "daQreKXIUslr"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The primary data structures in *pandas* are implemented as two classes:\n",
+ "\n",
+ " * **`DataFrame`**, which you can imagine as a relational data table, with rows and named columns.\n",
+ " * **`Series`**, which is a single column. A `DataFrame` contains one or more `Series` and a name for each `Series`.\n",
+ "\n",
+ "The data frame is a commonly used abstraction for data manipulation. Similar implementations exist in [Spark](https://spark.apache.org/) and [R](https://www.r-project.org/about.html)."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "fjnAk1xcU0yc"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "One way to create a `Series` is to construct a `Series` object. For example:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "DFZ42Uq7UFDj",
+ "outputId": "7f768471-8f34-4680-9fbc-0d4900311739",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 84
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "pd.Series(['San Francisco', 'San Jose', 'Sacramento'])"
+ ],
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0 San Francisco\n",
+ "1 San Jose\n",
+ "2 Sacramento\n",
+ "dtype: object"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 3
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "U5ouUp1cU6pC"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "`DataFrame` objects can be created by passing a `dict` mapping `string` column names to their respective `Series`. If the `Series` don't match in length, missing values are filled with special [NA/NaN](http://pandas.pydata.org/pandas-docs/stable/missing_data.html) values. Example:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "avgr6GfiUh8t",
+ "outputId": "24e4cefe-1dcd-402a-f3e9-f99414807ceb",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 137
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])\n",
+ "population = pd.Series([852469, 1015785, 485199])\n",
+ "\n",
+ "pd.DataFrame({ 'City name': city_names, 'Population': population })"
+ ],
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " City name \n",
+ " Population \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " San Francisco \n",
+ " 852469 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " San Jose \n",
+ " 1015785 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Sacramento \n",
+ " 485199 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population\n",
+ "0 San Francisco 852469\n",
+ "1 San Jose 1015785\n",
+ "2 Sacramento 485199"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 4
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "oa5wfZT7VHJl"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "But most of the time, you load an entire file into a `DataFrame`. The following example loads a file with California housing data. Run the following cell to load the data and create feature definitions:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "av6RYOraVG1V",
+ "outputId": "2168747e-41c4-4e0a-9ac5-bd2c212906e0",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 286
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
+ "california_housing_dataframe.describe()"
+ ],
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " longitude \n",
+ " latitude \n",
+ " housing_median_age \n",
+ " total_rooms \n",
+ " total_bedrooms \n",
+ " population \n",
+ " households \n",
+ " median_income \n",
+ " median_house_value \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " 17000.000000 \n",
+ " 17000.000000 \n",
+ " 17000.000000 \n",
+ " 17000.000000 \n",
+ " 17000.000000 \n",
+ " 17000.000000 \n",
+ " 17000.000000 \n",
+ " 17000.000000 \n",
+ " 17000.000000 \n",
+ " \n",
+ " \n",
+ " mean \n",
+ " -119.562108 \n",
+ " 35.625225 \n",
+ " 28.589353 \n",
+ " 2643.664412 \n",
+ " 539.410824 \n",
+ " 1429.573941 \n",
+ " 501.221941 \n",
+ " 3.883578 \n",
+ " 207300.912353 \n",
+ " \n",
+ " \n",
+ " std \n",
+ " 2.005166 \n",
+ " 2.137340 \n",
+ " 12.586937 \n",
+ " 2179.947071 \n",
+ " 421.499452 \n",
+ " 1147.852959 \n",
+ " 384.520841 \n",
+ " 1.908157 \n",
+ " 115983.764387 \n",
+ " \n",
+ " \n",
+ " min \n",
+ " -124.350000 \n",
+ " 32.540000 \n",
+ " 1.000000 \n",
+ " 2.000000 \n",
+ " 1.000000 \n",
+ " 3.000000 \n",
+ " 1.000000 \n",
+ " 0.499900 \n",
+ " 14999.000000 \n",
+ " \n",
+ " \n",
+ " 25% \n",
+ " -121.790000 \n",
+ " 33.930000 \n",
+ " 18.000000 \n",
+ " 1462.000000 \n",
+ " 297.000000 \n",
+ " 790.000000 \n",
+ " 282.000000 \n",
+ " 2.566375 \n",
+ " 119400.000000 \n",
+ " \n",
+ " \n",
+ " 50% \n",
+ " -118.490000 \n",
+ " 34.250000 \n",
+ " 29.000000 \n",
+ " 2127.000000 \n",
+ " 434.000000 \n",
+ " 1167.000000 \n",
+ " 409.000000 \n",
+ " 3.544600 \n",
+ " 180400.000000 \n",
+ " \n",
+ " \n",
+ " 75% \n",
+ " -118.000000 \n",
+ " 37.720000 \n",
+ " 37.000000 \n",
+ " 3151.250000 \n",
+ " 648.250000 \n",
+ " 1721.000000 \n",
+ " 605.250000 \n",
+ " 4.767000 \n",
+ " 265000.000000 \n",
+ " \n",
+ " \n",
+ " max \n",
+ " -114.310000 \n",
+ " 41.950000 \n",
+ " 52.000000 \n",
+ " 37937.000000 \n",
+ " 6445.000000 \n",
+ " 35682.000000 \n",
+ " 6082.000000 \n",
+ " 15.000100 \n",
+ " 500001.000000 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " longitude latitude housing_median_age total_rooms \\\n",
+ "count 17000.000000 17000.000000 17000.000000 17000.000000 \n",
+ "mean -119.562108 35.625225 28.589353 2643.664412 \n",
+ "std 2.005166 2.137340 12.586937 2179.947071 \n",
+ "min -124.350000 32.540000 1.000000 2.000000 \n",
+ "25% -121.790000 33.930000 18.000000 1462.000000 \n",
+ "50% -118.490000 34.250000 29.000000 2127.000000 \n",
+ "75% -118.000000 37.720000 37.000000 3151.250000 \n",
+ "max -114.310000 41.950000 52.000000 37937.000000 \n",
+ "\n",
+ " total_bedrooms population households median_income \\\n",
+ "count 17000.000000 17000.000000 17000.000000 17000.000000 \n",
+ "mean 539.410824 1429.573941 501.221941 3.883578 \n",
+ "std 421.499452 1147.852959 384.520841 1.908157 \n",
+ "min 1.000000 3.000000 1.000000 0.499900 \n",
+ "25% 297.000000 790.000000 282.000000 2.566375 \n",
+ "50% 434.000000 1167.000000 409.000000 3.544600 \n",
+ "75% 648.250000 1721.000000 605.250000 4.767000 \n",
+ "max 6445.000000 35682.000000 6082.000000 15.000100 \n",
+ "\n",
+ " median_house_value \n",
+ "count 17000.000000 \n",
+ "mean 207300.912353 \n",
+ "std 115983.764387 \n",
+ "min 14999.000000 \n",
+ "25% 119400.000000 \n",
+ "50% 180400.000000 \n",
+ "75% 265000.000000 \n",
+ "max 500001.000000 "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "WrkBjfz5kEQu"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The example above used `DataFrame.describe` to show interesting statistics about a `DataFrame`. Another useful function is `DataFrame.head`, which displays the first few records of a `DataFrame`:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "s3ND3bgOkB5k",
+ "outputId": "f81980c5-2ce6-4494-b958-1647dc15d8e0",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 196
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_dataframe.head()"
+ ],
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " longitude \n",
+ " latitude \n",
+ " housing_median_age \n",
+ " total_rooms \n",
+ " total_bedrooms \n",
+ " population \n",
+ " households \n",
+ " median_income \n",
+ " median_house_value \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " -114.31 \n",
+ " 34.19 \n",
+ " 15.0 \n",
+ " 5612.0 \n",
+ " 1283.0 \n",
+ " 1015.0 \n",
+ " 472.0 \n",
+ " 1.4936 \n",
+ " 66900.0 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " -114.47 \n",
+ " 34.40 \n",
+ " 19.0 \n",
+ " 7650.0 \n",
+ " 1901.0 \n",
+ " 1129.0 \n",
+ " 463.0 \n",
+ " 1.8200 \n",
+ " 80100.0 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " -114.56 \n",
+ " 33.69 \n",
+ " 17.0 \n",
+ " 720.0 \n",
+ " 174.0 \n",
+ " 333.0 \n",
+ " 117.0 \n",
+ " 1.6509 \n",
+ " 85700.0 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " -114.57 \n",
+ " 33.64 \n",
+ " 14.0 \n",
+ " 1501.0 \n",
+ " 337.0 \n",
+ " 515.0 \n",
+ " 226.0 \n",
+ " 3.1917 \n",
+ " 73400.0 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " -114.57 \n",
+ " 33.57 \n",
+ " 20.0 \n",
+ " 1454.0 \n",
+ " 326.0 \n",
+ " 624.0 \n",
+ " 262.0 \n",
+ " 1.9250 \n",
+ " 65500.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " longitude latitude housing_median_age total_rooms total_bedrooms \\\n",
+ "0 -114.31 34.19 15.0 5612.0 1283.0 \n",
+ "1 -114.47 34.40 19.0 7650.0 1901.0 \n",
+ "2 -114.56 33.69 17.0 720.0 174.0 \n",
+ "3 -114.57 33.64 14.0 1501.0 337.0 \n",
+ "4 -114.57 33.57 20.0 1454.0 326.0 \n",
+ "\n",
+ " population households median_income median_house_value \n",
+ "0 1015.0 472.0 1.4936 66900.0 \n",
+ "1 1129.0 463.0 1.8200 80100.0 \n",
+ "2 333.0 117.0 1.6509 85700.0 \n",
+ "3 515.0 226.0 3.1917 73400.0 \n",
+ "4 624.0 262.0 1.9250 65500.0 "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 6
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "w9-Es5Y6laGd"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Another powerful feature of *pandas* is graphing. For example, `DataFrame.hist` lets you quickly study the distribution of values in a column:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "nqndFVXVlbPN",
+ "outputId": "425c7814-fb16-441b-b529-912371ca3f57",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 395
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_dataframe.hist('housing_median_age')"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[]],\n",
+ " dtype=object)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 7
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAFZCAYAAABXM2zhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3X1UlHX+//HXMDAH0UEEGTfLarf0\naEmaa5l4U0Iokp7IVRPWdU3q6Iqtlql499WTlajRmmZZmunRU7GNtofcAjJxyyRanT0uuu0p2VOr\neTejKCqgSPP7o9Os/FRguP1Az8dfcTEz1+d6H+3pdQ1zYfF6vV4BAAAjBTT3AgAAwPURagAADEao\nAQAwGKEGAMBghBoAAIMRagAADEaogVo6cuSI7rjjjkbdxz//+U+lpKQ06j4a0h133KEjR47o448/\n1ty5c5t7OUCrZOFz1EDtHDlyREOHDtW//vWv5l6KMe644w7l5ubqpptuau6lAK0WZ9SAn5xOp0aO\nHKn7779f27dv1w8//KA//elPio+PV3x8vNLS0lRaWipJiomJ0d69e33P/enry5cva/78+Ro2bJji\n4uI0bdo0nT9/XgUFBYqLi5MkrV69Ws8++6xSU1MVGxur0aNH6+TJk5KkgwcPaujQoRo6dKheeeUV\njRw5UgUFBdWue/Xq1Vq0aJEmT56sgQMHatasWcrLy9OoUaM0cOBA5eXlSZIuXbqk5557TsOGDVNM\nTIzWrl3re42//e1viouL0/Dhw7V+/Xrf9m3btmnixImSJI/Ho5SUFMXHxysmJkZvvfVWleN/9913\nNXr0aA0cOFDp6ek1zrusrEwzZszwrWfZsmW+71U3hx07dmjkyJGKjY3VpEmTdPr06Rr3BZiIUAN+\n+OGHH1RRUaEPPvhAc+fO1cqVK/XRRx/p008/1bZt2/TXv/5VJSUl2rhxY7Wvs3v3bh05ckTZ2dnK\nzc3V7bffrn/84x9XPS47O1vz5s3Tjh07FBERoa1bt0qSFi5cqIkTJyo3N1ft2rXTt99+W6v179q1\nSy+88II++OADZWdn+9Y9ZcoUrVu3TpK0bt06HTp0SB988IG2b9+unJwc5eXlqbKyUvPnz9eiRYv0\n0UcfKSAgQJWVlVft47XXXtNNN92k7Oxsbdq0SRkZGTp27Jjv+3//+9+VmZmprVu3asuWLTp+/Hi1\n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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "XtYZ7114n3b-"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Accessing Data\n",
+ "\n",
+ "You can access `DataFrame` data using familiar Python dict/list operations:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "_TFm7-looBFF",
+ "outputId": "d7ab8f7b-e1e3-480c-a6f5-be3cf05dfc37",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 100
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "cities = pd.DataFrame({ 'City name': city_names, 'Population': population })\n",
+ "print(type(cities['City name']))\n",
+ "cities['City name']"
+ ],
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0 San Francisco\n",
+ "1 San Jose\n",
+ "2 Sacramento\n",
+ "Name: City name, dtype: object"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 8
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "V5L6xacLoxyv",
+ "outputId": "1319d6e2-f41e-4a35-a0ad-7ead83684577",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 50
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "print(type(cities['City name'][1]))\n",
+ "cities['City name'][1]"
+ ],
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'San Jose'"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 9
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "gcYX1tBPugZl",
+ "outputId": "927153f2-e74a-4256-ad8d-b6211ad065b9",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 124
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "print(type(cities[0:2]))\n",
+ "cities[0:2]"
+ ],
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " City name \n",
+ " Population \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " San Francisco \n",
+ " 852469 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " San Jose \n",
+ " 1015785 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population\n",
+ "0 San Francisco 852469\n",
+ "1 San Jose 1015785"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 10
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "65g1ZdGVjXsQ"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "In addition, *pandas* provides an extremely rich API for advanced [indexing and selection](http://pandas.pydata.org/pandas-docs/stable/indexing.html) that is too extensive to be covered here."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "RM1iaD-ka3Y1"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Manipulating Data\n",
+ "\n",
+ "You may apply Python's basic arithmetic operations to `Series`. For example:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "XWmyCFJ5bOv-",
+ "outputId": "91280582-c473-48cd-c7f5-36a8a73df7e9",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 84
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "population / 1000."
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0 852.469\n",
+ "1 1015.785\n",
+ "2 485.199\n",
+ "dtype: float64"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 11
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "TQzIVnbnmWGM"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "[NumPy](http://www.numpy.org/) is a popular toolkit for scientific computing. *pandas* `Series` can be used as arguments to most NumPy functions:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "ko6pLK6JmkYP",
+ "outputId": "92b5b7fd-95be-4fc5-8033-5b8da8b2a95b",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 84
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "np.log(population)"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0 13.655892\n",
+ "1 13.831172\n",
+ "2 13.092314\n",
+ "dtype: float64"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 12
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "xmxFuQmurr6d"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "For more complex single-column transformations, you can use `Series.apply`. Like the Python [map function](https://docs.python.org/2/library/functions.html#map), \n",
+ "`Series.apply` accepts as an argument a [lambda function](https://docs.python.org/2/tutorial/controlflow.html#lambda-expressions), which is applied to each value.\n",
+ "\n",
+ "The example below creates a new `Series` that indicates whether `population` is over one million:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "Fc1DvPAbstjI",
+ "outputId": "e447f694-479c-4964-fa8e-4e5bfebad9cc",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 84
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "population.apply(lambda val: val > 1000000)"
+ ],
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0 False\n",
+ "1 True\n",
+ "2 False\n",
+ "dtype: bool"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 13
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "ZeYYLoV9b9fB"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "\n",
+ "Modifying `DataFrames` is also straightforward. For example, the following code adds two `Series` to an existing `DataFrame`:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "0gCEX99Hb8LR",
+ "outputId": "7d96cf32-a00a-4c43-81d1-88953ab65041",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 137
+ }
+ },
+ "cell_type": "code",
+ "source": [
+ "cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92])\n",
+ "cities['Population density'] = cities['Population'] / cities['Area square miles']\n",
+ "cities"
+ ],
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " City name \n",
+ " Population \n",
+ " Area square miles \n",
+ " Population density \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " San Francisco \n",
+ " 852469 \n",
+ " 46.87 \n",
+ " 18187.945381 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " San Jose \n",
+ " 1015785 \n",
+ " 176.53 \n",
+ " 5754.177760 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Sacramento \n",
+ " 485199 \n",
+ " 97.92 \n",
+ " 4955.055147 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density\n",
+ "0 San Francisco 852469 46.87 18187.945381\n",
+ "1 San Jose 1015785 176.53 5754.177760\n",
+ "2 Sacramento 485199 97.92 4955.055147"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 14
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "6qh63m-ayb-c"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Exercise #1\n",
+ "\n",
+ "Modify the `cities` table by adding a new boolean column that is True if and only if *both* of the following are True:\n",
+ "\n",
+ " * The city is named after a saint.\n",
+ " * The city has an area greater than 50 square miles.\n",
+ "\n",
+ "**Note:** Boolean `Series` are combined using the bitwise, rather than the traditional boolean, operators. For example, when performing *logical and*, use `&` instead of `and`.\n",
+ "\n",
+ "**Hint:** \"San\" in Spanish means \"saint.\""
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "zCOn8ftSyddH",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 137
+ },
+ "outputId": "508be6c9-95f2-432c-be0a-e2f2d24e8886"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Your code here\n",
+ "cities['Wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))\n",
+ "cities"
+ ],
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " City name \n",
+ " Population \n",
+ " Area square miles \n",
+ " Population density \n",
+ " Wide and has saint name \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " San Francisco \n",
+ " 852469 \n",
+ " 46.87 \n",
+ " 18187.945381 \n",
+ " False \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " San Jose \n",
+ " 1015785 \n",
+ " 176.53 \n",
+ " 5754.177760 \n",
+ " True \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Sacramento \n",
+ " 485199 \n",
+ " 97.92 \n",
+ " 4955.055147 \n",
+ " False \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "\n",
+ " Wide and has saint name \n",
+ "0 False \n",
+ "1 True \n",
+ "2 False "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 15
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "YHIWvc9Ms-Ll"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for a solution."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "T5OlrqtdtCIb",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "cities['Is wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))\n",
+ "cities"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "f-xAOJeMiXFB"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Indexes\n",
+ "Both `Series` and `DataFrame` objects also define an `index` property that assigns an identifier value to each `Series` item or `DataFrame` row. \n",
+ "\n",
+ "By default, at construction, *pandas* assigns index values that reflect the ordering of the source data. Once created, the index values are stable; that is, they do not change when data is reordered."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "2684gsWNinq9",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 33
+ },
+ "outputId": "11071fbe-39ca-482f-b66f-e3a7e7e28996"
+ },
+ "cell_type": "code",
+ "source": [
+ "city_names.index"
+ ],
+ "execution_count": 16,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=3, step=1)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 16
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "F_qPe2TBjfWd",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 33
+ },
+ "outputId": "42bb63a5-5a3c-494a-8d99-b324a91dea7c"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.index"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=3, step=1)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 17
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "hp2oWY9Slo_h"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Call `DataFrame.reindex` to manually reorder the rows. For example, the following has the same effect as sorting by city name:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "sN0zUzSAj-U1",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 137
+ },
+ "outputId": "6f05c626-0057-43e2-d444-e6c50622ac44"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex([2, 0, 1])"
+ ],
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " City name \n",
+ " Population \n",
+ " Area square miles \n",
+ " Population density \n",
+ " Wide and has saint name \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Sacramento \n",
+ " 485199 \n",
+ " 97.92 \n",
+ " 4955.055147 \n",
+ " False \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " San Francisco \n",
+ " 852469 \n",
+ " 46.87 \n",
+ " 18187.945381 \n",
+ " False \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " San Jose \n",
+ " 1015785 \n",
+ " 176.53 \n",
+ " 5754.177760 \n",
+ " True \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "\n",
+ " Wide and has saint name \n",
+ "2 False \n",
+ "0 False \n",
+ "1 True "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 18
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "-GQFz8NZuS06"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Reindexing is a great way to shuffle (randomize) a `DataFrame`. In the example below, we take the index, which is array-like, and pass it to NumPy's `random.permutation` function, which shuffles its values in place. Calling `reindex` with this shuffled array causes the `DataFrame` rows to be shuffled in the same way.\n",
+ "Try running the following cell multiple times!"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "mF8GC0k8uYhz",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 137
+ },
+ "outputId": "5496dd16-e56e-4b2d-a68c-039690cb4a57"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex(np.random.permutation(cities.index))"
+ ],
+ "execution_count": 24,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " City name \n",
+ " Population \n",
+ " Area square miles \n",
+ " Population density \n",
+ " Wide and has saint name \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Sacramento \n",
+ " 485199 \n",
+ " 97.92 \n",
+ " 4955.055147 \n",
+ " False \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " San Francisco \n",
+ " 852469 \n",
+ " 46.87 \n",
+ " 18187.945381 \n",
+ " False \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " San Jose \n",
+ " 1015785 \n",
+ " 176.53 \n",
+ " 5754.177760 \n",
+ " True \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "\n",
+ " Wide and has saint name \n",
+ "2 False \n",
+ "0 False \n",
+ "1 True "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 24
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "fSso35fQmGKb"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "For more information, see the [Index documentation](http://pandas.pydata.org/pandas-docs/stable/indexing.html#index-objects)."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "8UngIdVhz8C0"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Exercise #2\n",
+ "\n",
+ "The `reindex` method allows index values that are not in the original `DataFrame`'s index values. Try it and see what happens if you use such values! Why do you think this is allowed?"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "PN55GrDX0jzO",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 166
+ },
+ "outputId": "37aab3dd-e4b4-4afe-8bdb-52da45962509"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Your code here\n",
+ "cities.reindex([2, 0, 1, 4])"
+ ],
+ "execution_count": 25,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " City name \n",
+ " Population \n",
+ " Area square miles \n",
+ " Population density \n",
+ " Wide and has saint name \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Sacramento \n",
+ " 485199.0 \n",
+ " 97.92 \n",
+ " 4955.055147 \n",
+ " False \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " San Francisco \n",
+ " 852469.0 \n",
+ " 46.87 \n",
+ " 18187.945381 \n",
+ " False \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " San Jose \n",
+ " 1015785.0 \n",
+ " 176.53 \n",
+ " 5754.177760 \n",
+ " True \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "2 Sacramento 485199.0 97.92 4955.055147 \n",
+ "0 San Francisco 852469.0 46.87 18187.945381 \n",
+ "1 San Jose 1015785.0 176.53 5754.177760 \n",
+ "4 NaN NaN NaN NaN \n",
+ "\n",
+ " Wide and has saint name \n",
+ "2 False \n",
+ "0 False \n",
+ "1 True \n",
+ "4 NaN "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 25
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "TJffr5_Jwqvd"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "8oSvi2QWwuDH"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "If your `reindex` input array includes values not in the original `DataFrame` index values, `reindex` will add new rows for these \"missing\" indices and populate all corresponding columns with `NaN` values:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "yBdkucKCwy4x",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex([0, 4, 5, 2])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "2l82PhPbwz7g"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "This behavior is desirable because indexes are often strings pulled from the actual data (see the [*pandas* reindex\n",
+ "documentation](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html) for an example\n",
+ "in which the index values are browser names).\n",
+ "\n",
+ "In this case, allowing \"missing\" indices makes it easy to reindex using an external list, as you don't have to worry about\n",
+ "sanitizing the input."
+ ]
+ }
+ ]
+}
\ No newline at end of file
From f36ff1941bce5a23e92fd8d545a62935bc7d5cda Mon Sep 17 00:00:00 2001
From: Anubhab-Bob <43186348+Anubhab-Bob@users.noreply.github.com>
Date: Mon, 21 Jan 2019 16:39:34 +0530
Subject: [PATCH 12/12] Delete Intro_to_pandas.ipynb
---
Intro_to_pandas.ipynb | 1703 -----------------------------------------
1 file changed, 1703 deletions(-)
delete mode 100644 Intro_to_pandas.ipynb
diff --git a/Intro_to_pandas.ipynb b/Intro_to_pandas.ipynb
deleted file mode 100644
index e968a90..0000000
--- a/Intro_to_pandas.ipynb
+++ /dev/null
@@ -1,1703 +0,0 @@
-{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "name": "Copy of intro_to_pandas.ipynb",
- "version": "0.3.2",
- "provenance": [],
- "collapsed_sections": [
- "JndnmDMp66FL",
- "YHIWvc9Ms-Ll",
- "TJffr5_Jwqvd"
- ],
- "include_colab_link": true
- },
- "kernelspec": {
- "name": "python2",
- "display_name": "Python 2"
- }
- },
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "view-in-github",
- "colab_type": "text"
- },
- "source": [
- " "
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "JndnmDMp66FL"
- },
- "cell_type": "markdown",
- "source": [
- "#### Copyright 2017 Google LLC."
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "hMqWDc_m6rUC",
- "cellView": "both",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
- "# you may not use this file except in compliance with the License.\n",
- "# You may obtain a copy of the License at\n",
- "#\n",
- "# https://www.apache.org/licenses/LICENSE-2.0\n",
- "#\n",
- "# Unless required by applicable law or agreed to in writing, software\n",
- "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
- "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
- "# See the License for the specific language governing permissions and\n",
- "# limitations under the License."
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "rHLcriKWLRe4"
- },
- "cell_type": "markdown",
- "source": [
- "# Intro to pandas"
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "QvJBqX8_Bctk"
- },
- "cell_type": "markdown",
- "source": [
- "**Learning Objectives:**\n",
- " * Gain an introduction to the `DataFrame` and `Series` data structures of the *pandas* library\n",
- " * Access and manipulate data within a `DataFrame` and `Series`\n",
- " * Import CSV data into a *pandas* `DataFrame`\n",
- " * Reindex a `DataFrame` to shuffle data"
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "TIFJ83ZTBctl"
- },
- "cell_type": "markdown",
- "source": [
- "[*pandas*](http://pandas.pydata.org/) is a column-oriented data analysis API. It's a great tool for handling and analyzing input data, and many ML frameworks support *pandas* data structures as inputs.\n",
- "Although a comprehensive introduction to the *pandas* API would span many pages, the core concepts are fairly straightforward, and we'll present them below. For a more complete reference, the [*pandas* docs site](http://pandas.pydata.org/pandas-docs/stable/index.html) contains extensive documentation and many tutorials."
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "s_JOISVgmn9v"
- },
- "cell_type": "markdown",
- "source": [
- "## Basic Concepts\n",
- "\n",
- "The following line imports the *pandas* API and prints the API version:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "aSRYu62xUi3g",
- "outputId": "4c052cad-dfa4-4fae-c502-c2e62f3fb85e",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- }
- },
- "cell_type": "code",
- "source": [
- "from __future__ import print_function\n",
- "\n",
- "import pandas as pd\n",
- "pd.__version__"
- ],
- "execution_count": 2,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "u'0.22.0'"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 2
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "daQreKXIUslr"
- },
- "cell_type": "markdown",
- "source": [
- "The primary data structures in *pandas* are implemented as two classes:\n",
- "\n",
- " * **`DataFrame`**, which you can imagine as a relational data table, with rows and named columns.\n",
- " * **`Series`**, which is a single column. A `DataFrame` contains one or more `Series` and a name for each `Series`.\n",
- "\n",
- "The data frame is a commonly used abstraction for data manipulation. Similar implementations exist in [Spark](https://spark.apache.org/) and [R](https://www.r-project.org/about.html)."
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "fjnAk1xcU0yc"
- },
- "cell_type": "markdown",
- "source": [
- "One way to create a `Series` is to construct a `Series` object. For example:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "DFZ42Uq7UFDj",
- "outputId": "7f768471-8f34-4680-9fbc-0d4900311739",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 84
- }
- },
- "cell_type": "code",
- "source": [
- "pd.Series(['San Francisco', 'San Jose', 'Sacramento'])"
- ],
- "execution_count": 3,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "0 San Francisco\n",
- "1 San Jose\n",
- "2 Sacramento\n",
- "dtype: object"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 3
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "U5ouUp1cU6pC"
- },
- "cell_type": "markdown",
- "source": [
- "`DataFrame` objects can be created by passing a `dict` mapping `string` column names to their respective `Series`. If the `Series` don't match in length, missing values are filled with special [NA/NaN](http://pandas.pydata.org/pandas-docs/stable/missing_data.html) values. Example:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "avgr6GfiUh8t",
- "outputId": "24e4cefe-1dcd-402a-f3e9-f99414807ceb",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 137
- }
- },
- "cell_type": "code",
- "source": [
- "city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento'])\n",
- "population = pd.Series([852469, 1015785, 485199])\n",
- "\n",
- "pd.DataFrame({ 'City name': city_names, 'Population': population })"
- ],
- "execution_count": 4,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " City name \n",
- " Population \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " San Francisco \n",
- " 852469 \n",
- " \n",
- " \n",
- " 1 \n",
- " San Jose \n",
- " 1015785 \n",
- " \n",
- " \n",
- " 2 \n",
- " Sacramento \n",
- " 485199 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " City name Population\n",
- "0 San Francisco 852469\n",
- "1 San Jose 1015785\n",
- "2 Sacramento 485199"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 4
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "oa5wfZT7VHJl"
- },
- "cell_type": "markdown",
- "source": [
- "But most of the time, you load an entire file into a `DataFrame`. The following example loads a file with California housing data. Run the following cell to load the data and create feature definitions:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "av6RYOraVG1V",
- "outputId": "2168747e-41c4-4e0a-9ac5-bd2c212906e0",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 286
- }
- },
- "cell_type": "code",
- "source": [
- "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
- "california_housing_dataframe.describe()"
- ],
- "execution_count": 5,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " longitude \n",
- " latitude \n",
- " housing_median_age \n",
- " total_rooms \n",
- " total_bedrooms \n",
- " population \n",
- " households \n",
- " median_income \n",
- " median_house_value \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " count \n",
- " 17000.000000 \n",
- " 17000.000000 \n",
- " 17000.000000 \n",
- " 17000.000000 \n",
- " 17000.000000 \n",
- " 17000.000000 \n",
- " 17000.000000 \n",
- " 17000.000000 \n",
- " 17000.000000 \n",
- " \n",
- " \n",
- " mean \n",
- " -119.562108 \n",
- " 35.625225 \n",
- " 28.589353 \n",
- " 2643.664412 \n",
- " 539.410824 \n",
- " 1429.573941 \n",
- " 501.221941 \n",
- " 3.883578 \n",
- " 207300.912353 \n",
- " \n",
- " \n",
- " std \n",
- " 2.005166 \n",
- " 2.137340 \n",
- " 12.586937 \n",
- " 2179.947071 \n",
- " 421.499452 \n",
- " 1147.852959 \n",
- " 384.520841 \n",
- " 1.908157 \n",
- " 115983.764387 \n",
- " \n",
- " \n",
- " min \n",
- " -124.350000 \n",
- " 32.540000 \n",
- " 1.000000 \n",
- " 2.000000 \n",
- " 1.000000 \n",
- " 3.000000 \n",
- " 1.000000 \n",
- " 0.499900 \n",
- " 14999.000000 \n",
- " \n",
- " \n",
- " 25% \n",
- " -121.790000 \n",
- " 33.930000 \n",
- " 18.000000 \n",
- " 1462.000000 \n",
- " 297.000000 \n",
- " 790.000000 \n",
- " 282.000000 \n",
- " 2.566375 \n",
- " 119400.000000 \n",
- " \n",
- " \n",
- " 50% \n",
- " -118.490000 \n",
- " 34.250000 \n",
- " 29.000000 \n",
- " 2127.000000 \n",
- " 434.000000 \n",
- " 1167.000000 \n",
- " 409.000000 \n",
- " 3.544600 \n",
- " 180400.000000 \n",
- " \n",
- " \n",
- " 75% \n",
- " -118.000000 \n",
- " 37.720000 \n",
- " 37.000000 \n",
- " 3151.250000 \n",
- " 648.250000 \n",
- " 1721.000000 \n",
- " 605.250000 \n",
- " 4.767000 \n",
- " 265000.000000 \n",
- " \n",
- " \n",
- " max \n",
- " -114.310000 \n",
- " 41.950000 \n",
- " 52.000000 \n",
- " 37937.000000 \n",
- " 6445.000000 \n",
- " 35682.000000 \n",
- " 6082.000000 \n",
- " 15.000100 \n",
- " 500001.000000 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " longitude latitude housing_median_age total_rooms \\\n",
- "count 17000.000000 17000.000000 17000.000000 17000.000000 \n",
- "mean -119.562108 35.625225 28.589353 2643.664412 \n",
- "std 2.005166 2.137340 12.586937 2179.947071 \n",
- "min -124.350000 32.540000 1.000000 2.000000 \n",
- "25% -121.790000 33.930000 18.000000 1462.000000 \n",
- "50% -118.490000 34.250000 29.000000 2127.000000 \n",
- "75% -118.000000 37.720000 37.000000 3151.250000 \n",
- "max -114.310000 41.950000 52.000000 37937.000000 \n",
- "\n",
- " total_bedrooms population households median_income \\\n",
- "count 17000.000000 17000.000000 17000.000000 17000.000000 \n",
- "mean 539.410824 1429.573941 501.221941 3.883578 \n",
- "std 421.499452 1147.852959 384.520841 1.908157 \n",
- "min 1.000000 3.000000 1.000000 0.499900 \n",
- "25% 297.000000 790.000000 282.000000 2.566375 \n",
- "50% 434.000000 1167.000000 409.000000 3.544600 \n",
- "75% 648.250000 1721.000000 605.250000 4.767000 \n",
- "max 6445.000000 35682.000000 6082.000000 15.000100 \n",
- "\n",
- " median_house_value \n",
- "count 17000.000000 \n",
- "mean 207300.912353 \n",
- "std 115983.764387 \n",
- "min 14999.000000 \n",
- "25% 119400.000000 \n",
- "50% 180400.000000 \n",
- "75% 265000.000000 \n",
- "max 500001.000000 "
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 5
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "WrkBjfz5kEQu"
- },
- "cell_type": "markdown",
- "source": [
- "The example above used `DataFrame.describe` to show interesting statistics about a `DataFrame`. Another useful function is `DataFrame.head`, which displays the first few records of a `DataFrame`:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "s3ND3bgOkB5k",
- "outputId": "f81980c5-2ce6-4494-b958-1647dc15d8e0",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 196
- }
- },
- "cell_type": "code",
- "source": [
- "california_housing_dataframe.head()"
- ],
- "execution_count": 6,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " longitude \n",
- " latitude \n",
- " housing_median_age \n",
- " total_rooms \n",
- " total_bedrooms \n",
- " population \n",
- " households \n",
- " median_income \n",
- " median_house_value \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " -114.31 \n",
- " 34.19 \n",
- " 15.0 \n",
- " 5612.0 \n",
- " 1283.0 \n",
- " 1015.0 \n",
- " 472.0 \n",
- " 1.4936 \n",
- " 66900.0 \n",
- " \n",
- " \n",
- " 1 \n",
- " -114.47 \n",
- " 34.40 \n",
- " 19.0 \n",
- " 7650.0 \n",
- " 1901.0 \n",
- " 1129.0 \n",
- " 463.0 \n",
- " 1.8200 \n",
- " 80100.0 \n",
- " \n",
- " \n",
- " 2 \n",
- " -114.56 \n",
- " 33.69 \n",
- " 17.0 \n",
- " 720.0 \n",
- " 174.0 \n",
- " 333.0 \n",
- " 117.0 \n",
- " 1.6509 \n",
- " 85700.0 \n",
- " \n",
- " \n",
- " 3 \n",
- " -114.57 \n",
- " 33.64 \n",
- " 14.0 \n",
- " 1501.0 \n",
- " 337.0 \n",
- " 515.0 \n",
- " 226.0 \n",
- " 3.1917 \n",
- " 73400.0 \n",
- " \n",
- " \n",
- " 4 \n",
- " -114.57 \n",
- " 33.57 \n",
- " 20.0 \n",
- " 1454.0 \n",
- " 326.0 \n",
- " 624.0 \n",
- " 262.0 \n",
- " 1.9250 \n",
- " 65500.0 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " longitude latitude housing_median_age total_rooms total_bedrooms \\\n",
- "0 -114.31 34.19 15.0 5612.0 1283.0 \n",
- "1 -114.47 34.40 19.0 7650.0 1901.0 \n",
- "2 -114.56 33.69 17.0 720.0 174.0 \n",
- "3 -114.57 33.64 14.0 1501.0 337.0 \n",
- "4 -114.57 33.57 20.0 1454.0 326.0 \n",
- "\n",
- " population households median_income median_house_value \n",
- "0 1015.0 472.0 1.4936 66900.0 \n",
- "1 1129.0 463.0 1.8200 80100.0 \n",
- "2 333.0 117.0 1.6509 85700.0 \n",
- "3 515.0 226.0 3.1917 73400.0 \n",
- "4 624.0 262.0 1.9250 65500.0 "
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 6
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "w9-Es5Y6laGd"
- },
- "cell_type": "markdown",
- "source": [
- "Another powerful feature of *pandas* is graphing. For example, `DataFrame.hist` lets you quickly study the distribution of values in a column:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "nqndFVXVlbPN",
- "outputId": "425c7814-fb16-441b-b529-912371ca3f57",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 395
- }
- },
- "cell_type": "code",
- "source": [
- "california_housing_dataframe.hist('housing_median_age')"
- ],
- "execution_count": 7,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "array([[]],\n",
- " dtype=object)"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 7
- },
- {
- "output_type": "display_data",
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAFZCAYAAABXM2zhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3X1UlHX+//HXMDAH0UEEGTfLarf0\naEmaa5l4U0Iokp7IVRPWdU3q6Iqtlql499WTlajRmmZZmunRU7GNtofcAjJxyyRanT0uuu0p2VOr\neTejKCqgSPP7o9Os/FRguP1Az8dfcTEz1+d6H+3pdQ1zYfF6vV4BAAAjBTT3AgAAwPURagAADEao\nAQAwGKEGAMBghBoAAIMRagAADEaogVo6cuSI7rjjjkbdxz//+U+lpKQ06j4a0h133KEjR47o448/\n1ty5c5t7OUCrZOFz1EDtHDlyREOHDtW//vWv5l6KMe644w7l5ubqpptuau6lAK0WZ9SAn5xOp0aO\nHKn7779f27dv1w8//KA//elPio+PV3x8vNLS0lRaWipJiomJ0d69e33P/enry5cva/78+Ro2bJji\n4uI0bdo0nT9/XgUFBYqLi5MkrV69Ws8++6xSU1MVGxur0aNH6+TJk5KkgwcPaujQoRo6dKheeeUV\njRw5UgUFBdWue/Xq1Vq0aJEmT56sgQMHatasWcrLy9OoUaM0cOBA5eXlSZIuXbqk5557TsOGDVNM\nTIzWrl3re42//e1viouL0/Dhw7V+/Xrf9m3btmnixImSJI/Ho5SUFMXHxysmJkZvvfVWleN/9913\nNXr0aA0cOFDp6ek1zrusrEwzZszwrWfZsmW+71U3hx07dmjkyJGKjY3VpEmTdPr06Rr3BZiIUAN+\n+OGHH1RRUaEPPvhAc+fO1cqVK/XRRx/p008/1bZt2/TXv/5VJSUl2rhxY7Wvs3v3bh05ckTZ2dnK\nzc3V7bffrn/84x9XPS47O1vz5s3Tjh07FBERoa1bt0qSFi5cqIkTJyo3N1ft2rXTt99+W6v179q1\nSy+88II++OADZWdn+9Y9ZcoUrVu3TpK0bt06HTp0SB988IG2b9+unJwc5eXlqbKyUvPnz9eiRYv0\n0UcfKSAgQJWVlVft47XXXtNNN92k7Oxsbdq0SRkZGTp27Jjv+3//+9+VmZmprVu3asuWLTp+/Hi1\n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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "XtYZ7114n3b-"
- },
- "cell_type": "markdown",
- "source": [
- "## Accessing Data\n",
- "\n",
- "You can access `DataFrame` data using familiar Python dict/list operations:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "_TFm7-looBFF",
- "outputId": "d7ab8f7b-e1e3-480c-a6f5-be3cf05dfc37",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 100
- }
- },
- "cell_type": "code",
- "source": [
- "cities = pd.DataFrame({ 'City name': city_names, 'Population': population })\n",
- "print(type(cities['City name']))\n",
- "cities['City name']"
- ],
- "execution_count": 8,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "0 San Francisco\n",
- "1 San Jose\n",
- "2 Sacramento\n",
- "Name: City name, dtype: object"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 8
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "V5L6xacLoxyv",
- "outputId": "1319d6e2-f41e-4a35-a0ad-7ead83684577",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 50
- }
- },
- "cell_type": "code",
- "source": [
- "print(type(cities['City name'][1]))\n",
- "cities['City name'][1]"
- ],
- "execution_count": 9,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "'San Jose'"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 9
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "gcYX1tBPugZl",
- "outputId": "927153f2-e74a-4256-ad8d-b6211ad065b9",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 124
- }
- },
- "cell_type": "code",
- "source": [
- "print(type(cities[0:2]))\n",
- "cities[0:2]"
- ],
- "execution_count": 10,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "\n"
- ],
- "name": "stdout"
- },
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " City name \n",
- " Population \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " San Francisco \n",
- " 852469 \n",
- " \n",
- " \n",
- " 1 \n",
- " San Jose \n",
- " 1015785 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " City name Population\n",
- "0 San Francisco 852469\n",
- "1 San Jose 1015785"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 10
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "65g1ZdGVjXsQ"
- },
- "cell_type": "markdown",
- "source": [
- "In addition, *pandas* provides an extremely rich API for advanced [indexing and selection](http://pandas.pydata.org/pandas-docs/stable/indexing.html) that is too extensive to be covered here."
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "RM1iaD-ka3Y1"
- },
- "cell_type": "markdown",
- "source": [
- "## Manipulating Data\n",
- "\n",
- "You may apply Python's basic arithmetic operations to `Series`. For example:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "XWmyCFJ5bOv-",
- "outputId": "91280582-c473-48cd-c7f5-36a8a73df7e9",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 84
- }
- },
- "cell_type": "code",
- "source": [
- "population / 1000."
- ],
- "execution_count": 11,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "0 852.469\n",
- "1 1015.785\n",
- "2 485.199\n",
- "dtype: float64"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 11
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "TQzIVnbnmWGM"
- },
- "cell_type": "markdown",
- "source": [
- "[NumPy](http://www.numpy.org/) is a popular toolkit for scientific computing. *pandas* `Series` can be used as arguments to most NumPy functions:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "ko6pLK6JmkYP",
- "outputId": "92b5b7fd-95be-4fc5-8033-5b8da8b2a95b",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 84
- }
- },
- "cell_type": "code",
- "source": [
- "import numpy as np\n",
- "\n",
- "np.log(population)"
- ],
- "execution_count": 12,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "0 13.655892\n",
- "1 13.831172\n",
- "2 13.092314\n",
- "dtype: float64"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 12
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "xmxFuQmurr6d"
- },
- "cell_type": "markdown",
- "source": [
- "For more complex single-column transformations, you can use `Series.apply`. Like the Python [map function](https://docs.python.org/2/library/functions.html#map), \n",
- "`Series.apply` accepts as an argument a [lambda function](https://docs.python.org/2/tutorial/controlflow.html#lambda-expressions), which is applied to each value.\n",
- "\n",
- "The example below creates a new `Series` that indicates whether `population` is over one million:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "Fc1DvPAbstjI",
- "outputId": "e447f694-479c-4964-fa8e-4e5bfebad9cc",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 84
- }
- },
- "cell_type": "code",
- "source": [
- "population.apply(lambda val: val > 1000000)"
- ],
- "execution_count": 13,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "0 False\n",
- "1 True\n",
- "2 False\n",
- "dtype: bool"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 13
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "ZeYYLoV9b9fB"
- },
- "cell_type": "markdown",
- "source": [
- "\n",
- "Modifying `DataFrames` is also straightforward. For example, the following code adds two `Series` to an existing `DataFrame`:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "0gCEX99Hb8LR",
- "outputId": "7d96cf32-a00a-4c43-81d1-88953ab65041",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 137
- }
- },
- "cell_type": "code",
- "source": [
- "cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92])\n",
- "cities['Population density'] = cities['Population'] / cities['Area square miles']\n",
- "cities"
- ],
- "execution_count": 14,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " City name \n",
- " Population \n",
- " Area square miles \n",
- " Population density \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " San Francisco \n",
- " 852469 \n",
- " 46.87 \n",
- " 18187.945381 \n",
- " \n",
- " \n",
- " 1 \n",
- " San Jose \n",
- " 1015785 \n",
- " 176.53 \n",
- " 5754.177760 \n",
- " \n",
- " \n",
- " 2 \n",
- " Sacramento \n",
- " 485199 \n",
- " 97.92 \n",
- " 4955.055147 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " City name Population Area square miles Population density\n",
- "0 San Francisco 852469 46.87 18187.945381\n",
- "1 San Jose 1015785 176.53 5754.177760\n",
- "2 Sacramento 485199 97.92 4955.055147"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 14
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "6qh63m-ayb-c"
- },
- "cell_type": "markdown",
- "source": [
- "## Exercise #1\n",
- "\n",
- "Modify the `cities` table by adding a new boolean column that is True if and only if *both* of the following are True:\n",
- "\n",
- " * The city is named after a saint.\n",
- " * The city has an area greater than 50 square miles.\n",
- "\n",
- "**Note:** Boolean `Series` are combined using the bitwise, rather than the traditional boolean, operators. For example, when performing *logical and*, use `&` instead of `and`.\n",
- "\n",
- "**Hint:** \"San\" in Spanish means \"saint.\""
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "zCOn8ftSyddH",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 137
- },
- "outputId": "508be6c9-95f2-432c-be0a-e2f2d24e8886"
- },
- "cell_type": "code",
- "source": [
- "# Your code here\n",
- "cities['Wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))\n",
- "cities"
- ],
- "execution_count": 15,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " City name \n",
- " Population \n",
- " Area square miles \n",
- " Population density \n",
- " Wide and has saint name \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " San Francisco \n",
- " 852469 \n",
- " 46.87 \n",
- " 18187.945381 \n",
- " False \n",
- " \n",
- " \n",
- " 1 \n",
- " San Jose \n",
- " 1015785 \n",
- " 176.53 \n",
- " 5754.177760 \n",
- " True \n",
- " \n",
- " \n",
- " 2 \n",
- " Sacramento \n",
- " 485199 \n",
- " 97.92 \n",
- " 4955.055147 \n",
- " False \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " City name Population Area square miles Population density \\\n",
- "0 San Francisco 852469 46.87 18187.945381 \n",
- "1 San Jose 1015785 176.53 5754.177760 \n",
- "2 Sacramento 485199 97.92 4955.055147 \n",
- "\n",
- " Wide and has saint name \n",
- "0 False \n",
- "1 True \n",
- "2 False "
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 15
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "YHIWvc9Ms-Ll"
- },
- "cell_type": "markdown",
- "source": [
- "### Solution\n",
- "\n",
- "Click below for a solution."
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "T5OlrqtdtCIb",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "cities['Is wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))\n",
- "cities"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "f-xAOJeMiXFB"
- },
- "cell_type": "markdown",
- "source": [
- "## Indexes\n",
- "Both `Series` and `DataFrame` objects also define an `index` property that assigns an identifier value to each `Series` item or `DataFrame` row. \n",
- "\n",
- "By default, at construction, *pandas* assigns index values that reflect the ordering of the source data. Once created, the index values are stable; that is, they do not change when data is reordered."
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "2684gsWNinq9",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- },
- "outputId": "11071fbe-39ca-482f-b66f-e3a7e7e28996"
- },
- "cell_type": "code",
- "source": [
- "city_names.index"
- ],
- "execution_count": 16,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "RangeIndex(start=0, stop=3, step=1)"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 16
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "F_qPe2TBjfWd",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 33
- },
- "outputId": "42bb63a5-5a3c-494a-8d99-b324a91dea7c"
- },
- "cell_type": "code",
- "source": [
- "cities.index"
- ],
- "execution_count": 17,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/plain": [
- "RangeIndex(start=0, stop=3, step=1)"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 17
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "hp2oWY9Slo_h"
- },
- "cell_type": "markdown",
- "source": [
- "Call `DataFrame.reindex` to manually reorder the rows. For example, the following has the same effect as sorting by city name:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "sN0zUzSAj-U1",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 137
- },
- "outputId": "6f05c626-0057-43e2-d444-e6c50622ac44"
- },
- "cell_type": "code",
- "source": [
- "cities.reindex([2, 0, 1])"
- ],
- "execution_count": 18,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " City name \n",
- " Population \n",
- " Area square miles \n",
- " Population density \n",
- " Wide and has saint name \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 2 \n",
- " Sacramento \n",
- " 485199 \n",
- " 97.92 \n",
- " 4955.055147 \n",
- " False \n",
- " \n",
- " \n",
- " 0 \n",
- " San Francisco \n",
- " 852469 \n",
- " 46.87 \n",
- " 18187.945381 \n",
- " False \n",
- " \n",
- " \n",
- " 1 \n",
- " San Jose \n",
- " 1015785 \n",
- " 176.53 \n",
- " 5754.177760 \n",
- " True \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " City name Population Area square miles Population density \\\n",
- "2 Sacramento 485199 97.92 4955.055147 \n",
- "0 San Francisco 852469 46.87 18187.945381 \n",
- "1 San Jose 1015785 176.53 5754.177760 \n",
- "\n",
- " Wide and has saint name \n",
- "2 False \n",
- "0 False \n",
- "1 True "
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 18
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "-GQFz8NZuS06"
- },
- "cell_type": "markdown",
- "source": [
- "Reindexing is a great way to shuffle (randomize) a `DataFrame`. In the example below, we take the index, which is array-like, and pass it to NumPy's `random.permutation` function, which shuffles its values in place. Calling `reindex` with this shuffled array causes the `DataFrame` rows to be shuffled in the same way.\n",
- "Try running the following cell multiple times!"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "mF8GC0k8uYhz",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 137
- },
- "outputId": "5496dd16-e56e-4b2d-a68c-039690cb4a57"
- },
- "cell_type": "code",
- "source": [
- "cities.reindex(np.random.permutation(cities.index))"
- ],
- "execution_count": 24,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " City name \n",
- " Population \n",
- " Area square miles \n",
- " Population density \n",
- " Wide and has saint name \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 2 \n",
- " Sacramento \n",
- " 485199 \n",
- " 97.92 \n",
- " 4955.055147 \n",
- " False \n",
- " \n",
- " \n",
- " 0 \n",
- " San Francisco \n",
- " 852469 \n",
- " 46.87 \n",
- " 18187.945381 \n",
- " False \n",
- " \n",
- " \n",
- " 1 \n",
- " San Jose \n",
- " 1015785 \n",
- " 176.53 \n",
- " 5754.177760 \n",
- " True \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " City name Population Area square miles Population density \\\n",
- "2 Sacramento 485199 97.92 4955.055147 \n",
- "0 San Francisco 852469 46.87 18187.945381 \n",
- "1 San Jose 1015785 176.53 5754.177760 \n",
- "\n",
- " Wide and has saint name \n",
- "2 False \n",
- "0 False \n",
- "1 True "
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 24
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "fSso35fQmGKb"
- },
- "cell_type": "markdown",
- "source": [
- "For more information, see the [Index documentation](http://pandas.pydata.org/pandas-docs/stable/indexing.html#index-objects)."
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "8UngIdVhz8C0"
- },
- "cell_type": "markdown",
- "source": [
- "## Exercise #2\n",
- "\n",
- "The `reindex` method allows index values that are not in the original `DataFrame`'s index values. Try it and see what happens if you use such values! Why do you think this is allowed?"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "PN55GrDX0jzO",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 166
- },
- "outputId": "37aab3dd-e4b4-4afe-8bdb-52da45962509"
- },
- "cell_type": "code",
- "source": [
- "# Your code here\n",
- "cities.reindex([2, 0, 1, 4])"
- ],
- "execution_count": 25,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " City name \n",
- " Population \n",
- " Area square miles \n",
- " Population density \n",
- " Wide and has saint name \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 2 \n",
- " Sacramento \n",
- " 485199.0 \n",
- " 97.92 \n",
- " 4955.055147 \n",
- " False \n",
- " \n",
- " \n",
- " 0 \n",
- " San Francisco \n",
- " 852469.0 \n",
- " 46.87 \n",
- " 18187.945381 \n",
- " False \n",
- " \n",
- " \n",
- " 1 \n",
- " San Jose \n",
- " 1015785.0 \n",
- " 176.53 \n",
- " 5754.177760 \n",
- " True \n",
- " \n",
- " \n",
- " 4 \n",
- " NaN \n",
- " NaN \n",
- " NaN \n",
- " NaN \n",
- " NaN \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " City name Population Area square miles Population density \\\n",
- "2 Sacramento 485199.0 97.92 4955.055147 \n",
- "0 San Francisco 852469.0 46.87 18187.945381 \n",
- "1 San Jose 1015785.0 176.53 5754.177760 \n",
- "4 NaN NaN NaN NaN \n",
- "\n",
- " Wide and has saint name \n",
- "2 False \n",
- "0 False \n",
- "1 True \n",
- "4 NaN "
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 25
- }
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "TJffr5_Jwqvd"
- },
- "cell_type": "markdown",
- "source": [
- "### Solution\n",
- "\n",
- "Click below for the solution."
- ]
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "8oSvi2QWwuDH"
- },
- "cell_type": "markdown",
- "source": [
- "If your `reindex` input array includes values not in the original `DataFrame` index values, `reindex` will add new rows for these \"missing\" indices and populate all corresponding columns with `NaN` values:"
- ]
- },
- {
- "metadata": {
- "colab_type": "code",
- "id": "yBdkucKCwy4x",
- "colab": {}
- },
- "cell_type": "code",
- "source": [
- "cities.reindex([0, 4, 5, 2])"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "metadata": {
- "colab_type": "text",
- "id": "2l82PhPbwz7g"
- },
- "cell_type": "markdown",
- "source": [
- "This behavior is desirable because indexes are often strings pulled from the actual data (see the [*pandas* reindex\n",
- "documentation](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html) for an example\n",
- "in which the index values are browser names).\n",
- "\n",
- "In this case, allowing \"missing\" indices makes it easy to reindex using an external list, as you don't have to worry about\n",
- "sanitizing the input."
- ]
- }
- ]
-}
\ No newline at end of file