From c1635695ef9156d3bcc8ca7bd5ade0024517dcb4 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Mon, 12 Jan 2026 22:10:11 -0800 Subject: [PATCH 01/15] wk2 ipython cur progress --- AD450_math.py | 5 + week_2_intro_ipython.ipynb | 195 ++++++++++++++++++++++++++++++++----- 2 files changed, 175 insertions(+), 25 deletions(-) create mode 100644 AD450_math.py diff --git a/AD450_math.py b/AD450_math.py new file mode 100644 index 0000000..357720a --- /dev/null +++ b/AD450_math.py @@ -0,0 +1,5 @@ +def add(num1, num2): + return num1 + num2 + +def multiply(num1, num2): + return num1 * num2 \ No newline at end of file diff --git a/week_2_intro_ipython.ipynb b/week_2_intro_ipython.ipynb index 1a469f7..b62b64d 100644 --- a/week_2_intro_ipython.ipynb +++ b/week_2_intro_ipython.ipynb @@ -28,8 +28,20 @@ "metadata": { "id": "BQybla17FRh5" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "My name is Julien.\n", + "I am a student at North Seattle College\n" + ] + } + ], + "source": [ + "name = \"Julien\"\n", + "print(\"My name is \" + name + \".\\nI am a student at North Seattle College\")" + ] }, { "cell_type": "markdown", @@ -47,8 +59,19 @@ "metadata": { "id": "P7QDyWncFRh8" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "My phone number is 2069991111\n" + ] + } + ], + "source": [ + "phone = 2069991111\n", + "print(\"My phone number is \" + str(phone))" + ] }, { "cell_type": "markdown", @@ -66,8 +89,21 @@ "metadata": { "id": "OnOau948FRh9" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello my name is Julien and my phone number is 206-999-1111\n" + ] + } + ], + "source": [ + "name = \"Julien\"\n", + "phone_number = \"206-999-1111\"\n", + "\n", + "print(f\"Hello my name is {name} and my phone number is {phone_number}\")" + ] }, { "cell_type": "markdown", @@ -86,8 +122,20 @@ "metadata": { "id": "5x2rIFzRFRh9" }, - "outputs": [], - "source": [] + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax. Maybe you meant '==' or ':=' instead of '='? (1440112413.py, line 1)", + "output_type": "error", + "traceback": [ + " \u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[19]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[31m \u001b[39m\u001b[31mmonth = \"June\", year = 2027\u001b[39m\n ^\n\u001b[31mSyntaxError\u001b[39m\u001b[31m:\u001b[39m invalid syntax. Maybe you meant '==' or ':=' instead of '='?\n" + ] + } + ], + "source": [ + "month, year = \"June\", 2027\n", + "print(f\"I graduate in {month} of {year}\")" + ] }, { "cell_type": "markdown", @@ -113,8 +161,20 @@ "metadata": { "id": "OkyeAVPXFRh-" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "58.5\n" + ] + } + ], + "source": [ + "ans = 12 * 5 - 3 / 2\n", + "print(ans)\n", + "# it is float because there are trailing decimals\n" + ] }, { "cell_type": "markdown", @@ -140,8 +200,24 @@ "metadata": { "id": "Lo-LEy8bKYmG" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "31 days\n" + ] + } + ], + "source": [ + "month = \"October\"\n", + "\n", + "if month == \"October\":\n", + " print(\"31 days\")\n", + "else:\n", + " print(\"30 days\")\n", + " \n" + ] }, { "cell_type": "markdown", @@ -161,8 +237,25 @@ "metadata": { "id": "qscUkh813QKH" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "between 100 and 150\n" + ] + } + ], + "source": [ + "num = 140\n", + "\n", + "if num > 150:\n", + " print(\"greater than 150\")\n", + "elif num > 100:\n", + " print(\"between 100 and 150\")\n", + "else:\n", + " print(\"less than 100\")" + ] }, { "cell_type": "markdown", @@ -181,8 +274,24 @@ "metadata": { "id": "1vxg4nMbFRh_" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number is divisible by 5 and 10\n", + "Number is divisible by 7 or 2\n" + ] + } + ], + "source": [ + "num = 70 \n", + "if num % 5 == 0 and num % 10 == 0:\n", + " print(\"Number is divisible by 5 and 10\")\n", + "\n", + "if num % 7 == 0 or num % 2 == 0:\n", + " print(\"Number is divisible by 7 or 2\")" + ] }, { "cell_type": "markdown", @@ -199,8 +308,34 @@ "metadata": { "id": "JY_Ci5v-FRiA" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "7\n", + "14\n", + "21\n", + "28\n", + "35\n", + "42\n", + "49\n", + "56\n", + "63\n", + "70\n", + "77\n", + "84\n", + "91\n", + "98\n" + ] + } + ], + "source": [ + "for i in range(0, 100):\n", + " if i % 7 == 0:\n", + " print(i)" + ] }, { "cell_type": "markdown", @@ -214,9 +349,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "id": "4a1D64hpFRiA" - }, + "metadata": {}, "outputs": [], "source": [] }, @@ -337,9 +470,21 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'AD450_math'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[33]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mAD450_math\u001b[39;00m\n\u001b[32m 3\u001b[39m AD450_math.add(\u001b[32m2\u001b[39m,\u001b[32m2\u001b[39m)\n", + "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'AD450_math'" + ] + } + ], "source": [ "import AD450_math\n", "\n", @@ -431,7 +576,7 @@ "provenance": [] }, "kernelspec": { - "display_name": "my_env_2", + "display_name": "base", "language": "python", "name": "python3" }, @@ -445,7 +590,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.16" + "version": "3.13.5" } }, "nbformat": 4, From d434de3185a625991fd51c84ad607cb204fede85 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Mon, 12 Jan 2026 22:12:25 -0800 Subject: [PATCH 02/15] wk2 cur progress --- week_2_intro_ipython.ipynb | 196 +++++++++++++++++++++++++++---------- 1 file changed, 147 insertions(+), 49 deletions(-) diff --git a/week_2_intro_ipython.ipynb b/week_2_intro_ipython.ipynb index b62b64d..78bed5b 100644 --- a/week_2_intro_ipython.ipynb +++ b/week_2_intro_ipython.ipynb @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": { "id": "BQybla17FRh5" }, @@ -55,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": { "id": "P7QDyWncFRh8" }, @@ -85,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { "id": "OnOau948FRh9" }, @@ -118,17 +118,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": { "id": "5x2rIFzRFRh9" }, "outputs": [ { - "ename": "SyntaxError", - "evalue": "invalid syntax. Maybe you meant '==' or ':=' instead of '='? (1440112413.py, line 1)", - "output_type": "error", - "traceback": [ - " \u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[19]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[31m \u001b[39m\u001b[31mmonth = \"June\", year = 2027\u001b[39m\n ^\n\u001b[31mSyntaxError\u001b[39m\u001b[31m:\u001b[39m invalid syntax. Maybe you meant '==' or ':=' instead of '='?\n" + "name": "stdout", + "output_type": "stream", + "text": [ + "I graduate in June of 2027\n" ] } ], @@ -157,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": { "id": "OkyeAVPXFRh-" }, @@ -196,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": { "id": "Lo-LEy8bKYmG" }, @@ -233,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": { "id": "qscUkh813QKH" }, @@ -270,7 +269,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": { "id": "1vxg4nMbFRh_" }, @@ -304,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": { "id": "JY_Ci5v-FRiA" }, @@ -348,10 +347,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 173, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 3 6 9 \n", + "18\n" + ] + } + ], + "source": [ + "i = 0\n", + "nums = \"\"\n", + "while i < 10: \n", + " if i % 3 == 0:\n", + " nums += str(i) + \" \"\n", + " sums = i + i \n", + " i += 1\n", + "print(nums)\n", + "print(sums)\n" + ] }, { "cell_type": "markdown", @@ -392,12 +410,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 174, "metadata": { "id": "lppms8ctzfRI" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hogwarts\n", + "s\n" + ] + } + ], + "source": [ + "school = \"Hogwarts\"\n", + "first = school[0:3]\n", + "second = school[3:8]\n", + "print(first + second)\n", + "print(school[-1])" + ] }, { "cell_type": "markdown", @@ -413,12 +446,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 175, "metadata": { "id": "zw2NezoM0zfl" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thor is a character in the Marvel Cinematic Universe\n", + "She-Hulk is a character in the Marvel Cinematic Universe\n", + "Loki is a character in the Marvel Cinematic Universe\n" + ] + } + ], + "source": [ + "chars = [\"Thor\", \"She-Hulk\", \"Loki\"]\n", + "for char in chars:\n", + " print(char +\" is a character in the Marvel Cinematic Universe\")" + ] }, { "cell_type": "markdown", @@ -454,12 +501,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 176, "metadata": { "id": "p0YE0nqs4Hcz" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'Breed': 'Corgi', 'Age': 13, 'Type': 'Cattle herding'}\n", + "Corgi\n", + "The Corgi is expected to live about 13 years\n" + ] + } + ], + "source": [ + "dog = {\n", + " \"Breed\": \"Corgi\",\n", + " \"Age\": 13,\n", + " \"Type\": \"Cattle herding\"\n", + "}\n", + "print(dog)\n", + "print(dog[\"Breed\"])\n", + "print(f\"The {dog['Breed']} is expected to live about {dog['Age']} years\")" + ] }, { "cell_type": "markdown", @@ -470,19 +536,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 177, "metadata": {}, "outputs": [ { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'AD450_math'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[33]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mAD450_math\u001b[39;00m\n\u001b[32m 3\u001b[39m AD450_math.add(\u001b[32m2\u001b[39m,\u001b[32m2\u001b[39m)\n", - "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'AD450_math'" - ] + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 177, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -504,9 +569,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 178, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 178, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Cell with import error\n", "AD450_math.multiply(2, 2)" @@ -514,18 +590,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 179, "metadata": {}, "outputs": [], "source": [ - "# Reload cell" + "# Reload cell\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 180, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 180, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Cell with correct output \n", "AD450_math.multiply(2, 2)" @@ -545,29 +632,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 181, "metadata": {}, "outputs": [], "source": [ - "# Create a" + "# Create a\n", + "a = 1 " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 182, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], "source": [ - "# Print a" + "# Print a\n", + "print(a)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 183, "metadata": {}, "outputs": [], "source": [ - "# Set a to 4" + "# Set a to 4\n", + "a = 4 " ] } ], From 05f432c0130db30076d3214938417fac71a476b5 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Mon, 12 Jan 2026 23:56:56 -0800 Subject: [PATCH 03/15] cur wk2 --- week_2_intro_ipython.ipynb | 54 +++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/week_2_intro_ipython.ipynb b/week_2_intro_ipython.ipynb index 78bed5b..b503869 100644 --- a/week_2_intro_ipython.ipynb +++ b/week_2_intro_ipython.ipynb @@ -347,7 +347,7 @@ }, { "cell_type": "code", - "execution_count": 173, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -361,11 +361,12 @@ ], "source": [ "i = 0\n", + "sums = 0\n", "nums = \"\"\n", "while i < 10: \n", " if i % 3 == 0:\n", " nums += str(i) + \" \"\n", - " sums = i + i \n", + " sums += i\n", " i += 1\n", "print(nums)\n", "print(sums)\n" @@ -410,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 174, + "execution_count": 3, "metadata": { "id": "lppms8ctzfRI" }, @@ -446,7 +447,7 @@ }, { "cell_type": "code", - "execution_count": 175, + "execution_count": 4, "metadata": { "id": "zw2NezoM0zfl" }, @@ -479,12 +480,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "id": "rbyZif9a1b2V" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "janurary has 31 days\n", + "february has 28 days\n", + "march has 31 days\n", + "april has 30 days\n", + "may has 31 days\n", + "june has 30 days\n" + ] + } + ], + "source": [ + "months = [[\"janurary\", 31], [\"february\", 28], [\"march\", 31], [\"april\", 30], [\"may\", 31], [\"june\", 30]]\n", + "for i in range(len(months)):\n", + " print(f\"{months[i][0]} has {months[i][1]} days\")\n" + ] }, { "cell_type": "markdown", @@ -501,7 +519,7 @@ }, { "cell_type": "code", - "execution_count": 176, + "execution_count": 6, "metadata": { "id": "p0YE0nqs4Hcz" }, @@ -536,7 +554,7 @@ }, { "cell_type": "code", - "execution_count": 177, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -545,7 +563,7 @@ "4" ] }, - "execution_count": 177, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -569,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": 178, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -578,7 +596,7 @@ "4" ] }, - "execution_count": 178, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -590,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 179, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -599,7 +617,7 @@ }, { "cell_type": "code", - "execution_count": 180, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -608,7 +626,7 @@ "4" ] }, - "execution_count": 180, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -632,7 +650,7 @@ }, { "cell_type": "code", - "execution_count": 181, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -642,7 +660,7 @@ }, { "cell_type": "code", - "execution_count": 182, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -660,7 +678,7 @@ }, { "cell_type": "code", - "execution_count": 183, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ From a6cbe4012399efbd2d5eeb638c31afc3e9105f98 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Tue, 13 Jan 2026 13:09:38 -0800 Subject: [PATCH 04/15] init wk 2 submission --- week_2_intro_ipython.ipynb | 49 +++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/week_2_intro_ipython.ipynb b/week_2_intro_ipython.ipynb index b503869..7746dc9 100644 --- a/week_2_intro_ipython.ipynb +++ b/week_2_intro_ipython.ipynb @@ -393,12 +393,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": { "id": "ntBnYxzi1RPc" }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Student 2\n", + "Student 4\n" + ] + } + ], + "source": [ + "sets = [[1,], [2], [3], [4], [5]]\n", + "for i in sets:\n", + " for j in i:\n", + " if j % 2 == 0:\n", + " print(\"Student \" + str(j))\n" + ] }, { "cell_type": "markdown", @@ -411,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 40, "metadata": { "id": "lppms8ctzfRI" }, @@ -447,7 +462,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 41, "metadata": { "id": "zw2NezoM0zfl" }, @@ -480,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 42, "metadata": { "id": "rbyZif9a1b2V" }, @@ -519,7 +534,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 43, "metadata": { "id": "p0YE0nqs4Hcz" }, @@ -554,7 +569,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 44, "metadata": {}, "outputs": [ { @@ -563,7 +578,7 @@ "4" ] }, - "execution_count": 7, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -587,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -596,7 +611,7 @@ "4" ] }, - "execution_count": 8, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -608,7 +623,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -617,7 +632,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 47, "metadata": {}, "outputs": [ { @@ -626,7 +641,7 @@ "4" ] }, - "execution_count": 10, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -650,7 +665,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ @@ -660,7 +675,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -678,7 +693,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ From c9ccb348b41352d30ed9b55e5c6af1c0ae07e1e7 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Tue, 20 Jan 2026 11:11:36 -0800 Subject: [PATCH 05/15] cur progress for init submission --- week_3_numpy.ipynb | 412 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 348 insertions(+), 64 deletions(-) diff --git a/week_3_numpy.ipynb b/week_3_numpy.ipynb index 1db8573..e449f1c 100644 --- a/week_3_numpy.ipynb +++ b/week_3_numpy.ipynb @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -83,19 +83,46 @@ "id": "AVByQUYKxtNG", "outputId": "238e50f0-366d-41de-a44a-6cf3e063650c" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 2 3 4]\n", + " [5 6 7 8]]\n", + "\n", + "Inspect the array\n", + "--------------\n", + "dimensions: 2\n", + "shape:\t (2, 4)\n", + "size:\t 8\n", + "datatype: int64\n" + ] + }, + { + "ename": "AttributeError", + "evalue": "'numpy.ndarray' object has no attribute 'bytes'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[16]\u001b[39m\u001b[32m, line 11\u001b[39m\n\u001b[32m 9\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33msize:\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[33m\"\u001b[39m, numbers.size) \u001b[38;5;66;03m# number of elements in the array\u001b[39;00m\n\u001b[32m 10\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mdatatype:\u001b[39m\u001b[33m\"\u001b[39m, numbers.dtype) \u001b[38;5;66;03m# numpy determines the datatype\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m11\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mbytes:\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[33m\"\u001b[39m, \u001b[43mnumbers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mbytes\u001b[49m) \u001b[38;5;66;03m# total bytes consumed by the array\u001b[39;00m\n", + "\u001b[31mAttributeError\u001b[39m: 'numpy.ndarray' object has no attribute 'bytes'" + ] + } + ], "source": [ "# create an array called numbers with 2 rows and 4 columns from literal values. Have your literal values be the integers 1-8\n", - "numbers = None #Replace None with array defintion\n", + "numbers = np.array([[1,2,3,4], [5,6,7,8]])\n", "print(numbers)\n", "\n", "# Replace None below with each value for the array. \n", "print(\"\\nInspect the array\\n--------------\")\n", - "print(\"dimensions:\", None) # ndarrays have dimensions\n", - "print(\"shape:\\t\", None) # ndarrays have shape (numer of rows & columns)\n", - "print(\"size:\\t\", None) # number of elements in the array\n", - "print(\"datatype\", None) # numpy determines the datatype\n", - "print(\"bytes:\\t\", None) # total bytes consumed by the array" + "print(\"dimensions:\", numbers.ndim) # ndarrays have dimensions\n", + "print(\"shape:\\t\", numbers.shape) # ndarrays have shape (numer of rows & columns)\n", + "print(\"size:\\t\", numbers.size) # number of elements in the array\n", + "print(\"datatype:\", numbers.dtype) # numpy determines the datatype\n", + "print(\"bytes:\\t\", numbers.bytes) # total bytes consumed by the array" ] }, { @@ -109,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -117,34 +144,63 @@ "id": "pTXgMRYRQS3v", "outputId": "010d4702-bc29-4f87-980e-66fe9b43436a" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1. 1. 1. 1.]\n", + " [1. 1. 1. 1.]\n", + " [1. 1. 1. 1.]] \n", + "\n", + "[[0. 0. 0. 0.]\n", + " [0. 0. 0. 0.]\n", + " [0. 0. 0. 0.]] \n", + "\n", + "[[-0.00791867 0.60836559]\n", + " [ 0.32089487 0.94509106]] \n", + "\n", + "[[0.375 0.75 ]\n", + " [1.125 1.5 ]\n", + " [1.875 2.25 ]] \n", + "\n", + "[['x' 'x']\n", + " ['x' 'x']] \n", + "\n", + "[10 15 20] \n", + "\n", + "[0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ] \n", + "\n" + ] + } + ], "source": [ "# Create an 3 by 4 array of ones\n", - "ones = None\n", + "ones = np.ones([3, 4])\n", "print(ones, \"\\n\")\n", "\n", "# Create an 3 by 4 array of zeros\n", - "zeros = None\n", + "zeros = np.zeros([3, 4])\n", "print(zeros, \"\\n\")\n", "\n", "# Create an 2 by 2 array with random values\n", - "rando = None\n", + "rando = np.random.standard_normal(size=(2, 2))\n", "print(rando, \"\\n\")\n", "\n", "# Create 3 by 2 an empty array\n", - "empty = None\n", + "empty = np.empty((3, 2))\n", "print(empty, \"\\n\")\n", "\n", "# Create a 2 by 2 array full of 'x's, hint seach numpy full\n", - "full = None\n", + "full = np.full((2,2), 'x')\n", "print(full, \"\\n\")\n", "\n", "# Create an array of the form [10, 15, 20] using np.arange\n", - "even = None\n", + "even = np.arange(10, 21, 5)\n", "print(even, \"\\n\")\n", "\n", "# Create an array of the form [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ] using np.linspace\n", - "line = None\n", + "line = np.linspace(0, 2, num=9)\n", "print(line, \"\\n\")\n" ] }, @@ -172,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 64, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -180,9 +236,19 @@ "id": "NSMJt_4x0qan", "outputId": "81e81c55-af1d-4149-dc7c-7edc8a1a582d" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5 6 7]\n" + ] + } + ], "source": [ "arr1d = np.array([0,1, 2, 3, 4, 5, 6, 7, 8])\n", + "slice_arr1d = arr1d[5:8]\n", + "print(slice_arr1d)\n", "\n", "# using indexing select and output [5, 6, 7] from arr1d. Save this slice to a variable named slice_arr1d\n" ] @@ -196,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 62, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -204,9 +270,21 @@ "id": "Xe-PXYhBp4bn", "outputId": "cf387d7a-d51f-4540-8d9a-571a9a24f7b5" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0 1 2 3 4 5 12 12 12]\n", + "[ 5 12 12]\n" + ] + } + ], "source": [ - "# Replace 6, 7, and 8 with 12 in arr1d using one line of code. Then print arr1d and slice_arr1d\n" + "# Replace 6, 7, and 8 with 12 in arr1d using one line of code. Then print arr1d and slice_arr1d\n", + "arr1d[6:9] = 12\n", + "print(arr1d)\n", + "print(slice_arr1d)\n" ] }, { @@ -218,7 +296,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 65, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -228,7 +306,8 @@ }, "outputs": [], "source": [ - "# Create a copy of arr1d and name it new_array. Hint: You can't use new_array = arr1d" + "# Create a copy of arr1d and name it new_array. Hint: You can't use new_array = arr1d\n", + "new_array = arr1d.copy()" ] }, { @@ -240,11 +319,25 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 70, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n", + "3\n", + "[[1 2 3 4]\n", + " [5 6 7 8]]\n" + ] + } + ], "source": [ "arr2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])\n", + "print(arr2d[0][2])\n", + "print(arr2d[0, 2])\n", + "print(arr2d)\n", "\n", "# There are two ways to select 3 from the 2 dimensional array above. Use both ways to select 3 and print the results. " ] @@ -258,7 +351,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 90, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -266,16 +359,36 @@ "id": "kvMvyar216T5", "outputId": "943f42a4-469a-48f0-f4d4-546849ffa08d" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 3 4]\n", + " [6 7 8]]\n", + "\n", + "\n", + "[[3]\n", + " [7]]\n", + "\n", + "\n", + "[[1 2 3 4]]\n" + ] + } + ], "source": [ "# In mult-dimensional arrays, slicing that omits later indices will return a lower-dimensional ndarray\n", "# Select and print out the following:\n", "\n", "# select first two rows and all but first column\n", - "\n", + "print(arr2d[:2, 1:4])\n", + "print(\"\\n\")\n", "# select first two rows and only 3rd column\n", + "print(arr2d[:2, 2:3])\n", + "print(\"\\n\")\n", "\n", - "# select all columns in the first row\n" + "# select all columns in the first row\n", + "print(arr2d[:1, :4])" ] }, { @@ -298,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 99, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -306,12 +419,37 @@ "id": "IMEp_RGh_Fu5", "outputId": "45332ef8-2c42-4c40-af09-6caaf98bca6b" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 1 1 1 1 1 0]\n", + " [0 0 1 1 1 0 1]\n", + " [0 1 0 1 0 1 0]\n", + " [1 1 0 1 0 0 1]\n", + " [1 1 0 0 0 0 0]\n", + " [0 0 1 1 0 0 0]\n", + " [0 1 1 0 1 1 1]]\n", + "['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe' 'Joe']\n", + "\n", + "\n", + "[[1 1 1 1 1 1 0]\n", + " [1 1 0 1 0 0 1]]\n" + ] + } + ], "source": [ "import numpy as np\n", "names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])\n", "data = np.random.randint(2, size=(7, 7)) # create an array of random values\n", + "print(data)\n", + "print(names)\n", "\n", + "\n", + " \n", + "print(\"\\n\")\n", + "print(data[names == \"Bob\"])\n", "# Select and print the first and forth rows from 'data' using just the array 'names' and 'data'. Print out both the selected rows and 'data'. \n", "# Hint\" The \"Bob\" appears in both the first and forth rows. " ] @@ -335,11 +473,20 @@ "id": "BgULatpwt7X_", "outputId": "c31d49b4-92ff-4514-c91b-8eeb42573b5f" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 1 1 1 1 1 0]\n", + " [1 1 0 1 0 0 1]]\n" + ] + } + ], "source": [ "# Again output the first and fouth rows using the cond below. Meaning replace None with an expression\n", - "cond = None\n", - "data[cond]" + "cond = data[names == \"Bob\"]\n", + "print(cond)" ] }, { @@ -353,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 108, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -361,9 +508,25 @@ "id": "EP-SDDVIvK8s", "outputId": "cce4fab9-cd5e-46c2-c615-f2518f1b4a72" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 1 1 1 1 1 0]\n", + " [0 0 1 1 1 0 1]\n", + " [0 1 0 1 0 1 0]\n", + " [1 1 0 1 0 0 1]\n", + " [1 1 0 0 0 0 0]\n", + " [0 0 1 1 0 0 0]\n", + " [0 1 1 0 1 1 1]]\n" + ] + } + ], "source": [ - "# Select all rows except the first and forth" + "# Select all rows except the first and forth\n", + "data[~(names == \"Bob\")]\n", + "print(data)\n" ] }, { @@ -377,7 +540,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -387,7 +550,8 @@ }, "outputs": [], "source": [ - "# Select the last 5 columns for the first and forth row" + "# Select the last 5 columns for the first and forth row\n", + "data[()]" ] }, { @@ -436,7 +600,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 92, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -444,18 +608,36 @@ "id": "HdWTjc8CZI5R", "outputId": "e070b71e-bdee-4abc-f378-474978208ad5" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1. 2. 3.]\n", + " [4. 5. 6.]]\n", + "\n", + "\n", + "[[ 6. 7. 8.]\n", + " [ 9. 10. 11.]]\n", + "\n", + "\n", + "[[10. 20. 30.]\n", + " [40. 50. 60.]]\n" + ] + } + ], "source": [ "array1 = np.array([[1., 2., 3.], [4., 5., 6.]])\n", "\n", "print(array1)\n", + "print(\"\\n\")\n", "\n", "# Add 5 to all values in array1 and print \n", - "print()\n", - "\n", + "print(5 + array1)\n", + "print(\"\\n\")\n", "\n", "# Multiple all values in array1 by 10 and print \n", - "print()\n" + "print(10 * array1)\n" ] }, { @@ -469,7 +651,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 94, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -477,11 +659,20 @@ "id": "uHr0DxrmaOEZ", "outputId": "b0f74550-427d-4333-c010-45f886677379" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[False True False]\n", + " [ True False True]]\n" + ] + } + ], "source": [ "array2 = np.array([[0., 4., 1.], [7., 2., 12.]])\n", "\n", - "\n", + "print(array1 < array2)\n", "# Test to see if pairwise elements in array1 are less than the corresponding element in array2. Output the results.\n", "# i.e. compariing the first elements of the first rows would output False because 1 is not less than 0" ] @@ -519,7 +710,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 145, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -527,13 +718,23 @@ "id": "k5pIynI12dmY", "outputId": "cd39dc42-7bab-4a92-c3e0-151a287d0b07" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1. 0. 1. 1. 0.]\n" + ] + } + ], "source": [ "arr1 = np.ones(5)\n", "arr2 = np.zeros(5)\n", "cond = np.array([True, False, True, True, False])\n", "\n", - "# Output the value from `arr1` whenever the corresponding value in `cond` is True, and otherwise take the value from `arr2`. \n" + "# Output the value from `arr1` whenever the corresponding value in `cond` is True, and otherwise take the value from `arr2`. \n", + "answer = np.where(cond == 1, arr1, arr2)\n", + "print(answer)" ] }, { @@ -564,7 +765,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 117, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -572,12 +773,30 @@ "id": "ImvBT7NX3aY7", "outputId": "d04b3b76-91e4-4a40-e047-1e7a55bfd4ed" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 1 0 1]\n", + " [3 0 1 0]\n", + " [3 2 0 3]\n", + " [0 2 1 3]\n", + " [0 2 2 2]]\n", + "1.4\n", + "28\n" + ] + } + ], "source": [ "arr = np.random.randint(4, size=(5, 4))\n", "print(arr)\n", "\n", - "# Calculate and print the mean and sum for all values in the array\n" + "# Calculate and print the mean and sum for all values in the array\n", + "mean = np.mean(arr)\n", + "sum = np.sum(arr)\n", + "print(mean)\n", + "print(sum)" ] }, { @@ -589,7 +808,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 124, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -597,9 +816,33 @@ "id": "kxw7AUVm31Ea", "outputId": "b1cb6ece-5056-41b1-8c1b-f57612b9dae1" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.33169958 0.51012861]\n", + "[0.66339916 1.02025723]\n", + "[0.69508798 0.14674021]\n", + "[1.39017596 0.29348042]\n" + ] + } + ], "source": [ - "# Calculate the mean and sum across the columns and the rows. Print out both\n" + "# Calculate the mean and sum across the columns and the rows. Print out both\n", + "array_nums = np.random.standard_normal((2,2))\n", + "\n", + "mean_of_rows = np.mean(array_nums, axis=1)\n", + "sum_of_rows = np.sum(array_nums, axis=1)\n", + "\n", + "mean_of_columns = np.mean(array_nums, axis=0)\n", + "sum_of_columns = np.sum(array_nums, axis=0)\n", + "\n", + "print(mean_of_rows)\n", + "print(sum_of_rows)\n", + "\n", + "print(mean_of_columns)\n", + "print(sum_of_columns)\n" ] }, { @@ -611,15 +854,42 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 142, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "full array: [1 2 3 4 5 6]\n", + "\n", + "\n", + "columns [[1 1 1]\n", + " [2 2 2]]\n", + "\n", + "\n", + "rows: [[1 2 3]\n", + " [1 2 3]]\n" + ] + } + ], "source": [ + "arr6 = np.array([[1, 1, 1], [1, 1, 1]])\n", "# Print out the cumulative sum for the full array, the columns and the rows. \n", "# For example the array [[1, 1, 1], [1, 1, 1]] would have the following outputs:\n", "# full array: [1, 2, 3, 4, 5, 6]\n", + "rows = arr6.cumsum(axis=1)\n", + "columns = arr6.cumsum(axis=0)\n", + "fullarray = arr6.cumsum()\n", + "\n", "# columns: [[1, 1, 1], [2, 2, 2]]\n", - "# rows: [[1, 2, 3], [1, 2, 3]]\n" + "# rows: [[1, 2, 3], [1, 2, 3]]\n", + "print(f\"full array: {fullarray}\")\n", + "print(\"\\n\")\n", + "print(f\"columns {columns}\")\n", + "print(\"\\n\")\n", + "print(f\"rows: {rows}\")\n", + "\n" ] }, { @@ -631,7 +901,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 148, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -639,7 +909,17 @@ "id": "sDnJpvUR1B1W", "outputId": "c4806b83-0ba9-448e-c4b7-f9ca53a8900d" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 1 2 3 4 5 6 7 8 9]\n", + "[1 3 5 7 9]\n", + "[9 8 7 6 5 4 3 2 1 0]\n" + ] + } + ], "source": [ "\n", "arr = np.arange(10)\n", @@ -647,8 +927,12 @@ "\n", "\n", "# Print out all all odd values\n", + "odd_numbers = arr[arr % 2 == 1]\n", + "print(odd_numbers)\n", "\n", - "# Print out all values in reverse order\n" + "# Print out all values in reverse order\n", + "reverse_array = arr[::-1]\n", + "print(reverse_array)" ] } ], @@ -678,7 +962,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.13.5" } }, "nbformat": 4, From 091f96fa94be377cb112a6d64dd638f1d55bdaa1 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Tue, 20 Jan 2026 11:18:50 -0800 Subject: [PATCH 06/15] cur progress for wk 3 init submission --- week_3_numpy.ipynb | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/week_3_numpy.ipynb b/week_3_numpy.ipynb index e449f1c..3ec4774 100644 --- a/week_3_numpy.ipynb +++ b/week_3_numpy.ipynb @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 153, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -96,18 +96,8 @@ "dimensions: 2\n", "shape:\t (2, 4)\n", "size:\t 8\n", - "datatype: int64\n" - ] - }, - { - "ename": "AttributeError", - "evalue": "'numpy.ndarray' object has no attribute 'bytes'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[16]\u001b[39m\u001b[32m, line 11\u001b[39m\n\u001b[32m 9\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33msize:\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[33m\"\u001b[39m, numbers.size) \u001b[38;5;66;03m# number of elements in the array\u001b[39;00m\n\u001b[32m 10\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mdatatype:\u001b[39m\u001b[33m\"\u001b[39m, numbers.dtype) \u001b[38;5;66;03m# numpy determines the datatype\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m11\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[33mbytes:\u001b[39m\u001b[38;5;130;01m\\t\u001b[39;00m\u001b[33m\"\u001b[39m, \u001b[43mnumbers\u001b[49m\u001b[43m.\u001b[49m\u001b[43mbytes\u001b[49m) \u001b[38;5;66;03m# total bytes consumed by the array\u001b[39;00m\n", - "\u001b[31mAttributeError\u001b[39m: 'numpy.ndarray' object has no attribute 'bytes'" + "datatype: int64\n", + "bytes:\t 64\n" ] } ], @@ -115,6 +105,7 @@ "# create an array called numbers with 2 rows and 4 columns from literal values. Have your literal values be the integers 1-8\n", "numbers = np.array([[1,2,3,4], [5,6,7,8]])\n", "print(numbers)\n", + "numbers_bytes = numbers.nbytes\n", "\n", "# Replace None below with each value for the array. \n", "print(\"\\nInspect the array\\n--------------\")\n", @@ -122,7 +113,7 @@ "print(\"shape:\\t\", numbers.shape) # ndarrays have shape (numer of rows & columns)\n", "print(\"size:\\t\", numbers.size) # number of elements in the array\n", "print(\"datatype:\", numbers.dtype) # numpy determines the datatype\n", - "print(\"bytes:\\t\", numbers.bytes) # total bytes consumed by the array" + "print(\"bytes:\\t\", numbers_bytes) # total bytes consumed by the array" ] }, { @@ -551,7 +542,7 @@ "outputs": [], "source": [ "# Select the last 5 columns for the first and forth row\n", - "data[()]" + "data[[])]" ] }, { From c0e11991a2deecf9ed001d31d437f41bdeab53f8 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Tue, 20 Jan 2026 19:40:37 -0800 Subject: [PATCH 07/15] final submission for numpy --- week_3_numpy.ipynb | 147 +++++++++++++++++++++++++++------------------ 1 file changed, 87 insertions(+), 60 deletions(-) diff --git a/week_3_numpy.ipynb b/week_3_numpy.ipynb index 3ec4774..9978844 100644 --- a/week_3_numpy.ipynb +++ b/week_3_numpy.ipynb @@ -116,6 +116,13 @@ "print(\"bytes:\\t\", numbers_bytes) # total bytes consumed by the array" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": { @@ -253,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -273,7 +280,7 @@ ], "source": [ "# Replace 6, 7, and 8 with 12 in arr1d using one line of code. Then print arr1d and slice_arr1d\n", - "arr1d[6:9] = 12\n", + "arr1d[6:] = 12\n", "print(arr1d)\n", "print(slice_arr1d)\n" ] @@ -287,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 154, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -310,7 +317,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 155, "metadata": {}, "outputs": [ { @@ -318,9 +325,7 @@ "output_type": "stream", "text": [ "3\n", - "3\n", - "[[1 2 3 4]\n", - " [5 6 7 8]]\n" + "3\n" ] } ], @@ -328,7 +333,6 @@ "arr2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])\n", "print(arr2d[0][2])\n", "print(arr2d[0, 2])\n", - "print(arr2d)\n", "\n", "# There are two ways to select 3 from the 2 dimensional array above. Use both ways to select 3 and print the results. " ] @@ -342,7 +346,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 159, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -372,7 +376,7 @@ "# Select and print out the following:\n", "\n", "# select first two rows and all but first column\n", - "print(arr2d[:2, 1:4])\n", + "print(arr2d[:2, 1:])\n", "print(\"\\n\")\n", "# select first two rows and only 3rd column\n", "print(arr2d[:2, 2:3])\n", @@ -402,7 +406,7 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -415,18 +419,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[1 1 1 1 1 1 0]\n", - " [0 0 1 1 1 0 1]\n", - " [0 1 0 1 0 1 0]\n", - " [1 1 0 1 0 0 1]\n", - " [1 1 0 0 0 0 0]\n", - " [0 0 1 1 0 0 0]\n", - " [0 1 1 0 1 1 1]]\n", + "[[1 1 0 1 0 1 0]\n", + " [1 1 1 1 1 0 0]\n", + " [1 1 1 1 1 0 0]\n", + " [0 1 1 1 1 0 0]\n", + " [1 1 1 0 0 1 0]\n", + " [0 1 1 1 1 0 1]\n", + " [1 0 1 0 1 1 1]]\n", "['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe' 'Joe']\n", "\n", "\n", - "[[1 1 1 1 1 1 0]\n", - " [1 1 0 1 0 0 1]]\n" + "[[1 1 0 1 0 1 0]\n", + " [0 1 1 1 1 0 0]]\n" ] } ], @@ -476,7 +480,7 @@ ], "source": [ "# Again output the first and fouth rows using the cond below. Meaning replace None with an expression\n", - "cond = data[names == \"Bob\"]\n", + "cond = names ==\n", "print(cond)" ] }, @@ -491,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -501,23 +505,20 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[1 1 1 1 1 1 0]\n", - " [0 0 1 1 1 0 1]\n", - " [0 1 0 1 0 1 0]\n", - " [1 1 0 1 0 0 1]\n", - " [1 1 0 0 0 0 0]\n", - " [0 0 1 1 0 0 0]\n", - " [0 1 1 0 1 1 1]]\n" + "ename": "IndexError", + "evalue": "boolean index did not match indexed array along axis 0; size of axis is 7 but size of corresponding boolean axis is 5", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mIndexError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[162]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;66;03m# Select all rows except the first and forth\u001b[39;00m\n\u001b[32m 2\u001b[39m not_bob = ~cond\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[43mdata\u001b[49m\u001b[43m[\u001b[49m\u001b[43mnot_bob\u001b[49m\u001b[43m]\u001b[49m)\n", + "\u001b[31mIndexError\u001b[39m: boolean index did not match indexed array along axis 0; size of axis is 7 but size of corresponding boolean axis is 5" ] } ], "source": [ "# Select all rows except the first and forth\n", - "data[~(names == \"Bob\")]\n", - "print(data)\n" + "cond = names == \"Bob\"" ] }, { @@ -531,7 +532,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -539,10 +540,20 @@ "id": "QYjmF7eFvTmc", "outputId": "172adeb5-31d7-47ad-e3af-59c352f96f97" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 1 0 1 0]\n", + "[1 1 1 0 0]\n" + ] + } + ], "source": [ "# Select the last 5 columns for the first and forth row\n", - "data[[])]" + "print(data[0, 2:])\n", + "print(data[3, 2:])" ] }, { @@ -556,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -564,9 +575,22 @@ "id": "sciz0aprvh8u", "outputId": "24c8c092-cbe9-4665-9e01-9d193bcac8df" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 1 0 1 0 1 0]\n", + " [1 1 1 1 1 0 0]\n", + " [0 1 1 1 1 0 0]\n", + " [1 1 1 0 0 1 0]]\n" + ] + } + ], "source": [ - "# Select the first, third, forth and fifth row using similar conditioins and an OR operator" + "# Select the first, third, forth and fifth row using similar conditioins and an OR operator\n", + "cond2 = (names == \"Bob\") | (names == \"Will\")\n", + "print(data[cond2])" ] }, { @@ -756,7 +780,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -769,13 +793,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[2 1 0 1]\n", - " [3 0 1 0]\n", - " [3 2 0 3]\n", - " [0 2 1 3]\n", - " [0 2 2 2]]\n", - "1.4\n", - "28\n" + "[[1 1 2 3]\n", + " [0 0 0 0]\n", + " [1 2 3 2]\n", + " [3 2 1 1]\n", + " [1 2 1 3]]\n", + "\n", + "\n", + "the mean is 1.45\n", + "the sum is 29\n" ] } ], @@ -786,8 +812,9 @@ "# Calculate and print the mean and sum for all values in the array\n", "mean = np.mean(arr)\n", "sum = np.sum(arr)\n", - "print(mean)\n", - "print(sum)" + "print(\"\\n\")\n", + "print(f\"the mean is {mean}\")\n", + "print(f\"the sum is {sum}\")" ] }, { @@ -799,7 +826,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -812,22 +839,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "[0.33169958 0.51012861]\n", - "[0.66339916 1.02025723]\n", - "[0.69508798 0.14674021]\n", - "[1.39017596 0.29348042]\n" + "[1.75 0. 2. 1.75 1.75]\n", + "[7 0 8 7 7]\n", + "[1.2 1.4 1.4 1.8]\n", + "[6 7 7 9]\n" ] } ], "source": [ "# Calculate the mean and sum across the columns and the rows. Print out both\n", - "array_nums = np.random.standard_normal((2,2))\n", "\n", - "mean_of_rows = np.mean(array_nums, axis=1)\n", - "sum_of_rows = np.sum(array_nums, axis=1)\n", "\n", - "mean_of_columns = np.mean(array_nums, axis=0)\n", - "sum_of_columns = np.sum(array_nums, axis=0)\n", + "mean_of_rows = np.mean(arr, axis=1)\n", + "sum_of_rows = np.sum(arr, axis=1)\n", + "\n", + "mean_of_columns = np.mean(arr, axis=0)\n", + "sum_of_columns = np.sum(arr, axis=0)\n", "\n", "print(mean_of_rows)\n", "print(sum_of_rows)\n", From a94e11f93d8f1c76dd49aad09c4c30b34d04ec10 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Fri, 23 Jan 2026 15:36:27 -0800 Subject: [PATCH 08/15] final submission for wk3 exercise --- week_3_numpy.ipynb | 121 ++++++++++++++++++++++----------------------- 1 file changed, 59 insertions(+), 62 deletions(-) diff --git a/week_3_numpy.ipynb b/week_3_numpy.ipynb index 9978844..893f386 100644 --- a/week_3_numpy.ipynb +++ b/week_3_numpy.ipynb @@ -57,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": { "id": "Pt63xmy1qLll" }, @@ -116,13 +116,6 @@ "print(\"bytes:\\t\", numbers_bytes) # total bytes consumed by the array" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": { @@ -226,7 +219,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -260,7 +253,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -294,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": 154, + "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -317,13 +310,14 @@ }, { "cell_type": "code", - "execution_count": 155, + "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "3\n", "3\n", "3\n" ] @@ -333,6 +327,7 @@ "arr2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])\n", "print(arr2d[0][2])\n", "print(arr2d[0, 2])\n", + "print(arr2d[-2][2])\n", "\n", "# There are two ways to select 3 from the 2 dimensional array above. Use both ways to select 3 and print the results. " ] @@ -346,7 +341,7 @@ }, { "cell_type": "code", - "execution_count": 159, + "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -406,7 +401,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -419,18 +414,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[1 1 0 1 0 1 0]\n", - " [1 1 1 1 1 0 0]\n", - " [1 1 1 1 1 0 0]\n", - " [0 1 1 1 1 0 0]\n", + "[[1 0 0 1 1 1 1]\n", + " [0 1 1 0 1 1 0]\n", + " [1 1 0 0 0 0 1]\n", " [1 1 1 0 0 1 0]\n", - " [0 1 1 1 1 0 1]\n", - " [1 0 1 0 1 1 1]]\n", + " [0 1 0 0 0 1 1]\n", + " [0 1 1 1 0 0 1]\n", + " [1 1 1 1 1 0 0]]\n", "['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe' 'Joe']\n", "\n", "\n", - "[[1 1 0 1 0 1 0]\n", - " [0 1 1 1 1 0 0]]\n" + "[[1 0 0 1 1 1 1]\n", + " [1 1 1 0 0 1 0]]\n" ] } ], @@ -460,7 +455,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -473,14 +468,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[1 1 1 1 1 1 0]\n", - " [1 1 0 1 0 0 1]]\n" + "[[1 0 0 1 1 1 1]\n", + " [1 1 1 0 0 1 0]]\n" ] } ], "source": [ "# Again output the first and fouth rows using the cond below. Meaning replace None with an expression\n", - "cond = names ==\n", + "cond = data[names == \"Bob\"]\n", "print(cond)" ] }, @@ -495,7 +490,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -505,20 +500,21 @@ }, "outputs": [ { - "ename": "IndexError", - "evalue": "boolean index did not match indexed array along axis 0; size of axis is 7 but size of corresponding boolean axis is 5", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mIndexError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[162]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;66;03m# Select all rows except the first and forth\u001b[39;00m\n\u001b[32m 2\u001b[39m not_bob = ~cond\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[43mdata\u001b[49m\u001b[43m[\u001b[49m\u001b[43mnot_bob\u001b[49m\u001b[43m]\u001b[49m)\n", - "\u001b[31mIndexError\u001b[39m: boolean index did not match indexed array along axis 0; size of axis is 7 but size of corresponding boolean axis is 5" + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0 1 1 0 1 1 0]\n", + " [1 1 0 0 0 0 1]\n", + " [0 1 0 0 0 1 1]\n", + " [0 1 1 1 0 0 1]\n", + " [1 1 1 1 1 0 0]]\n" ] } ], "source": [ "# Select all rows except the first and forth\n", - "cond = names == \"Bob\"" + "negatedData = data[~(names == \"Bob\")]\n", + "print(negatedData)" ] }, { @@ -532,7 +528,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -545,8 +541,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[0 1 0 1 0]\n", - "[1 1 1 0 0]\n" + "[0 1 1 1 1]\n", + "[1 0 0 1 0]\n" ] } ], @@ -567,7 +563,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -580,10 +576,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[1 1 0 1 0 1 0]\n", - " [1 1 1 1 1 0 0]\n", - " [0 1 1 1 1 0 0]\n", - " [1 1 1 0 0 1 0]]\n" + "[[1 0 0 1 1 1 1]\n", + " [1 1 0 0 0 0 1]\n", + " [1 1 1 0 0 1 0]\n", + " [0 1 0 0 0 1 1]]\n" ] } ], @@ -615,7 +611,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -666,7 +662,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -725,7 +721,7 @@ }, { "cell_type": "code", - "execution_count": 145, + "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -780,7 +776,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -793,15 +789,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[1 1 2 3]\n", - " [0 0 0 0]\n", - " [1 2 3 2]\n", - " [3 2 1 1]\n", - " [1 2 1 3]]\n", + "[[3 2 0 1]\n", + " [2 1 3 3]\n", + " [1 1 1 3]\n", + " [0 2 3 0]\n", + " [1 0 3 2]]\n", "\n", "\n", - "the mean is 1.45\n", - "the sum is 29\n" + "the mean is 1.6\n", + "the sum is 32\n", + "(5, 4)\n" ] } ], @@ -826,7 +823,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -839,10 +836,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "[1.75 0. 2. 1.75 1.75]\n", - "[7 0 8 7 7]\n", - "[1.2 1.4 1.4 1.8]\n", - "[6 7 7 9]\n" + "[2. 1.75 1.25 1.5 1.5 ]\n", + "[8 7 5 6 6]\n", + "[2. 1.2 1.8 1.4]\n", + "[10 6 9 7]\n" ] } ], @@ -872,7 +869,7 @@ }, { "cell_type": "code", - "execution_count": 142, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -919,7 +916,7 @@ }, { "cell_type": "code", - "execution_count": 148, + "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/" From ed81ecd5ab5c6558c6dc182dd6c93af2d6586f9d Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Tue, 27 Jan 2026 13:50:45 -0800 Subject: [PATCH 09/15] initial submission for week 4 --- week_4_panadas.ipynb | 568 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 495 insertions(+), 73 deletions(-) diff --git a/week_4_panadas.ipynb b/week_4_panadas.ipynb index 9080a02..ed5ae00 100644 --- a/week_4_panadas.ipynb +++ b/week_4_panadas.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -52,10 +52,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 1\n", + "1 2\n", + "2 3\n", + "3 4\n", + "dtype: int64\n", + "\n", + "[np.int64(1), np.int64(2), np.int64(3), np.int64(4)]\n", + "Length: 4, dtype: int64\n", + "RangeIndex(start=0, stop=4, step=1)\n" + ] + } + ], + "source": [ + "pandas_series = pd.Series([1, 2, 3, 4])\n", + "print(pandas_series)\n", + "print(pandas_series.array)\n", + "print(pandas_series.index)" + ] }, { "cell_type": "markdown", @@ -66,10 +87,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "series2 = pd.Series([1, 2, 3, 4], index = [\"a\", \"b\", \"c\", \"d\"])\n", + "print(series2[\"a\"])" + ] }, { "cell_type": "markdown", @@ -85,10 +117,27 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ohio 35000\n", + "Texas 71000\n", + "Oregon 16000\n", + "Utah 5000\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "states_dict = {\"Ohio\": 35000, \"Texas\": 71000,\n", + " \"Oregon\": 16000, \"Utah\":5000}\n", + "states_series = pd.Series(states_dict)\n", + "print(states_series) " + ] }, { "cell_type": "markdown", @@ -99,10 +148,25 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OH 35000\n", + "TX 71000\n", + "OR 16000\n", + "UT 5000\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "states_series.index = [\"OH\", \"TX\", \"OR\", \"UT\"]\n", + "print(states_series)" + ] }, { "cell_type": "markdown", @@ -125,9 +189,91 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stateyearpop
0Ohio20001.5
1Ohio20011.7
2Ohio20023.6
3Nevada20012.4
4Nevada20022.9
5Nevada20033.2
\n", + "
" + ], + "text/plain": [ + " state year pop\n", + "0 Ohio 2000 1.5\n", + "1 Ohio 2001 1.7\n", + "2 Ohio 2002 3.6\n", + "3 Nevada 2001 2.4\n", + "4 Nevada 2002 2.9\n", + "5 Nevada 2003 3.2" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data = {\n", " 'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],\n", @@ -148,10 +294,27 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " state year pop\n", + "zero Ohio 2000 1.5\n", + "one Ohio 2001 1.7\n", + "two Ohio 2002 3.6\n", + "three Nevada 2001 2.4\n", + "four Nevada 2002 2.9\n", + "five Nevada 2003 3.2\n" + ] + } + ], + "source": [ + "df.index = [\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\"]\n", + "print(df)" + ] }, { "cell_type": "markdown", @@ -162,10 +325,37 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "zero 2000\n", + "one 2001\n", + "two 2002\n", + "three 2001\n", + "four 2002\n", + "five 2003\n", + "Name: year, dtype: int64\n", + "\n", + "\n", + "zero Ohio\n", + "one Ohio\n", + "two Ohio\n", + "three Nevada\n", + "four Nevada\n", + "five Nevada\n", + "Name: state, dtype: object\n" + ] + } + ], + "source": [ + "print(df[\"year\"])\n", + "print(\"\\n\")\n", + "print(df.iloc[:, 0])" + ] }, { "cell_type": "markdown", @@ -176,10 +366,28 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "state Ohio\n", + "year 2002\n", + "pop 3.6\n", + "Name: two, dtype: object\n", + "state Ohio\n", + "year 2002\n", + "pop 3.6\n", + "Name: two, dtype: object\n" + ] + } + ], + "source": [ + "print(df.loc[\"two\"])\n", + "print(df.iloc[2])" + ] }, { "cell_type": "markdown", @@ -190,10 +398,27 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " state year pop rating\n", + "zero Ohio 2000 1.5 5\n", + "one Ohio 2001 1.7 4\n", + "two Ohio 2002 3.6 3\n", + "three Nevada 2001 2.4 2\n", + "four Nevada 2002 2.9 1\n", + "five Nevada 2003 3.2 0\n" + ] + } + ], + "source": [ + "df[\"rating\"] = np.arange(5, -1, -1)\n", + "print(df)" + ] }, { "cell_type": "markdown", @@ -204,10 +429,27 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " state year pop rating nonsense\n", + "zero Ohio 2000 1.5 5 7.5\n", + "one Ohio 2001 1.7 4 6.8\n", + "two Ohio 2002 3.6 3 10.8\n", + "three Nevada 2001 2.4 2 4.8\n", + "four Nevada 2002 2.9 1 2.9\n", + "five Nevada 2003 3.2 0 0.0\n" + ] + } + ], + "source": [ + "df[\"nonsense\"] = df[\"rating\"] * df[\"pop\"]\n", + "print(df)" + ] }, { "cell_type": "markdown", @@ -224,10 +466,33 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " series_numerical series_zeros series_random\n", + "a 0 0 0.783306\n", + "b 1 0 0.423269\n", + "c 2 0 0.538404\n", + "d 3 0 0.157979\n", + "e 4 0 0.431871\n" + ] + } + ], + "source": [ + "series_numerical = pd.Series([0, 1, 2, 3, 4], index=[\"a\",\"b\",\"c\",\"d\",\"e\"])\n", + "series_zeros = pd.Series(data = 0,index = [\"a\",\"b\",\"c\",\"d\",\"e\"])\n", + "random_nums = np.random.rand(5)\n", + "series_random = pd.Series(random_nums, index =[\"a\",\"b\",\"c\",\"d\",\"e\"])\n", + "\n", + "numeric_df = pd.DataFrame({\"series_numerical\": series_numerical,\n", + " \"series_zeros\": series_zeros,\n", + " \"series_random\": series_random})\n", + "print(numeric_df)\n" + ] }, { "cell_type": "markdown", @@ -238,10 +503,25 @@ }, { "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " numerical zeroes random d e\n", + "series_numerical 0.000000 1.000000 2.000000 3.000000 4.000000\n", + "series_zeros 0.000000 0.000000 0.000000 0.000000 0.000000\n", + "series_random 0.783306 0.423269 0.538404 0.157979 0.431871\n" + ] + } + ], + "source": [ + "transposed = numeric_df.T\n", + "transposed_numeric_df = transposed.rename(columns ={\"a\": \"numerical\", \"b\": \"zeroes\", \"c\": \"random\"})\n", + "print(transposed_numeric_df)" + ] }, { "cell_type": "markdown", @@ -252,10 +532,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " numerical zeroes random d e\n", + "series_numerical 0.000000 1.000000 2.000000 3.000000 4.000000\n", + "series_random 0.783306 0.423269 0.538404 0.157979 0.431871\n", + "series_zeros 0.000000 0.000000 0.000000 0.000000 0.000000\n" + ] + } + ], + "source": [ + "sorted_df = transposed_numeric_df.sort_values(by=\"random\", ascending = False)\n", + "print(sorted_df)" + ] }, { "cell_type": "markdown", @@ -266,10 +560,23 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "series_numerical False\n", + "series_random False\n", + "series_zeros False\n", + "Name: numerical, dtype: bool\n" + ] + } + ], + "source": [ + "print(sorted_df[\"numerical\"] > 2 )" + ] }, { "cell_type": "markdown", @@ -280,10 +587,52 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " numerical zeroes random d e random_5\n", + "series_numerical 0.000000 1.000000 2.000000 3.000000 4.000000 10.000000\n", + "series_random 0.783306 0.423269 0.538404 0.157979 0.431871 2.692021\n", + "series_zeros 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\yahar\\AppData\\Local\\Temp\\ipykernel_57908\\1350366751.py:6: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " select_rows = df[cond]\n" + ] + }, + { + "ename": "IndexingError", + "evalue": "Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mIndexingError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[75]\u001b[39m\u001b[32m, line 6\u001b[39m\n\u001b[32m 2\u001b[39m \u001b[38;5;28mprint\u001b[39m(sorted_df)\n\u001b[32m 4\u001b[39m cond = sorted_df[\u001b[33m\"\u001b[39m\u001b[33mnumerical\u001b[39m\u001b[33m\"\u001b[39m] > sorted_df[\u001b[33m\"\u001b[39m\u001b[33mrandom_5\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m----> \u001b[39m\u001b[32m6\u001b[39m select_rows = \u001b[43mdf\u001b[49m\u001b[43m[\u001b[49m\u001b[43mcond\u001b[49m\u001b[43m]\u001b[49m\n\u001b[32m 8\u001b[39m \u001b[38;5;28mprint\u001b[39m(select_rows) \n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\yahar\\anaconda3\\Lib\\site-packages\\pandas\\core\\frame.py:4093\u001b[39m, in \u001b[36mDataFrame.__getitem__\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 4091\u001b[39m \u001b[38;5;66;03m# Do we have a (boolean) 1d indexer?\u001b[39;00m\n\u001b[32m 4092\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m com.is_bool_indexer(key):\n\u001b[32m-> \u001b[39m\u001b[32m4093\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_getitem_bool_array\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 4095\u001b[39m \u001b[38;5;66;03m# We are left with two options: a single key, and a collection of keys,\u001b[39;00m\n\u001b[32m 4096\u001b[39m \u001b[38;5;66;03m# We interpret tuples as collections only for non-MultiIndex\u001b[39;00m\n\u001b[32m 4097\u001b[39m is_single_key = \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mtuple\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_list_like(key)\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\yahar\\anaconda3\\Lib\\site-packages\\pandas\\core\\frame.py:4149\u001b[39m, in \u001b[36mDataFrame._getitem_bool_array\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 4143\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 4144\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mItem wrong length \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(key)\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m instead of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m.index)\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 4145\u001b[39m )\n\u001b[32m 4147\u001b[39m \u001b[38;5;66;03m# check_bool_indexer will throw exception if Series key cannot\u001b[39;00m\n\u001b[32m 4148\u001b[39m \u001b[38;5;66;03m# be reindexed to match DataFrame rows\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m4149\u001b[39m key = \u001b[43mcheck_bool_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 4151\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m key.all():\n\u001b[32m 4152\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m.copy(deep=\u001b[38;5;28;01mNone\u001b[39;00m)\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\yahar\\anaconda3\\Lib\\site-packages\\pandas\\core\\indexing.py:2662\u001b[39m, in \u001b[36mcheck_bool_indexer\u001b[39m\u001b[34m(index, key)\u001b[39m\n\u001b[32m 2660\u001b[39m indexer = result.index.get_indexer_for(index)\n\u001b[32m 2661\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m -\u001b[32m1\u001b[39m \u001b[38;5;129;01min\u001b[39;00m indexer:\n\u001b[32m-> \u001b[39m\u001b[32m2662\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m IndexingError(\n\u001b[32m 2663\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mUnalignable boolean Series provided as \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 2664\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mindexer (index of the boolean Series and of \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 2665\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mthe indexed object do not match).\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 2666\u001b[39m )\n\u001b[32m 2668\u001b[39m result = result.take(indexer)\n\u001b[32m 2670\u001b[39m \u001b[38;5;66;03m# fall through for boolean\u001b[39;00m\n", + "\u001b[31mIndexingError\u001b[39m: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match)." + ] + } + ], + "source": [ + "sorted_df[\"random_5\"] = sorted_df[\"random\"] * 5 \n", + "print(sorted_df)\n", + "\n", + "cond = sorted_df[\"numerical\"] > sorted_df[\"random_5\"]\n", + "\n", + "select_rows = df[cond]\n", + "\n", + "print(select_rows) " + ] }, { "cell_type": "markdown", @@ -294,10 +643,30 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " numerical zeroes random d e \\\n", + "series_numerical 0.000000 1.000000 2.000000 3.000000 4.000000 \n", + "series_random 0.783306 0.423269 0.538404 0.157979 0.431871 \n", + "series_zeros 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "\n", + " random_5 even \n", + "series_numerical 10.000000 True \n", + "series_random 2.692021 False \n", + "series_zeros 0.000000 True \n" + ] + } + ], + "source": [ + "sorted_df[\"even\"] = sorted_df[\"numerical\"] % 2 == 0 \n", + "\n", + "print(sorted_df)" + ] }, { "cell_type": "markdown", @@ -308,10 +677,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "cannot assign to literal (3413497956.py, line 1)", + "output_type": "error", + "traceback": [ + " \u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[77]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[31m \u001b[39m\u001b[31msorted_df[\"even_odd\"] = \"odd\" = sorted_df[\"numerical\"] % 2 == 0\u001b[39m\n ^\n\u001b[31mSyntaxError\u001b[39m\u001b[31m:\u001b[39m cannot assign to literal\n" + ] + } + ], + "source": [ + "sorted_df[\"even_odd\"] = \"odd\" = sorted_df[\"numerical\"] % 2 == 0 " + ] }, { "cell_type": "markdown", @@ -322,10 +702,28 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numerical 0.783306\n", + "zeroes 1.423269\n", + "random 2.538404\n", + "d 3.157979\n", + "e 4.431871\n", + "random_5 12.692021\n", + "even 2.000000\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "sum_columns = sorted_df.sum()\n", + "print(sum_columns)" + ] }, { "cell_type": "markdown", @@ -338,8 +736,32 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'series_random'}\n", + "series_numerical\n", + "series_numerical\n", + "series_numerical\n", + "series_numerical\n" + ] + } + ], + "source": [ + "max_index_numerical = sorted_df[\"numerical\"].idxmax()\n", + "max_index_zeroes = sorted_df[\"zeroes\"].idxmax()\n", + "max_index_random = sorted_df[\"random\"].idxmax()\n", + "max_index_e = sorted_df[\"e\"].idxmax()\n", + "max_index_random_5 = sorted_df[\"random_5\"].idxmax()\n", + "\n", + "print(max_index_numerical)\n", + "print(max_index_zeroes)\n", + "print(max_index_random)\n", + "print(max_index_e)\n", + "print(max_index_random_5)" + ] } ], "metadata": { @@ -358,7 +780,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.13.5" } }, "nbformat": 4, From 168d68231f6e0925400f3c4d84536f3676b318f9 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Fri, 30 Jan 2026 13:48:07 -0800 Subject: [PATCH 10/15] final submission for week 4 pandas --- week_4_panadas.ipynb | 462 +++++++++++++++++++++++++++++++------------ 1 file changed, 337 insertions(+), 125 deletions(-) diff --git a/week_4_panadas.ipynb b/week_4_panadas.ipynb index ed5ae00..f0fa221 100644 --- a/week_4_panadas.ipynb +++ b/week_4_panadas.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -466,7 +466,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -474,20 +474,25 @@ "output_type": "stream", "text": [ " series_numerical series_zeros series_random\n", - "a 0 0 0.783306\n", - "b 1 0 0.423269\n", - "c 2 0 0.538404\n", - "d 3 0 0.157979\n", - "e 4 0 0.431871\n" + "a 0 0.0 0.516706\n", + "b 1 0.0 0.742704\n", + "c 2 0.0 0.487931\n", + "d 3 0.0 0.460146\n", + "e 4 0.0 0.542536\n" ] } ], "source": [ - "series_numerical = pd.Series([0, 1, 2, 3, 4], index=[\"a\",\"b\",\"c\",\"d\",\"e\"])\n", - "series_zeros = pd.Series(data = 0,index = [\"a\",\"b\",\"c\",\"d\",\"e\"])\n", + "numbers = np.array([0, 1, 2, 3, 4])\n", + "zeros = np.zeros(5)\n", "random_nums = np.random.rand(5)\n", - "series_random = pd.Series(random_nums, index =[\"a\",\"b\",\"c\",\"d\",\"e\"])\n", "\n", + "\n", + "\n", + "\n", + "series_numerical = pd.Series(numbers, index=[\"a\",\"b\",\"c\",\"d\",\"e\"])\n", + "series_zeros = pd.Series(zeros, index=[\"a\",\"b\",\"c\",\"d\",\"e\"])\n", + "series_random = pd.Series(random_nums, index =[\"a\",\"b\",\"c\",\"d\",\"e\"])\n", "numeric_df = pd.DataFrame({\"series_numerical\": series_numerical,\n", " \"series_zeros\": series_zeros,\n", " \"series_random\": series_random})\n", @@ -503,24 +508,75 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 26, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " numerical zeroes random d e\n", - "series_numerical 0.000000 1.000000 2.000000 3.000000 4.000000\n", - "series_zeros 0.000000 0.000000 0.000000 0.000000 0.000000\n", - "series_random 0.783306 0.423269 0.538404 0.157979 0.431871\n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numericalzerosrandom
series_numerical0.0000001.0000002.000000
series_zeros0.0000000.0000000.000000
series_random0.5167060.7427040.487931
\n", + "
" + ], + "text/plain": [ + " numerical zeros random\n", + "series_numerical 0.000000 1.000000 2.000000\n", + "series_zeros 0.000000 0.000000 0.000000\n", + "series_random 0.516706 0.742704 0.487931" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "transposed = numeric_df.T\n", - "transposed_numeric_df = transposed.rename(columns ={\"a\": \"numerical\", \"b\": \"zeroes\", \"c\": \"random\"})\n", - "print(transposed_numeric_df)" + "transposed_numeric_df = numeric_df.T.loc[:,[\"a\", \"b\", \"c\" ]].rename(\n", + " columns={\"a\": \"numerical\", \"b\": \"zeros\", \"c\": \"random\"}\n", + ")\n", + "transposed_numeric_df" ] }, { @@ -532,23 +588,23 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " numerical zeroes random d e\n", - "series_numerical 0.000000 1.000000 2.000000 3.000000 4.000000\n", - "series_random 0.783306 0.423269 0.538404 0.157979 0.431871\n", - "series_zeros 0.000000 0.000000 0.000000 0.000000 0.000000\n" + " numerical zeros random\n", + "series_numerical 0.000000 1.000000 2.000000\n", + "series_zeros 0.000000 0.000000 0.000000\n", + "series_random 0.516706 0.742704 0.487931\n" ] } ], "source": [ - "sorted_df = transposed_numeric_df.sort_values(by=\"random\", ascending = False)\n", - "print(sorted_df)" + "transposed_numeric_df.sort_values(by=\"random\", ascending = False)\n", + "print(transposed_numeric_df)" ] }, { @@ -560,22 +616,54 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 28, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "series_numerical False\n", - "series_random False\n", - "series_zeros False\n", - "Name: numerical, dtype: bool\n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numericalzerosrandom
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [numerical, zeros, random]\n", + "Index: []" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print(sorted_df[\"numerical\"] > 2 )" + "greater_than_two = transposed_numeric_df[transposed_numeric_df[\"numerical\"] > 2]\n", + "greater_than_two" ] }, { @@ -587,51 +675,68 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " numerical zeroes random d e random_5\n", - "series_numerical 0.000000 1.000000 2.000000 3.000000 4.000000 10.000000\n", - "series_random 0.783306 0.423269 0.538404 0.157979 0.431871 2.692021\n", - "series_zeros 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\yahar\\AppData\\Local\\Temp\\ipykernel_57908\\1350366751.py:6: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", - " select_rows = df[cond]\n" + " numerical zeros random random_5\n", + "series_numerical 0.000000 1.000000 2.000000 10.000000\n", + "series_zeros 0.000000 0.000000 0.000000 0.000000\n", + "series_random 0.516706 0.742704 0.487931 2.439657\n" ] }, { - "ename": "IndexingError", - "evalue": "Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mIndexingError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[75]\u001b[39m\u001b[32m, line 6\u001b[39m\n\u001b[32m 2\u001b[39m \u001b[38;5;28mprint\u001b[39m(sorted_df)\n\u001b[32m 4\u001b[39m cond = sorted_df[\u001b[33m\"\u001b[39m\u001b[33mnumerical\u001b[39m\u001b[33m\"\u001b[39m] > sorted_df[\u001b[33m\"\u001b[39m\u001b[33mrandom_5\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m----> \u001b[39m\u001b[32m6\u001b[39m select_rows = \u001b[43mdf\u001b[49m\u001b[43m[\u001b[49m\u001b[43mcond\u001b[49m\u001b[43m]\u001b[49m\n\u001b[32m 8\u001b[39m \u001b[38;5;28mprint\u001b[39m(select_rows) \n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\yahar\\anaconda3\\Lib\\site-packages\\pandas\\core\\frame.py:4093\u001b[39m, in \u001b[36mDataFrame.__getitem__\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 4091\u001b[39m \u001b[38;5;66;03m# Do we have a (boolean) 1d indexer?\u001b[39;00m\n\u001b[32m 4092\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m com.is_bool_indexer(key):\n\u001b[32m-> \u001b[39m\u001b[32m4093\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_getitem_bool_array\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 4095\u001b[39m \u001b[38;5;66;03m# We are left with two options: a single key, and a collection of keys,\u001b[39;00m\n\u001b[32m 4096\u001b[39m \u001b[38;5;66;03m# We interpret tuples as collections only for non-MultiIndex\u001b[39;00m\n\u001b[32m 4097\u001b[39m is_single_key = \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mtuple\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_list_like(key)\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\yahar\\anaconda3\\Lib\\site-packages\\pandas\\core\\frame.py:4149\u001b[39m, in \u001b[36mDataFrame._getitem_bool_array\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 4143\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 4144\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mItem wrong length \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(key)\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m instead of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m.index)\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 4145\u001b[39m )\n\u001b[32m 4147\u001b[39m \u001b[38;5;66;03m# check_bool_indexer will throw exception if Series key cannot\u001b[39;00m\n\u001b[32m 4148\u001b[39m \u001b[38;5;66;03m# be reindexed to match DataFrame rows\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m4149\u001b[39m key = \u001b[43mcheck_bool_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 4151\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m key.all():\n\u001b[32m 4152\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m.copy(deep=\u001b[38;5;28;01mNone\u001b[39;00m)\n", - "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\yahar\\anaconda3\\Lib\\site-packages\\pandas\\core\\indexing.py:2662\u001b[39m, in \u001b[36mcheck_bool_indexer\u001b[39m\u001b[34m(index, key)\u001b[39m\n\u001b[32m 2660\u001b[39m indexer = result.index.get_indexer_for(index)\n\u001b[32m 2661\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m -\u001b[32m1\u001b[39m \u001b[38;5;129;01min\u001b[39;00m indexer:\n\u001b[32m-> \u001b[39m\u001b[32m2662\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m IndexingError(\n\u001b[32m 2663\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mUnalignable boolean Series provided as \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 2664\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mindexer (index of the boolean Series and of \u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 2665\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mthe indexed object do not match).\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 2666\u001b[39m )\n\u001b[32m 2668\u001b[39m result = result.take(indexer)\n\u001b[32m 2670\u001b[39m \u001b[38;5;66;03m# fall through for boolean\u001b[39;00m\n", - "\u001b[31mIndexingError\u001b[39m: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match)." - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numericalzerosrandomrandom_5
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [numerical, zeros, random, random_5]\n", + "Index: []" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "sorted_df[\"random_5\"] = sorted_df[\"random\"] * 5 \n", - "print(sorted_df)\n", + "transposed_numeric_df[\"random_5\"] = transposed_numeric_df[\"random\"] * 5 \n", + "print(transposed_numeric_df)\n", + "greater_than_random_5 = transposed_numeric_df[transposed_numeric_df[\"numerical\"] > transposed_numeric_df[\"random_5\"]]\n", "\n", - "cond = sorted_df[\"numerical\"] > sorted_df[\"random_5\"]\n", - "\n", - "select_rows = df[cond]\n", - "\n", - "print(select_rows) " + "greater_than_random_5" ] }, { @@ -643,29 +748,83 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 36, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " numerical zeroes random d e \\\n", - "series_numerical 0.000000 1.000000 2.000000 3.000000 4.000000 \n", - "series_random 0.783306 0.423269 0.538404 0.157979 0.431871 \n", - "series_zeros 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "\n", - " random_5 even \n", - "series_numerical 10.000000 True \n", - "series_random 2.692021 False \n", - "series_zeros 0.000000 True \n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numericalzerosrandomrandom_5even
series_numerical0.0000001.0000002.00000010.000000True
series_zeros0.0000000.0000000.0000000.000000True
series_random0.5167060.7427040.4879312.439657False
\n", + "
" + ], + "text/plain": [ + " numerical zeros random random_5 even\n", + "series_numerical 0.000000 1.000000 2.000000 10.000000 True\n", + "series_zeros 0.000000 0.000000 0.000000 0.000000 True\n", + "series_random 0.516706 0.742704 0.487931 2.439657 False" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "sorted_df[\"even\"] = sorted_df[\"numerical\"] % 2 == 0 \n", + "transposed_numeric_df[\"even\"] = transposed_numeric_df[\"numerical\"] % 2 == 0\n", "\n", - "print(sorted_df)" + "\n", + "transposed_numeric_df" ] }, { @@ -677,20 +836,85 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 40, "metadata": {}, "outputs": [ { - "ename": "SyntaxError", - "evalue": "cannot assign to literal (3413497956.py, line 1)", - "output_type": "error", - "traceback": [ - " \u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[77]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[31m \u001b[39m\u001b[31msorted_df[\"even_odd\"] = \"odd\" = sorted_df[\"numerical\"] % 2 == 0\u001b[39m\n ^\n\u001b[31mSyntaxError\u001b[39m\u001b[31m:\u001b[39m cannot assign to literal\n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
numericalzerosrandomrandom_5eveneven_odd
series_numerical0.0000001.0000002.00000010.000000Trueeven
series_zeros0.0000000.0000000.0000000.000000Trueeven
series_random0.5167060.7427040.4879312.439657Falseodd
\n", + "
" + ], + "text/plain": [ + " numerical zeros random random_5 even even_odd\n", + "series_numerical 0.000000 1.000000 2.000000 10.000000 True even\n", + "series_zeros 0.000000 0.000000 0.000000 0.000000 True even\n", + "series_random 0.516706 0.742704 0.487931 2.439657 False odd" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "sorted_df[\"even_odd\"] = \"odd\" = sorted_df[\"numerical\"] % 2 == 0 " + "transposed_numeric_df[\"even_odd\"] = np.where(transposed_numeric_df[\"numerical\"] % 2 != 0, \"odd\", \"even\")\n", + "transposed_numeric_df" ] }, { @@ -702,26 +926,25 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "numerical 0.783306\n", - "zeroes 1.423269\n", - "random 2.538404\n", - "d 3.157979\n", - "e 4.431871\n", - "random_5 12.692021\n", - "even 2.000000\n", - "dtype: float64\n" + "numerical 0.516706\n", + "zeros 1.742704\n", + "random 2.487931\n", + "random_5 12.439657\n", + "even 2\n", + "even_odd evenevenodd\n", + "dtype: object\n" ] } ], "source": [ - "sum_columns = sorted_df.sum()\n", + "sum_columns = transposed_numeric_df.sum()\n", "print(sum_columns)" ] }, @@ -738,29 +961,18 @@ "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'series_random'}\n", - "series_numerical\n", - "series_numerical\n", - "series_numerical\n", - "series_numerical\n" - ] + "data": { + "text/plain": [ + "'series_random'" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "max_index_numerical = sorted_df[\"numerical\"].idxmax()\n", - "max_index_zeroes = sorted_df[\"zeroes\"].idxmax()\n", - "max_index_random = sorted_df[\"random\"].idxmax()\n", - "max_index_e = sorted_df[\"e\"].idxmax()\n", - "max_index_random_5 = sorted_df[\"random_5\"].idxmax()\n", - "\n", - "print(max_index_numerical)\n", - "print(max_index_zeroes)\n", - "print(max_index_random)\n", - "print(max_index_e)\n", - "print(max_index_random_5)" + "transposed_numeric_df[\"numerical\"].idxmax()\n" ] } ], From 75c395b6f48cc3f661c0f3650ebd923182ec2dcc Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Tue, 3 Feb 2026 15:26:19 -0800 Subject: [PATCH 11/15] init commit --- week_5_vectors_applications.ipynb | 78 ++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 17 deletions(-) diff --git a/week_5_vectors_applications.ipynb b/week_5_vectors_applications.ipynb index 11948c0..6e486c6 100644 --- a/week_5_vectors_applications.ipynb +++ b/week_5_vectors_applications.ipynb @@ -28,16 +28,27 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[4 3 2]\n", + "[9 8 7]\n" + ] + } + ], "source": [ "queen = np.array([5, 6, 4])\n", "women = np.array([1, 3, 2])\n", "man = np.array([5, 5, 5])\n", - "royalty = None\n", - "king = None\n", - "\n" + "royalty = queen - women\n", + "king = man + royalty \n", + "\n", + "print(royalty)\n", + "print(king)" ] }, { @@ -54,11 +65,21 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test passed for [5]\n", + "Test passed for [3.2 0.1]\n", + "Test passed for [-2 2 2]\n", + "Test passed for [34 31 78 4 7 3 50 58 96 41]\n" + ] + } + ], "source": [ - "def vector_magnitude(np_vector: npt.NDArray) -> np.float64:\n", - " #Write your code here\n", - " return \n", + "def vector_magnitude(np_vector):\n", + " return np.sqrt(np.sum(np_vector ** 2))\n", "\n", "def test_vector_magnitude(np_vector: npt.NDArray) -> None:\n", " if vector_magnitude(np_vector) == np.linalg.norm(np_vector):\n", @@ -90,7 +111,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -98,7 +119,10 @@ "d2_unit_vector = np.array([0.99951208, 0.03123475])\n", "d3_unit_vector = np.array([-0.57735027, 0.57735027, 0.57735027])\n", "\n", - "#Impliment vector_magnitude and test_vector_magnitude here" + "#Impliment vector_magnitude and test_vector_magnitude here\n", + "def create_unitvector(np_vector):\n", + " magnitude = vector_magnitude(np_vector)\n", + " return np_vector / magnitude " ] }, { @@ -118,7 +142,10 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def dot_product(v1, v2):\n", + " return np.sum(v1 * v2) " + ] }, { "cell_type": "markdown", @@ -146,7 +173,16 @@ "cat_1_actual_weight = 24.21\n", "\n", "cat_2_array = np.array([19.04, 6.93])\n", - "cat_2_actual_weight = 13.831" + "cat_2_actual_weight = 13.831\n", + "\n", + "def predict_weight(cat_length, cat_height):\n", + " weight_calc = (0.23 * cat_length) + (1.07 * cat_height + 3.412)\n", + " return weight_calc \n", + "\n", + "def prediction_error(predicted_weight, actual_weight):\n", + " actual_formula = abs(predicted_weight - actual_weight)\n", + " return actual_formula \n", + " " ] }, { @@ -182,10 +218,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def linear_comb_loop(scalars_array, vectors_array):\n", + " output = np.zeroes(vectors_array.shape[1])\n", + " for i in range(len(scalars_array)):\n", + " output = output + scalars_array[i] * vectors_array[i]\n", + " \n", + " return output \n", + "\n" + ] }, { "cell_type": "markdown", @@ -265,7 +309,7 @@ ], "metadata": { "kernelspec": { - "display_name": "AD_450_env", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -279,7 +323,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.16" + "version": "3.13.7" } }, "nbformat": 4, From 64b59ceb0a076edcd105810052be4c330aa81385 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Fri, 6 Feb 2026 20:08:01 -0800 Subject: [PATCH 12/15] wk5 final submission for vectors applications --- week_5_vectors_applications.ipynb | 211 ++++++++++++++++++++++++++---- 1 file changed, 183 insertions(+), 28 deletions(-) diff --git a/week_5_vectors_applications.ipynb b/week_5_vectors_applications.ipynb index 6e486c6..f403cd7 100644 --- a/week_5_vectors_applications.ipynb +++ b/week_5_vectors_applications.ipynb @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -73,7 +73,7 @@ "Test passed for [5]\n", "Test passed for [3.2 0.1]\n", "Test passed for [-2 2 2]\n", - "Test passed for [34 31 78 4 7 3 50 58 96 41]\n" + "Test passed for [91 6 86 53 16 47 60 15 23 60]\n" ] } ], @@ -111,9 +111,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "test passed for [1.]\n", + "test passed for [0.99951208 0.03123475]\n", + "test passed for [-0.57735027 0.57735027 0.57735027]\n" + ] + } + ], "source": [ "d1_unit_vector = np.array([1.])\n", "d2_unit_vector = np.array([0.99951208, 0.03123475])\n", @@ -122,7 +132,18 @@ "#Impliment vector_magnitude and test_vector_magnitude here\n", "def create_unitvector(np_vector):\n", " magnitude = vector_magnitude(np_vector)\n", - " return np_vector / magnitude " + " return np_vector / magnitude \n", + "\n", + "def test_create_unitvector(np_vector):\n", + " unit_vector = create_unitvector(np_vector)\n", + " if np.allclose(vector_magnitude(unit_vector), 1):\n", + " print(f\"test passed for {np_vector}\")\n", + " else:\n", + " print(f\"test failed for {np_vector}\")\n", + "\n", + "test_create_unitvector(d1_unit_vector)\n", + "test_create_unitvector(d2_unit_vector)\n", + "test_create_unitvector(d3_unit_vector)" ] }, { @@ -139,12 +160,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "32\n", + "96.46196751207427\n", + "0.0\n" + ] + } + ], "source": [ "def dot_product(v1, v2):\n", - " return np.sum(v1 * v2) " + " return np.sum(v1 * v2) \n", + "\n", + "vec1 = np.array([1,2,3])\n", + "vec2 = np.array([4,5,6])\n", + "\n", + "ans1 = dot_product(vec1, vec2)\n", + "\n", + "rand_int = np.random.randint(low = 0, high = 10, size = 5)\n", + "rand_float = np.random.uniform(low = 0, high = 10, size = 5) \n", + "\n", + "dot_product(rand_int, rand_float)\n", + "\n", + "ans2 = dot_product(rand_int, rand_float)\n", + "\n", + "\n", + "vec_zeroes = np.zeros([])\n", + "vec_negatives = np.random.randint(low = -30, high = -5, size = 5)\n", + "\n", + "ans3 = dot_product(vec_zeroes, vec_negatives) \n", + "\n", + "print(ans1)\n", + "print(ans2)\n", + "print(ans3)" ] }, { @@ -165,7 +218,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -218,17 +271,32 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[14. 18.]\n" + ] + } + ], "source": [ + "\n", + "\n", "def linear_comb_loop(scalars_array, vectors_array):\n", - " output = np.zeroes(vectors_array.shape[1])\n", + " output = np.zeros(vectors_array.shape[1])\n", " for i in range(len(scalars_array)):\n", " output = output + scalars_array[i] * vectors_array[i]\n", - " \n", - " return output \n", - "\n" + " return output\n", + "\n", + "scalars = np.array([1,2,3])\n", + "vectors = np.array([[1,3], [2,3], [3,3]]) \n", + "\n", + "ans = linear_comb_loop(scalars, vectors)\n", + "\n", + "print(ans) \n" ] }, { @@ -242,22 +310,36 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 101, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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W+ZJSEjwVFdXe+zswQcf9OTk5Hjs6JlnnvG4XC6PXfTr188zadKkmsfHjx/3dOjQwVNUVOSxI/2z5pVXXvE4wZ49e4yv99133/XYXatWrTxPP/20x24OHDjg6dq1q2f58uWen/zkJ57bbrstZv/fjl9R2b17t4wfP16ee+45YyndCfbt2yd/+tOfjO2DpKQksTO32y0ZGRnxvg0EsUqkfysdOnRorXO89HFJSQnfPxv8d6js/N/i8ePHZenSpcaqkW4B2c2kSZNk1KhRtf4bjRVHBxX9S811110nEyZMkHPOOUfsbtq0aZKWliaZmZny1VdfybJly8TOtmzZIo8//rjccsst8b4VNODbb781/qBv165dref1cUVFBd8/C9PtWK1nGDBggPTs2VPs5rPPPpNTTjnFmE6rv0teeeUVycvLEztZunSpsR2rtUfxYMugMn36dKPYp74PrWfQX2J6xHRhYaHY+ev0uvPOO2X9+vXy1ltvSWJiolx77bVGWLPb16l27twpI0aMMGo5dMXMjl8jYJW/iW/cuNH4ZWdH3bt3NxowPvzwQ6NubNy4cVJWViZ2sWPHDrntttuMVXgtco8HW47Q/+abb2Tv3r31vqZz587ys5/9TF5//XXjl4CX/q1Of4n/6le/ksWLF4sdvs7k5OSTnv/6668lOztbVq9ebfplylC/Tu1muuiii+S8886TRYsWGVsIZhfOz1K/Nv2b6v79+8UOWz+69fqXv/zF6BDx0j/09euz4+qf/rmjf/v2/XrtZvLkycbPTrudtBvPCXRrRDsOtejUDl599VW54oorjN+Lvr8n9d9f/bNVO2Z9r0VDU7GhNm3aGB8Neeyxx+T++++veay/4LTLQLsPtDXSLl9noOVYpf+S2enr1JUU7XA6++yz5ZlnnrFESGnsz9IONIDpz2zlypU1v7j131F9rL/sYC36999bb73VCGL/+Mc/HBNSvP/eWuHP1WANGTLE2N7ydf3110uPHj2McoJohxTbBpVg6VwRX7rPqDQNa9uZXeiSpLaVXXDBBdKqVSujNXnmzJnG12n21ZRQaEjRlZSOHTvK73//e2OVwisrK0vsQuuLtCBaP+vfbLxzf3Jzc2v+HbYibU3WFRStF+vXr5888sgjRmGi/qFoFwcPHjRqp7y2bdtm/Py0yLTun0dW3+55/vnnjdUUnaXirTNyuVzGjCO70LKBSy65xPjZaRmBfs0azP7+97+LXbRo0eKk2iJvrWPMao5i1l9kAdu2bbNle3Jpaaln0KBBnoyMDE9KSoqnU6dOngkTJni+/vprj93adfXn5+/DTsaNG+f3a3znnXc8Vvf44497Tj/9dE9ycrLRrrxmzRqPnejPyN/PTn+mdhLov0P9b9RObrjhBk/Hjh2Nf1/btGnjGTJkiOett97y2N1PYtyebMsaFQAAYA/W2MAHAACORFABAACmRVABAACmRVABAACmRVABAACmRVABAACmRVABAACmRVABAACmRVABAACmRVABAACmRVABAACmRVABAABiVv8P8rq7sffWWm0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", + "rng = np.random.default_rng()\n", + "\n", + "\n", + "basis = np.array([1,3])\n", + "random_scalars = rng.uniform(low=-4, high=4, size=100)\n", + "\n", + "points = random_scalars[:, None] * basis \n", "\n", "def plot_vectors(vectors):\n", " plt.scatter(*zip(*vectors))\n", - " plt.show()" + " plt.show()\n", + "\n", + "\n", + "plot_vectors(points)" ] }, { @@ -303,8 +385,81 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result of pearsons on normal array: -0.5697053482592404\n", + "result of cosine on normal array : 0.6900018763245179\n", + "result of pearsons on mean centered array array: 1.0\n", + "result of cosine on mean centered array : 1.0\n" + ] + } + ], + "source": [ + "\n", + "\n", + "def test_persons(vec1, vec2):\n", + " mean_vec1 = np.mean(vec1)\n", + " mean_vec2 = np.mean(vec2) \n", + "\n", + " x_not = vec1 - mean_vec1\n", + " y_not = vec2 - mean_vec2 \n", + "\n", + " xy_mult = x_not * y_not \n", + "\n", + " x_sum = np.sum(x_not * x_not)\n", + " y_sum = np.sum(y_not * y_not)\n", + "\n", + " x_sum_sqrt = np.sqrt(x_sum)\n", + " y_sum_sqrt = np.sqrt(y_sum) \n", + "\n", + " numerator = np.sum(xy_mult)\n", + " denominator = x_sum_sqrt * y_sum_sqrt \n", + "\n", + " return numerator / denominator\n", + "\n", + "\n", + "def test_cosine(vec1, vec2):\n", + " dot_product = np.dot(vec1, vec2)\n", + "\n", + " vec1_squared_sum = np.sum(vec1 * vec1)\n", + " vec2_squared_sum = np.sum(vec2 * vec2)\n", + "\n", + " mag_vec1 = np.sqrt(vec1_squared_sum)\n", + " mag_vec2 = np.sqrt(vec2_squared_sum) \n", + "\n", + " return dot_product / (mag_vec1 * mag_vec2) \n", + "\n", + "mean_centered_array = np.array([-2,-1,0,1,2])\n", + "mean_centered_array2 = np.array([-30,-15,0,15,30])\n", + "\n", + "normal_array = np.array([2,4,6,8,10])\n", + "normal_array2 = np.array([52,100,95,40,18])\n", + "\n", + "result1 = test_persons(normal_array, normal_array2)\n", + "result2 = test_cosine(normal_array, normal_array2)\n", + "\n", + "result3 = test_persons(mean_centered_array, mean_centered_array2)\n", + "result4 = test_cosine(mean_centered_array, mean_centered_array2) \n", + "\n", + "print(f\"result of pearsons on normal array: {result1}\")\n", + "print(f\"result of cosine on normal array : {result2}\")\n", + "\n", + "print(f\"result of pearsons on mean centered array array: {result3}\")\n", + "print(f\"result of cosine on mean centered array : {result4}\")\n", + "\n", + "#i found that thhe pearsons coefficient and cosine on the mean centered array was both exactly 1. additionally, an array that is \n", + "#a factor of another will also have a coefficient and cosine of 1. i experimented with another vector of 4,8,12,16,20 along with\n", + "# the vector 2,4,6,8,10. \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] } ], "metadata": { From 4bdaf10f58a0b0b7fb9e19fe91033b3879e00fd7 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Tue, 10 Feb 2026 17:06:11 -0800 Subject: [PATCH 13/15] wk6 initial submission --- week_6_eda_matrix.ipynb | 395 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 362 insertions(+), 33 deletions(-) diff --git a/week_6_eda_matrix.ipynb b/week_6_eda_matrix.ipynb index 1e2044d..c0bae22 100644 --- a/week_6_eda_matrix.ipynb +++ b/week_6_eda_matrix.ipynb @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -113,7 +113,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -137,9 +137,84 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
YearAge GroupDeath Rate
019001-4 Years1983.8
119011-4 Years1695.0
219021-4 Years1655.7
319031-4 Years1542.1
419041-4 Years1591.5
\n", + "
" + ], + "text/plain": [ + " Year Age Group Death Rate\n", + "0 1900 1-4 Years 1983.8\n", + "1 1901 1-4 Years 1695.0\n", + "2 1902 1-4 Years 1655.7\n", + "3 1903 1-4 Years 1542.1\n", + "4 1904 1-4 Years 1591.5" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# get example data from pulic internet location\n", "url = \"https://data.cdc.gov/api/views/v6ab-adf5/rows.csv?accessType=DOWNLOAD\"\n", @@ -158,9 +233,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "('mortality_data.csv', )" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "from urllib import request\n", "data_url = \"https://data.cdc.gov/api/views/v6ab-adf5/rows.csv?accessType=DOWNLOAD\"\n", @@ -232,9 +318,77 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'cities': [{'name': 'Anchorage', 'pop': 250000, 'region': 'south-central'},\n", + " {'name': 'Fairbanks', 'pop': 75000, 'region': 'interior'},\n", + " {'name': 'Juneau', 'pop': 25000, 'region': 'south-east'}],\n", + " 'industries': ['fishing', 'mining', 'tourism'],\n", + " 'state': 'AK'}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namepop
0Anchorage250000
1Fairbanks75000
2Juneau25000
\n", + "
" + ], + "text/plain": [ + " name pop\n", + "0 Anchorage 250000\n", + "1 Fairbanks 75000\n", + "2 Juneau 25000" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "#\n", "json_string = \"\"\"\n", @@ -319,7 +473,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -343,10 +497,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1794\n", + "15\n" + ] + } + ], + "source": [ + "print(movie_df.shape[0])\n", + "print(movie_df.shape[1])\n" + ] }, { "cell_type": "markdown", @@ -362,10 +528,67 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " year imdb title test clean_test \\\n", + "0 2013 tt1711425 21 & Over notalk notalk \n", + "1 2012 tt1343727 Dredd 3D ok-disagree ok \n", + "2 2013 tt2024544 12 Years a Slave notalk-disagree notalk \n", + "3 2013 tt1272878 2 Guns notalk notalk \n", + "4 2013 tt0453562 42 men men \n", + "5 2013 tt1335975 47 Ronin men men \n", + "6 2013 tt1606378 A Good Day to Die Hard notalk notalk \n", + "7 2013 tt2194499 About Time ok-disagree ok \n", + "8 2013 tt1814621 Admission ok ok \n", + "9 2013 tt1815862 After Earth notalk notalk \n", + "10 2013 tt1800241 American Hustle ok-disagree ok \n", + "\n", + " binary budget domgross intgross code budget_2013$ \\\n", + "0 FAIL 13000000 25682380.0 42195766.0 2013FAIL 13000000 \n", + "1 PASS 45000000 13414714.0 40868994.0 2012PASS 45658735 \n", + "2 FAIL 20000000 53107035.0 158607035.0 2013FAIL 20000000 \n", + "3 FAIL 61000000 75612460.0 132493015.0 2013FAIL 61000000 \n", + "4 FAIL 40000000 95020213.0 95020213.0 2013FAIL 40000000 \n", + "5 FAIL 225000000 38362475.0 145803842.0 2013FAIL 225000000 \n", + "6 FAIL 92000000 67349198.0 304249198.0 2013FAIL 92000000 \n", + "7 PASS 12000000 15323921.0 87324746.0 2013PASS 12000000 \n", + "8 PASS 13000000 18007317.0 18007317.0 2013PASS 13000000 \n", + "9 FAIL 130000000 60522097.0 244373198.0 2013FAIL 130000000 \n", + "10 PASS 40000000 148430908.0 249484909.0 2013PASS 40000000 \n", + "\n", + " domgross_2013$ intgross_2013$ period code decade code \n", + "0 25682380.0 42195766.0 1.0 1.0 \n", + "1 13611086.0 41467257.0 1.0 1.0 \n", + "2 53107035.0 158607035.0 1.0 1.0 \n", + "3 75612460.0 132493015.0 1.0 1.0 \n", + "4 95020213.0 95020213.0 1.0 1.0 \n", + "5 38362475.0 145803842.0 1.0 1.0 \n", + "6 67349198.0 304249198.0 1.0 1.0 \n", + "7 15323921.0 87324746.0 1.0 1.0 \n", + "8 18007317.0 18007317.0 1.0 1.0 \n", + "9 60522097.0 244373198.0 1.0 1.0 \n", + "10 148430908.0 249484909.0 1.0 1.0 \n", + "\n", + "\n", + "Index(['year', 'imdb', 'title', 'test', 'clean_test', 'binary', 'budget',\n", + " 'domgross', 'intgross', 'code', 'budget_2013$', 'domgross_2013$',\n", + " 'intgross_2013$', 'period code', 'decade code'],\n", + " dtype='object')\n", + "dependent variable is gross product\n" + ] + } + ], + "source": [ + "print(movie_df.iloc[:11])\n", + "print(\"\\n\")\n", + "print(movie_df.columns)\n", + "print(\"dependent variable is gross product\")" + ] }, { "cell_type": "markdown", @@ -381,17 +604,80 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "year 0\n", + "imdb 0\n", + "title 0\n", + "test 0\n", + "clean_test 0\n", + "binary 0\n", + "budget 0\n", + "domgross 17\n", + "intgross 11\n", + "code 0\n", + "budget_2013$ 0\n", + "domgross_2013$ 18\n", + "intgross_2013$ 11\n", + "period code 179\n", + "decade code 179\n", + "dtype: int64\n", + " year budget domgross intgross budget_2013$ \\\n", + "count 1794.000000 1.794000e+03 1.777000e+03 1.783000e+03 1.794000e+03 \n", + "mean 2002.552397 4.482646e+07 6.913205e+07 1.503857e+08 5.546461e+07 \n", + "std 8.979731 4.818603e+07 8.036731e+07 2.103353e+08 5.491864e+07 \n", + "min 1970.000000 7.000000e+03 0.000000e+00 8.280000e+02 8.632000e+03 \n", + "25% 1998.000000 1.200000e+07 1.631157e+07 2.612947e+07 1.606892e+07 \n", + "50% 2005.000000 2.800000e+07 4.219406e+07 7.648246e+07 3.699579e+07 \n", + "75% 2009.000000 6.000000e+07 9.335492e+07 1.898509e+08 7.833790e+07 \n", + "max 2013.000000 4.250000e+08 7.605076e+08 2.783919e+09 4.614359e+08 \n", + "\n", + " domgross_2013$ intgross_2013$ period code decade code \n", + "count 1.776000e+03 1.783000e+03 1615.000000 1615.000000 \n", + "mean 9.517478e+07 1.978380e+08 2.419814 1.937461 \n", + "std 1.259653e+08 2.835079e+08 1.194620 0.690116 \n", + "min 8.990000e+02 8.990000e+02 1.000000 1.000000 \n", + "25% 2.054659e+07 3.323260e+07 1.000000 1.000000 \n", + "50% 5.599364e+07 9.623964e+07 2.000000 2.000000 \n", + "75% 1.216784e+08 2.414790e+08 3.000000 2.000000 \n", + "max 1.771683e+09 3.171931e+09 5.000000 3.000000 \n" + ] + } + ], + "source": [ + "null_values = movie_df.isnull().sum() \n", + "print(null_values)\n", + "\n", + "statistics = movie_df.describe()\n", + "print(statistics) " + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " imdb title test clean_test binary code\n", + "count 1794 1794 1794 1794 1794 1794\n", + "unique 1794 1768 10 5 2 85\n", + "top tt0065466 Pride and Prejudice ok ok FAIL 2009FAIL\n", + "freq 1 3 696 803 991 82\n" + ] + } + ], + "source": [ + "objects = movie_df.describe(include = \"object\")\n", + "print(objects) " + ] }, { "cell_type": "markdown", @@ -452,10 +738,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['year', 'budget', 'domgross', 'intgross', 'budget_2013$', 'domgross_2013$', 'intgross_2013$', 'period code', 'decade code']\n", + "['imdb', 'title', 'test', 'clean_test', 'binary', 'code']\n", + "['year', 'budget', 'domgross', 'intgross', 'budget_2013$', 'domgross_2013$', 'intgross_2013$', 'period code', 'decade code']\n", + "['imdb', 'title', 'test', 'clean_test', 'binary', 'code']\n" + ] + } + ], + "source": [ + "numeric_features1 = movie_df.select_dtypes(include=['number']).columns.tolist()\n", + "categorical_features1 = movie_df.select_dtypes(include=['object']).columns.tolist()\n", + "\n", + "print(numeric_features1)\n", + "print(categorical_features1)\n", + "\n", + "numeric_feature2 = [col for col in movie_df.columns if movie_df[col].dtype == 'int64' or movie_df[col].dtype == 'float64']\n", + "categorical_features2 = [col for col in movie_df.columns if movie_df[col].dtype == 'object']\n", + "\n", + "print(numeric_feature2)\n", + "print(categorical_features2)\n", + "\n", + "\n", + "\n" + ] }, { "cell_type": "markdown", @@ -467,10 +779,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'list' object has no attribute 'nunique'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[52]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m col \u001b[38;5;129;01min\u001b[39;00m categorical_features1:\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[43m[\u001b[49m\u001b[43mcol\u001b[49m\u001b[43m]\u001b[49m\u001b[43m.\u001b[49m\u001b[43mnunique\u001b[49m() <= \u001b[32m10\u001b[39m:\n\u001b[32m 3\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mColumn : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcol\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m 4\u001b[39m \u001b[38;5;28mprint\u001b[39m(df)\n", + "\u001b[31mAttributeError\u001b[39m: 'list' object has no attribute 'nunique'" + ] + } + ], + "source": [ + "for col in categorical_features1:\n", + " if [col].nunique() <= 10:\n", + " print(f\"Column : {col}\")\n", + " print(df)" + ] }, { "cell_type": "markdown", @@ -608,7 +937,7 @@ ], "metadata": { "kernelspec": { - "display_name": "AD_450_env", + "display_name": "base", "language": "python", "name": "python3" }, @@ -622,7 +951,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.16" + "version": "3.13.5" } }, "nbformat": 4, From 41b40bb6ac0d2c92d169e3ab507b35724258e9f3 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Tue, 10 Feb 2026 21:51:16 -0800 Subject: [PATCH 14/15] wk 6 init submission --- week_6_eda_matrix.ipynb | 186 +++++++++++++++++++++++++++++++++------- 1 file changed, 156 insertions(+), 30 deletions(-) diff --git a/week_6_eda_matrix.ipynb b/week_6_eda_matrix.ipynb index c0bae22..8d67ab5 100644 --- a/week_6_eda_matrix.ipynb +++ b/week_6_eda_matrix.ipynb @@ -738,7 +738,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -764,8 +764,6 @@ "\n", "print(numeric_feature2)\n", "print(categorical_features2)\n", - "\n", - "\n", "\n" ] }, @@ -779,26 +777,31 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 53, "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "'list' object has no attribute 'nunique'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[52]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m col \u001b[38;5;129;01min\u001b[39;00m categorical_features1:\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[43m[\u001b[49m\u001b[43mcol\u001b[49m\u001b[43m]\u001b[49m\u001b[43m.\u001b[49m\u001b[43mnunique\u001b[49m() <= \u001b[32m10\u001b[39m:\n\u001b[32m 3\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mColumn : \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcol\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m 4\u001b[39m \u001b[38;5;28mprint\u001b[39m(df)\n", - "\u001b[31mAttributeError\u001b[39m: 'list' object has no attribute 'nunique'" + "name": "stdout", + "output_type": "stream", + "text": [ + "clean_test\n", + "ok 803\n", + "notalk 514\n", + "men 194\n", + "dubious 142\n", + "nowomen 141\n", + "Name: count, dtype: int64\n", + "binary\n", + "FAIL 991\n", + "PASS 803\n", + "Name: count, dtype: int64\n" ] } ], "source": [ "for col in categorical_features1:\n", - " if [col].nunique() <= 10:\n", - " print(f\"Column : {col}\")\n", - " print(df)" + " if movie_df[col].nunique() < 10:\n", + " print(movie_df[col].value_counts())" ] }, { @@ -819,10 +822,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "year\n", + "budget\n", + "domgross\n", + "intgross\n", + "budget_2013$\n", + "domgross_2013$\n", + "intgross_2013$\n", + "period code\n", + "decade code\n" + ] + }, + { + "data": { + "image/png": "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MUQiIlIklShRgv79+zN69Gjc3Nzw8PBgwoQJFCt2py/A39+fZ555hgEDBrBgwQKcnJwYN24cTz75JM8880yO91u5cmVat27NwIEDmTdvHjY2NowcORJ7e/ssvT9/N3r0aHr06EGtWrVo1aoV69atY/Xq1WzevBm489RbRkYG9evXx8HBgaVLl2Jvb0+5cuVYv349v/zyC02bNqVUqVJERkaSmZlpukUo96ceIhERKbKmT59O06ZN6dy5M61bt6Zx48bUrl3btD4iIoLatWvTsWNHgoODMRqNREZGZrkl9qiWLFmCh4cHTZs25dlnn2XAgAE4OTlRvHjx+27XpUsXPv74Y6ZPn061atVYsGABERERNG/eHAAXFxc+++wzGjVqRI0aNfjhhx9Yt24dbm5uuLi4sHr1alq2bEmVKlWYP38+y5cvp1q1av/oWCyFwfigm6wCQHJyMs7OziQlJVGyZMlcbfuHLRUeXKmQadXyTEGHICL54NatW8TFxeHn5/fAH3PJ3sWLF/Hx8WHz5s20atWqoMMpcu53nT7s77dumYmIiOSyLVu2cP36dapXr058fDxjxozB19eXpk2bFnRokg0lRCIiIrksLS2NN954g19++QUnJycaNmzIsmXL/vGtOMk7SohERERyWUhICCEhIQUdhjwCDaoWERERi6eESERERCxegSZE27dvp1OnTnh7e2MwGFi7dq3Z+r59+2IwGMw+DRo0MKuTmprKsGHDKF26NI6OjnTu3JmLFy+a1bl69Sq9e/fG2dkZZ2dnevfurZk7RURExKRAE6KUlBRq1qzJnDlzsq3Trl074uPjTZ/IyEiz9SNGjGDNmjWsWLGCHTt2cP36dTp27EhGRoapTq9evYiJiWHDhg1s2LCBmJgYevfunWfHJSIiIo+XAh1U3b59e9q3b3/fOnZ2dnh6et5zXVJSEgsXLmTp0qW0bt0agC+++MI010NISAixsbFs2LCBPXv2mF7g99lnnxEcHMzJkyc1g6eIiIgU/jFEUVFRuLu7U6lSJQYMGGB6mzBAdHQ0aWlptG3b1lTm7e1NYGAgu3btAmD37t04Ozubvc24QYMGODs7m+rcS2pqKsnJyWYfERERKZoKdULUvn17li1bxpYtW5gxYwb79++nZcuWpKamApCQkICtrS2lSpUy287Dw4OEhARTHXd39yxtu7u7m+rc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F8DUqVPp1q0bvXv3platWvz88898//33lCpVCrhzy2vVqlWsW7eOmjVrMn/+fCZPnmy2jxo1arBt2zZOnz5NkyZNCAoK4q233sr2Nt7jLkdPmX377bdmy0ajkfj4eObMmYOPjw/fffddrgVYWOgpM3N6ykzEMuhdZvI4KLCnzLp06WK2bDAYeOKJJ2jZsuU9J74SERERKcxy/C4zERERkaIiV8cQiYiIiDyOctRD9PdR9Pczc+bMnOxCREREJN/kKCE6dOgQBw8eJD093TTr56lTp7CysqJWrVqmen+fFEpERESkMMpRQtSpUyecnJxYvHix6RG+q1ev8tJLL9GkSRNGjhyZq0GKiEjB0msvpTDLjeszR2OIZsyYwZQpU0zJEECpUqWYNGmSnjITESlCbGxsALhx40YBRyKSvbvX593rNSdy1EOUnJzMpUuXqFatmll5YmIif/75Z46DERGRwsXKygoXFxcSExMBcHBw0HAIKTSMRiM3btwgMTERFxeXLO+kexQ5SoieffZZXnrpJWbMmEGDBg2AO+9AGT16NF27ds1xMCIiUvjcfa/X3aRIpLBxcXExXac5laOEaP78+YwaNYp//etfpKWl3WnI2pr+/ftnmbZcREQebwaDAS8vL9zd3U3/zxcpLGxsbP5Rz9BdOUqIHBwcmDt3LtOnT+fMmTMYjcb7vpVXREQef1ZWVrnywyNSGP2jiRnj4+OJj4+nUqVKODo66ikEEREReSzlKCH6448/aNWqFZUqVaJDhw7Ex8cD8PLLL+uRexEREXns5Cghev3117GxseH8+fM4ODiYynv27MmGDRtyLTgRERGR/JCjMUQbN27k+++/p0yZMmbl/v7+nDt3LlcCExEREckvOeohSklJMesZuuvy5cvY2dn946BERERE8lOOEqKmTZuyZMkS07LBYCAzM5Pp06fTokWLXAtOREREJD/k6JbZ9OnTad68OQcOHOD27duMGTOG48ePc+XKFXbu3JnbMYqIiIjkqRz1EFWtWpUjR45Qr1492rRpQ0pKCl27duXQoUNUqFAht2MUERERyVOP3EOUlpZG27ZtWbBgAe+++25exCQiIiKSrx65h8jGxoZjx47p5X4iIiJSZOTollloaCgLFy7M7VhERERECkSOBlXfvn2bzz//nE2bNlGnTp0s7zCbOXNmrgQnIiIikh8eKSH65Zdf8PX15dixY9SqVQuAU6dOmdXRrTQRERF53DxSQuTv7098fDxbt24F7ryqY/bs2Xh4eORJcCIiIiL54ZHGEP39bfbfffcdKSkpuRqQiIiISH7L0aDqu/6eIOUFX19fDAZDls+QIUMA6Nu3b5Z1DRo0MGsjNTWVYcOGUbp0aRwdHencuTMXL17M89hFRETk8fBICdHdhOPvZXlp//79xMfHmz6bNm0CoHv37qY67dq1M6sTGRlp1saIESNYs2YNK1asYMeOHVy/fp2OHTuSkZGRp7GLiIjI4+GRxhAZjUb69u1reoHrrVu3eOWVV7I8ZbZ69epcC/CJJ54wW546dSoVKlSgWbNmpjI7Ozs8PT3vuX1SUhILFy5k6dKltG7dGoAvvvgCHx8fNm/eTEhISK7FKiIiIo+nR0qI+vTpY7b8r3/9K1eDeZDbt2/zxRdfEBYWZtYzFRUVhbu7Oy4uLjRr1owPPvgAd3d3AKKjo02za9/l7e1NYGAgu3btyjYhSk1NJTU11bScnJycR0clIiIiBe2REqKIiIi8iuOhrF27lmvXrtG3b19TWfv27enevTvlypUjLi6Ot956i5YtWxIdHY2dnR0JCQnY2tpSqlQps7Y8PDxISEjIdl9TpkzRq0lEREQsRI4mZiwoCxcupH379nh7e5vKevbsafp3YGAgderUoVy5cvzvf/+ja9eu2bZlNBrvO/5p/PjxhIWFmZaTk5Px8fH5h0cgIiIihdFjkxCdO3eOzZs3P3B8kpeXF+XKleP06dMAeHp6cvv2ba5evWrWS5SYmEjDhg2zbcfOzs40VkpERESKtn/02H1+ioiIwN3dnaeffvq+9f744w8uXLiAl5cXALVr18bGxsb0dBpAfHw8x44du29CJCIiIpbjseghyszMJCIigj59+mBt/X8hX79+nYkTJ9KtWze8vLw4e/Ysb7zxBqVLl+bZZ58FwNnZmf79+zNy5Ejc3NxwdXVl1KhRVK9e3fTUmYiIiFi2xyIh2rx5M+fPn6dfv35m5VZWVhw9epQlS5Zw7do1vLy8aNGiBStXrsTJyclULzw8HGtra3r06MHNmzdp1aoVixYtwsrKKr8PRURERAohgzE/ppsuApKTk3F2diYpKYmSJUvmats/bKmQq+3lh1YtzxR0CCIiIg/0sL/fj80YIhEREZG8ooRIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELF6hTogmTpyIwWAw+3h6eprWG41GJk6ciLe3N/b29jRv3pzjx4+btZGamsqwYcMoXbo0jo6OdO7cmYsXL+b3oYiIiEghVqgTIoBq1aoRHx9v+hw9etS07sMPP2TmzJnMmTOH/fv34+npSZs2bfjzzz9NdUaMGMGaNWtYsWIFO3bs4Pr163Ts2JGMjIyCOBwREREphKwLOoAHsba2NusVustoNDJr1iwmTJhA165dAVi8eDEeHh58+eWXDBo0iKSkJBYuXMjSpUtp3bo1AF988QU+Pj5s3ryZkJCQfD0WERERKZwKfQ/R6dOn8fb2xs/Pj+eff55ffvkFgLi4OBISEmjbtq2prp2dHc2aNWPXrl0AREdHk5aWZlbH29ubwMBAU53spKamkpycbPYRERGRoqlQJ0T169dnyZIlfP/993z22WckJCTQsGFD/vjjDxISEgDw8PAw28bDw8O0LiEhAVtbW0qVKpVtnexMmTIFZ2dn08fHxycXj0xEREQKk0KdELVv355u3bpRvXp1Wrduzf/+9z/gzq2xuwwGg9k2RqMxS9nfPUyd8ePHk5SUZPpcuHAhh0chIiIihV2hToj+ztHRkerVq3P69GnTuKK/9/QkJiaaeo08PT25ffs2V69ezbZOduzs7ChZsqTZR0RERIqmxyohSk1NJTY2Fi8vL/z8/PD09GTTpk2m9bdv32bbtm00bNgQgNq1a2NjY2NWJz4+nmPHjpnqiIiIiBTqp8xGjRpFp06dKFu2LImJiUyaNInk5GT69OmDwWBgxIgRTJ48GX9/f/z9/Zk8eTIODg706tULAGdnZ/r378/IkSNxc3PD1dWVUaNGmW7BiYiIiEAhT4guXrzICy+8wOXLl3niiSdo0KABe/bsoVy5cgCMGTOGmzdvMnjwYK5evUr9+vXZuHEjTk5OpjbCw8OxtramR48e3Lx5k1atWrFo0SKsrKwK6rBERESkkDEYjUZjQQfxOEhOTsbZ2ZmkpKRcH0/0w5YKudpefmjV8kxBhyAiIvJAD/v7/ViNIRIRERHJC0qIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIV6oRoypQp1K1bFycnJ9zd3enSpQsnT540q9O3b18MBoPZp0GDBmZ1UlNTGTZsGKVLl8bR0ZHOnTtz8eLF/DwUERERKcQKdUK0bds2hgwZwp49e9i0aRPp6em0bduWlJQUs3rt2rUjPj7e9ImMjDRbP2LECNasWcOKFSvYsWMH169fp2PHjmRkZOTn4YiIiEghZV3QAdzPhg0bzJYjIiJwd3cnOjqapk2bmsrt7Ozw9PS8ZxtJSUksXLiQpUuX0rp1awC++OILfHx82Lx5MyEhIXl3ACIiIvJYKNQ9RH+XlJQEgKurq1l5VFQU7u7uVKpUiQEDBpCYmGhaFx0dTVpaGm3btjWVeXt7ExgYyK5du7LdV2pqKsnJyWYfERERKZoem4TIaDQSFhZG48aNCQwMNJW3b9+eZcuWsWXLFmbMmMH+/ftp2bIlqampACQkJGBra0upUqXM2vPw8CAhISHb/U2ZMgVnZ2fTx8fHJ28OTERERApcob5l9ldDhw7lyJEj7Nixw6y8Z8+epn8HBgZSp04dypUrx//+9z+6du2abXtGoxGDwZDt+vHjxxMWFmZaTk5OVlIkIiJSRD0WPUTDhg3j22+/ZevWrZQpU+a+db28vChXrhynT58GwNPTk9u3b3P16lWzeomJiXh4eGTbjp2dHSVLljT7iIiISNFUqBMio9HI0KFDWb16NVu2bMHPz++B2/zxxx9cuHABLy8vAGrXro2NjQ2bNm0y1YmPj+fYsWM0bNgwz2IXERGRx0ehvmU2ZMgQvvzyS7755hucnJxMY36cnZ2xt7fn+vXrTJw4kW7duuHl5cXZs2d54403KF26NM8++6ypbv/+/Rk5ciRubm64uroyatQoqlevbnrqTERERCxboU6I5s2bB0Dz5s3NyiMiIujbty9WVlYcPXqUJUuWcO3aNby8vGjRogUrV67EycnJVD88PBxra2t69OjBzZs3adWqFYsWLcLKyio/D0dEREQKKYPRaDQWdBCPg+TkZJydnUlKSsr18UQ/bKmQq+3lh1YtzxR0CCIiIg/0sL/fhXoMkYiIiEh+UEIkIiIiFq9QjyGSwuviuB8LOoQcKTO1SUGHICIihZB6iERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXjWBR2ASH66OO7Hgg7hkZWZ2qSgQxARKfLUQyQiIiIWTwmRiIiIWDwlRCIiImLxlBCJiIiIxVNCJCIiIhZPCZGIiIhYPCVEIiIiYvGUEImIiIjF08SMIoWcJpMUEcl76iESERERi2dRCdHcuXPx8/OjePHi1K5dmx9/fPz+8hYREZHcZzEJ0cqVKxkxYgQTJkzg0KFDNGnShPbt23P+/PmCDk1EREQKmMFoNBoLOoj8UL9+fWrVqsW8efNMZVWqVKFLly5MmTLlgdsnJyfj7OxMUlISJUuWzNXYfthSIVfbyw8BGxcVdAgiuUrjnkSKpof9/baIQdW3b98mOjqacePGmZW3bduWXbt23XOb1NRUUlNTTctJSUnAnROb21JSMnO9zbz2Z2pKQYcgkqvy4r9tESl4d//bflD/j0UkRJcvXyYjIwMPDw+zcg8PDxISEu65zZQpU3j33XezlPv4+ORJjI+f9gUdgEjumlXQAYhIXvrzzz9xdnbOdr1FJER3GQwGs2Wj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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for col in numeric_features1: \n", + " print(col)\n", + "\n", + "movie_df.plot.hist()\n", + "plt.show()\n", + "\n" + ] }, { "cell_type": "markdown", @@ -843,17 +879,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "image/png": "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s5m+9NPR0YG1a9di3rx56NLFEnETERERWYTpgco///lPHD9+HL/61a/MHgoRERFZjOkpjKlTp8ICZTJERERkQaZnVIiIiIh8YaBCRERElsVAhYiIiCyLgQoRERFZFgMVIiIisiwGKkRERGRZDFSIiIjIshioEBERkWWZ3vCNiEJfeXUjjp1tRr/UOGT0iDN7OEQURBioEJHf1De3YlF+KQrLqp23TcxOw8rZOUiKjTJxZEQULLj0Q0R+syi/FNsP17jdtv1wDe7P32vSiIgo2DBQISK/KK9uRGFZNdo9zvJqFwQUllWjoqbJpJERUTBhoEJEfnHsbLPk94/WMlAhInkMVIjIL/qmxEp+v18qi2qJSB4DFSLyi8y0eEzMTkOkzeZ2e6TNhonZadz9Q0SKMFAhIr9ZOTsH47J6uN02LqsHVs7OMWlERBRsuD2ZiPwmKTYK6xaMQkVNE47WNrGPChGpxkCFiPwuowcDFCLShks/REREZFkMVIiIiMiyGKgQERGRZTFQISIiIstioEJERESWxUCFiIiILIuBChEREVkWAxUiIiKyLAYqREREZFkMVIiIiMiyGKgQERGRZTFQISIiIstioEJERESWxUCFiIiILIuBChEREVmW6YHKyZMncdtttyE1NRWxsbG4+uqrUVxcbPawiIiIyAK6mPnidXV1GDduHCZPnox//OMf6NmzJ44cOYLu3bubOSwiIiKyCFMDleeeew7p6elYu3at87Z+/fqZNyAiIiKyFFOXfj7++GOMHDkSs2bNQs+ePZGTk4O33nrLzCERERGRhZgaqJSXl2P16tXIzs7Gp59+irvvvhuLFi3CunXrRO/f0tICu93u9o+IiIhCl00QBMGsF+/atStGjhyJHTt2OG9btGgRioqK8NVXX3nd/4knnsCTTz7pdXtDQwMSExP9OlYiIiIyht1uR1JSkqL529SMymWXXYbBgwe73TZo0CAcP35c9P5Lly5FQ0OD819lZWUghklEREQmMbWYdty4cTh48KDbbYcOHULfvn1F7x8dHY3o6OhADI2IiIgswNSMykMPPYSdO3fimWeeweHDh/Hee+/hzTffxMKFC80cFhEREVmEqYFKbm4uNm3ahPz8fAwZMgT/+7//i1deeQVz5swxc1hERERkEaYW0+qlphiHiIiIrCFoimmJiIiIpDBQISIiIstioEJE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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "movie_df.plot.scatter(x ='budget', y = 'domgross')\n", + "plt.show() " + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "image/png": "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BVvQl37MZjNWrlyJqVOnIjw8JOImIiIiChFBD1Q2bdqEkpIS5ObmBnsoREREFGKCPoUxatQohECaDBEREYWgoM+oEBEREbnDQIWIiIhCFgMVIiIiClkMVIiIiChkMVAhIiKikMVAhYiIiEIWAxUiIiIKWQxUiIiIKGQFveEbERGRI43OgLJqA7R19YiLioAyWgK5TBLsYVEQMFAhIqKQcrayFk+tPYDthWXW54alK7FoYl8kx0cFcWQUDFz6ISKikKHRGZyCFADYVliGOWsPQKMzBGlkFCwMVIiIKGSUVRucghSLbYVlKKtmoNLWMFAhIqKQoa2r9/h6lZfXqfVhoEJERCEjLjLC4+uxXl6n1oeBChERhQxljATD0pUuXxuWroQyhpU/bQ0DFSIiChlymQSLJvZ1ClaGpSuxeGJflii3QSxPJiKikJIcH4WlkzNQVm1AVV09YiMjoIxhH5W2ioEKERGFHLmMgQk14NIPERERhSwGKkRERBSyGKgQERFRyGKgQkRERCGLgQoRERGFLAYqREREFLIYqBAREVHIYqBCREREIYuBChEREYUsBipEREQUshioEBERUchioEJEREQhi4EKERERhSwGKkRERBSyGKgQERFRyAp6oPL777/j3nvvhUKhgEwmQ//+/bF3795gD4uIiIhCQHgwP7yiogJZWVm4+eab8c033yApKQknTpxAfHx8MIdFREREISKogcrixYuRkpKClStXWp/r3Llz8AZEREREISWoSz+ff/45MjMzMWnSJCQlJSEjIwMffPBBMIdEREREISSogcrJkyfx7rvvIj09Hd9++y0efvhhzJo1C//6179cHq/X66HVau3+iIiIqPUSCYIgBOvDJRIJMjMzsWPHDutzs2bNwp49e7Bz506n4+fNm4f58+c7Pa/RaBAXF9esYyUiIqLA0Gq1kMvlPt2/gzqj0rFjR/Ts2dPuuR49eqCkpMTl8XPnzoVGo7H+nT59uiWGSUREREES1GTarKws/Prrr3bPHT9+HJ06dXJ5vFQqhVQqbYmhERERUQgI6ozKn//8Z+zatQuvvPIKioqK8PHHH+P999/Ho48+GsxhERERUYgIaqBy/fXXY/369Vi9ejV69+6Nl156CW+99RamTJkSzGERERFRiAhqMm1TNSYZh4iIiELDVZNMS0REROQJAxUiIiIKWQxUiIiIKGQxUCEiIqKQxUCFiIiIQhYDFSIiIgpZDFSIiIgoZDFQISIiopDFQIWIiIhCFgMVIiIiClkMVIiIiChkMVAhIiKikMVAhYiIiEIWAxUiIiIKWQxUiIiIKGQxUCEiIqKQxUCFiIiIQhYDFSIiIgpZDFSIiIgoZIUHewBE5JpGZ0BZtQHaunrERUVAGS2BXCYJ9rCIiFoUAxWiEHS2shZPrT2A7YVl1ueGpSuxaGJfJMdHBXFkREQti0s/RCFGozM4BSkAsK2wDHPWHoBGZwjSyIiIWh4DFaIQU1ZtcApSLLYVlqGsmoEKEbUdDFSIQoy2rt7j61VeXiciak0YqBCFmLjICI+vx3p5nYioNWGgQhRilDESDEtXunxtWLoSyhhW/hBR28FAhSjEyGUSLJrY1ylYGZauxOKJfVmiTERtCsuTiUJQcnwUlk7OQFm1AVV19YiNjIAyhn1UiKjtYaBCFKLkMgYmRERc+iEiIqKQxUCFiIiIQhYDFSIiIgpZDFSIiIgoZDFQISIiopAV1EBl3rx5EIlEdn8dOnQI5pCIiIgohAS9PLlXr17YtGmT9bFYLA7iaIiIiCiUBD1QCQ8P5ywKERERuRT0HJXCwkIkJycjLS0Nf/zjH3Hy5Em3x+r1emi1Wrs/IiIiar2CGqgMHjwY//rXv/Dtt9/igw8+wPnz5zF06FCUl5e7PH7hwoWQy+XWv5SUlBYeMREREbUkkSAIQrAHYVFTU4OuXbviySefxOzZs51e1+v10Ov11sdarRYpKSnQaDSIi4tryaESERGRn7RaLeRyuU/376DnqNiKjo5Gnz59UFhY6PJ1qVQKqVTawqMiIiKiYAl6jootvV6Po0ePomPHjsEeChEREYWAoAYqTzzxBLZu3Yri4mLs3r0bf/jDH6DVajF16tRgDouIiIhCRFCXfs6cOYPJkyejrKwM7dq1ww033IBdu3ahU6dOwRwWERERhYigBipr1qwJ5scTERFRiAupZFoisqfRGVBWbYC2rh5xURFQRksgl0mCPSwiohbDQIUoRJ2trMVTaw9ge2GZ9blh6UosmtgXyfFRQRwZEVHLCamqHyJqoNEZnIIUANhWWIY5aw9AozMEaWRERC2LgQpRCCqrNjgFKRbbCstQVs1AhYjaBgYqRCFIW1fv8fUqL68TEbUWDFSIQlBcZITH12O9vE5E1FowUCFyQaMz4ERpNdQlFThxsbrFc0KUMRIMS1e6fG1YuhLKGFb+EFHbwKofIgehUG0jl0mwaGJfzFl7ANscxrF4Yl+WKBNRmxFSuyc3VmN2XyTyhUZnQN5qtctE1mHpSiydnNGiQYKlj0pVXT1iIyOgjGEfFSK6+l21uycTBZsv1TYtGSjIZQxMiKhtY44KkQ1W2xARhRYGKkQ2WG1DRBRaGKgQ2bjaq22CXa1ERBRozFEhsnE1V9uEQrUSEVGgBaTqR6vVYvPmzejWrRt69OgRiHH5/Lms+qHmcLVV24RatRIRkSfNXvVz9913Y9iwYcjLy0NtbS0yMzPx22+/QRAErFmzBhMnTvRr4EShormqbSwBkLauHnFREVBGB+ZzQq1aiYgoUPwKVLZt24ZnnnkGALB+/XoIgoDKykqsWrUKCxYsYKBC5EJzLs2wWomIWiu/kmk1Gg0SExMBABs3bsTEiRMhk8kwZswYFBYWBnSARK2BRmdwClKAhtmOOWsPNDnpldVKRNRa+RWopKSkYOfOnaipqcHGjRsxatQoAEBFRQUiIyMDOkCiltYclTO+LM00xdVerURE5I5fSz+PP/44pkyZgpiYGHTq1Ak33XQTgIYloT59+gRyfEQtqrmWZ5p7aeZqrlYiIvLEr0BlxowZGDRoEE6fPo1bbrkFYWENEzNdunTBggULAjpAopbibXmmKZUzLbE0kxwfhaWTM66qaiUiIm/87qOSmZmJzMxMAIDJZMLBgwcxdOhQJCQkBGxwRC2pOStnLEsz29yUDwdqaYZ7AxFRa+NXjsrjjz+O5cuXA2gIUm688UYMGDAAKSkp2LJlSyDHR9RimnN5xrI045hHwqUZIiLP/JpR+fTTT3HvvfcCAL744gsUFxfj2LFj+Ne//oVnnnkGBQUFAR0kUUvwZ3mmMX1RbJdmavT1kEdJYDCZcV5bB129ya+eKs3Vl4WIKFT4FaiUlZWhQ4cOAICvv/4akyZNwnXXXYf7778fS5YsCegAiVpKY5dn/Em8tSzNBCJply3ziagt8Gvpp3379jhy5AhMJhM2btyIkSNHAgB0Oh3EYnFAB0jUUhqzPNOUviiB6KnS3H1ZiIhChV8zKtOnT8fdd9+Njh07QiQS4ZZbbgEA7N69G927dw/oAIlakq+VM01JvA1E0i5b5hNRW+FXoDJv3jz07t0bp0+fxqRJkyCVSgEAYrEYc+bMCegAiVqaL5UzTUm8DUTSLlvmE1Fb4Xd58h/+8Aen56ZOndqkwRBdLZrSFyUQPVW8nSNKwiVYImod/MpRAYCtW7di7NixUKlUSE9Px7hx47B9+/ZAjo0oZDWlZX0g2t17OkeWSoF9JZUBy1Npji0FiIh85Veg8p///AcjR46ETCbDrFmzkJeXh6ioKIwYMQIff/xxoMdI5LOWuqk2pS9KIHqqyGUSvDi+N7JUCrvns1QKTM9Kw0tfHmny/kFAQ2VR3mo1Rry5FXe+swMj3tiKmavVOFtZ2+RzExH5QiQIgtDYN/Xo0QMPPvgg/vznP9s9/+abb+KDDz7A0aNHAzZAT7RaLeRyOTQaDeLi4lrkMyl0BaNc19LHxJ+W9U15LwD8croC3x8tRUZKPPRGM6ThYVCfrsSK/GLoDCZsmDEU/VP97xSt0RmQt1rtMml3WLqySVsKEFHb1pj7t185KidPnsTYsWOdnh83bhyefvppf05J1CTNuU+P5fxl1QZoag2QScMRJhIhPEwERbQEXZNi/DpnU9vdx0gjsGxzkdvXm7p/ECuLiCgU+LX0k5KSgh9++MHp+R9++AEpKSl+DWThwoUQiUR4/PHH/Xo/tW2+3FT9Zbv8cde7O3HbW9sx/4vDOFlWgyf+90vQlkECkeviCSuLiCgU+DWj8pe//AWzZs3C/v37MXToUIhEIuTn5+PDDz/E3//+90afb8+ePXj//ffRt29ff4ZD1Gw3VXczNQVF5QCAjNSEgMzY+MOS6zJn7QG7brqB2j+oJXZ8JiLyxq9A5ZFHHkGHDh3wxhtv4L///S+AhryVTz75BOPHj2/UuaqrqzFlyhR88MEHWLBggT/DIWq2m6qnmZqConLkZqVh2eaiFlsGcbW3jy8N6vzRUjs+ExF50uhAxWg04uWXX0Zubi7y8/ObPIBHH30UY8aMwciRI70GKnq9Hnq93vpYq9U2+fOpdWium6q3mRq90QygeZZBLmjrUFFjgLbOCLksHFER4Xhm/UGXycL+5sl40twzNkREvmh0oBIeHo7XXnstIM3d1qxZg3379mHPnj0+Hb9w4ULMnz+/yZ9LrU9z3VS9zdRIwxvSvAK9DFJSXoO56w9al5jyhqugLqmwPrYIVLKwO75uKUBE1Fz8WvoZOXIktmzZgmnTpvn9wadPn8Zjjz2G7777DpGRkT69Z+7cuZg9e7b1sVar9Tt5l1qf5ripepqpyVIpoD5dGfBlkAvaOrsgBQAyUuLdVvg0dwVOU6uTiIiawq9AZfTo0Zg7dy4OHTqEgQMHIjo62u71cePGeT3H3r17UVpaioEDB1qfM5lM2LZtG5YtWwa9Xu+0E7NUKrXuK0TkSqBvqu5maiyN1T75qSTgyyAVNQanmRPLEpM7rMAhotbK72RaoKHBmyORSASTyeT1HCNGjMDBgwftnps+fTq6d++Op556yilIIQoW25kaTW09ZBIxxGEiiMNEeH1Sv4DPNmjrjE7PWZaY3GEFDhG1Vn4FKmaz53/d+SI2Nha9e/e2ey46OhoKhcLpeaJga8nlj7hI5/9Zqk9XIkulcJppAViBQ0Stm9+7JxO1Za7KhF0FMr4eZyshWoJslQL5NkHJivxiLJmcARFg9/zVVoHjz/UgorbNr71+lixZ4vpkIhEiIyOhUqkwbNiwZl++4V4/FAy+7inUlL2HSspr8PT6g3ZByYju7TBvbC8YTEKTk4WDETAEYy8mIgpNjbl/+xWopKWl4eLFi9DpdEhISIAgCKisrIRMJkNMTAxKS0vRpUsX/Pjjj81alcNAhVqarxv1BWJDP9s+KnGR4UiIlqB9nG8Vcp4Ea/NGbnBIRBaNuX/7tdfPK6+8guuvvx6FhYUoLy/HpUuXcPz4cQwePBh///vfUVJSgg4dOjjtrkwU6jQ6A06UVkNdUoETF6uh0dnvEeTrnkKB2HuofVwkuneMw6C0RHTvGBeQIMXb5o2O3zdQmnMvJiJq3fzKUXn22Wexdu1adO3a1fqcSqXC66+/jokTJ+LkyZN49dVXMXHixIANlKi5+TLT4OueQqG6oV+wdkQO1etBRKHPrxmVc+fOwWh0LqE0Go04f/48ACA5ORlVVVVNGx1RC/F1psHXPYUau/eQt5mcQAlWwMANDonIX34FKjfffDMeeughqNVq63NqtRqPPPIIhg8fDgA4ePAg0tLSAjNKombm69KEpVOtK7Zlwr4eBzTM5OStVmPEm1tx5zs7MOKNrZi5Wo2zlbVN+UouBStgaMz1ICKy5Vegsnz5ciQmJmLgwIHWbrGZmZlITEzE8uXLAQAxMTF44403AjpYoubi60yDpVOt403XsUzY1+NaOmckWAGDr9eDiMiRX1U/FseOHcPx48chCAK6d++Obt26BXJsXrHqhwLlRGk1Rry51e3rP8y+0W6HYkt5r7cyYW/HNfZzA+FsZa3bzRs7NnOZsK/XjYhat8bcv5vU8K179+7o3r17U05BFBI8bT7oaqbB10613o4LRs5IMHdE5gaHRNRYfgUqgiDg008/xY8//ojS0lKnlvrr1q0LyOCIWoq7zQebe2kiWDkjDBiI6GrhV6Dy2GOP4f3338fNN9+M9u3bQyQSBXpcRC0uGDMNjZ3JISJqa/zKUUlMTMR//vMf3H777c0xJp8xR4Vag5bKGeE+O0QUKpo9R0Uul6NLly5+DY6I7LXETA732SGiq5Vf5cnz5s3D/PnzUVsb+D4PRG2RXCZB16QY9E9NQNekmIAGKcFqm09EFAh+zahMmjQJq1evRlJSEjp37oyICPuEv3379gVkcETUdMFqm09EFAh+BSrTpk3D3r17ce+99zKZlijEcZ8dIrqa+RWofPXVV/j222+RnZ0d6PEQtVrBSmblPjtEdDXzK1BJSUlhlQ1RIwQzmZUl0ER0NfMrmfaNN97Ak08+id9++y3AwyFqfYKdzMp9dojoaubXjMq9994LnU6Hrl27QiaTOSXTXrp0KSCDI2oNApXM2pSlo2C2zSciagq/ApW33norwMMgar0CkcwaiKUjts0noquRX4HK1KlTAz0OoiYL1c6rTU1m9bZ0tHRyRkh8TyKi5uD37skmkwkbNmzA0aNHIRKJ0LNnT4wbNw5isTiQ4yPySSh3Xm1qMiv7oBBRW+ZXMm1RURF69OiB++67D+vWrcOnn36Ke++9F7169cKJEycCPUYij4KdrOpNU5NZ2QeFiNoyv2ZUZs2aha5du2LXrl1ITEwEAJSXl+Pee+/FrFmz8NVXXwV0kESeNNeMQyCXkpqSzMo+KETUlvkVqGzdutUuSAEAhUKBRYsWISsrK2CDI/JFc8w4NMdSkr/JrOyDQkRtmV9LP1KpFFVVVU7PV1dXQyLh/2mSfzQ6A06UVkNdUoETF6t9XrLxNuMgCQ9r1PlCbSmJfVCIqC3za0bljjvuwIMPPojly5dj0KBBAIDdu3fj4Ycfxrhx4wI6QGobmjKD4WnGIUulwNeHzmPZ5iKfzqfRGXBOUxeU5FVPS03sg0JEbZVfMypLlixB165dMWTIEERGRiIyMhJDhw6FSqVijxVqtKbOYLibcchSKTA9Kw0r8ot9Ot/ZylrkrVbjZFmNx8/ztJTk76yQ5bNHvLkVd76zAyPe2IqZq9U4W1lr9z27JsWgf2oCuibFMEghojbBrxmV+Ph4fPbZZygqKsLRo0chCAJ69uwJlUoV6PFRG+BLMqzlOHeJrbYzDhU6AzS19VCfrsSs1WroDCan8zne5G2DpWlDO3scr7vkVX9nhdgnhYjIPZ8DldmzZ3t8fcuWLdb//uabb/o9IGp7TIKA5VMzoTeaERkhxr6SCqzIL7YGGJW1Bsz74rDdjfyWHkmYN64X6urNdsFL16QYqEsqcP+qn91+nqsZEdtgSX26ElkqBQqKyp2Oc5e86m+wEcylJiKiq4HPgYparbZ7vHfvXphMJnTr1g0AcPz4cYjFYgwcODCwI6RW7WxlLV764jC22wQFWSoFlkzOsM6G6OvNdjdymUSM/xuUiifXHrALJiyzF/Koxpfz2lYOrcgvxpLJGQDgdH53yav+lEhbZmAmD0r1OF72SSGitsznQOXHH3+0/vc333wTsbGxWLVqFRISEgAAFRUVmD59OnJycgI/SmqVrLMQDjMXluAgNzsNv5yuxI6TDY9lEjFys9Mwqmd7vLbxmNOMh2X24rVJ/RpdzmtbOaQzmDBrtRq52Wn4f9ldIJdFIDJCjFqDEbp6EzQ656CjsSXSgVhq8kWobitAROQrv3JU3njjDXz33XfWIAUAEhISsGDBAowaNQp/+ctfAjZAar08zUIUFJXj0ZtUuDPjGoxdmg+ZRIwlkzOwsqAYGSnxTsGNxbbCMlTXGbFoYl/MWXvALljxNCPiWDmkM5iwIr8Y/SfH4/XvfnU5c2Obd9LYpmyNWWqKiQzHidLqRgcbobytABGRr/yq+tFqtbhw4YLT86WlpS77q7jz7rvvom/fvoiLi0NcXByGDBmCb775xp8h0VXI2yxEZIQYIjQEDbnZaVhZUIyConLojWaP76uqq0e0RIyXxvfG17Oy8enDQ/D9n4dh6eQMdHRzg3ZVOWT7mbZcVQ9ZAh1XbGdxLFVB5TVX3rsivxjTs9KQpVI4vW/BhN54Zv1Bj9VAroRaLxgiIn/5NaNy5513Yvr06XjjjTdwww03AAB27dqFv/71r7jrrrt8Ps+1116LRYsWWauFVq1ahfHjx0OtVqNXr17+DI2uIt5mIeRREVBENwQAGSnxWLa5CAAgDfccX0dJxMhbrXY5kyCXuX+fY6+SyAix9TMdOeadWAIdT7M4tjMcy6dmWo+xXWrKzUqD3mhGF2U0EqIleGb9QWw6Wur02d6qgbiRIRG1Fn4FKu+99x6eeOIJ3Hvvvaivb/hXcXh4OO6//3689tprPp9n7Nixdo9ffvllvPvuu9i1axcDlTbAl9bwlgDg6Dmt9TVvSyX7Sir9LvW1bXOvLqnwOH7HvBNPTdkcZzgcv4POYLIGRcPSldbzOAYptt/HU7DBjQyJqLXwK1CRyWR455138Nprr+HEiRMQBAEqlQrR0dF+D8RkMuF///sfampqMGTIEJfH6PV66PV662OtVuvyOLo6+DILATQEADV6o/V1x6ocS5Lt0C4KSMLDUFVnRN5wlV2Js0wiRt+UeJzT1OFkWY1PuR7+bAbobj8fxxkOd5VF2SoFFkzoDblM0qTGc9zIkIhaC78CFYvo6Gj07du3SQM4ePAghgwZgrq6OsTExGD9+vXo2bOny2MXLlyI+fPnN+nzKLT42ho+KVZqnX1xrMpJjo/CS18etlumsS1xBmBNxF22ucgpsEmIlrgMWjzN+OSkKxEmAi5o69A+LtLr97TMcFg+OyMlHkazgDm39YDeaILRJKDGYIT6dCVe+vIIXp/Ur0nBBjcyJKLWQiQIghDMARgMBpSUlKCyshJr167FP//5T2zdutVlsOJqRiUlJQUajQZxcXEtOWzyg2OpbIw0HDV6IzS1vlWznK2sdZp9WXhXH3x94By2F7ne5ycjtaEyTV1SYZ19sQQt3ip53H2mpTX/rNVqDEiNxyt39kGqwn420fG7hotEmPjeDiya2Nfps7NUCrxwRy9MeKfAOgP0w+wboYyRYOZqtdtgw9sylquxW2ar3CUVExG1BK1WC7lc7tP9O+iBiqORI0eia9eu+Mc//uH12MZ8UQouV6Wy2SoFpl2+4esMJp/bzdvOvpgFAbf8bZvb4y1Jq5ZOtXnDVdagxZG7m79GZ8AFrR6nK3QAGvJLbJeVslUKvHF3f+vMiruy4Dmju+P1737F5mMXnT47R6VAv9QE66zQhhlD0T81ocnBhuP14kaGRBQKGnP/btLST3MQBMFu1oSuDp4ai7krlc0vKoeAhjLgZZuLfEp4dcwB8Zbw6ljKbFs95MhdgqpcJsE5TZ3btvz5ReWoqDGgfVykx7JgAcfQLyXeZaCyvagc07LSrI8tyzpN3TXZXc4MEdHVIqiBytNPP43Ro0cjJSUFVVVVWLNmDbZs2YKNGzcGc1jUSN4ai3lr7JZrc4NubOmstzyOaxOiIBJdeexLDxZXtHVGl887vu7pu3rrQmsZm2MOCYMNImrLghqoXLhwAX/6059w7tw5yOVy9O3bFxs3bsQtt9wSzGFRI/iyGZ+3UlnH4KExpbOekkazVApcrNKjXawUOelK7D1VgWsTojxugOguQTUu0vP/VCyvN/a72pKGh3nsnktE1BYFNVBZvnx5MD+eAsCXxmLeZj0cG7g1pnTWXYlzlkqBF8b2wqJvjmLXyUt4+54BmHFTV7y68Rjy3WyAmNkpwW01TEK0BNkqhd17LbJVCiREN7zP23eNd7NhYk66Eqp2MV4TZImI2pqQy1Ghq0uFl1bsVXX1SFNGe5z1UJ+utD72p3TWksdxXluHMxVXWssv+uaoNR/klzOV+Pm3S06BhiWp9rk7euKm69q5DRLax0XilTv74On1B+3Oka1S4JU7+1gTab2VBXdSyJxeZyUOEZF7DFTIbxqdAQYvOR+xkRFuZz1sq34Az5sGemPJ4+gQF4myagP0RpNd0mqfa+R4a1Ohy/cWFJVj3theXgOFVEU03ri7PypqDNDWGREXGY6EaIldHxVvTew6NjE5loiorWGgQn4rqzZgx8lyt+3sc2xmR1xVr8RENvRR+fiBwQG7YVsCFsdqIG9JtLadbz1pHxfptcGbt0odJscSEfmOgQr5TVtX77YVfJZKgfnjetndkFvyBi2TiO0ee9vIMNAt5RmMEBEFBgMV8ltcZIRdO/v7s7sgXCxCgiwCRpOAerMZGl3L79Kr0Rmwr8R+0z9vGxmypTwRUWhioEJ+s00cXZFfjP6T4/GPrSd9ak3fnMqqDXjpyyN2Mz2WmR8RYJcMy3JgIqLQFnIt9BuDLfSDz9LivW9KfKNb0zeWp+63ttQlFbjznR12GwDqjWbIIsQwCQI6yiNhMJoRLQ2HRByGyloDYiK97zUUqPEREbV1V3ULfbq6JMdH4bVJ/XCpxoCeHeNwf3YXpyZqje0264q37re2LL1MdAaTy3b5m/9yI+JlEp/PF+jxERGR7zxnGFKbotEZcKK0GuqSCpy4WA2Nlx4pQMMN+on//YLRf9+OGR/tQ+6He6AuqcCSyRl2Ca2N6Tbralyeut86jtOyJOXKsHQloqXhjTpfoMfnz3UmImqrOKPSSjV2GcKfGQF3N2jL8o9ls0HA96oaV+P2pfutY3WRp14m1XXGRp3Pm8aMjzMvRESNw0ClFWrszdCX/Xpc3bh93WzQ16oad+OeNSLd4/tczdZ46mXibcflxs7+eNvfx3I+f68zEVFbxkCllfHnZugq4LBNRD1eWo3EaInTrIwvG/C5qqpxNWtSZzSjpLwGs2+5Dk/e1h0VNQaYzAL2llTAaPLe/dYVd71MvO3H09ieKr6er7EzQ0RExECl1fHnZmgJOCzByYDUBMgixDBDwI4T5dbEWMdZGW836C7KaKfAyHHWRCYRY8W06/HPbSfwx8GdsPTHIqfGcSN7tMfIHknYdLTU6TP86YHibT8eZYykUUtnvpwP8H3mhYiIrmCg0sr4czOMi4yATCLGkskZWFlQbFcpY7u7sOOsjLcbdEd5Q6v5E6XV0NbVI0Yajp9PVWDvqStLL7nZaVi6uRAZqQlYWVDsVN7c8PgYXrmzDwxGs8uck8bOQnjKYXl1Yl/UGEyNWjrzlhNjGV+gZ3KIiNoCBiqtjD83Q2WMBM/d0dNDoHAlMdZxVubF8b3x3GeHnG7qiyf2hc5gwpMON3zbwEdnMCEjJR7LNhchNyvNZSmxZQy19aaAbubnLocFAPJWqxudR+Jtfx/A95kXIiK6goFKK+PrzdBxaWNAajzmrjvo8py2ibFAw6yMZQln76kK5GanYXpWGiLDw5AYLYE0IgxafT3OXKrF9Kw09EuJty4fOQY+ls0CvW0aqNObAr5/jqvznSit9juPxNv4fJ158QWbyxFRW8FApRV6ZkwPTK2ohUgksjZfy+yUYL0ZuqquWT410+M5bQMJxz4klvb5/8w/iXsGd3KamXGcRbENfCybBXrbNFAeFfhlEVc3e02t554mTc0j8WXmxRuWOBNRW8JApRVxdQPLSVfi61k5SJBFQC6TuK0K8sYSSAxLV0IiDrN7f252GlYWFHvJM7Hvq2IJfCybBbb0poHurtWc27p7fF8g8kiaMjPEEmciamvYmbaVcHcD215Yhuc+O4QLVXqcuFiNSl29XTKrhSVQcMUSSFiWKCprDZBJxMgbrsLyqZkY1bM9CorKkZES7zLQAGB93cIS+KzIL0bezSocO6vF9Kw0pzHkpCvxwrheKK8xBKyDq6dr9cuZSuS4uQ6hkEfiS1UXEVFrwhmVVsLTDWx7YRlOX9Lh/lU/IyddabcMY2HZXThMJHKaZZg/rhfMgoBJA65FaVUdIiPEWPPgDXhr03Es21yEd6YMAOA9z8Tyes7liqB3pgyANDwMP/12Cb2vlSNcJMJTt3WHRByGar0RBqMZO06WY+zSfJfl0c1xrRZ8dRQbZmRh/peH7YKunBDZZZklzkTU1jBQaSV8ab4GNAQtZkGwW4YBGjbwm7VajW9m5cBoFuzyJ1xV72SrFJiWlYZdJy/5nGciDQ/DsHQlXhzfG7cv2W4XKNna+sRNePnro822vOHpWukMJhSX1yAjNQG5WWnQG82QhochNVGGjiGQ/8ESZyJqa7j000p4u4HZBhGOyzAWmZ0SEC+LQNekGPRPTYAyRoJKXT2e/PQXp6Ahv6gcKwuKkZud5pRn4kpOuhKqdjFYOjkDmlqD2yAFAGoMnvfiOaeta9IykLtrZVnOSo6PRM+OcRCJRDhyTouZq9UIE4n8/rxA8rbhYrCXpoiIAo2BSivh6QZmCSI8cSyRPVtZi7zVahRdrMZ2L3knK/KLMT0rDUfOalzmmWSpFJg/rhc6KaMhl0kQI/UcVNV4CGIA4OTFGsxcrcbZylqPx7nj6lpZGt6pSyowdmmB3U7QK6ZdHzIBgKXE2XH8/ja/IyIKdVz6aSXc9ejIUikwPSsNs1ar7Y5PTZThh9k3uiyRtU02nTwo1ePn6o1m67JRbnYawkUiPDemJ0yCgPIaA4wmAftKKiDClXJgTa0Bq//fYBTYtOe3GJauRLyXUmRpeFiTloFcXStL5ZKriqUwkQjLJmc06jOaUyBKnImIrhYMVFoR2xuYprYedfUm7DhZ7pQ4OyxdiaRYqdsbm22yqS95J0BDbseyzUXIUimQkZqAjJR43L/qZwDALT2SEJGZ4tTxNduhv4plVkAmEbttWmc7O9SUjfwcb/aREWK3nXG3h+CGgYFufkdEFKoYqLQytjews5W1eG/rCacgxdsSgW2yqW1/E8umhZmpCZDLIiARh6GqzoiV067H3pIKHDmrwT2DO2HWajVen9TP+nnzxvXCnHUHXea5iEQifJmXDXGYCPGXe70A8Hl2qClVLrbXSl3iXLJti9U0RETBwUClFfN3icA22dRStiwND8M9gzvh492n0D8lHq9/96t9+a5Kiefu6IkL2jq8/6eBSI6PwjeP5UBnaCgzfmxEOu4ZnAppuBgHzlRCJAJ6J8sblo7qTTj4uwY3XdcOcpn92M9p6nCyrAbS8DCoT1c6zQ75W+ViWYaq1tcjXiZBVITY4/GspiEiCg4GKq2cP0sEtvsFWfJPlk7OwIcFxejnpvvs9qIyvPjlYWR2TkTva+R47rNDUJdUYsnkDLz5/XGnoGbGzV1x/6qfrUFHlkqBNGU0ZBKxdbyW/3zl66P4+fKeQksnZ0BvNCMyQowL2jq/klxt9ylaMjkDr377KzJSE1q0My4REfmGVT+tjEZnwInSaqhLKnDiYrVfZbxymQQLJvRG9uXqHUswsd1L99n8onJkq5TWQMZdgur2ojIs+7EIudlXNjosKCrH0s2FqNTZL7HIZRIsntgXK6ZdD3VJBe5f9bO1Iufrg+e8Vgg5sk0Uth2fpXLJsWKJ1TRERMHFGZVWpKmb1dlW5eiNAqZnpeGB7C7Q1ZsQLWn4qXjrPms0C9bAJCMl3m2CquOOzJbnagxGp2NlEjHe3lzkHPC4qfzxtLOwbaKw7fhsK5csjd66KKPRUR7JIIWIKIgYqLQSTd2szlWQY0lefeJ/v2Dp5fJcb1VAMsmVXA9fW+rbctUIrqzagO1Fnve3sU0g9hSs2SYKO36+pXLJYsOMoQxSiIiCjIFKK+G4f42lQicjJR56oxnntHUA4PLGe0Fbh6c+/cXa2M32vQDw7/sHo1JnwPDu7Tzucuy4bBLpJUHVVdAjd9FDparOgLzhKut3iYwQY19JhbUHi6a2IfjwJVizTRT2FnQxgZaIKPgYqLQStjMFli6rKwuK7WYIXC0Dna2sxW9lNXZBiqv3ZqkUeP6OXnhr06+YfnnJxjZYsez98+OvpQ29TkoqoYyRIFulQL6boMaxW27O5f4ujuRREqhLKpzGY+nBYpnF8WVnYdtEYU9BFxNoiYhCQ1ADlYULF2LdunU4duwYoqKiMHToUCxevBjdunUL5rCuSrYzBe6SWB2XgSwzELbdZz11aH3xy8OYOTwdErEIT4zqhjmjRajRmwABkEnFeGvTcew6eQlLJmdgTJ86vLXpOKZlpUGAc1Dz9Jie+P7IeSyfmgm90YwEWQRSExtqk0+UVlvzS2Kk4Xj+s0MuxwMAz47pYd2Hx5edhbsmxVh7tFhKr23PBzCBlogolAQ1UNm6dSseffRRXH/99TAajXjmmWcwatQoHDlyBNHR0cEc2lXHdqbAUxKrbU6HZQZi2tDO1te9JcA+d0dPbDx0Hn2uaeiBkpoow8bD57HmpxL8cVAqpgzuBKNZQP+UBDy9/hB2nbxkl6Bq6YciAvBz8SX87ftC6/lz0pV49GYVcj/cY81V+fiBwR73GpozujsECAB831nYtr9Mjb4er0zoA4PJjBq9ke3oiYhCTFADlY0bN9o9XrlyJZKSkrB3714MGzYsSKO6OtnuX+MtidXSZdUyA2G7BOLtvdV1Ruz57RLe2tQQYMgkYjw7pgdWTr8eZypqIRKJcPD3SuvxjgmqFhkp8U4ByPbCMpgFAbnZadb3VNZ6niW5WKVHSkLDTIxtsObIcSmnuVrQe6o4IiKixgupHBWNRgMASExMDPJIrk623Vw9scwsWGYgbJdAvCWYGoxm6zKJbT7L0+sPWY/JUikwrm8yZBKxyyoeTxzLll2NxzbZN0YaAbMgQKMzuN2YsaWWcppaHk5ERM5CJlARBAGzZ89GdnY2evfu7fIYvV4PvV5vfazValtqeFcNy83Y3cxCtkqByIiGm78yRoKFd/VBUqwURrOAObf1gCRchByVwuVyS066EjtOXnneUz7LS18exnNjemCuTQBjPY+LRFpbBtOVWR3HhFdfEoWDsbNwU8vDiYjItZDpTJuXl4cDBw5g9erVbo9ZuHAh5HK59S8lJaUFR3j1kMskeOXOPtbOshZZlytz5n1+GBqdATUGE74+cA73r/oZD/17L8Yuy8fijcfwwrheyFEp7d6bc3lzwRX5xdbnPHWp3V5UjoxOCchJtz9PlkqBeeN7253HUbuYK5U/lo6xlvN4SxS2zKx0TYpB/9QEdE2KaZEAwZeKIyIiaryQmFGZOXMmPv/8c2zbtg3XXnut2+Pmzp2L2bNnWx9rtVoGK24YTGb0T03AdIckVsumfpW6ejz72SGnRmqbj11EGIDp2Z0xLauz9b3J8kiYzGbrUo5MIkaE2HOcW2cwYdnl2Q1NbT3q6k3YcbIcJrMZGamug5wslQISm+UencGET34qweuT+kFbWw+DyexTonBL86XiiIiIGi+ogYogCJg5cybWr1+PLVu2IC0tzePxUqkUUqlznw1ypqmtd3tDB4Aag9HtDMCmYxcxeXAn3L/qZwANwUNuVhpKtXXWHilLJmdAHCbyOIZoabhd0urZylq8t/UEbkpX4vk7euGlLw/b9VjJVinw/NheKLmksz43LF2JF8f3Rvu4SLSPi4S6pMLjZwYrIPC14oiIiBonqIHKo48+io8//hifffYZYmNjcf78eQCAXC5HVBSTD33lqtLE8cZpm4BqNAsIE4msPUwcO70CV/JELG30RSIRXvrqqLVHysqCYo87DmerFHaJsBqdAbUGEx4fmY54mQQLvjricsZn0TdH8eztPfHOlAGIj4pA16QYtI+LtJ4nVAOCxlQcERGR70SCIAhB+3CR63+Rr1y5EtOmTfP6fq1WC7lcDo1Gg7i4uACP7urgqtLklh5JeGFcL5SU61BZW49oSTgSoiNw6HcNOsijIJOIERUhhkgEnNPUIUIchrKqOvToKMfFaj3q6k1IU0bDZBLww68X8I+tJ/H6pH6Y8dE+KGMk+FfuYPzhvR146MYuGN2rI1768rBd8m2OSompWZ2x5qcSvDGpH2oMJrsxfvrwEPzhvZ1uv9PXs3Jw+5LtAIAfZt+Irkkx1tc0OgNmrla7DQiCmbR6trLWbcVRR1b9EBFZNeb+HfSlH/Kfq0oTmUSM/xuUijlrD1iXVf58SzoGdU7EVwfP2c1+WGZLnvy0YdPBVzcedQg4FJh6uVQ4URaBvOEq3HRdO2jr6vHfh4bgwJlK3PPPXfjjoFRMu3xcUpwUZjMw+YNd0BlMKK3S48Uvj9iN8WL1lcotV8prrrxuWcqxzBpV6+vx4vjeeP6zQ0EpQfYkWBVHREStWUgk07Z1/jYJs600sSztjOrZHq9tPGaX+3FztyQs3njMLkiRScTISE1AVIQYq6YPwqJvjjo3YCsqhxnA/HG90DE+yuV+O4sm9rUm6Fqee+q27tbHmtp6p1wYiZck3HrTlQA2LirCadZIJhHjuTt64pkxPVBrMIVUQNBcjeSIiNqqkClPbqvOVtYib7UaI97cijvf2YERb2zFzNVqnK2s9fpeS6WJpbeIuqQCF6v0TgGHCHAKUizHT/nnbpzX1nlsU9/v2ng8u8H1fjsrC4qRm51m95zBprttlMR5B2VLbxRXslQK7LucMDssXYloabjTrJHOYMLcdQfx8ldHkaaMbrESZCIiankMVILIW5Mwjc597w2NzoCoCDHemTIAnzw4BB9e7i3i2AJfJhGjrt7+OcdeJN7a5mtq6zF5UCpWTLseecNV1t2KgYbAJCMl3u54y9JOlkoBV1lIlt4ojsGKZSlqRX6xdSmnus59dRL7kxARtX5c+gkib03CSqv0LpeEHJdClk/NtC71OLacz81Os+v0CjhvPOitbb62rh4zPtoHoCGYWDI5w265xzHQkYaLrUHH90cvICdd6TQjMmu1Gs/d0RPzxvZCjd6IaGk4JOIwVNUZ8M2sHBhMZpzX1kEaHoa84Sq7iiRb7E9CRNS6MVAJIm9Nwkou6ay9TICGpZCFd/XBnHUH7W78toGCY8v5jJR47DxZbvecY2Dh+B5bWQ7t7i3H2G4caBvoZKsUSEmMQkZqAmatVgMAvpiZjfmfH7ZLfs3slICbrmvnVA1zrjIMW45fRFKs1Fo6nSyPxNv3DMCjH+9zClbYn4SIqHVjoBJE3nqCONpWWIZT5TqnWRjbQGHNTyX45KEhmPfZYWwvKoPeaMaK/GK8fc8AjOnTEe3jIhEtCceKaddbe6fYbkroqirIEnBY2G4caBvIWFr0/36p1m7GRgT4VA2j0Rlw6pIOXx446zSOvJtVeOjGLvjb94XW52/pkYSYyHCcKK0O2G7F3P2YiCi0MFAJIk9NwhxnMiwqa6/MwlgqfeRREVg+NRMikQiCIODNb49h9qjrMC2rM9rFNnTyFSDg64Pn7KqBbJdxZq1WIzc7DTNuUsEkCIiPisB3Ry7YLfHY0hvNyFEp8NzYXiguq8HyqZnWFv3v/WmgtZlcgizCqUOtO5W6eizdXOgyaRcAnrqtuzVQuaVHEp67oyee+N8vAdutmLsfExGFHgYqQfbMmB6YWlELkUhkneEY2CkBU4d2dprJAK7MnrjbRdjSbE2jq8f9q35G3nAVnhvTE8vzXe9yDFxZxtlfUoH+KfGYtVqNpZMzPLbgT0mMQr/UBEx4u8ApkBGLRLjPYcnKl5t9jcHodpPDgqJyiMNE2DBjKGIjIxATGe4UpAD+71bM3Y+JiEITA5UgcfWv95x0Jb6elYMwALct2e5yJkN9uhI5KiX6pca73EW4YZNBAc+P64UclQIr8ovx6cNDMXf9QZfjKCgqx1O3dcetvdrj28NXZlA85a3kqBQ4eEbjMpDJVimw86TrnY293exrXHxfW7UGEzI7JwIATpRWe60Gakxg4cvuxwxUiIhaHsuTg8Ddv963F5bh+c8OQSoRI7NTgsv3HjmrwV9u7YYhXVwHEUBDo7bTl2oxNSsNN3RJtOv06kqN3oSaOhOWbS6yBkfuSohz0pWYOSIdHeVRLl+bdrm82JEvpcTxUZ5zduQ2rwd6t2LufkxEFJo4oxIE3v71Xl1nxKKJfZ32jclSKXDP4E54YNUevHl3f+vzthsOWiplEmQRDUs49wyATm/0OJ6YyHAIggCZRGwNVCwlxLnZacjNSkO0NBw1eiMuaOsQGSGG3mDGE6O6Yc5oEfT1ZiTIJDAJgsulIAtvN/ukWKlTKbNFTroSSbFXds4O9OaEobrZIRFRW8dAJQh8+dd716QYLJ2cgd8ra/Fbuc66u7Blaab+cm8UT7kqb08ZgMUbj3nc5ThLpcC3h8/jl5IKLJ+aiftX/WwXrCzbXIQslQIZqQnW8zs+3jBjKLomxeBEabXbIAXwfrOXyyRY7CJAc7WPT6B3K+bux0REoYmBShDESD1fdssNXS6ToFJXD2l4GPRGMwakJgDZDcsyB3/XICddiX4p7nNVHq7rioKicqhLKl2WH1sSb69U9ojw7JgeeHr9IesxrkqUbcuTbcfb2Ju9q1JgXzf2k8skLmed/N2cMNDnIyKiwGCg0sLOVtbi51MVbmc4bG/oZytr8eyGQ5cTZBtYSoqPX9DihbG9cEFb57Y6R3O5lNlxGUdvNEMaHobEaAmm/HO3dRZke1EZ5ozujq9mZqPGYERVndFuFseWpWlctkoBaURDqlNjbvbeSoF9CQwCvVsxdz8mIgo9DFRakCWJdu+pCtczHOlKvDi+N34rr0FUlR5Gkxn3DumE6dlp1tJldUkl7uhTh5u7tUdFjR4ms+Du4+wawVmWcWwtn5rpFICc19YhJVGGWFE47v7HLo/ntjR4O3NJh9jLvVKiJWK8NL43agxG6AwmyKMikBQrtbvZB7IUONC7FXP3YyKi0MJApQWV1xjQLyUe04Z2htEsYM5tPaA3mnCxWg+JOAwd5ZG43aYs2bLskvfxPtzQJRGfPHgDRCIRLmjrcE5Th6QYKcLC3OeEWEqZbWdkLNw1lAOAl744ggUTeiNHpXC5q3KOSoF2sVJrm/zXJ/VDeY0BNQaT21kSuezK+y3JxK6SgPeVVKC8hqXARETUgIFKCxKHiTCkiwKa2npERojx7ZHzOHJWg3sGd8LMyzd82xkOy2zLQzd2Qa9kORZvPGbXWTYnXYmXPQQUllJmMwS7mZvsyzMhjg3lLMHL9qIynCirQd7wdEAksu/1olLiiVu7IffDPdZyY2l4GExmwedZEm1dvdsk4CyVAndmXNPoa0tERK0TA5UWcuaSDk+vP+hyL52Pd59Cbnaay12MC4rK8fwdPbHgyyN2QQrQ0Hdl/heH8eL43nj+8t4+FjnpSmsp8x8HpSI3Kw0R4WEIDxMhRhqOJZuO2wVFjkmzdfUmHDuvwdOju+PSjfXQ1NZbK4/+/sNxLJrYF7NWq5GRGg/16UpcEx/lc8O0uMgI5GanuUwCLigqx7zPD2MZO8ESEREYqLQIjc6AuesOuG1hn5GagCFdnDu6WhhMZpczJjKJGD2S5dAZTMgbrsIzY3rAYDLjUrUBJkHAR7tPoazaYJ2xWD41E/et+hkyiRhrHrwBkwd3sibWOibNdlZE47oOMXjhs8Muk371RjOeu6Mn2sdJsXp3CYZ3a+fxGtj2UFHGSDC0i8JtEvB2doIlIqLLGKi0gNIqvctAA7hS6isOE7ns6AoANXXOeSielk7+emt3aHT1eDCnKx7I6YIdJ8qx5qcSRIgbZmx0BhO+O3IB6pIKt71V9p+uwKDOiVCXVLod9zO398Thsxq8OL43autNeHxkOrJVShhNAqKlYgAibP71Av6x9aRdDxW5TAKJi9kjW+wES0REAAOVFmG747EreqMZURLBZbO0LJUC4WKR0/Oelk5EOIb+Ng3ZclRKfPrwUJzX1FqPW5Ff7LLyyHYJaGBqvHXDQle0dfXonxKPjvFROHNJh72/XcJbmwrtzpV3swpDuiiceqgkeJktYSdYIiICuNdPi4iWiD2+Hh8VgRhpuPPeOSolpmelIb+ozOm1jJR4t3v95BeVIyMl3vp4e1EZnt1wEDUGk/U8lt4qGakJWD41E8unZuLTh4dYK3l0BhO2O5zHUXiYCDV64+WlrYNOs0YFReVY9mMRTlyscXqvpTmcK+wES0REFpxRaQHRknC3Dd6yVQp0jI/EpPd2WpNe600COilkEAQBf3hvJwA4zX5YGq654/h6flE5crO7YPrljrIFReXW3iqWDrX3rfjJYwt8WzkqJfKLyjC2b3JDubGLEmjL5+RmpTnlnLATLBER+YKBSguIkogxc3g6AOcW9nNv7w71qQq7pNeFd/XBR7t+Q7/UBGSkNsyczFqtxoPDumDO6O4o1eqRFCd1+VkWriqI6upNeOJ/v3jtUGsrKc55o8AclQLTsztj9e4STB/aGSfLnGdMbOmNZpc5J946wbpqsc8AhoiobWGg0szOVtbi+c8OYcrgThjTp6NdgFCqrcPFKj3OV9Xh87wsAIBO39DN9ffKWqz5qQSLJvYF0BDgGM0CFn1zDAVF5cgbrnLbP8VdMzdpeJjLDrUfPzDYbX7M0bNaPD+2J0q1ersS5Y93l+Cl8b0hl0kQF2nweA2k4WFuc07cdYL11mKfiIjaBpEgCO57sIc4rVYLuVwOjUaDuLi4YA/HiUZnwNeHziMpVgqDyYyk2EhEiEU4p6lDrDQctfUNnVwXTexrTYy1dGsd0kUBsUgEvdEEo1mAWCRCu1gpxizNB9BQ9bNhRhbmf3nYbTM32+AjW6WwJtjadoQFGmY21CUVWPDVUbuuuDNvTkdtvQl//fQX/HFQqrWDbHxUBLomxaB9XKT1e85crXa5GWGWSoE7+ibj9t4dfJ4N0egMyFutdtmXZVi6slEt9omIKPQ05v7NQKUZ/VZWg2c2uG7yNmu1GksnZ0B9utJaJmxbcmx5j0wixrNjeqDPtXLU6k0Qi8OswU5SrBR6owk6gxl19SZERoihjJHgrU3HsfnYRetnZqsUWDChDy5oa3FJV4+UBBkOnKm0C0xyVAo8P7YXyqv1iIuKgNEsIE4ajpe/Porvj5Zaz2XJIenoMKvhagYkS6XAzOHp6JwoQ4dGzIKcKK3GiDe3un39h9k3omtSjM/nIyKi0MJAJQRodAbkfbzPujTjOIsRL5MgMiIMZVUGTF35EwAgb7jKrreJq8AFcCwhTsCjN6uQu2oPdAaTXWBzpqIW0nDXwYvtOazBSroSL4zthT++vxNl1QZ8+vAQpCfF+LybsEZnQGlVwxKRTCJGtCQc8bKIRs9+qEsqcOc7O9y+vmHGUPRPTWjUOYmIKHQ05v7NHJVm0lAJ4xxw2OaH5KiUeGFcL8gkYugMJgyw6X0CAA8O64IP3fRKAXClx4kIWPPgDdAZTKjRG6E+fWW2xDH4cXsONHSEvaCts7bHl0nEjdpNOFA7D8d56aHCHitERG0H+6g0E61NlYu75mzbi8ow//PDyM1Og0wihiziSr8VmUSMET2SnPb3sSiw6XGyvbAMF6v0uFRjwP2rfsayzUXWWRJP/VYKXPRJ0dTWY2VBMZ4b0wPREs9xrEZnwInSaqhLKnDiYjU0Os9Jtb5ijxUiIrLgjEozkdk0ectIiXe/r01RGR65qSsAwGSzCpebnYZSrd7jZzj2SnFVktzYfivS8DAUFJXjuTE9ES9zP3PRnFU57LFCREQWDFSawanyGuw9VWFt8uYtWJCEh2FoFwV2nCy3vsdTR1gL28AkKU6KQ79rnRrLuQpe3J3DtqxZW1eP7h1drxtqdAanIAVo2CV5ztoDAanK8dZjhYiI2gYGKgF2trIWT68/CHVJpbWbrLdgIVoaDr3RYLf/jt5oxpFzzoGHRY5NUJGlUuCHo6UY2y8ZN3RJxPMbDls7xapPVyJbpXC5hJTlcA5Lci1wJU/EVdO1smqDy9JhoCFYCdTOx4HKeSEioqtXUHNUtm3bhrFjxyI5ORkikQgbNmwI5nACQlNbb21Pb9lLp12sFDkOe/VY5KQroS6pQF29ye49KYlRWJFfjOlZaU77/GSpFHhubC+syC9GtkqBJ2/tjgNnKlGjN+KbQ+cwc4QKGx/PwX8fGoIxvTvgpQm9nT4/J12J+eN6oc81ciyfmmm3x0+2SoGEaAnOXNIh7+N9GPHmVtz5zg6MeGMrZq5Wo8JLLgp3PiYiokAJ6oxKTU0N+vXrh+nTp2PixInBHErAaG12SrZ0gbXMlJjhvFPxC2N7YdyyfORmp1lnTyz5LBmp8Zi1Wu3U8r60Sg9BEPDpw0MgCRdDozPgydu6QyIOw8DURMgk4RAEYNWOYvz460XkDe+K58f1Qr1RsC6jmAUBIhFwqdqApDgpenaMw7J7BuCCphZZKiVMJjOeWnfAaTZnW2EZHr6xq8drwKocIiIKlKAGKqNHj8bo0aODOYSA0ugMiItyvklbZkpys9Pw7JieKC6rsbair6s3Qmcw2S37FBSVWx+LYF/SnKVSYP64Xjh9qRb/zD/psr/K9A/3YEBqPF6e0AcPZHdGZES4tQV+ZIQY24vKcOysFs/c0QM/HD2PTTb9VXLSlchJb4eSSzq31UI7TpY77f9jwaocIiIKJOaoBFBZtQH1JrPLnBCdwYT9JRUY1bM9Zny0D0BDH5VRPdtbX7cEM38eeR00tfUQi0SYnpWG3Owu0BtNaBcjhUwixqVqA6QRYchITYC6pNJaiuzYG+WlLw9jzu098MLnh10GNAu+PIIeyXK7QGV7YRnmrj+I2bdc5/Z7rsgvxhczszH/88OsyiEiomZ1VQUqer0eev2Vkl2tVhvE0TjT1hqwp+QSFkzog2c3HLQLVrJVCrw0oQ/uW74bwJUusPp6k3VzQcelon/mn0S+TWv9v2067hRwLJmcYdddtqCoHLlZaQCA7slyzHcIUizHAEBGaoLL6qLthWV48rZubr+nzmCCCGBVDhERNburKlBZuHAh5s+fH+xhuKTRNVS6bP21DP/eUYK3pwzA0+IwVNU2VMtEiEU4e0mHeeN6oUNcJL4/egHjljVsMLh8aiYAEbYXlVlb7UdLxHh85HWYM1oMSXgYXv3mqE/dZYErvVE89W+xBDTuSqcrdPXuK47SlVBES1iVQ0REze6qClTmzp2L2bNnWx9rtVqkpKQEcURXaGvr8cJnh6w39nHLCqyvZakUyLBpj295bJkFuX/Vz3h2TA/8+ZZ0REvDseDLI06t9qdmdcaOk5fsdkQGGgKOObd1x4DUBOwrqcCK/GJrObQvzd7clU5HhDUsO1k+wyJbpcDCO/swQCEiohZxVQUqUqkUUqk02MNwSWc0oV9qAqZdnqWIjBBbAwfb5RgATo8B4KymDjekKfDC54esewRZbC8qgxmC08yJRY3BhLyP9yEjNR7Lp2bip98uAQDiXST22pJHRWDnSecZk2HpSqQmyjDv88PISE2wzrzER0Wgk0KGaxJkPl8XIiKipghqoFJdXY2iois33uLiYuzfvx+JiYlITU0N4sga50JlLSRhYfilpMKpQseSQ+I4u2F5bLthYUZKvFOQYuEquLEwmwUsnZyBmavVeOfHExjYOQHZKgWuTYhCjkppbf5mK1ulQHJ8JI6c1dg9b0mI7Rgfhdcn9WMOChERBZVIEGw2mGlhW7Zswc033+z0/NSpU/Hhhx96fX9jtoluLhqdAeXVBjz3+SGX+RyWZZ7rOyXCaDYjKU6K6joT4mUREIeJYDSZ8crXR5FfVI53pgzAjI/2WfNUMlLi7WZn+lwjx0P/3uvy/EO6KFBb31A59OkjQ3GushZhIhEECFiZX2wXAOWkK/HEqG7I+3gfxmdcg9t7d4DBaGYwQkRELaIx9++gzqjcdNNNCGKcFBDa2npo64wedyieeXM6kuKkeO6zQ075Hi+O7419JZUAGlrt286wOM7OjO+XDJlEbM1TsW1737NjHD7afQq52Wn4rawGMz7ah+VTM/HR7lN4cUJvFJfpUFdvsvZvmfzBLmuV0Z39r0HPZHnzXSQiIiI/XVU5KqHIKAgor/G8y3G4WITnP3OecckvKscLnx225p6oT1fi2TE9sLKg2GWFz4tfHMGaB2/AmYpaa8BhKU227HpsWR7KUSnQLlaKnslyfP7LWfxcfMnlstKwdCViIsNxorTabj8fzqoQEVEoYKDSBBe0dXh+wyFMc5M7YhEVIXa5KSDQkCg7LaszgIZGap88dAOeXn/I/bFVna0N4yxsNxe0jGtqVhr++H7DrIlMIsaGGVmY/6V9T5Vh6UosmNAbz6w/iE1HS+2eXzSxL5Ljozx+LyIioubGQKUJKnQGbC8qR7/UBA+7HCthMHkuE7bQGUw4U1HbqDE47np8TXwUOsoj8d2RC9ZjMlLj8c3hc8hITcDTo3tAbzRDHhWBmMhwpyAFaNjPZ87aA1g6OYMzK0REFFQMVJqgqs4IAE779FiSYYd2USBcHIYIcRjyhquwIr/YqQ8K0BBcWAIdibihr4m7hNpkeSQ+fmAwKmvrnZZ/clQKbDx8Hm9tKrRWHH28+xTuGdwJs1arMSA1HpOvT0GMNBxl1QaUV+ux40Q58oarnD5nRX4xyqoNDFSIiCioglr101TBrvo5dl6L297aDuBKYJGZmoCO8ZFY8OURu5yQbJUC0y7PfNgGK9kqBeaP643fymsQL4tAhDgMSzYV4o+DU51yVbJVCvz11u6QScSY94Xr/Xtsz5+jUmJaVmfMXK3GwE4JWHhnH4SHifDXtQewvbAM//jTQIjDRE6fYzlXUowEfVMSmu36ERFR29SY+zcDFT/9XqHD1uMX8dXBc3Y3+bzhKqhLKlwuA2WrFOhv06E2W6XA82N74Z4PdqFHhzjMG9cL//f+TqyYdj0Wbzzmttz5yVu74/ujFzCkiwIScRi0dfVQn650OWPz1axsmAWgRm9Ep4QoPLnuoHXX48/zsjx+zisT+qCTMrpJ14mIiMhRY+7frvunk1faOiMWfHUU07PSkKVSWJ8fkJrgtlQ5v6gct/XqgHemDMA3j+VgelYa7vlgF8qqDdheVIZ5nx/GHweloqza4LHcOSwMUJdUIEEWgZhIMfRGMwakJiA3Ow0yidju+Bq9CWOX5mPp5kLUGEzYe6rC+prBaPb4Ob7m1hARETUX5qj44aK2DlV19dAZGhqs5WanWdvMx0g9X9JLOgNW7y5BbnZn3L/qZ7vXLBVAdfXOeSy29PVmvDyhNxZ8eQSbjl20Pu9qN+WYyIbxFBSVY/4Xh+3a8F+s9lxWXaM3enydiIiouTFQ8YOu3oRoietLFxvp+ZIqZBLMuFmFpDgJ3pkywC55VWcwQSwSISnW835G0dJwPLfBeU8gx92Us1QKu4Z624vK7UqpLYm77sRGet4riIiIqLlx6aeRLmjr8Oo3RyGJCMNXM7OxavogZHVt6GPyxP9+wVcHzyHbZinIVpZKAYiA+1ftQY3ehBkf7UPuh3ugLqnAkskZUMZIkKqQ4fiFKrvlJMdzSMRhHvcEykiJtybEllUZ3H4X9elKt58zLF0JZQwrfoiIKLg4o9JImloDZo3shnmfO1fdLJmcgTlrD2DRxL4AYNfkzVKxc1Grh85gskt6LSgqRxiAd6YMwPOfHcK+kkq7cmeLHJUSL4zrCYPRZNdK31G0NBwZqQn4ePcpp9b41yZEYVi6EtsKy6xl1SKHsVo2JmRpMhERBRsDlUaKCAtz2Q7f8viPg1KteStPje6O05eutLvXGYz4uaQhmTU8TGT3/u1F5Xh6TE9rwDBrtRoPDuuCOaO7o1TbkEuiPl2JccsKMDA1wSkXxVaN3gh1SYVdIzigYTPCDnGRWDo5w7orclxUBN64uz+q64zcJZmIiEIOA5VGuKitg95k9rjskpuVZt3sr2fHOLt299kqJVbkFyNHpUR+UZnT+zW6eut/1xlMMJoFLPrGuXx4e1EZBAh2ibEWOelKdFFG446+yXaBjOMsiWMg0j44m08TERF5xEClEerqTfjdS4t7vfFKSa803D4FKFoixvKpmYiRhmP6h3uc3hsdaV9anJES7xSIWOQXleORm1R2r+ekK/HqxL7oGB+FxGgJBnVO5CwJERFd1RioNEKNl7Jh4Epw4rhRYJZKgW+PXLBW4yya2NduxiNLpUCpVo8clcI6Y2Mb9LhiEgQsn5oJvdGM+KgIdE2KQfu4SAANMyYMTIiI6GrHqh8faXQGVNUaPVbK5KiUUJ+uRPblipsV+cUArrSktzwuKCrHyoJi5Gan2b3+1NoDeO6OXtaqIccZGUf1RjPuX/Uz1vxUgjRltDVIISIiai3YQt9HZ8prUGcyo+RSLWQRYpghYMeJcmv/kyyVAgvG98aZylrIoyIgDgNq9GZUeWhv/3leFi5W6a2vZ6TGY3y/ZFyflojzmjrEyyR45auj2O4inyUnXYnnxvSEWRAQFiZCeJgIimjOohARUehrzP2bSz8+qhcEzP/8sF0ibU66EutnDMW5yjqc1TTkrkSIw1BvErD52EV06xCLR/6zz90pcaai1ppsm6NSYP743vjiwFlU1BiQEC3Bvf/cjUUT+8IMwakU+qXxvbHgqyPYdLTU+vywdCUWTeyL5PioQH99IiKioGCg4oOzFTo876IT7PbCMiz48ijG9uuILsoYfH7gLP72fSGAhmWgET2SPJ43JTEK70wZgJTEKHx7+AJKynX42/eFuK1XB4SJRCirNji16LcsBy348rBd+3wA2FZYhjlrD2Dp5AzOrBARUavAQMUHVXqj25Lk7UVlmHN7d0jCw/CPrSftnr/9TAfkpCutuxXbyklXwrroJgDJ8kj88nslclRKHDijwbDr2lnf61j58/EDg52CFItthWUoqzYwUCEiolaBybReXKisRVWd5835dAYTvj54zikH5aWvjmL+uF5Oybc5KiUevUmFP76/CzM+2oexywrwzcHzuCFNgbzhKpzV1KKqrh6LJ/bFsHSl3XuHpSu9JtlW1dV7fJ2IiOhqwRkVL4wms3UHYndipOF2sykWOoMJF6v0GNOnI54e3QOXdAZERYhx/EIVclftsQtsGhJmBQzsnIg+18hRqauHKinWrouspR9KWbX7/XsAbiZIREStB2dUvDADEAQBOQ4zGxZZKgVEgNt9d2KjInBWU4dJ/9gJg9EMvdGMp9cfcnn89qJy9LlGDr3RDJmkofmbXCZB16QY9E9NQNekGMhlEihjJE4zLRbcTJCIiFoTBioeXKishd5kxmvf/oqpQzu7WMJp6H8icnMVc1QKnKusxbLNRdAZTIiNDEeE2PMl1xvNkEdFIFrifhZHLpNgkZtlIW4mSERErQmXfjzQm8x44fIuybtOXrKrvpFHReCa+Cgs+PIInrmjBz56YDA0tfWIjBBjX0kFjp3V4snR3XHPB7us56uqMyIyQuzhEwF5VAQSoyWIl3levkmOj3K5LMQghYiIWhMGKh7UGEzW/iWWjQZtffNYDp4a3R2nynSYZrN3T066Es/d0RP3f7jHmk+So1KgXawUOoPRbSVQtkqBjnGRiJaIfQo42CafiIhaOwYqbpyt0KFGX4+84SpkpMRDbzRbZ0ssXWar6updzpBsLyzD/C8OY3zGNda9faZmpeHvm47jhbG98P9yusAs2Ddxy0lX4qXxvREtEaMdW+ETEREBYKDiltFohjImEr+UVNjNpGSpFFgyOQOzVqsRGxmBl786gulZaU7vLygqx5zR3XFH346oNZig0dWjR7Ic1XojHv7PXusyEtCw3LPl+EXcvmQ7MjslYPHEvpBJxCirNkBbV4+4qAgo2R6fiIjaIAYqLlzU1kEUJsKOojJMy0rD5MGd7GZTgGI8N6YHZBIx8ovKkZvdxeV59PVm/OWTX3C8tNr6XFZXpdMy0vKpmdbHP5+qwKlLOry9uchujx+2xycioraIVT8uGOpN0JvMTs8nyyPx9j0DoC6pREanBNToGxqr1dW7Lk2uqzfZBSkAEBPpvFSkN175rNzsNCzdXOi0EaGlPb5G57mHChERUWvCQMWFerOAeqMZnRTRdrkpm45eQGREGB66sQuq6ox46N8NGwq66hSbrVIgLirC2g8FaOhIW6rVOx17bUIUVky7HnnDVRiQmmCXu2LL0h6fiIioreDSj4PzFTpAJMKCr4867Vg8PSsNH2w/icdHXgejWcDpilrkpCtRqq2zO0eWSoFpWWl4a9Nx5GanWRNq54/vhbv/sdPp2O+OXLAek93VdSM3C7bHJyKitoSBigOTWcBzGw46zWpYHmekJkAkArYdv4icdCVeGNsTXx08h+VTM627G6tPV2LWajV0BhMeH3kdMlLiUVqlx/7TlXYzIpbgZ9ZqtfUzZtyk8jg+tscnIqK2JOiByjvvvIPXXnsN586dQ69evfDWW28hJycnaOOpqje53Sm5oKgcuVlpqKs347beHTC0qwLa2nr87ftCt+f7vbIWH+8uwcI7+6DOaMLaR4YgIUqCOqMZ5TV6GE0CcrPTrCXPO0+Wu+2zwvb4RETU1gQ1R+WTTz7B448/jmeeeQZqtRo5OTkYPXo0SkpKgjKeMxU6/F5R6/EYyz48UnEYYiThELycs7MiGgvv6oN5XxzGuGUFqNDV47nPD+H2Jdvxp+U/YfqHe6AuqcCSyRmQScRYkV+MeeN6sT0+ERERgjyj8uabb+L+++/HAw88AAB466238O233+Ldd9/FwoULW3w8VXVGr8fER0Vgy6+l2HXiEvqlxgNoWMJxlQCbpVIgMjwM8z47jE3HSpE3XIWVBcVul5Us+SwigO3xiYiIEMQZFYPBgL1792LUqFF2z48aNQo7duwIypiq64xQn6502nzQIkelxDXxUXj7xxPYXlSGjJR4rMgvxvSsNGQ7vMeSf1JWrcemY6UAgIyUeLcVPQVF5chIicewdCUUl5u7Oe6aTERE1NYEbUalrKwMJpMJ7du3t3u+ffv2OH/+vMv36PV66PVXynu1Wm1AxxQTGY4V+cVYMjkDAJyqfl6c0AuVtXroDA19U+IiI/DenwZCMAMvT+iDE2U1qKs32SXUrnnwhivjNzr3ZnHE5R0iIqIrgp5MKxKJ7B4LguD0nMXChQsxf/785hsLgIzUeMxarbbbKVkaHoYL2jrU1Zvw469XklxFIuC+5T8hS6XAs2N6ItdmY0IATjMzrvqt2EpNlKEjO88SERFZBS1QUSqVEIvFTrMnpaWlTrMsFnPnzsXs2bOtj7VaLVJSUgI3KBEu79tT7LS/z/SsNISFifD+tpMAGpaB8ovKrK/VO3SytTz/46+l1hwWy7KSq+WfYelKJMVKA/ddiIiIWoGgBSoSiQQDBw7E999/jzvvvNP6/Pfff4/x48e7fI9UKoVU2nw38xhpOFbvPoWM1AS72RT16Uqs2X0Kj9/SDTqDCTnpSjw7pifOVdbCaBaw5qcSvDi+Nz5+YDAqa+vtln4AYMW06yEWidwuK7Gih4iIyDWRIAjeKmybzSeffII//elPeO+99zBkyBC8//77+OCDD3D48GF06tTJ6/u1Wi3kcjk0Gg3i4uICMqZT5TV4Zv1B5NsEEtkqBV6+sw+0Oj2qDWYUnCi39j3JSVfi1Yl90TE+CmcrazFn7QFsK7TfTPDViX0RdXk35Bp9PeRREhhMZtTojazoISKiNqcx9++gBipAQ8O3V199FefOnUPv3r3xt7/9DcOGDfPpvc0RqAAN/VSq6ozW0uAYiRiRZj0umcMRFS5GjcGEGr0R8qgIJMVK7YIMjc7AsmIiIiIPrqpApSmaK1AhIiKi5tOY+zd3TyYiIqKQxUCFiIiIQhYDFSIiIgpZDFSIiIgoZDFQISIiopDFQIWIiIhCFgMVIiIiClkMVIiIiChkMVAhIiKikMVAhYiIiEJW0HZPDgRL93+tVhvkkRAREZGvLPdtX3bxuaoDlaqqKgBASkpKkEdCREREjVVVVQW5XO7xmKt6U0Kz2YyzZ88iNjYWIpEooOfWarVISUnB6dOnueGhn3gNm47XsOl4DZuO17DpeA3tCYKAqqoqJCcnIyzMcxbKVT2jEhYWhmuvvbZZPyMuLo4/qibiNWw6XsOm4zVsOl7DpuM1vMLbTIoFk2mJiIgoZDFQISIiopDFQMUNqVSKF154AVKpNNhDuWrxGjYdr2HT8Ro2Ha9h0/Ea+u+qTqYlIiKi1o0zKkRERBSyGKgQERFRyGKgQkRERCGrTQcq77zzDtLS0hAZGYmBAwdi+/btHo/funUrBg4ciMjISHTp0gXvvfdeC400NDXm+m3ZsgUikcjp79ixYy044tCybds2jB07FsnJyRCJRNiwYYPX9/A3aK+x15C/Q2cLFy7E9ddfj9jYWCQlJWHChAn49ddfvb6Pv8Ur/LmG/C36rs0GKp988gkef/xxPPPMM1Cr1cjJycHo0aNRUlLi8vji4mLcfvvtyMnJgVqtxtNPP41Zs2Zh7dq1LTzy0NDY62fx66+/4ty5c9a/9PT0Fhpx6KmpqUG/fv2wbNkyn47nb9BZY6+hBX+HV2zduhWPPvoodu3ahe+//x5GoxGjRo1CTU2N2/fwt2jPn2towd+iD4Q2atCgQcLDDz9s91z37t2FOXPmuDz+ySefFLp372733EMPPSTccMMNzTbGUNbY6/fjjz8KAISKiooWGN3VB4Cwfv16j8fwN+iZL9eQv0PvSktLBQDC1q1b3R7D36JnvlxD/hZ91yZnVAwGA/bu3YtRo0bZPT9q1Cjs2LHD5Xt27tzpdPytt96Kn3/+GfX19c021lDkz/WzyMjIQMeOHTFixAj8+OOPzTnMVoe/wcDh79A9jUYDAEhMTHR7DH+LnvlyDS34W/SuTQYqZWVlMJlMaN++vd3z7du3x/nz512+5/z58y6PNxqNKCsra7axhiJ/rl/Hjh3x/vvvY+3atVi3bh26deuGESNGYNu2bS0x5FaBv8Gm4+/QM0EQMHv2bGRnZ6N3795uj+Nv0T1fryF/i767qjclbCrHHZcFQfC4C7Or410931Y05vp169YN3bp1sz4eMmQITp8+jddffx3Dhg1r1nG2JvwNNg1/h57l5eXhwIEDyM/P93osf4uu+XoN+Vv0XZucUVEqlRCLxU7/+i8tLXX6V4JFhw4dXB4fHh4OhULRbGMNRf5cP1duuOEGFBYWBnp4rRZ/g82Dv8MGM2fOxOeff44ff/zR6670/C261phr6Ap/i661yUBFIpFg4MCB+P777+2e//777zF06FCX7xkyZIjT8d999x0yMzMRERHRbGMNRf5cP1fUajU6duwY6OG1WvwNNo+2/jsUBAF5eXlYt24dNm/ejLS0NK/v4W/Rnj/X0JW2/lt0K2hpvEG2Zs0aISIiQli+fLlw5MgR4fHHHxeio6OF3377TRAEQZgzZ47wpz/9yXr8yZMnBZlMJvz5z38Wjhw5IixfvlyIiIgQPv3002B9haBq7PX729/+Jqxfv144fvy4cOjQIWHOnDkCAGHt2rXB+gpBV1VVJajVakGtVgsAhDfffFNQq9XCqVOnBEHgb9AXjb2G/B06e+SRRwS5XC5s2bJFOHfunPVPp9NZj+Fv0TN/riF/i75rs4GKIAjC22+/LXTq1EmQSCTCgAED7ErJpk6dKtx44412x2/ZskXIyMgQJBKJ0LlzZ+Hdd99t4RGHlsZcv8WLFwtdu3YVIiMjhYSEBCE7O1v46quvgjDq0GEpT3T8mzp1qiAI/A36orHXkL9DZ66uHwBh5cqV1mP4W/TMn2vI36LvuHsyERERhaw2maNCREREVwcGKkRERBSyGKgQERFRyGKgQkRERCGLgQoRERGFLAYqREREFLIYqBAREVHIYqBCREREIYuBChE12k033YTHH3882MMgomaybds2jB07FsnJyRCJRNiwYUOjz/Hf//4X/fv3h0wmQ6dOnfDaa6/5NZZwv95FRG3aunXrfN587rfffkNaWhrUajX69+/fvAMjooCoqalBv379MH36dEycOLHR7//mm28wZcoULF26FKNGjcLRo0fxwAMPICoqCnl5eY06F2dUiKjREhMTERsb2+KfazAYWvwzidqi0aNHY8GCBbjrrrtcvm4wGPDkk0/immuuQXR0NAYPHowtW7ZYX//3v/+NCRMm4OGHH0aXLl0wZswYPPXUU1i8eDEau3MPAxUiajTbpZ/OnTvjlVdeQW5uLmJjY5Gamor333/feqxly/uMjAyIRCLcdNNNAACj0YhZs2YhPj4eCoUCTz31FKZOnYoJEybYfU5eXh5mz54NpVKJW265BQCwdetWDBo0CFKpFB07dsScOXNgNBqt7/v000/Rp08fREVFQaFQYOTIkaipqQEAbNmyBYMGDUJ0dDTi4+ORlZWFU6dONePVImp9pk+fjoKCAqxZswYHDhzApEmTcNttt6GwsBAAoNfrERkZafeeqKgonDlzptH/e2OgQkRN9sYbbyAzMxNqtRozZszAI488gmPHjgEAfvrpJwDApk2bcO7cOaxbtw4AsHjxYnz00UdYuXIlCgoKoNVqXa6Dr1q1CuHh4SgoKMA//vEP/P7777j99ttx/fXX45dffsG7776L5cuXY8GCBQCAc+fOYfLkycjNzcXRo0exZcsW3HXXXRAEAUajERMmTMCNN96IAwcOYOfOnXjwwQchEola5kIRtQInTpzA6tWr8b///Q85OTno2rUrnnjiCWRnZ2PlypUAgFtvvRXr1q3DDz/8ALPZjOPHj+Ott94C0PC/0UYJ7ubNRHQ1uvHGG4XHHntMEARB6NSpk3DvvfdaXzObzUJSUpLw7rvvCoIgCMXFxQIAQa1W252jffv2wmuvvWZ9bDQahdTUVGH8+PF2n9O/f3+79z399NNCt27dBLPZbH3u7bffFmJiYgSTySTs3btXACD89ttvTuMuLy8XAAhbtmzx96sTtTkAhPXr11sf//e//xUACNHR0XZ/4eHhwt133y0IQsP/Dzz55JNCZGSkIBaLhYSEBGHevHkCAGH37t2N+nwm0xJRk/Xt29f630UiETp06IDS0lK3x2s0Gly4cAGDBg2yPicWizFw4ECYzWa7YzMzM+0eHz16FEOGDLGbBcnKykJ1dTXOnDmDfv36YcSIEejTpw9uvfVWjBo1Cn/4wx+QkJCAxMRETJs2DbfeeituueUWjBw5EnfffTc6duzY1EtA1GaYzWaIxWLs3bsXYrHY7rWYmBgADf8/sHjxYrzyyis4f/482rVrhx9++AFAw3JxY3Dph4iazLECSCQSOQUcrjguuQgukuyio6OdjnH3PpFIBLFYjO+//x7ffPMNevbsiaVLl6Jbt24oLi4GAKxcuRI7d+7E0KFD8cknn+C6667Drl27vH9JIgLQkG9mMplQWloKlUpl99ehQwe7Y8ViMa655hpIJBKsXr0aQ4YMQVJSUqM+j4EKETUriUQCADCZTNbn5HI52rdvb81fsbyuVqu9nq9nz57YsWOHXVCzY8cOxMbG4pprrgHQELBkZWVh/vz5UKvVkEgkWL9+vfX4jIwMzJ07Fzt27EDv3r3x8ccfN/l7ErUm1dXV2L9/P/bv3w8AKC4uxv79+1FSUoLrrrsOU6ZMwX333Yd169ahuLgYe/bsweLFi/H1118DAMrKyvDee+/h2LFj2L9/Px577DH873//s+apNAYDFSJqVklJSYiKisLGjRtx4cIFaDQaAMDMmTOxcOFCfPbZZ/j111/x2GOPoaKiwmti64wZM3D69GnMnDkTx44dw2effYYXXngBs2fPRlhYGHbv3o1XXnkFP//8M0pKSrBu3TpcvHgRPXr0QHFxMebOnYudO3fi1KlT+O6773D8+HH06NGjJS4F0VXj559/RkZGBjIyMgAAs2fPRkZGBp5//nkADTOT9913H/7yl7+gW7duGDduHHbv3o2UlBTrOVatWoXMzExkZWXh8OHD1oq7xmKOChE1q/DwcCxZsgQvvvginn/+eeTk5GDLli146qmncP78edx3330Qi8V48MEHceuttzqteTu65ppr8PXXX+Ovf/0r+vXrh8TERNx///149tlnAQBxcXHYtm0b3nrrLWi1WnTq1AlvvPEGRo8ejQsXLuDYsWNYtWoVysvL0bFjR+Tl5eGhhx5qiUtBdNW46aabPPY7iYiIwPz58zF//nyXryuVSuzcuTMgYxEJnkZCRNRCzGYzevTogbvvvhsvvfRSsIdDRCGCMypEFBSWpZcbb7wRer0ey5YtQ3FxMe65555gD42IQghzVIgoKMLCwvDhhx/i+uuvR1ZWFg4ePIhNmzYxX4SI7HDph4iIiEIWZ1SIiIgoZDFQISIiopDFQIWIiIhCFgMVIiIiClkMVIiIiChkMVAhIiKikMVAhYiIiEIWAxUiIiIKWQxUiIiIKGT9f4kXUNJqsE+cAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.scatterplot(x = 'intgross', y = 'domgross', data = movie_df)\n", + "plt.show()" + ] }, { "cell_type": "markdown", @@ -875,10 +939,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11\n", + "13\n", + "15\n", + "17\n", + "19\n", + "21\n", + "23\n", + "25\n", + "27\n" + ] + } + ], + "source": [ + "matrix1 = np.array([[1,2,3], [4,5,6], [7,8,9]])\n", + "matrix2 = np.array([[10,11,12], [13,14,15], [16,17,18]])\n", + "\n", + "for i in range(len(matrix1)):\n", + " for k in range(len(matrix2)):\n", + " print(matrix1[i][k] + matrix2[i][k])\n", + "\n" + ] }, { "cell_type": "markdown", @@ -891,10 +979,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 71, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "600\n", + "1200\n", + "980\n", + "1750\n", + "2700\n", + "2380\n", + "3200\n", + "4500\n", + "2100\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[ 3250, 4150, 2350],\n", + " [ 6400, 8200, 4735],\n", + " [ 9550, 12250, 7120]])" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "matrix3 = np.array([[10,15,20], [25,30,35], [40,45,50]])\n", + "matrix4 = np.array([[60, 80, 49], [ 70, 90, 68], [80, 100, 42]])\n", + "\n", + "for i in range(len(matrix3)):\n", + " for k in range(len(matrix4)):\n", + " print(matrix3[i][k] * matrix4[i][k])\n", + "\n", + "matrix3 @ matrix4 " + ] }, { "cell_type": "markdown", From f5dff97925d694f6ee22973df9aed77d5ea07515 Mon Sep 17 00:00:00 2001 From: Julien Smith Date: Fri, 13 Feb 2026 20:35:34 -0800 Subject: [PATCH 15/15] final submission for week 6 --- week_6_eda_matrix.ipynb | 431 +++++++++++++++++++++++++++++++++------- 1 file changed, 355 insertions(+), 76 deletions(-) diff --git a/week_6_eda_matrix.ipynb b/week_6_eda_matrix.ipynb index 8d67ab5..63b68fc 100644 --- a/week_6_eda_matrix.ipynb +++ b/week_6_eda_matrix.ipynb @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -113,7 +113,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -137,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -210,7 +210,7 @@ "4 1904 1-4 Years 1591.5" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -233,16 +233,16 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "('mortality_data.csv', )" + "('mortality_data.csv', )" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -318,7 +318,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -384,7 +384,7 @@ "2 Juneau 25000" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -473,7 +473,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -497,7 +497,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -528,7 +528,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -604,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -659,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -691,6 +691,99 @@ "Get the information about your data frame. You'll want to output the name of each column, the non-null count and the data type of each column." ] }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "year in the movie data frame is of type int64 and has a non-null count of 1794 \n", + "\n", + "\n", + "imdb in the movie data frame is of type object and has a non-null count of 1794 \n", + "\n", + "\n", + "title in the movie data frame is of type object and has a non-null count of 1794 \n", + "\n", + "\n", + "test in the movie data frame is of type object and has a non-null count of 1794 \n", + "\n", + "\n", + "clean_test in the movie data frame is of type object and has a non-null count of 1794 \n", + "\n", + "\n", + "binary in the movie data frame is of type object and has a non-null count of 1794 \n", + "\n", + "\n", + "budget in the movie data frame is of type int64 and has a non-null count of 1794 \n", + "\n", + "\n", + "domgross in the movie data frame is of type float64 and has a non-null count of 1777 \n", + "\n", + "\n", + "intgross in the movie data frame is of type float64 and has a non-null count of 1783 \n", + "\n", + "\n", + "code in the movie data frame is of type object and has a non-null count of 1794 \n", + "\n", + "\n", + "budget_2013$ in the movie data frame is of type int64 and has a non-null count of 1794 \n", + "\n", + "\n", + "domgross_2013$ in the movie data frame is of type float64 and has a non-null count of 1776 \n", + "\n", + "\n", + "intgross_2013$ in the movie data frame is of type float64 and has a non-null count of 1783 \n", + "\n", + "\n", + "period code in the movie data frame is of type float64 and has a non-null count of 1615 \n", + "\n", + "\n", + "decade code in the movie data frame is of type float64 and has a non-null count of 1615 \n", + "\n", + "\n" + ] + } + ], + "source": [ + "\n", + "\n", + "print(f\"year in the movie data frame is of type {movie_df['year'].dtype} and has a non-null count of {movie_df['year'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"imdb in the movie data frame is of type {movie_df['imdb'].dtype} and has a non-null count of {movie_df['imdb'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"title in the movie data frame is of type {movie_df['title'].dtype} and has a non-null count of {movie_df['title'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"test in the movie data frame is of type {movie_df['test'].dtype} and has a non-null count of {movie_df['test'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"clean_test in the movie data frame is of type {movie_df['clean_test'].dtype} and has a non-null count of {movie_df['clean_test'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"binary in the movie data frame is of type {movie_df['binary'].dtype} and has a non-null count of {movie_df['binary'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"budget in the movie data frame is of type {movie_df['budget'].dtype} and has a non-null count of {movie_df['budget'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"domgross in the movie data frame is of type {movie_df['domgross'].dtype} and has a non-null count of {movie_df['domgross'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"intgross in the movie data frame is of type {movie_df['intgross'].dtype} and has a non-null count of {movie_df['intgross'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"code in the movie data frame is of type {movie_df['code'].dtype} and has a non-null count of {movie_df['code'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"budget_2013$ in the movie data frame is of type {movie_df['budget_2013$'].dtype} and has a non-null count of {movie_df['budget_2013$'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"domgross_2013$ in the movie data frame is of type {movie_df['domgross_2013$'].dtype} and has a non-null count of {movie_df['domgross_2013$'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"intgross_2013$ in the movie data frame is of type {movie_df['intgross_2013$'].dtype} and has a non-null count of {movie_df['intgross_2013$'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"period code in the movie data frame is of type {movie_df['period code'].dtype} and has a non-null count of {movie_df['period code'].count()} \")\n", + "print(\"\\n\")\n", + "print(f\"decade code in the movie data frame is of type {movie_df['decade code'].dtype} and has a non-null count of {movie_df['decade code'].count()} \")\n", + "print(\"\\n\")\n", + "\n" + ] + }, { "cell_type": "code", "execution_count": null, @@ -738,7 +831,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -777,7 +870,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -822,27 +915,155 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "year\n", - "budget\n", - "domgross\n", - "intgross\n", - "budget_2013$\n", - "domgross_2013$\n", - "intgross_2013$\n", - "period code\n", + "year\n" + ] + }, + { + "data": { + "image/png": "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ug8AAIAuEVbYufrqq3Xbbbdp9erV+uqrryLdEwAAQMSEFXY++OADXX/99ZozZ448Ho+mTp2qP//5z5HuDQAAoNPCCjt5eXkqLS3VZ599puXLl8vn8+nmm29Wv379VFpaqi+++CLSfQIAAISlUxcox8fHa+zYsXr11Vf185//XAcOHFBxcbH69OmjSZMmqba2NlJ9AgAAhKVTYWfnzp2aNm2aevfurdLSUhUXF+vAgQPatGmTPvvsM919992R6hMAACAs8eE8qbS0VMuXL9e+ffs0cuRIrVq1SiNHjlS3bl9np5ycHD3//PP63ve+F9FmAQAALlRYYefZZ5/VQw89pAcffFAej+esNVdeeaWWLVvWqeYAAAA6K6yws3///vPWJCYmavLkyeEcHgAAIGLCumZn+fLleu2119qNv/baa1q5cmWnmwIAAIiUsMLOokWLlJmZ2W68V69eKikp6XRTAAAAkRJW2Dl06JBycnLajfft21eHDx/udFMAAACRElbY6dWrlz788MN24x988IF69OjR6aYAAAAiJaywc9999+lf//VftXnzZrW2tqq1tVWbNm3SrFmzdN9990W6RwAAgLCF9Wmsn/3sZzp06JCGDh2q+PivD9HW1qZJkyZxzQ4AAIgpYYWdxMREvfLKK/qP//gPffDBB0pOTlb//v3Vt2/fSPcHAADQKWGFndOuueYaXXPNNZHqBQAAIOLCCjutra1asWKFfv/736uurk5tbW0h+zdt2hSR5gAAADorrLAza9YsrVixQnfddZfy8vLkcrki3RcAAEBEhBV2ysvL9eqrr2rkyJGR7gcAACCiwvroeWJioq6++upI9wIAABBxYYWdOXPm6JlnnpExJtL9AAAARFRYb2Nt2bJFmzdv1ttvv61+/fopISEhZP/atWsj0hwAAEBnhRV2rrjiCo0dOzbSvQAAAERcWGFn+fLlke4DAACgS4R1zY4knTp1Shs3btTzzz+vxsZGSdLRo0fV1NTU4WM8++yzGjBggNLT05Wenq6bbrpJb7/9trPfGKMFCxbI6/UqOTlZBQUF2rt3b8gxAoGAZs6cqczMTKWmpmrMmDGqqakJ97QAAIBlwgo7hw4dUv/+/XX33Xdr+vTp+uKLLyRJixcvVnFxcYeP06dPHy1atEg7d+7Uzp07dfvtt+vuu+92As3ixYtVWlqqsrIy7dix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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "budget\n" + ] + }, + { + "data": { + "image/png": "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3URbUFNTI6vVKofDoaioKJ+eu9vMN316vtbw1byh/m4BAIALutjP74BeQwQAANAaCEQAAMB4BCIAAGA8AhEAADAegQgAABiPQAQAAIxHIAIAAMYjEAEAAOMRiAAAgPEIRAAAwHgEIgAAYDwCEQAAMB6BCAAAGI9ABAAAjEcgAgAAxiMQAQAA4xGIAACA8QhEAADAeAQiAABgPAIRAAAwnleBqLS01Nd9AAAA+I1Xgei6667TgAEDtHbtWp08edLXPQEAALQqrwLRJ598ol69emnatGmy2WyaOHGiPv74Y1/3BgAA0Cq8CkRJSUnKzs7W4cOHtXLlSlVWVuquu+7STTfdpOzsbB09etTXfQIAALSYy1pUHRwcrIceekh/+9vfNH/+fB04cEDTp09X586dNX78eFVUVPiqTwAAgBZzWYFo586dmjRpkq699lplZ2dr+vTpOnDggLZs2aLDhw/rwQcf9FWfAAAALSbYm4Oys7O1cuVK7du3Tw888IBefvllPfDAA7rqqtP5KiEhQcuXL9cNN9zg02YBAABagleBaNmyZXryySf1xBNPyGaznbOmS5cueumlly6rOQAAgNbgVSD6/PPPL1gTGhqqCRMmeHN6AACAVuXVGqKVK1fqtddeazb+2muvafXq1ZfdFAAAQGvyKhDNmzdPHTt2bDYeGxurzMzMy24KAACgNXkViMrKypSQkNBsvGvXrjp48OBlNwUAANCavApEsbGx2r17d7PxTz75RDExMZfdFAAAQGvyKhA9+uijevbZZ/Xee++psbFRjY2N2rJli6ZOnapHH33U1z0CAAC0KK++ZfbCCy+orKxMAwcOVHDw6VM0NTVp/PjxrCECAABtjleBKDQ0VK+++qr+/d//XZ988onCw8PVs2dPde3a1df9AQAAtDivAtEZ3bt3V/fu3X3VCwAAgF94FYgaGxu1atUqvfvuu6qqqlJTU5PH/i1btvikOQAAgNbgVSCaOnWqVq1apaFDhyopKUkWi8XXfQEAALQarwJRbm6u/va3v+mBBx7wdT8AAACtzquv3YeGhuq6667zdS8AAAB+4VUgmjZtmv74xz/K5XL5uh8AAIBW59Uts23btum9997TW2+9pZtuukkhISEe+9evX++T5gAAAFqDV4Goffv2euihh3zdCwAAgF94FYhWrlzp6z4AAAD8xqs1RJJ06tQpvfPOO1q+fLmOHTsmSTpy5Ihqa2t91hwAAEBr8GqGqKysTPfdd58OHjwop9OpwYMHKzIyUgsWLNDJkyf14osv+rpPAACAFuPVDNHUqVPVu3dvVVdXKzw83D3+0EMP6d133/VZcwAAAK3B62+ZffDBBwoNDfUY79q1qw4fPuyTxgAAAFqLVzNETU1NamxsbDZeXl6uyMjIy24KAACgNXkViAYPHqwlS5a4ty0Wi2pra/X73//e5z/ncfjwYT322GOKiYlRu3bt9NOf/lRFRUXu/S6XS7Nnz5bdbld4eLj69++vvXv3epzD6XRqypQp6tixoyIiIjRixAiVl5f7tE8AANB2eRWIFi9erIKCAvXo0UMnT57UmDFj1K1bNx0+fFjz58/3WXPV1dW68847FRISorfeekv/93//p0WLFql9+/bumgULFig7O1s5OTkqLCyUzWbT4MGD3d98k6T09HTl5eUpNzdX27ZtU21trYYNG3bOWS4AAGAei8vL39+oq6vTK6+8ouLiYjU1NenWW2/V2LFjPRZZX66ZM2fqgw8+0D/+8Y9z7ne5XLLb7UpPT9dzzz0n6fRsUFxcnObPn6+JEyfK4XCoU6dOWrNmjUaPHi3p9OMB4uPjtXHjRg0ZMuSieqmpqZHVapXD4VBUVJRvLvD/6zbzTZ+erzV8NW+ov1sAAOCCLvbz2+vnEIWHh+vJJ59UTk6Oli5dqqeeesqnYUiSNmzYoN69e+uRRx5RbGysevXqpb/85S/u/aWlpaqsrFRqaqp7LCwsTPfcc4+2b98uSSoqKlJDQ4NHjd1uV1JSkrvmXJxOp2pqajxeAADgyuTVt8xefvnlH90/fvx4r5o525dffqlly5YpIyNDv/nNb/Txxx/r2WefVVhYmMaPH6/KykpJUlxcnMdxcXFxKisrkyRVVlYqNDRUHTp0aFZz5vhzycrK0pw5c3xyHQAAILB5FYimTp3qsd3Q0KATJ04oNDRU7dq181kgampqUu/evZWZmSlJ6tWrl/bu3atly5Z5/A2LxeJxnMvlajZ2tgvVzJo1SxkZGe7tmpoaxcfHe3MZAAAgwHl1y6y6utrjVVtbq3379umuu+7SK6+84rPmrr32WvXo0cNj7MYbb9TBgwclSTabTZKazfRUVVW5Z41sNpvq6+tVXV193ppzCQsLU1RUlMcLAABcmbxeQ3S2xMREzZs3r9ns0eW48847tW/fPo+x/fv3q2vXrpKkhIQE2Ww25efnu/fX19eroKBAffv2lSQlJycrJCTEo6aiokJ79uxx1wAAALN5dcvsfIKCgnTkyBGfne9Xv/qV+vbtq8zMTI0aNUoff/yxVqxYoRUrVkg6fassPT1dmZmZSkxMVGJiojIzM9WuXTuNGTNGkmS1WpWWlqZp06YpJiZG0dHRmj59unr27KlBgwb5rFcAANB2eRWINmzY4LHtcrlUUVGhnJwc3XnnnT5pTJJuu+025eXladasWZo7d64SEhK0ZMkSjR071l0zY8YM1dXVadKkSaqurlafPn20efNmjydmL168WMHBwRo1apTq6uo0cOBArVq1SkFBQT7rFQAAtF1ePYfoqqs877RZLBZ16tRJ9957rxYtWqRrr73WZw0GCp5D5InnEAEA2oKL/fz2aoaoqanJ68YAAAACjc8WVQMAALRVXs0Q/fD5PBeSnZ3tzZ8AAABoNV4Fol27dqm4uFinTp3S9ddfL+n01+GDgoJ06623uusu9HBEAACAQOBVIBo+fLgiIyO1evVq909iVFdX64knnlC/fv00bdo0nzYJAADQkrxaQ7Ro0SJlZWV5/D5Yhw4d9MILL2jRokU+aw4AAKA1eBWIampq9PXXXzcbr6qq0rFjxy67KQAAgNbkVSB66KGH9MQTT+j1119XeXm5ysvL9frrrystLU0PP/ywr3sEAABoUV6tIXrxxRc1ffp0PfbYY2poaDh9ouBgpaWlaeHChT5tEAAAoKV5FYjatWunpUuXauHChTpw4IBcLpeuu+46RURE+Lo/AACAFndZD2asqKhQRUWFunfvroiICHnxKyAAAAB+51Ug+vbbbzVw4EB1795dDzzwgCoqKiRJTz31FF+5BwAAbY5XgehXv/qVQkJCdPDgQbVr1849Pnr0aG3atMlnzQEAALQGr9YQbd68WW+//bY6d+7sMZ6YmKiysjKfNAYAANBavJohOn78uMfM0BnffPONwsLCLrspAACA1uRVILr77rv18ssvu7ctFouampq0cOFCDRgwwGfNAQAAtAavbpktXLhQ/fv3186dO1VfX68ZM2Zo7969+u677/TBBx/4ukcAAIAW5dUMUY8ePbR7927dfvvtGjx4sI4fP66HH35Yu3bt0r/8y7/4ukcAAIAWdckzRA0NDUpNTdXy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rMLCQn+30moIRH5msVg8tl0uV7MxABfvmWee0e7du7Vt2zZ/t4JzuP7661VSUqLvv/9e//3f/60JEyaooKCAUBRADh06pKlTp2rz5s26+uqr/d1OqyEQ+UnHjh0VFBTUbDaoqqqq2awRgIszZcoUbdiwQVu3blXnzp393Q7OITQ0VNddd50kqXfv3iosLNQf//hHLV++3M+d4YyioiJVVVUpOTnZPdbY2KitW7cqJydHTqdTQUFBfuywZbCGyE9CQ0OVnJys/Px8j/H8/Hz17dvXT10BbZPL5dIzzzyj9evXa8uWLUpISPB3S7hILpdLTqfT323gBwYOHKhPP/1UJSUl7lfv3r01duxYlZSUXJFhSGKGyK8yMjI0btw49e7dWykpKVqxYoUOHjyop59+2t+t4Qdqa2v1xRdfuLdLS0tVUlKi6OhodenSxY+d4YzJkydr3bp1+vvf/67IyEj3zKvValV4eLifu8MZv/nNb3T//fcrPj5ex44dU25urt5//31t2rTJ363hByIjI5utv4uIiFBMTMwVvS6PQORHo0eP1rfffqu5c+eqoqJCSUlJ2rhxo7p27erv1vADO3fu1IABA9zbGRkZkqQJEyZo1apVfuoKP3Tm0RX9+/f3GF+5cqUef/zx1m8I5/T1119r3LhxqqiokNVq1c0336xNmzZp8ODB/m4N4DlEAAAArCECAADGIxABAADjEYgAAIDxCEQAAMB4BCIAAGA8AhEAADAegQgAABiPQAQAAPxm69atGj58uOx2uywWi954441LPsfbb7+tO+64Q5GRkerUqZP+9V//VaWlpZd0DgIRAADwm+PHj+uWW25RTk6OV8d/+eWXevDBB3XvvfeqpKREb7/9tr755hs9/PDDl3QenlQNAAACgsViUV5enkaOHOkeq6+v129/+1v99a9/1ffff6+kpCTNnz/f/VM9r7/+un7+85/L6XTqqqtOz/P8z//8jx588EE5nU6FhIRc1N9mhggAAASsJ554Qh988IFyc3O1e/duPfLII7rvvvv0+eefS5J69+6toKAgrVy5Uo2NjXI4HFqzZo1SU1MvOgxJzBABAIAAcfYM0YEDB5SYmKjy8nLZ7XZ33aBBg3T77bcrMzNT0ul1SI888oi+/fZbNTY2KiUlRRs3blT79u0v+m8zQwQAAAJScXGxXC6Xunfvrmuuucb9Kigo0IEDByRJlZWVeuqppzRhwgQVFhaqoKBAoaGh+tnPfqZLmfMJbqmLAAAAuBxNTU0KCgpSUVGRgoKCPPZdc801kqT//M//VFRUlBYsWODet3btWsXHx+ujjz7SHXfccVF/i0AEAAACUq9evdTY2Kiqqir169fvnDUnTpxoFpbObDc1NV303+KWGQAA8Jva2lqVlJSopKREklRaWqqSkhIdPHhQ3bt319ixYzV+/HitX79epaWlKiws1Pz587Vx40ZJ0tChQ1VYWKi5c+fq888/V3FxsZ544gl17dpVvXr1uug+WFQNAAD85v3339eAAQOajU+YMEGrVq1SQ0ODXnjhBb388ss6fPiwYmJilJKSojlz5qhnz56SpNzcXC1YsED79+9Xu3btlJKSovnz5+uGG2646D4IRAAAwHjcMgMAAMYjEAEAAOMRiAAAgPEIRAAAwHgEIgAAYDwCEQAAMB6BCAAAGI9ABAAAjEcgAgAAxiMQAQAA4xGIAACA8QhEAADAeP8PZBqMJDgrf+wAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "domgross\n" + ] + }, + { + "data": { + "image/png": "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iAAAgPEIRAAAwHgEIgAAYDwCEQAAMB6BCAAAGI9ABAAAjEcgAgAAxiMQAQAA4xGIAACA8QhEAADAeAQiAABgPAIRAAAwHoEIAAAYj0AEAACMRyACAADGIxABAADjEYgAAIDxCEQAAMB4BCIAAGA8AhEAADAegQgAABiPQAQAAIxHIAIAAMYjEAEAAOMRiAAAgPEIRAAAwHgEIgAAYDwCEQAAMF5AB6LvvvtOv/nNb5SQkKDw8HBddNFFevzxx9XY2OipsSxL8+fPl8vlUnh4uPr376+9e/d6naeurk7Tp09Xp06d1L59e40YMUJHjhxp6ekAAIAAFdCBaOHChXr22We1dOlSffzxx1q0aJGefPJJ/eEPf/DULFq0SLm5uVq6dKmKiooUFxenwYMH6/jx456arKws5efnKy8vTzt27FBtba2GDRumhoYGO6YFAAACTLDdDfyUd955R7fffruGDh0qSerRo4deeukl7d69W9L3q0NLlizRI488olGjRkmSVq9erdjYWK1bt06TJ0+W2+3WihUrtGbNGg0aNEiStHbtWsXHx2vr1q265ZZb7JkcAAAIGAG9QtS3b1+9+eab2r9/vyTpgw8+0I4dO3TbbbdJksrKylRZWamMjAzPZ8LCwtSvXz/t3LlTklRcXKxTp0551bhcLiUlJXlqzqSurk41NTVeGwAAaJsCeoXo4Ycfltvt1uWXX66goCA1NDTod7/7nX71q19JkiorKyVJsbGxXp+LjY3VoUOHPDWhoaHq2LFjk5rTnz+TnJwcPfbYY/6cDgAACFABvUL08ssva+3atVq3bp1KSkq0evVq/fd//7dWr17tVedwOLz2LctqMvZDP1czb948ud1uz1ZeXu77RAAAQEAL6BWif//3f9fcuXN11113SZKSk5N16NAh5eTkKDMzU3FxcZK+XwXq0qWL53NVVVWeVaO4uDjV19erurraa5WoqqpK6enpP/qzw8LCFBYW1hzTAgAAASagV4i++eYb/eIX3i0GBQV5brtPSEhQXFycCgoKPMfr6+tVWFjoCTspKSkKCQnxqqmoqNCePXt+MhABAABzBPQK0fDhw/W73/1O3bp105VXXqn3339fubm5mjhxoqTvvyrLyspSdna2EhMTlZiYqOzsbLVr105jx46VJDmdTk2aNEmzZs1SdHS0oqKiNHv2bCUnJ3vuOgMA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2duzt2/fbklqsmVmZtrdml+daY6SrJUrV9rdWrOYOHGi59/fzp07WwMHDrS2bNlid1stpq3edj9mzBirS5cuVkhIiOVyuaxRo0ZZe/futbutZvXaa69ZSUlJVlhYmHX55Zdby5cvt7ulZrN582ZLkrVv3z67WwkoDsuyLHuiGAAAQGDgGiIAAGA8AhEAADAegQgAABiPQAQAAIxHIAIAAMYjEAEAAOMRiAAAgPEIRAAAwDZvvfWWhg8fLpfLJYfDoVdfffWcz7F582Zdf/31ioiIUOfOnfVv//ZvKisrO6dzEIgAAIBtTpw4oV69emnp0qU+ff7TTz/V7bffrptvvlmlpaXavHmzvvzyS40aNeqczsOTqgEAQEBwOBzKz8/XyJEjPWP19fX6zW9+oxdffFFff/21kpKStHDhQvXv31+S9Morr+hXv/qV6urq9ItffL/O89prr+n2229XXV2dQkJCzupns0IEAAAC1r333qu3335beXl5+vDDD3XnnXfq1ltv1YEDByRJqampCgoK0sqVK9XQ0CC32601a9YoIyPjrMOQxAoRAAAIED9cITp48KASExN15MgRuVwuT92gQYN03XXXKTs7W9L31yHdeeed+uqrr9TQ0KC0tDRt3LhRHTp0OOufzQoRAAAISCUlJbIsS5deeqkuvPBCz1ZYWKiDBw9KkiorK3XfffcpMzNTRUVFKiwsVGhoqH75y1/qXNZ8gptrEgAAAOejsbFRQUFBKi4uVlBQkNexCy+8UJL0xz/+UZGRkVq0aJHn2Nq1axUfH693331X119//Vn9LAIRAAAISL1791ZDQ4Oqqqp04403nrHmm2++aRKWTu83Njae9c/iKzMAAGCb2tpalZaWqrS0VJJUVlam0tJSHT58WJdeeqnGjRunCRMmaP369SorK1NRUZEWLlyojRs3SpKGDh2qoqIiPf744zpw4IBKSkp07733qnv37urdu/dZ98FF1QAAwDZ/+9vfNGDAgCbjmZmZWrVqlU6dOqUnnnhCL7zwgo4eParo6GilpaXpscceU3JysiQpLy9PixYt0v79+9WuXTulpaVp4cKFuvzyy8+6DwIRAAAwHl+ZAQAA4xGIAACA8QhEAADAeAQiAABgPAIRAAAwHoEIAAAYj0AEAACMRyACAADGIxABAADjEYgAAIDxCEQAAMB4BCIAAGC8/we+Np6WqNhncwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "intgross\n" + ] + }, + { + "data": { + "image/png": "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9zaLFi1ScHCwxowZo+rqaqWmpiovL09BQUHumhdffFFTp051P402atSo0777CAAAmCdg3kMU6HgPkSfeQwQAaAva/HuIAAAAWguBCAAAGI9ABAAAjEcgAgAAxiMQAQAA4xGIAACA8QhEAADAeAQiAABgPAIRAAAwHoEIAAAYj0AEAACM51UgKikp8XUfAAAAfuNVILrssss0aNAgrVy5Uj///LOvewIAAGhVXgWizz77TL169dKMGTPkcDg0adIkffrpp77uDQAAoFV4FYgSExOVk5OjQ4cOafny5SorK1O/fv101VVXKScnR0eOHPF1nwAAAC3mvG6qDg4O1m233aZXX31V8+bN07fffqvMzExdfPHFGj9+vEpLS33VJwAAQIs5r0C0bds2TZ48WV26dFFOTo4yMzP17bffav369Tp06JBuvfVWX/UJAADQYoK92SgnJ0fLly/Xnj17NGzYMD3//PMaNmyYfvObX/JVfHy8li5dqssvv9ynzQIAALQErwLRkiVLdM899+juu++Ww+FosqZr165atmzZeTUHAADQGrwKRF9//fVZa0JDQzVhwgRvdg8AANCqvLqHaPny5Xrttdcajb/22mtasWLFeTcFAADQmrwKRHPnzlWnTp0ajcfExCgrK+u8mwIAAGhNXgWiffv2KT4+vtF4t27dtH///vNuCgAAoDV5FYhiYmK0c+fORuOfffaZoqOjz7spAACA1uRVILrjjjs0depUbdiwQfX19aqvr9f69es1bdo03XHHHb7uEQAAoEV59ZTZk08+qX379ik1NVXBwb/soqGhQePHj+ceIgAA0OZ4FYhCQ0P1yiuv6D/+4z/02WefqX379kpKSlK3bt183R8AAECL8yoQndKjRw/16NHDV70AAAD4hVeBqL6+Xnl5eXr//fdVXl6uhoYGj/Xr16/3SXMAAACtwatANG3aNOXl5Wn48OFKTEyUzWbzdV8AAACtxqtAtGrVKr366qsaNmyYr/sBAABodV49dh8aGqrLLrvM170AAAD4hVeBaMaMGfrLX/4iy7J83Q8AAECr8+pPZps2bdKGDRv0zjvv6KqrrlJISIjH+tWrV/ukOQAAgNbgVSC66KKLdNttt/m6FwAAAL/wKhAtX77c130AAAD4jVf3EEnSyZMn9d5772np0qU6duyYJOnw4cOqqqryWXMnT57UY489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aNeuXbLZbC3RDwAAQKvz6k9m48eP17Jly3zdCwAAgF94dVN1bW2t/uu//ksFBQXq3bt3o98wy8nJ8UlzAAAAreGcAtF3332n7t27a9euXbr22mslSXv37vWo4U9pAACgrTmnQJSQkKDS0lJt2LBB0i8/1fHXv/5VsbGxLdIcAABAazine4h+/Wv277zzjo4fP+7ThgAAAFqbVzdVn/LrgAQAANAWnVMgstlsje4R4p4hAADQ1p3TPUSWZen3v/+9+wdcf/75Z91///2NnjJbvXq17zoEAABoYecUiCZMmODx+a677vJpMwAAAP5wToFo+fLlLdUHAACA35zXTdUAAAAXgoAPRIcOHdJdd92l6OhodejQQddcc42Kiorc6y3L0pw5c+R0OtW+fXsNHDhQu3fv9thHTU2NpkyZok6dOik8PFyjRo3SwYMHW/tQAABAgAroQFRRUaEbb7xRISEheuedd/TFF19o4cKFuuiii9w18+fPV05OjnJzc7V161Y5HA4NGTJEx44dc9dkZGQoPz9fq1at0qZNm1RVVaURI0aovr7eD0cFAAACjc0K4JcJzZo1Sx999JE+/PDDJtdbliWn06mMjAw98sgjkn6ZDYqNjdW8efM0adIkuVwude7cWS+88ILGjh0rSTp8+LDi4uL09ttva+jQoc3qpbKyUna7XS6XS5GRkb45wP/VfdZbPt1fa/h+7nB/twAAwFk199/vgJ4hevPNN9W7d2/97ne/U0xMjHr16qXnnnvOvb6kpERlZWVKS0tzj4WFhWnAgAHavHmzJKmoqEh1dXUeNU6nU4mJie6aptTU1KiystJjAQAAF6aADkTfffedlixZooSEBL377ru6//77NXXqVD3//POSpLKyMklq9FtqsbGx7nVlZWUKDQ1Vx44dT1vTlOzsbNntdvcSFxfny0MDAAABJKADUUNDg6699lplZWWpV69emjRpku69914tWbLEo+7Xb8u2LOusb9A+W83s2bPlcrncy4EDB7w/EAAAENACOhB16dJFV155pcfYFVdcof3790uSHA6HJDWa6SkvL3fPGjkcDtXW1qqiouK0NU0JCwtTZGSkxwIAAC5MAR2IbrzxRu3Zs8djbO/everWrZskKT4+Xg6HQwUFBe71tbW1KiwsVN++fSVJycnJCgkJ8agpLS3Vrl273DUAAMBs5/Sm6tb2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "budget_2013$\n" + ] + }, + { + "data": { + "image/png": "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io2NVW5urs6ePasXX3wx2HMCAAC0moB2iObMmaO0tDTV1NQoOjrad/yRRx7RW2+9FbThAAAA2kLA7zJ79913FRkZ6Xe8W7duOnXqVFAGAwAAaCsB7RA1NzerqampxfGTJ0/6fUI0AABAexBQEA0dOlSrVq3yXXc4HKqvr9ePf/zjVv86DwAAgGAL6CWzlStXatCgQerZs6fOnj2riRMn6qOPPlLnzp310ksvBXtGAACAVhVQELndbpWXl+ull17Svn371NzcrOnTp2vSpEl+J1kDAAC0BwEFkSRFR0frySef1JNPPhnMeQAAANpcQEG0cePGr719ypQpAQ0DAABgh4CCaM6cOX7Xz507py+//FKRkZGKiYkhiAAAQLsS0LvMampq/C719fU6fPiw+vfvz0nVAACg3Qn4u8y+Kjk5WcuWLWuxewQAABDqghZEkhQWFqbTp08H8yEBAABaXUDnEL322mt+1y3LUmVlpfLz83XfffcFZTAAAIC2ElAQjR071u+6w+HQTTfdpAcffFDPP/98MOYCAABoMwEFUXNzc7DnAAAAsE1QzyECAABojwLaIcrKyrritXl5eYH8CAAAgDYTUBDt379f+/bt0/nz53XbbbdJko4cOaKwsDD16dPHt87hcARnSgAAgFYUUBCNGjVKsbGx2rBhgzp27Cjpwoc1Tps2Tffff7/mzp0b1CEBAABaU0DnED3//PPKycnxxZAkdezYUUuXLuVdZgAAoN0JKIhqa2v1ySeftDheXV2turq6bz0UAABAWwooiB555BFNmzZNr7zyik6ePKmTJ0/qlVde0fTp0zVu3LhgzwgAANCqAjqH6MUXX9S8efP0+OOP69y5cxceKDxc06dP14oVK4I6IAAAQGsLKIhiYmL0wgsvaMWKFTp69Kgsy9Ktt96qDh06BHs+AACAVvetPpixsrJSlZWV6tGjhzp06CDLsoI1FwAAQJsJKIg+//xzDR48WD169NDw4cNVWVkpSfrBD37AW+4BAEC7E1AQ/fCHP1RERISOHz+umJgY3/EJEyZo+/btQRsOAACgLQR0DtGOHTv0xhtvqGvXrn7Hk5OTdezYsaAMBgAA0FYC2iE6c+aM387QRZ999pmioqK+9VAAAABtKaAgeuCBB7Rx40bfdYfDoebmZq1YsUKDBg0K2nAAAABtIaCXzFasWKGBAwdq7969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qg41n332mZqamlp8uWxCQkKLL6EFTGFZlrKystS/f3+lpKTYPY5xPvzwQ6Wnp+vs2bO64YYbVFRUpJ49e9o9llEKCwu1b98+lZaW2j2KcQgimzkcDr/rlmW1OAaY4umnn9aBAwe0e/duu0cx0m233aby8nJ98cUX+u1vf6upU6eqpKSEKGojJ06c0Jw5c7Rjxw5df/31do9jHILIJp07d1ZYWFiL3aDq6uoWu0aACWbPnq3XXntNu3btUteuXe0ex0iRkZG69dZbJUlpaWkqLS3Vz372M61Zs8bmycxQVlam6upqpaam+o41NTVp165dys/Pl9frVVhYmI0TXts4h8gmkZGRSk1NVXFxsd/x4uJi9evXz6apgLZnWZaefvppbd26VTt37lRSUpLdI+H/syxLXq/X7jGMMXjwYH344YcqLy/3XdLS0jRp0iSVl5cTQ62MHSIbZWVlafLkyUpLS1N6errWrl2r48eP66mnnrJ7NGPU19frL3/5i+96RUWFysvL1alTJ91yyy02TmaOWbNmacuWLfrd736n2NhY366p0+lUdHS0zdOZ49/+7d/08MMPKzExUXV1dSosLNQ777yj7du32z2aMWJjY1ucO9ehQwfFx8dzTl0bIIhsNGHCBH3++edasmSJKisrlZKSom3btqlbt252j2aMvXv3atCgQb7rWVlZkqSpU6eqoKDApqnMcvFjJwYOHOh3fP369XriiSfafiBDffLJJ5o8ebIqKyvldDp11113afv27Ro6dKjdowFtgs8hAgAAxuMcIgAAYDyCCAAAGI8gAgAAxiOIAACA8QgiAABgPIIIAAAYjyACAADGI4gAAIBtdu3apVGjRsntdsvhcOjVV1+96sd44403dO+99yo2NlY33XST/vEf/1EVFRVX9RgEEQAAsM2ZM2d09913Kz8/P6D7f/zxxxozZowefPBBlZeX64033tBnn32mcePGXdXj8EnVAAAgJDgcDhUVFWns2LG+Y42NjfrRj36kX/3qV/riiy+UkpKi5cuX+77u55VXXtH3v/99eb1eXXfdhX2e//mf/9GYMWPk9XoVERFxRT+bHSIAABCypk2bpnfffVeFhYU6cOCAHn30UT300EP66KOPJElpaWkKCwvT+vXr1dTUJI/Ho02bNikjI+OKY0hihwgAAISIr+4QHT16VMnJyTp58qTcbrdv3ZAhQ/S9731P2dnZki6ch/Too4/q888/V1NTk9LT07Vt2zbdeOONV/yz2SECAAAhad++fbIsSz169NANN9zgu5SUlOjo0aOSpKqqKv3gBz/Q1KlTVVpaqpKSEkVGRuqf/umfdDV7PuGt9SQAAAC+jebmZoWFhamsrExhYWF+t91www2SpP/6r/9SXFyccnNzfbdt3rxZiYmJ+tOf/qR77733in4WQQQAAEJS79691dTUpOrqat1///2XXPPll1+2iKWL15ubm6/4Z/GSGQAAsE19fb3Ky8tVXl4uSaqoqFB5ebmOHz+uHj16aNKkSZoyZYq2bt2qiooKlZaWavny5dq2bZskacSIESotLdWSJUv00Ucfad++fZo2bZq6deum3r17X/EcnFQNAABs884772jQoEEtjk+dOlUFBQU6d+6cli5dqo0bN+rUqVOKj49Xenq6Fi9erF69ekmSCgsLlZubqyNHjigmJkbp6elavny5br/99iuegyACAADG4yUzAABgPIIIAAAYjyACAADGI4gAAIDxCCIAAGA8gggAABiPIAIAAMYjiAAAgPEIIgAAYDyCCAAAGI8gAgAAxiOIAACA8f4fBTo/eugH/lAAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "domgross_2013$\n" + ] + }, + { + "data": { + "image/png": "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bt26acOGDWrevLm5z9y5cxUYGKikpCSdPn1affv2VVZWlgICAsyaN954Q+PHjze/jTZ06NDzPvsIAABYj988h8jf8RwidzyHCADQEDT45xABAADUFwIRAACwPAIRAACwPAIRAACwPAIRAACwPAIRAACwPAIRAACwPAIRAACwPAIRAACwPI8CUUFBgbf7AAAA8BmPAtH111+vPn36aPny5Tpz5oy3ewIAAKhXHgWiL774Ql26dNGkSZPkcDg0ZswYff75597uDQAAoF54FIhiY2OVkZGhI0eOaMmSJSoqKtLtt9+uG2+8URkZGTp27Ji3+wQAALhiLuum6sDAQN1777166623NHPmTO3fv19paWm65pprNGrUKBUWFnqrTwAAgCvmsgLRzp07NXbsWLVu3VoZGRlKS0vT/v379fHHH+vIkSO65557vNUnAADAFRPoyU4ZGRlasmSJvvvuOw0cOFCvv/66Bg4cqKuu+i1ftW/fXgsXLlSnTp282iwAAMCV4FEgWrBggR555BE9/PDDcjgctda0adNGixcvvqzmAAAA6oNHgej777+/aE1wcLBGjx7tyeEBAADqlUf3EC1ZskSrV6+uMb569WotXbr0spsCAACoTx4FohkzZqhly5Y1xiMjI5Wenn7ZTQEAANQnjwLRgQMH1L59+xrjbdu21cGDBy+7KQAAgPrkUSCKjIzUl19+WWP8iy++UERExGU3BQAAUJ88CkQPPPCAxo8fr40bN6qqqkpVVVX6+OOPNWHCBD3wwAPe7hEAAOCK8uhbZi+++KIOHDigvn37KjDwt0NUV1dr1KhR3EMEAAAaHI8CUXBwsN58803913/9l7744guFhoYqLi5Obdu29XZ/AAAAV5xHgeisDh06qEOHDt7qBQAAwCc8CkRVVVXKysrSRx99pOLiYlVXV7tt//jjj73SHAAAQH3wKBBNmDBBWVlZGjRokGJjY2Wz2bzdFwAAQL3xKBCtWrVKb731lgYOHOjtfgAAAOqdR1+7Dw4O1vXXX+/tXgAAAHzCo0A0adIkvfTSSzIMw9v9AAAA1DuPPjLbvHmzNm7cqPfff1833nijgoKC3LavWbPGK80BAADUB48C0dVXX617773X270AAAD4hEeBaMmSJd7uAwAAwGc8uodIkn799Vd9+OGHWrhwoU6ePClJOnr0qMrKyrzWHAAAQH3w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/vU9f8MwdPLkSTmdzgvWWSIQtWzZUgEBATWuBhUXF9e4anRWSEiIQkJC3MauvvrqK9WiwsLCLHlinMX8rTt/K89dsvb8rTx3ifnX5/wvdGXoLEvcVB0cHKz4+Hjl5OS4jefk5KhHjx4+6goAAPgLS1whkqSJEycqOTlZXbt2VUJCghYtWqSDBw/qiSee8HVrAADAxywTiIYPH66//e1veuGFF1RYWKjY2FitW7dObdu29WlfISEh+uMf/1jj4zmrYP7Wnb+V5y5Ze/5WnrvE/P11/jbjYt9DAwAAaOQscQ8RAADAhRCIAACA5RGIAACA5RGIAACA5RGIroD58+erffv2atKkieLj4/Xpp59esD43N1fx8fFq0qSJrr32Wr366qs1at555x117txZISEh6ty5s7Kzs69U+5elLnNfs2aN+vfvr1atWiksLEwJCQn64IMP3GqysrJks9lqLGfOnLnSU/FIXeb/ySef1Dq3b7/91q2uobz3Ut3m/9BDD9U6/xtvvNGsaSjv/6ZNmzRkyBA5nU7ZbDatXbv2ovs0pvO+rvNvTOd+Xefe2M77us7fn897ApGXvfnmm0pNTdVzzz2n3bt364477tDdd9+tgwcP1lpfUFCggQMH6o477tDu3bv1H//xHxo/frzeeecds2br1q0aPny4kpOT9cUXXyg5OVlJSUnavn17fU3rktR17ps2bVL//v21bt065eXlqU+fPhoyZIh2797tVhcWFqbCwkK3pUmTJvUxpTqp6/zP+u6779zmFhMTY25rKO+9VPf5v/TSS27zPnTokMLDw3X//fe71TWE9//UqVO66aablJmZeUn1jem8l+o+/8Z07td17mc1lvO+rvP36/PegFfddtttxhNPPOE21qlTJ2PKlCm11k+ePNno1KmT29iYMWOM7t27m+tJSUnGXXfd5VYzYMAA44EHHvBS195R17nXpnPnzsbzzz9vri9ZssSw2+3eavGKquv8N27caEgySkpKznvMhvLeG8blv//Z2dmGzWYzfvrpJ3OsIb3/Z0kysrOzL1jTmM77c13K/GvTkM/9sy5l7o3tvP9Hnrz3/nTec4XIiyoqKpSXl6fExES38cTERG3ZsqXWfbZu3VqjfsCAAdq5c6cqKysvWHO+Y/qCJ3M/V3V1tU6ePKnw8HC38bKyMrVt21bXXHONBg8eXONfkf7gcubfpUsXtW7dWn379tXGjRvdtjWE917yzvu/ePFi9evXr8bDUhvC+19XjeW895aGfO57qjGc997gT+c9gciLjh8/rqqqqho/GBsVFVXjh2XPKioqqrX+119/1fHjxy9Yc75j+oIncz/XnDlzdOrUKSUlJZljnTp1UlZWlt59912tXLlSTZo0Uc+ePfX99997tf/L5cn8W7durUWLFumdd97RmjVr1LFjR/Xt21ebNm0yaxrCey9d/vtfWFio999/X48++qjbeEN5/+uqsZz33tKQz/26akzn/eXyt/PeMj/dUZ9sNpvbumEYNcYuVn/ueF2P6Sue9rly5UpNmzZNf/3rXxUZGWmOd+/eXd27dzfXe/bsqVtuuUWvvPKKXn75Ze817iV1mX/Hjh3VsWNHcz0hIUGHDh3Sn//8Z915550eHdPXPO01KytLV199tYYNG+Y23tDe/7poTOf95Wgs5/6laoznvaf87bznCpEXtWzZUgEBATVSfHFxcY20f5bD4ai1PjAwUBEREResOd8xfcGTuZ/15ptvKiUlRW+99Zb69et3wdqrrrpKt956q9/9K/Fy5v+Punfv7ja3hvDeS5c3f8Mw9D//8z9KTk5WcHDwBWv99f2vq8Zy3l+uxnDue0NDPe8vhz+e9wQiLwoODlZ8fLxycnLcxnNyctSjR49a90lISKhRv2HDBnXt2lVBQUEXrDnfMX3Bk7lLv/3r8KGHHtKKFSs0aNCgi76OYRjKz89X69atL7tnb/J0/ufavXu329wawnsvXd78c3Nz9cMPPyglJeWir+Ov739dNZbz/nI0lnPfGxrqeX85/PK8r/fbuBu5VatWGUFBQcbixYuNr7/+2khNTTWaNWtm3kE/ZcoUIzk52az/8ccfjaZNmxpPP/208fXXXxuLFy82goKCjLffftus+eyzz4yAgABjxowZxjfffGPMmDHDCAwMNLZt21bv87uQus59xYoVRmBgoPGXv/zFKCwsNJcTJ06YNdOmTTPWr19v7N+/39i9e7fx8MMPG4GBgcb27dvrfX4XU9f5z50718jOzjb27dtn7Nmzx5gyZYohyXjnnXfMmoby3htG3ed/1oMPPmh069at1mM2lPf/5MmTxu7du43du3cbkoyMjAxj9+7dxoEDBwzDaNznvWHUff6N6dyv69wb23lf1/mf5Y/nPYHoCvjLX/5itG3b1ggODjZuueUWIzc319w2evRoo1evXm71n3zyidGlSxcjODjYaNeunbFgwYIax1y9erXRsWNHIygoyOjUqZPbyeNP6jL3Xr16GZJqLKNHjzZrUlNTjTZt2hjBwcFGq1atjMTERGPLli31OKO6qcv8Z86caVx33XVGkyZNjBYtWhi333678d5779U4ZkN57w2j7v/tnzhxwggNDTUWLVpU6/Eayvt/9qvU5/tvubGf93Wdf2M69+s698Z23nvy376/nvc2w/j/O/kAAAAsinuIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACAz2zatElDhgyR0+mUzWbT2rVr63yMt956SzfffLOaNm2qtm3bavbs2XU+BoEIAAD4zKlTp3TTTTcpMzPTo/3ff/99jRw5Uk888YT27Nmj+fPnKyMjo87H40nVAADAL9hsNmVnZ2vYsGHmWEVFhX7/+9/rjTfe0IkTJxQbG6uZM2eqd+/ekqQRI0aosrJSq1evNveZN2+e5syZo4MHD8pms13Sa3OFCAAA+K2HH35Yn332mVatWqUvv/xS999/v+666y59//33kqTy8nI1adLEbZ/Q0FAdPnxYBw4cuOTXIRABAAC/tH//fq1cuVKrV6/WHXfcoeuuu05paWm6/fbbtWTJEknSgAEDtGbNGn300Ueqrq7Wvn37NG/ePElSYWHhJb9W4JWYAAAAwOXatWuXDMNQhw4d3MbLy8sVEREhSXrssce0f/9+DR48WJWVlQoLC9OECRM0bdo0BQQEXPJrEYgAAIBfqq6uVkBAgPLy8mqEm3/6p3+S9Nt9RzNnzlR6erqKiorUqlUrffTRR5Kkdu3aXfJrEYgAAIBf6tKli6qqqlRcXKw77rjjgrUBAQH653/+Z0nSypUrlZCQoMjIyEt+LQIRAADwmbKyMv3www/mekFBgfLz8xUeHq4OHTpo5MiRGjVqlObMmaMuXbro+PHj+vjjjxUXF6eBAwfq+PHjevvtt9W7d2+dOXNGS5Ys0erVq5Wbm1unPvjaPQAA8JlPPvlEffr0qTE+evRoZWVlqbKyUi+++KJef/11HTlyRBEREUpISNDzzz+vuLg4HT9+XEOGDNFXX30lwzCUkJCgP/3pT+rWrVud+iAQAQAAy+Nr9wAAwPIIRAAAwPIIRAAAwPIIRAAAwPIIRAAAwPIIRAAAwPIIRAAAwPIIRAAAwPIIRAAAwPIIRAAAwPIIRAAAwPIIRAAAwPL+D63GkTbT5ikNAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "intgross_2013$\n" + ] + }, + { + "data": { + "image/png": "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s/7HH3/UsWPH6q3XhubLuWnbtq2WLl2q119/XatXr1bnzp2VnJysDRs2NETLjZop88YXps4by7I0ZcoU9e7dW/Hx8WetM3HuXOi5MWnufPbZZ7rssssUFhamCRMmKCcnR126dKmz9lKdM8b8dEcgORwOr8+WZdUaO199XeOXgos5N507d1bnzp3tz0lJSTp48KD+53/+R7/61a/qtc+mwKR5czFMnTcPPfSQdu7cqY0bN5631rS5c6HnxqS507lzZxUUFOj777/X66+/rrFjxyovL++soehSnDNcIapHrVu3VlBQUK0rHiUlJbXS9Rkul6vO+uDgYEVFRdVbrw3Nl3NTl5tuuklfffWVv9trckyZN/5yqc+bSZMm6c0339T69evVrl27c9aaNncu5tzU5VKdO6Ghobr66qvVo0cPZWZmqlu3bnrqqafqrL1U5wyBqB6FhoYqMTFRubm5XuO5ubnq1atXndskJSXVql+7dq169OihkJCQeuu1oflybuqyfft2tW3b1t/tNTmmzBt/uVTnjWVZeuihh7R69WqtW7dOHTt2PO82pswdX85NXS7VufNTlmWpoqKiznWX7JwJ0M3cxli1apUVEhJiLVu2zPr888+ttLQ0q2XLlta3335rWZZlTZ8+3UpNTbXrv/nmG6tFixbWI488Yn3++efWsmXLrJCQEOu1114L1CHUm4s9NwsWLLBycnKsvXv3Wrt27bKmT59uSbJef/31QB1CvTl+/Li1fft2a/v27ZYkKysry9q+fbu1f/9+y7LMnjcXe25Mmjf/+Z//aTmdTuuDDz6wioqK7OXkyZN2jalzx5dzY8rcmTFjhrVhwwarsLDQ2rlzp/X73//e+sUvfmGtXbvWsixz5gyBqAH87W9/s9q3b2+FhoZa119/vddjnmPHjrX69OnjVf/BBx9Y3bt3t0JDQ60OHTpYS5YsaeCOG87FnJs5c+ZYV111ldWsWTOrVatWVu/eva233norAF3XvzOP+/50GTt2rGVZZs+biz03Js2bus6LJGv58uV2jalzx5dzY8rcue++++z/H27Tpo2VnJxshyHLMmfOOCzr/90JBQAAYCjuIQIAAMYjEAEAAOMRiAAAgPEIRAAAwHgEIgAAYDwCEQAAMB6BCAAAGI9ABAAAAmbDhg0aOnSo3G63HA6H3njjjYvexyuvvKLrrrtOLVq0UPv27TVv3ryL3geBCAAABMyJEyfUrVs3LVq0yKft33nnHY0ePVoTJkzQrl27tHjxYmVlZV30/nhTNQAAaBQcDodycnI0fPhwe6yyslJ/+MMf9OKLL+r7779XfHy85syZo759+0qSRo0apaqqKr366qv2NgsXLtT8+fN14MABORyOC/rbXCECAACN1r333quPPvpIq1at0s6dO/Xb3/5Wt956q7766itJUkVFhZo1a+a1TfPmzXXo0CHt37//gv8OgQgAADRK+/bt08qVK/Xqq6/qlltu0VVXXaX09HT17t1by5cvlyQNHDhQq1ev1vvvv6+amhrt3btXCxculCQVFRVd8N8Kro8DAAAA+Lm2bdsmy7LUqVMnr/GKigpFRUVJku6//37t27dPQ4YMUVVVlSIiIvTwww9r5syZCgoKuuC/RSACAACNUk1NjYKCgpSfn18r3Fx22WWSTt93NGfOHGVkZKi4uFht2rTR+++/L0nq0KHDBf8tAhEAAGiUunfvrurqapWUlOiWW245Z21QUJD+7d/+TZK0cuVKJSUlKTo6+oL/FoEIAAAETHl5ub7++mv7c2FhoQoKChQZGalOnTpp9OjRGjNmjObPn6/u3bvr2LFjWrdunRISEjRo0CAdO3ZMr732mvr27asffvhBy5cv16uvvqq8vLyL6oPH7gEAQMB88MEH6tevX63xsWPHKjs7W1VVVXriiSf0/PPP6/Dhw4qKilJSUpJmzZqlhIQEHTt2TEOHDtVnn30my7KUlJSkJ598Uj179ryoPghEAADAeDx2DwAAjEcgAgAAxiMQAQAA4xGIAACA8QhEAADAeAQiAABgPAIRAAAwHoEIAAAYj0AEAACMRyACAADGIxABAADjEYgAAIDx/j/sBUoHfGj0FAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "period code\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "decade code\n" ] }, { "data": { - "image/png": "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MUQiIlIklShRgv79+zN69Gjc3Nzw8PBgwoQJFCt2py/A39+fZ555hgEDBrBgwQKcnJwYN24cTz75JM8880yO91u5cmVat27NwIEDmTdvHjY2NowcORJ7e/ssvT9/N3r0aHr06EGtWrVo1aoV69atY/Xq1WzevBm489RbRkYG9evXx8HBgaVLl2Jvb0+5cuVYv349v/zyC02bNqVUqVJERkaSmZlpukUo96ceIhERKbKmT59O06ZN6dy5M61bt6Zx48bUrl3btD4iIoLatWvTsWNHgoODMRqNREZGZrkl9qiWLFmCh4cHTZs25dlnn2XAgAE4OTlRvHjx+27XpUsXPv74Y6ZPn061atVYsGABERERNG/eHAAXFxc+++wzGjVqRI0aNfjhhx9Yt24dbm5uuLi4sHr1alq2bEmVKlWYP38+y5cvp1q1av/oWCyFwfigm6wCQHJyMs7OziQlJVGyZMlcbfuHLRUeXKmQadXyTEGHICL54NatW8TFxeHn5/fAH3PJ3sWLF/Hx8WHz5s20atWqoMMpcu53nT7s77dumYmIiOSyLVu2cP36dapXr058fDxjxozB19eXpk2bFnRokg0lRCIiIrksLS2NN954g19++QUnJycaNmzIsmXL/vGtOMk7SohERERyWUhICCEhIQUdhjwCDaoWERERi6eESERERCxegSZE27dvp1OnTnh7e2MwGFi7dq3Z+r59+2IwGMw+DRo0MKuTmprKsGHDKF26NI6OjnTu3JmLFy+a1bl69Sq9e/fG2dkZZ2dnevfurZk7RURExKRAE6KUlBRq1qzJnDlzsq3Trl074uPjTZ/IyEiz9SNGjGDNmjWsWLGCHTt2cP36dTp27EhGRoapTq9evYiJiWHDhg1s2LCBmJgYevfunWfHJSIiIo+XAh1U3b59e9q3b3/fOnZ2dnh6et5zXVJSEgsXLmTp0qW0bt0agC+++MI010NISAixsbFs2LCBPXv2mF7g99lnnxEcHMzJkyc1g6eIiIgU/jFEUVFRuLu7U6lSJQYMGGB6mzBAdHQ0aWlptG3b1lTm7e1NYGAgu3btAmD37t04Ozubvc24QYMGODs7m+rcS2pqKsnJyWYfERERKZoKdULUvn17li1bxpYtW5gxYwb79++nZcuWpKamApCQkICtrS2lSpUy287Dw4OEhARTHXd39yxtu7u7m+rc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F8DUqVPp1q0bvXv3platWvz88898//33lCpVCrhzy2vVqlWsW7eOmjVrMn/+fCZPnmy2jxo1arBt2zZOnz5NkyZNCAoK4q233sr2Nt7jLkdPmX377bdmy0ajkfj4eObMmYOPjw/fffddrgVYWOgpM3N6ykzEMuhdZvI4KLCnzLp06WK2bDAYeOKJJ2jZsuU9J74SERERKcxy/C4zERERkaIiV8cQiYiIiDyOctRD9PdR9Pczc+bMnOxCREREJN/kKCE6dOgQBw8eJD093TTr56lTp7CysqJWrVqmen+fFEpERESkMMpRQtSpUyecnJxYvHix6RG+q1ev8tJLL9GkSRNGjhyZq0GKiEjB0msvpTDLjeszR2OIZsyYwZQpU0zJEECpUqWYNGmSnjITESlCbGxsALhx40YBRyKSvbvX593rNSdy1EOUnJzMpUuXqFatmll5YmIif/75Z46DERGRwsXKygoXFxcSExMBcHBw0HAIKTSMRiM3btwgMTERFxeXLO+kexQ5SoieffZZXnrpJWbMmEGDBg2AO+9AGT16NF27ds1xMCIiUvjcfa/X3aRIpLBxcXExXac5laOEaP78+YwaNYp//etfpKWl3WnI2pr+/ftnmbZcREQebwaDAS8vL9zd3U3/zxcpLGxsbP5Rz9BdOUqIHBwcmDt3LtOnT+fMmTMYjcb7vpVXREQef1ZWVrnywyNSGP2jiRnj4+OJj4+nUqVKODo66ikEEREReSzlKCH6448/aNWqFZUqVaJDhw7Ex8cD8PLLL+uRexEREXns5Cghev3117GxseH8+fM4ODiYynv27MmGDRtyLTgRERGR/JCjMUQbN27k+++/p0yZMmbl/v7+nDt3LlcCExEREckvOeohSklJMesZuuvy5cvY2dn946BERERE8lOOEqKmTZuyZMkS07LBYCAzM5Pp06fTokWLXAtOREREJD/k6JbZ9OnTad68OQcOHOD27duMGTOG48ePc+XKFXbu3JnbMYqIiIjkqRz1EFWtWpUjR45Qr1492rRpQ0pKCl27duXQoUNUqFAht2MUERERyVOP3EOUlpZG27ZtWbBgAe+++25exCQiIiKSrx65h8jGxoZjx47p5X4iIiJSZOTollloaCgLFy7M7VhERERECkSOBlXfvn2bzz//nE2bNlGnTp0s7zCbOXNmrgQnIiIikh8eKSH65Zdf8PX15dixY9SqVQuAU6dOmdXRrTQRERF53DxSQuTv7098fDxbt24F7ryqY/bs2Xh4eORJcCIiIiL54ZHGEP39bfbfffcdKSkpuRqQiIiISH7L0aDqu/6eIOUFX19fDAZDls+QIUMA6Nu3b5Z1DRo0MGsjNTWVYcOGUbp0aRwdHencuTMXL17M89hFRETk8fBICdHdhOPvZXlp//79xMfHmz6bNm0CoHv37qY67dq1M6sTGRlp1saIESNYs2YNK1asYMeOHVy/fp2OHTuSkZGRp7GLiIjI4+GRxhAZjUb69u1reoHrrVu3eOWVV7I8ZbZ69epcC/CJJ54wW546dSoVKlSgWbNmpjI7Ozs8PT3vuX1SUhILFy5k6dKltG7dGoAvvvgCHx8fNm/eTEhISK7FKiIiIo+nR0qI+vTpY7b8r3/9K1eDeZDbt2/zxRdfEBYWZtYzFRUVhbu7Oy4uLjRr1owPPvgAd3d3AKKjo02za9/l7e1NYGAgu3btyjYhSk1NJTU11bScnJycR0clIiIiBe2REqKIiIi8iuOhrF27lmvXrtG3b19TWfv27enevTvlypUjLi6Ot956i5YtWxIdHY2dnR0JCQnY2tpSqlQps7Y8PDxISEjIdl9TpkzRq0lEREQsRI4mZiwoCxcupH379nh7e5vKevbsafp3YGAgderUoVy5cvzvf/+ja9eu2bZlNBrvO/5p/PjxhIWFmZaTk5Px8fH5h0cgIiIihdFjkxCdO3eOzZs3P3B8kpeXF+XKleP06dMAeHp6cvv2ba5evWrWS5SYmEjDhg2zbcfOzs40VkpERESKtn/02H1+ioiIwN3dnaeffvq+9f744w8uXLiAl5cXALVr18bGxsb0dBpAfHw8x44du29CJCIiIpbjseghyszMJCIigj59+mBt/X8hX79+nYkTJ9KtWze8vLw4e/Ysb7zxBqVLl+bZZ58FwNnZmf79+zNy5Ejc3NxwdXVl1KhRVK9e3fTUmYiIiFi2xyIh2rx5M+fPn6dfv35m5VZWVhw9epQlS5Zw7do1vLy8aNGiBStXrsTJyclULzw8HGtra3r06MHNmzdp1aoVixYtwsrKKr8PRURERAohgzE/ppsuApKTk3F2diYpKYmSJUvmats/bKmQq+3lh1YtzxR0CCIiIg/0sL/fj80YIhEREZG8ooRIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELF6hTogmTpyIwWAw+3h6eprWG41GJk6ciLe3N/b29jRv3pzjx4+btZGamsqwYcMoXbo0jo6OdO7cmYsXL+b3oYiIiEghVqgTIoBq1aoRHx9v+hw9etS07sMPP2TmzJnMmTOH/fv34+npSZs2bfjzzz9NdUaMGMGaNWtYsWIFO3bs4Pr163Ts2JGMjIyCOBwREREphKwLOoAHsba2NusVustoNDJr1iwmTJhA165dAVi8eDEeHh58+eWXDBo0iKSkJBYuXMjSpUtp3bo1AF988QU+Pj5s3ryZkJCQfD0WERERKZwKfQ/R6dOn8fb2xs/Pj+eff55ffvkFgLi4OBISEmjbtq2prp2dHc2aNWPXrl0AREdHk5aWZlbH29ubwMBAU53spKamkpycbPYRERGRoqlQJ0T169dnyZIlfP/993z22WckJCTQsGFD/vjjDxISEgDw8PAw28bDw8O0LiEhAVtbW0qVKpVtnexMmTIFZ2dn08fHxycXj0xEREQKk0KdELVv355u3bpRvXp1Wrduzf/+9z/gzq2xuwwGg9k2RqMxS9nfPUyd8ePHk5SUZPpcuHAhh0chIiIihV2hToj+ztHRkerVq3P69GnTuKK/9/QkJiaaeo08PT25ffs2V69ezbZOduzs7ChZsqTZR0RERIqmxyohSk1NJTY2Fi8vL/z8/PD09GTTpk2m9bdv32bbtm00bNgQgNq1a2NjY2NWJz4+nmPHjpnqiIiIiBTqp8xGjRpFp06dKFu2LImJiUyaNInk5GT69OmDwWBgxIgRTJ48GX9/f/z9/Zk8eTIODg706tULAGdnZ/r378/IkSNxc3PD1dWVUaNGmW7BiYiIiEAhT4guXrzICy+8wOXLl3niiSdo0KABe/bsoVy5cgCMGTOGmzdvMnjwYK5evUr9+vXZuHEjTk5OpjbCw8OxtramR48e3Lx5k1atWrFo0SKsrKwK6rBERESkkDEYjUZjQQfxOEhOTsbZ2ZmkpKRcH0/0w5YKudpefmjV8kxBhyAiIvJAD/v7/ViNIRIRERHJC0qIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIV6oRoypQp1K1bFycnJ9zd3enSpQsnT540q9O3b18MBoPZp0GDBmZ1UlNTGTZsGKVLl8bR0ZHOnTtz8eLF/DwUERERKcQKdUK0bds2hgwZwp49e9i0aRPp6em0bduWlJQUs3rt2rUjPj7e9ImMjDRbP2LECNasWcOKFSvYsWMH169fp2PHjmRkZOTn4YiIiEghZV3QAdzPhg0bzJYjIiJwd3cnOjqapk2bmsrt7Ozw9PS8ZxtJSUksXLiQpUuX0rp1awC++OILfHx82Lx5MyEhIXl3ACIiIvJYKNQ9RH+XlJQEgKurq1l5VFQU7u7uVKpUiQEDBpCYmGhaFx0dTVpaGm3btjWVeXt7ExgYyK5du7LdV2pqKsnJyWYfERERKZoem4TIaDQSFhZG48aNCQwMNJW3b9+eZcuWsWXLFmbMmMH+/ftp2bIlqampACQkJGBra0upUqXM2vPw8CAhISHb/U2ZMgVnZ2fTx8fHJ28OTERERApcob5l9ldDhw7lyJEj7Nixw6y8Z8+epn8HBgZSp04dypUrx//+9z+6du2abXtGoxGDwZDt+vHjxxMWFmZaTk5OVlIkIiJSRD0WPUTDhg3j22+/ZevWrZQpU+a+db28vChXrhynT58GwNPTk9u3b3P16lWzeomJiXh4eGTbjp2dHSVLljT7iIiISNFUqBMio9HI0KFDWb16NVu2bMHPz++B2/zxxx9cuHABLy8vAGrXro2NjQ2bNm0y1YmPj+fYsWM0bNgwz2IXERGRx0ehvmU2ZMgQvvzyS7755hucnJxMY36cnZ2xt7fn+vXrTJw4kW7duuHl5cXZs2d54403KF26NM8++6ypbv/+/Rk5ciRubm64uroyatQoqlevbnrqTERERCxboU6I5s2bB0Dz5s3NyiMiIujbty9WVlYcPXqUJUuWcO3aNby8vGjRogUrV67EycnJVD88PBxra2t69OjBzZs3adWqFYsWLcLKyio/D0dEREQKKYPRaDQWdBCPg+TkZJydnUlKSsr18UQ/bKmQq+3lh1YtzxR0CCIiIg/0sL/fhXoMkYiIiEh+UEIkIiIiFq9QjyGSwuviuB8LOoQcKTO1SUGHICIihZB6iERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXhKiERERMTiKSESERERi6eESERERCyeEiIRERGxeEqIRERExOIpIRIRERGLp4RIRERELJ4SIhEREbF4SohERETE4ikhEhEREYunhEhEREQsnhIiERERsXjWBR2ASH66OO7Hgg7hkZWZ2qSgQxARKfLUQyQiIiIWTwmRiIiIWDwlRCIiImLxlBCJiIiIxVNCJCIiIhZPCZGIiIhYPCVEIiIiYvGUEImIiIjF08SMIoWcJpMUEcl76iESERERi2dRCdHcuXPx8/OjePHi1K5dmx9/fPz+8hYREZHcZzEJ0cqVKxkxYgQTJkzg0KFDNGnShPbt23P+/PmCDk1EREQKmMFoNBoLOoj8UL9+fWrVqsW8efNMZVWqVKFLly5MmTLlgdsnJyfj7OxMUlISJUuWzNXYfthSIVfbyw8BGxcVdAgiuUrjnkSKpof9/baIQdW3b98mOjqacePGmZW3bduWXbt23XOb1NRUUlNTTctJSUnAnROb21JSMnO9zbz2Z2pKQYcgkqvy4r9tESl4d//bflD/j0UkRJcvXyYjIwMPDw+zcg8PDxISEu65zZQpU3j33XezlPv4+ORJjI+f9gUdgEjumlXQAYhIXvrzzz9xdnbOdr1FJER3GQwGs2Wj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", + "image/png": "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Jz/R6NGjdfDgwWBPDQAABJkRYaeoqEi5ubm67777dNVVV2np0qVKSUnR8uXLgz01AAAQZOHBnsC5amlpUVVVlebNm+cznpOToy1btnT4HK/XK6/Xaz/2eDySpIaGhoDPr817OODXvBDOx38LIFg64zpkDeJk+H1uf13Lsk5Z1+nDznfffafW1lYlJyf7jCcnJ8vtdnf4nMLCQj366KPtxlNSUs7LHDujhKXBngHw48YahEnO9+9zY2OjEhISTnq+04ed4xwOh89jy7LajR03f/58zZo1y37c1tamv/3tb0pKSjrpc/zR0NCglJQUVVdXKz4+PmDXDSWm92h6f5L5PdJf52d6j/TnP8uy1NjYKJfLdcq6Th92unXrprCwsHa7OHV1de12e46LiopSVFSUz9gll1xyvqao+Ph4I3+B/57pPZren2R+j/TX+ZneI/3551Q7Osd1+huUIyMjlZGRoYqKCp/xiooKDR06NEizAgAAoaLT7+xI0qxZszRlyhQNGjRIQ4YM0YoVK3Tw4EHdf//9wZ4aAAAIMiPCzh133KG//vWveuyxx1RbW6v09HS9+eab6t27d1DnFRUVpV//+tft3jIziek9mt6fZH6P9Nf5md4j/Z1/Dut0n9cCAADoxDr9PTsAAACnQtgBAABGI+wAAACjEXYAAIDRCDtn4f3339f48ePlcrnkcDj02muvnfY5lZWVysjIUJcuXXTZZZfp2WefbVfz6quvqn///oqKilL//v1VXl5+HmZ/emfb37p165Sdna3u3bsrPj5eQ4YM0dtvv+1TU1paKofD0e44cuTIeeykY2fb33vvvdfh3P/nf/7Hpy5UXj/p7Hu89957O+zx6quvtmtC5TUsLCzU9ddfr7i4OPXo0UO33nqr9u3bd9rndaY16E+PnWkd+tNfZ1qH/vTXmdagJC1fvlzXXHON/QcChwwZovXr15/yOaGwBgk7Z+HQoUO69tprVVxcfEb1+/fv15gxY/STn/xEO3fu1K9+9Ss99NBDevXVV+2aDz/8UHfccYemTJmijz76SFOmTNGkSZP0pz/96Xy1cVJn29/777+v7Oxsvfnmm6qqqtLIkSM1fvx47dy506cuPj5etbW1PkeXLl3ORwundLb9Hbdv3z6fuaelpdnnQun1k86+x6efftqnt+rqaiUmJur222/3qQuF17CyslIPPPCAtm7dqoqKCh07dkw5OTk6dOjQSZ/T2dagPz12pnXoT3/HdYZ16E9/nWkNSlKvXr20cOFCbd++Xdu3b9fNN9+sW265RXv37u2wPmTWoAW/SLLKy8tPWTN37lzryiuv9BmbPn26dcMNN9iPJ02aZP30pz/1qRk1apR15513Bmyu/jiT/jrSv39/69FHH7Ufr1y50kpISAjcxALkTPrbtGmTJcmqr68/aU2ovn6W5d9rWF5ebjkcDuurr76yx0L1Nayrq7MkWZWVlSet6cxr0LLOrMeOdJZ1eCb9deZ16M/r15nW4HFdu3a1fv/733d4LlTWIDs759GHH36onJwcn7FRo0Zp+/btOnr06ClrtmzZcsHmGShtbW1qbGxUYmKiz3hTU5N69+6tXr16ady4ce3+H2eoGzhwoHr27KnMzExt2rTJ55xJr58klZSUKCsrq90f5AzF19Dj8UhSu9+3v9fZ1+CZ9HiizrQOz6a/zrgO/Xn9OtMabG1tVVlZmQ4dOqQhQ4Z0WBMqa5Cwcx653e52X0aanJysY8eO6bvvvjtlzYlfbNoZLF68WIcOHdKkSZPssSuvvFKlpaV6/fXXtXbtWnXp0kU33nijPv/88yDO9Mz07NlTK1as0Kuvvqp169apX79+yszM1Pvvv2/XmPT61dbWav369brvvvt8xkPxNbQsS7NmzdKwYcOUnp5+0rrOvAbPtMcTdZZ1eKb9ddZ16M/r11nW4O7du3XxxRcrKipK999/v8rLy9W/f/8Oa0NlDRrxdRGhzOFw+Dy2/u8PVv/9eEc1J46FurVr1yo/P19/+MMf1KNHD3v8hhtu0A033GA/vvHGG3Xddddp2bJleuaZZ4Ix1TPWr18/9evXz348ZMgQVVdX6ze/+Y1uuukme9yE10/64SbISy65RLfeeqvPeCi+hg8++KA+/vhjbd68+bS1nXUNnk2Px3WmdXim/XXWdejP69dZ1mC/fv20a9cuff/993r11Vc1depUVVZWnjTwhMIaZGfnPHI6ne2SaV1dncLDw5WUlHTKmhNTbih78cUXlZubq5deeklZWVmnrL3ooot0/fXXd4qdnY7ccMMNPnM34fWTfvgflv/6r//SlClTFBkZecraYL+GM2fO1Ouvv65NmzapV69ep6ztrGvwbHo8rjOtQ3/6+3uhvg796a8zrcHIyEhdccUVGjRokAoLC3Xttdfq6aef7rA2VNYgYec8GjJkiCoqKnzGNmzYoEGDBikiIuKUNUOHDr1g8zwXa9eu1b333qs1a9Zo7Nixp623LEu7du1Sz549L8DsAm/nzp0+c+/sr99xlZWV+stf/qLc3NzT1gbrNbQsSw8++KDWrVund999V6mpqad9Tmdbg/70KHWedehvfycK1XV4Lv11hjV4MpZlyev1dnguZNZgwG51/hFobGy0du7cae3cudOSZBUVFVk7d+60Dhw4YFmWZc2bN8+aMmWKXf/ll19aMTEx1iOPPGJ98sknVklJiRUREWG98sords0HH3xghYWFWQsXLrQ+/fRTa+HChVZ4eLi1devWkO9vzZo1Vnh4uPWf//mfVm1trX18//33dk1+fr711ltvWV988YW1c+dO6+c//7kVHh5u/elPfwr5/pYsWWKVl5dbn332mbVnzx5r3rx5liTr1VdftWtC6fWzrLPv8bi7777bGjx4cIfXDJXX8Be/+IWVkJBgvffeez6/b4cPH7ZrOvsa9KfHzrQO/emvM61Df/o7rjOsQcuyrPnz51vvv/++tX//fuvjjz+2fvWrX1kXXXSRtWHDBsuyQncNEnbOwvGPQJ54TJ061bIsy5o6dao1fPhwn+e899571sCBA63IyEirT58+1vLly9td9+WXX7b69etnRUREWFdeeaXPIr6Qzra/4cOHn7LesiwrLy/PuvTSS63IyEire/fuVk5OjrVly5YL29j/Odv+nnzySevyyy+3unTpYnXt2tUaNmyY9cYbb7S7bqi8fpbl3+/o999/b0VHR1srVqzo8Jqh8hp21Jcka+XKlXZNZ1+D/vTYmdahP/11pnXo7+9oZ1mDlmVZ06ZNs3r37m3PJTMz0w46lhW6a9BhWf93pxAAAICBuGcHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBohB0AAGA0wg4AADAaYQcAABiNsAMAAIxG2AEAAEYj7AAAAKP9PxGY/Lt47n1EAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -854,9 +1075,10 @@ "source": [ "for col in numeric_features1: \n", " print(col)\n", + " movie_df[col].plot.hist()\n", + " plt.show() \n", + "\n", "\n", - "movie_df.plot.hist()\n", - "plt.show()\n", "\n" ] }, @@ -879,7 +1101,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -900,7 +1122,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -939,32 +1161,52 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "11\n", - "13\n", - "15\n", - "17\n", - "19\n", - "21\n", - "23\n", - "25\n", - "27\n" + "[[11 13 15]\n", + " [17 19 21]\n", + " [23 25 27]]\n", + "\n", + "\n", + "[[11 13 15]\n", + " [15 18 21]]\n" ] } ], "source": [ + "\n", + "def matrix_addition(matrix1, matrix2): \n", + " result_matrix = []\n", + " for i in range(len(matrix1)):\n", + " result_row = []\n", + " for k in range(len(matrix1[i])):\n", + " computation = (matrix1[i][k] + matrix2[i][k])\n", + " result_row.append(computation)\n", + " result_matrix.append(result_row)\n", + " \n", + " result_matrix = np.array(result_matrix)\n", + " return result_matrix \n", + "\n", "matrix1 = np.array([[1,2,3], [4,5,6], [7,8,9]])\n", "matrix2 = np.array([[10,11,12], [13,14,15], [16,17,18]])\n", "\n", - "for i in range(len(matrix1)):\n", - " for k in range(len(matrix2)):\n", - " print(matrix1[i][k] + matrix2[i][k])\n", + "matrix3 = np.array([[1,2,3], [2,4,6]])\n", + "\n", + "print(matrix_addition(matrix1, matrix2))\n", + "\n", + "print(\"\\n\")\n", + "\n", + "print(matrix_addition(matrix3, matrix2))\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ] }, @@ -979,47 +1221,42 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 57, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "600\n", - "1200\n", - "980\n", - "1750\n", - "2700\n", - "2380\n", - "3200\n", - "4500\n", - "2100\n" - ] - }, { "data": { "text/plain": [ - "array([[ 3250, 4150, 2350],\n", - " [ 6400, 8200, 4735],\n", - " [ 9550, 12250, 7120]])" + "array([[ 84, 90, 96],\n", + " [201, 216, 231],\n", + " [318, 342, 366]])" ] }, - "execution_count": 71, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "def matrix_multiplication(matrix1, matrix2): \n", + " result = [] \n", + " for i in range(len(matrix1)):\n", + " result_row = []\n", + " for k in range(len(matrix2[0])):\n", + " sum = 0 \n", + " for e in range(len(matrix2)):\n", + " sum += matrix1[i][e] * matrix2[e][k]\n", + " result_row.append(sum)\n", + " result.append(result_row)\n", + "\n", + " result = np.array(result)\n", + " return result \n", + " \n", + "matrix1 = np.array([[1,2,3], [4,5,6], [7,8,9]])\n", + "matrix2 = np.array([[10,11,12], [13,14,15], [16,17,18]])\n", "\n", - "matrix3 = np.array([[10,15,20], [25,30,35], [40,45,50]])\n", - "matrix4 = np.array([[60, 80, 49], [ 70, 90, 68], [80, 100, 42]])\n", - "\n", - "for i in range(len(matrix3)):\n", - " for k in range(len(matrix4)):\n", - " print(matrix3[i][k] * matrix4[i][k])\n", "\n", - "matrix3 @ matrix4 " + "matrix_multiplication(matrix1, matrix2) " ] }, { @@ -1039,10 +1276,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[20 60 35]\n", + " [45 50 40]\n", + " [20 45 35]]\n", + "[[20 60 35]\n", + " [45 50 40]\n", + " [20 45 35]]\n" + ] + } + ], + "source": [ + "matrix_8 = np.random.randint(0, 10, (3,3))\n", + "matrix_9 = np.random.randint(0, 10, (3,3))\n", + "scalar = 5\n", + "\n", + "print(scalar * (matrix_8 + matrix_9))\n", + "print(scalar * matrix_8 + scalar * matrix_9)\n", + "\n" + ] }, { "cell_type": "markdown", @@ -1055,10 +1313,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "False\n" + ] + } + ], + "source": [ + "def is_matrix_symmetric(matrix): \n", + " if matrix.shape[0] != matrix.shape[1]: \n", + " return False\n", + " return np.allclose(matrix, matrix.T) \n", + "\n", + "matrix_check = matrix = np.array([[3, -2, 4], [-2, 6, 2], [4, 2, 3]])\n", + "matrix_check1 = matrix = np.array([[30, 80, 23],[18, 48 , 44 ],[55, 20, 25]])\n", + "\n", + "print(is_matrix_symmetric(matrix_check)) \n", + "print(is_matrix_symmetric(matrix_check1))\n", + "\n" + ] } ], "metadata": {