{"cells":[{"cell_type":"markdown","metadata":{"id":"Vkf1B-vMwpVB"},"source":["# Basic Plots, Groupping and Multi-Level Tables"]},{"cell_type":"markdown","metadata":{"id":"fpPtZgqIvuXz"},"source":["Inspiration and some of the parts came from: Python Data Science [GitHub repository](https://github.com/jakevdp/PythonDataScienceHandbook/tree/master), [MIT License](https://github.com/jakevdp/PythonDataScienceHandbook/blob/master/LICENSE-CODE) and [Introduction to Pandas](https://colab.research.google.com/notebooks/mlcc/intro_to_pandas.ipynb) by Google, [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)\n","\n","If running this from Google Colab, uncomment the cell below and run it. Otherwise, just skip it."]},{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":11192,"status":"ok","timestamp":1692083921583,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"5saSBc40voZF","outputId":"f9b23c3f-c297-441d-9e00-708f8278bd5c"},"outputs":[],"source":["#!pip install seaborn\n","#!pip install watermark\n","#!pip install pivottablejs"]},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[],"source":["import pandas as pd\n","import seaborn as sns\n","\n","# For generating a pivot table widget\n","from pivottablejs import pivot_ui\n","from IPython.display import HTML\n","from IPython.display import IFrame\n","import json, io"]},{"cell_type":"markdown","metadata":{"id":"ZkUd2sa-yP5e"},"source":["## Learning Objectives:\n","\n","\n"," * Simple plotting from *DataFrame*\n","\n"," * split-apply-combine on tidy data\n","\n"," * Pivot tables\n","\n"," For this notebook, we will use the california housing dataframes."]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"executionInfo":{"elapsed":500,"status":"ok","timestamp":1692083888391,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"av6RYOraVG1V","outputId":"fc356d6e-ae0d-4444-8586-b7f85a149bc2"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
longitude
\n","
latitude
\n","
housing_median_age
\n","
total_rooms
\n","
total_bedrooms
\n","
population
\n","
households
\n","
median_income
\n","
median_house_value
\n","
\n"," \n"," \n","
\n","
0
\n","
-114.31
\n","
34.19
\n","
15.0
\n","
5612.0
\n","
1283.0
\n","
1015.0
\n","
472.0
\n","
1.4936
\n","
66900.0
\n","
\n","
\n","
1
\n","
-114.47
\n","
34.40
\n","
19.0
\n","
7650.0
\n","
1901.0
\n","
1129.0
\n","
463.0
\n","
1.8200
\n","
80100.0
\n","
\n","
\n","
2
\n","
-114.56
\n","
33.69
\n","
17.0
\n","
720.0
\n","
174.0
\n","
333.0
\n","
117.0
\n","
1.6509
\n","
85700.0
\n","
\n","
\n","
3
\n","
-114.57
\n","
33.64
\n","
14.0
\n","
1501.0
\n","
337.0
\n","
515.0
\n","
226.0
\n","
3.1917
\n","
73400.0
\n","
\n","
\n","
4
\n","
-114.57
\n","
33.57
\n","
20.0
\n","
1454.0
\n","
326.0
\n","
624.0
\n","
262.0
\n","
1.9250
\n","
65500.0
\n","
\n"," \n","
\n","
"],"text/plain":[" longitude latitude housing_median_age total_rooms total_bedrooms \\\n","0 -114.31 34.19 15.0 5612.0 1283.0 \n","1 -114.47 34.40 19.0 7650.0 1901.0 \n","2 -114.56 33.69 17.0 720.0 174.0 \n","3 -114.57 33.64 14.0 1501.0 337.0 \n","4 -114.57 33.57 20.0 1454.0 326.0 \n","\n"," population households median_income median_house_value \n","0 1015.0 472.0 1.4936 66900.0 \n","1 1129.0 463.0 1.8200 80100.0 \n","2 333.0 117.0 1.6509 85700.0 \n","3 515.0 226.0 3.1917 73400.0 \n","4 624.0 262.0 1.9250 65500.0 "]},"execution_count":3,"metadata":{},"output_type":"execute_result"}],"source":["california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n","california_housing_dataframe.head()"]},{"cell_type":"markdown","metadata":{"id":"Hg5U--9k39nj"},"source":["## Simple Plotting"]},{"cell_type":"markdown","metadata":{"id":"WrkBjfz5kEQu"},"source":["The example below is using `DataFrame.describe` to show interesting statistics about a `DataFrame`."]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":300},"executionInfo":{"elapsed":2,"status":"ok","timestamp":1692083890073,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"YDpHvq6v5m9Z","outputId":"cf8530af-3ecd-4a30-8d71-a12e28723778"},"outputs":[{"data":{"text/html":["
"]},"metadata":{},"output_type":"display_data"}],"source":["california_housing_dataframe.hist('housing_median_age')"]},{"cell_type":"markdown","metadata":{"id":"X5WTx27a6lUZ"},"source":["Another example, `DataFrame.plot.scatter` lets you quickly study the possition of houses:"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":466},"executionInfo":{"elapsed":607,"status":"ok","timestamp":1692083892650,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"Pmbq70pb512S","outputId":"8c7f5e3a-7bb6-4e10-8b01-73d3502247c0"},"outputs":[{"data":{"text/plain":[""]},"execution_count":6,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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g7B27Vr88ssvmDlzJu699158//33zvoYbk+J63zp0iWkpqaia9euKC0txZIlS/DGG2/gzTffdNbHcHtC1xlovtHOnDkTd9xxB+vzR44cQWZmJpKTk7Fv3z7k5eXhwoULmDJlilrD9jhKXGeg+Ya9fPlyvPHGG/j999/x/fffY/jw4WoM2SMpdZ0BBe6BJuI0q1atMrVr107UsXPmzDHdfPPNdo//4x//MN19992SzuVLlLjGlsaPH2+6//77FRiZd3HkOn/wwQemdu3amerr682PLV682NS1a1eT0WhUeqgeTcx1fvHFF02DBw+2e/ybb74xBQQEmJqamsyPbdiwwaTRaEzXrl1TeKSezZHrfPDgQVNAQIDp999/V2dwXsSR68xw9B5IMz1u6uLFi2jfvr3VY4WFhfjmm2/w/vvvu2hU3oXtGss5hvCzvYY7d+5EUlKSVVGy9PR0nD59GseOHXPBCL1TXFwc/P39sWrVKjQ1NeHixYv47LPPkJaWhsDAQFcPz2t8//336NWrF3744Qf07NkTkZGReOCBB2AwGFw9NK+jxD2Qgh43tHPnTnz99dd46KGHzI9VV1djxowZWL16NTXAUwDbNbaVk5OD0tJS3H///U4cmXdhu85nz55Fp06drI5j/n727Fmnjs+bRUZGIj8/H88++yyCgoIQGhqKU6dO4csvv3T10LzKkSNHcPz4cXzzzTf49NNPsXr1auzduxdZWVmuHppXUeoeSEGPTC+99BI0Gg3vnz179kg+74EDB5CZmYl//etfSE1NNT8+e/ZsTJ8+HaNHj1byY7g1Z19jS9u2bcOMGTOwbNkyDBgwwNGP4tZccZ01Go3V303/n8Rs+7g3Ues6czl79iweeOAB3HfffSgtLUVRURFatGiBrKwsr04ad/Z1NhqNaGhowKefforExESMGTMGK1aswNatW/HHH38o9j7uxtnXWal7YIBC4/E5jz32GO68807eYyIjIyWd8+DBg0hOTsbs2bPx/PPPWz1XWFiIDRs24I033gDQfJMwGo0ICAjAxx9/jJkzZ0p6L0/g7GvMKCoqwi233II333wT9957r6TzeyJnX+fOnTvbzeicP38eAOxmgLyJGteZz/vvv4+QkBC8/vrr5sfWrFmDiIgI/PzzzxgxYoRi7+VOnH2du3TpgoCAAERHR5sf69evHwDgxIkT6Nu3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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["california_housing_dataframe.plot.scatter(x='longitude',\n"," y='latitude',\n"," c='DarkBlue')"]},{"cell_type":"markdown","metadata":{},"source":["Boxplots can also be displayed with `DataFrame.boxplot`."]},{"cell_type":"code","execution_count":7,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":447},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1692083893142,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"FirdkMFF-k4u","outputId":"749079df-2831-4d01-c904-60d237763035"},"outputs":[{"data":{"text/plain":[""]},"execution_count":7,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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AACAUYQPAABgFOEDAAAYRfgAAABGET4AAIBRhA8AAGAU4QMAABhF+AAAAEYRPgAAgFGEDwAAYJTt4aOurk7/+Z//qaysLMXExOg73/mOnnjiCTU0NNi9KgAAEIKi7F7gwoUL9dJLL2n58uXq27evioqK9MADDygpKUkPP/yw3asDYEBtba327t3r6Dp27tx5Se/r3bu3YmNjbe4GgJNsDx/btm3TxIkTdeutt0qSMjMz9dprr6moqMjuVQEwZO/evRoyZIij67jU5RcXF2vw4ME2dwPASbaHj2HDhumll15SSUmJevXqpd27d2vLli3Kz89vsd7n88nn8wWmvV6vJMnv98vv99vdHoBLkJ2drffff7/N77vrrrtUVlZ20bqsrCytXLnyUlpTdnY2fyuAdqAt26Ht4WPu3LmqrKxU7969FRkZqfr6ev3+97/X3Xff3WJ9Xl6eFixY0Gy8oKCAXalAiHvyySd13333taquvLz8ktZxqe8DYK/a2tpW17osy7LsXPnKlSs1Z84c/fGPf1Tfvn21a9cuzZw5U4sXL9bUqVOb1be05yMjI0MnTpxQYmKina0BCII+ffpo//79552fnZ2tzz77zGBHAJzg9XrVpUsXVVZWXvT72/bwkZGRoccee0y5ubmBsaeeekp/+ctfWnXCmtfrVVJSUquaBxAaevbs2WIAyc7OVmlpaRA6AmC3tnx/236pbW1trSIimi42MjKSS22BDqy0tFSnTp3SwCE3KDKhiwYOuUGnTp0ieAAdlO3nfEyYMEG///3v1b17d/Xt21cffvihFi9erJ/85Cd2rwpACElKStKy1W/p9he3a9kvvq+kpKRgtwQgSGwPH88995zmz5+vadOm6dixY0pPT9dDDz2k3/72t3avCgAAhCDbw0dCQoLy8/PPe2ktAADo2Hi2CwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMInwAAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMIHwAAwCjCBwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMInwAAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMIHwAAwCjCBwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMInwAAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMcCR+HDx/Wfffdp5SUFMXGxmrQoEEqLi52YlUAACDERNm9wJMnT2ro0KEaPXq03n77bV111VXav3+/rrjiCrtXBQAAQpDt4WPhwoXKyMjQK6+8EhjLzMy0ezUAACBE2R4+3njjDY0dO1Z33HGHNm7cqKuvvlrTpk3TT3/60xbrfT6ffD5fYNrr9UqS/H6//H6/3e0BCKK6urrAT7ZvILy0ZZu2PXx88cUXevHFFzVr1iz9+te/1gcffKAZM2bI4/FoypQpzerz8vK0YMGCZuMFBQWKjY21uz0AQXSoWpKitH37dh3+ONjdALBTbW1tq2tdlmVZdq48Ojpa1113nbZu3RoYmzFjhnbs2KFt27Y1q29pz0dGRoZOnDihxMREO1sDEGS7D36tH/2pSH/76XUa2D052O0AsJHX61WXLl1UWVl50e9v2/d8pKWl6dprr20y1qdPH61evbrFeo/HI4/H02zc7XbL7Xbb3R6AIIqKigr8ZPsGwktbtmnbL7UdOnSo9u3b12SspKREPXr0sHtVAAAgBNkePn71q19p+/btevrpp1VaWqoVK1bo5ZdfVm5urt2rAgAAIcj28HH99ddr7dq1eu2119SvXz89+eSTys/P17333mv3qgAAQAiy/ZwPSbrtttt02223ObFoAAAQ4ni2CwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMInwAAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMIHwAAwCjCBwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMInwAAACjCB8AAMCoqGA3AMA5ZSdqVOOrC3YbAfuP1wR+RkW1rz8/cZ4oZXWJC3YbQIfQvrZ+ALYpO1Gj0YveC3YbLXrkb3uC3UKLNsweRQABDCB8AGGqcY9H/o8HqedV8UHu5qya0z6tf2+bbht1k+JiPMFuJ6D0WLVmrtrVrvYSAeGM8AGEuZ5Xxavf1UnBbkOS5Pf7dfRKaXCPznK73cFuB0CQcMIpAAAwivABAACMInwAAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMIHwAAwCjCBwAAMIrwAQAAjCJ8AAAAoxwPH3l5eXK5XJo5c6bTqwIAACHA0fCxY8cOvfzyyxowYICTqwEAACHEsfBRXV2te++9V3/605/UuXNnp1YDAABCTJRTC87NzdWtt96qW265RU899dR563w+n3w+X2Da6/VKOvvobb/f71R7QNirq6sL/Gwv21JjH+2ln0bt8XcFhJq2bDuOhI+VK1dq586d2rFjx0Vr8/LytGDBgmbjBQUFio2NdaI9oEM4VC1JUdqyZYu+jA92N00VFhYGu4Um2vPvCggVtbW1ra61PXwcOnRIDz/8sAoKCtSpU6eL1s+bN0+zZs0KTHu9XmVkZCgnJ0eJiYl2twd0GJ8c8WrRnu0aNmyY+qa3j23J7/ersLBQY8aMkdvtDnY7Ae3xdwWEmsYjF61he/goLi7WsWPHNGTIkMBYfX29Nm3apKVLl8rn8ykyMjIwz+PxyOPxNFuO2+1uV3+cgFATFRUV+NnetqX2tn23598VECrasu3YHj7+7d/+TXv27Gky9sADD6h3796aO3duk+ABAAA6HtvDR0JCgvr169dkLC4uTikpKc3GAQBAx8MdTgEAgFGOXWp7rvfee8/EagAAQAhgzwcAADCK8AEAAIwifAAAAKOMnPMBwDxf/TeK6HRYZd59iujUPm7bWVdXpyN1R/TZ158F7q3RHpR5qxXR6bB89d9ISgp2O0DYaz9bPwBbHan5UnFZz+nXHwS7k+ZeeOeFYLfQTFyWdKRmkIYoNditAGGP8AGEqfS4Hqopm64lPx6k7Kvaz56Pf235l4YOG9qu9nzsP1ath1ftUvroHsFuBegQ2s/WD8BWnshOavjmamUlXqNrU9rHoQS/36+yqDL1Se7Trm5j3vBNpRq+OS5P5MWfRwXg8nHCKQAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMInwAAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMIHwAAwCjCBwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMigp2AwCccdpfL0n6+HBlkDv5PzWnfSo6LnX98qTiYjzBbieg9Fh1sFsAOhTCBxCm9v//L9TH1uwJciffFqVXS3cEu4kWxXn4kwiYwJYGhKmcvl0lSdlXxSvGHRnkbs7aV16pR/62R8/8qL+uSUsKdjtNxHmilNUlLthtAB0C4QMIU8lx0brrhu7BbqOJuro6SVL2lXHqd3X7Ch8AzOGEUwAAYBThAwAAGEX4AAAARhE+AACAUYQPAABgFOEDAAAYRfgAAABG2R4+8vLydP311yshIUFXXXWVbr/9du3bt8/u1QAAgBBle/jYuHGjcnNztX37dhUWFqqurk45OTmqqamxe1UAACAE2X6H03feeafJ9CuvvKKrrrpKxcXFGjFihN2rAwAAIcbx26tXVp59omZycnKL830+n3w+X2Da6/VKkvx+v/x+v9PtATCo8fbqdXV1bN9AmGnLNu1o+LAsS7NmzdKwYcPUr1+/Fmvy8vK0YMGCZuMFBQWKjY11sj0Ahh2qlqQobd++XYc/DnY3AOxUW1vb6lqXZVmWU43k5ubqzTff1JYtW9StW7cWa1ra85GRkaETJ04oMTHRqdYABMHug1/rR38q0t9+ep0Gdm95byiA0OT1etWlSxdVVlZe9PvbsT0f06dP1xtvvKFNmzadN3hIksfjkcfjaTbudrvldrudag9AEERFRQV+sn0D4aUt27Tt4cOyLE2fPl1r167Ve++9p6ysLLtXAQAAQpjt4SM3N1crVqzQ3//+dyUkJOjo0aOSpKSkJMXExNi9OgAAEGJsv8/Hiy++qMrKSo0aNUppaWmBf6tWrbJ7VQAAIAQ5ctgFAADgfHi2CwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMInwAAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMIHwAAwCjCBwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACMInwAAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMIHwAAwCjCBwAAMIrwAQAAjIoKdgMA2r/a2lrt3bv3spezr/yUfEdL9dnHMWqouOLyG5PUu3dvxcbG2rIsAGYQPgBc1N69ezVkyBDblnfPctsWpeLiYg0ePNi+BQJwHOEDwEX17t1bxcXFl72c6tM+vblhm24dfZPiYzw2dHa2NwChhfAB4KJiY2Nt2bvg9/t18sQx3XTDdXK73TZ0BiAUccIpAAAwivABAACMInwAAACjCB8AAMAowgcAADDKsfDxwgsvKCsrS506ddKQIUO0efNmp1YFAABCiCPhY9WqVZo5c6Z+85vf6MMPP9Tw4cM1btw4HTx40InVAQCAEOJI+Fi8eLEefPBB/cd//If69Omj/Px8ZWRk6MUXX3RidQAAIITYfpOxM2fOqLi4WI899liT8ZycHG3durVZvc/nk8/nC0x7vV5JZ29G5Pf77W4PQBA1btNs20D4act2bXv4OHHihOrr65WamtpkPDU1VUePHm1Wn5eXpwULFjQbLygo4GFRQJgqLCwMdgsAbFZbW9vqWsdur+5yuZpMW5bVbEyS5s2bp1mzZgWmvV6vMjIylJOTo8TERKfaAxAEfr9fhYWFGjNmDLdXB8JM45GL1rA9fHTp0kWRkZHN9nIcO3as2d4QSfJ4PPJ4mj9gyu1288cJCFNs30D4acs2bfsJp9HR0RoyZEiz3aqFhYW6+eab7V4dAAAIMY4cdpk1a5YmT56s6667TjfddJNefvllHTx4UD//+c8v+l7LsiS1bfcNgNDg9/tVW1srr9fLng8gzDR+bzd+j1+II+Hjxz/+sSoqKvTEE0+ovLxc/fr101tvvaUePXpc9L1VVVWSpIyMDCdaAwAADqqqqlJSUtIFa1xWayKKQQ0NDTpy5IgSEhJaPEEVQOhqPKH80KFDnFAOhBnLslRVVaX09HRFRFz4rI52Fz4AhC+v16ukpCRVVlYSPoAOjAfLAQAAowgfAADAKMIHAGM8Ho9+97vftXhvHwAdB+d8AAAAo9jzAQAAjCJ8AAAAowgfAADAKMIHAI0aNUozZ84MTGdmZio/P9/Y+u+//37dfvvtxtYHILgcub06gNC2Y8cOxcXFGVvfkiVLWvU8CADhgfABoJkrr7zS6Pou9hwIAOGFwy5AOzZq1ChNnz5dM2fOVOfOnZWamqqXX35ZNTU1euCBB5SQkKDs7Gy9/fbbgfd8+umnGj9+vOLj45WamqrJkyfrxIkTgfk1NTWaMmWK4uPjlZaWpmeeeabZer992GXx4sXq37+/4uLilJGRoWnTpqm6ujowf9myZbriiiv07rvvqk+fPoqPj9e///u/q7y8vFWf89uHXUaNGqUZM2bo0UcfVXJysrp27arHH3+8yXtOnTqln/3sZ0pNTVWnTp3Ur18/rV+/PjB/9erV6tu3rzwejzIzM5t9zszMTD311FOB30WPHj3097//XcePH9fEiRMVHx+v/v37q6ioqMn7tm7dqhEjRigmJkYZGRmaMWOGampqWvU5AZxF+ADaueXLl6tLly764IMPNH36dP3iF7/QHXfcoZtvvlk7d+7U2LFjNXnyZNXW1qq8vFwjR47UoEGDVFRUpHfeeUf/+7//qzvvvDOwvDlz5mjDhg1au3atCgoK9N5776m4uPiCPUREROi///u/9fHHH2v58uX65z//qUcffbRJTW1trRYtWqRXX31VmzZt0sGDBzV79uzL+txxcXF6//339Yc//EFPPPGECgsLJZ19AOW4ceO0detW/eUvf9Gnn36q//qv/1JkZKQkqbi4WHfeeafuuusu7dmzR48//rjmz5+vZcuWNVnHs88+q6FDh+rDDz/UrbfeqsmTJ2vKlCm67777tHPnTvXs2VNTpkwJHBLas2ePxo4dq0mTJumjjz7SqlWrtGXLFv3yl7+85M8JdEgWgHZr5MiR1rBhwwLTdXV1VlxcnDV58uTAWHl5uSXJ2rZtmzV//nwrJyenyTIOHTpkSbL27dtnVVVVWdHR0dbKlSsD8ysqKqyYmBjr4YcfDoz16NHDevbZZ8/b1+uvv26lpKQEpl955RVLklVaWhoYe/75563U1NRWfc6pU6daEydOPO/ntizLuv766625c+dalmVZ7777rhUREWHt27evxeXdc8891pgxY5qMzZkzx7r22msD0z169LDuu+++wHTj73H+/PmBsW3btlmSrPLycsuyLGvy5MnWz372sybL3bx5sxUREWGdPn26VZ8VgGVxzgfQzg0YMCDwOjIyUikpKerfv39gLDU1VZJ07NgxFRcXa8OGDYqPj2+2nP379+v06dM6c+aMbrrppsB4cnKyrrnmmgv2sGHDBj399NP69NNP5fV6VVdXp2+++UY1NTWBE1NjY2OVnZ0deE9aWpqOHTt2aR9aTT/3t5e3a9cudevWTb169WrxvZ999pkmTpzYZGzo0KHKz89XfX19YA/Jueto/D2e73fbtWtXFRcXq7S0VH/9618DNZZlqaGhQWVlZerTp8+lflygQyF8AO2c2+1uMu1yuZqMuVwuSWcPRTQ0NGjChAlauHBhs+WkpaXp888/b/P6v/zyS40fP14///nP9eSTTyo5OVlbtmzRgw8+KL/ff8E+rcu4gqWl5TU0NEiSYmJiLvhey7ICv5dzxy60jsb68/1uG38+9NBDmjFjRrNlde/e/YI9Afg/hA8gjAwePFirV69WZmamoqKab949e/aU2+3W9u3bA1+WJ0+eVElJiUaOHNniMouKilRXV6dnnnlGERFnTxN7/fXXnfsQrTBgwAB99dVXKikpaXHvx7XXXqstW7Y0Gdu6dat69eoV2OtxKQYPHqxPPvlEPXv2vORlAOCEUyCs5Obm6uuvv9bdd9+tDz74QF988YUKCgr0k5/8RPX19YqPj9eDDz6oOXPm6B//+Ic+/vhj3X///YFQ0ZLs7GzV1dXpueee0xdffKFXX31VL730ksFP1dzIkSM1YsQI/fCHP1RhYaHKysr09ttv65133pEkPfLII/rHP/6hJ598UiUlJVq+fLmWLl16WSfAStLcuXO1bds25ebmateuXfr888/1xhtvaPr06XZ8LKDDIHwAYSQ9PV3/+te/VF9fr7Fjx6pfv356+OGHlZSUFAgYf/zjHzVixAj94Ac/0C233KJhw4ZpyJAh513moEGDtHjxYi1cuFD9+vXTX//6V+Xl5Zn6SOe1evVqXX/99br77rt17bXX6tFHH1V9fb2ks3soXn/9da1cuVL9+vXTb3/7Wz3xxBO6//77L2udAwYM0MaNG/X5559r+PDh+t73vqf58+crLS3Nhk8EdBwu63IOygIAALQRez4AAIBRhA8AjouPjz/vv82bNwe7PQCGcdgFgONKS0vPO+/qq6++6KWzAMIL4QMAABjFYRcAAGAU4QMAABhF+AAAAEYRPgAAgFGEDwAAYBThAwAAGEX4AAAARhE+AACAUf8PYexWQyPSqH4AAAAASUVORK5CYII=","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["california_housing_dataframe.boxplot(column=[\"median_income\"])"]},{"cell_type":"markdown","metadata":{},"source":["You can learn other plot options in the plot section of the pandas API [here](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html)."]},{"cell_type":"markdown","metadata":{},"source":["## Split-apply-combine on Tidy Data\n","\n","### Tidy Data\n","\n","Hadley Wickham wrote a great [article](https://www.jstatsoft.org/article/view/v059i10) in favor of “tidy data.” Tidy data frames follow the rules:\n","\n","* Each variable is a column.\n","\n","* Each observation is a row.\n","\n","* Each type of observation has its own separate data frame.\n","\n","This is less pretty to visualize as a table (you may notice too many rows with repeated values in certain columns), but the representation of data which is convenient for visualization is different from that which is convenient for analysis. A tidy data frame is almost always much easier to work with than non-tidy formats.\n","\n","Let's look at the titanic dataset below."]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"executionInfo":{"elapsed":2348,"status":"ok","timestamp":1692083896280,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"Y8tK6D1Q4qGB","outputId":"1c722b54-e3fb-43f7-9d80-32c814ea33ba"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
survived
\n","
pclass
\n","
sex
\n","
age
\n","
sibsp
\n","
parch
\n","
fare
\n","
embarked
\n","
class
\n","
who
\n","
adult_male
\n","
deck
\n","
embark_town
\n","
alive
\n","
alone
\n","
\n"," \n"," \n","
\n","
0
\n","
0
\n","
3
\n","
male
\n","
22.0
\n","
1
\n","
0
\n","
7.2500
\n","
S
\n","
Third
\n","
man
\n","
True
\n","
NaN
\n","
Southampton
\n","
no
\n","
False
\n","
\n","
\n","
1
\n","
1
\n","
1
\n","
female
\n","
38.0
\n","
1
\n","
0
\n","
71.2833
\n","
C
\n","
First
\n","
woman
\n","
False
\n","
C
\n","
Cherbourg
\n","
yes
\n","
False
\n","
\n","
\n","
2
\n","
1
\n","
3
\n","
female
\n","
26.0
\n","
0
\n","
0
\n","
7.9250
\n","
S
\n","
Third
\n","
woman
\n","
False
\n","
NaN
\n","
Southampton
\n","
yes
\n","
True
\n","
\n","
\n","
3
\n","
1
\n","
1
\n","
female
\n","
35.0
\n","
1
\n","
0
\n","
53.1000
\n","
S
\n","
First
\n","
woman
\n","
False
\n","
C
\n","
Southampton
\n","
yes
\n","
False
\n","
\n","
\n","
4
\n","
0
\n","
3
\n","
male
\n","
35.0
\n","
0
\n","
0
\n","
8.0500
\n","
S
\n","
Third
\n","
man
\n","
True
\n","
NaN
\n","
Southampton
\n","
no
\n","
True
\n","
\n"," \n","
\n","
"],"text/plain":[" survived pclass sex age sibsp parch fare embarked class \\\n","0 0 3 male 22.0 1 0 7.2500 S Third \n","1 1 1 female 38.0 1 0 71.2833 C First \n","2 1 3 female 26.0 0 0 7.9250 S Third \n","3 1 1 female 35.0 1 0 53.1000 S First \n","4 0 3 male 35.0 0 0 8.0500 S Third \n","\n"," who adult_male deck embark_town alive alone \n","0 man True NaN Southampton no False \n","1 woman False C Cherbourg yes False \n","2 woman False NaN Southampton yes True \n","3 woman False C Southampton yes False \n","4 man True NaN Southampton no True "]},"execution_count":8,"metadata":{},"output_type":"execute_result"}],"source":["# load dataset titanic from seaborn package\n","titanic = sns.load_dataset('titanic')\n","titanic.head()"]},{"cell_type":"markdown","metadata":{},"source":["According to the statements above, this dataframe is tidy, so it is easier to process."]},{"cell_type":"markdown","metadata":{},"source":["### Split-apply-combine"]},{"cell_type":"markdown","metadata":{},"source":["We might be interested in computing a statistic, let's say the survival mean, not for the entire data, but according to subgroups.\n","Basically, we want to:\n","\n","* Split the data according to the 'sex' criterion field, i.e., split it up so we have a separate data set for the two classes, you for 'male' and one for 'female'.\n","\n","* Apply a function (`mean`) to the 'survived' field in these split data sets.\n","\n","* Combine the results of these averages on the split data set into a new, summary data set that contains the two classes ('male' and 'female') and mean survival rate for each.\n","\n","The first step is to apply a `groupby` operation."]},{"cell_type":"code","execution_count":9,"metadata":{},"outputs":[{"data":{"text/plain":[""]},"execution_count":9,"metadata":{},"output_type":"execute_result"}],"source":["grouped = titanic.groupby('sex')\n","grouped"]},{"cell_type":"markdown","metadata":{},"source":["There is not much to see in the DataFrameGroupBy object that resulted. But there is a lot we can do with this object.\n","Now, we apply the `mean` function and check the combined result of this operation."]},{"cell_type":"code","execution_count":10,"metadata":{},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
survived
\n","
pclass
\n","
age
\n","
sibsp
\n","
parch
\n","
fare
\n","
adult_male
\n","
alone
\n","
\n","
\n","
sex
\n","
\n","
\n","
\n","
\n","
\n","
\n","
\n","
\n","
\n"," \n"," \n","
\n","
female
\n","
0.742038
\n","
2.159236
\n","
27.915709
\n","
0.694268
\n","
0.649682
\n","
44.479818
\n","
0.000000
\n","
0.401274
\n","
\n","
\n","
male
\n","
0.188908
\n","
2.389948
\n","
30.726645
\n","
0.429809
\n","
0.235702
\n","
25.523893
\n","
0.930676
\n","
0.712305
\n","
\n"," \n","
\n","
"],"text/plain":[" survived pclass age sibsp parch fare \\\n","sex \n","female 0.742038 2.159236 27.915709 0.694268 0.649682 44.479818 \n","male 0.188908 2.389948 30.726645 0.429809 0.235702 25.523893 \n","\n"," adult_male alone \n","sex \n","female 0.000000 0.401274 \n","male 0.930676 0.712305 "]},"execution_count":10,"metadata":{},"output_type":"execute_result"}],"source":["mean_measurements_per_sex = grouped.mean(numeric_only = True)\n","mean_measurements_per_sex"]},{"cell_type":"markdown","metadata":{},"source":["Here the `numeric_only` option is set to disconsider for calculating mean over columns that contain strings like 'embark_town' for example.\n","\n","The 'sex' field is now the index of our dataframe. We can put it back as a column with the `.reset_index` method."]},{"cell_type":"code","execution_count":11,"metadata":{},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
sex
\n","
survived
\n","
pclass
\n","
age
\n","
sibsp
\n","
parch
\n","
fare
\n","
adult_male
\n","
alone
\n","
\n"," \n"," \n","
\n","
0
\n","
female
\n","
0.742038
\n","
2.159236
\n","
27.915709
\n","
0.694268
\n","
0.649682
\n","
44.479818
\n","
0.000000
\n","
0.401274
\n","
\n","
\n","
1
\n","
male
\n","
0.188908
\n","
2.389948
\n","
30.726645
\n","
0.429809
\n","
0.235702
\n","
25.523893
\n","
0.930676
\n","
0.712305
\n","
\n"," \n","
\n","
"],"text/plain":[" sex survived pclass age sibsp parch fare \\\n","0 female 0.742038 2.159236 27.915709 0.694268 0.649682 44.479818 \n","1 male 0.188908 2.389948 30.726645 0.429809 0.235702 25.523893 \n","\n"," adult_male alone \n","0 0.000000 0.401274 \n","1 0.930676 0.712305 "]},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"source":["mean_measurements_per_sex = mean_measurements_per_sex.reset_index()\n","mean_measurements_per_sex"]},{"cell_type":"markdown","metadata":{},"source":["We may choose to display only the 'sex' and 'survived' columns."]},{"cell_type":"code","execution_count":12,"metadata":{},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
sex
\n","
survived
\n","
\n"," \n"," \n","
\n","
0
\n","
female
\n","
0.742038
\n","
\n","
\n","
1
\n","
male
\n","
0.188908
\n","
\n"," \n","
\n","
"],"text/plain":[" sex survived\n","0 female 0.742038\n","1 male 0.188908"]},"execution_count":12,"metadata":{},"output_type":"execute_result"}],"source":["mean_measurements_per_sex[['sex', 'survived']]"]},{"cell_type":"markdown","metadata":{},"source":["Now that you know all the individual steps, here is all the above steps in one shot."]},{"cell_type":"code","execution_count":13,"metadata":{},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
\n","
sex
\n","
survived
\n","
\n"," \n"," \n","
\n","
0
\n","
female
\n","
0.742038
\n","
\n","
\n","
1
\n","
male
\n","
0.188908
\n","
\n"," \n","
\n","
"],"text/plain":[" sex survived\n","0 female 0.742038\n","1 male 0.188908"]},"execution_count":13,"metadata":{},"output_type":"execute_result"}],"source":["mean_survival_per_sex = titanic.groupby('sex').mean(numeric_only = True).reset_index()[['sex', 'survived']]\n","mean_survival_per_sex"]},{"cell_type":"markdown","metadata":{"id":"TKjzuMdh4CTV"},"source":["## Pivot Tables"]},{"cell_type":"markdown","metadata":{"id":"G73YCh66wgj2"},"source":["This is useful, but we might like to go one step deeper and look at survival rates by both sex and, say, class.\n","Using the vocabulary of `groupby`, we might proceed using a process like this:\n","we first *group by* 'class' **and** 'sex', then *select* survival, *apply* a mean aggregate, *combine* the resulting groups, and finally *unstack* the hierarchical index to reveal the hidden multidimensionality. In code:"]},{"cell_type":"code","execution_count":14,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":143},"executionInfo":{"elapsed":14,"status":"ok","timestamp":1692083896281,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"EEPIu7lywgj4","jupyter":{"outputs_hidden":false},"outputId":"349922a9-e39d-4eeb-d78d-a3e27306b2ef"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
class
\n","
First
\n","
Second
\n","
Third
\n","
\n","
\n","
sex
\n","
\n","
\n","
\n","
\n"," \n"," \n","
\n","
female
\n","
0.968085
\n","
0.921053
\n","
0.500000
\n","
\n","
\n","
male
\n","
0.368852
\n","
0.157407
\n","
0.135447
\n","
\n"," \n","
\n","
"],"text/plain":["class First Second Third\n","sex \n","female 0.968085 0.921053 0.500000\n","male 0.368852 0.157407 0.135447"]},"execution_count":14,"metadata":{},"output_type":"execute_result"}],"source":["titanic.groupby(['sex', 'class'])['survived'].aggregate('mean').unstack()"]},{"cell_type":"markdown","metadata":{"id":"Zypmm-yZwgj7"},"source":["This gives us a better idea of how both sex and class affected survival, but the code is starting to look a bit garbled.\n","While each step of this pipeline makes sense in light of the tools we've previously discussed, the long string of code is not particularly easy to read or use.\n","This two-dimensional `groupby` is common enough that Pandas includes a convenience routine, `pivot_table`, which succinctly handles this type of multidimensional aggregation."]},{"cell_type":"markdown","metadata":{"id":"6bpHkQ0dwgj9"},"source":["### Pivot Table Syntax\n","\n","Here is the equivalent to the preceding operation using the `DataFrame.pivot_table` method:"]},{"cell_type":"code","execution_count":15,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":143},"executionInfo":{"elapsed":10,"status":"ok","timestamp":1692083898512,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"qIIz7i8Mwgj_","jupyter":{"outputs_hidden":false},"outputId":"64236ada-3edf-4ed8-af81-6b1d85da2ead"},"outputs":[{"data":{"text/html":["
\n","\n","
\n"," \n","
\n","
class
\n","
First
\n","
Second
\n","
Third
\n","
\n","
\n","
sex
\n","
\n","
\n","
\n","
\n"," \n"," \n","
\n","
female
\n","
0.968085
\n","
0.921053
\n","
0.500000
\n","
\n","
\n","
male
\n","
0.368852
\n","
0.157407
\n","
0.135447
\n","
\n"," \n","
\n","
"],"text/plain":["class First Second Third\n","sex \n","female 0.968085 0.921053 0.500000\n","male 0.368852 0.157407 0.135447"]},"execution_count":15,"metadata":{},"output_type":"execute_result"}],"source":["titanic.pivot_table('survived', index='sex', columns='class', aggfunc='mean')"]},{"cell_type":"markdown","metadata":{"id":"N4nkDbjuwgkA"},"source":["This is eminently more readable than the manual `groupby` approach, and produces the same result.\n","As you might expect of an early 20th-century transatlantic cruise, the survival gradient favors both higher classes and people recorded as females in the\n","data. First-class females survived with near certainty (hi, Rose!), while only one in eight or so third-class males survived (sorry, Jack!)."]},{"cell_type":"markdown","metadata":{"id":"eBwLC8X8CD4U"},"source":["## Pivot Table Widgets"]},{"cell_type":"markdown","metadata":{"id":"cUxzWxTwCYdk"},"source":["Some of the widgets needs to be specificaly tweaked for Google Colab or Jupyter Notebooks"]},{"cell_type":"code","execution_count":16,"metadata":{"executionInfo":{"elapsed":10,"status":"ok","timestamp":1692083921584,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"uzfXtb1AsoII"},"outputs":[],"source":["from pivottablejs import pivot_ui\n","from IPython.display import HTML\n","from IPython.display import IFrame\n","import json, io\n","\n","# Google colab alternative template\n","\n","TEMPLATE = u\"\"\"\n","\n","\n"," \n"," \n"," PivotTable.js\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n","\n"," \n"," \n"," \n"," \n"," \n","\n"," \n"," \n"," \n"," \n","
%(csv)s
\n","\n"," \n","\n"," \n"," \n","\n"," \n","\n","\"\"\"\n","\n","\n","def pivot_cht_html(df, outfile_path = \"pivottablejs.html\", url=\"\",\n"," width=\"100%\", height=\"500\",json_kwargs='', **kwargs):\n"," with io.open(outfile_path, 'wt', encoding='utf8') as outfile:\n"," csv = df.to_csv(encoding='utf8')\n"," if hasattr(csv, 'decode'):\n"," csv = csv.decode('utf8')\n"," outfile.write(TEMPLATE %\n"," dict(csv=csv, kwargs=json.dumps(kwargs),json_kwargs=json_kwargs))\n","\n"," IFrame(src=url or outfile_path, width=width, height=height)\n"," return HTML(outfile_path)"]},{"cell_type":"markdown","metadata":{"id":"kcqb0jA7ClZE"},"source":["Calling the function 'pivot_ui' with Pandas DataFrame as input will allow you interactively explore and plot its values"]},{"cell_type":"code","execution_count":17,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":311},"executionInfo":{"elapsed":8,"status":"ok","timestamp":1692083921584,"user":{"displayName":"Martin Schätz","userId":"14609383414092679868"},"user_tz":-120},"id":"GXd47Au2sj4i","outputId":"1e6472cb-aa0a-4bf8-c865-c51f8e38eedb"},"outputs":[{"data":{"text/html":["\n","\n","\n"," \n"," \n"," PivotTable.js\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","\n","\n"," \n"," \n"," \n"," \n"," \n","\n"," \n"," \n"," \n"," \n","