diff --git a/Code-Drawing Template.pdf b/Code-Drawing Template.pdf new file mode 100644 index 0000000..2ad2ede Binary files /dev/null and b/Code-Drawing Template.pdf differ diff --git a/NumpyExercises/Individual_Numpy.ipynb b/NumpyExercises/Individual_Numpy.ipynb new file mode 100644 index 0000000..90a9f46 --- /dev/null +++ b/NumpyExercises/Individual_Numpy.ipynb @@ -0,0 +1,391 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 1: make a common array" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 80842, 333008, 202553, 140037, 81969],\n", + " [ 63857, 42105, 261540, 481981, 176739],\n", + " [489984, 326386, 110795, 394863, 25024],\n", + " [ 38317, 49982, 408830, 485118, 16119],\n", + " [407675, 231729, 265455, 109413, 103399],\n", + " [174677, 343356, 301717, 224120, 401101],\n", + " [140473, 254634, 112262, 25063, 108262],\n", + " [375059, 406983, 208947, 115641, 296685],\n", + " [444899, 129585, 171318, 313094, 425041],\n", + " [188411, 335140, 141681, 59641, 211420],\n", + " [287650, 8973, 477425, 382803, 465168],\n", + " [ 3975, 32213, 160603, 275485, 388234],\n", + " [246225, 56174, 244097, 9350, 496966],\n", + " [225516, 273338, 73335, 283013, 212813],\n", + " [ 38175, 282399, 318413, 337639, 379802],\n", + " [198049, 101115, 419547, 260219, 325793],\n", + " [148593, 425024, 348570, 117968, 107007],\n", + " [ 52547, 180346, 178760, 305186, 262153],\n", + " [ 11835, 449971, 494184, 472031, 353049],\n", + " [476442, 35455, 191553, 384154, 29917]])" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# Seed insures results are stable.\n", + "np.random.seed(21)\n", + "random_integers = np.random.randint(1, high=500000, size=(20, 5))\n", + "random_integers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 2:What is the average value of the second column (to one decimal place)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "214895.8" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The average value of the second column\n", + "random_integers[:, 1].mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 3: What is the average value of the first 5 rows of the third and fourth columns (to one decimal place)?" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "286058.5" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The average of the first 5 rows of 3rd and 4th columns\n", + "subset = random_integers[:5, 2:4]\n", + "np.mean(subset)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 4: Result of matrix 1 plus matrix 2\n", + "\\begin{bmatrix}\n", + "2 & 4 & 6\\\\\n", + "5 & 7 & 9\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 4 6]\n", + " [5 7 9]]\n" + ] + } + ], + "source": [ + "# Exercise 4 Python:\n", + "first_matrix = np.array([[1, 2, 3], [4, 5, 6]])\n", + "second_matrix = np.array([1, 2, 3])\n", + "print(first_matrix + second_matrix)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 5: Result of my_vector[selection]:\n", + "\\begin{bmatrix}\n", + "2 & 4 & 6\\\\\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2 4 6]\n" + ] + } + ], + "source": [ + "# Exercise 5 python:\n", + "my_vector = np.array([1, 2, 3, 4, 5, 6])\n", + "selection = my_vector % 2 == 0\n", + "print(my_vector[selection])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For exercise 6: I didn't make any errors but I learned how to do matrix notation on markdown" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 7 slicing:\n", + "\\begin{bmatrix}\n", + "2&3\\\\\n", + "5&6\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 4 6]\n", + " [10 12]]\n" + ] + } + ], + "source": [ + "# Exercise 8\n", + "my_array = np.array([[1, 2, 3], [4, 5, 6]])\n", + "my_slice = my_array[:, 1:3]\n", + "my_array[:, :] = my_array * 2\n", + "print(my_slice)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 8 slicing and view\n", + "\\begin{bmatrix}\n", + "4&6\\\\\n", + "10&12\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 9 what does the slice look like?\n", + "\\begin{bmatrix}\n", + "2&3\\\\\n", + "5&6\n", + "\\end{bmatrix}\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 10: my prediction was correct. I knew that slice would not change because my_slice creates its own subsetted array that is different from the original my array" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 3]\n", + " [5 6]]\n" + ] + } + ], + "source": [ + "# exercise 10\n", + "my_array = np.array([[1, 2, 3], [4, 5, 6]])\n", + "my_slice = my_array[:, 1:3]\n", + "my_array = my_array * 2\n", + "print(my_slice)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 11: \n", + "\\begin{bmatrix}\n", + "2&3\\\\\n", + "5&6\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 3]\n", + " [5 6]]\n" + ] + } + ], + "source": [ + "my_array = np.array([[1, 2, 3], [4, 5, 6]])\n", + "my_slice = my_array[:, 1:3].copy()\n", + "my_array[:, :] = my_array * 2\n", + "print(my_slice)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 12 prediction:\n", + "y would be [\"a change\", 2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 13 prediction: if we printed x it would be [1,2,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a change', 2]\n", + "[1, 2, 3]\n" + ] + } + ], + "source": [ + "# Exercise 12 and 13:\n", + "x = [1, 2, 3]\n", + "y = x[0:2]\n", + "y[0] = \"a change\"\n", + "print(y)\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 14: I was correct and this is because we sliced y and then made a change on a specific index number for y and also x doesn't change at all." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2 3]\n", + "[3]\n", + "[ 2 -1]\n", + "[-1]\n" + ] + } + ], + "source": [ + "my_array = np.array([1, 2, 3])\n", + "my_array = my_array[1:4]\n", + "print(my_array)\n", + "my_slice = my_array[1:3]\n", + "print(my_slice)\n", + "my_slice[0] = -1\n", + "print(my_array)\n", + "print(my_slice)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/NumpyExercises/Individual_Numpy_files/Individual_Numpy.html b/NumpyExercises/Individual_Numpy_files/Individual_Numpy.html new file mode 100644 index 0000000..c90aeda --- /dev/null +++ b/NumpyExercises/Individual_Numpy_files/Individual_Numpy.html @@ -0,0 +1,8221 @@ + + + + +Individual_Numpy + + + + + + + + + + + + +
+
+ +
+ + +
+
+ +
+ + +
+
+ +
+ + +
+
+ +
+ + +
+
+ +
+ + +
+
+ +
+
+ +
+ + +
+
+ +
+
+ +
+
+ +
+ + +
+
+ +
+ + +
+
+ +
+
+ +
+ + +
+
+ +
+ + +
+
+ + + \ No newline at end of file diff --git a/NumpyExercises/Individual_Numpy_files/Individual_Numpy.ipynb b/NumpyExercises/Individual_Numpy_files/Individual_Numpy.ipynb new file mode 100644 index 0000000..90a9f46 --- /dev/null +++ b/NumpyExercises/Individual_Numpy_files/Individual_Numpy.ipynb @@ -0,0 +1,391 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 1: make a common array" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 80842, 333008, 202553, 140037, 81969],\n", + " [ 63857, 42105, 261540, 481981, 176739],\n", + " [489984, 326386, 110795, 394863, 25024],\n", + " [ 38317, 49982, 408830, 485118, 16119],\n", + " [407675, 231729, 265455, 109413, 103399],\n", + " [174677, 343356, 301717, 224120, 401101],\n", + " [140473, 254634, 112262, 25063, 108262],\n", + " [375059, 406983, 208947, 115641, 296685],\n", + " [444899, 129585, 171318, 313094, 425041],\n", + " [188411, 335140, 141681, 59641, 211420],\n", + " [287650, 8973, 477425, 382803, 465168],\n", + " [ 3975, 32213, 160603, 275485, 388234],\n", + " [246225, 56174, 244097, 9350, 496966],\n", + " [225516, 273338, 73335, 283013, 212813],\n", + " [ 38175, 282399, 318413, 337639, 379802],\n", + " [198049, 101115, 419547, 260219, 325793],\n", + " [148593, 425024, 348570, 117968, 107007],\n", + " [ 52547, 180346, 178760, 305186, 262153],\n", + " [ 11835, 449971, 494184, 472031, 353049],\n", + " [476442, 35455, 191553, 384154, 29917]])" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# Seed insures results are stable.\n", + "np.random.seed(21)\n", + "random_integers = np.random.randint(1, high=500000, size=(20, 5))\n", + "random_integers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 2:What is the average value of the second column (to one decimal place)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "214895.8" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The average value of the second column\n", + "random_integers[:, 1].mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 3: What is the average value of the first 5 rows of the third and fourth columns (to one decimal place)?" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "286058.5" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The average of the first 5 rows of 3rd and 4th columns\n", + "subset = random_integers[:5, 2:4]\n", + "np.mean(subset)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 4: Result of matrix 1 plus matrix 2\n", + "\\begin{bmatrix}\n", + "2 & 4 & 6\\\\\n", + "5 & 7 & 9\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 4 6]\n", + " [5 7 9]]\n" + ] + } + ], + "source": [ + "# Exercise 4 Python:\n", + "first_matrix = np.array([[1, 2, 3], [4, 5, 6]])\n", + "second_matrix = np.array([1, 2, 3])\n", + "print(first_matrix + second_matrix)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 5: Result of my_vector[selection]:\n", + "\\begin{bmatrix}\n", + "2 & 4 & 6\\\\\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2 4 6]\n" + ] + } + ], + "source": [ + "# Exercise 5 python:\n", + "my_vector = np.array([1, 2, 3, 4, 5, 6])\n", + "selection = my_vector % 2 == 0\n", + "print(my_vector[selection])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For exercise 6: I didn't make any errors but I learned how to do matrix notation on markdown" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 7 slicing:\n", + "\\begin{bmatrix}\n", + "2&3\\\\\n", + "5&6\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 4 6]\n", + " [10 12]]\n" + ] + } + ], + "source": [ + "# Exercise 8\n", + "my_array = np.array([[1, 2, 3], [4, 5, 6]])\n", + "my_slice = my_array[:, 1:3]\n", + "my_array[:, :] = my_array * 2\n", + "print(my_slice)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 8 slicing and view\n", + "\\begin{bmatrix}\n", + "4&6\\\\\n", + "10&12\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 9 what does the slice look like?\n", + "\\begin{bmatrix}\n", + "2&3\\\\\n", + "5&6\n", + "\\end{bmatrix}\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 10: my prediction was correct. I knew that slice would not change because my_slice creates its own subsetted array that is different from the original my array" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 3]\n", + " [5 6]]\n" + ] + } + ], + "source": [ + "# exercise 10\n", + "my_array = np.array([[1, 2, 3], [4, 5, 6]])\n", + "my_slice = my_array[:, 1:3]\n", + "my_array = my_array * 2\n", + "print(my_slice)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 11: \n", + "\\begin{bmatrix}\n", + "2&3\\\\\n", + "5&6\n", + "\\end{bmatrix}" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[2 3]\n", + " [5 6]]\n" + ] + } + ], + "source": [ + "my_array = np.array([[1, 2, 3], [4, 5, 6]])\n", + "my_slice = my_array[:, 1:3].copy()\n", + "my_array[:, :] = my_array * 2\n", + "print(my_slice)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 12 prediction:\n", + "y would be [\"a change\", 2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 13 prediction: if we printed x it would be [1,2,3]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a change', 2]\n", + "[1, 2, 3]\n" + ] + } + ], + "source": [ + "# Exercise 12 and 13:\n", + "x = [1, 2, 3]\n", + "y = x[0:2]\n", + "y[0] = \"a change\"\n", + "print(y)\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercise 14: I was correct and this is because we sliced y and then made a change on a specific index number for y and also x doesn't change at all." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2 3]\n", + "[3]\n", + "[ 2 -1]\n", + "[-1]\n" + ] + } + ], + "source": [ + "my_array = np.array([1, 2, 3])\n", + "my_array = my_array[1:4]\n", + "print(my_array)\n", + "my_slice = my_array[1:3]\n", + "print(my_slice)\n", + "my_slice[0] = -1\n", + "print(my_array)\n", + "print(my_slice)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/NumpyExercises/Individual_Numpy_files/Individual_Numpy.pdf b/NumpyExercises/Individual_Numpy_files/Individual_Numpy.pdf new file mode 100644 index 0000000..b734c5f Binary files /dev/null and b/NumpyExercises/Individual_Numpy_files/Individual_Numpy.pdf differ diff --git a/NumpyExercises/Individual_Numpy_files/MathJax.js.download b/NumpyExercises/Individual_Numpy_files/MathJax.js.download new file mode 100644 index 0000000..4f36e31 --- /dev/null +++ b/NumpyExercises/Individual_Numpy_files/MathJax.js.download @@ -0,0 +1,19 @@ +/* + * /MathJax.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if(document.getElementById&&document.childNodes&&document.createElement){if(!(window.MathJax&&MathJax.Hub)){if(window.MathJax){window.MathJax={AuthorConfig:window.MathJax}}else{window.MathJax={}}MathJax.isPacked=true;MathJax.version="2.7.7";MathJax.fileversion="2.7.7";MathJax.cdnVersion="2.7.7";MathJax.cdnFileVersions={};(function(d){var b=window[d];if(!b){b=window[d]={}}var e=[];var c=function(f){var g=f.constructor;if(!g){g=function(){}}for(var h in f){if(h!=="constructor"&&f.hasOwnProperty(h)){g[h]=f[h]}}return g};var a=function(){return function(){return arguments.callee.Init.call(this,arguments)}};b.Object=c({constructor:a(),Subclass:function(f,h){var g=a();g.SUPER=this;g.Init=this.Init;g.Subclass=this.Subclass;g.Augment=this.Augment;g.protoFunction=this.protoFunction;g.can=this.can;g.has=this.has;g.isa=this.isa;g.prototype=new this(e);g.prototype.constructor=g;g.Augment(f,h);return g},Init:function(f){var g=this;if(f.length===1&&f[0]===e){return g}if(!(g instanceof f.callee)){g=new f.callee(e)}return g.Init.apply(g,f)||g},Augment:function(f,g){var h;if(f!=null){for(h in f){if(f.hasOwnProperty(h)){this.protoFunction(h,f[h])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){this.protoFunction("toString",f.toString)}}if(g!=null){for(h in g){if(g.hasOwnProperty(h)){this[h]=g[h]}}}return this},protoFunction:function(g,f){this.prototype[g]=f;if(typeof f==="function"){f.SUPER=this.SUPER.prototype}},prototype:{Init:function(){},SUPER:function(f){return f.callee.SUPER},can:function(f){return typeof(this[f])==="function"},has:function(f){return typeof(this[f])!=="undefined"},isa:function(f){return(f instanceof Object)&&(this instanceof f)}},can:function(f){return this.prototype.can.call(this,f)},has:function(f){return this.prototype.has.call(this,f)},isa:function(g){var f=this;while(f){if(f===g){return true}else{f=f.SUPER}}return false},SimpleSUPER:c({constructor:function(f){return this.SimpleSUPER.define(f)},define:function(f){var h={};if(f!=null){for(var g in f){if(f.hasOwnProperty(g)){h[g]=this.wrap(g,f[g])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){h.toString=this.wrap("toString",f.toString)}}return h},wrap:function(i,h){if(typeof(h)!=="function"||!h.toString().match(/\.\s*SUPER\s*\(/)){return h}var g=function(){this.SUPER=g.SUPER[i];try{var f=h.apply(this,arguments)}catch(j){delete this.SUPER;throw j}delete this.SUPER;return f};g.toString=function(){return h.toString.apply(h,arguments)};return g}})});b.Object.isArray=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"};b.Object.Array=Array})("MathJax");(function(BASENAME){var BASE=window[BASENAME];if(!BASE){BASE=window[BASENAME]={}}var isArray=BASE.Object.isArray;var CALLBACK=function(data){var cb=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var id in CALLBACK.prototype){if(CALLBACK.prototype.hasOwnProperty(id)){if(typeof(data[id])!=="undefined"){cb[id]=data[id]}else{cb[id]=CALLBACK.prototype[id]}}}cb.toString=CALLBACK.prototype.toString;return cb};CALLBACK.prototype={isCallback:true,hook:function(){},data:[],object:window,execute:function(){if(!this.called||this.autoReset){this.called=!this.autoReset;return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))}},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var ISCALLBACK=function(f){return(typeof(f)==="function"&&f.isCallback)};var EVAL=function(code){return eval.call(window,code)};var TESTEVAL=function(){EVAL("var __TeSt_VaR__ = 1");if(window.__TeSt_VaR__){try{delete window.__TeSt_VaR__}catch(error){window.__TeSt_VaR__=null}}else{if(window.execScript){EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";window.execScript(code);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}else{EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";var head=(document.getElementsByTagName("head"))[0];if(!head){head=document.body}var script=document.createElement("script");script.appendChild(document.createTextNode(code));head.appendChild(script);head.removeChild(script);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}}TESTEVAL=null};var USING=function(args,i){if(arguments.length>1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(isArray(args)&&args.length===1&&typeof(args[0])==="function"){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(isArray(args)){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){if(TESTEVAL){TESTEVAL()}return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priority=0;i--){this.hooks.splice(i,1)}this.remove=[]}});var EXECUTEHOOKS=function(hooks,data,reset){if(!hooks){return null}if(!isArray(hooks)){hooks=[hooks]}if(!isArray(data)){data=(data==null?[]:[data])}var handler=HOOKS(reset);for(var i=0,m=hooks.length;ig){g=document.styleSheets.length}if(!i){i=document.head||((document.getElementsByTagName("head"))[0]);if(!i){i=document.body}}return i};var f=[];var c=function(){for(var k=0,j=f.length;k=this.timeout){i(this.STATUS.ERROR);return 1}return 0},file:function(j,i){if(i<0){a.Ajax.loadTimeout(j)}else{a.Ajax.loadComplete(j)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(i,j,k){if(i.time(k)){return}if(document.styleSheets.length>j&&document.styleSheets[j].cssRules&&document.styleSheets[j].cssRules.length){k(i.STATUS.OK)}else{setTimeout(i,i.delay)}},checkLength:function(i,l,n){if(i.time(n)){return}var m=0;var j=(l.sheet||l.styleSheet);try{if((j.cssRules||j.rules||[]).length>0){m=1}}catch(k){if(k.message.match(/protected variable|restricted URI/)){m=1}else{if(k.message.match(/Security error/)){m=1}}}if(m){setTimeout(a.Callback([n,i.STATUS.OK]),0)}else{setTimeout(i,i.delay)}}},loadComplete:function(i){i=this.fileURL(i);var j=this.loading[i];if(j&&!j.preloaded){a.Message.Clear(j.message);clearTimeout(j.timeout);if(j.script){if(f.length===0){setTimeout(c,0)}f.push(j.script)}this.loaded[i]=j.status;delete this.loading[i];this.addHook(i,j.callback)}else{if(j){delete this.loading[i]}this.loaded[i]=this.STATUS.OK;j={status:this.STATUS.OK}}if(!this.loadHooks[i]){return null}return this.loadHooks[i].Execute(j.status)},loadTimeout:function(i){if(this.loading[i].timeout){clearTimeout(this.loading[i].timeout)}this.loading[i].status=this.STATUS.ERROR;this.loadError(i);this.loadComplete(i)},loadError:function(i){a.Message.Set(["LoadFailed","File failed to load: %1",i],null,2000);a.Hub.signal.Post(["file load error",i])},Styles:function(k,l){var i=this.StyleString(k);if(i===""){l=a.Callback(l);l()}else{var j=document.createElement("style");j.type="text/css";this.head=h(this.head);this.head.appendChild(j);if(j.styleSheet&&typeof(j.styleSheet.cssText)!=="undefined"){j.styleSheet.cssText=i}else{j.appendChild(document.createTextNode(i))}l=this.timer.create.call(this,l,j)}return l},StyleString:function(n){if(typeof(n)==="string"){return n}var k="",o,m;for(o in n){if(n.hasOwnProperty(o)){if(typeof n[o]==="string"){k+=o+" {"+n[o]+"}\n"}else{if(a.Object.isArray(n[o])){for(var l=0;l="0"&&q<="9"){f[j]=p[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(q==="{"){q=f[j].substr(1);if(q>="0"&&q<="9"){f[j]=p[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=p[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;q--){if((b[q].src||"").match(f)){s.script=b[q].innerHTML;if(RegExp.$2){var t=RegExp.$2.substr(1).split(/\&/);for(var p=0,l=t.length;p=parseInt(y[z])}}return true},Select:function(j){var i=j[d.Browser];if(i){return i(d.Browser)}return null}};var e=k.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");d.Browser=d.Insert(d.Insert(new String("Unknown"),{version:"0.0"}),a);for(var v in a){if(a.hasOwnProperty(v)){if(a[v]&&v.substr(0,2)==="is"){v=v.slice(2);if(v==="Mac"||v==="PC"){continue}d.Browser=d.Insert(new String(v),a);var r=new RegExp(".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*("+v+")"+(v=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var u=r.exec(e)||["","","","unknown","0.0"];d.Browser.name=(u[1]!=""?v:(u[3]||u[5]));d.Browser.version=u[2]||u[4]||u[6];break}}}try{d.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=538){j.version="8.0"}else{if(i>=537){j.version="7.0"}else{if(i>=536){j.version="6.0"}else{if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}}}}j.webkit=(navigator.appVersion.match(/WebKit\/(\d+)\./))[1];j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||k.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=k.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||k.match(/ Fennec\//)!=null||k.match(/Mobile/)!=null)},Chrome:function(i){i.noContextMenu=i.isMobile=!!navigator.userAgent.match(/ Mobile[ \/]/)},Opera:function(i){i.version=opera.version()},Edge:function(i){i.isMobile=!!navigator.userAgent.match(/ Phone/)},MSIE:function(j){j.isMobile=!!navigator.userAgent.match(/ Phone/);j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;MathJax.Hub.msieHTMLCollectionBug=(document.documentMode<9);if(document.documentMode<10&&!s.params.NoMathPlayer){try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=true}catch(m){}try{if(j.hasMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";g.appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}}})}catch(c){console.error(c.message)}d.Browser.Select(MathJax.Message.browsers);if(h.AuthorConfig&&typeof h.AuthorConfig.AuthorInit==="function"){h.AuthorConfig.AuthorInit()}d.queue=h.Callback.Queue();d.queue.Push(["Post",s.signal,"Begin"],["Config",s],["Cookie",s],["Styles",s],["Message",s],function(){var i=h.Callback.Queue(s.Jax(),s.Extensions());return i.Push({})},["Menu",s],s.onLoad(),function(){MathJax.isReady=true},["Typeset",s],["Hash",s],["MenuZoom",s],["Post",s.signal,"End"])})("MathJax")}}; diff --git a/NumpyExercises/Individual_Numpy_files/require.min.js.download b/NumpyExercises/Individual_Numpy_files/require.min.js.download new file mode 100644 index 0000000..84d1d67 --- /dev/null +++ b/NumpyExercises/Individual_Numpy_files/require.min.js.download @@ -0,0 +1,36 @@ +/* + RequireJS 2.1.10 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. + Available via the MIT or new BSD license. + see: http://github.com/jrburke/requirejs for details +*/ +var requirejs,require,define; +(function(ca){function G(b){return"[object Function]"===N.call(b)}function H(b){return"[object Array]"===N.call(b)}function v(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(G(c)){if(this.events.error&&this.map.isDefine||h.onError!==da)try{f=i.execCb(b,c,e,f)}catch(d){a=d}else f=i.execCb(b,c,e,f);this.map.isDefine&&void 0===f&&((e=this.module)?f=e.exports:this.usingExports&& +(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=c;this.exports=f;if(this.map.isDefine&&!this.ignore&&(p[b]=f,h.onResourceLoad))h.onResourceLoad(i,this.map,this.depMaps);y(b);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a= +this.map,b=a.id,d=m(a.prefix);this.depMaps.push(d);r(d,"defined",t(this,function(f){var d,g;g=j(ba,this.map.id);var J=this.map.name,u=this.map.parentMap?this.map.parentMap.name:null,p=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(J=f.normalize(J,function(a){return c(a,u,!0)})||""),f=m(a.prefix+"!"+J,this.map.parentMap),r(f,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),g=j(k,f.id)){this.depMaps.push(f); +if(this.events.error)g.on("error",t(this,function(a){this.emit("error",a)}));g.enable()}}else g?(this.map.url=i.nameToUrl(g),this.load()):(d=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=t(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),d.fromText=t(this,function(f,c){var g=a.name,J=m(g),k=O;c&&(f=c);k&&(O=!1);q(J);s(l.config,b)&&(l.config[g]=l.config[b]);try{h.exec(f)}catch(j){return w(C("fromtexteval", +"fromText eval for "+b+" failed: "+j,j,[b]))}k&&(O=!0);this.depMaps.push(J);i.completeLoad(g);p([g],d)}),f.load(a.name,p,d,l))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,t(this,function(a,b){var c,f;if("string"===typeof a){a=m(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=j(K,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;r(a,"defined",t(this,function(a){this.defineDep(b, +a);this.check()}));this.errback&&r(a,"error",t(this,this.errback))}c=a.id;f=k[c];!s(K,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,t(this,function(a){var b=j(k,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:l,contextName:b,registry:k,defined:p,urlFetched:T,defQueue:A,Module:$,makeModuleMap:m, +nextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=l.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(l[b]||(l[b]={}),V(l[b],a,!0,!0)):l[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(ba[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),l.shim=b);a.packages&&v(a.packages,function(a){var b, +a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(l.paths[b]=a.location);l.pkgs[b]=a.name+"/"+(a.main||"main").replace(ja,"").replace(R,"")});B(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=m(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ca,arguments));return b||a.exports&&ea(a.exports)}},makeRequire:function(a,e){function g(f,c,d){var j,l;e.enableBuildCallback&&(c&&G(c))&&(c.__requireJsBuild= +!0);if("string"===typeof f){if(G(c))return w(C("requireargs","Invalid require call"),d);if(a&&s(K,f))return K[f](k[a.id]);if(h.get)return h.get(i,f,a,g);j=m(f,a,!1,!0);j=j.id;return!s(p,j)?w(C("notloaded",'Module name "'+j+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[j]}M();i.nextTick(function(){M();l=q(m(null,a));l.skipMap=e.skipMap;l.init(f,c,d,{enabled:!0});D()});return g}e=e||{};V(g,{isBrowser:z,toUrl:function(b){var e,d=b.lastIndexOf("."),g=b.split("/")[0];if(-1!== +d&&(!("."===g||".."===g)||1g.attachEvent.toString().indexOf("[native code"))&&!Z?(O=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)): +(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error",b.onScriptError,!1)),g.src=d,M=g,D?y.insertBefore(g,D):y.appendChild(g),M=null,g;if(fa)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,j,[c]))}};z&&!r.skipDataMain&&U(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(L=b.getAttribute("data-main"))return q=L,r.baseUrl||(E=q.split("/"),q=E.pop(),Q=E.length?E.join("/")+"/":"./",r.baseUrl= +Q),q=q.replace(R,""),h.jsExtRegExp.test(q)&&(q=L),r.deps=r.deps?r.deps.concat(q):[q],!0});define=function(b,c,d){var g,h;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(g=M))P&&"interactive"===P.readyState||U(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),g=P;g&&(b|| +(b=g.getAttribute("data-requiremodule")),h=F[g.getAttribute("data-requirecontext")])}(h?h.defQueue:S).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(r)}})(this); diff --git a/NumpyExercises/Numpy_Jupyer_gini/exercise_series.html b/NumpyExercises/Numpy_Jupyer_gini/exercise_series.html new file mode 100644 index 0000000..8a84adb --- /dev/null +++ b/NumpyExercises/Numpy_Jupyer_gini/exercise_series.html @@ -0,0 +1,8111 @@ + + + + + +exercise_series + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + diff --git a/NumpyExercises/Numpy_Jupyer_gini/exercise_series.ipynb b/NumpyExercises/Numpy_Jupyer_gini/exercise_series.ipynb new file mode 100644 index 0000000..7832b77 --- /dev/null +++ b/NumpyExercises/Numpy_Jupyer_gini/exercise_series.ipynb @@ -0,0 +1,645 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Measuring Income Equality with the Gini Coefficient\n", + "\n", + "As we discussed in our numpy exercises, one frequently used measure of inequality is the Gini Coefficient. The Gini Coefficient takes on a value of 1 when the distribution of some property is maximally unequal across a said of entities, and a value of 0 when it is evenly distributed. \n", + "\n", + "In this exercise, we will calculate the Gini Coefficient for income inequality across the countries of the world to get a sense of income inequality *across* countries. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gradescope Autograding\n", + "\n", + "Please follow [all standard guidance](https://www.practicaldatascience.org/html/autograder_guidelines.html) for submitting this assignment to the Gradescope autograder, including storing your solutions in a dictionary called `results` and ensuring your notebook runs from the start to completion without any errors.\n", + "\n", + "**Starting with this assignment, submissions that have not been formatted with `black` will be automatically rejected.**\n", + "\n", + "For this assignment, please name your file `exercise_series.ipynb` before uploading.\n", + "\n", + "You can check that you have answers for all questions in your `results` dictionary with this code:\n", + "\n", + "```python\n", + "assert set(results.keys()) == {\n", + " \"ex2_mean\",\n", + " \"ex2_median\",\n", + " \"ex3_highest_gdp_percap\",\n", + " \"ex3_lowest_gdp_percap\",\n", + " \"ex4_lessthan20_000\",\n", + " \"ex5_switzerland\",\n", + " \"ex6_gini_loop\",\n", + " \"ex7_gini_vectorized\",\n", + " \"ex8_gini_2025\",\n", + "}\n", + "```\n", + "\n", + "### Submission Limits\n", + "\n", + "Please remember that you are **only allowed three submissions to the autograder.** Your last submission (if you submit 3 or fewer times), or your third submission (if you submit more than 3 times) will determine your grade Submissions that error out will **not** count against this total.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 1\n", + "\n", + "To get accustomed to Series, let's explore some data on the wealth of 10 randomly selected countries. Data below presents the GDP per capita for these countries in 2008. \n", + "\n", + "Use the code below to get started: \n", + "\n", + "```python\n", + "gdppercap = pd.Series(\n", + " [34605, 34493, 12393, 44200, 10041, 58138, 4709, 49284, 10109, 42536],\n", + " index=[\n", + " \"Bahrain\",\n", + " \"Belgium\",\n", + " \"Bulgaria\",\n", + " \"Ireland\",\n", + " \"Macedonia\",\n", + " \"Norway\",\n", + " \"Paraguay\",\n", + " \"Singapore\",\n", + " \"South Africa\",\n", + " \"Switzerland\",\n", + " ],\n", + ")\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "gdppercap = pd.Series(\n", + " [34605, 34493, 12393, 44200, 10041, 58138, 4709, 49284, 10109, 42536],\n", + " index=[\n", + " \"Bahrain\",\n", + " \"Belgium\",\n", + " \"Bulgaria\",\n", + " \"Ireland\",\n", + " \"Macedonia\",\n", + " \"Norway\",\n", + " \"Paraguay\",\n", + " \"Singapore\",\n", + " \"South Africa\",\n", + " \"Switzerland\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 2\n", + "\n", + "Find the mean, median, minimum and maximum values of GDP per capita in this data. " + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30050.8\n", + "34549.0\n", + "58138\n", + "4709\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex2_mean': 30050.8, 'ex2_median': 34549.0}" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mean = gdppercap.mean()\n", + "median = gdppercap.median()\n", + "min = gdppercap.min()\n", + "max = gdppercap.max()\n", + "print(mean)\n", + "print(median)\n", + "print(max)\n", + "print(min)\n", + "\n", + "results = {}\n", + "results[\"ex2_mean\"] = mean\n", + "results[\"ex2_median\"] = median\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 3\n", + "\n", + "Programmatically, determine which country in our data has the highest income per capita, and which has the lowest income per capita.\n", + "\n", + "(Obviously, this is easier to do by just looking at the data, but that's only because this dataset is very small. With a real dataset, you would need to do it with code, so please write code to accomplish this task.)\n", + "\n", + "Hint: Country names form the index for this Series, so to get country names you'll need to access the index. \n", + "\n", + "Store the country names *as strings* with the keys `\"ex3_highest_gdp_percap\"` and `\"ex3_lowest_gdp_percap\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex2_mean': 30050.8,\n", + " 'ex2_median': 34549.0,\n", + " 'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay'}" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Maximum\n", + "gdppercap.head()\n", + "max_gdp = gdppercap.max()\n", + "# gdppercap.idxmax()\n", + "id_max = gdppercap[gdppercap == max_gdp].index\n", + "\n", + "# Minimum\n", + "min_gdp = gdppercap.min()\n", + "id_min = gdppercap[gdppercap == min_gdp].index\n", + "\n", + "\n", + "results[\"ex3_highest_gdp_percap\"] = id_max[0]\n", + "results[\"ex3_lowest_gdp_percap\"] = id_min[0]\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 4\n", + "\n", + "Get Python to print out the names of all the countries that have GDP per capita of less than \\$20,000.\n", + "\n", + "Store these countries in a list, sorted alphabetically, and store it in `results` under the key `\"ex4_lessthan20_000\"`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex2_mean': 30050.8,\n", + " 'ex2_median': 34549.0,\n", + " 'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': ['Bulgaria', 'Macedonia', 'Paraguay', 'South Africa']}" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ex4 = gdppercap[gdppercap < 20000].index.to_list()\n", + "results[\"ex4_lessthan20_000\"] = ex4\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 5 \n", + "\n", + "Get Python to print out the GDP per capita of Switzerland. Store the result as `ex5_switzerland`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex2_mean': 30050.8,\n", + " 'ex2_median': 34549.0,\n", + " 'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': ['Bulgaria', 'Macedonia', 'Paraguay', 'South Africa'],\n", + " 'ex5_switzerland': 42536}" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercise 5\n", + "ex5 = gdppercap.loc[\"Switzerland\"]\n", + "results[\"ex5_switzerland\"] = ex5\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 6\n", + "\n", + "One frequntly used measure of inequality is the Gini Coefficient. The Gini Coefficient takes on a value of 1 when the distribution of some variable is maximally unequal across a population, and a value of 0 when it is evenly distributed. We will calculate the Gini Coefficient for income inequality in our data. \n", + "\n", + "To visualize the Gini Coefficient, we plot the cumulative share of the population (ordered from poorest to richest) on the x-axis, and cumulative share of income earned by that group on the y-axis. The Gini Coefficient is then defined as $$\\frac{A}{A + B}$$, where the areas A and B are labeled below: \n", + "\n", + "![gini_coefficient](https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Economics_Gini_coefficient2.svg/800px-Economics_Gini_coefficient2.svg.png)\n", + "\n", + "If income is evenly distributed, then the poorest 20% of a population will also have 20% of the wealth; the poorest 40% will have 40% of the wealth, and so forth, resulting in a perfect 45 degree line. In this situation, there is no area between the 45% line and the actual income distribution, so $A=0$, and the Gini Coefficient is 0. \n", + "\n", + "If, by contrast, the top 10% of people hold all the wealth in a country, then there will be no wealth for the poorest 90% of people, then wealth will jump up at the far right side of the graph. This will generate a very large gap between the 45% line and actual income for most of the graph, generating a large value for the area $A$, creating a very high Gini Coefficient. \n", + "\n", + "To illustrate, here are a few different Gini plots. These come from someone studying inequality of participation, so to adapt this to our study of income, just imagine the y-axis plots share of income):\n", + "\n", + "![gini_distributions](https://miro.medium.com/max/595/0*3DTcZnzDwS6A6AtP)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For discrete data, the Gini Coefficient can be calculated with the following formula: \n", + "\n", + "$$\\frac{2 \\sum_{i=1}^n i y_i}{n \\sum_{i=1}^n y_i} -\\frac{n+1}{n}$$\n", + "\n", + "Where $i$ is each country's rank ordering from poorest to richest, and $y_i$ is the income of country $i$.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Exercise 6\n", + "\n", + "Using this formula, calculate the Gini coefficient for our income data. \n", + "\n", + "Begin by writing a function to calculate the Gini Coefficient for our data *by looping over the entries in our Series*. In other words, try and embrace the spirit of how you might normally think about interpreting the summation notation written above.\n", + "\n", + "Store the gini coefficient you calculate in `results` under the key `\"ex6_gini_loop\"`.\n", + "\n", + "**HINT**: Be careful with 0-indexing! Python counts from 0, but mathematical formulas (like $\\sum$) start from 1!\n", + "\n", + "**HINT 2**: I'll probalby ask you to use this more than once, so please put it in a function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "def cal_gini_loop(data):\n", + " sorted_data = sorted(data)\n", + " total_income = sum(sorted_data)\n", + " cumulative_sum = 0\n", + " n = len(sorted_data)\n", + " for i in range(n):\n", + " y_i = sorted_data[i]\n", + " cumulative_sum += 2 * (i + 1) * y_i\n", + " gini_coeff = (cumulative_sum / (n * total_income)) - ((n+1)/n)\n", + " return gini_coeff\n", + "\n", + "x = cal_gini_loop(gdppercap)\n", + "print(x)\n", + "results[\"ex6_gini_loop\"] = x\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3382798461272245\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex2_mean': 30050.8,\n", + " 'ex2_median': 34549.0,\n", + " 'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': ['Bulgaria', 'Macedonia', 'Paraguay', 'South Africa'],\n", + " 'ex5_switzerland': 42536,\n", + " 'ex6_gini_loop': 0.3382798461272245}" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def cal_gini_loop(data):\n", + " sorted_data = sorted(data)\n", + " total_income = sum(sorted_data)\n", + " cumulative_sum = 0\n", + " n = len(sorted_data)\n", + " for i in range(n):\n", + " y_i = sorted_data[i]\n", + " cumulative_sum += 2 * (i + 1) * y_i\n", + " gini_coeff = (cumulative_sum / (n * total_income)) - ((n + 1) / n)\n", + " return gini_coeff\n", + "\n", + "\n", + "x = cal_gini_loop(gdppercap)\n", + "print(x)\n", + "results[\"ex6_gini_loop\"] = x\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 7\n", + "\n", + "Excellent! But as we've seen in [our readings](https://nickeubank.github.io/practicaldatascience_book/notebooks/class_2/week_4/11_vectorization.html), in data science we generally strive to *not* loop over the entries in our arrays; instead, we aspire to write *vectorized code* that naturally applies a simple operation to each observation.\n", + "\n", + "So now write a new function to calculate the Gini Coefficient that *doesn't* use loops, and instead relies on vectorized code.\n", + "\n", + "Store the result in `results` under the key `\"ex7_gini_vectorized\"`.\n", + "\n", + "**HINT:** you will probably have to create some new series/vectors/arrays." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3382798461272245\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex2_mean': 30050.8,\n", + " 'ex2_median': 34549.0,\n", + " 'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': ['Bulgaria', 'Macedonia', 'Paraguay', 'South Africa'],\n", + " 'ex5_switzerland': 42536,\n", + " 'ex6_gini_loop': 0.3382798461272245,\n", + " 'ex7_gini_vectorized': 0.3382798461272245}" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "\n", + "def cal_gini_vector(data):\n", + " data = np.array(data.sort_values())\n", + " n = len(data)\n", + " i = np.arange(1, n + 1)\n", + " numerator = np.sum(2 * data * i)\n", + " denominator = np.sum(n * data)\n", + " return numerator / denominator - (n + 1) / n\n", + "\n", + "\n", + "x = cal_gini_vector(gdppercap)\n", + "print(x)\n", + "results[\"ex7_gini_vectorized\"] = x\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 8\n", + "\n", + "The result we just generated offers a snap-shot of inequality for this subset of countries. But what are the dynamics of inequality for these countries?\n", + "\n", + "There is an idea in economics called the \"convergence hypothesis\", which argues that poorer countries are likely to grow faster, and as a result global inequality is likely to decline. Economists advocating for this hypothesis pointed out that while rich countries had to invent new technologies in order to grow, many poor countries simply had to take advantage of innovations already developed by rich countries. \n", + "\n", + "To test this hypothesis, let's do a small analysis of the dynamics of income inequality in our sample. Create the following Series in your Python session, which provides the average growth rate of GDP per capita for all the countries in our sample from 2000 to 2018. \n", + "\n", + "```python\n", + "avg_growth = pd.Series(\n", + " [\n", + " -0.29768835,\n", + " 0.980299584,\n", + " 4.52991925,\n", + " 3.686556736,\n", + " 2.621416804,\n", + " 0.775132075,\n", + " 2.015489468,\n", + " 3.345793635,\n", + " 1.349993318,\n", + " 0.982775018,\n", + " ],\n", + " index=[\n", + " \"Bahrain\",\n", + " \"Belgium\",\n", + " \"Bulgaria\",\n", + " \"Ireland\",\n", + " \"Macedonia\",\n", + " \"Norway\",\n", + " \"Paraguay\",\n", + " \"Singapore\",\n", + " \"South Africa\",\n", + " \"Switzerland\",\n", + " ],\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using this data on average growth rates in GDP per capita, and assuming growth rates from 2000 to 2018 continue into the future, estimate what our Gini Coefficient may look like in 2025 (remembering that income in our data is from 2008, so we're extrapolating ahead 17 years)?\n", + "\n", + "**Hint:** the formula for compound growth (i.e. value of something growing at a rate of `x` percent for $t$ periods) is:\n", + "\n", + "$$future\\_value = current\\_value * (1 + \\frac{percentage\\_growth\\_rate}{100}))^t$$\n", + "\n", + "Store the answer in `results` under the key `\"ex8_gini_2025\"`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3656264991306193\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex2_mean': 30050.8,\n", + " 'ex2_median': 34549.0,\n", + " 'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': ['Bulgaria', 'Macedonia', 'Paraguay', 'South Africa'],\n", + " 'ex5_switzerland': 42536,\n", + " 'ex6_gini_loop': 0.3382798461272245,\n", + " 'ex7_gini_vectorized': 0.3382798461272245,\n", + " 'ex8_gini_2025': 0.3656264991306193}" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "avg_growth = pd.Series(\n", + " [\n", + " -0.29768835,\n", + " 0.980299584,\n", + " 4.52991925,\n", + " 3.686556736,\n", + " 2.621416804,\n", + " 0.775132075,\n", + " 2.015489468,\n", + " 3.345793635,\n", + " 1.349993318,\n", + " 0.982775018,\n", + " ],\n", + " index=[\n", + " \"Bahrain\",\n", + " \"Belgium\",\n", + " \"Bulgaria\",\n", + " \"Ireland\",\n", + " \"Macedonia\",\n", + " \"Norway\",\n", + " \"Paraguay\",\n", + " \"Singapore\",\n", + " \"South Africa\",\n", + " \"Switzerland\",\n", + " ],\n", + ")\n", + "\n", + "t = 17\n", + "future_value = gdppercap * (1 + avg_growth / 100) ** t\n", + "ex8_gini_2025 = cal_gini_vector(future_value)\n", + "print(ex8_gini_2025)\n", + "results[\"ex8_gini_2025\"] = ex8_gini_2025\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "assert set(results.keys()) == {\n", + " \"ex2_mean\",\n", + " \"ex2_median\",\n", + " \"ex3_highest_gdp_percap\",\n", + " \"ex3_lowest_gdp_percap\",\n", + " \"ex4_lessthan20_000\",\n", + " \"ex5_switzerland\",\n", + " \"ex6_gini_loop\",\n", + " \"ex7_gini_vectorized\",\n", + " \"ex8_gini_2025\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 9\n", + "\n", + "Interpret your result -- does it seem to imply that we are seeing covergence or not?\n", + "\n", + "[After you're done, you can see a more systematic version of this analysis here!](https://www.cgdev.org/blog/everything-you-know-about-cross-country-convergence-now-wrong)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Answer for number 9:\n", + "We are no seeing a convergence. This is because we can see that the gap is not reducing." + ] + } + ], + "metadata": { + "interpreter": { + "hash": "f06fa9c80cc08d4d343f66ad24a278ad0285590eac640a80c32c9d748f33a802" + }, + "kernelspec": { + "display_name": "Python 3.9.7 64-bit ('base': conda)", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/NumpyExercises/Numpy_Jupyer_gini/exercise_series.pdf b/NumpyExercises/Numpy_Jupyer_gini/exercise_series.pdf new file mode 100644 index 0000000..204b726 Binary files /dev/null and b/NumpyExercises/Numpy_Jupyer_gini/exercise_series.pdf differ diff --git a/NumpyExercises/exercise_numpy_vectors.ipynb b/NumpyExercises/exercise_numpy_vectors.ipynb new file mode 100644 index 0000000..db4a50e --- /dev/null +++ b/NumpyExercises/exercise_numpy_vectors.ipynb @@ -0,0 +1,465 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## In class numpy exercise\n", + "Katie Hucker and Simrun Sharma" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "\n", + "results = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 53308. 102050. 192994. ... 407460. 19856. 154754.]\n" + ] + } + ], + "source": [ + "your_array = np.loadtxt(\n", + " \"https://raw.githubusercontent.com/nickeubank/practicaldatascience/master/Example_Data/us_household_incomes.txt\"\n", + ")\n", + "print(your_array)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([8.77542e+05, 4.35030e+04, 1.01710e+04, 1.92100e+03, 3.98000e+02,\n", + " 1.17000e+02, 2.90000e+01, 8.00000e+00, 4.00000e+00, 2.00000e+00]),\n", + " array([ -16942. , 225842.5, 468627. , 711411.5, 954196. , 1196980.5,\n", + " 1439765. , 1682549.5, 1925334. , 2168118.5, 2410903. ]),\n", + " )" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAGvCAYAAACgtyoIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAnlklEQVR4nO3df1BV953/8RcFuUEKtygBvAmNJJMSWWxrMKv4o9gxgonopNNt3KUyoWNZsxApQVel7XYTpwU1BJ2FDd3sZGJjTMmkhk52/bEwJsESxbAENpKoSRuNWMCrm+tFDQOI5/tHytnv/eCviwgGno+Z+wfnvi/3cz9zOj57LvcmwLIsSwAAALB9ZaQXAAAAcKshkAAAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAABD0Egv4FZ36dIltbW1KSwsTAEBASO9HAAAcB0sy9K5c+fkcrn0la/4fz2IQLqGtrY2xcbGjvQyAADAILS2turOO+/0+3EE0jWEhYVJ+mKDw8PDR3g1AADgenR2dio2Ntb+d9xfBNI19L+tFh4eTiABAPAlM9g/j+GPtAEAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYgkZ6AWPd5HU7R3oJfju+YdFILwEAgJuKK0gAAAAGAgkAAMBAIAEAABgIJAAAAAOBBAAAYCCQAAAADAQSAACAgUACAAAwEEgAAAAGAgkAAMBAIAEAABgIJAAAAAOBBAAAYCCQAAAADAQSAACAgUACAAAwEEgAAAAGAgkAAMBAIAEAABgIJAAAAAOBBAAAYCCQAAAADAQSAACAgUACAAAwEEgAAAAGAgkAAMDgVyBdvHhRP//5zxUXF6eQkBDdfffdWr9+vS5dumTPWJalp556Si6XSyEhIZo3b54++OADn9/T3d2tlStXKjIyUqGhoVqyZIlOnjzpM+PxeJSZmSmn0ymn06nMzEydPXvWZ+bEiRNavHixQkNDFRkZqby8PPX09PjMHDp0SCkpKQoJCdEdd9yh9evXy7Isf142AAAYY/wKpI0bN+rXv/61ysvLdfjwYW3atEnPPPOMysrK7JlNmzaptLRU5eXlamhoUExMjBYsWKBz587ZM/n5+aqqqlJlZaXq6up0/vx5paenq6+vz57JyMhQc3Oz9uzZoz179qi5uVmZmZn2/X19fVq0aJEuXLiguro6VVZWaseOHVq1apU909nZqQULFsjlcqmhoUFlZWUqKSlRaWnpoDYLAACMDQGWH5dT0tPTFR0drRdeeME+9v3vf1/jx4/Xtm3bZFmWXC6X8vPztXbtWklfXC2Kjo7Wxo0btWLFCnm9Xt1+++3atm2bli5dKklqa2tTbGysdu3apbS0NB0+fFgJCQmqr6/XjBkzJEn19fVKTk7WkSNHFB8fr927dys9PV2tra1yuVySpMrKSmVlZcntdis8PFwVFRUqLCzUqVOn5HA4JEkbNmxQWVmZTp48qYCAgGu+5s7OTjmdTnm9XoWHh1/vVl23yet2DvnvvNmOb1g00ksAAOCqbvTfb7+uIM2ZM0d79+7VRx99JEn6n//5H9XV1enhhx+WJB07dkwdHR1KTU21H+NwOJSSkqL9+/dLkhobG9Xb2+sz43K5lJiYaM8cOHBATqfTjiNJmjlzppxOp89MYmKiHUeSlJaWpu7ubjU2NtozKSkpdhz1z7S1ten48eOXfY3d3d3q7Oz0uQEAgLElyJ/htWvXyuv16r777lNgYKD6+vr0q1/9Sn/3d38nSero6JAkRUdH+zwuOjpan376qT0THBysiIiIATP9j+/o6FBUVNSA54+KivKZMZ8nIiJCwcHBPjOTJ08e8Dz998XFxQ14juLiYj399NPX3gwAADBq+XUF6dVXX9XLL7+sV155Re+9955+85vfqKSkRL/5zW985sy3rizLuubbWebM5eaHYqb/HcUrraewsFBer9e+tba2XnXdAABg9PHrCtI//uM/at26dfrbv/1bSdLUqVP16aefqri4WI899phiYmIkfXF1ZtKkSfbj3G63feUmJiZGPT098ng8PleR3G63Zs2aZc+cOnVqwPOfPn3a5/ccPHjQ536Px6Pe3l6fmf6rSf//80gDr3L1czgcPm/JAQCAscevK0iff/65vvIV34cEBgbaH/OPi4tTTEyMampq7Pt7enpUW1trx09SUpLGjRvnM9Pe3q6WlhZ7Jjk5WV6vV++++649c/DgQXm9Xp+ZlpYWtbe32zPV1dVyOBxKSkqyZ/bt2+fz0f/q6mq5XK4Bb70BAAD08yuQFi9erF/96lfauXOnjh8/rqqqKpWWlup73/uepC/etsrPz1dRUZGqqqrU0tKirKwsjR8/XhkZGZIkp9Op5cuXa9WqVdq7d6+ampq0bNkyTZ06VQ8++KAkacqUKVq4cKGys7NVX1+v+vp6ZWdnKz09XfHx8ZKk1NRUJSQkKDMzU01NTdq7d69Wr16t7Oxs+6/VMzIy5HA4lJWVpZaWFlVVVamoqEgFBQXX9Qk2AAAwNvn1FltZWZn+6Z/+STk5OXK73XK5XFqxYoV+8Ytf2DNr1qxRV1eXcnJy5PF4NGPGDFVXVyssLMye2bx5s4KCgvToo4+qq6tL8+fP19atWxUYGGjPbN++XXl5efan3ZYsWaLy8nL7/sDAQO3cuVM5OTmaPXu2QkJClJGRoZKSEnvG6XSqpqZGubm5mj59uiIiIlRQUKCCggL/dwoAAIwZfn0P0ljE9yANxPcgAQBudcP6PUgAAABjAYEEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADD4HUh//vOftWzZMk2cOFHjx4/Xt7/9bTU2Ntr3W5alp556Si6XSyEhIZo3b54++OADn9/R3d2tlStXKjIyUqGhoVqyZIlOnjzpM+PxeJSZmSmn0ymn06nMzEydPXvWZ+bEiRNavHixQkNDFRkZqby8PPX09PjMHDp0SCkpKQoJCdEdd9yh9evXy7Isf182AAAYQ/wKJI/Ho9mzZ2vcuHHavXu3PvzwQz377LP62te+Zs9s2rRJpaWlKi8vV0NDg2JiYrRgwQKdO3fOnsnPz1dVVZUqKytVV1en8+fPKz09XX19ffZMRkaGmpubtWfPHu3Zs0fNzc3KzMy07+/r69OiRYt04cIF1dXVqbKyUjt27NCqVavsmc7OTi1YsEAul0sNDQ0qKytTSUmJSktLB7NXAABgjAiw/Licsm7dOr3zzjv6wx/+cNn7LcuSy+VSfn6+1q5dK+mLq0XR0dHauHGjVqxYIa/Xq9tvv13btm3T0qVLJUltbW2KjY3Vrl27lJaWpsOHDyshIUH19fWaMWOGJKm+vl7Jyck6cuSI4uPjtXv3bqWnp6u1tVUul0uSVFlZqaysLLndboWHh6uiokKFhYU6deqUHA6HJGnDhg0qKyvTyZMnFRAQcM3X3NnZKafTKa/Xq/Dw8Ovdqus2ed3OIf+dN9vxDYtGegkAAFzVjf777dcVpDfeeEPTp0/XD37wA0VFRWnatGn693//d/v+Y8eOqaOjQ6mpqfYxh8OhlJQU7d+/X5LU2Nio3t5enxmXy6XExER75sCBA3I6nXYcSdLMmTPldDp9ZhITE+04kqS0tDR1d3fbb/kdOHBAKSkpdhz1z7S1ten48eOXfY3d3d3q7Oz0uQEAgLHFr0D65JNPVFFRoXvvvVf/9V//pccff1x5eXl66aWXJEkdHR2SpOjoaJ/HRUdH2/d1dHQoODhYERERV52Jiooa8PxRUVE+M+bzREREKDg4+Koz/T/3z5iKi4vtv3tyOp2KjY29xq4AAIDRxq9AunTpku6//34VFRVp2rRpWrFihbKzs1VRUeEzZ751ZVnWNd/OMmcuNz8UM/3vKF5pPYWFhfJ6vfattbX1qusGAACjj1+BNGnSJCUkJPgcmzJlik6cOCFJiomJkTTw6ozb7bav3MTExKinp0cej+eqM6dOnRrw/KdPn/aZMZ/H4/Got7f3qjNut1vSwKtc/RwOh8LDw31uAABgbPErkGbPnq2jR4/6HPvoo4901113SZLi4uIUExOjmpoa+/6enh7V1tZq1qxZkqSkpCSNGzfOZ6a9vV0tLS32THJysrxer95991175uDBg/J6vT4zLS0tam9vt2eqq6vlcDiUlJRkz+zbt8/no//V1dVyuVyaPHmyPy8dAACMIX4F0pNPPqn6+noVFRXpj3/8o1555RU9//zzys3NlfTF21b5+fkqKipSVVWVWlpalJWVpfHjxysjI0OS5HQ6tXz5cq1atUp79+5VU1OTli1bpqlTp+rBBx+U9MVVqYULFyo7O1v19fWqr69Xdna20tPTFR8fL0lKTU1VQkKCMjMz1dTUpL1792r16tXKzs62r/pkZGTI4XAoKytLLS0tqqqqUlFRkQoKCq7rE2wAAGBsCvJn+IEHHlBVVZUKCwu1fv16xcXFacuWLfrhD39oz6xZs0ZdXV3KycmRx+PRjBkzVF1drbCwMHtm8+bNCgoK0qOPPqquri7Nnz9fW7duVWBgoD2zfft25eXl2Z92W7JkicrLy+37AwMDtXPnTuXk5Gj27NkKCQlRRkaGSkpK7Bmn06mamhrl5uZq+vTpioiIUEFBgQoKCvzfKQAAMGb49T1IYxHfgzQQ34MEALjVDev3IAEAAIwFBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGG4okIqLixUQEKD8/Hz7mGVZeuqpp+RyuRQSEqJ58+bpgw8+8Hlcd3e3Vq5cqcjISIWGhmrJkiU6efKkz4zH41FmZqacTqecTqcyMzN19uxZn5kTJ05o8eLFCg0NVWRkpPLy8tTT0+Mzc+jQIaWkpCgkJER33HGH1q9fL8uybuRlAwCAUW7QgdTQ0KDnn39e3/zmN32Ob9q0SaWlpSovL1dDQ4NiYmK0YMECnTt3zp7Jz89XVVWVKisrVVdXp/Pnzys9PV19fX32TEZGhpqbm7Vnzx7t2bNHzc3NyszMtO/v6+vTokWLdOHCBdXV1amyslI7duzQqlWr7JnOzk4tWLBALpdLDQ0NKisrU0lJiUpLSwf7sgEAwBgQYA3icsr58+d1//3367nnntMvf/lLffvb39aWLVtkWZZcLpfy8/O1du1aSV9cLYqOjtbGjRu1YsUKeb1e3X777dq2bZuWLl0qSWpra1NsbKx27dqltLQ0HT58WAkJCaqvr9eMGTMkSfX19UpOTtaRI0cUHx+v3bt3Kz09Xa2trXK5XJKkyspKZWVlye12Kzw8XBUVFSosLNSpU6fkcDgkSRs2bFBZWZlOnjypgICAa77Wzs5OOZ1Oeb1ehYeH+7tV1zR53c4h/5032/ENi0Z6CQAAXNWN/vs9qCtIubm5WrRokR588EGf48eOHVNHR4dSU1PtYw6HQykpKdq/f78kqbGxUb29vT4zLpdLiYmJ9syBAwfkdDrtOJKkmTNnyul0+swkJibacSRJaWlp6u7uVmNjoz2TkpJix1H/TFtbm44fP37Z19bd3a3Ozk6fGwAAGFv8DqTKykq99957Ki4uHnBfR0eHJCk6OtrneHR0tH1fR0eHgoODFRERcdWZqKioAb8/KirKZ8Z8noiICAUHB191pv/n/hlTcXGx/XdPTqdTsbGxl50DAACjl1+B1Nraqp/85Cd6+eWXddttt11xznzryrKsa76dZc5cbn4oZvrfUbzSegoLC+X1eu1ba2vrVdcNAABGH78CqbGxUW63W0lJSQoKClJQUJBqa2v1L//yLwoKCrri1Rm3223fFxMTo56eHnk8nqvOnDp1asDznz592mfGfB6Px6Pe3t6rzrjdbkkDr3L1czgcCg8P97kBAICxxa9Amj9/vg4dOqTm5mb7Nn36dP3whz9Uc3Oz7r77bsXExKimpsZ+TE9Pj2prazVr1ixJUlJSksaNG+cz097erpaWFnsmOTlZXq9X7777rj1z8OBBeb1en5mWlha1t7fbM9XV1XI4HEpKSrJn9u3b5/PR/+rqarlcLk2ePNmflw4AAMaQIH+Gw8LClJiY6HMsNDRUEydOtI/n5+erqKhI9957r+69914VFRVp/PjxysjIkCQ5nU4tX75cq1at0sSJEzVhwgStXr1aU6dOtf/oe8qUKVq4cKGys7P1b//2b5Kkv//7v1d6erri4+MlSampqUpISFBmZqaeeeYZffbZZ1q9erWys7Ptqz4ZGRl6+umnlZWVpZ/+9Kf6+OOPVVRUpF/84hfX9Qk2AAAwNvkVSNdjzZo16urqUk5Ojjwej2bMmKHq6mqFhYXZM5s3b1ZQUJAeffRRdXV1af78+dq6dasCAwPtme3btysvL8/+tNuSJUtUXl5u3x8YGKidO3cqJydHs2fPVkhIiDIyMlRSUmLPOJ1O1dTUKDc3V9OnT1dERIQKCgpUUFAw1C8bAACMIoP6HqSxhO9BGojvQQIA3OpG5HuQAAAARjMCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABg8CuQiouL9cADDygsLExRUVF65JFHdPToUZ8Zy7L01FNPyeVyKSQkRPPmzdMHH3zgM9Pd3a2VK1cqMjJSoaGhWrJkiU6ePOkz4/F4lJmZKafTKafTqczMTJ09e9Zn5sSJE1q8eLFCQ0MVGRmpvLw89fT0+MwcOnRIKSkpCgkJ0R133KH169fLsix/XjYAABhj/Aqk2tpa5ebmqr6+XjU1Nbp48aJSU1N14cIFe2bTpk0qLS1VeXm5GhoaFBMTowULFujcuXP2TH5+vqqqqlRZWam6ujqdP39e6enp6uvrs2cyMjLU3NysPXv2aM+ePWpublZmZqZ9f19fnxYtWqQLFy6orq5OlZWV2rFjh1atWmXPdHZ2asGCBXK5XGpoaFBZWZlKSkpUWlo6qM0CAABjQ4B1A5dTTp8+raioKNXW1uo73/mOLMuSy+VSfn6+1q5dK+mLq0XR0dHauHGjVqxYIa/Xq9tvv13btm3T0qVLJUltbW2KjY3Vrl27lJaWpsOHDyshIUH19fWaMWOGJKm+vl7Jyck6cuSI4uPjtXv3bqWnp6u1tVUul0uSVFlZqaysLLndboWHh6uiokKFhYU6deqUHA6HJGnDhg0qKyvTyZMnFRAQcM3X2NnZKafTKa/Xq/Dw8MFu1RVNXrdzyH/nzXZ8w6KRXgIAAFd1o/9+39DfIHm9XknShAkTJEnHjh1TR0eHUlNT7RmHw6GUlBTt379fktTY2Kje3l6fGZfLpcTERHvmwIEDcjqddhxJ0syZM+V0On1mEhMT7TiSpLS0NHV3d6uxsdGeSUlJseOof6atrU3Hjx+/7Gvq7u5WZ2enzw0AAIwtgw4ky7JUUFCgOXPmKDExUZLU0dEhSYqOjvaZjY6Otu/r6OhQcHCwIiIirjoTFRU14DmjoqJ8ZszniYiIUHBw8FVn+n/unzEVFxfbf/fkdDoVGxt7jZ0AAACjzaAD6YknntD777+v3/72twPuM9+6sizrmm9nmTOXmx+Kmf53FK+0nsLCQnm9XvvW2tp61XUDAIDRZ1CBtHLlSr3xxht66623dOedd9rHY2JiJA28OuN2u+0rNzExMerp6ZHH47nqzKlTpwY87+nTp31mzOfxeDzq7e296ozb7ZY08CpXP4fDofDwcJ8bAAAYW/wKJMuy9MQTT+j111/Xm2++qbi4OJ/74+LiFBMTo5qaGvtYT0+PamtrNWvWLElSUlKSxo0b5zPT3t6ulpYWeyY5OVler1fvvvuuPXPw4EF5vV6fmZaWFrW3t9sz1dXVcjgcSkpKsmf27dvn89H/6upquVwuTZ482Z+XDgAAxhC/Aik3N1cvv/yyXnnlFYWFhamjo0MdHR3q6uqS9MXbVvn5+SoqKlJVVZVaWlqUlZWl8ePHKyMjQ5LkdDq1fPlyrVq1Snv37lVTU5OWLVumqVOn6sEHH5QkTZkyRQsXLlR2drbq6+tVX1+v7OxspaenKz4+XpKUmpqqhIQEZWZmqqmpSXv37tXq1auVnZ1tX/XJyMiQw+FQVlaWWlpaVFVVpaKiIhUUFFzXJ9gAAMDYFOTPcEVFhSRp3rx5PsdffPFFZWVlSZLWrFmjrq4u5eTkyOPxaMaMGaqurlZYWJg9v3nzZgUFBenRRx9VV1eX5s+fr61btyowMNCe2b59u/Ly8uxPuy1ZskTl5eX2/YGBgdq5c6dycnI0e/ZshYSEKCMjQyUlJfaM0+lUTU2NcnNzNX36dEVERKigoEAFBQX+vGwAADDG3ND3II0FfA/SQHwPEgDgVjei34MEAAAwGhFIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAgIFAAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAgCFopBeAL5/J63aO9BL8dnzDopFeAgDgS4QrSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAw5j4j9U+99xzeuaZZ9Te3q6/+qu/0pYtWzR37tyRXhaGEf+BXQCAP0b9FaRXX31V+fn5+tnPfqampibNnTtXDz30kE6cODHSSwMAALeoUR9IpaWlWr58uX784x9rypQp2rJli2JjY1VRUTHSSwMAALeoUf0WW09PjxobG7Vu3Tqf46mpqdq/f/9lH9Pd3a3u7m77Z6/XK0nq7Oy8KWu81P35Tfm9+PL7+pOvjfQS/NbydNpILwEAJP3fv9uWZQ3q8aM6kM6cOaO+vj5FR0f7HI+OjlZHR8dlH1NcXKynn356wPHY2NibskZgNHFuGekVAICvc+fOyel0+v24UR1I/QICAnx+tixrwLF+hYWFKigosH++dOmSPvvsM02cOPGKjxkKnZ2dio2NVWtrq8LDw2/a8+D/sOfDi/0efuz58GPPh9+V9tyyLJ07d04ul2tQv3dUB1JkZKQCAwMHXC1yu90Drir1czgccjgcPse+9rWv3awlDhAeHs7/qIYZez682O/hx54PP/Z8+F1uzwdz5ajfqP4j7eDgYCUlJammpsbneE1NjWbNmjVCqwIAALe6UX0FSZIKCgqUmZmp6dOnKzk5Wc8//7xOnDihxx9/fKSXBgAAblGjPpCWLl2q//3f/9X69evV3t6uxMRE7dq1S3fddddIL82Hw+HQP//zPw94ew83D3s+vNjv4ceeDz/2fPjdrD0PsAb7+TcAAIBRalT/DRIAAMBgEEgAAAAGAgkAAMBAIAEAABgIpGHy3HPPKS4uTrfddpuSkpL0hz/84arztbW1SkpK0m233aa7775bv/71r4dppaOHP3v+9ttvKyAgYMDtyJEjw7jiL7d9+/Zp8eLFcrlcCggI0O9///trPobz/Mb4u+ec5zemuLhYDzzwgMLCwhQVFaVHHnlER48evebjOM8HbzB7PlTnOYE0DF599VXl5+frZz/7mZqamjR37lw99NBDOnHixGXnjx07pocfflhz585VU1OTfvrTnyovL087duwY5pV/efm75/2OHj2q9vZ2+3bvvfcO04q//C5cuKBvfetbKi8vv655zvMb5++e9+M8H5za2lrl5uaqvr5eNTU1unjxolJTU3XhwoUrPobz/MYMZs/73fB5buGm++u//mvr8ccf9zl23333WevWrbvs/Jo1a6z77rvP59iKFSusmTNn3rQ1jjb+7vlbb71lSbI8Hs8wrG70k2RVVVVddYbzfGhdz55zng8tt9ttSbJqa2uvOMN5PrSuZ8+H6jznCtJN1tPTo8bGRqWmpvocT01N1f79+y/7mAMHDgyYT0tL03//93+rt7f3pq11tBjMnvebNm2aJk2apPnz5+utt966mcsc8zjPRw7n+dDwer2SpAkTJlxxhvN8aF3Pnve70fOcQLrJzpw5o76+vgH/cdzo6OgB/xHdfh0dHZedv3jxos6cOXPT1jpaDGbPJ02apOeff147duzQ66+/rvj4eM2fP1/79u0bjiWPSZznw4/zfOhYlqWCggLNmTNHiYmJV5zjPB8617vnQ3Wej/r/1MitIiAgwOdny7IGHLvW/OWO48r82fP4+HjFx8fbPycnJ6u1tVUlJSX6zne+c1PXOZZxng8vzvOh88QTT+j9999XXV3dNWc5z4fG9e75UJ3nXEG6ySIjIxUYGDjgyoXb7R7w/yr6xcTEXHY+KChIEydOvGlrHS0Gs+eXM3PmTH388cdDvTz8Bef5rYHz3H8rV67UG2+8obfeekt33nnnVWc5z4eGP3t+OYM5zwmkmyw4OFhJSUmqqanxOV5TU6NZs2Zd9jHJyckD5qurqzV9+nSNGzfupq11tBjMnl9OU1OTJk2aNNTLw19wnt8aOM+vn2VZeuKJJ/T666/rzTffVFxc3DUfw3l+Ywaz55czqPP8hv7EG9elsrLSGjdunPXCCy9YH374oZWfn2+FhoZax48ftyzLstatW2dlZmba85988ok1fvx468knn7Q+/PBD64UXXrDGjRtn/e53vxupl/Cl4++eb9682aqqqrI++ugjq6WlxVq3bp0lydqxY8dIvYQvnXPnzllNTU1WU1OTJckqLS21mpqarE8//dSyLM7zm8HfPec8vzH/8A//YDmdTuvtt9+22tvb7dvnn39uz3CeD63B7PlQnecE0jD513/9V+uuu+6ygoODrfvvv9/nI4qPPfaYlZKS4jP/9ttvW9OmTbOCg4OtyZMnWxUVFcO84i8/f/Z848aN1j333GPddtttVkREhDVnzhxr586dI7DqL6/+j9aat8cee8yyLM7zm8HfPec8vzGX22tJ1osvvmjPcJ4PrcHs+VCd5wF/WQAAAAD+gr9BAgAAMBBIAAAABgIJAADAQCABAAAYCCQAAAADgQQAAGAgkAAAAAwEEgAAGHb79u3T4sWL5XK5FBAQoN///vd+/w7LslRSUqJvfOMbcjgcio2NVVFR0ZCsL2hIfgsAAIAfLly4oG9961v60Y9+pO9///uD+h0/+clPVF1drZKSEk2dOlVer1dnzpwZkvXxTdoAAGBEBQQEqKqqSo888oh9rKenRz//+c+1fft2nT17VomJidq4caPmzZsnSTp8+LC++c1vqqWlRfHx8UO+Jt5iAwAAt5wf/ehHeuedd1RZWan3339fP/jBD7Rw4UJ9/PHHkqT/+I//0N13363//M//VFxcnCZPnqwf//jH+uyzz4bk+QkkAABwS/nTn/6k3/72t3rttdc0d+5c3XPPPVq9erXmzJmjF198UZL0ySef6NNPP9Vrr72ml156SVu3blVjY6P+5m/+ZkjWwN8gAQCAW8p7770ny7L0jW98w+d4d3e3Jk6cKEm6dOmSuru79dJLL9lzL7zwgpKSknT06NEbftuNQAIAALeUS5cuKTAwUI2NjQoMDPS576tf/aokadKkSQoKCvKJqClTpkiSTpw4QSABAIDRZdq0aerr65Pb7dbcuXMvOzN79mxdvHhRf/rTn3TPPfdIkj766CNJ0l133XXDa+BTbAAAYNidP39ef/zjHyV9EUSlpaX67ne/qwkTJujrX/+6li1bpnfeeUfPPvuspk2bpjNnzujNN9/U1KlT9fDDD+vSpUt64IEH9NWvflVbtmzRpUuXlJubq/DwcFVXV9/w+ggkAAAw7N5++21997vfHXD8scce09atW9Xb26tf/vKXeumll/TnP/9ZEydOVHJysp5++mlNnTpVktTW1qaVK1equrpaoaGheuihh/Tss89qwoQJN7w+AgkAAMDAx/wBAAAMBBIAAICBQAIAADAQSAAAAAYCCQAAwEAgAQAAGAgkAAAAA4EEAABgIJAAAAAMBBIAAICBQAIAADAQSAAAAIb/B2oMXRMARAjOAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(your_array)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interpreting the histogram\n", + "It does not look like a normal distrubtion or a uniform distribution. It is skewed to thr right, with a majority of the data being being under 200,000 USD per household. It makes it look like common equality is relatively high, so it looks like everyone is equal. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 53308., 102050., 192994., ..., 407460., 19856., 154754.])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "under_500k = your_array[your_array < 500000]\n", + "under_500k" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([262190., 338722., 173615., 76580., 33854., 16134., 8329.,\n", + " 5401., 4556., 4038.]),\n", + " array([-16942., 34752., 86446., 138140., 189834., 241528., 293222.,\n", + " 344916., 396610., 448304., 499998.]),\n", + " )" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(under_500k)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interpreting the 2nd histogram\n", + "\n", + "It is not uniform, still. It is still right skewed. However, we can now see that a majority US households earn under 100,000 USD. The skewness is for high income earners, it does not skew towards the lower income earners. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from ineqpy.inequality import gini" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.14711442173300704" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gini(your_array)\n", + "ex4_share_below_poverty = len(your_array[your_array < 20000]) / len(your_array)\n", + "results[\"ex4_share_below_poverty\"] = ex4_share_below_poverty\n", + "ex4_share_below_poverty" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex4_share_below_poverty': 0.14711442173300704,\n", + " 'ex4_gini': 0.4810925546879211}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ex4_gini = gini(your_array)\n", + "ex4_gini\n", + "results[\"ex4_gini\"] = ex4_gini\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Ex 5\n", + "\n", + "Overall, European countries have lower gini scores (.27ish) then the United States. While countries in Africa and South America have higher gini scores(.45-.63). We intrepret this that U.S. has more equality of income than the higher scores. However, Europe does better than the United States with equality of wealth. This makes sense to us, as moree developed countries have more wealth and oppourutunities for wealth with infrastucure and resources. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ex4_share_below_poverty': 0.14711442173300704, 'ex4_gini': 0.4810925546879211, 'ex6_gini_policy_a': 0.46024685074894556, 'ex6_gini_policy_b': 0.4582821778789707, 'ex6_gini_which_reduced_more': 'Policy B'}\n" + ] + } + ], + "source": [ + "# Policy A (40k) and B (30k)\n", + "house_40k = your_array.copy()\n", + "house_30k = your_array.copy()\n", + "house_40k[house_40k < 40000] = house_40k[house_40k < 40000] + 5000\n", + "house_30k[house_30k < 30000] = house_30k[house_30k < 30000] + 7000\n", + "house_40k_gini = gini(house_40k)\n", + "house_30k_gini = gini(house_30k)\n", + "\n", + "results[\"ex6_gini_policy_a\"] = house_40k_gini\n", + "\n", + "results[\"ex6_gini_policy_b\"] = house_30k_gini\n", + "\n", + "results[\"ex6_gini_which_reduced_more\"] = \"Policy B\"\n", + "\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Policy B has a fairer income distribution compared to Policy A. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex4_share_below_poverty': 0.14711442173300704,\n", + " 'ex4_gini': 0.4810925546879211,\n", + " 'ex6_gini_policy_a': 0.46024685074894556,\n", + " 'ex6_gini_policy_b': 0.4582821778789707,\n", + " 'ex6_gini_which_reduced_more': 'Policy B',\n", + " 'ex7_gini_policy_c': 0.4756173843900714}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "house_250k = your_array.copy()\n", + "\n", + "house_250k[house_250k > 250000] = (house_250k[house_250k > 250000]) * 0.95\n", + "house_250k_gini = gini(house_250k)\n", + "results[\"ex7_gini_policy_c\"] = house_250k_gini\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex4_share_below_poverty': 0.14711442173300704,\n", + " 'ex4_gini': 0.4810925546879211,\n", + " 'ex6_gini_policy_a': 0.46024685074894556,\n", + " 'ex6_gini_policy_b': 0.4582821778789707,\n", + " 'ex6_gini_which_reduced_more': 'Policy B',\n", + " 'ex7_gini_policy_c': 0.4756173843900714,\n", + " 'ex8_revenue_raised': 929623340.85}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# print(house_250k)\n", + "ex_8 = your_array.copy()\n", + "ex_8 = ex_8[ex_8 > 250000] * 0.05\n", + "results[\"ex8_revenue_raised\"] = np.sum(ex_8)\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex4_share_below_poverty': 0.14711442173300704,\n", + " 'ex4_gini': 0.4810925546879211,\n", + " 'ex6_gini_policy_a': 0.46024685074894556,\n", + " 'ex6_gini_policy_b': 0.4582821778789707,\n", + " 'ex6_gini_which_reduced_more': 'Policy B',\n", + " 'ex7_gini_policy_c': 0.4756173843900714,\n", + " 'ex8_revenue_raised': 929623340.85,\n", + " 'ex9_transfers': 4208.230382379836}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# ex9\n", + "results[\"ex9_transfers\"] = results[\"ex8_revenue_raised\"] / len(\n", + " your_array[your_array < 30000]\n", + ")\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex4_share_below_poverty': 0.14711442173300704,\n", + " 'ex4_gini': 0.4810925546879211,\n", + " 'ex6_gini_policy_a': 0.46024685074894556,\n", + " 'ex6_gini_policy_b': 0.4582821778789707,\n", + " 'ex6_gini_which_reduced_more': 'Policy B',\n", + " 'ex7_gini_policy_c': 0.4756173843900714,\n", + " 'ex8_revenue_raised': 929623340.85,\n", + " 'ex9_transfers': 4208.230382379836,\n", + " 'ex10_gini_policy_d': 0.46166900570205466}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ex_10 = your_array.copy()\n", + "money_per_home = results[\"ex8_revenue_raised\"] / len(ex_10[ex_10 < 30_000])\n", + "ex_10[ex_10 < 30_000] = ex_10[ex_10 < 30_000] + money_per_home\n", + "ex_10[ex_10 > 250_000] = ex_10[ex_10 > 250_000] * 0.95\n", + "results[\"ex10_gini_policy_d\"] = gini(ex_10)\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.46264861963052434" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# ex11\n", + "ex_11 = your_array.copy()\n", + "money_per_home2 = results[\"ex8_revenue_raised\"] / len(ex_11[ex_11 < 40_000])\n", + "ex_11[ex_11 < 40_000] = ex_11[ex_11 < 40_000] + money_per_home2\n", + "ex_11[ex_11 > 250_000] = ex_11[ex_11 > 250_000] * 0.95\n", + "results[\"ex11_gini_policy_e\"] = gini(ex_11)\n", + "results[\"ex11_gini_policy_e\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex4_share_below_poverty': 0.14711442173300704,\n", + " 'ex4_gini': 0.4810925546879211,\n", + " 'ex6_gini_policy_a': 0.46024685074894556,\n", + " 'ex6_gini_policy_b': 0.4582821778789707,\n", + " 'ex6_gini_which_reduced_more': 'Policy B',\n", + " 'ex7_gini_policy_c': 0.4756173843900714,\n", + " 'ex8_revenue_raised': 929623340.85,\n", + " 'ex9_transfers': 4208.230382379836,\n", + " 'ex10_gini_policy_d': 0.46166900570205466,\n", + " 'ex11_gini_policy_e': 0.46264861963052434,\n", + " 'ex12_policy_recommendation': 'Policy D'}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[\"ex12_policy_recommendation\"] = \"Policy D\"\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Citations \n", + "\n", + " Steven Ruggles, Sarah Flood, Sophia Foster, Ronald Goeken, Jose Pacas, Megan Schouweiler and Matthew Sobek. IPUMS USA: Version 11.0 [dataset]. Minneapolis, MN: IPUMS, 2021. https://doi.org/10.18128/D010.V11.0" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/NumpyExercises/metadata.yml b/NumpyExercises/metadata.yml new file mode 100644 index 0000000..87fe67d --- /dev/null +++ b/NumpyExercises/metadata.yml @@ -0,0 +1,13 @@ +--- +:id: 195162482 +:submitters: +- :name: Simrun Sharma + :email: simrun.sharma@duke.edu +- :name: Katelyn Hucker + :email: katelyn.hucker@duke.edu +:created_at: !ruby/object:ActiveSupport::TimeWithZone + utc: 2023-09-21 03:20:19.019812000 Z + zone: !ruby/object:ActiveSupport::TimeZone + name: America/Los_Angeles + time: 2023-09-20 20:20:19.019812000 Z +:status: processed diff --git a/Pandas_DataFrames/Exercise_series.ipynb b/Pandas_DataFrames/Exercise_series.ipynb new file mode 100644 index 0000000..14e7efe --- /dev/null +++ b/Pandas_DataFrames/Exercise_series.ipynb @@ -0,0 +1,608 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Measuring Income Equality with the Gini Coefficient\n", + "\n", + "As we discussed in our numpy exercises, one frequently used measure of inequality is the Gini Coefficient. The Gini Coefficient takes on a value of 1 when the distribution of some property is maximally unequal across a said of entities, and a value of 0 when it is evenly distributed. \n", + "\n", + "In this exercise, we will calculate the Gini Coefficient for income inequality across the countries of the world to get a sense of income inequality *across* countries. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gradescope Autograding\n", + "\n", + "Please follow [all standard guidance](https://www.practicaldatascience.org/html/autograder_guidelines.html) for submitting this assignment to the Gradescope autograder, including storing your solutions in a dictionary called `results` and ensuring your notebook runs from the start to completion without any errors.\n", + "\n", + "**Starting with this assignment, submissions that have not been formatted with `black` will be automatically rejected.**\n", + "\n", + "For this assignment, please name your file `exercise_series.ipynb` before uploading.\n", + "\n", + "You can check that you have answers for all questions in your `results` dictionary with this code:\n", + "\n", + "```python\n", + "assert set(results.keys()) == {\n", + " \"ex2_mean\",\n", + " \"ex2_median\",\n", + " \"ex3_highest_gdp_percap\",\n", + " \"ex3_lowest_gdp_percap\",\n", + " \"ex4_lessthan20_000\",\n", + " \"ex5_switzerland\",\n", + " \"ex6_gini_loop\",\n", + " \"ex7_gini_vectorized\",\n", + " \"ex8_gini_2025\",\n", + "}\n", + "```\n", + "\n", + "### Submission Limits\n", + "\n", + "Please remember that you are **only allowed three submissions to the autograder.** Your last submission (if you submit 3 or fewer times), or your third submission (if you submit more than 3 times) will determine your grade Submissions that error out will **not** count against this total.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 1\n", + "\n", + "To get accustomed to Series, let's explore some data on the wealth of 10 randomly selected countries. Data below presents the GDP per capita for these countries in 2008. \n", + "\n", + "Use the code below to get started: \n", + "\n", + "```python\n", + "gdppercap = pd.Series(\n", + " [34605, 34493, 12393, 44200, 10041, 58138, 4709, 49284, 10109, 42536],\n", + " index=[\n", + " \"Bahrain\",\n", + " \"Belgium\",\n", + " \"Bulgaria\",\n", + " \"Ireland\",\n", + " \"Macedonia\",\n", + " \"Norway\",\n", + " \"Paraguay\",\n", + " \"Singapore\",\n", + " \"South Africa\",\n", + " \"Switzerland\",\n", + " ],\n", + ")\n", + "```\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "gdppercap = pd.Series(\n", + " [34605, 34493, 12393, 44200, 10041, 58138, 4709, 49284, 10109, 42536],\n", + " index=[\n", + " \"Bahrain\",\n", + " \"Belgium\",\n", + " \"Bulgaria\",\n", + " \"Ireland\",\n", + " \"Macedonia\",\n", + " \"Norway\",\n", + " \"Paraguay\",\n", + " \"Singapore\",\n", + " \"South Africa\",\n", + " \"Switzerland\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 2\n", + "\n", + "Find the mean, median, minimum and maximum values of GDP per capita in this data. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30050.8\n", + "34549.0\n", + "58138\n", + "4709\n" + ] + } + ], + "source": [ + "mean = gdppercap.mean()\n", + "median = gdppercap.median()\n", + "min = gdppercap.min()\n", + "max = gdppercap.max()\n", + "print(mean)\n", + "print(median)\n", + "print(max)\n", + "print(min)\n", + "\n", + "results = {}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 3\n", + "\n", + "Programmatically, determine which country in our data has the highest income per capita, and which has the lowest income per capita.\n", + "\n", + "(Obviously, this is easier to do by just looking at the data, but that's only because this dataset is very small. With a real dataset, you would need to do it with code, so please write code to accomplish this task.)\n", + "\n", + "Hint: Country names form the index for this Series, so to get country names you'll need to access the index. \n", + "\n", + "Store the country names *as strings* with the keys `\"ex3_highest_gdp_percap\"` and `\"ex3_lowest_gdp_percap\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex3_highest_gdp_percap': 'Norway', 'ex3_lowest_gdp_percap': 'Paraguay'}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Maximum\n", + "gdppercap.head()\n", + "max_gdp = gdppercap.max()\n", + "# gdppercap.idxmax()\n", + "id_max = gdppercap[gdppercap == max_gdp].index\n", + "\n", + "# Minimum\n", + "min_gdp = gdppercap.min()\n", + "id_min = gdppercap[gdppercap == min_gdp].index\n", + "\n", + "\n", + "results[\"ex3_highest_gdp_percap\"] = id_max[0]\n", + "results[\"ex3_lowest_gdp_percap\"] = id_min[0]\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 4\n", + "\n", + "Get Python to print out the names of all the countries that have GDP per capita of less than \\$20,000.\n", + "\n", + "Store these countries in a list, sorted alphabetically, and store it in `results` under the key `\"ex4_lessthan20_000\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Simrun Sharma\\AppData\\Local\\Temp\\ipykernel_31340\\4179986109.py:2: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " results[\"ex4_lessthan20_000\"] = ex4[0]\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': 12393}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ex4 = gdppercap[gdppercap < 20000]\n", + "results[\"ex4_lessthan20_000\"] = ex4[0]\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 5 \n", + "\n", + "Get Python to print out the GDP per capita of Switzerland. Store the result as `ex5_switzerland`:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': 12393,\n", + " 'ex5_switzerland': 42536}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercise 5\n", + "ex5 = gdppercap.loc[\"Switzerland\"]\n", + "results[\"ex5_switzerland\"] = ex5\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercise 6\n", + "\n", + "One frequntly used measure of inequality is the Gini Coefficient. The Gini Coefficient takes on a value of 1 when the distribution of some variable is maximally unequal across a population, and a value of 0 when it is evenly distributed. We will calculate the Gini Coefficient for income inequality in our data. \n", + "\n", + "To visualize the Gini Coefficient, we plot the cumulative share of the population (ordered from poorest to richest) on the x-axis, and cumulative share of income earned by that group on the y-axis. The Gini Coefficient is then defined as $$\\frac{A}{A + B}$$, where the areas A and B are labeled below: \n", + "\n", + "![gini_coefficient](https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Economics_Gini_coefficient2.svg/800px-Economics_Gini_coefficient2.svg.png)\n", + "\n", + "If income is evenly distributed, then the poorest 20% of a population will also have 20% of the wealth; the poorest 40% will have 40% of the wealth, and so forth, resulting in a perfect 45 degree line. In this situation, there is no area between the 45% line and the actual income distribution, so $A=0$, and the Gini Coefficient is 0. \n", + "\n", + "If, by contrast, the top 10% of people hold all the wealth in a country, then there will be no wealth for the poorest 90% of people, then wealth will jump up at the far right side of the graph. This will generate a very large gap between the 45% line and actual income for most of the graph, generating a large value for the area $A$, creating a very high Gini Coefficient. \n", + "\n", + "To illustrate, here are a few different Gini plots. These come from someone studying inequality of participation, so to adapt this to our study of income, just imagine the y-axis plots share of income):\n", + "\n", + "![gini_distributions](https://miro.medium.com/max/595/0*3DTcZnzDwS6A6AtP)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For discrete data, the Gini Coefficient can be calculated with the following formula: \n", + "\n", + "$$\\frac{2 \\sum_{i=1}^n i y_i}{n \\sum_{i=1}^n y_i} -\\frac{n+1}{n}$$\n", + "\n", + "Where $i$ is each country's rank ordering from poorest to richest, and $y_i$ is the income of country $i$.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Exercise 6\n", + "\n", + "Using this formula, calculate the Gini coefficient for our income data. \n", + "\n", + "Begin by writing a function to calculate the Gini Coefficient for our data *by looping over the entries in our Series*. In other words, try and embrace the spirit of how you might normally think about interpreting the summation notation written above.\n", + "\n", + "Store the gini coefficient you calculate in `results` under the key `\"ex6_gini_loop\"`.\n", + "\n", + "**HINT**: Be careful with 0-indexing! Python counts from 0, but mathematical formulas (like $\\sum$) start from 1!\n", + "\n", + "**HINT 2**: I'll probalby ask you to use this more than once, so please put it in a function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "def cal_gini_loop(data):\n", + " sorted_data = sorted(data)\n", + " total_income = sum(sorted_data)\n", + " cumulative_sum = 0\n", + " n = len(sorted_data)\n", + " for i in range(n):\n", + " y_i = sorted_data[i]\n", + " cumulative_sum += 2 * (i + 1) * y_i\n", + " gini_coeff = (cumulative_sum / (n * total_income)) - ((n+1)/n)\n", + " return gini_coeff\n", + "\n", + "x = cal_gini_loop(gdppercap)\n", + "print(x)\n", + "results[\"ex6_gini_loop\"] = x\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3382798461272245\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': 12393,\n", + " 'ex5_switzerland': 42536,\n", + " 'ex6_gini_loop': 0.3382798461272245}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def cal_gini_loop(data):\n", + " sorted_data = sorted(data)\n", + " total_income = sum(sorted_data)\n", + " cumulative_sum = 0\n", + " n = len(sorted_data)\n", + " for i in range(n):\n", + " y_i = sorted_data[i]\n", + " cumulative_sum += 2 * (i + 1) * y_i\n", + " gini_coeff = (cumulative_sum / (n * total_income)) - ((n + 1) / n)\n", + " return gini_coeff\n", + "\n", + "\n", + "x = cal_gini_loop(gdppercap)\n", + "print(x)\n", + "results[\"ex6_gini_loop\"] = x\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 7\n", + "\n", + "Excellent! But as we've seen in [our readings](https://nickeubank.github.io/practicaldatascience_book/notebooks/class_2/week_4/11_vectorization.html), in data science we generally strive to *not* loop over the entries in our arrays; instead, we aspire to write *vectorized code* that naturally applies a simple operation to each observation.\n", + "\n", + "So now write a new function to calculate the Gini Coefficient that *doesn't* use loops, and instead relies on vectorized code.\n", + "\n", + "Store the result in `results` under the key `\"ex7_gini_vectorized\"`.\n", + "\n", + "**HINT:** you will probably have to create some new series/vectors/arrays." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3382798461272245\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': 12393,\n", + " 'ex5_switzerland': 42536,\n", + " 'ex6_gini_loop': 0.3382798461272245,\n", + " 'ex7_gini_vectorized': 0.3382798461272245}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "\n", + "def cal_gini_vector(data):\n", + " data = np.array(data.sort_values())\n", + " n = len(data)\n", + " i = np.arange(1, n + 1)\n", + " numerator = np.sum(2 * data * i)\n", + " denominator = np.sum(n * data)\n", + " return numerator / denominator - (n + 1) / n\n", + "\n", + "\n", + "x = cal_gini_vector(gdppercap)\n", + "print(x)\n", + "results[\"ex7_gini_vectorized\"] = x\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 8\n", + "\n", + "The result we just generated offers a snap-shot of inequality for this subset of countries. But what are the dynamics of inequality for these countries?\n", + "\n", + "There is an idea in economics called the \"convergence hypothesis\", which argues that poorer countries are likely to grow faster, and as a result global inequality is likely to decline. Economists advocating for this hypothesis pointed out that while rich countries had to invent new technologies in order to grow, many poor countries simply had to take advantage of innovations already developed by rich countries. \n", + "\n", + "To test this hypothesis, let's do a small analysis of the dynamics of income inequality in our sample. Create the following Series in your Python session, which provides the average growth rate of GDP per capita for all the countries in our sample from 2000 to 2018. \n", + "\n", + "```python\n", + "avg_growth = pd.Series(\n", + " [\n", + " -0.29768835,\n", + " 0.980299584,\n", + " 4.52991925,\n", + " 3.686556736,\n", + " 2.621416804,\n", + " 0.775132075,\n", + " 2.015489468,\n", + " 3.345793635,\n", + " 1.349993318,\n", + " 0.982775018,\n", + " ],\n", + " index=[\n", + " \"Bahrain\",\n", + " \"Belgium\",\n", + " \"Bulgaria\",\n", + " \"Ireland\",\n", + " \"Macedonia\",\n", + " \"Norway\",\n", + " \"Paraguay\",\n", + " \"Singapore\",\n", + " \"South Africa\",\n", + " \"Switzerland\",\n", + " ],\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using this data on average growth rates in GDP per capita, and assuming growth rates from 2000 to 2018 continue into the future, estimate what our Gini Coefficient may look like in 2025 (remembering that income in our data is from 2008, so we're extrapolating ahead 17 years)?\n", + "\n", + "**Hint:** the formula for compound growth (i.e. value of something growing at a rate of `x` percent for $t$ periods) is:\n", + "\n", + "$$future\\_value = current\\_value * (1 + \\frac{percentage\\_growth\\_rate}{100}))^t$$\n", + "\n", + "Store the answer in `results` under the key `\"ex8_gini_2025\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3656264991306193\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex3_highest_gdp_percap': 'Norway',\n", + " 'ex3_lowest_gdp_percap': 'Paraguay',\n", + " 'ex4_lessthan20_000': 12393,\n", + " 'ex5_switzerland': 42536,\n", + " 'ex6_gini_loop': 0.3382798461272245,\n", + " 'ex7_gini_vectorized': 0.3382798461272245,\n", + " 'ex8_gini_2025': 0.3656264991306193}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "avg_growth = pd.Series(\n", + " [\n", + " -0.29768835,\n", + " 0.980299584,\n", + " 4.52991925,\n", + " 3.686556736,\n", + " 2.621416804,\n", + " 0.775132075,\n", + " 2.015489468,\n", + " 3.345793635,\n", + " 1.349993318,\n", + " 0.982775018,\n", + " ],\n", + " index=[\n", + " \"Bahrain\",\n", + " \"Belgium\",\n", + " \"Bulgaria\",\n", + " \"Ireland\",\n", + " \"Macedonia\",\n", + " \"Norway\",\n", + " \"Paraguay\",\n", + " \"Singapore\",\n", + " \"South Africa\",\n", + " \"Switzerland\",\n", + " ],\n", + ")\n", + "\n", + "t = 17\n", + "future_value = gdppercap * (1 + avg_growth / 100) ** t\n", + "ex8_gini_2025 = cal_gini_vector(future_value)\n", + "print(ex8_gini_2025)\n", + "results[\"ex8_gini_2025\"] = ex8_gini_2025\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 9\n", + "\n", + "Interpret your result -- does it seem to imply that we are seeing covergence or not?\n", + "\n", + "[After you're done, you can see a more systematic version of this analysis here!](https://www.cgdev.org/blog/everything-you-know-about-cross-country-convergence-now-wrong)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Answer for number 9:\n", + "We are no seeing a convergence. This is because we can see that the gap is not reducing." + ] + } + ], + "metadata": { + "interpreter": { + "hash": "f06fa9c80cc08d4d343f66ad24a278ad0285590eac640a80c32c9d748f33a802" + }, + "kernelspec": { + "display_name": "Python 3.9.7 64-bit ('base': conda)", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Pandas_DataFrames/US_ACS_2017_10pct_sample.dta b/Pandas_DataFrames/US_ACS_2017_10pct_sample.dta new file mode 100644 index 0000000..22ec84e Binary files /dev/null and b/Pandas_DataFrames/US_ACS_2017_10pct_sample.dta differ diff --git a/Pandas_DataFrames/exercise_cleaning.ipynb b/Pandas_DataFrames/exercise_cleaning.ipynb new file mode 100644 index 0000000..68db073 --- /dev/null +++ b/Pandas_DataFrames/exercise_cleaning.ipynb @@ -0,0 +1,773 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cleaning Data Exercises\n", + "\n", + "In this exercise, we'll be returning to the American Community Survey data we used previously to measuring racial income inequality in the United States. In today's exercise, we'll be using it to measure the returns to education and how those returns vary by race and gender.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Gradescope Autograding\n", + "\n", + "Please follow [all standard guidance](https://www.practicaldatascience.org/html/autograder_guidelines.html) for submitting this assignment to the Gradescope autograder, including storing your solutions in a dictionary called `results` and ensuring your notebook runs from the start to completion without any errors.\n", + "\n", + "For this assignment, please name your file `exercise_missing.ipynb` before uploading.\n", + "\n", + "You can check that you have answers for all questions in your `results` dictionary with this code:\n", + "\n", + "```python\n", + "assert set(results.keys()) == {\n", + " \"ex5_age_young\",\n", + " \"ex5_age_old\",\n", + " \"ex7_avg_age\",\n", + " \"ex8_avg_age\",\n", + " \"ex9_num_college\",\n", + " \"ex11_share_male_w_degrees\",\n", + " \"ex11_share_female_w_degrees\",\n", + " \"ex12_comparing\",\n", + "}\n", + "```\n", + "\n", + "\n", + "### Submission Limits\n", + "\n", + "Please remember that you are **only allowed three submissions to the autograder.** Your last submission (if you submit 3 or fewer times), or your third submission (if you submit more than 3 times) will determine your grade Submissions that error out will **not** count against this total." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercises\n", + "\n", + "### Exercise 1\n", + "\n", + "For these cleaning exercises, we'll return to the ACS data we've used before one last time. We'll be working with `US_ACS_2017_10pct_sample.dta`. Import the data (please use url for the autograder)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "pd.set_option(\"mode.copy_on_write\", True)\n", + "\n", + "\n", + "# loading the dataset\n", + "acs = pd.read_stata(\n", + " \"https://github.com/nickeubank/MIDS_Data/raw/master/US_AmericanCommunitySurvey/US_ACS_2017_10pct_sample.dta\"\n", + ")\n", + "\n", + "# initializing dictionary\n", + "results = {}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 2\n", + "\n", + "For our exercises today, we'll focus on `age`, `sex`, `educ` (education), and `inctot` (total income). Subset your data to those variables, and quickly look at a sample of 10 rows." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The following is a table that is subsetted for age, education, income, and sex\n", + " age educ inctot sex\n", + "0 4 nursery school to grade 4 9999999 female\n", + "1 17 grade 11 6000 female\n", + "2 63 4 years of college 6150 male\n", + "3 66 grade 12 14000 female\n", + "4 1 n/a or no schooling 9999999 male\n", + "... .. ... ... ...\n", + "318999 33 4 years of college 22130 female\n", + "319000 4 nursery school to grade 4 9999999 female\n", + "319001 20 grade 12 5000 male\n", + "319002 47 5+ years of college 240000 male\n", + "319003 33 5+ years of college 48000 male\n", + "\n", + "[319004 rows x 4 columns]\n" + ] + } + ], + "source": [ + "acs = acs[[\"age\", \"educ\", \"inctot\", \"sex\"]]\n", + "print(\"The following is a table that is subsetted for age, education, income, and sex\")\n", + "print(acs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 3\n", + "\n", + "As before, all the values of `9999999` have the potential to cause us real problems, so replace all the values of `inctot` that are `9999999` with `np.nan`. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ageeducinctotsex
13674115grade 90.0male
4006877grade 1236200.0male
59267584 years of college0.0female
14106959grade 128400.0male
21202456grade 12100000.0male
184478564 years of college80000.0female
112077485+ years of college175000.0male
26371258grade 129100.0female
7754622grade 120.0female
107543604 years of college61200.0male
296739304 years of college10000.0female
7116815grade 100.0female
177867224 years of college3000.0male
2378862n/a or no schoolingNaNmale
62670495+ years of college230000.0male
1081275n/a or no schoolingNaNmale
954608nursery school to grade 4NaNmale
73254531 year of college9000.0male
22807414grade 5, 6, 7, or 8NaNfemale
232798584 years of college33000.0female
\n", + "
" + ], + "text/plain": [ + " age educ inctot sex\n", + "136741 15 grade 9 0.0 male\n", + "40068 77 grade 12 36200.0 male\n", + "59267 58 4 years of college 0.0 female\n", + "141069 59 grade 12 8400.0 male\n", + "212024 56 grade 12 100000.0 male\n", + "184478 56 4 years of college 80000.0 female\n", + "112077 48 5+ years of college 175000.0 male\n", + "263712 58 grade 12 9100.0 female\n", + "77546 22 grade 12 0.0 female\n", + "107543 60 4 years of college 61200.0 male\n", + "296739 30 4 years of college 10000.0 female\n", + "71168 15 grade 10 0.0 female\n", + "177867 22 4 years of college 3000.0 male\n", + "237886 2 n/a or no schooling NaN male\n", + "62670 49 5+ years of college 230000.0 male\n", + "108127 5 n/a or no schooling NaN male\n", + "95460 8 nursery school to grade 4 NaN male\n", + "73254 53 1 year of college 9000.0 male\n", + "228074 14 grade 5, 6, 7, or 8 NaN female\n", + "232798 58 4 years of college 33000.0 female" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# replace all the values of `inctot` that are `9999999` with `np.nan`\n", + "import numpy as np\n", + "\n", + "acs.loc[acs[\"inctot\"] == 9999999, \"inctot\"] = np.nan\n", + "acs[\"inctot\"].value_counts()\n", + "np.random.seed(12)\n", + "acs.sample(20)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 4\n", + "\n", + "Attempt to calculate the average age of people in our data. What do you get? Why are you getting that error?\n", + "\n", + "You *should* get an error in trying to answer this question, but **PLEASE LEAVE THE CODE THAT GENERATES THIS ERROR COMMENTED OUT SO YOUR NOTEBOOK WILL RUN IN THE AUTOGRADER**. \n", + "\n", + "Then talk about the error in a markdown cell." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# I am now going to be calculating the average age of people in our data\n", + "# acs[\"age\"].mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Exercise 4: The reason why there is an error is because age is not appearing as a numerical variable, it is coming as a categorical variable. You can't take the mean of a categorical variable. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 5\n", + "\n", + "We want to be able to calculate things using age, so we need it to be a numeric type. Check the current type of `age`, and look at all the values of `age` to figure out why it's categorical and not numeric. You should find two problematic categories. Store the values of these categories in `\"ex5_age_young\"` and `\"ex5_age_old\"` (once you find them, it should be clear which is which)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The dictionary now has the string attached to different ages\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex5_age_young': 'less than 1 year old',\n", + " 'ex5_age_old': '90 (90+ in 1980 and 1990)'}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# print(acs[\"age\"].dtype)\n", + "\n", + "# print(acs.loc[:,\"age\"])\n", + "\n", + "# acs.loc[acs[\"age\"] == \"less than 1 year old\", 'age']\n", + "\n", + "# acs[~acs[\"age\"].str.isnumeric()]\n", + "\n", + "results[\"ex5_age_young\"] = \"less than 1 year old\"\n", + "results[\"ex5_age_old\"] = \"90 (90+ in 1980 and 1990)\"\n", + "\n", + "\n", + "print(\"The dictionary now has the string attached to different ages\")\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 6\n", + "\n", + "In order to convert `age` into a numeric variable, we need to replace those problematic entries with values that `pandas` can later convert into numbers. Pick appropriate substitutions for the existing values and replace the current values. \n", + "\n", + "**Hint 1:** Categorical variables act like strings, so you might want to use string methods! \n", + "\n", + "**Hint 2:** Remember that characters like parentheses, pluses, asterisks, etc. are special in Python strings, and you have to escape them if you want them to be interpreted literally!\n", + "\n", + "**Hint 3:** Because the US Census has been conducted regularly for hundreds of years but exactly how the census has been conducted have occasionally changed, variables are sometimes coded in a way that might be interpreted in different ways for different census years. For example, hypothetically, one might write `90 (90+ in 1980 and 1990)` if the Censuses conducted in 1980 and 1990 used to top-code age at 90 (any values *over* 90 were just coded as 90), but more recent Censuses no longer top-coded age and recorded ages over 90 as the respondents actual age." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The age is now numerical from categorical\n" + ] + } + ], + "source": [ + "# Exercise 6\n", + "\n", + "acs[\"age\"] = acs[\"age\"].str.replace(results[\"ex5_age_young\"], \"0\")\n", + "acs[\"age\"] = acs[\"age\"].str.replace(\"90 \\(90\\+ in 1980 and 1990\\)\", \"90\", regex=True)\n", + "\n", + "acs[\"age\"] = acs[\"age\"].astype(int)\n", + "\n", + "print(\"The age is now numerical from categorical\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 7\n", + "\n", + "Now convert age from a categorical to numeric. Calculate the average age amoung this group, and store it in `\"ex7_avg_age\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "41.30384885455982\n", + "The aveage age among this group is 41.30\n" + ] + } + ], + "source": [ + "print(acs[\"age\"].mean())\n", + "\n", + "results[\"ex7_avg_age\"] = acs[\"age\"].mean()\n", + "print(\"The aveage age among this group is {:.2f}\".format(results[\"ex7_avg_age\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 8\n", + "\n", + "Let's now filter out anyone in our data whose age is less than 18. Note that before made `age` a numeric variable, we couldn't do this! Again, calculate the average age and this time store it in `\"ex8_avg_age\"`. \n", + "\n", + "Use this sample of people 18 and over for all subsequent exercises." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The average age of people who are over 18 is 50 years old\n" + ] + } + ], + "source": [ + "# Execercise 8 where we are trying to calculate the average age of people under 18\n", + "age_filtered = acs[acs[\"age\"] >= 18]\n", + "results[\"ex8_avg_age\"] = age_filtered[\"age\"].mean()\n", + "\n", + "print(\n", + " \"The average age of people who are over 18 is {:.0f} years old\".format(\n", + " results[\"ex8_avg_age\"]\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 9\n", + "\n", + "Create an indicator variable for whether each person has *at least* a college Bachelor's degree called `college_degree`. Use this variable to calculate the number of people in the dataset with a college degree. You may assume that to get a college degree you need to complete at least 4 years of college. Save the result as `\"ex9_num_college\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This is the number of students who completed at least 4 years of college 77013\n" + ] + } + ], + "source": [ + "# Exercise 9 creating an indicator variable to see how many students completed at least 4 years of college\n", + "college_degree = [\"4 years of college\", \"5+ years of college\"]\n", + "\n", + "results[\"ex9_num_college\"] = (\n", + " age_filtered.loc[age_filtered[\"educ\"].isin(college_degree)].value_counts().sum()\n", + ")\n", + "\n", + "print(\n", + " \"This is the number of students who completed at least 4 years of college {:.0f}\".format(\n", + " results[\"ex9_num_college\"]\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 10\n", + "\n", + "Let's examine how the educational gender gap. Use `pd.crosstab` to create a cross-tabulation of `sex` and `college_degree`. `pd.crosstab` will give you the number of people who have each combination of `sex` and `college_degree` (so in this case, it will give us a 2x2 table with Male and Female as rows, and `college_degree` True and False as columns, or vice versa. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "educ False True \n", + "sex \n", + "male 85821 36181\n", + "female 90200 40832\n" + ] + } + ], + "source": [ + "# This is a 2 x 2 table with Male and Females as rows and college degree True or False as columns\n", + "\n", + "gender = age_filtered[\"sex\"]\n", + "\n", + "degree = age_filtered[\"educ\"].isin(college_degree)\n", + "\n", + "\n", + "cross_tab = pd.crosstab(gender, degree)\n", + "print(cross_tab)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 11\n", + "\n", + "Counts are kind of hard to interpret. `pd.crosstab` can also normalize values to give percentages. Look at the `pd.crosstab` help file to figure out how to normalize the values in the table. Normalize them so that you get the share of men with and without college degree, and the share of women with and without college degrees.\n", + "\n", + "Store the share (between 0 and 1) of men with college degrees in `\"ex11_share_male_w_degrees\"`, and the share of women with degrees in `\"ex11_share_female_w_degrees\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "educ False True \n", + "sex \n", + "male 0.703439 0.296561\n", + "female 0.688381 0.311619\n", + "The proportion of females with degrees is 0.31 and the number of males with degrees is 0.30\n" + ] + } + ], + "source": [ + "# Exercise 11 normalize them so you can get share of men/women with and without college degrees\n", + "cross_tab_normalized = pd.crosstab(gender, degree, normalize=\"index\")\n", + "print(cross_tab_normalized)\n", + "\n", + "results[\"ex11_share_male_w_degrees\"] = cross_tab_normalized.loc[\"male\", True]\n", + "results[\"ex11_share_female_w_degrees\"] = cross_tab_normalized.loc[\"female\", True]\n", + "print(\n", + " \"The proportion of females with degrees is {:.2f} and the number of males with degrees is {:.2f}\".format(\n", + " results[\"ex11_share_female_w_degrees\"], results[\"ex11_share_male_w_degrees\"]\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 12\n", + "\n", + "Now, let's recreate that table for people who are 40 and over and people under 40. Over time, what does this suggest about the absolute difference in the share of men and women earning college degrees? Has it gotten larger, stayed the same, or gotten smaller? Store your answer (either `\"the absolute difference has increased\"` or `\"the absolute difference has decreased\"`) in `\"ex12_comparing\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True if they are 40 and below and False if they are 40 and above\n", + "educ False True \n", + "sex \n", + "male 0.373499 0.129095\n", + "female 0.331128 0.166278\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex5_age_young': 'less than 1 year old',\n", + " 'ex5_age_old': '90 (90+ in 1980 and 1990)',\n", + " 'ex7_avg_age': 41.30384885455982,\n", + " 'ex8_avg_age': 49.75769659413359,\n", + " 'ex9_num_college': 77013,\n", + " 'ex11_share_male_w_degrees': 0.29656071211947344,\n", + " 'ex11_share_female_w_degrees': 0.3116185359301545,\n", + " 'ex12_comparing': 'the absolute difference has increased'}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Exercise 12 to create a table for people who are 40/over and people who are under 40\n", + "age_40 = acs[\"age\"] < 40\n", + "cross_age_40_tab = pd.crosstab(\n", + " gender, degree, values=age_40, aggfunc=\"sum\", normalize=\"all\"\n", + ")\n", + "\n", + "print(\"True if they are 40 and below and False if they are 40 and above\")\n", + "print(cross_age_40_tab)\n", + "\n", + "results[\"ex12_comparing\"] = \"the absolute difference has increased\"\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 13\n", + "\n", + "In words, what is causing the change noted in Exercise 12 (i.e., looking at the tables above, tell me a story about Men and Women's College attainment)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The reason why women are catching up to men when we look at younger ages over 18 is due to the how society has changed the view on a women's role and women's rights. Now it is more acceptable and more desirable for a women to get a college degree. This means now women are filling the gap we saw in the cross table of women and men over 40. There is also imporvement on women's rights and education scholarships that are making it more attainable for women to get an education." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Want More Practice?\n", + "\n", + "Calculate the educational racial gap in the United States for White Americans, Black Americans, Hispanic Americans, and other groups. \n", + "\n", + "Note that to do these calculations, you'll have to deal with the fact that unlike most Americans, the American Census Bureau treats \"Hispanic\" not as a racial category, but a linguistic one. As a result, the racial category \"White\" in `race` actually includes most Hispanic Americans. For this analysis, we wish to work with the mutually exclusive categories of \"White, non-Hispanic\", \"White, Hispanic\", \"Black (Hispanic or non-Hispanic)\", and a category for everyone else. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "assert set(results.keys()) == {\n", + " \"ex5_age_young\",\n", + " \"ex5_age_old\",\n", + " \"ex7_avg_age\",\n", + " \"ex8_avg_age\",\n", + " \"ex9_num_college\",\n", + " \"ex11_share_male_w_degrees\",\n", + " \"ex11_share_female_w_degrees\",\n", + " \"ex12_comparing\",\n", + "}" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.6 ('base')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + }, + "vscode": { + "interpreter": { + "hash": "718fed28bf9f8c7851519acf2fb923cd655120b36de3b67253eeb0428bd33d2d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Pandas_DataFrames/exercise_dataframes.ipynb b/Pandas_DataFrames/exercise_dataframes.ipynb new file mode 100644 index 0000000..457a243 --- /dev/null +++ b/Pandas_DataFrames/exercise_dataframes.ipynb @@ -0,0 +1,1101 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Estimating Labor Market Returns to Education\n", + "\n", + "In this exercise, we're going to use data from the [American Communities Survey (ACS)](https://usa.ipums.org/usa/acs.shtml) to study the relationship betwen educational attainment and wages. The ACS is a survey conducted by the United States Census Bureau (though it is not \"The Census,\" which is a counting of every person in the United States that takes place every 10 years) to measure numerous features of the US population. The data we will be working with includes about 100 variables from the 2017 ACS survey, and is a 10% sample of the ACS (which itself is a 1% sample of the US population, so we're working with about a 0.1% sample of the United States). \n", + "\n", + "This data comes from [IPUMS](https://usa.ipums.org/usa/), which provides a very useful tool for getting subsets of major survey datasets, not just from the US, but [from government statistical agencies the world over](https://international.ipums.org/international-action/sample_details).\n", + "\n", + "This is *real* data, meaning that you are being provided the data as it is provided by IPUMS. Documentation for all variables used in this data can be found [here](https://usa.ipums.org/usa-action/variables/group) (you can either search by variable name to figure out the meaning of a variable in this data, or search for something you want to see if a variable with the right name is in this data). \n", + "\n", + "Within this data is information on both the educational background and current earnings of a representative sample of Americans. We will now use this data to estimate the labor-market returns to graduating high school and college, and to learn something about the meaning of an educational degree. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gradescope Autograding\n", + "\n", + "Please follow [all standard guidance](https://www.practicaldatascience.org/html/autograder_guidelines.html) for submitting this assignment to the Gradescope autograder, including storing your solutions in a dictionary called `results` and ensuring your notebook runs from the start to completion without any errors.\n", + "\n", + "For this assignment, please name your file `exercise_dataframes.ipynb` before uploading.\n", + "\n", + "You can check that you have answers for all questions in your `results` dictionary with this code:\n", + "\n", + "```python\n", + "assert set(results.keys()) == {\n", + " \"ex2_num_obs\",\n", + " \"ex3_num_vars\",\n", + " \"ex8_updated_num_obs\",\n", + " \"ex9_updated_num_obs\",\n", + " \"ex11_grade12_income\",\n", + " \"ex12_college_income\",\n", + " \"ex12_college_income_pct\",\n", + " \"ex14_high_school_dropout\",\n", + " \"ex15_grade_9\",\n", + " \"ex15_grade_10\",\n", + " \"ex15_grade_11\",\n", + " \"ex15_grade_12\",\n", + " \"ex15_4_years_of_college\",\n", + " \"ex15_graduate\",\n", + "}\n", + "```\n", + "\n", + "### Submission Limits\n", + "\n", + "Please remember that you are **only allowed three submissions to the autograder.** Your last submission (if you submit 3 or fewer times), or your third submission (if you submit more than 3 times) will determine your grade Submissions that error out will **not** count against this total.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercises" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 1\n", + "\n", + "Data for these [exercises can be found here](https://github.com/nickeubank/MIDS_Data/tree/master/US_AmericanCommunitySurvey). \n", + "\n", + "Import `US_ACS_2017_10pct_sample.dta` into a pandas DataFrame (read it directly from a URL to help the autograder, please). \n", + "\n", + "This can be done with the command `pd.read_stata`, which will read in files created in the program Stata (and which uses the file suffix `.dta`). This is a format commonly used by social scientists." + ] + }, + { + "cell_type": "code", + "execution_count": 178, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "# loading the dataset\n", + "acs = pd.read_stata(\n", + " \"https://github.com/nickeubank/MIDS_Data/raw/master/US_AmericanCommunitySurvey/US_ACS_2017_10pct_sample.dta\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting to Know Your Data\n", + "\n", + "When you get a new dataset like this, it's good to start by trying to get a feel for its contents and organization. Toy datasets you sometimes get in classes are often very small, and easy to look at, but this is a pretty large dataset, so you can't just open it up and get a good sense of it. Here are some ways to get to know your data. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 2\n", + "\n", + "How many observations are in your data? Store the answer in your `results` dictionary with the key `\"ex2_num_obs\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 179, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ex2_num_obs': 319004}\n" + ] + } + ], + "source": [ + "results = {}\n", + "results[\"ex2_num_obs\"] = len(acs)\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 3\n", + "\n", + "How many variables are in your data? Store the answer in your `results` dictionary with the key `\"ex3_num_vars\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ex2_num_obs': 319004, 'ex3_num_vars': 104}\n" + ] + } + ], + "source": [ + "results[\"ex3_num_vars\"] = len(acs.columns)\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 4\n", + "\n", + " Let's see what variables are in this dataset. First, try to see them all using the command:\n", + "\n", + "\n", + "```python\n", + "acs.columns\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you will see, `python` doesn't like to print out all the different variables when there are this many in a dataset. \n", + "\n", + "To get everything printed out, we can loop over all the columns and print them one at a time with the command:\n", + "\n", + "```\n", + "for c in acs.columns: print(c)\n", + "```\n", + "\n", + "It's definitely a bit of a hack, but honestly a pretty useful one!" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "year\n", + "datanum\n", + "serial\n", + "cbserial\n", + "numprec\n", + "subsamp\n", + "hhwt\n", + "hhtype\n", + "cluster\n", + "adjust\n", + "cpi99\n", + "region\n", + "stateicp\n", + "statefip\n", + "countyicp\n", + "countyfip\n", + "metro\n", + "city\n", + "citypop\n", + "strata\n", + "gq\n", + "farm\n", + "ownershp\n", + "ownershpd\n", + "mortgage\n", + "mortgag2\n", + "mortamt1\n", + "mortamt2\n", + "respmode\n", + "pernum\n", + "cbpernum\n", + "perwt\n", + "slwt\n", + "famunit\n", + "sex\n", + "age\n", + "marst\n", + "birthyr\n", + "race\n", + "raced\n", + "hispan\n", + "hispand\n", + "bpl\n", + "bpld\n", + "citizen\n", + "yrnatur\n", + "yrimmig\n", + "language\n", + "languaged\n", + "speakeng\n", + "hcovany\n", + "hcovpriv\n", + "hinsemp\n", + "hinspur\n", + "hinstri\n", + "hcovpub\n", + "hinscaid\n", + "hinscare\n", + "hinsva\n", + "hinsihs\n", + "school\n", + "educ\n", + "educd\n", + "gradeatt\n", + "gradeattd\n", + "schltype\n", + "degfield\n", + "degfieldd\n", + "degfield2\n", + "degfield2d\n", + "empstat\n", + "empstatd\n", + "labforce\n", + "occ\n", + "ind\n", + "classwkr\n", + "classwkrd\n", + "looking\n", + "availble\n", + "inctot\n", + "ftotinc\n", + "incwage\n", + "incbus00\n", + "incss\n", + "incwelfr\n", + "incinvst\n", + "incretir\n", + "incsupp\n", + "incother\n", + "incearn\n", + "poverty\n", + "migrate1\n", + "migrate1d\n", + "migplac1\n", + "migcounty1\n", + "migmet131\n", + "vetdisab\n", + "diffrem\n", + "diffphys\n", + "diffmob\n", + "diffcare\n", + "diffsens\n", + "diffeye\n", + "diffhear\n" + ] + } + ], + "source": [ + "# Exercise 4:\n", + "for c in acs.columns:\n", + " print(c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 5\n", + "\n", + "That's a *lot* of variables, and definitely more than we need. In general, life is easier when working with these kinds of huge datasets if you can narrow down the number of variables a little. In this exercise, we will be looking at the relationship between education and wages, we need variables for: \n", + "\n", + "- Age\n", + "- Income\n", + "- Education\n", + "- Employment status (is the person actually working)\n", + "\n", + "These quantities of interest correspond to the following variables in our data: `age`, `inctot`, `educ`, and `empstat`. \n", + "\n", + "Subset your data to just those variables. " + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['age', 'inctot', 'educ', 'empstat'], dtype='object')" + ] + }, + "execution_count": 182, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "acs = acs[[\"age\", \"inctot\", \"educ\", \"empstat\"]]\n", + "acs.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 6 \n", + "\n", + "Now that we have a more manageable number of variables, it's often very useful to look at a handful of rows of your data. The easiest way to do this is probably the `.head()` method (which will show you the first five rows), or the `tail()` method, which will show you the last five rows. \n", + "\n", + "But to get a good sense of your data, it's often better to use the `sample()` command, which returns a random set of rows. As the first and last rows are sometimes not representative, a random set of rows can be very helpful. Try looking at a random sample of 20 rows (note: you don't have to run `.sample()` ten times to get ten rows. Look at the `.sample` help file if you're stuck. " + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ageinctoteducempstat
112403651400grade 12not in labor force
2150802622100grade 12employed
1070834020400grade 5, 6, 7, or 8employed
4996765-57005+ years of collegeunemployed
21680645940004 years of collegeemployed
165535547700grade 12employed
67231260grade 12not in labor force
2629252920100grade 11employed
115840109999999nursery school to grade 4n/a
2303246037100grade 12not in labor force
11256968126004 years of collegenot in labor force
243042331250005+ years of collegeemployed
16510129999999grade 5, 6, 7, or 8n/a
16751161186001 year of collegenot in labor force
229094109999999nursery school to grade 4n/a
6423849999999n/a or no schoolingn/a
179902601 year of collegenot in labor force
190413139999999grade 5, 6, 7, or 8n/a
10854433820001 year of collegeemployed
27556153350002 years of collegeemployed
\n", + "
" + ], + "text/plain": [ + " age inctot educ empstat\n", + "112403 65 1400 grade 12 not in labor force\n", + "215080 26 22100 grade 12 employed\n", + "107083 40 20400 grade 5, 6, 7, or 8 employed\n", + "49967 65 -5700 5+ years of college unemployed\n", + "216806 45 94000 4 years of college employed\n", + "16553 55 47700 grade 12 employed\n", + "67231 26 0 grade 12 not in labor force\n", + "262925 29 20100 grade 11 employed\n", + "115840 10 9999999 nursery school to grade 4 n/a\n", + "230324 60 37100 grade 12 not in labor force\n", + "112569 68 12600 4 years of college not in labor force\n", + "243042 33 125000 5+ years of college employed\n", + "16510 12 9999999 grade 5, 6, 7, or 8 n/a\n", + "167511 61 18600 1 year of college not in labor force\n", + "229094 10 9999999 nursery school to grade 4 n/a\n", + "64238 4 9999999 n/a or no schooling n/a\n", + "17990 26 0 1 year of college not in labor force\n", + "190413 13 9999999 grade 5, 6, 7, or 8 n/a\n", + "108544 33 82000 1 year of college employed\n", + "275561 53 35000 2 years of college employed" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "acs.sample(20)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 7\n", + "\n", + "Do you see any immediate problems? What issues do you see? (Please do answer in markdown)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### I notice a couple of issues with the data. First taking a look at the education column I see that anyone who is at the age of 14 and below are categorized with multiple grades rather than just one grade level like children ages 16-18. In the labor force column there are alot of NA values. In the incot values we have a lot of zeros with no context of what these values could mean. Why would someone older have 0 for inctot and someone who is a small child for example age 7 have an inctot value of 9,999,999" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 8 \n", + "\n", + "One problem is that many people seem to have incomes of $9,999,999. Moreover, people with those incomes seem to be very young children. \n", + "\n", + "What you are seeing is one method (a relatively old one) for representing missing data. In this case, the value 9999999 is being used as a **sentinel value** — a way to denote missing data that was used back in the day when there was no way to add a special data type for mossing data. In this case, it identifies observations where the person is too young to work, so their income value is missing. \n", + "\n", + "So let's begin by dropping anyone who has `inctot` equal to 9999999.\n", + "\n", + "After dropping, how many observations do you have? Save your answer in your `results` dictionary under the key `\"ex8_updated_num_obs\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ex2_num_obs': 319004, 'ex3_num_vars': 104, 'ex8_updated_num_obs': 265103}\n" + ] + } + ], + "source": [ + "acs = acs[acs[\"inctot\"] != 9999999]\n", + "results[\"ex8_updated_num_obs\"] = len(acs[\"inctot\"])\n", + "print(results)\n", + "# acs.loc[acs.index == 11]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 9\n", + "\n", + "OK, the other potential problem is that our data includes lots of people who are unemployed and people who are not in the labor force (this means they not only don't have a job, but also aren't looking for a job). For this analysis, we want to focus on the wages of people who are currently employed. So subset the dataset for the people for whom `empstat` is equal to \"employed\". \n", + "\n", + "Note that our decision to only look at people who are employed impacts how we should interpret the relationship we estimate between education and income. Because we are only looking at employed people, we will be estimating the relationship between education and income *for people who are employed*. That means that if education affects the *likelihood* someone is employed, we won't capture that in this analysis.\n", + "\n", + "(You might also want to run `.sample()` after this just to make sure you were successful in your subsetting).\n", + "\n", + "After this subsetting, how many observations do you have? Save your answer in your `results` dictionary under the key `\"ex9_updated_num_obs\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " age inctot educ empstat\n", + "1 17 6000 grade 11 employed\n", + "2 63 6150 4 years of college employed\n", + "5 50 50000 grade 12 employed\n", + "9 17 2000 grade 12 employed\n", + "10 47 18000 n/a or no schooling employed\n", + "148758\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex2_num_obs': 319004,\n", + " 'ex3_num_vars': 104,\n", + " 'ex8_updated_num_obs': 265103,\n", + " 'ex9_updated_num_obs': 148758}" + ] + }, + "execution_count": 185, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercise 9\n", + "acs = acs[acs[\"empstat\"] == \"employed\"]\n", + "acs_employed = acs[acs[\"empstat\"] == \"employed\"]\n", + "print(acs_employed.head())\n", + "print(acs.shape[0])\n", + "acs.sample(20)\n", + "results[\"ex9_updated_num_obs\"] = len(acs[\"empstat\"])\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 10\n", + "\n", + "Now let's turn to education. The `educ` variable seems to have a lot of discrete values. Let's see what values exist, and their distribution, using the `value_counts()` method. This is an *extremely* useful tool you'll use a lot! Try the following code (modified for the name of your dataset, of course):\n", + "\n", + "```python\n", + "acs[\"educ\"].value_counts()\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "educ\n", + "grade 12 47815\n", + "4 years of college 33174\n", + "1 year of college 22899\n", + "5+ years of college 20995\n", + "2 years of college 14077\n", + "grade 11 2747\n", + "grade 5, 6, 7, or 8 2092\n", + "grade 10 1910\n", + "n/a or no schooling 1291\n", + "grade 9 1290\n", + "nursery school to grade 4 468\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 186, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "acs[\"educ\"].value_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 11\n", + "\n", + "There are a lot of values in here, so let's just check a couple. What is the average value of `inctot` for people whose highest grade level is \"grade 12\" (in the US, that is someone who has graduated high school)?\n", + "\n", + "Save your answer in your `results` dictionary under the key `\"ex11_grade12_income\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " age inctot educ empstat\n", + "1 17 6000 grade 11 employed\n", + "2 63 6150 4 years of college employed\n", + "5 50 50000 grade 12 employed\n", + "9 17 2000 grade 12 employed\n", + "10 47 18000 n/a or no schooling employed\n", + "... .. ... ... ...\n", + "318995 67 125000 grade 12 employed\n", + "318999 33 22130 4 years of college employed\n", + "319001 20 5000 grade 12 employed\n", + "319002 47 240000 5+ years of college employed\n", + "319003 33 48000 5+ years of college employed\n", + "\n", + "[148758 rows x 4 columns]\n", + " age inctot educ empstat\n", + "5 50 50000 grade 12 employed\n", + "9 17 2000 grade 12 employed\n", + "22 28 58000 grade 12 employed\n", + "23 48 52000 grade 12 employed\n", + "39 20 43000 grade 12 employed\n", + "... .. ... ... ...\n", + "318973 50 32000 grade 12 employed\n", + "318983 64 45600 grade 12 employed\n", + "318987 36 50000 grade 12 employed\n", + "318995 67 125000 grade 12 employed\n", + "319001 20 5000 grade 12 employed\n", + "\n", + "[47815 rows x 4 columns]\n", + "{'ex2_num_obs': 319004, 'ex3_num_vars': 104, 'ex8_updated_num_obs': 265103, 'ex9_updated_num_obs': 148758, 'ex11_grade12_income': 38957.76068179442}\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "print(acs_employed)\n", + "acs_grade_12 = acs[acs[\"educ\"] == \"grade 12\"]\n", + "print(acs_grade_12)\n", + "mean_values = np.mean([acs_grade_12[\"inctot\"]])\n", + "results[\"ex11_grade12_income\"] = mean_values\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 12\n", + "\n", + "What is the average income of someone who has completed an undergraduate degree but not done any postgraduate education (\"4 years of college\")? \n", + "\n", + "Save your answer in your `results` dictionary under the key `\"ex12_college_income\"`.\n", + "\n", + "In percentage terms, how much does an employed college graduate earn as compared to someone who is only a high school graduate? Use the reference category that gives an answer above 100.\n", + "\n", + "Store your answer in `\"ex12_college_income_pct\"`. Put your answer in percentage terms (so 100 implies they earn the same amount).\n", + "\n", + "*Make sure to interpret your result in words when you print it out!*" + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "75485.05293301983\n", + "38957.76068179442\n", + "1.937612727527617\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex2_num_obs': 319004,\n", + " 'ex3_num_vars': 104,\n", + " 'ex8_updated_num_obs': 265103,\n", + " 'ex9_updated_num_obs': 148758,\n", + " 'ex11_grade12_income': 38957.76068179442,\n", + " 'ex12_college_income': 75485.05293301983,\n", + " 'ex12_college_income_pct': 193.7612727527617}" + ] + }, + "execution_count": 188, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercise 12\n", + "acs_4_year = acs[acs[\"educ\"] == \"4 years of college\"]\n", + "mean_4_year = np.mean(acs_4_year[\"inctot\"])\n", + "# print(acs_4_year)\n", + "print(mean_4_year)\n", + "print(mean_values)\n", + "results[\"ex12_college_income\"] = mean_4_year\n", + "\n", + "# percentage terms\n", + "percent = mean_4_year / mean_values\n", + "print(percent)\n", + "results[\"ex12_college_income_pct\"] = percent * 100\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Exercise 13\n", + "What does that suggest is the value of getting a college degree after graduating high school?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The value being 193.76 means that the comparison between high school and college graduates is almost double. Meaning you earn almost double the income if you were to get an undergraduate degree. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 14\n", + "\n", + "What is the average income for someone who has not finished high school? What does that suggest is the value of a high school diploma? (Treat `n/a or no schooling` as having no formal schooling, not as missing).\n", + "\n", + "**Hint:** You may find the [.isin()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.isin.html) method to be really helpful here.\n", + "\n", + "Save your answer in your `results` dictionary under the key `\"ex14_high_school_dropout\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.4854374262522865\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex2_num_obs': 319004,\n", + " 'ex3_num_vars': 104,\n", + " 'ex8_updated_num_obs': 265103,\n", + " 'ex9_updated_num_obs': 148758,\n", + " 'ex11_grade12_income': 38957.76068179442,\n", + " 'ex12_college_income': 75485.05293301983,\n", + " 'ex12_college_income_pct': 193.7612727527617,\n", + " 'ex14_high_school_dropout': 26226.45692998571}" + ] + }, + "execution_count": 189, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercise 14\n", + "high_school_dropout = [\n", + " \"grade 11\",\n", + " \"grade 5, 6, 7, or 8\",\n", + " \"grade 10\",\n", + " \"n/a or no schooling\",\n", + " \"grade 9\",\n", + " \"nursery school to grade 4\",\n", + "]\n", + "\n", + "results[\"ex14_high_school_dropout\"] = acs.loc[\n", + " acs[\"educ\"].isin(high_school_dropout), \"inctot\"\n", + "].mean()\n", + "\n", + "print(results[\"ex11_grade12_income\"] / results[\"ex14_high_school_dropout\"])\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "EXERCISE 14:\n", + "The average income for someone who hasn't finished highschool is : 26,226\n", + "The value of a highschool diploma is 75,485 so there is a huge significance to having a diploma compared to not having it." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 15 \n", + "\n", + "Complete the following table (storing values under the provided keys where listed):\n", + "\n", + "- Average income for someone who only completed 9th grade (`ex15_grade_9`): _________\n", + "- Average income for someone who only completed 10th grade (`ex15_grade_10`): _________\n", + "- Average income for someone who only completed 11th grade (`ex15_grade_11`): _________\n", + "- Average income for someone who finished high school (12th grade) but never started college (`ex15_grade_12`): _________\n", + "- Average income for someone who completed 4 year of college (in the US, this corresponds to getting an undergraduate degree), but has no post-graduate education (no more than 4 years, `ex15_4_years_of_college`): _________\n", + "- Average income for someone who has some graduate education (more than 4 years, `ex15_graduate`): _________" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ex2_num_obs': 319004,\n", + " 'ex3_num_vars': 104,\n", + " 'ex8_updated_num_obs': 265103,\n", + " 'ex9_updated_num_obs': 148758,\n", + " 'ex11_grade12_income': 38957.76068179442,\n", + " 'ex12_college_income': 75485.05293301983,\n", + " 'ex12_college_income_pct': 193.7612727527617,\n", + " 'ex14_high_school_dropout': 26226.45692998571,\n", + " 'ex15_grade_9': 27171.907751937986,\n", + " 'ex15_grade_10': 23018.795811518325,\n", + " 'ex15_grade_11': 21541.68693119767,\n", + " 'ex15_grade_12': 38957.76068179442,\n", + " 'ex15_4_years_of_college': 75485.05293301983,\n", + " 'ex15_graduate': 110013.2213384139}" + ] + }, + "execution_count": 190, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Exercise 15\n", + "# ex15_grade_9\n", + "acs_9 = acs[acs[\"educ\"] == \"grade 9\"]\n", + "mean_9_grade = np.mean(acs_9[\"inctot\"])\n", + "results[\"ex15_grade_9\"] = mean_9_grade\n", + "# ex15_grade_10\n", + "acs_10 = acs[acs[\"educ\"] == \"grade 10\"]\n", + "mean_10_grade = np.mean(acs_10[\"inctot\"])\n", + "results[\"ex15_grade_10\"] = mean_10_grade\n", + "# ex15_grade_11\n", + "acs_11 = acs[acs[\"educ\"] == \"grade 11\"]\n", + "mean_11_grade = np.mean(acs_11[\"inctot\"])\n", + "results[\"ex15_grade_11\"] = mean_11_grade\n", + "# ex15_grade_12\n", + "acs_12 = acs[acs[\"educ\"] == \"grade 12\"]\n", + "mean_12_grade = np.mean(acs_12[\"inctot\"])\n", + "results[\"ex15_grade_12\"] = mean_12_grade\n", + "# ex15_4_years_of_college\n", + "acs_undergrad = acs[acs[\"educ\"] == \"4 years of college\"]\n", + "mean_undergrad = np.mean(acs_undergrad[\"inctot\"])\n", + "results[\"ex15_4_years_of_college\"] = mean_undergrad\n", + "# ex15_graduate\n", + "acs_grad = acs[acs[\"educ\"] == \"5+ years of college\"]\n", + "mean_grad = np.mean(acs_grad[\"inctot\"])\n", + "results[\"ex15_graduate\"] = mean_grad\n", + "\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": {}, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click here for more info. View Jupyter log for further details." + ] + } + ], + "source": [ + "assert set(results.keys()) == {\n", + " \"ex2_num_obs\",\n", + " \"ex3_num_vars\",\n", + " \"ex8_updated_num_obs\",\n", + " \"ex9_updated_num_obs\",\n", + " \"ex11_grade12_income\",\n", + " \"ex12_college_income\",\n", + " \"ex12_college_income_pct\",\n", + " \"ex14_high_school_dropout\",\n", + " \"ex15_grade_9\",\n", + " \"ex15_grade_10\",\n", + " \"ex15_grade_11\",\n", + " \"ex15_grade_12\",\n", + " \"ex15_4_years_of_college\",\n", + " \"ex15_graduate\",\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 16 \n", + "\n", + "Why do you think there is no benefit from moving from grade 9 to grade 10, or grade 10 to grade 11, but there is a huge benefit to moving from grade 11 to graduating high school (grade 12)?\n", + "\n", + "(Think carefully before reading ahead!)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### When you are still under the grade 12 it means you haven't completed your full four years of highschool. The quality of education of just completing the first few years of education is not as valuable as highschool diploma or a undergraduate diploma. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Take-aways\n", + "\n", + "Congratulations! You just discovered \"the sheepskin effect!\": people with degrees tend to earn substantially more than people who have *almost* as much education, but don't have an actual degree. \n", + "\n", + "In economics, this is viewed as evidence that the reason employers pay people with high school degrees more than those without degree is *not* that they think those who graduated high school have learned specific, useful skills. If that were the case, we would expect employee earnings to rise with every year of high school, since in each year of high school we learn more. \n", + "\n", + "Instead, this suggests employees pay high school graduates more because they think *the kind of people* who can finish high school are the *kind of people* who are likely to succeed at their jobs. Finishing high school, in other words, isn't about accumulating specific knowledge; it's about showing that you *are the kind of person* who can rise to the challenge of finishing high school, also suggesting you are also the kind of person who can succeed as an employee. \n", + "\n", + "(Obviously, this does not tell us whether that is an *accurate* inference, just that that seems to be how employeers think.) \n", + "\n", + "In other words, in the eyes of employers, a high school degree is a *signal* about the kind of person you are, not certification that you've learned a specific set of skills (an idea that earned [Michael Spence](https://en.wikipedia.org/wiki/Michael_Spence) a Nobel Prize in Economics). " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.2 ('ds')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + }, + "vscode": { + "interpreter": { + "hash": "b9e56a7b23b1fac2eea1a993b805ed5c611aea1439c1f46315b23590ab6d3ba0" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Pandas_DataFrames/exercise_merging.ipynb b/Pandas_DataFrames/exercise_merging.ipynb new file mode 100644 index 0000000..bf178c8 --- /dev/null +++ b/Pandas_DataFrames/exercise_merging.ipynb @@ -0,0 +1,3146 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Merging Data to Understand the Relationship between Drug Legalization and Violent Crime\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In recent years, many US states have decided to legalize the use of marijuana. \n", + "\n", + "When these ideas were first proposed, there were many theories about the relationship between crime and the \"War on Drugs\" (the term given to US efforts to arrest drug users and dealers over the past several decades). \n", + "\n", + "In this exercise, we're going to test a few of those theories using drug arrest data from the state of California. \n", + "\n", + "Though California has passed a number of laws lessening penalities for marijuana possession over the years, arguably the biggest changes were in 2010, when the state changed the penalty for possessing a small amount of marijuana from a criminal crime to a \"civil\" penality (meaning those found guilty only had to pay a fine, not go to jail), though possessing, selling, or producing larger quantities remained illegal. Then in 2016, the state fully legalized marijuana for recreational use, not only making possession of small amounts legal, but also creating a regulatory system for producing marijuana for sale. \n", + "\n", + "Proponents of drug legalization have long argued that the war on drugs contributes to violent crime by creating an opportunity for drug dealers and organized crime to sell and distribute drugs, a business which tends to generate violence when gangs battle over territory. According to this theory, with drug legalization, we should see violent crime decrease after legalization in places where drug arrests had previously been common. \n", + "\n", + "**To be clear,** this is far from the only argument for drug legalization! It is simply the argument we are well positioned to analyze today. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Gradescope Autograding\n", + "\n", + "Please follow [all standard guidance](https://www.practicaldatascience.org/html/autograder_guidelines.html) for submitting this assignment to the Gradescope autograder, including storing your solutions in a dictionary called `results` and ensuring your notebook runs from the start to completion without any errors.\n", + "\n", + "For this assignment, please name your file `exercise_merging.ipynb` before uploading.\n", + "\n", + "You can check that you have answers for all questions in your `results` dictionary with this code:\n", + "\n", + "```python\n", + "assert set(results.keys()) == {\n", + " \"ex6_merge_type\",\n", + " \"ex10_merged_successfully\",\n", + " \"ex16_num_obs\",\n", + " \"ex17_drug_change\",\n", + " \"ex18_violent_change\",\n", + " \"ex21_diffindiff\",\n", + " \"ex23_diffindiff_proportionate\",\n", + "}\n", + "```\n", + "\n", + "\n", + "### Submission Limits\n", + "\n", + "Please remember that you are **only allowed three submissions to the autograder.** Your last submission (if you submit 3 or fewer times), or your third submission (if you submit more than 3 times) will determine your grade Submissions that error out will **not** count against this total." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pre-Legalization Analysis\n", + "\n", + "### Exercise 1\n", + "We will begin by examining [county-level data on arrests from California in 2009](https://github.com/nickeubank/practicaldatascience/tree/master/Example_Data/ca). This data is derived directly from data hosted by the [Office of the California State Attorney General](https://openjustice.doj.ca.gov/data), but please follow the github link above and download and import the file `ca_arrests_2009.csv` (don't try and get it directly from the State Attorney General's office). " + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
COUNTYVIOLENTPROPERTYF_DRUGOFFF_SEXOFFF_ALLOTHERF_TOTALM_TOTALS_TOTAL
1682Alameda County43184640574926035021846937247431
1683Alpine County8421116830
1684Amador County1005910151994648012
1685Butte County64160254234429224890261
1686Calaveras County2118312314705019683
\n", + "
" + ], + "text/plain": [ + " COUNTY VIOLENT PROPERTY F_DRUGOFF F_SEXOFF F_ALLOTHER \\\n", + "1682 Alameda County 4318 4640 5749 260 3502 \n", + "1683 Alpine County 8 4 2 1 1 \n", + "1684 Amador County 100 59 101 5 199 \n", + "1685 Butte County 641 602 542 34 429 \n", + "1686 Calaveras County 211 83 123 14 70 \n", + "\n", + " F_TOTAL M_TOTAL S_TOTAL \n", + "1682 18469 37247 431 \n", + "1683 16 83 0 \n", + "1684 464 801 2 \n", + "1685 2248 9026 1 \n", + "1686 501 968 3 " + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Loading the arrest 2009 California dataset and loading necessary libraries. Initializing the results dictionary.\n", + "results = {}\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "arrest_df = pd.read_csv(\n", + " \"https://github.com/nickeubank/practicaldatascience/raw/master/Example_Data/ca/ca_arrests_2009.csv\",\n", + " index_col=0,\n", + ")\n", + "\n", + "arrest_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 2\n", + "Use your data exploration skills to get a feel for this data. If you need to, you can find the [original codebook here](https://github.com/nickeubank/practicaldatascience/blob/master/Example_Data/ca/arrests_codebook.pdf) (This data is a version of that data, but collapsed to one observation per county.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 3\n", + "Figuring out what county has the most violent arrests isn't very meaningful if we don't normalize for size. A county with 10 people and 10 arrests for violent crimes is obviously worse than a county with 1,000,000 people an 11 arrests for violent crime. \n", + "\n", + "To address this, also import `nhgis_county_populations.csv` from [the directory we're working from](https://github.com/nickeubank/practicaldatascience/tree/master/Example_Data/ca)." + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " YEAR STATE COUNTY total_population\n", + "0 2005-2009 Alabama Autauga County 49584\n", + "1 2005-2009 Alabama Baldwin County 171997\n", + "2 2005-2009 Alabama Barbour County 29663\n", + "3 2005-2009 Alabama Bibb County 21464\n", + "4 2005-2009 Alabama Blount County 56804\n", + " YEAR STATE COUNTY total_population\n", + "186 2005-2009 California Alameda County 1457095\n", + "187 2005-2009 California Alpine County 1153\n", + "188 2005-2009 California Amador County 38039\n", + "189 2005-2009 California Butte County 217917\n", + "190 2005-2009 California Calaveras County 46548\n" + ] + } + ], + "source": [ + "nhgis_df = pd.read_csv(\n", + " \"https://github.com/nickeubank/practicaldatascience/raw/master/Example_Data/ca/nhgis_county_populations.csv\",\n", + " index_col=0,\n", + ")\n", + "\n", + "print(nhgis_df.head())\n", + "\n", + "nhgis_df_cali = nhgis_df.loc[nhgis_df[\"STATE\"] == \"California\", :]\n", + "\n", + "nhgis_df_cali_year = nhgis_df_cali[nhgis_df_cali[\"YEAR\"] == \"2005-2009\"]\n", + "\n", + "print(nhgis_df_cali_year.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 4\n", + "Use your data exploration skills to get used to this data, and figure out how it relates to your 2009 arrest data. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### These are the desciptions for each variable in our data\n", + "- F_drugoff: is the sum of arrest for felony drug offenses(narcotics, marijuana, etc.)\n", + "- F_sexoff : sum of arrest for felony sex offense(lewd, unlawful sexual intercourse)\n", + "- F_allother: sum of arrest for all other felony offenses\n", + "- M_Total: Sum of all misdemeanor arrests\n", + "- S_Total: Sum of all arrests for status offenses\n", + "- Property: Sum of arrests for felony property offenses(burglary, theft, motor vehicle theft,etc)\n", + "- Violent: Sum of arrests for felony violent offenses(homicide, assault, kidnapping)\n", + "- County: County of reporting agency" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### How does nhgis_county_populations.csv data related to 2009 arrest data\n", + "In our nhgis_county population data, we can see information for all 50 states in the United States and their total population size. We can see in the 2009 arrest data, we are only looking at arrests in California. We will need to only select from nhgis_county_populations data the state California and the Total population from California. Once, this information is extracted we can merge it with the 2009 arrest data. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 5\n", + "\n", + "Once you feel like you have a good sense of the relation between our arrest and population data, merge the two datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
COUNTYVIOLENTPROPERTYF_DRUGOFFF_SEXOFFF_ALLOTHERF_TOTALM_TOTALS_TOTALYEARSTATEtotal_population
0Alameda County431846405749260350218469372474312005-2009California1457095.0
1Alpine County84211168302005-2009California1153.0
2Amador County10059101519946480122005-2009California38039.0
3Butte County641602542344292248902612005-2009California217917.0
4Calaveras County21183123147050196832005-2009California46548.0
\n", + "
" + ], + "text/plain": [ + " COUNTY VIOLENT PROPERTY F_DRUGOFF F_SEXOFF F_ALLOTHER \\\n", + "0 Alameda County 4318 4640 5749 260 3502 \n", + "1 Alpine County 8 4 2 1 1 \n", + "2 Amador County 100 59 101 5 199 \n", + "3 Butte County 641 602 542 34 429 \n", + "4 Calaveras County 211 83 123 14 70 \n", + "\n", + " F_TOTAL M_TOTAL S_TOTAL YEAR STATE total_population \n", + "0 18469 37247 431 2005-2009 California 1457095.0 \n", + "1 16 83 0 2005-2009 California 1153.0 \n", + "2 464 801 2 2005-2009 California 38039.0 \n", + "3 2248 9026 1 2005-2009 California 217917.0 \n", + "4 501 968 3 2005-2009 California 46548.0 " + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged_df = pd.merge(arrest_df, nhgis_df_cali_year, how=\"left\", on=\"COUNTY\")\n", + "\n", + "merged_df.reset_index(drop=True, inplace=True)\n", + "\n", + "merged_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 6\n", + "\n", + "When merging data, the result will only be meaningful if your understanding of how the data sets you are merging relate to one another are correct. In some ways, this is obvious — for example, if the variable(s) that you are using to merge observations in the two datasets or to actually identifying observations that should be linked, then obviously merging using those variables will create a meaningless new dataset.\n", + "\n", + "But other properties that matter are often more subtle. For example, it's important to figure out whether your merge is a `1-to-1` merge (meaning there is only one observation of the variable you're merging on in both datasets), a `1-to-many` merge (meaning there is only one observation of the variable you're merging on in the first dataset, but multiple observations in the second), or a `many-to-many` merge (something you almost never do). \n", + "\n", + "Being correct in your assumptions about these things is *very* important. If you think there's only one observation per value of your merging variable in each dataset, but there are in fact 2, you'll end up with two observations for each value after the merge. Moreover, not only is the structure of your data now a mess, but the fact you were wrong means you didn't understand something about your data. \n", + "\n", + "So before running a merge, it is critical to answer the following questions:\n", + "\n", + "a) What variable(s) do you think will be consistent across these two datasets you can use for merging? \n", + "\n", + "\n", + "b) Do you think there will be exactly 1 observation for each value of this variable(s) in your arrest data?\n", + "\n", + "\n", + "c) Do you think there will be exactly 1 observation for each value of this variable(s) in your population data?\n", + "\n", + "\n", + "So in markdown, answer these three questions for this data.\n", + "\n", + "\n", + "\n", + "\n", + "Then also specify the type of merge you were hoping to accomplish as one of the following strings — `\"one-to-one\"`, `\"one-to-many\"`, `\"many-to-one\"`, or `\"many-to-many\"` — in your `results` dictionary under the key `\"ex6_validate_keyword\"`. Assume that the first dataset we are talking about (e.g., the `one` in `one-to-many`, if that were your selection) is your arrests data and the second dataset (e.g., the `many` in `one-to-many`, if that were your selection)." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "# Exercise 6 : Deciding the merge method\n", + "results[\"ex6_validate_keyword\"] = \"one=to-many\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Exercise 6\n", + "a) What variable(s) do you think will be consistent across these two datasets you can use for merging? \n", + " - Counties from the state of California are the only consist variables.\n", + "\n", + "b) Do you think there will be exactly 1 observation for each value of this variable(s) in your arrest data?\n", + " - Yes, I think for each county there is only one set of observations for each column within the arrest data. \n", + "\n", + "c) Do you think there will be exactly 1 observation for each value of this variable(s) in your population data?\n", + "- Within, the population data there are 2 observations the county variable. This is because the population data looks at two sets of time frames (2005-2009 and 2013-2017).\n", + "\n", + "So in markdown, answer these three questions for this data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Merge Validation\n", + "\n", + "Because of the importance of answering these questions accurately, `pandas` provides a utility for *validating* these assumptions when you do a merge: the `validate` keyword! Validate will accept `\"1:1\"`, `\"1:m\"`, `\"m:1\"`, and `\"m:m\"`. It will then check to make sure your merge matches the type of merge you think it is. I *highly* recommend always using this option (...and not just because I'm the one who added `validate` to pandas).\n", + "\n", + "*Note:* `validate` only actually tests if observations are unique when a `1` is specified; if you do a `1:1` merge but pass `validate=\"1:m\"`, `validate=\"m:1\"`, or `validate=\"m:m\"`, you won't get an error — a one-to-many merge that turns out to be a one-to-one isn't nearly as dangerous as a one-to-one merge that turns out to be one-to-many.\n", + "\n", + "### Exercise 7\n", + "\n", + "Repeat the merge you conducted above, but this time use the `validate` to make sure your assumptions about the data were correct. If you find that you made a mistake, revise your data until the merge you think is correct actually takes place.\n", + "\n", + "To aid the autograder, please make sure to comment out any code that generates an error.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "validation_df = pd.merge(arrest_df, nhgis_df, on=\"COUNTY\", validate=\"1:m\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 8\n", + "\n", + "Were your assumptions about the data correct? If not, what had you (implicitly) assumed when you did your merge in Exercise 5 that turned out not to be correct?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#Exercise 8: Were your assumptions correct?\n", + "My assumption about the data was correct because I throughly looked at the data and checked different years as conditions. I implicity though I could merge the data and didn't realize that the arrest data was just for 2009 and population has two time periods. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Merge Diagnostics\n", + "\n", + "### Exercise 9\n", + "\n", + "Checking whether you are doing a 1-to-1, many-to-1, 1-to-many, or many-to-many merge is only the first type of diagnostic test you should run on *every* merge you conduct. The second test is to see if you data merged successfully!\n", + "\n", + "To help with this, the `merge` function in pandas offers a keyword option called `indicator`. If you set `indicator` to `True`, then pandas will add a column to the result of your merge called `_merge`. This variable will tell you, for each observation in your merged data, whether: \n", + "\n", + "- that observation came from a successful merge of both datasets, \n", + "- if that observation was in the left dataset (the first one you passed) but not the right dataset (the second one you passed), or \n", + "- if that observation was in the right dataset but not the left. \n", + "\n", + "This allows you to quickly identify failed merges!\n", + "\n", + "For example, suppose you had the following data:" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "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", + "
keydf1_var
0key11
1key22
\n", + "
" + ], + "text/plain": [ + " key df1_var\n", + "0 key1 1\n", + "1 key2 2" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "pd.set_option(\"mode.copy_on_write\", True)\n", + "\n", + "df1 = pd.DataFrame({\"key\": [\"key1\", \"key2\"], \"df1_var\": [1, 2]})\n", + "df1" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "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", + "
keydf2_var
0key1a
1Key2b
\n", + "
" + ], + "text/plain": [ + " key df2_var\n", + "0 key1 a\n", + "1 Key2 b" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2 = pd.DataFrame({\"key\": [\"key1\", \"Key2\"], \"df2_var\": [\"a\", \"b\"]})\n", + "df2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now suppose you *expected* that all observations should merge when you merge these datasets (because you hadn't noticed the typo in `df2` where `key2` has a capital `Key2`. If you just run a merge, it works without any problems:" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [], + "source": [ + "new_data = pd.merge(df1, df2, on=\"key\", how=\"outer\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And so you might carry on in life unaware your data is now corrupted: instead of two merged rows, you now have 3, only 1 of which merged correctly!" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "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", + "
keydf1_vardf2_var
0key11.0a
1key22.0NaN
2Key2NaNb
\n", + "
" + ], + "text/plain": [ + " key df1_var df2_var\n", + "0 key1 1.0 a\n", + "1 key2 2.0 NaN\n", + "2 Key2 NaN b" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When what you really wanted was: " + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "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", + "
keydf1_vardf2_var
0key11a
1key22b
\n", + "
" + ], + "text/plain": [ + " key df1_var df2_var\n", + "0 key1 1 a\n", + "1 key2 2 b" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2_correct = df2.copy()\n", + "df2_correct.loc[df2.key == \"Key2\", \"key\"] = \"key2\"\n", + "pd.merge(df1, df2_correct, on=\"key\", how=\"outer\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(in a small dataset, you'd quickly see you have 1 row instead of 2, but if you have millions of rows, a couple missing won't be evident). \n", + "\n", + "But now suppose we use the `indicator` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "_merge\n", + "left_only 1\n", + "right_only 1\n", + "both 1\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_data = pd.merge(df1, df2, on=\"key\", how=\"outer\", indicator=True)\n", + "new_data._merge.value_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We could immediately see that only one observation merged correct, and that one row from each dataset failed to merge!\n", + "\n", + "Moreover, we can look at the failed merges:" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "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", + "
keydf1_vardf2_var_merge
1key22.0NaNleft_only
2Key2NaNbright_only
\n", + "
" + ], + "text/plain": [ + " key df1_var df2_var _merge\n", + "1 key2 2.0 NaN left_only\n", + "2 Key2 NaN b right_only" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_data[new_data._merge != \"both\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Allowing us to easily diagnose the problem. \n", + "\n", + "**Note:** The `pandas` merge function allows users to decide whether to keep only observations that merge (`how='inner'`), all the observations from the first dataset pasted to merge (`how='left'`), all the observations from the second dataset passed to merge (`how='right'`), or all observations (`how='outer'`):\n", + "\n", + "![join_types](https://nickeubank.github.io/practicaldatascience_book/_images/3.4.15_merge_types.png)\n", + "\n", + "But one danger to using the more restrictive options (like the default, `how='inner'`) is that the merge throws away all the observations that fail to merge, and while this may be the *eventual* goal of your analysis, it means that you don't get to see all the observations that failed to merge that maybe you thought *would* merge. In other words, it throws away the errors so you can't look at them! \n", + "\n", + "So to use `indicator` effectively, you have to:\n", + "\n", + "- Not use `how=\"inner\"`, and\n", + "- Check the values of `_merge` after your merge. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 10\n", + "\n", + "Now repeat your previous merge using *both* the `validate` keyword *and* the `indicator` keyword with `how='outer'`. \n", + "\n", + "How many observations successfully merged (were in both datasets)? Store the result in `results` under the key `\"ex10_merged_successfully\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_merge\n", + "right_only 6275\n", + "both 166\n", + "left_only 2\n", + "Name: count, dtype: int64\n", + " COUNTY VIOLENT PROPERTY F_DRUGOFF F_SEXOFF \\\n", + "18 Del Norte County 144.0 104.0 79.0 13.0 \n", + "33 Inyo County 81.0 44.0 39.0 3.0 \n", + "168 Autauga County NaN NaN NaN NaN \n", + "169 Autauga County NaN NaN NaN NaN \n", + "170 Baldwin County NaN NaN NaN NaN \n", + "... ... ... ... ... ... \n", + "6438 Yauco Municipio NaN NaN NaN NaN \n", + "6439 Kusilvak Census Area NaN NaN NaN NaN \n", + "6440 Petersburg Borough NaN NaN NaN NaN \n", + "6441 LaSalle Parish NaN NaN NaN NaN \n", + "6442 Oglala Lakota County NaN NaN NaN NaN \n", + "\n", + " F_ALLOTHER F_TOTAL M_TOTAL S_TOTAL YEAR STATE \\\n", + "18 97.0 437.0 1268.0 5.0 NaN NaN \n", + "33 38.0 205.0 851.0 1.0 NaN NaN \n", + "168 NaN NaN NaN NaN 2005-2009 Alabama \n", + "169 NaN NaN NaN NaN 2013-2017 Alabama \n", + "170 NaN NaN NaN NaN 2005-2009 Alabama \n", + "... ... ... ... ... ... ... \n", + "6438 NaN NaN NaN NaN 2013-2017 Puerto Rico \n", + "6439 NaN NaN NaN NaN 2013-2017 Alaska \n", + "6440 NaN NaN NaN NaN 2013-2017 Alaska \n", + "6441 NaN NaN NaN NaN 2013-2017 Louisiana \n", + "6442 NaN NaN NaN NaN 2013-2017 South Dakota \n", + "\n", + " total_population _merge \n", + "18 NaN left_only \n", + "33 NaN left_only \n", + "168 49584.0 right_only \n", + "169 55036.0 right_only \n", + "170 171997.0 right_only \n", + "... ... ... \n", + "6438 37585.0 right_only \n", + "6439 8129.0 right_only \n", + "6440 3275.0 right_only \n", + "6441 14930.0 right_only \n", + "6442 14291.0 right_only \n", + "\n", + "[6277 rows x 13 columns]\n" + ] + }, + { + "data": { + "text/plain": [ + "{'ex6_validate_keyword': 'one=to-many', 'ex10_merged_successfully': 166}" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged_df_validate_indi = pd.merge(\n", + " arrest_df, nhgis_df, how=\"outer\", on=\"COUNTY\", validate=\"1:m\", indicator=True\n", + ")\n", + "print(merged_df_validate_indi._merge.value_counts())\n", + "print((merged_df_validate_indi[merged_df_validate_indi._merge != \"both\"]))\n", + "results[\"ex10_merged_successfully\"] = 166\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 11\n", + "\n", + "You *should* be able to get to the point that all counties in our arrest data merge with population data. If that did not happen, can you figure out why that did not happen? Can you fix the data so that all arrest data merges with population data?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I was able to fix the data so that the arrest data merges with the population data. This is because I only merged the counties that are in the Califonia area which match with the population and only the 2005-2009 time frame in the population data. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing Arrest Rates\n", + "\n", + "### Exercise 12\n", + "\n", + "Now that we have arrest counts and population data, we can calculate arrest *rates*. For each county, create a new variable called `violent_arrest_rate_2009` that is the number of violent arrests for 2009 divided by the population of the county from 2005-2009, and a similar new variable called `drug_arrest_rate_2009` for drug arrests divided by population." + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.002963430661693301, 0.006938421509106678, 0.0026288808854070824, 0.0029414868963871564, 0.0045329552290109135, 0.0027617732488929097, 0.0029303711901974357, nan, 0.0032397224069432365, 0.004913836654504631, 0.003728801405471299, 0.0038991341286636746, 0.0037429546221427945, nan, 0.005493288328490959, 0.0026585591972514587, 0.0053894619803570324, 0.0029336586499360984, 0.0036093955266550473, 0.003128582676077738, 0.002026662775474138, 0.003582423733557235, 0.004823898640009299, 0.004825892212108077, 0.005129884304736957, 0.00402321083172147, 0.00342041183240229, 0.002776663917744169, 0.0021738458526936112, 0.0020642757348334523, 0.0021441972661484857, 0.004866180048661801, 0.0028605748454061867, 0.003854304106193275, 0.0038172121566335477, 0.004265504232030544, 0.0032843041924417488, 0.004551777250144556, 0.004849234398720512, 0.002323106325028896, 0.0020601636163137603, 0.0032137304893974255, 0.002491647285902793, 0.002995250558874772, 0.002586586541945626, 0.004320987654320987, 0.00425637329970273, 0.003933956763379512, 0.0029275038882593954, 0.004376787782209773, 0.004695197892671744, 0.003894325176152209, 0.004668869415313892, 0.005243827153079877, 0.0028693889994799234, 0.002871339988110759, 0.003031496471027185, 0.004992525315206047]\n" + ] + } + ], + "source": [ + "violent_arrest_rate_2009 = []\n", + "drug_arrest_rate_2009 = []\n", + "for index, row in merged_df.iterrows():\n", + " drug_arrest_rate_2009.append(row[\"F_DRUGOFF\"] / row[\"total_population\"])\n", + " violent_arrest_rate_2009.append(row[\"VIOLENT\"] / row[\"total_population\"])\n", + "\n", + "print(violent_arrest_rate_2009)\n", + "merged_df[\"drug_arrest_rate_2009\"] = drug_arrest_rate_2009\n", + "merged_df[\"violent_arrest_rate_2009\"] = violent_arrest_rate_2009" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 13\n", + "\n", + "Make a scatter plot that shows the relationship between each county's violent arrest rate and it's drug arrest rate. Since we haven't done a lot with plotting yet, feel free to plot in whatever manner feels most comfortable. The easiest, if you're unsure, is just to use the `pandas` inbuilt `.plot()` method. Just specify the `x` keyword with your x-axis variable, the `y` keyword with your y-axis variable, and use `kind=\"scatter\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Violent Arrest Rate vs Drug Arrest Rate')" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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Iv2ZbGTJxsYGvr6+SEpKUi9TKpVISkpCQECA1m0CAgI02gPA/v371e09PDwgl8s12igUChw/frzMferL1tYWDg4OGi8yP7zEQKQ/1SOF+vs0QUDLhvy7ICqDSR93EhUVheHDh6Njx47w8/PDkiVLUFBQgIiICADAsGHD0KRJE8TGxgIAxo8fj6CgICxcuBC9e/fG1q1bceLECaxatQoAIJFIMGHCBMyZMwetW7eGh4cHZs6cCVdXV4SFhal/7vXr15Gbm4vr16+jpKQEp0+fBgC0atUKdevWNeoxoMqnusTw7KMc5HyUAxERlYNJk6VBgwYhJycH0dHRyMzMhI+PDxITE9UTtK9fvw4rq78HvwIDA7F582bMmDED06dPR+vWrbFz5054eXmp20yZMgUFBQUYPXo08vLy0LVrVyQmJkIq/fvafHR0NNavX6/+/qWXXgIAHDx4EN27d6/iXpMx8BIDERFVFpPWWbJkrLNERERkeSyqzhIRERGRJWCyRERERKQDkyUiIiIiHZgsEREREenAZImIiIhIByZLRERERDowWSIiIiLSgckSERERkQ5MloiIiIh0MOnjTiyZqvC5QqEwcSRERESkL9V525AHmDBZKqf79+8DANzc3EwcCRERERnq/v37kMlkerXls+HKSalU4vbt26hXrx4kkoo/nFWhUMDNzQ03btzgs+aMgMfbeHisjYvH27h4vI2rMo63EAL379+Hq6srrKz0m43EkaVysrKyQtOmTSt9vw4ODvyDMyIeb+PhsTYuHm/j4vE2rooeb31HlFQ4wZuIiIhIByZLRERERDowWTITtra2iImJga2tralDqRF4vI2Hx9q4eLyNi8fbuEx1vDnBm4iIiEgHjiwRERER6cBkiYiIiEgHJktEREREOjBZIiIiItKByVIlWbFiBdzd3SGVSuHv74+UlBSd7RMSEtC2bVtIpVJ4e3tjz549GuuFEIiOjoaLiwvs7OwQHByMy5cvq9dfu3YNkZGR8PDwgJ2dHVq2bImYmBgUFxdXSf/MjbGPNwD069cPzZo1g1QqhYuLC9566y3cvn270vtmjkxxvFWKiorg4+MDiUSC06dPV1aXzJYpjrW7uzskEonGa968eZXeN3Nkqvf2Dz/8AH9/f9jZ2aFBgwYICwurzG6ZLWMf759//rnUe1v1+vXXX/UPXFCFbd26VdjY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(violent_arrest_rate_2009, drug_arrest_rate_2009)\n", + "plt.xlabel(\"Violent Arrest Rate\")\n", + "plt.ylabel(\"Drug Arrest Rate\")\n", + "plt.title(\"Violent Arrest Rate vs Drug Arrest Rate\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 14\n", + "\n", + "Based on this simple comparison of 2009 violent arrest rates and drug arrest rates, what might you conclude about the relationship between the illegal drug trade and violent crime?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From this scatterplot, I am to determine a moderately positive relationship between Violent Arrest Rate and Drug Arrest Rate. Where if there is a higher number of violent arrests within the population we will also see higher number of drug arrest within each population of each county. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing with 2018 Arrests\n", + "\n", + "The preceding analysis can tell us about whether violent crime and the drug trade are correlated, but it doesn't tell us much about whether they are *causally* related. It *could* be the case that people dealing drugs *cause* more violent crime, but it could also be that certain communities, for some other reason, tend to have *both* more drug sales *and* more violent crime. \n", + "\n", + "To help answer this question, let's examine whether violent crime arrest rates changed in response to drug legalization. In particular, let's do this by comparing violent crime arrest rates in 2009 (before drug legalization) to violent crime arrest rates in 2018 (after drug legalization). If the illegal drug trade causes violent crime, then we would expect the violent crime rate to fall in response to drug legalization.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 15\n", + "\n", + "Just as we created violent arrest rates and drug arrest rates for 2009, now we want to do it for 2018. Using the data on 2018 arrests (also in the [same repository](https://github.com/nickeubank/practicaldatascience/tree/master/Example_Data/ca) we used before) and the same dataset of population data (you'll have to use population from 2013-2017, as 2018 population data has yet to be released), create a dataset of arrest rates. \n", + "\n", + "As before, *be careful with your merges!!!*" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [], + "source": [ + "ca_2018_arrests = pd.read_csv(\n", + " \"https://raw.githubusercontent.com/nickeubank/practicaldatascience/master/Example_Data/ca/ca_arrests_2018.csv\"\n", + ")\n", + "nhgis_df_cali_correct = nhgis_df_cali.copy()\n", + "\n", + "nhgis_df_cali_2018 = nhgis_df_cali_correct[nhgis_df_cali_correct[\"YEAR\"] == \"2013-2017\"]\n", + "\n", + "merged_2018_df = pd.merge(\n", + " ca_2018_arrests, nhgis_df_cali_2018, how=\"left\", validate=\"1:m\", indicator=True\n", + ")\n", + "\n", + "merged_2018_df = merged_2018_df.reset_index(drop=True)\n", + "merged_2018_df.sample(5)\n", + "\n", + "violent_arrest_rate_2018 = []\n", + "drug_arrest_rate_2018 = []\n", + "for index, row in merged_2018_df.iterrows():\n", + " drug_arrest_rate_2018.append(row[\"F_DRUGOFF\"] / row[\"total_population\"])\n", + " violent_arrest_rate_2018.append(row[\"VIOLENT\"] / row[\"total_population\"])\n", + "\n", + "merged_2018_df[\"drug_arrest_rate_2018\"] = drug_arrest_rate_2018\n", + "merged_2018_df[\"violent_arrest_rate_2018\"] = violent_arrest_rate_2018" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 16\n", + "\n", + "Now merge our two county-level datasets so you have one row for every county, and variables for violent arrest rates in 2018, violent arrest rates in 2009, felony drug arrest rates in 2018, and felony drug arrest rates in 2009. Store the number of observations in your final data set in your `results` dictionary under the key `\"ex16_num_obs\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
COUNTYVIOLENT_xPROPERTY_xF_DRUGOFF_xF_SEXOFF_xF_ALLOTHER_xF_TOTAL_xM_TOTAL_xS_TOTAL_xYEAR_x...F_ALLOTHER_yF_TOTAL_yM_TOTAL_yS_TOTAL_yYEAR_ySTATE_ytotal_population_y_mergedrug_arrest_rate_2018violent_arrest_rate_2018
0Alameda County431846405749260350218469372474312005-2009...26191103728305822013-2017California1629615.0both0.0006520.002536
1Alpine County84211168302005-2009...3114102013-2017California1203.0both0.0008310.004156
2Amador County10059101519946480122005-2009...14228870112013-2017California37306.0both0.0008310.001930
3Butte County641602542344292248902612005-2009...7412239885312013-2017California225207.0both0.0010170.003486
4Calaveras County21183123147050196832005-2009...9632089702013-2017California45057.0both0.0006440.003263
5Colusa County585028713227591702005-2009...12623675302013-2017California21479.0both0.0002330.003073
6Contra Costa County29763532289518920691166118539502005-2009...248987851622322013-2017California1123678.0both0.0007080.002326
7Del Norte County14410479139743712685NaN...8935515250NaNNaNNaNleft_onlyNaNNaN
8El Dorado County5703994034561420314734542005-2009...4591317350802013-2017California185015.0both0.0005510.002594
9Fresno County437735143508305325314957317103772005-2009...2899996028736382013-2017California971616.0both0.0005710.004442
10Glenn County10478104141334331283732005-2009...117293101852013-2017California27935.0both0.0008230.003580
11Humboldt County50344074754394213874604202005-2009...6161545557752013-2017California135490.0both0.0009890.003631
12Imperial County5997797302844925856739692005-2009...3211176448332013-2017California179957.0both0.0008060.002228
13Inyo County8144393382058511NaN...1012496530NaNNaNNaNleft_onlyNaNNaN
14Kern County429043843320202297515171318285242005-2009...2878976725552702013-2017California878744.0both0.0008430.003883
15Kings County39032227849499153852034152005-2009...74717855545882013-2017California150183.0both0.0005730.004015
16Lake County3492042711730311443095132005-2009...2881015321702013-2017California64095.0both0.0028550.005710
17Lassen County1016235683287881122005-2009...9131059442013-2017California31470.0both0.0013030.003654
18Los Angeles County353193463032193204123524127707238608110492005-2009...18256734631723893472013-2017California10105722.0both0.0006340.002856
19Madera County453409260355051662336622005-2009...5021428431762013-2017California154440.0both0.0008480.003639
20Marin County50053245429276179157951782005-2009...25212255227562013-2017California260814.0both0.0003640.002009
21Mariposa County644046743200517212005-2009...189939002013-2017California17658.0both0.0007930.001812
22Mendocino County4152965511736416433654102005-2009...3431063323732013-2017California87497.0both0.0013710.004354
23Merced County116911671055781006447596377142005-2009...903267373264322013-2017California267390.0both0.0006210.003848
24Modoc County472910552143310502005-2009...8018030002013-2017California9017.0both0.0011090.007320
25Mono County52383813015952102005-2009...68025602013-2017California14058.0both0.0004980.004126
26Monterey County138513119671369114710119483042005-2009...87832339543812013-2017California433168.0both0.0006740.002872
27Napa County3674003252439215083471602005-2009...5741230319752013-2017California141005.0both0.0005960.002525
28Nevada County2112072401010877623191552005-2009...2366322307612013-2017California98838.0both0.0006070.001932
29Orange County6145785375245794049261506632016202005-2009...458217804669105372013-2017California3155816.0both0.0005880.001932
30Placer County712122678851972374970701502005-2009...9882631647772013-2017California374985.0both0.0006320.002037
31Plumas County10044104268318867132005-2009...64205683102013-2017California18724.0both0.0013890.004166
32Riverside County5825708258814794832240994008722352005-2009...351613893315571312013-2017California2355002.0both0.0005610.002257
33Sacramento County530258094492409385419866323323892005-2009...40201389523366872013-2017California1495400.0both0.0009480.003400
34San Benito County209140111201416211460272005-2009...120412128622013-2017California58671.0both0.0007840.003051
35San Bernardino County84741079987937204916337025664811192005-2009...4899240634846110442013-2017California2121220.0both0.0011880.004167
36San Diego County9812859876485795321319587840541072005-2009...676321845624164322013-2017California3283665.0both0.0006380.002611
37San Francisco County362927926867513339166781478292005-2009...34487499793702013-2017California864263.0both0.0009150.002377
38San Joaquin County32233136192018726061107223552492005-2009...208470651403152013-2017California724153.0both0.0006920.004197
39San Luis Obispo County6096475229440322759962672005-2009...4201552942752013-2017California280119.0both0.0003780.002299
40San Mateo County144615271487979355492131195202005-2009...910349113494432013-2017California763450.0both0.0002990.001853
41Santa Barbara County12921037876778614143243863662005-2009...899346614866502013-2017California442996.0both0.0011670.002948
42Santa Clara County4309473743255063095169723854111652005-2009...241810738271691212013-2017California1911226.0both0.0004600.002180
43Santa Cruz County753789872437443201104551152005-2009...77023038594102013-2017California273263.0both0.0006370.002829
44Shasta County46450543436505194478294222005-2009...99821307502842013-2017California178919.0both0.0008940.002878
45Sierra County14106394212402005-2009...10456702013-2017California2885.0both0.0010400.003466
46Siskiyou County1891451809163686178682005-2009...226585164302013-2017California43530.0both0.0016310.004112
47Solano County1599132614228110275455106821912005-2009...1160423910559182013-2017California434981.0both0.0011130.003439
48Sonoma County13591296168281954537216767992005-2009...90235361315392013-2017California500943.0both0.0005290.002944
49Stanislaus County22112595220911121049230143691332005-2009...1846646714008342013-2017California535684.0both0.0016500.004385
50Sutter County42635817337194118829161842005-2009...3451084331462013-2017California95583.0both0.0005540.004185
51Tehama County2362724571618911702871122005-2009...170570197122013-2017California63247.0both0.0003950.003305
52Trinity County655063105324152722005-2009...8826434602013-2017California13037.0both0.0057530.005139
53Tulare County21832080168117017677881153683012005-2009...17416596151633602013-2017California458809.0both0.0020290.005061
54Tuolumne County160252209142618962062832005-2009...3117322019122013-2017California53899.0both0.0016140.003766
55Ventura County227524252040120208389432576217342005-2009...21936811266126302013-2017California847834.0both0.0008630.002679
56Yolo County5856346143966225345426732005-2009...5181586460262013-2017California212605.0both0.0005640.002705
57Yuba County354368211392571229296742005-2009...2571013194202013-2017California74644.0both0.0021970.005238
\n", + "

58 rows × 29 columns

\n", + "
" + ], + "text/plain": [ + " COUNTY VIOLENT_x PROPERTY_x F_DRUGOFF_x F_SEXOFF_x \\\n", + "0 Alameda County 4318 4640 5749 260 \n", + "1 Alpine County 8 4 2 1 \n", + "2 Amador County 100 59 101 5 \n", + "3 Butte County 641 602 542 34 \n", + "4 Calaveras County 211 83 123 14 \n", + "5 Colusa County 58 50 28 7 \n", + "6 Contra Costa County 2976 3532 2895 189 \n", + "7 Del Norte County 144 104 79 13 \n", + "8 El Dorado County 570 399 403 45 \n", + "9 Fresno County 4377 3514 3508 305 \n", + "10 Glenn County 104 78 104 14 \n", + "11 Humboldt County 503 440 747 54 \n", + "12 Imperial County 599 779 730 28 \n", + "13 Inyo County 81 44 39 3 \n", + "14 Kern County 4290 4384 3320 202 \n", + "15 Kings County 390 322 278 49 \n", + "16 Lake County 349 204 271 17 \n", + "17 Lassen County 101 62 35 6 \n", + "18 Los Angeles County 35319 34630 32193 2041 \n", + "19 Madera County 453 409 260 35 \n", + "20 Marin County 500 532 454 29 \n", + "21 Mariposa County 64 40 46 7 \n", + "22 Mendocino County 415 296 551 17 \n", + "23 Merced County 1169 1167 1055 78 \n", + "24 Modoc County 47 29 10 5 \n", + "25 Mono County 52 38 38 1 \n", + "26 Monterey County 1385 1311 967 136 \n", + "27 Napa County 367 400 325 24 \n", + "28 Nevada County 211 207 240 10 \n", + "29 Orange County 6145 7853 7524 579 \n", + "30 Placer County 712 1226 788 51 \n", + "31 Plumas County 100 44 104 2 \n", + "32 Riverside County 5825 7082 5881 479 \n", + "33 Sacramento County 5302 5809 4492 409 \n", + "34 San Benito County 209 140 111 20 \n", + "35 San Bernardino County 8474 10799 8793 720 \n", + "36 San Diego County 9812 8598 7648 579 \n", + "37 San Francisco County 3629 2792 6867 51 \n", + "38 San Joaquin County 3223 3136 1920 187 \n", + "39 San Luis Obispo County 609 647 522 94 \n", + "40 San Mateo County 1446 1527 1487 97 \n", + "41 Santa Barbara County 1292 1037 876 77 \n", + "42 Santa Clara County 4309 4737 4325 506 \n", + "43 Santa Cruz County 753 789 872 43 \n", + "44 Shasta County 464 505 434 36 \n", + "45 Sierra County 14 10 6 3 \n", + "46 Siskiyou County 189 145 180 9 \n", + "47 Solano County 1599 1326 1422 81 \n", + "48 Sonoma County 1359 1296 1682 81 \n", + "49 Stanislaus County 2211 2595 2209 111 \n", + "50 Sutter County 426 358 173 37 \n", + "51 Tehama County 236 272 457 16 \n", + "52 Trinity County 65 50 63 10 \n", + "53 Tulare County 2183 2080 1681 170 \n", + "54 Tuolumne County 160 252 209 14 \n", + "55 Ventura County 2275 2425 2040 120 \n", + "56 Yolo County 585 634 614 39 \n", + "57 Yuba County 354 368 211 39 \n", + "\n", + " F_ALLOTHER_x F_TOTAL_x M_TOTAL_x S_TOTAL_x YEAR_x ... \\\n", + "0 3502 18469 37247 431 2005-2009 ... \n", + "1 1 16 83 0 2005-2009 ... \n", + "2 199 464 801 2 2005-2009 ... \n", + "3 429 2248 9026 1 2005-2009 ... \n", + "4 70 501 968 3 2005-2009 ... \n", + "5 132 275 917 0 2005-2009 ... \n", + "6 2069 11661 18539 50 2005-2009 ... \n", + "7 97 437 1268 5 NaN ... \n", + "8 614 2031 4734 54 2005-2009 ... \n", + "9 3253 14957 31710 377 2005-2009 ... \n", + "10 133 433 1283 73 2005-2009 ... \n", + "11 394 2138 7460 420 2005-2009 ... \n", + "12 449 2585 6739 69 2005-2009 ... \n", + "13 38 205 851 1 NaN ... \n", + "14 2975 15171 31828 524 2005-2009 ... \n", + "15 499 1538 5203 415 2005-2009 ... \n", + "16 303 1144 3095 13 2005-2009 ... \n", + "17 83 287 881 12 2005-2009 ... \n", + "18 23524 127707 238608 11049 2005-2009 ... \n", + "19 505 1662 3366 2 2005-2009 ... \n", + "20 276 1791 5795 178 2005-2009 ... \n", + "21 43 200 517 21 2005-2009 ... \n", + "22 364 1643 3654 10 2005-2009 ... \n", + "23 1006 4475 9637 714 2005-2009 ... \n", + "24 52 143 310 50 2005-2009 ... \n", + "25 30 159 521 0 2005-2009 ... \n", + "26 911 4710 11948 304 2005-2009 ... \n", + "27 392 1508 3471 60 2005-2009 ... \n", + "28 108 776 2319 155 2005-2009 ... \n", + "29 4049 26150 66320 1620 2005-2009 ... \n", + "30 972 3749 7070 150 2005-2009 ... \n", + "31 68 318 867 13 2005-2009 ... \n", + "32 4832 24099 40087 2235 2005-2009 ... \n", + "33 3854 19866 32332 389 2005-2009 ... \n", + "34 141 621 1460 27 2005-2009 ... \n", + "35 4916 33702 56648 1119 2005-2009 ... \n", + "36 5321 31958 78405 4107 2005-2009 ... \n", + "37 3339 16678 14782 9 2005-2009 ... \n", + "38 2606 11072 23552 49 2005-2009 ... \n", + "39 403 2275 9962 67 2005-2009 ... \n", + "40 935 5492 13119 520 2005-2009 ... \n", + "41 861 4143 24386 366 2005-2009 ... \n", + "42 3095 16972 38541 1165 2005-2009 ... \n", + "43 744 3201 10455 115 2005-2009 ... \n", + "44 505 1944 7829 422 2005-2009 ... \n", + "45 9 42 124 0 2005-2009 ... \n", + "46 163 686 1786 8 2005-2009 ... \n", + "47 1027 5455 10682 191 2005-2009 ... \n", + "48 954 5372 16767 99 2005-2009 ... \n", + "49 2104 9230 14369 133 2005-2009 ... \n", + "50 194 1188 2916 184 2005-2009 ... \n", + "51 189 1170 2871 12 2005-2009 ... \n", + "52 53 241 527 2 2005-2009 ... \n", + "53 1767 7881 15368 301 2005-2009 ... \n", + "54 261 896 2062 83 2005-2009 ... \n", + "55 2083 8943 25762 1734 2005-2009 ... \n", + "56 662 2534 5426 73 2005-2009 ... \n", + "57 257 1229 2967 4 2005-2009 ... \n", + "\n", + " F_ALLOTHER_y F_TOTAL_y M_TOTAL_y S_TOTAL_y YEAR_y STATE_y \\\n", + "0 2619 11037 28305 82 2013-2017 California \n", + "1 3 11 41 0 2013-2017 California \n", + "2 142 288 701 1 2013-2017 California \n", + "3 741 2239 8853 1 2013-2017 California \n", + "4 96 320 897 0 2013-2017 California \n", + "5 126 236 753 0 2013-2017 California \n", + "6 2489 8785 16223 2 2013-2017 California \n", + "7 89 355 1525 0 NaN NaN \n", + "8 459 1317 3508 0 2013-2017 California \n", + "9 2899 9960 28736 38 2013-2017 California \n", + "10 117 293 1018 5 2013-2017 California \n", + "11 616 1545 5577 5 2013-2017 California \n", + "12 321 1176 4483 3 2013-2017 California \n", + "13 101 249 653 0 NaN NaN \n", + "14 2878 9767 25552 70 2013-2017 California \n", + "15 747 1785 5545 88 2013-2017 California \n", + "16 288 1015 3217 0 2013-2017 California \n", + "17 91 310 594 4 2013-2017 California \n", + "18 18256 73463 172389 347 2013-2017 California \n", + "19 502 1428 4317 6 2013-2017 California \n", + "20 252 1225 5227 56 2013-2017 California \n", + "21 18 99 390 0 2013-2017 California \n", + "22 343 1063 3237 3 2013-2017 California \n", + "23 903 2673 7326 432 2013-2017 California \n", + "24 80 180 300 0 2013-2017 California \n", + "25 6 80 256 0 2013-2017 California \n", + "26 878 3233 9543 81 2013-2017 California \n", + "27 574 1230 3197 5 2013-2017 California \n", + "28 236 632 2307 61 2013-2017 California \n", + "29 4582 17804 66910 537 2013-2017 California \n", + "30 988 2631 6477 7 2013-2017 California \n", + "31 64 205 683 10 2013-2017 California \n", + "32 3516 13893 31557 131 2013-2017 California \n", + "33 4020 13895 23366 87 2013-2017 California \n", + "34 120 412 1286 2 2013-2017 California \n", + "35 4899 24063 48461 1044 2013-2017 California \n", + "36 6763 21845 62416 432 2013-2017 California \n", + "37 3448 7499 7937 0 2013-2017 California \n", + "38 2084 7065 14031 5 2013-2017 California \n", + "39 420 1552 9427 5 2013-2017 California \n", + "40 910 3491 13494 43 2013-2017 California \n", + "41 899 3466 14866 50 2013-2017 California \n", + "42 2418 10738 27169 121 2013-2017 California \n", + "43 770 2303 8594 10 2013-2017 California \n", + "44 998 2130 7502 84 2013-2017 California \n", + "45 10 45 67 0 2013-2017 California \n", + "46 226 585 1643 0 2013-2017 California \n", + "47 1160 4239 10559 18 2013-2017 California \n", + "48 902 3536 13153 9 2013-2017 California \n", + "49 1846 6467 14008 34 2013-2017 California \n", + "50 345 1084 3314 6 2013-2017 California \n", + "51 170 570 1971 2 2013-2017 California \n", + "52 88 264 346 0 2013-2017 California \n", + "53 1741 6596 15163 360 2013-2017 California \n", + "54 311 732 2019 12 2013-2017 California \n", + "55 2193 6811 26612 630 2013-2017 California \n", + "56 518 1586 4602 6 2013-2017 California \n", + "57 257 1013 1942 0 2013-2017 California \n", + "\n", + " total_population_y _merge drug_arrest_rate_2018 \\\n", + "0 1629615.0 both 0.000652 \n", + "1 1203.0 both 0.000831 \n", + "2 37306.0 both 0.000831 \n", + "3 225207.0 both 0.001017 \n", + "4 45057.0 both 0.000644 \n", + "5 21479.0 both 0.000233 \n", + "6 1123678.0 both 0.000708 \n", + "7 NaN left_only NaN \n", + "8 185015.0 both 0.000551 \n", + "9 971616.0 both 0.000571 \n", + "10 27935.0 both 0.000823 \n", + "11 135490.0 both 0.000989 \n", + "12 179957.0 both 0.000806 \n", + "13 NaN left_only NaN \n", + "14 878744.0 both 0.000843 \n", + "15 150183.0 both 0.000573 \n", + "16 64095.0 both 0.002855 \n", + "17 31470.0 both 0.001303 \n", + "18 10105722.0 both 0.000634 \n", + "19 154440.0 both 0.000848 \n", + "20 260814.0 both 0.000364 \n", + "21 17658.0 both 0.000793 \n", + "22 87497.0 both 0.001371 \n", + "23 267390.0 both 0.000621 \n", + "24 9017.0 both 0.001109 \n", + "25 14058.0 both 0.000498 \n", + "26 433168.0 both 0.000674 \n", + "27 141005.0 both 0.000596 \n", + "28 98838.0 both 0.000607 \n", + "29 3155816.0 both 0.000588 \n", + "30 374985.0 both 0.000632 \n", + "31 18724.0 both 0.001389 \n", + "32 2355002.0 both 0.000561 \n", + "33 1495400.0 both 0.000948 \n", + "34 58671.0 both 0.000784 \n", + "35 2121220.0 both 0.001188 \n", + "36 3283665.0 both 0.000638 \n", + "37 864263.0 both 0.000915 \n", + "38 724153.0 both 0.000692 \n", + "39 280119.0 both 0.000378 \n", + "40 763450.0 both 0.000299 \n", + "41 442996.0 both 0.001167 \n", + "42 1911226.0 both 0.000460 \n", + "43 273263.0 both 0.000637 \n", + "44 178919.0 both 0.000894 \n", + "45 2885.0 both 0.001040 \n", + "46 43530.0 both 0.001631 \n", + "47 434981.0 both 0.001113 \n", + "48 500943.0 both 0.000529 \n", + "49 535684.0 both 0.001650 \n", + "50 95583.0 both 0.000554 \n", + "51 63247.0 both 0.000395 \n", + "52 13037.0 both 0.005753 \n", + "53 458809.0 both 0.002029 \n", + "54 53899.0 both 0.001614 \n", + "55 847834.0 both 0.000863 \n", + "56 212605.0 both 0.000564 \n", + "57 74644.0 both 0.002197 \n", + "\n", + " violent_arrest_rate_2018 \n", + "0 0.002536 \n", + "1 0.004156 \n", + "2 0.001930 \n", + "3 0.003486 \n", + "4 0.003263 \n", + "5 0.003073 \n", + "6 0.002326 \n", + "7 NaN \n", + "8 0.002594 \n", + "9 0.004442 \n", + "10 0.003580 \n", + "11 0.003631 \n", + "12 0.002228 \n", + "13 NaN \n", + "14 0.003883 \n", + "15 0.004015 \n", + "16 0.005710 \n", + "17 0.003654 \n", + "18 0.002856 \n", + "19 0.003639 \n", + "20 0.002009 \n", + "21 0.001812 \n", + "22 0.004354 \n", + "23 0.003848 \n", + "24 0.007320 \n", + "25 0.004126 \n", + "26 0.002872 \n", + "27 0.002525 \n", + "28 0.001932 \n", + "29 0.001932 \n", + "30 0.002037 \n", + "31 0.004166 \n", + "32 0.002257 \n", + "33 0.003400 \n", + "34 0.003051 \n", + "35 0.004167 \n", + "36 0.002611 \n", + "37 0.002377 \n", + "38 0.004197 \n", + "39 0.002299 \n", + "40 0.001853 \n", + "41 0.002948 \n", + "42 0.002180 \n", + "43 0.002829 \n", + "44 0.002878 \n", + "45 0.003466 \n", + "46 0.004112 \n", + "47 0.003439 \n", + "48 0.002944 \n", + "49 0.004385 \n", + "50 0.004185 \n", + "51 0.003305 \n", + "52 0.005139 \n", + "53 0.005061 \n", + "54 0.003766 \n", + "55 0.002679 \n", + "56 0.002705 \n", + "57 0.005238 \n", + "\n", + "[58 rows x 29 columns]" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged_2018_2009_df = pd.merge(merged_df, merged_2018_df, how=\"outer\", on=\"COUNTY\")\n", + "merged_2018_2009_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 17\n", + "\n", + "Did drug arrests go down from 2009 to 2018 in response to drug legalization? (they sure better! This is what's called a \"sanity check\" of your data and analysis. If you find drug arrests went *up*, you know something went wrong with your code or your understanding of the situations). \n", + "\n", + "Store the average county-level change in drug arrests per capita in `results` under the key `\"ex17_drug_change\"`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 18\n", + "\n", + "Now we want to look at whether violent crime decreased following drug legalization. Did the average violent arrest rate decrease? By how much? (Note: We're assuming that arrest rates are proportionate to crime rates. If policing increased so that there were more arrests per crime committed, that would impact our interpretation of these results. But this is just an exercise, so...)\n", + "\n", + "Store the average county-level change in violent arrests per capita in `results` under the key `\"ex18_violent_change\"`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 19\n", + "\n", + "Based on your answers to exercises 17 and 18, what might you conclude about the relationship between the illegal drug trade and violent crime? Did legalizing drugs increase violent crime (assuming arrest rates are a good proxy for crime rates)? Decrease violent crime? Have no effect? " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Difference in Difference Analysis\n", + "\n", + "The preceding analysis is something we sometimes call a \"pre-post\" analysis, in that it is a comparison of how and outcome we care about (violent arrest rates) changes from before a treatment is introduced (\"pre\") to after (\"post\"). BUT: pre-post comparisons are imperfect. If we knew that violent crime was not going to change at all in a world without drug legalization, then this comparison is perfectly valid. But what if, absent drug legalization, violent crime would have fallen on its own (maybe because of advances in policing practices or a better economy)? Or maybe it would have increased?\n", + "\n", + "This is actually a very common problem. For example, imagine you're trying to figure out whether taking tylenol helps with headaches. You have a patient with a headache, you give them tylenol, and then the next day you ask them if they still have a headache, and find out that they don't — does that mean that tylenol cured the headache? Maybe... but most headaches eventually resolve on their own, so maybe the headache would have passed with or without the patient taking tylenol! In fact, there's a term for this phenomenon in medicine — the \"natural history\" of a disease, which is the trajectory that we think a disease might follow absent treatment. And the natural history of the disease is almost never for it to stay exactly the same indefinitely.\n", + "\n", + "(All of this is closely related to the discipline of causal inference, and if it makes your head to hurt, don't worry — that means you're doing it right! We will talk lots and lots more about it in the weeks and months to come.)\n", + "\n", + "One way to try to overcome this problem is with something called a difference-in-difference analysis. Rather than just looking at whether violent drug arrest rates increase or decrease between 2009 and 2018, we can split our sample of counties into those that were *more* impacted by drug legalization and those that were *less* impacted by drug legalization and evaluate whether we see a greater change in the violent drug arrest rate in the counties that were more impacted. \n", + "\n", + "What does it mean to have been \"more impacted\" by drug legalization? In this case, we can treat the counties that had higher drug arrest rates in 2009 as counties that were more impacted by drug legalization than those that had low drug arrest rates in 2009. After all, in a county that had no drug arrests, legalization wouldn't do anything, would it? \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Exercise 20\n", + "\n", + "First, split our sample into two groups: high drug arrests in 2009, and low drug arrests in 2009 (cut the sample at the average drug arrest rate in 2009). \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Exercise 21\n", + "\n", + "Now, determine weather violent crime changed *more* from 2009 to 2018 in the counties that had lots of drug arrests in 2009 (where legalization likely had more of an effect) than in counties with fewer drug arrests in 2009 (where legalization likely mattered less)? \n", + "\n", + "Calculate this difference-in-difference:\n", + "\n", + "```\n", + "(the change in violent crime rate per capita for counties with lots of drug arrests in 2009) \n", + "- (the change in violent crime rate per capita for counties with few drug arrests in 2009)\n", + "\n", + "```\n", + "\n", + "Store your \"difference-in-difference\" estimate in your `results` dictionary under the key `\"ex21_diffindiff\"`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 22\n", + "\n", + "Interpret your difference in difference result." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 23\n", + "\n", + "The quantity we estimated above is a little difficult to interpret. Rather than calculating the *absolute* change in violent arrest rates per capita, let's calculate the *proportionate* change.\n", + "\n", + "Calculate:\n", + "\n", + "```\n", + "(the county-level percentage change in violent crime rate with lots of drug arrests in 2009) \n", + "- (the county-level percentage change in violent crime rate with few drug arrests in 2009)\n", + "```\n", + "Store your \"difference-in-difference\" estimate in your `results` dictionary under the key `\"ex24_diffindiff_proportionate\"`. Report your result in percentages, such that a value of `-100` would imply that the average county experienced a 100% decrease in the violent arrest rate." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.6 ('base')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + }, + "vscode": { + "interpreter": { + "hash": "718fed28bf9f8c7851519acf2fb923cd655120b36de3b67253eeb0428bd33d2d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/jupyter_exercise_materials/Jupyter_First.pdf b/jupyter_exercise_materials/Jupyter_First.pdf new file mode 100644 index 0000000..a8f8a3e Binary files /dev/null and b/jupyter_exercise_materials/Jupyter_First.pdf differ diff --git a/jupyter_exercise_materials/__pycache__/analyze_health_and_income.cpython-311.pyc b/jupyter_exercise_materials/__pycache__/analyze_health_and_income.cpython-311.pyc new file mode 100644 index 0000000..3e9873b Binary files /dev/null and b/jupyter_exercise_materials/__pycache__/analyze_health_and_income.cpython-311.pyc differ diff --git a/jupyter_exercise_materials/analyze_health_and_income.R b/jupyter_exercise_materials/analyze_health_and_income.R new file mode 100644 index 0000000..580c86f --- /dev/null +++ b/jupyter_exercise_materials/analyze_health_and_income.R @@ -0,0 +1,26 @@ +###################### +# +# Import World Development Indicators +# and look at the relationship between income +# and health outcomes across countries +# +###################### + +# Download World Development Indicators +wdi <- read.csv("https://media.githubusercontent.com/media/nickeubank/MIDS_Data/master/World_Development_Indicators/wdi_small_tidy_2015.csv") + +# Get Mortality and GDP per capita for 2015 +wdi$loggdppercap <- log(wdi[["GDP.per.capita..constant.2010.US.."]]) + +# Plot +library(ggplot2) +ggplot( + wdi, + aes( + x = loggdppercap, + y = Mortality.rate..under.5..per.1.000.live.births. + ) +) + + geom_point() + + geom_label(aes(label = Country.Name)) + + geom_smooth() diff --git a/jupyter_exercise_materials/analyze_health_and_income.py b/jupyter_exercise_materials/analyze_health_and_income.py new file mode 100644 index 0000000..a998798 --- /dev/null +++ b/jupyter_exercise_materials/analyze_health_and_income.py @@ -0,0 +1,39 @@ +###################### +# +# Import World Development Indicators +# and look at the relationship between income +# and health outcomes across countries +# +###################### + +import pandas as pd +import numpy as np + +# Download World Development Indicators +wdi = pd.read_csv( + "https://media.githubusercontent.com/" + "media/nickeubank/MIDS_Data/" + "master/World_Development_Indicators/wdi_small_tidy_2015.csv" +) + +# GDP Per Capita has a REALLY long right tail, so we want to log it for readability. +wdi["Log GDP Per Capita"] = np.log(wdi["GDP per capita (constant 2010 US$)"]) + +# Plot +import seaborn.objects as so +import seaborn as sns +from matplotlib import style + +my_chart = ( + so.Plot( + wdi, x="Log GDP Per Capita", y="Mortality rate, under-5 (per 1,000 live births)" + ) + .add(so.Line(), so.PolyFit(order=2)) + .add(so.Dot()) + .label(title="Log GDP and Under-5 Mortality") + .theme({**style.library["seaborn-whitegrid"]}) +) + +my_chart + +print("Done!") diff --git a/jupyter_exercise_materials/first_jupyter_notebook.html b/jupyter_exercise_materials/first_jupyter_notebook.html new file mode 100644 index 0000000..f606625 --- /dev/null +++ b/jupyter_exercise_materials/first_jupyter_notebook.html @@ -0,0 +1,7877 @@ + + + + + +first_jupyter_notebook + + + + + + + + + + + + +
+ + + + + + + +
+ + diff --git a/jupyter_exercise_materials/first_jupyter_notebook.ipynb b/jupyter_exercise_materials/first_jupyter_notebook.ipynb new file mode 100644 index 0000000..e8f6715 --- /dev/null +++ b/jupyter_exercise_materials/first_jupyter_notebook.ipynb @@ -0,0 +1,533 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# National Income and Infant Mortality\n", + "\n", + "In this Jupyter Notebook, we'll analyze the relationship between a country's GDP per capita (a measure of average income per person) and infant mortality (in particular, the share of every 1,000 children born who do not reach their fifth birthday). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data\n", + "\n", + "Data for this analysis comes from the World Bank's *World Development Indicators* database. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "# Download World Development Indicators\n", + "wdi = pd.read_csv(\n", + " \"https://media.githubusercontent.com/\"\n", + " \"media/nickeubank/MIDS_Data/\"\n", + " \"master/World_Development_Indicators/wdi_small_tidy_2015.csv\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's quickly look at our data. The next command just shows us the first 5 rows of our data (we'll spend more time on these tools in later lessons). Note further than you can scroll right to see more columns!:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Country NameAdolescent fertility rate (births per 1,000 women ages 15-19)Antiretroviral therapy coverage for PMTCT (% of pregnant women living with HIV)Battle-related deaths (number of people)CPIA building human resources rating (1=low to 6=high)CPIA business regulatory environment rating (1=low to 6=high)CPIA debt policy rating (1=low to 6=high)CPIA economic management cluster average (1=low to 6=high)CPIA efficiency of revenue mobilization rating (1=low to 6=high)CPIA equity of public resource use rating (1=low to 6=high)...Women participating in the three decisions (own health care, major household purchases, and visiting family) (% of women age 15-49)Women who believe a husband is justified in beating his wife (any of five reasons) (%)Women who believe a husband is justified in beating his wife when she argues with him (%)Women who believe a husband is justified in beating his wife when she burns the food (%)Women who believe a husband is justified in beating his wife when she goes out without telling him (%)Women who believe a husband is justified in beating his wife when she neglects the children (%)Women who believe a husband is justified in beating his wife when she refuses sex with him (%)Women who were first married by age 15 (% of women ages 20-24)Women who were first married by age 18 (% of women ages 20-24)Women's share of population ages 15+ living with HIV (%)
0Afghanistan73.1264NaN17273.03.52.53.03.03.03.0...32.680.259.218.266.948.433.48.834.8NaN
1Albania20.6922NaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN30.3
2Algeria10.705228.0110.0NaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaN44.8
3American SamoaNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
4AndorraNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "

5 rows × 129 columns

\n", + "
" + ], + "text/plain": [ + " Country Name \\\n", + "0 Afghanistan \n", + "1 Albania \n", + "2 Algeria \n", + "3 American Samoa \n", + "4 Andorra \n", + "\n", + " Adolescent fertility rate (births per 1,000 women ages 15-19) \\\n", + "0 73.1264 \n", + "1 20.6922 \n", + "2 10.7052 \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Antiretroviral therapy coverage for PMTCT (% of pregnant women living with HIV) \\\n", + "0 NaN \n", + "1 NaN \n", + "2 28.0 \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Battle-related deaths (number of people) \\\n", + "0 17273.0 \n", + "1 NaN \n", + "2 110.0 \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " CPIA building human resources rating (1=low to 6=high) \\\n", + "0 3.5 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " CPIA business regulatory environment rating (1=low to 6=high) \\\n", + "0 2.5 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " CPIA debt policy rating (1=low to 6=high) \\\n", + "0 3.0 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " CPIA economic management cluster average (1=low to 6=high) \\\n", + "0 3.0 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " CPIA efficiency of revenue mobilization rating (1=low to 6=high) \\\n", + "0 3.0 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " CPIA equity of public resource use rating (1=low to 6=high) ... \\\n", + "0 3.0 ... \n", + "1 NaN ... \n", + "2 NaN ... \n", + "3 NaN ... \n", + "4 NaN ... \n", + "\n", + " Women participating in the three decisions (own health care, major household purchases, and visiting family) (% of women age 15-49) \\\n", + "0 32.6 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women who believe a husband is justified in beating his wife (any of five reasons) (%) \\\n", + "0 80.2 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women who believe a husband is justified in beating his wife when she argues with him (%) \\\n", + "0 59.2 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women who believe a husband is justified in beating his wife when she burns the food (%) \\\n", + "0 18.2 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women who believe a husband is justified in beating his wife when she goes out without telling him (%) \\\n", + "0 66.9 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women who believe a husband is justified in beating his wife when she neglects the children (%) \\\n", + "0 48.4 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women who believe a husband is justified in beating his wife when she refuses sex with him (%) \\\n", + "0 33.4 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women who were first married by age 15 (% of women ages 20-24) \\\n", + "0 8.8 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women who were first married by age 18 (% of women ages 20-24) \\\n", + "0 34.8 \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " Women's share of population ages 15+ living with HIV (%) \n", + "0 NaN \n", + "1 30.3 \n", + "2 44.8 \n", + "3 NaN \n", + "4 NaN \n", + "\n", + "[5 rows x 129 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wdi.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Country Name',\n", + " 'Adolescent fertility rate (births per 1,000 women ages 15-19)',\n", + " 'Antiretroviral therapy coverage for PMTCT (% of pregnant women living with HIV)',\n", + " 'Battle-related deaths (number of people)',\n", + " 'CPIA building human resources rating (1=low to 6=high)',\n", + " 'CPIA business regulatory environment rating (1=low to 6=high)',\n", + " 'CPIA debt policy rating (1=low to 6=high)',\n", + " 'CPIA economic management cluster average (1=low to 6=high)',\n", + " 'CPIA efficiency of revenue mobilization rating (1=low to 6=high)',\n", + " 'CPIA equity of public resource use rating (1=low to 6=high)',\n", + " ...\n", + " 'Women participating in the three decisions (own health care, major household purchases, and visiting family) (% of women age 15-49)',\n", + " 'Women who believe a husband is justified in beating his wife (any of five reasons) (%)',\n", + " 'Women who believe a husband is justified in beating his wife when she argues with him (%)',\n", + " 'Women who believe a husband is justified in beating his wife when she burns the food (%)',\n", + " 'Women who believe a husband is justified in beating his wife when she goes out without telling him (%)',\n", + " 'Women who believe a husband is justified in beating his wife when she neglects the children (%)',\n", + " 'Women who believe a husband is justified in beating his wife when she refuses sex with him (%)',\n", + " 'Women who were first married by age 15 (% of women ages 20-24)',\n", + " 'Women who were first married by age 18 (% of women ages 20-24)',\n", + " 'Women's share of population ages 15+ living with HIV (%)'],\n", + " dtype='object', length=129)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Now we can just print out the column names:\n", + "wdi.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizing the Relationship between Log GDP Per Capita and Infant Mortality\n", + "\n", + "[Now it's your turn! insert the plot from `analyze_health_and_income.py` here and make any required changes to make it work]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done!\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Simrun Sharma\\miniconda3\\Lib\\site-packages\\seaborn\\_core\\rules.py:72: FutureWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, CategoricalDtype) instead\n", + " if pd.api.types.is_categorical_dtype(vector):\n", + "c:\\Users\\Simrun Sharma\\miniconda3\\Lib\\site-packages\\seaborn\\_core\\rules.py:72: FutureWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, CategoricalDtype) instead\n", + " if pd.api.types.is_categorical_dtype(vector):\n", + "c:\\Users\\Simrun Sharma\\miniconda3\\Lib\\site-packages\\seaborn\\_core\\plot.py:1491: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n", + " with pd.option_context(\"mode.use_inf_as_na\", True):\n", + "c:\\Users\\Simrun Sharma\\miniconda3\\Lib\\site-packages\\seaborn\\_core\\plot.py:1491: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n", + " with pd.option_context(\"mode.use_inf_as_na\", True):\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABK4AAAN6CAYAAACnkgHIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAB2HAAAdhwGP5fFlAAEAAElEQVR4nOzdd3xTVRsH8N9NuveCQiktLWXvvffeS7YCooggKuirgAoCIoivMhSQIb5MGbIU2ZuyWzYtsy1QOmjpnkmb3PeP2thAZ3rTpO3v+/lU05Nzz32S3hTuwznPEURRFEFERERERERERGRkZIYOgIiIiIiIiIiIKDdMXBERERERERERkVFi4oqIiIiIiIiIiIwSE1dERERERERERGSUmLgiIiIiIiIiIiKjxMQVEREREREREREZJSauiIiIiIiIiIjIKDFxRURERERERERERomJKyIiIiIiIiIiMkpMXBERERERERERkVFi4oqIiIiIiIiIiIwSE1dERERERERERGSUmLgiIiIiIiIiIiKjxMQVEREREREREREZJSauiIiIiIiIiIjIKDFxRURERERERERERomJKyIiIiIiIiIiMkpMXBERERERERERkVEyMXQARERE+Zk1axb27dsHAFi8eDGGDh1q4IgM68WLFzh27BguXbqEx48f4+XLl1AoFLC1tYWTkxPq1KmDtm3bomfPnrC1tc13rCtXrmDcuHH59jExMYG5uTmcnJzg5eWFLl26oHfv3nByciow1lq1ahXYRy6Xw9zcHM7OzqhZsybatm2LIUOGwNrausBjy5Kff/4ZK1euBABs3rwZrVq1KvIYOd/vBw8elNix+vDWW2/h6tWrAIwjnqJasGABtm3bVqi+Dg4OuHLlSpHPkfOayfbHH3+gYcOGRRqnd+/eCAkJ0XxvTL9nnzx5An9/f7zxxht6Gf/58+fo1q0bAKBly5bYsmWL1vNdu3ZFWFgYgLyvwzt37iAsLAy9e/fWS4xERMQZV0RERKVCVFQUPv/8c3Tt2hULFy7EyZMn8fTpU6SkpCAzMxNxcXEICgrC33//jS+++AJdu3bF6tWroVKpinXezMxMpKSkIDQ0FOfOncP8+fPRrVs3bNmyBaIoFvt1qVQqpKamIjQ0FCdPnsQ333yDbt264cKFC8Uem8hQ7t27Z5DzHj58uEj9AwMDtZJWxiIzMxMr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wfz586FQKPLt16NHD3z77bclslMbEREZl+DgYPTp00erzdXVFX/88QdcXV0NFBURUenExBUREVERvXjxArt27cKFCxcQEhKC5ORk2NjYoEKFCmjUqBEGDhyIVq1aGTpMIiIykPT0dIwZMwaPHz+GjY0N2rdvjxkzZqBy5cqGDo2IqNRh4oqIiIiIiIiIiIySzNABEBERERERERER5YaJKyIiIiIiIiIiMkpMXBERERERERERkVFi4oqIiIiIiIiIiIwSE1dERERERERERGSUmLgiIiIiIiIiIiKjxMQVEREREREREREZJRNDB0DSunXrFlQqFQRBgJmZmaHDISIiIiIiIqJyRKlUQhRFyOVyNGrUqNjjMXFVxqhUKoiiCFEUkZ6ebuhwiIiIiIiIiKgcUqlUkozDxFUZIwgCRFGEIAgwNzc3dDhkIAqFgtcB6YzXD+mK1w4VB68fKg5eP6QrXjtUHLx+cpfzfZECE1dljJmZGdLT02Fubo569eoZOhwykICAAF4HpDNeP6QrXjtUHLx+qDh4/ZCueO1QcfD6yV32+yJV+SIWZyciIiIiIiIiIqPExBURERERERERERklJq6IiIiIiIiIiMgoMXFFRERERERERERGiYkrIiIiIiIiIiIySkxcERERERERERGRUWLiioiIiIiIiIiIjBITV0REREREREREZJSYuCIiIiIiIiIiIqPExBURERERERERERklJq6IiIiIiIiIiMgoMXFFRERERERERERGiYkrIiIiIiIiIiIySkxcERERERERERGRUWLiioiIiIiIiIiIjBITV0REREREREREZJSYuCIiIiIiIiIiIqPExBURERERERERERklJq6IiIiIiIiIiMgoMXFFRERERERERERGiYkrIiIiIiIiIiIySkxcERERERERERGRUTIxdABERFR0aYpMnLn+HGeuhSI2MR1qEbCzMkPrBpXQs5UnHG0tDB0iERERERFRsTFxRURUiigyVNh8MBBHLz+FMlMFUfz3uajYVISEJ+D3ow/QrqEbJg2qD0c7JrCIiIiIiKj0YuKKiKiUSE7LwNy1FxEUlgC1Wsy1j+qf9ou3wxEQHIPFU9vBrYJNSYZJREREREQkGSauiAwkKjYVx648xZOIRKSkZ8DawhTVKtuhZytPVHSyMnR4ZGQyMtX4ZsNlBOeTtMpJpRaRkKzAl2suYNn0znCwNS+BKImIiIiIiKTFxBVRCXsUGoffjz7AtfsvIBMEzQwZAPC/9wI7TzxE8zquGN2zFmp6OBowUjImJ/2e4d6TWK2lgQVRqUXEJSrw+9H7mPpGI/0FR0REREREpCfcVZCoBF28HY7PfvLF9ftREEVoJa2Af7+/fj8Kn//siwu3wg0RJhkZURTxl28QUISkVTaVWsRJ/2dITc+QPjAiIiIiIiI9Y+KKqITcfBiFJZv9oFKLUBcwbUYtilCpRXy/xQ/XH0SVUIRkrO49iUXoi2Rd8lYAspYZnr72XNKYiIiIiIiISgITV0QlICNThSVb/IuceBAB/HeLPzIyVfoIi0qJW49ewkQu6Hy8KAK3HkVLGBEREREREVHJYOKKqARcuB2BlNSMItUnArISDilpGVwyWM4lpymLPUZiSvHHICIiIiIiKmlMXBGVgAO+wYCuE2YE4C/fYEnjodLFVC6D7hfQP2OY8Nc9ERERERGVPryTIdKz5LQMPHwWV+TZVtlEEXgUGs8ZM+WYs71lgXXR8iOXCajgYClhRERERERERCWDiSsiPUuSKOGUlMrEVXnVvrFbsY5XqUV0bV5VomiIiIiIiIhKDhNXRHomFG+Fl4ZMqoGo1HG0tUD7hm6Qy3S7BtwqWKOet7PEUREREREREekfE1dEemZvYy7JOHbWZpKMQ6XToE7VdV4uOLxrDQhMfBIRERERUSnExBWRnlmam6BZ7YqQ6ThbRiYT0KRWBVhbmkocGZUmNT0c8f7QhkU6RhCA3q090a2Fh56iIiIiIiIi0i8mrohKQP/23lCrdZsto1aLGNDeW+KIqDTq29YLH7zRCIKAfJcNZj83sIM3pgxrxNlWRERERERUapkYOgCi8qBprYpwdbJCdHxakRJYMpkAF3sLNK3tqsfoqDTp3aYa6no54eCFEJz0C4UiQ5WVqBKykpwCgNb1K6N/ey/Ur+5i6HCJiIiIiIiKhYkrohIgkwmYM7EVPv3pHDIyVChM7komAKYmMsx5p7XORbmpbPKoZIcpwxphfL+6uHY/CvFJCqhFEbZWZmhSswIc7SwMHSIREREREZEkmLgiKiGele2waEo7fL3+EtLSM6HKJ3sllwmwNDfB/PfaoFpluxKMkkoTKwtTdGhcxdBhEBERERER6Q0TV0QlqKaHI1b+pwsO+Abj8KUnSE3PhIlcBhEiBAhQqdSwNDdB7zbVMKCDN1wcLA0dMhEREREREZHBMHFFVMKc7S0xoX89jOlVGxdvh+PZiySkpWfC0sIEHq62aNvQDWamckOHSURERERERGRwTFwRGYiZqRydm1U1dBhERERERERERktm6ACIiIiIiIiIiIhyw8QVEREREREREREZJSauiIiIiIiIiIjIKDFxRURERERERERERomJKyIiIiIiIiIiMkpMXBERERERERERkVFi4oqIiIiIiIiIiIwSE1dERERERERERGSUmLgiIiIiIiIiIiKjxMQVEREREREREREZJSauiIiIiIiIiIjIKDFxRURERERERERERomJKyIiIiIiIiIiMkomJX3CqKgoPHr0CGFhYUhISIBCoYClpSXs7Ozg4eEBHx8fODs7l3RYRERERERERERkZEokcXX16lUcPnwYZ8+eRURERIH9vby80L59ewwcOBD169cvgQiJiIiIiIiIiMjY6C1xpVKpsHfvXmzcuBHBwcGadlEUCzw2JCQEISEh2LJlC+rUqYMPPvgA3bp101eoRERERERERERkhPSSuDp69Ch+/PFHhIaGaiWq7OzsULNmTdSsWRNOTk6ws7ODlZUVFAoFkpOTER4ejidPniAgIADJyckAgMDAQEybNg116tTBtGnT0LVrV32ETERERERERERERkbSxNWLFy/w9ddf4+zZs5qEVYsWLdCtWzd07NgR3t7ehR4rMDAQvr6+OHToEB48eIDAwEB88MEH6Nq1K7755hs4OTlJGToRERERERERERkZyRJXx48fx1dffYWEhARYWlpi5MiRGDVqFKpVq6bTeHXr1kXdunUxefJk3L9/H5s2bcLBgwdx8uRJ3Lp1CwsWLODsKyIiIiIiIiKiMkwm1UAffvghkpOTMWrUKJw4cQKzZs3SOWn1qtq1a2Px4sU4ceIERowYgfj4eHzwwQeSjE1ERERERERERMZJssRVixYtsG/fPsybNw/Ozs5SDaulYsWKWLBgAf7880+0bNlSL+cgIiIiIiIiIiLjINlSwS1btkg1VIGqV6+OTZs2ldj5iIiIiIiIiIio5Ek244qISreMTBUUGSpDh0FERERERESkIemugkRUugSHJeDghRCcu/Ec6cqspJWpXIYWdV3Rv7036ld3hiAIBo6SiIiIiIiIyqsST1wplUqYmZlptb18+RJb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/gAAU1NT1K9fv/hBExERERERERGVMnpPXI0ZMwaenp54+vQpvv76a6hUKn2fUq+Sk5Px/vvva5JWHTp0wIYNGwpdh6pnz56ax/v27cvzHMePHwcAtGvXTqs2FhERERERERFReSFZcXY/P788n3v33Xcxf/587N69G9euXUOfPn1Qs2ZN2NnZwcSk4BBatGghVZjFtnjxYs2yxwYNGmDVqlVFKjpfu3ZtNG3aFNevX8fatWvRuXNn1KpVS/O8KIr49ttvNYmx8ePHSxo/EREREREREVFpIVni6q233oIgCPn2EUURISEhWL16daHHFQQBgYGBxQ1PEs+ePdPMkjIxMcHkyZMRHBxc4HHVq1eHmZmZ5vu5c+di+PDhSElJwZgxYzB58mQ0b94ccXFx2LZtGy5cuAAA6NOnD9q2baufF0NEREREREREZOQkS1wBWYkpKfoYqz179miWOmZmZmLatGmFOu7kyZNauyrWqVMHS5cuxWeffYbk5GT8+OOPrx3Tpk0bLFq0SJrAiYiIiIiIiIhKIckSV0OGDJFqKKN1//59ycbq2bMnateujQ0bNuD8+fOIioqCqakpatWqhaFDh2LYsGGQyfRegoyIiIiIiIiIyGhJlrhavHixVEMZzHfffYfvvvsuz+fXrl0r6fk8PDwwf/58ScckIiIiIiIiIiorOKWHiIiIiIiIiIiMkt4TV7Nnz8bs2bNx7969Ih135coVDB8+HIMGDdJTZEREREREREREZMwkLc6em3379kEQBHTv3h116tQp9HHx8fG4c+cOLCws9BgdEREREREREREZK6NdKnjnzh0AgCAIBo6EiIiIiIiIiIgMQbIZV5s3b8aJEyfyfH758uXYtGlTgeOIooiEhAQ8evQIgiDA3d1dqhCJiIiIiIiIiKgUkSxx1adPH/z8889ITk5+7TlRFPH48eMijSeKIgRBwLBhw6QKkYiIiIiIiIiIShHJlgpWqFAB06dPhyiKWl/ZXm3P6wsALC0tUb16dUyfPh0TJkyQKkQiIiIiIiIiIipFJC3OPnbsWIwdO1arrXbt2hAEAStXrkS3bt2kPB0REREREREREZVhRlucnYiIiIiIiIiIyjdJZ1zl5rPPPoOFhQUaNGig71MREREREREREVEZovfE1b59+xAUFIQjR45gy5Yt+j4dERERERERERGVEXpPXIWHhwMA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+umnClNyZDIZpkyZgps3b8LFxQX79u2Dg4NDvb8OMh19ryFAHVZERUXhyy+/hEql0n6ewVXTou+18+WXX+Kbb74BALzxxht46qmnKm0TFRWF5cuXAwDmzp2LV155pR4qfzixOTtRI/f1118DAOzs7PDll19WCK0AwMbGBi+++CIA9VBXzTBXotoUFBRg8eLFEEURXl5eePvtt01dEpmRo0ePAgBcXFwwd+7cSs+3bdsWo0ePBgDcunULycnJDVofma/9+/drQ6snnniiUmgFAH5+fli8eDEA9eisEydONGiNZHonT57EE088ob1plEhqv2357bffUFhYCEA9Hf7BPjIODg7akee5ubn4/fffjVs0mRVDrqHExETMmzcPn3/+OVQqlU770MPHkGtn69atAIAWLVpUGVoBwLx589C8eXMAwPbt241TbBPB70SiRiwjIwNnz54FAMyYMQMeHh5VbterVy+MGzcOs2bNQnBwcANWSI3ZF198gfT0dADAokWLOJyZKsjOzgagHu5e3T/oyjdmz8rKapC6yPydOnVK+3j69OnVbjdw4EDtaJjdu3fXe11kPpYsWYJZs2bhzp07ANQB58iRI2vdT/PLOV9fX3Tv3r3Kbbp06aL9t9CDIyno4WHINbRlyxaMGDEChw4dAgB06NCBvdCaIEOunbS0NNy9excA8Oijj1a7nSAI6NGjBwD14iQFBQXGKboJYHBF1IgdP35cO4R5+PDh1W5nZWWF//73v3jzzTdr/GFKpBEbG4uff/4ZANC9e3eMGDHCxBWRufH09ASg/u20UqmscpvExETtYy8vrwapi8yfZrSVtbU1WrRoUe12UqlUGzBcvHixASojc3Hp0iUA6p8zX3zxBd577z1YWNS8GLpcLsfVq1cBAN26datx286dOwNQX1dyudwIFZO5MeQaunbtGhQKBaysrPDCCy/gp59+qvaXwvTwMuTasbCwwIsvvojJkyejS5cuNW5bvlNTaWlp3QtuImr+ChCRWbtx4wYA9cpd4eHh2s/L5XKkpqbCwsICPj4+kEqlpiqRGqnPP/8cZWVlAIDXXnvNxNWQOerfvz8uXbqE/Px8/PDDD5gzZ06F5+Pi4vDHH38AUE8b9PPzM0WZZIYUCgUAwNbWFoIg1Lit5mahfAhKDz83Nze88MILePLJJ2Fvb6/TPgkJCdq/t4KCgmrc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/320adOm0rYzZsxAQkICFixYgKtXryI1NRXz58/H5s2ba51Wakrjx49v8lOEiYjo4cDm7ERERPRQKSgowEsvvaQNraZMmYJVq1ZVG1oB6tE2I0aMwPr162FtbQ0A2LBhA65fv26UmkaPHo3PP/9cO0UwKioKSUlJRjm2jY0NPvroI+1op+joaNy4ccMox65Jhw4d8Mwzz2g/3rx5c72f01iWLl2qDa06d+6Mn3/+ucrQSiMoKAjr1q1DYGAgACAhIQFff/11g9RKRETU1DG4IiIioofKihUrkJmZCQDo2rUr3nrrLUgkuv2Tp2XLltowRhRF/Prrr0ar69FHH8XEiRMBqKfcGTP4CAgIQIcOHbQfX7582WjHrsmoUaO0j69fv64NC83ZuXPnsHPnTgCAo6MjvvjiC9ja2ta6n6OjIxYvXqz9eOPGjSgoKKi3OomIiEiNUwWJiIioVsXFxdi6dSv+/vtvxMTEIC8vD/b29ggMDERkZCSmTZsGDw+PWo8THR2NDRs24PTp08jIyIC9vT0iIiIwYcIEjB07Frt27cLLL78MAFi/fj169OihV50ymQy//PKL9uM333xT775LkydPxrp169ChQwdERETotW9t5s6di19//RWiKGL37t145513tCO86srX11f7ODs72yjH1OecKpUKOTk58PLyqrRdTk4OfvrpJxw+fBgJCQmQyWRwcXFBq1atMGTIEIwbNw6WlpZVnkOzQqaVlRWio6Oxa9cuREVFIS4uDvb29ggPD8frr7+Odu3a6VTzunXrtI+nTJlSZb3V6devHyIiImBpaYkuXbqgoKCgyumCubm5+P3333Hy5EncvHkTeXl5KCsrg5OTE0JCQtC7d29MmTIFrq6ulfZNTk7GwIEDAfyzGuChQ4ewfv16XLt2DQUFBfD09ES3bt0wY8aMal93dasKDhgwAHfv3q2wrWYly2bNmmH//v2VjnXixAn89ddfOH/+PDIyMlBQUABbW1u4u7ujY8eOGD16NCIjI3V+H4mIiPTB4IqIiIhqdObMGbz22mtITU2t8HnNimuXL1/G2rVr8eabb+KJJ56o9jgrV67E8uXLIYpihWOcPn0ap0+fxrZt2zB8+PA61fr333+jsLAQgHr0VE3Tv6rj5eWF06dP10ujcX9/f7Rq1QrXrl1DaWkpzp07h969exvl2Jom9AAarPdS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", + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": { + "image/png": { + "height": 378.25, + "width": 509.15 + } + }, + "output_type": "execute_result" + } + ], + "source": [ + "import analyze_health_and_income as ahi\n", + "\n", + "ahi.my_chart" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tell Me Something Cool You've Learned\n", + "\n", + "Write me a little markdown cell (with some fun formatting!) telling me something you saw in the plot you didn't expect." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems there are some countries that have a high log GDP Per Capita but they have a high infant mortality rate. This is not what I expected. I felt as though a higher GDP would have a heavy correlation with a lower infant mortality rate. This means despite having a high GDP Per Capita sometimes countries are unable to achieve a good resource allocation system leading to some impoverished communites having to deal with a high infant mortality rate. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Export and Send Your Notebook to Me!\n", + "\n", + "When you are finished, the next step is to export this notebook. \n", + "\n", + "In my experience, the best way to do this is as follows: \n", + "\n", + "1. Along the top of your notebook, select \"Export\" (it might be in the three-dot menu).\n", + "2. Choose \"HTML\" and **save it next to this notebook file**. This is important because any images in the HTML have relative file paths that are set up to be in reference to the location of your notebook, so if you save it somewhere else, when you open it you may lose all your images. \n", + "3. Open that HTML in your normal web browser (Chrome, Firefox, etc), **not** in VS Code.\n", + "4. Print the page to PDF.\n", + "\n", + "Why do this instead of choosing the PDF option when exporting? If you try and export a notebook directly to PDF, VS Code will actually try and use a tool to convert it to a LaTeX document, compile that latex document, then print, and getting this setup right can be a pain, and the LaTeX conversion often causes problems. So while a little convoluted, that's my recommendation. \n", + "\n", + "Now that you have a PDF, please upload it to Gradescope!" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "f06fa9c80cc08d4d343f66ad24a278ad0285590eac640a80c32c9d748f33a802" + }, + "kernelspec": { + "display_name": "Python 3.9.6 64-bit ('base': conda)", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}