From be7d031ea08b7a1363f2371a78e0c0b16bb87c3e Mon Sep 17 00:00:00 2001 From: gsingh58 <gurmail-singh@wisc.edu> Date: Fri, 1 Dec 2023 00:17:28 -0600 Subject: [PATCH] Lec35 updated --- .../35N_Plotting-2/bus.db | Bin 0 -> 237568 bytes .../35N_Plotting-2/iris-flowers.db | Bin 0 -> 16384 bytes .../35N_Plotting-2/iris.csv | 151 + .../lec_35N_plotting2_scatter_plots.ipynb | 3027 +++++++++++++++++ ..._scatter_plots_template_Gurmail_lec1.ipynb | 857 +++++ ..._scatter_plots_template_Gurmail_lec2.ipynb | 857 +++++ 6 files changed, 4892 insertions(+) create mode 100644 f23/Gurmail_Lecture_Notes/35N_Plotting-2/bus.db create mode 100644 f23/Gurmail_Lecture_Notes/35N_Plotting-2/iris-flowers.db create mode 100644 f23/Gurmail_Lecture_Notes/35N_Plotting-2/iris.csv create mode 100644 f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots.ipynb create mode 100644 f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots_template_Gurmail_lec1.ipynb create mode 100644 f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots_template_Gurmail_lec2.ipynb diff --git a/f23/Gurmail_Lecture_Notes/35N_Plotting-2/bus.db b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/bus.db new file mode 100644 index 0000000000000000000000000000000000000000..3303edbe663ab1bcff61a5c3977edc23fbd1f0c7 GIT binary patch literal 237568 zcmeF)b(9px-#_}UE}8C8oE>CYb_ZYFEjzfo`{M5IEChE;fRKe?A%p}%f(Do18WNmf zA!u+XaI4<i4bN<T-#_j>&wb8w?p@AFy*?X0^i0>MySlokr?+06>Ye+wkLb{|PxsdS zA_{8BG(xmsM1-bkIpu#P<bU>`Ofq2h4^r}9;{O!p)bd2k_sG9xo=cjqiT91SpbV1! zB=ta24<z+KQV%5cKvEAR^*~Y&B=ta24<z+KQV;z1_CWn)B5f`|>D#$SyY_=R4{Ft? zXa9cf`?kW5332gqbt{yqUm>DO&GHo*M?@ydiL6yKA~GQ{G9r5<{#|5_xC%Z;TECx+ zZr`tUn{MqB{yw2CYAvpQnX=U@{Fi^~wEnGpo%$6jRj3>7jEIP=Rkmt{a`mf}j|}<0 z{rYt7)z^NfSZb@z?Lt!${%_w-J^S=))uVOy_W!59?cb+cWJLW6jqBs3>UC<}t9`xt z)!X;z*soJ$gk0z9&K%9XB5mG`WT@RcZF;uu)2?%mjtTu^|3v@QL-yY!<e`u3|Mg#c zDd2IW&6tslPLE!)Gi>$Hp0fY9T)_Xauj=*d*(-5R)m7CDUH9s(`z5R$*1CGn9{=U1 z@~t~}8(h{}$G&zaaJj{0^QBeW9rwNQJ@Y;A-S%DgUGkmro%9{{?ep#MZT9`>`_A{Z z?<?OIzPY~XzKOmuzTv)szTUpBzV^OWz9znUz8bztzB0a&zQVq|z8t<NU&e$*{`YRq zNlQ!WfutTt>Vc#lNa}&49!Tneq#j7>futTt>Vc#lNa}(A{vOB^pIa_8{L3n`jb7M6 zwgngJvQ7Vm`XD^@f>N?gH@}H&bIuze+g$Tf$Tq|0d1RaAv#PR9KDVQ6^UhTtn&+F7 zS+<#He<Ir=vzo~^#mqsnEif~+Y_rcOAls<vwPc%VT36YonP$i~<<u;)O*W;hY_m;n zCELQ2hRHVLq%he=Oe`$hLKAAs)<3?RY;%t{Wg8f${#E|5Wn>%nX$#qA9Wz+Akz>-x zHtlHjS|YBdY*}ZuMo!-Z*=jj_Pkpz17kwvudwrXHt9^@oa}xeS{bkahq#j7>futTt z>Vc#lNa}&49!Tneq#j7>futTt>Vc#lNa}(AmL5pupt|nO>&+*Z=2NkIt9zS_y()H9 zaj8oR9u=F{%^NaytJoNBjF7QQ#g4QNby>ivV*UePCu38^tQxB>V?)LIpZZN1J5)?Y zl2Pj3{Lb19O`i8}^3C@3@Kx~zyzjl|z3aU*yj{H&y_r34J!d@YJX1ZLJmoy$?pN;9 z?lta7?)L7WJH6|<>!fS7YrLzCtF$Z3`NVn5`Hk~aXDeq3XKM4IdDvWG#+l8{qGk%? zzHz`<YK$<N7^RG~j>nFpj+Krvj+Tz%j#T1-I3$*fQKFeBB9ilad_P~phx5j~AosG{ zY%g2HhOh=KA9K;0^Z;E-N6;p;5cTPI^nLnbeW>10&#$}5Ut~A=k_;mCNFHL!Rr>HJ zs<VUW#NlvsVh>rc!sI6#DtvW#XTyf87v;S$BN$%k`&2`&R*vdqC3R%?d9cEy<fS@w zNWZgT<5?MwewI0y_2JSp&eFZ3I$B8`*nRz9NzuEfH_!fTPgDmhsXe=wRVLl=`&SQ^ zFZXN5bh~QA{Ane%x02eid-PvP&#d><⪻_ZpkH0&iB{*#wFyE7CtKVcYLtmdbOzM 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�G+f0I`-<&Dx}hNzHBd7f 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 G%)bCN*O(*# literal 0 HcmV?d00001 diff --git a/f23/Gurmail_Lecture_Notes/35N_Plotting-2/iris-flowers.db b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/iris-flowers.db new file mode 100644 index 0000000000000000000000000000000000000000..4b3fca4ebaed7a7ba9f8a1dc97d521bf57636e24 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/f23/Gurmail_Lecture_Notes/35N_Plotting-2/iris.csv b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/iris.csv new file mode 100644 index 0000000..5c4316c --- /dev/null +++ b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/iris.csv @@ -0,0 +1,151 @@ +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3.0,1.4,0.2,Iris-setosa +4.7,3.2,1.3,0.2,Iris-setosa +4.6,3.1,1.5,0.2,Iris-setosa +5.0,3.6,1.4,0.2,Iris-setosa +5.4,3.9,1.7,0.4,Iris-setosa +4.6,3.4,1.4,0.3,Iris-setosa +5.0,3.4,1.5,0.2,Iris-setosa +4.4,2.9,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.4,3.7,1.5,0.2,Iris-setosa +4.8,3.4,1.6,0.2,Iris-setosa +4.8,3.0,1.4,0.1,Iris-setosa +4.3,3.0,1.1,0.1,Iris-setosa +5.8,4.0,1.2,0.2,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +5.7,3.8,1.7,0.3,Iris-setosa +5.1,3.8,1.5,0.3,Iris-setosa +5.4,3.4,1.7,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +4.6,3.6,1.0,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.8,3.4,1.9,0.2,Iris-setosa +5.0,3.0,1.6,0.2,Iris-setosa +5.0,3.4,1.6,0.4,Iris-setosa +5.2,3.5,1.5,0.2,Iris-setosa +5.2,3.4,1.4,0.2,Iris-setosa +4.7,3.2,1.6,0.2,Iris-setosa +4.8,3.1,1.6,0.2,Iris-setosa +5.4,3.4,1.5,0.4,Iris-setosa +5.2,4.1,1.5,0.1,Iris-setosa +5.5,4.2,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.0,3.2,1.2,0.2,Iris-setosa +5.5,3.5,1.3,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +4.4,3.0,1.3,0.2,Iris-setosa +5.1,3.4,1.5,0.2,Iris-setosa +5.0,3.5,1.3,0.3,Iris-setosa +4.5,2.3,1.3,0.3,Iris-setosa +4.4,3.2,1.3,0.2,Iris-setosa +5.0,3.5,1.6,0.6,Iris-setosa +5.1,3.8,1.9,0.4,Iris-setosa +4.8,3.0,1.4,0.3,Iris-setosa +5.1,3.8,1.6,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +5.3,3.7,1.5,0.2,Iris-setosa +5.0,3.3,1.4,0.2,Iris-setosa +7.0,3.2,4.7,1.4,Iris-versicolor +6.4,3.2,4.5,1.5,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +5.5,2.3,4.0,1.3,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +5.7,2.8,4.5,1.3,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +4.9,2.4,3.3,1.0,Iris-versicolor +6.6,2.9,4.6,1.3,Iris-versicolor +5.2,2.7,3.9,1.4,Iris-versicolor +5.0,2.0,3.5,1.0,Iris-versicolor +5.9,3.0,4.2,1.5,Iris-versicolor +6.0,2.2,4.0,1.0,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.6,2.9,3.6,1.3,Iris-versicolor +6.7,3.1,4.4,1.4,Iris-versicolor +5.6,3.0,4.5,1.5,Iris-versicolor +5.8,2.7,4.1,1.0,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +6.1,2.8,4.0,1.3,Iris-versicolor +6.3,2.5,4.9,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +6.4,2.9,4.3,1.3,Iris-versicolor +6.6,3.0,4.4,1.4,Iris-versicolor +6.8,2.8,4.8,1.4,Iris-versicolor +6.7,3.0,5.0,1.7,Iris-versicolor +6.0,2.9,4.5,1.5,Iris-versicolor +5.7,2.6,3.5,1.0,Iris-versicolor +5.5,2.4,3.8,1.1,Iris-versicolor +5.5,2.4,3.7,1.0,Iris-versicolor +5.8,2.7,3.9,1.2,Iris-versicolor +6.0,2.7,5.1,1.6,Iris-versicolor +5.4,3.0,4.5,1.5,Iris-versicolor +6.0,3.4,4.5,1.6,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +6.3,2.3,4.4,1.3,Iris-versicolor +5.6,3.0,4.1,1.3,Iris-versicolor +5.5,2.5,4.0,1.3,Iris-versicolor +5.5,2.6,4.4,1.2,Iris-versicolor +6.1,3.0,4.6,1.4,Iris-versicolor +5.8,2.6,4.0,1.2,Iris-versicolor +5.0,2.3,3.3,1.0,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.7,3.0,4.2,1.2,Iris-versicolor +5.7,2.9,4.2,1.3,Iris-versicolor +6.2,2.9,4.3,1.3,Iris-versicolor +5.1,2.5,3.0,1.1,Iris-versicolor +5.7,2.8,4.1,1.3,Iris-versicolor +6.3,3.3,6.0,2.5,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +7.1,3.0,5.9,2.1,Iris-virginica +6.3,2.9,5.6,1.8,Iris-virginica +6.5,3.0,5.8,2.2,Iris-virginica +7.6,3.0,6.6,2.1,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +7.2,3.6,6.1,2.5,Iris-virginica +6.5,3.2,5.1,2.0,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +6.8,3.0,5.5,2.1,Iris-virginica +5.7,2.5,5.0,2.0,Iris-virginica +5.8,2.8,5.1,2.4,Iris-virginica +6.4,3.2,5.3,2.3,Iris-virginica +6.5,3.0,5.5,1.8,Iris-virginica +7.7,3.8,6.7,2.2,Iris-virginica +7.7,2.6,6.9,2.3,Iris-virginica +6.0,2.2,5.0,1.5,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +5.6,2.8,4.9,2.0,Iris-virginica +7.7,2.8,6.7,2.0,Iris-virginica +6.3,2.7,4.9,1.8,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica +7.2,3.2,6.0,1.8,Iris-virginica +6.2,2.8,4.8,1.8,Iris-virginica +6.1,3.0,4.9,1.8,Iris-virginica +6.4,2.8,5.6,2.1,Iris-virginica +7.2,3.0,5.8,1.6,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +7.9,3.8,6.4,2.0,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +6.3,2.8,5.1,1.5,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +7.7,3.0,6.1,2.3,Iris-virginica +6.3,3.4,5.6,2.4,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +6.0,3.0,4.8,1.8,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.1,5.6,2.4,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.8,3.2,5.9,2.3,Iris-virginica +6.7,3.3,5.7,2.5,Iris-virginica +6.7,3.0,5.2,2.3,Iris-virginica +6.3,2.5,5.0,1.9,Iris-virginica +6.5,3.0,5.2,2.0,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +5.9,3.0,5.1,1.8,Iris-virginica + diff --git a/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots.ipynb b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots.ipynb new file mode 100644 index 0000000..c1c91ad --- /dev/null +++ b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots.ipynb @@ -0,0 +1,3027 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Announcements - Friday, December 1\n", + "\n", + "* Download ALL files for today's lecture\n", + "* <b>If you have any problem with P7 or P8 grades, please send me (Gurmail.Singh@wisc.edu) an email by December 7.</b>\n", + "* Quiz 9 is due tonight at 11:59 pm\n", + "* Late days may not be used on P13\n", + "* If you have questions, it is almost always faster to \n", + " * Post on Piazza\n", + " * Go to [office hours](https://sites.google.com/wisc.edu/cs220-oh-f23/home?pli=1) \n", + "### Conflict Form\n", + " * [Final - December 19, 7:45 am](https://cs220.cs.wisc.edu/f23/surveys.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plotting 2 - Scatter Plots" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<style>em { color: red; }</style> <style>.container { width:100% !important; }</style>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# ignore this cell (it's just to make certain text red later, but you don't need to understand it).\n", + "from IPython.core.display import display, HTML\n", + "display(HTML('<style>em { color: red; }</style> <style>.container { width:100% !important; }</style>'))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from pandas import DataFrame, Series\n", + "\n", + "import sqlite3\n", + "import os\n", + "\n", + "import matplotlib\n", + "# new import statement\n", + "from matplotlib import pyplot as plt\n", + "\n", + "import requests\n", + "matplotlib.rcParams[\"font.size\"] = 12" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Wrapping up bus dataset example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### What are the top routes, and how many people ride them daily?" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "path = \"bus.db\"\n", + "# assert existence of path\n", + "assert os.path.exists(path)\n", + "\n", + "# establish connection to bus.db\n", + "conn = sqlite3.connect(path)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Route</th>\n", + " <th>daily</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>80</td>\n", + " <td>10211.79</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>4808.03</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>6</td>\n", + " <td>4537.02</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>10</td>\n", + " <td>4425.23</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>3</td>\n", + " <td>2708.55</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>4</td>\n", + " <td>2656.99</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>15</td>\n", + " <td>2179.98</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>38</td>\n", + " <td>1955.85</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>28</td>\n", + " <td>1868.31</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>5</td>\n", + " <td>1634.69</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>14</td>\n", + " <td>1373.81</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>16</td>\n", + " <td>1258.93</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>18</td>\n", + " <td>1039.57</td>\n", + " </tr>\n", + " <tr>\n", + " <th>13</th>\n", + " <td>22</td>\n", + " <td>995.21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>19</td>\n", + " <td>827.53</td>\n", + " </tr>\n", + " <tr>\n", + " <th>15</th>\n", + " <td>50</td>\n", + " <td>748.75</td>\n", + " </tr>\n", + " <tr>\n", + " <th>16</th>\n", + " <td>67</td>\n", + " <td>729.54</td>\n", + " </tr>\n", + " <tr>\n", + " <th>17</th>\n", + " <td>70</td>\n", + " <td>710.80</td>\n", + " </tr>\n", + " <tr>\n", + " <th>18</th>\n", + " <td>30</td>\n", + " <td>687.13</td>\n", + " </tr>\n", + " <tr>\n", + " <th>19</th>\n", + " <td>72</td>\n", + " <td>636.95</td>\n", + " </tr>\n", + " <tr>\n", + " <th>20</th>\n", + " <td>13</td>\n", + " <td>615.20</td>\n", + " </tr>\n", + " <tr>\n", + " <th>21</th>\n", + " <td>40</td>\n", + " <td>602.92</td>\n", + " </tr>\n", + " <tr>\n", + " <th>22</th>\n", + " <td>21</td>\n", + " <td>590.86</td>\n", + " </tr>\n", + " <tr>\n", + " <th>23</th>\n", + " <td>20</td>\n", + " <td>545.91</td>\n", + " </tr>\n", + " <tr>\n", + " <th>24</th>\n", + " <td>71</td>\n", + " <td>497.09</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25</th>\n", + " <td>56</td>\n", + " <td>477.44</td>\n", + " </tr>\n", + " <tr>\n", + " <th>26</th>\n", + " <td>57</td>\n", + " <td>464.86</td>\n", + " </tr>\n", + " <tr>\n", + " <th>27</th>\n", + " <td>73</td>\n", + " <td>448.87</td>\n", + " </tr>\n", + " <tr>\n", + " <th>28</th>\n", + " <td>75</td>\n", + " <td>435.35</td>\n", + " </tr>\n", + " <tr>\n", + " <th>29</th>\n", + " <td>44</td>\n", + " <td>416.90</td>\n", + " </tr>\n", + " <tr>\n", + " <th>30</th>\n", + " <td>11</td>\n", + " <td>392.43</td>\n", + " </tr>\n", + " <tr>\n", + " <th>31</th>\n", + " <td>47</td>\n", + " <td>379.89</td>\n", + " </tr>\n", + " <tr>\n", + " <th>32</th>\n", + " <td>81</td>\n", + " <td>371.76</td>\n", + " </tr>\n", + " <tr>\n", + " <th>33</th>\n", + " <td>58</td>\n", + " <td>362.59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>34</th>\n", + " <td>12</td>\n", + " <td>329.51</td>\n", + " </tr>\n", + " <tr>\n", + " <th>35</th>\n", + " <td>37</td>\n", + " <td>319.82</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36</th>\n", + " <td>27</td>\n", + " <td>298.07</td>\n", + " </tr>\n", + " <tr>\n", + " <th>37</th>\n", + " <td>17</td>\n", + " <td>294.55</td>\n", + " </tr>\n", + " <tr>\n", + " <th>38</th>\n", + " <td>82</td>\n", + " <td>219.48</td>\n", + " </tr>\n", + " <tr>\n", + " <th>39</th>\n", + " <td>33</td>\n", + " <td>206.53</td>\n", + " </tr>\n", + " <tr>\n", + " <th>40</th>\n", + " <td>1</td>\n", + " <td>181.44</td>\n", + " </tr>\n", + " <tr>\n", + " <th>41</th>\n", + " <td>52</td>\n", + " <td>176.24</td>\n", + " </tr>\n", + " <tr>\n", + " <th>42</th>\n", + " <td>39</td>\n", + " <td>140.89</td>\n", + " </tr>\n", + " <tr>\n", + " <th>43</th>\n", + " <td>35</td>\n", + " <td>140.42</td>\n", + " </tr>\n", + " <tr>\n", + " <th>44</th>\n", + " <td>31</td>\n", + " <td>139.87</td>\n", + " </tr>\n", + " <tr>\n", + " <th>45</th>\n", + " <td>51</td>\n", + " <td>137.57</td>\n", + " </tr>\n", + " <tr>\n", + " <th>46</th>\n", + " <td>55</td>\n", + " <td>129.23</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47</th>\n", + " <td>84</td>\n", + " <td>114.21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>48</th>\n", + " <td>29</td>\n", + " <td>111.28</td>\n", + " </tr>\n", + " <tr>\n", + " <th>49</th>\n", + " <td>26</td>\n", + " <td>107.10</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50</th>\n", + " <td>32</td>\n", + " <td>86.47</td>\n", + " </tr>\n", + " <tr>\n", + " <th>51</th>\n", + " <td>34</td>\n", + " <td>81.97</td>\n", + " </tr>\n", + " <tr>\n", + " <th>52</th>\n", + " <td>49</td>\n", + " <td>61.83</td>\n", + " </tr>\n", + " <tr>\n", + " <th>53</th>\n", + " <td>36</td>\n", + " <td>59.13</td>\n", + " </tr>\n", + " <tr>\n", + " <th>54</th>\n", + " <td>48</td>\n", + " <td>30.65</td>\n", + " </tr>\n", + " <tr>\n", + " <th>55</th>\n", + " <td>25</td>\n", + " <td>24.19</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Route daily\n", + "0 80 10211.79\n", + "1 2 4808.03\n", + "2 6 4537.02\n", + "3 10 4425.23\n", + "4 3 2708.55\n", + "5 4 2656.99\n", + "6 15 2179.98\n", + "7 38 1955.85\n", + "8 28 1868.31\n", + "9 5 1634.69\n", + "10 14 1373.81\n", + "11 16 1258.93\n", + "12 18 1039.57\n", + "13 22 995.21\n", + "14 19 827.53\n", + "15 50 748.75\n", + "16 67 729.54\n", + "17 70 710.80\n", + "18 30 687.13\n", + "19 72 636.95\n", + "20 13 615.20\n", + "21 40 602.92\n", + "22 21 590.86\n", + "23 20 545.91\n", + "24 71 497.09\n", + "25 56 477.44\n", + "26 57 464.86\n", + "27 73 448.87\n", + "28 75 435.35\n", + "29 44 416.90\n", + "30 11 392.43\n", + "31 47 379.89\n", + "32 81 371.76\n", + "33 58 362.59\n", + "34 12 329.51\n", + "35 37 319.82\n", + "36 27 298.07\n", + "37 17 294.55\n", + "38 82 219.48\n", + "39 33 206.53\n", + "40 1 181.44\n", + "41 52 176.24\n", + "42 39 140.89\n", + "43 35 140.42\n", + "44 31 139.87\n", + "45 51 137.57\n", + "46 55 129.23\n", + "47 84 114.21\n", + "48 29 111.28\n", + "49 26 107.10\n", + "50 32 86.47\n", + "51 34 81.97\n", + "52 49 61.83\n", + "53 36 59.13\n", + "54 48 30.65\n", + "55 25 24.19" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_sql(\"\"\"\n", + "SELECT Route, SUM(DailyBoardings) AS daily\n", + "FROM boarding\n", + "GROUP BY Route\n", + "ORDER BY daily DESC\n", + "\"\"\", conn)\n", + "\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 10211.79\n", + "1 4808.03\n", + "2 4537.02\n", + "3 4425.23\n", + "4 2708.55\n", + "5 2656.99\n", + "6 2179.98\n", + "7 1955.85\n", + "8 1868.31\n", + "9 1634.69\n", + "10 1373.81\n", + "11 1258.93\n", + "12 1039.57\n", + "13 995.21\n", + "14 827.53\n", + "15 748.75\n", + "16 729.54\n", + "17 710.80\n", + "18 687.13\n", + "19 636.95\n", + "20 615.20\n", + "21 602.92\n", + "22 590.86\n", + "23 545.91\n", + "24 497.09\n", + "25 477.44\n", + "26 464.86\n", + "27 448.87\n", + "28 435.35\n", + "29 416.90\n", + "30 392.43\n", + "31 379.89\n", + "32 371.76\n", + "33 362.59\n", + "34 329.51\n", + "35 319.82\n", + "36 298.07\n", + "37 294.55\n", + "38 219.48\n", + "39 206.53\n", + "40 181.44\n", + "41 176.24\n", + "42 140.89\n", + "43 140.42\n", + "44 139.87\n", + "45 137.57\n", + "46 129.23\n", + "47 114.21\n", + "48 111.28\n", + "49 107.10\n", + "50 86.47\n", + "51 81.97\n", + "52 61.83\n", + "53 59.13\n", + "54 30.65\n", + "55 24.19\n", + "Name: daily, dtype: float64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# let's extract daily column from df\n", + "df[\"daily\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:>" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# let's create a bar plot from daily column Series\n", + "df[\"daily\"].plot.bar()\n", + "\n", + "# Oops wrong x-axis labels!" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Route</th>\n", + " <th>daily</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>80</td>\n", + " <td>10211.79</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>4808.03</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>6</td>\n", + " <td>4537.02</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>10</td>\n", + " <td>4425.23</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>3</td>\n", + " <td>2708.55</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>4</td>\n", + " <td>2656.99</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>15</td>\n", + " <td>2179.98</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>38</td>\n", + " <td>1955.85</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>28</td>\n", + " <td>1868.31</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>5</td>\n", + " <td>1634.69</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>14</td>\n", + " <td>1373.81</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>16</td>\n", + " <td>1258.93</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>18</td>\n", + " <td>1039.57</td>\n", + " </tr>\n", + " <tr>\n", + " <th>13</th>\n", + " <td>22</td>\n", + " <td>995.21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>19</td>\n", + " <td>827.53</td>\n", + " </tr>\n", + " <tr>\n", + " <th>15</th>\n", + " <td>50</td>\n", + " <td>748.75</td>\n", + " </tr>\n", + " <tr>\n", + " <th>16</th>\n", + " <td>67</td>\n", + " <td>729.54</td>\n", + " </tr>\n", + " <tr>\n", + " <th>17</th>\n", + " <td>70</td>\n", + " <td>710.80</td>\n", + " </tr>\n", + " <tr>\n", + " <th>18</th>\n", + " <td>30</td>\n", + " <td>687.13</td>\n", + " </tr>\n", + " <tr>\n", + " <th>19</th>\n", + " <td>72</td>\n", + " <td>636.95</td>\n", + " </tr>\n", + " <tr>\n", + " <th>20</th>\n", + " <td>13</td>\n", + " <td>615.20</td>\n", + " </tr>\n", + " <tr>\n", + " <th>21</th>\n", + " <td>40</td>\n", + " <td>602.92</td>\n", + " </tr>\n", + " <tr>\n", + " <th>22</th>\n", + " <td>21</td>\n", + " <td>590.86</td>\n", + " </tr>\n", + " <tr>\n", + " <th>23</th>\n", + " <td>20</td>\n", + " <td>545.91</td>\n", + " </tr>\n", + " <tr>\n", + " <th>24</th>\n", + " <td>71</td>\n", + " <td>497.09</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25</th>\n", + " <td>56</td>\n", + " <td>477.44</td>\n", + " </tr>\n", + " <tr>\n", + " <th>26</th>\n", + " <td>57</td>\n", + " <td>464.86</td>\n", + " </tr>\n", + " <tr>\n", + " <th>27</th>\n", + " <td>73</td>\n", + " <td>448.87</td>\n", + " </tr>\n", + " <tr>\n", + " <th>28</th>\n", + " <td>75</td>\n", + " <td>435.35</td>\n", + " </tr>\n", + " <tr>\n", + " <th>29</th>\n", + " <td>44</td>\n", + " <td>416.90</td>\n", + " </tr>\n", + " <tr>\n", + " <th>30</th>\n", + " <td>11</td>\n", + " <td>392.43</td>\n", + " </tr>\n", + " <tr>\n", + " <th>31</th>\n", + " <td>47</td>\n", + " <td>379.89</td>\n", + " </tr>\n", + " <tr>\n", + " <th>32</th>\n", + " <td>81</td>\n", + " <td>371.76</td>\n", + " </tr>\n", + " <tr>\n", + " <th>33</th>\n", + " <td>58</td>\n", + " <td>362.59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>34</th>\n", + " <td>12</td>\n", + " <td>329.51</td>\n", + " </tr>\n", + " <tr>\n", + " <th>35</th>\n", + " <td>37</td>\n", + " <td>319.82</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36</th>\n", + " <td>27</td>\n", + " <td>298.07</td>\n", + " </tr>\n", + " <tr>\n", + " <th>37</th>\n", + " <td>17</td>\n", + " <td>294.55</td>\n", + " </tr>\n", + " <tr>\n", + " <th>38</th>\n", + " <td>82</td>\n", + " <td>219.48</td>\n", + " </tr>\n", + " <tr>\n", + " <th>39</th>\n", + " <td>33</td>\n", + " <td>206.53</td>\n", + " </tr>\n", + " <tr>\n", + " <th>40</th>\n", + " <td>1</td>\n", + " <td>181.44</td>\n", + " </tr>\n", + " <tr>\n", + " <th>41</th>\n", + " <td>52</td>\n", + " <td>176.24</td>\n", + " </tr>\n", + " <tr>\n", + " <th>42</th>\n", + " <td>39</td>\n", + " <td>140.89</td>\n", + " </tr>\n", + " <tr>\n", + " <th>43</th>\n", + " <td>35</td>\n", + " <td>140.42</td>\n", + " </tr>\n", + " <tr>\n", + " <th>44</th>\n", + " <td>31</td>\n", + " <td>139.87</td>\n", + " </tr>\n", + " <tr>\n", + " <th>45</th>\n", + " <td>51</td>\n", + " <td>137.57</td>\n", + " </tr>\n", + " <tr>\n", + " <th>46</th>\n", + " <td>55</td>\n", + " <td>129.23</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47</th>\n", + " <td>84</td>\n", + " <td>114.21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>48</th>\n", + " <td>29</td>\n", + " <td>111.28</td>\n", + " </tr>\n", + " <tr>\n", + " <th>49</th>\n", + " <td>26</td>\n", + " <td>107.10</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50</th>\n", + " <td>32</td>\n", + " <td>86.47</td>\n", + " </tr>\n", + " <tr>\n", + " <th>51</th>\n", + " <td>34</td>\n", + " <td>81.97</td>\n", + " </tr>\n", + " <tr>\n", + " <th>52</th>\n", + " <td>49</td>\n", + " <td>61.83</td>\n", + " </tr>\n", + " <tr>\n", + " <th>53</th>\n", + " <td>36</td>\n", + " <td>59.13</td>\n", + " </tr>\n", + " <tr>\n", + " <th>54</th>\n", + " <td>48</td>\n", + " <td>30.65</td>\n", + " </tr>\n", + " <tr>\n", + " <th>55</th>\n", + " <td>25</td>\n", + " <td>24.19</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Route daily\n", + "0 80 10211.79\n", + "1 2 4808.03\n", + "2 6 4537.02\n", + "3 10 4425.23\n", + "4 3 2708.55\n", + "5 4 2656.99\n", + "6 15 2179.98\n", + "7 38 1955.85\n", + "8 28 1868.31\n", + "9 5 1634.69\n", + "10 14 1373.81\n", + "11 16 1258.93\n", + "12 18 1039.57\n", + "13 22 995.21\n", + "14 19 827.53\n", + "15 50 748.75\n", + "16 67 729.54\n", + "17 70 710.80\n", + "18 30 687.13\n", + "19 72 636.95\n", + "20 13 615.20\n", + "21 40 602.92\n", + "22 21 590.86\n", + "23 20 545.91\n", + "24 71 497.09\n", + "25 56 477.44\n", + "26 57 464.86\n", + "27 73 448.87\n", + "28 75 435.35\n", + "29 44 416.90\n", + "30 11 392.43\n", + "31 47 379.89\n", + "32 81 371.76\n", + "33 58 362.59\n", + "34 12 329.51\n", + "35 37 319.82\n", + "36 27 298.07\n", + "37 17 294.55\n", + "38 82 219.48\n", + "39 33 206.53\n", + "40 1 181.44\n", + "41 52 176.24\n", + "42 39 140.89\n", + "43 35 140.42\n", + "44 31 139.87\n", + "45 51 137.57\n", + "46 55 129.23\n", + "47 84 114.21\n", + "48 29 111.28\n", + "49 26 107.10\n", + "50 32 86.47\n", + "51 34 81.97\n", + "52 49 61.83\n", + "53 36 59.13\n", + "54 48 30.65\n", + "55 25 24.19" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='Route'>" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEPCAYAAABcA4N7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAVY0lEQVR4nO3df7Bc5X3f8fcH5Fo2kmwLXZNAbBSoKRkYhKk6nqlLzBQ8iQNOADFjxU4GOm1F49qNAx2GDgYp2G4NEzlJjV3D2LGC8TD8EDB2SJPULk2mk8ZjUX5ZRVUNFiAIQWBQ9Isftr/94xzB+nLvw5V2uXtB79fMjnef7z6H7y7mfvac5+zZVBWSJE3noHE3IEma2wwKSVKTQSFJajIoJElNBoUkqcmgkCQ1zRt3A6O2ZMmSWrp06bjbkKTXlDvvvPPJqpqYqva6C4qlS5eyYcOGcbchSa8pSR6aruahJ0lSk0EhSWoyKCRJTQaFJKnJoJAkNRkUkqQmg0KS1GRQSJKaXndfuBuFpRffPu4WANjy2dPH3YIkzWyPIsnHkmxI8lySdZNqpybZlGR3kjuSHDlQS5IrkjzV365MkoH60n7O7n4bp03a9oeTPJRkV5Lbkiwe8vVKkvbRTA89PQZ8GvijwcEkS4BbgEuBxcAG4IaBp6wCzgSWAScAZwDnD9SvB+4CDgUuAW5OMtFv+zjgauA3gcOA3cAXZ/zKJEkjMaOgqKpbquo24KlJpbOBjVV1U1U9C6wBliU5tq+fC6ytqq1V9SiwFjgPIMkxwEnA6qraU1XrgfuAFf3cjwDfrKq/qqqddGF0dpKF+/dSJUn7Y9jF7OOAe/Y+qKpdwAP9+Mvq/f3B2oNVtaNRH9z2A8DzwDFD9ixJ2gfDBsUCYPukse3Awmnq24EF/TrFvs6dXH9RklX9GsqGbdu27fOLkCRNb9ig2AksmjS2CNgxTX0RsLOqaj/mTq6/qKquqarlVbV8YmLKy6lLkvbTsEGxkW6hGoAkhwBH9+Mvq/f3B2tHTVpzmFwf3PZRwBuBzUP2LEnaBzM9PXZekvnAwcDBSeYnmQfcChyfZEVfvwy4t6o29VOvBS5IckSSw4ELgXUAVbUZuBtY3W/vLLozo9b3c78OfDDJyX0AXQ7cMmlNQ5L0KpvpHsUngT3AxcBv9Pc/WVXb6M5S+gzwNPAeYOXAvKuBb9KdzfQ94PZ+bK+VwPJ+7meBc/ptUlUbgX9DFxhP0K1NfHSfX6EkaSjplgteP5YvX17D/hSq38yWdKBJcmdVLZ+q5rWeJElNBoUkqcmgkCQ1GRSSpCaDQpLUZFBIkpoMCklSk0EhSWoyKCRJTQaFJKnJoJAkNRkUkqQmg0KS1GRQSJKaDApJUpNBIUlqMigkSU0GhSSpyaCQJDUZFJKkJoNCktRkUEiSmgwKSVKTQSFJajIoJElNBoUkqcmgkCQ1GRSSpCaDQpLUZFBIkppGEhRJlib50yRPJ3k8yVVJ5vW1U5NsSrI7yR1JjhyYlyRXJHmqv12ZJJO2e0c/d1OS00bRryRp5ka1R/FF4AngZ4ETgfcBH02yBLgFuBRYDGwAbhiYtwo4E1gGnACcAZw/UL8euAs4FLgEuDnJxIh6liTNwKiC4ueBG6vq2ap6HPgz4DjgbGBjVd1UVc8Ca4BlSY7t550LrK2qrVX1KLAWOA8gyTHAScDqqtpTVeuB+4AVI+pZkjQDowqKPwRWJnlzkiOAD/BSWNyz90lVtQt4oB9ncr2/P1h7sKp2TFOXJM2CUQXFX9L9Af97YCvdIabbgAXA9knP3Q4s7O9Prm8HFvTrFK8090VJViXZkGTDtm3bhnslkqSfMnRQJDkI+HO6tYhDgCXA24ArgJ3AoklTFgF79xIm1xcBO6uqZjD3RVV1TVUtr6rlExMuYUjSKI1ij2Ix8A7gqqp6rqqeAr4K/AqwkW6hGoAkhwBH9+NMrvf3B2tHJVk4TV2SNAuGDoqqehL4AfBbSeYleSvdIvU9wK3A8UlWJJkPXAbcW1Wb+unXAhckOSLJ4cCFwLp+u5uBu4HVSeYnOYvuzKj1w/YsSZq5Ua1RnA38MrAN+D7wI+B3qmob3VlKnwGeBt4DrByYdzXwTbqzmb4H3N6P7bUSWN7P/SxwTr9NSdIsmTeKjVTV3cAp09S+BRw7Ta2Ai/rbVPUt021XkjQ7vISHJKnJoJAkNRkUkqQmg0KS1GRQSJKaDApJUpNBIUlqMigkSU0GhSSpyaCQJDUZFJKkJoNCktRkUEiSmgwKSVKTQSFJajIoJElNBoUkqcmgkCQ1GRSSpCaDQpLUZFBIkpoMCklSk0EhSWoyKCRJTQaFJKnJoJAkNRkUkqQmg0KS1GRQSJKaDApJUpNBIUlqGllQJFmZ5P4ku5I8kOTkfvzUJJuS7E5yR5IjB+YkyRVJnupvVybJQH1pP2d3v43TRtWvJGlmRhIUSd4PXAH8C2Ah8IvAg0mWALcAlwKLgQ3ADQNTVwFnAsuAE4AzgPMH6tcDdwGHApcANyeZGEXPkqSZGdUexe8Cl1fV31TVT6rq0ap6FDgb2FhVN1XVs8AaYFmSY/t55wJrq2pr//y1wHkASY4BTgJWV9WeqloP3AesGFHPkqQZGDookhwMLAcmknw/ydYkVyV5E3AccM/e51bVLuCBfpzJ9f7+YO3BqtoxTV2SNAtGsUdxGPAG4BzgZOBE4N3AJ4EFwPZJz99Od3iKKerbgQX9OsUrzX1RklVJNiTZsG3btqFejCTpp40iKPb0//v5qvrbqnoS+BzwK8BOYNGk5y8C9u4lTK4vAnZWVc1g7ouq6pqqWl5VyycmXMKQpFEaOiiq6mlgK1BTlDfSLVQDkOQQ4Oh+/GX1/v5g7agkC6epS5JmwagWs78KfDzJ25O8DfgE8CfArcDxSVYkmQ9cBtxbVZv6edcCFyQ5IsnhwIXAOoCq2gzcDaxOMj/JWXRnRq0fUc+SpBmYN6LtfApYAmwGngVuBD5TVc8mWQFcBVwHfAdYOTDvauAourOZAL7cj+21ki44ngYeBs6pKhchJGkWjSQoquoF4KP9bXLtW8CxL5vU1Qq4qL9NVd8CnDKKHiVJ+8dLeEiSmgwKSVKTQSFJajIoJElNBoUkqcmgkCQ1GRSSpCaDQpLUZFBIkpoMCklSk0EhSWoyKCRJTQaFJKnJoJAkNRkUkqQmg0KS1GRQSJKaDApJUtOofjNbr1NLL7593C0AsOWzp4+7BemA5R6FJKnJoJAkNRkUkqQmg0KS1GRQSJKaPOtJmqG5cAaYZ39pHNyjkCQ1uUchaZ+5d3VgcY9CktRkUEiSmgwKSVKTQSFJahpZUCR5V5Jnk1w3MHZqkk1Jdie5I8mRA7UkuSLJU/3tyiQZqC/t5+zut3HaqHqVJM3cKPcovgB8d++DJEuAW4BLgcXABuCGgeevAs4ElgEnAGcA5w/UrwfuAg4FLgFuTjIxwn4lSTMwkqBIshJ4Bvj2wPDZwMaquqmqngXWAMuSHNvXzwXWVtXWqnoUWAuc12/vGOAkYHVV7amq9cB9wIpR9CtJmrmhgyLJIuBy4MJJpeOAe/Y+qKpdwAP9+Mvq/f3B2oNVtWOa+uQeViXZkGTDtm3b9velSJKmMIo9ik8BX6mqRyaNLwC2TxrbDiycpr4dWNCvU7zS3J9SVddU1fKqWj4x4dEpSRqlob6ZneRE4DTg3VOUdwKLJo0tAnZMU18E7KyqSvJKcyVJs2TYPYpTgKXAw0keB/49sCLJ/wY20i1UA5DkEODofpzJ9f7+YO2oJAunqUuSZsmwQXEN3R//E/vbl4DbgV8CbgWOT7IiyXzgMuDeqtrUz70WuCDJEUkOp1vjWAdQVZuBu4HVSeYnOYvuzKj1Q/YrSdpHQx16qqrdwO69j/tDRs9W1bb+8QrgKuA64DvAyoHpVwNH0Z3NBPDlfmyvlXTB8TTwMHDO3u1KkmbPSK8eW1VrJj3+FnDsNM8t4KL+NlV9C92hLUnSGHkJD0lSk0EhSWoyKCRJTQaFJKnJoJAkNRkUkqQmg0KS1GRQSJKaDApJUpNBIUlqMigkSU0GhSSpyaCQJDUZFJKkJoNCktRkUEiSmgwKSVKTQSFJajIoJElNBoUkqWneuBuQpNeypRffPu4W2PLZ01/V7btHIUlqMigkSU0GhSSpyaCQJDUZFJKkJoNCktRkUEiSmgwKSVKTQSFJaho6KJK8MclXkjyUZEeSu5J8YKB+apJNSXYnuSPJkQO1JLkiyVP97cokGagv7efs7rdx2rD9SpL2zSj2KOYBjwDvA94CXArc2P+RXwLc0o8tBjYANwzMXQWcCSwDTgDOAM4fqF8P3AUcClwC3JxkYgQ9S5JmaOigqKpdVbWmqrZU1U+q6k+AHwD/GDgb2FhVN1XVs8AaYFmSY/vp5wJrq2prVT0KrAXOA0hyDHASsLqq9lTVeuA+YMWwPUuSZm7kaxRJDgOOATYCxwH37K1V1S7ggX6cyfX+/mDtwaraMU1dkjQLRhoUSd4AfB3446raBCwAtk962nZgYX9/cn07sKBfp3iluYP/3FVJNiTZsG3btuFfiCTpRSMLiiQHAV8Dngc+1g/vBBZNeuoiYMc09UXAzqqqGcx9UVVdU1XLq2r5xIRLGJI0SiMJin4P4CvAYcCKqnqhL22kW6je+7xDgKP78ZfV+/uDtaOSLJymLkmaBaPao/gvwC8AH6yqPQPjtwLHJ1mRZD5wGXBvf1gK4FrggiRHJDkcuBBYB1BVm4G7gdVJ5ic5i+7MqPUj6lmSNAND/8Jd/72I84HngMcHvgZxflV9PckK4CrgOuA7wMqB6VcDR9GdzQTw5X5sr5V0wfE08DBwTlW5CCFJs2jooKiqh4A06t8Cjp2mVsBF/W2q+hbglGF7lCTtPy/hIUlqMigkSU0GhSSpyaCQJDUZFJKkJoNCktRkUEiSmgwKSVKTQSFJajIoJElNBoUkqcmgkCQ1GRSSpCaDQpLUZFBIkpoMCklSk0EhSWoyKCRJTQaFJKnJoJAkNRkUkqQmg0KS1GRQSJKaDApJUpNBIUlqMigkSU0GhSSpyaCQJDUZFJKkJoNCktRkUEiSmuZ0UCRZnOTWJLuSPJTkw+PuSZIONPPG3cAr+ALwPHAYcCJwe5J7qmrjWLuSpAPInN2jSHIIsAK4tKp2VtX/BL4B/OZ4O5OkA8ucDQrgGODHVbV5YOwe4Lgx9SNJB6RU1bh7mFKSk4GbqupnBsb+NfCRqjpl0nNXAav6h/8I+L+z1WfDEuDJcTcxR/hevMT34iW+Fy+ZC+/FkVU1MVVhLq9R7AQWTRpbBOyY/MSquga4ZjaamqkkG6pq+bj7mAt8L17ie/ES34uXzPX3Yi4fetoMzEvyroGxZYAL2ZI0i+ZsUFTVLuAW4PIkhyR5L/BrwNfG25kkHVjmbFD0Pgq8CXgCuB74rdfQqbFz6lDYmPlevMT34iW+Fy+Z0+/FnF3MliTNDXN9j0KSNGYGhSSpyaDQSCV5Z5KzkhwzRe3Xx9HTOCR5b5Kf7e+/McmnktzZ39Yk+Qfj7lHjkeTdSc5J8uYkByf5WJLfT3LGuHubjmsUI9L/YTwOWEj3XY+Nk75V/rqX5JeBG4EfAO8C1gEfr6of9/W/r6rJ3415XUry/4BfrKq/TfJ54N3A5/ryJ4A7q+p3xtWfxiPJvwQ+DRTwGN2Zne+g+07bSuC3q+qPxtfh1AyKISV5J3AD3Xc8HgC2030x8Gi6S46srKqHx9fh7ElyJ3BZVd2e5DDgOuA54Oyqej7JjqpaON4uZ0eSnVW1oL//MHBiVf2wf/w2ug8Sh4+zx3E40D9QJdkE/CoQ4H7gn1XVX/e1XwKurKplY2xxSgbFkJJ8G7gTWFNVuwfGDwEuA/5JVf3zcfU3m5Jsr6q3DDyeRxcWS+j+4/i7Aygo/g9wblV9t9+7eG9VPdHXJoDNVfW2sTY5i/xA1Rn8byTJLmBB9X+EkxwE/LCq3jrGFqdkUAwpyU5gcVU9P0XtjXT/4g+Z/c5mX5ItwMlV9cjAWICvAMfSfap+85jam1VJVgL/CbgceDvdlZD/c1/+OLChqv7tmNqbdX6g6iR5jO6aSi8k+cLg/wf69+KRqlo8vg6nZlAMKcn9wCVVdcsUtbOA/1hVvzD7nc2+JF8GHq6qy6eofQlYVVUHzAkUSd4PrAGWA2/oh7cCXwU+VVU/GlNrs84PVJ0kX6P7m3D/FLUP0X2p+JRZb+wVGBRDSnIqsB74Ht0u9N5d6hPpjsWuqKr/PrYGZ1F/Js+8wU+Mk+rvPBAOL0zWH1I4DNhTVc+MuZ2x8APVK+sPSVZVjfsqsi9jUIxAkkOBs+mCYQHdlW+/B9w2F/+lS7PND1SvbQfMYYBXS/9p8deBk4A7qupf0Z3p8++AzyVZMs7+pLmgqr5Nt3D9x8ALdOs2P+ofv8uQmNvcoxhSf478+4A/Az4AfBdYTHcc+lzghar60Pg6lOa2JAfTHZZ62dqW5gaDYkj9WQwnVtUTSY4AHgaWVNXTSd5Kdxrk28fapDSH9YvZu6vq4HH3oqnN5V+4e62YDzzd3/8h8BO6NQrovlDke6wDXpLWt439b2SOc41ieP8LuLq/fMWX6BbqLkyyELiwfywd6D4M7AEeneK2dYx9aQY89DSkJEcCXwR+HvgD4K+APwd+ju6aR2dX1b1ja1CaA5J8l+67I9+Yojaf7tCTH1znKHf5hlRVDwGnD44lWUr35aKnxtKUNPesY/ojGC8Avzt7rWhfuUchSWpyV0+S1GRQSJKaDApJUpNBIc1Qki1J9iTZmeTxJOuSLBhym6ck8fRQzWkGhbRvPtj/ct2JdD9v+h/G24706jMopP1QVY/TfV/mRIAkv5pkY5JnkvyPJC9eMjtJJfmHA4/XJfl0/0M1/xU4vN9L2Znk8CQHJbk4yQNJnkpyY5I592M2OnAYFNJ+SPJzdBeB/H7/O9DXA58AJoA/Bb7Z/z7HtKpqV7+Nx6pqQX97jO7Kw2fSXWzycLpLxHzhVXop0isyKKR9c1uSHcAjwBPAauBDwO1V9d+q6gXg94A3Af90P/8Z59NdTXVrVT1H9yt55/S/QS7NOoNC2jdnVtVC4BS63wFfQvep/6G9T6iqn9AFyRH7+c84Eri1P4z1DHA/8GO6X8mTZp1BIe2HqvpLustS/B7wGN0fdwCSBHgH3QXvAHYDbx6Y/jODm5pi848AH6iqtw7c5lfVo1M8V3rVGRTS/vsD4P3AXwCnJzk1yRvorhr8HPDX/fPuBj6c5OD+KsPvG9jG3wGHJnnLwNiXgM/0F5wkyUSSX3tVX4nUYFBI+6mqtgHXAhcBvwF8HngS+CDdabTP90/97X7sGeAjwG0D29hEtxD+YH+o6XDgD4FvAH/Rr4f8DfCeWXhJ0pS8KKAkqck9CklSk0EhSWoyKCRJTQaFJKnJoJAkNRkUkqQmg0KS1GRQSJKaDApJUtP/ByWgXb4FtN9FAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df = df.set_index(\"Route\")\n", + "\n", + "# let's plot for top 5 routes alone\n", + "df.head(5)[\"daily\"].plot.bar()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Route\n", + "80 10211.79\n", + "2 4808.03\n", + "6 4537.02\n", + "10 4425.23\n", + "3 2708.55\n", + "other 29296.56\n", + "Name: daily, dtype: float64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# let's use slicing to aggregate the rest of the data\n", + "s = df[\"daily\"].iloc[:5]\n", + "s[\"other\"] = df[\"daily\"].iloc[5:].sum()\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEfCAYAAABBHLFTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAbk0lEQVR4nO3de7RdZX3u8e9DwkUSImIick1AqzjAioNt6alWtGoVtFbFHrFaracaaw9Vjm2VqnCoYK3VetcqFoV61yFo1da2VtB6OcpmKNgIoqjhDglCIEDDxd/5Y87ocrMvc2fvNdfOzvczxhpZ651rrflbkKxnvXO+7ztTVUiStNOoC5AkLQwGgiQJMBAkSS0DQZIEGAiSpNbSURewrVauXFlr1qwZdRmStF254IILNlbVqsm2bbeBsGbNGsbHx0ddhiRtV5Ksn2qbh4wkSUCPgZDkQ0muSXJzkkuTvHBg2+OSXJLktiTnJlndV12SpEafPYTXA2uqagXwVOC0JEckWQmcDZwE7AWMAx/vsS5JEj2eQ6iqdYMP29sDgCOAdVX1SYAkpwAbkxxSVZf0VZ8k7eh6PYeQ5N1JbgMuAa4B/hk4FLhw63Oq6lbgsrZ94uvXJhlPMr5hw4aeqpakHUOvgVBVfwLsAfwmzWGiLcByYNOEp25qnzfx9adX1VhVja1aNemoKUnSNup9lFFV3V1VXwX2B14CbAZWTHjaCuCWvmuTpB3ZKIedLqU5h7AOeNjWxiTLBtolST3pJRCS3C/JcUmWJ1mS5InAs4EvAecAhyU5NsluwMnARZ5QlqR+9TXKqGgOD72HJoTWAydU1WcAkhwLvBP4EPBN4Lie6pKkeZGk1/0N4+JmvQRCVW0Ajppm+xeBQ/qoRZI0OZeukCQBBoIkqWUgSJIAA0GS1DIQJEmAgSBJahkIkiTAQJAktQwESRJgIEiSWgaCJAkwECRJLQNBkgQYCJKkloEgSQIMBElSy0CQJAEGgiSpZSBIkgADQZLUMhAkSYCBIElqGQiSJMBAkCS1OgdCkuVJ9k+yfJgFSZJGY9pASHJYknck+RGwCbgc2JTksiTvTPLQLjtJsmuSM5KsT3JLkm8nObrdtiZJJdk8cDtpzp9MkjQrS6fakOSjwKHAx4DnAhcDtwB7AA8BjgI+nOR7VXVch/1c0b7mcuAY4BMTAmXPqrprWz+IJGlupgwE4CNV9dlJ2m8Evt7eXp/kKTPtpKpuBU4ZaPpckh8DRwAXdC9XkjQsUx4ymiIMJnve52a70yR7Aw8C1g00r09yZZIPJFk5xevWJhlPMr5hw4bZ7laSNI1OJ5WTPDvJQ9r7D07ylSRfSnLIbHeYZGfgw8BZVXUJsBF4BLCapsewR7v9Hqrq9Koaq6qxVatWzXbXkqRpdB1ldBrw0/b+m4BvAV8B3j2bnSXZCfggcAdwPEBVba6q8aq6q6qua9t/O8mK2by3JGlupjuHMGhVVV2XZDfgUcAzgTtpft13kiTAGcDewDFVdecUT62tL+n63pKkuesaCBuSPBB4KHB+VW1Jsjuz+9L+e5rRSY+vqtu3NiY5ErgJ+AFwH+DtwHlVtWkW7y1JmqOugXAqzWigu4FntW2PAy7s8uIkq4EXA1uAa5vOArRtPwP+GrgfcDPw78CzO9YlSZonnQKhqs5M8on2/m1t8zeBmeYfbH39eqbvTXy0y/tIkoZnuolpE084//eE9s7nDyRJC990PYS7+MUJ3uksmadaJEkjNF0gHDRw/8k0I4teD6ynmTPwSuBTwytNktSnKQOhPe4PQJKXA2NVdVPbdGmScWCcZvSQJGk713Vi2r2B3Se07d62S5IWga7DTs8CvpjkrTSrlh4AvLRtlyQtAl0D4RXAD2nmIOwLXAO8E3jfkOqSJPWs6zyEnwHvaW+SpEWoaw+BJL8NHA780iU0q+rkea5JkjQCnQIhyTuB/wmcC9w2sKnLPAVJ0nagaw/h2cDhVXXFMIuRJI1O12GnN9CsSCpJWqS69hD+DvhwktcD1w1uqKofzXtVkqTedQ2ErbORnzKhvXAtI0laFLoOO+16aEmStJ3yi16SBHQfdroU+BPgKGAlAxe7qapHD6c0SVKfuvYQ3kJzucuvAEfQLHt9P+BLQ6pLktSzroHwDODoqnobcFf759OAxw6rMElSv7oGwu40q5wC3J5k96q6BHj4cMqSJPWt67DTi4FHAN+iuSjOKUluBq4aVmGSpH51DYSXAXe3919OMy9hD2DtMIqSJPWv6zyE8wfu/wB4/NAqkiSNRKdzCEkem+Sg9v4+Sc5KckaS+w+3PElSX7qeVH43vzhk9HfAzu390+e9IknSSHQNhP2q6vJ2gtoTac4dvAT4jS4vTrJr26NYn+SWJN9OcvTA9scluSTJbUnOTbJ61p9EkjQnXQPh5iR708xU/l5VbW7bd57mNYOW0gxbPQq4N3AS8Ikka5KsBM5u2/aiGcX08Y7vK0maJ11HGb0DOB/YBTihbXskcEmXF1fVrcApA02fS/JjmlnP9wXWVdUnAZKcAmxMckg710GS1INOPYSqegPNyKJHVtXH2uargBduy07b3saDgHXAocCFA/u6FbisbZ/4urVJxpOMb9iwYVt2LUmaQufVTqvq0qq6bMLj7852h0l2Bj4MnNX2AJYDmyY8bRPNPIeJNZxeVWNVNbZq1arZ7lqSNI2uq51eQXMxnHuoqgO77izJTsAHgTuA49vmzcCKCU9dAdzS9X0lSXPX9RzCcyc83odm9vLHJnnupJIEOAPYGzimqu5sN60Dnj/wvGXAA9p2SVJPus5U/vLEtiTnAV8A3tZxX38PPAR4fFXdPtB+DvDGJMcCnwdOBi7yhLIk9WsuV0zbAhzU5YntvIIXA4cD1ybZ3N6eU1UbgGOB1wE3AkcCx82hLknSNuh6DuG1E5p2B44B/qXL66tqPQNXWZtk+xeBQ7q8lyRpOLqeQzhgwuNbgTfTnCCWJC0CXc8hvGDYhUiSRqtrD4EkjwX+ANiPZlLah6rKaypL0iLRdfnrF9KsL3QtzbpD1wAfSfKiIdYmSepR1x7CK4AnVNXPl5hI8nHgU8D7hlGYJKlfXYed3hf43oS279OsTipJWgS6BsJXgTcn2R1+Ppv4jcDXh1WYJKlfXQPhj4FfBTYluQ64CXgYzWQzSdIi0HXY6TXAUUn2B/YFrq6qK4damSSpV7NduuIOYCOwS5KDkxw8hJokSSPQdemKJ9GsVLrPhE0FLJnvoiRJ/evaQ3gXcCqwrKp2GrgZBpK0SHSdh3Af4L1VNelFciRJ27+uPYQzANczkqRFbMoeQpL/5BeXzQzwsiQn0ixf8XNV9ejhlSdJ6st0h4z+YYbHkqRFZMpAqKqzkpxYVX/TZ0GSpNGY6RzCq3qpQpI0cjMFwpSXvZQkLS4zDTtdmuQFTH895PfPb0mSpFGYKRB2Bp43zfYCDARJWgRmCoTbquqxvVQiSRqp2S5uJ0lapGYKhMt7qUKSNHJTBkKSXarqsJneIMmu81uSJGkUpushXJTkL5LsO9nGJPskeQXw7eGUJknq03SB8Chgb+DCJJcm+WySj7R/fh/4DnBfoNNaRkmOTzKeZEuSMwfa1ySpJJsHbidt+0eSJG2L6Zau2Aj8eZJXAUcCDwX2BG4E/gb4VlXdOYt9XQ2cBjwRuNck2/esqrtm8X6SpHk04/UQquoO4D/b2zarqrMBkowB+8/lvSRJ828hDTtdn+TKJB9IsnKyJyRZ2x52Gt+wYUPf9UnSorYQAmEj8AhgNXAEsAfw4cmeWFWnV9VYVY2tWrWqxxIlafHregnNoamqzcB4+/C6JMcD1yRZUVU3j7A0SdqhdOohJLnvsAsZMHiVNklST7oeMroiyWeSPDPJLtuyoyRLk+wGLAGWJNmtbTsyyYOT7NQGz9uB86pq07bsR5K0bboGwmrgP4BXAtcmOT3Jo2a5r9cAtwMnAs9t778GOBj4AnAL8F/AFuDZs3xvSdIcpapmftbgC5IHA38APIfm8M6HgDOqav38lze1sbGxGh8fn/mJktSDpN+j3LP97t4qyQVVNTbZtm0ZZXT/9rYCuAzYD/h2khO3qTpJ0oLQaZRRkkNpDvM8B9gMnAX8alVd1W4/FbiIZgazJGk71HXY6VeAjwLPrKpvTdxYVT9J8tb5LEyS1K+ugbBPu4TFlKrq5HmoR5I0Ip0CoaruSLI38GvASgbmCFSV11SWpEWg6zmEp9GMJvoBcCiwDjgM+CpgIEjSItB1lNFpwAuq6uHAre2fa4ELhlaZJKlXXQPhwKr65IS2s4DnzXM9kqQR6RoI17fnEAB+kuR/AA+gWYZCkrQIdA2E99FcUhPgLcC5wIXAu4dRlCSpf11HGb1h4P4/JjkPWFZVFw+rMElSvzpfD6Fdw2gv4KdV9f3hlSRJGoUZDxkleV6Sa4DvAV8DLk5yTZLnD706SVJvpg2EJI8H3gW8CXggcK/2z78D3p7kCUOvUJLUi5kOGb0UeHVVvX2g7UfAm5L8N/Ay4N+HVZwkqT8zHTJ6BPCxKbZ9Aph0TW1J0vZnpkBYVlXXT7ahbV82/yVJkkZhxlFGaS4DNNmlgEJzxTRJ0iIwUyAsB+6aYpuBIEmLyEyBcFAvVUiSRm7aQKiq9X0VIkkara5rGUmSFjkDQZIEGAiSpNZMS1d8LcmrkhzeUz2SpBGZqYfw5zTrF52R5Iok70vy9CTLZ7ujJMcnGU+yJcmZE7Y9LsklSW5Lcm6S1bN9f0nS3EwbCFX1jao6qaqOoFnG4hvAc4AfJ/likpcnOaTjvq6muTbz+wcbk6wEzgZOolleexz4+Ow+hiRprjpfD6GqrqX5Mn9/kqXAbwLHAJ9KclZV/e0Mrz8bIMkYsP/ApmcA67ZesznJKcDGJIdU1SWz+TBdNBOv+1Pl3D1J24fOgTCoqu6iuYzmucBfJNl5DjUcSnM5zq3vfWuSy9r2XwqEJGuBtQAHHnjgHHYpSZpoXkYZVdWdc3j5cmDThLZNwB6T7Of0qhqrqrFVq1bNYZeSpIkWwrDTzcCKCW0rgFtGUIsk7bAWQiCsAx629UGSZcAD2nZJUk+2KRCSPDbJo2f5mqVJdgOWAEuS7NaenD4HOCzJse32k4GLhnFCWZI0tU6BkOTLSR7Z3n8lzVXUPprkVbPY12uA24ETgee2919TVRuAY4HXATcCRwLHzeJ9JUnzIF2GRSa5AbhfVd2d5IfA79Ac+/9aVY1kuM/Y2FiNj4/P+nUOO5U0DNvLd0uSC6pq0ssfdx12uhNQSR5AEyIXt298n22qSJK04HQNhK8C7wT2oTnmTxsOG4dUlySpZ11PKv8hcBNwEXBK23YI8LZ5r0iSNBKdeghVdQPwqgltnx9KRZKkkeg6ymjXJK9L8qMkm9q2305y/HDLkyT1pesho7cAh9GsdLr11PY64CXDKEqS1L+uJ5WfDjywXXjuZwBVdVWS/YZXmiSpT117CHcwITySrAJumPeKJEkj0TUQPgmcleQggCT70AxD/diwCpMk9atrILwK+AnwXWBP4Ac0V0D7q6FUJUnqXddhp3cAJwAntIeKNpZrMkjSojJlICQ5eJrX7bF13Y6q+tF8FyVJ6t90PYQf0gwxDb8Yarp19abB3sGSIdQlSerZlOcQqmqnqlpSVTsBL6Q5gfxgYDeaZSs+AvxRL1VKkoau6zyEU4Ffqarb28c/SPJi4FLgzGEUJknqV9dRRjsBaya0rcbDRZK0aHTtIbwF+FKSDwBXAAfQrID6liHVJUnqWddhp29M8l3g94CHA9cA/6uqvjDM4iRJ/enaQ6D98jcAJGmRmm4ewqur6nXt/ddO9byqOnkYhUmS+jVdD2H/gfsHDLsQSdJoTRkIVfWSgfsv6KccSdKodB12eg9JfjXJJ+ezGEnS6EwbCEl2T3Jqks8meXOSFUkOTnIO8HXg+n7KlCQN20yjjN5FM8z0X4GjgYfSLFtxFvCiqto43PIkSX2ZKRCeCBxeVdcneQdwOXBUVf3nfBeS5Dzg14G72qarqurB870fSdLkZjqHsLyqrgeoqiuBzcMIgwHHV9Xy9mYYSFKPZuohLE3yWH6x7DUTH1fVl4ZUmySpR5nuwmdJfsIvX/tgoqqq6S6k072Q5pDRoTRh833g1VV13oTnrAXWAhx44IFHrF+/flv2M9dSZ8ULy0k7hu3luyXJBVU1Ntm2aXsIVbVmm/a4bV4JfA+4AzgO+GySw6vqsoF6TgdOBxgbG/ObVpLm0TbPQ5hvVfXNqrqlqrZU1VnA14BjRl3X9iZJrzdJi8eCCYRJbL18pySpB51XOx2mJHsCRwJfphl2+izg0cAJo6tKC9H2cpxW2h4tiEAAdgZOo5n0djdwCfC0qvr+SKuSembgaZQWRCBU1QbgEaOuQ5J2ZAv5HIIkqUcGgiQJMBAkSS0DQZIEGAiSpJaBIEkCDARJUstAkCQBBoIkqWUgSJKABbJ0haQdg2s1LWz2ECRJgIEgSWoZCJIkwECQJLUMBEkSYCBIkloGgiQJMBAkSS0DQZIEGAiSpJaBIEkCDARJUstAkCQBBoIkqWUgSJKABRQISfZKck6SW5OsT/L7o65JknYkC+kCOe8C7gD2Bg4HPp/kwqpaN9KqJGkHsSB6CEmWAccCJ1XV5qr6KvBPwB+MtjJJ2nEslB7Cg4C7q+rSgbYLgaMGn5RkLbC2fbg5yfd7qg9gJbBxti/q+5KBc+Dnm4Sfb8FYzJ+v78+2eqoNCyUQlgObJrRtAvYYbKiq04HT+ypqUJLxqhobxb774Ofbvvn5tl8L6bMtiENGwGZgxYS2FcAtI6hFknZICyUQLgWWJvmVgbaHAZ5QlqSeLIhAqKpbgbOB1yZZluSRwO8CHxxtZb9kJIeqeuTn2775+bZfC+azpapGXQPQzEMA3g88AbgBOLGqPjLaqiRpx7FgAkGSNFoL4pCRJGn0DARJEmAg7LCSHJjk6UkeNMm2Z4+ipvmQ5JFJ9mnv75rk1CQXtLdTkuwy6ho1vSQPT/LMJLsnWZLk+CRvSfKUUdc2H5Is2O9dzyFMo/2yPJRmgtwtwLoJs6m3S0meBHwC+DHwK8CZwJ9W1d3t9purauK8kO1Ckh8Aj66qa5K8A3g48OZ28wnABVX1f0ZVn6aX5I+A04ACrqYZfXgAzSTa44CXVdX7R1fh3CRZQjPvas+q2jLqeiYyECaR5EDg4zRzIS6jmTW9AngAzZIax1XV5aOrcG6SXACcXFWfT7I38CFgC/CMqrojyS1Vtcf077IwJdlcVcvb+5cDh1fVT9vH96EJ9X1HWeN8WYw/WJJcAjwVCHAx8Kiq+nq77YnA31bVw0ZY4pwluRA4uqquHnUtExkIk0jyH8AFwClVddtA+zLgZOARVfVbo6pvrpJsqqp7DzxeShMKK2n+MV63HQfC94DnV9X5bW/hkVV1fbttFXBpVd1npEXO0WL+wTL4dzPJrcDyar+k2kMtP62qPUdY4pwleQVNb+dtwJU0vSEAqupLo6oLDIRJJdkM7FVVd0yybVeav5TL+q9sfiT5CfCbVXXFQFuAM4BDaH5V7z6i8uYkyXHA64HXAvejWUX37e3mPwXGq+p/j6i8ebGYf7AkuRpYXVV3JnnX4P+r9vNdUVV7ja7CuUvy4yk2VVUd3GsxExgIk0hyMfDqqjp7km1PB/66qh7Sf2XzI8k/AJdX1Wsn2fYeYG1VLdgTXzNJ8gTgFGAM2LltvhL4AHBqVd01otLmxWL+wZLkgzT/vi6eZNuzgJdU1WN6L2wHYSBMIsnjgE8B/0XTBd/aJT+c5pjtsaPu2s1FO9Jm6eCvywnbD9xeDzkMag8x7A3cXlU3jbicebPYf7BMpT3kV1U166WiF5okOwO/DuxbVR9vez9bl/EZXV0GwuSS3Bd4Bk0ALKcZGfBfwKcXw19Ibb8W+w+WxS7JQ2kuALYF2L+qlic5hubc17NGWpuBcE/tL8s/ofnH9YWq+kySNwBHA98BXm4oaJSm+MGyDjjHv5sLW5KvAu+tqg8mubGq7tP2EC6tqv1GWpuBcE/t+PWjgC/QhMD5wF40x6CfD9w56iSXJtOOc3/1ZOeHtDAkuZHmHFAl+enWk+SD90dWm4FwT+1Ih8Or6vok+wGXAyur6sYke9Ik+f1GWqQ0ifak8m1VtWTUtWhySb4NvKiqxreGQJJfA95ZVb82ytoWyiU0F5rdgBvb+z8FfkbTJYdmApD/3TQySaabqevfzYXvJODz7Yi+XZL8JfDHwItGW5ZrGU3lG8B72yUe3kNz4u7PkuwB/Fn7WBqV3wduB66a5HblCOtSB1X1OZpD0auAL9Nc9P4ZVfVvIy0MDxlNKslq4N3AQcBbga8A/wrsT7P+zzOq6qKRFagdWpLzaeZT/NMk23ajOWTkjz3Nmt3LSVTVeuDJg21J1tCcCLphJEVJv3AmU/fu7wT+qr9SNFvtPKA/pBkmvHxwW1U9bwQl/Zw9BEnqUZKP0qxD9VnglyaHVtVIw9xAkKQetcNOD1qIs+c9zihJ/boc2HXURUzGHoIkDVmSwdVnHw78Hs3y19cNPm/US44YCJI0ZNMseT3I5a8lSQuD5xAkqUdJPjNF+z2WM++bPQRJ6lGSm6tqxSTtI1/czolpktSDJFtXoN1l4P5WBwPrey7pHgwESerHAe2fOw3cByjgCprLvo6Uh4wkqUdJXgScR7NI4X40CxJ+rKouHWVd4EllSerbtcA48CDgBuDBwPlJnjrSqrCHIEm9SvJd4KVVde5A22NoLpBz2KjqAgNBknrVrmW0qqruGmhbCmysqj1HVhgeMpKkvn2H5kJbg17eto+UPQRJ6lGSQ2iWvl5GM7roAOBW4KlVdfFIazMQJKlf7SGiXwf2Ba4GvllVd462KgNBktTyHIIkCTAQJEktA0GSBBgI0qSS/CTJ7Uk2J7k2yZlJls/xPR+T5Mr5qlGabwaCNLXfqarlwOE0lz38y9GWIw2XgSDNoKquBf6VJhhI8tQk65LclOS8JA/Z+twkleSBA4/PTHJakmXAvwD7tr2OzUn2TbJTkhOTXJbkhiSfSDLSNfG14zIQpBkk2R84GvhhkgcBHwVOAFYB/wx8Nsku071HVd3avsfVVbW8vV0NvBR4GnAUzZj0G4F3DemjSNMyEKSpfTrJLTSzSa8H/i/wLODzVfXv7USiNwH3An5jG/fxYuDVVXVlVW2hWRP/me3EJalXBoI0tadV1R7AY4BDgJU0v+J/fmWrqvoZTWDst437WA2c0x5+ugm4GLgb2Hvby5a2jYEgzaCqvgycSdMbuJrmSxyAJKFZi+aqtuk2YPeBl99/8K0mefsrgKOras+B225VddUkz5WGykCQunkr8ATg34AnJ3lckp1pVq3cAny9fd53gN9PsiTJk2jODWx1HXDfJPceaHsP8LokqwGSrEryu0P9JNIUDASpg6raAPwj8ArgucA7gI3A79AMT72jferL2rabgOcAnx54j0toTkj/qD1EtC/wNuCfgH9rz1f8P+DIHj6SdA8ubidJAuwhSJJaBoIkCTAQJEktA0GSBBgIkqSWgSBJAgwESVLLQJAkAfD/AYhzPt6bPSkFAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# let's plot the bars\n", + "ax = (s / 1000).plot.bar(color = \"k\")\n", + "ax.set_ylabel(\"Rides / Day (Thousands)\")\n", + "None" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### IRIS dataset: http://archive.ics.uci.edu/ml/datasets/iris\n", + "- This set of data is used in beginning Machine Learning Courses\n", + "- You can train a ML algorithm to use the values to predict the class of iris\n", + "- Dataset link: https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 1: Downloading IRIS dataset (https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# use requests to get this URL\n", + "url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data\"\n", + "response = requests.get(url)\n", + "\n", + "# check that the request was successful\n", + "response.raise_for_status()\n", + "\n", + "# open a file called \"iris.csv\" for writing the data locally\n", + "file_obj = open(\"iris.csv\", \"w\")\n", + "\n", + "# write the text of response to the file object\n", + "file_obj.write(response.text)\n", + "\n", + "# close the file object\n", + "file_obj.close()\n", + "\n", + "# Look at the file you downloaded. What's wrong with it?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 2: Making a DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>5.1</th>\n", + " <th>3.5</th>\n", + " <th>1.4</th>\n", + " <th>0.2</th>\n", + " <th>Iris-setosa</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>4.9</td>\n", + " <td>3.0</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>4.7</td>\n", + " <td>3.2</td>\n", + " <td>1.3</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>4.6</td>\n", + " <td>3.1</td>\n", + " <td>1.5</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>5.0</td>\n", + " <td>3.6</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5.4</td>\n", + " <td>3.9</td>\n", + " <td>1.7</td>\n", + " <td>0.4</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " 5.1 3.5 1.4 0.2 Iris-setosa\n", + "0 4.9 3.0 1.4 0.2 Iris-setosa\n", + "1 4.7 3.2 1.3 0.2 Iris-setosa\n", + "2 4.6 3.1 1.5 0.2 Iris-setosa\n", + "3 5.0 3.6 1.4 0.2 Iris-setosa\n", + "4 5.4 3.9 1.7 0.4 Iris-setosa" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# read the \"iris.csv\" file into a Pandas dataframe\n", + "iris_df = pd.read_csv(\"iris.csv\")\n", + "\n", + "# display the head of the data frame\n", + "iris_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 3: Our CSV file has no header. Let's add column names.\n", + "- Refer to the documentation: https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>sep-length</th>\n", + " <th>sep-width</th>\n", + " <th>pet-length</th>\n", + " <th>pet-width</th>\n", + " <th>class</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>5.1</td>\n", + " <td>3.5</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>4.9</td>\n", + " <td>3.0</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>4.7</td>\n", + " <td>3.2</td>\n", + " <td>1.3</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>4.6</td>\n", + " <td>3.1</td>\n", + " <td>1.5</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5.0</td>\n", + " <td>3.6</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " sep-length sep-width pet-length pet-width class\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Attribute Information:\n", + "# 1. sepal length in cm\n", + "# 2. sepal width in cm\n", + "# 3. petal length in cm\n", + "# 4. petal width in cm\n", + "# 5. class: Iris Setosa, Iris Versicolour, Iris Virginica\n", + "\n", + "# These should be our headers \n", + "# [\"sep-length\", \"sep-width\", \"pet-length\", \"pet-width\", \"class\"]\n", + "\n", + "iris_df = pd.read_csv(\"iris.csv\",\n", + " names = [\"sep-length\", \"sep-width\", \"pet-length\", \"pet-width\", \"class\"])\n", + "iris_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 4: Connect to our database version of this data!" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>type</th>\n", + " <th>name</th>\n", + " <th>tbl_name</th>\n", + " <th>rootpage</th>\n", + " <th>sql</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>table</td>\n", + " <td>iris</td>\n", + " <td>iris</td>\n", + " <td>2</td>\n", + " <td>CREATE TABLE \"iris\" (\\n\"sep-length\" REAL,\\n \"...</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " type name tbl_name rootpage \\\n", + "0 table iris iris 2 \n", + "\n", + " sql \n", + "0 CREATE TABLE \"iris\" (\\n\"sep-length\" REAL,\\n \"... " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris_conn = sqlite3.connect(\"iris-flowers.db\")\n", + "pd.read_sql(\"SELECT * FROM sqlite_master WHERE type='table'\", iris_conn)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 5: Using SQL, get the 10 'Iris-setosa' flowers with the longest sepal length.\n", + "Break any ties by ordering by the shortest sepal width." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>sep-length</th>\n", + " <th>sep-width</th>\n", + " <th>pet-length</th>\n", + " <th>pet-width</th>\n", + " <th>class</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>5.8</td>\n", + " <td>4.0</td>\n", + " <td>1.2</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>5.7</td>\n", + " <td>3.8</td>\n", + " <td>1.7</td>\n", + " <td>0.3</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>5.7</td>\n", + " <td>4.4</td>\n", + " <td>1.5</td>\n", + " <td>0.4</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>5.5</td>\n", + " <td>3.5</td>\n", + " <td>1.3</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5.5</td>\n", + " <td>4.2</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>5.4</td>\n", + " <td>3.4</td>\n", + " <td>1.7</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>5.4</td>\n", + " <td>3.4</td>\n", + " <td>1.5</td>\n", + " <td>0.4</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>5.4</td>\n", + " <td>3.7</td>\n", + " <td>1.5</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>5.4</td>\n", + " <td>3.9</td>\n", + " <td>1.7</td>\n", + " <td>0.4</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>5.4</td>\n", + " <td>3.9</td>\n", + " <td>1.3</td>\n", + " <td>0.4</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " sep-length sep-width pet-length pet-width class\n", + "0 5.8 4.0 1.2 0.2 Iris-setosa\n", + "1 5.7 3.8 1.7 0.3 Iris-setosa\n", + "2 5.7 4.4 1.5 0.4 Iris-setosa\n", + "3 5.5 3.5 1.3 0.2 Iris-setosa\n", + "4 5.5 4.2 1.4 0.2 Iris-setosa\n", + "5 5.4 3.4 1.7 0.2 Iris-setosa\n", + "6 5.4 3.4 1.5 0.4 Iris-setosa\n", + "7 5.4 3.7 1.5 0.2 Iris-setosa\n", + "8 5.4 3.9 1.7 0.4 Iris-setosa\n", + "9 5.4 3.9 1.3 0.4 Iris-setosa" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.read_sql(\"\"\"\n", + " SELECT *\n", + " FROM iris\n", + " WHERE class = 'Iris-setosa'\n", + " ORDER BY `sep-length` DESC, `sep-width` ASC\n", + " LIMIT 10\n", + "\"\"\", iris_conn)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lecture 35: Scatter Plots\n", + "**Learning Objectives**\n", + "- Set the marker, color, and size of scatter plot data\n", + "- Calculate correlation between DataFrame columns\n", + "- Use subplots to group scatterplot data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set the marker, color, and size of scatter plot data\n", + "\n", + "To start, let's look at some made-up data about Trees.\n", + "The city of Madison maintains a database of all the trees they care for." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>age</th>\n", + " <th>height</th>\n", + " <th>diameter</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>1.5</td>\n", + " <td>0.8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>1</td>\n", + " <td>1.9</td>\n", + " <td>1.2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>1</td>\n", + " <td>1.8</td>\n", + " <td>1.4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2</td>\n", + " <td>1.8</td>\n", + " <td>0.9</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>2</td>\n", + " <td>2.5</td>\n", + " <td>1.5</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " age height diameter\n", + "0 1 1.5 0.8\n", + "1 1 1.9 1.2\n", + "2 1 1.8 1.4\n", + "3 2 1.8 0.9\n", + "4 2 2.5 1.5" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trees = [\n", + " {\"age\": 1, \"height\": 1.5, \"diameter\": 0.8},\n", + " {\"age\": 1, \"height\": 1.9, \"diameter\": 1.2},\n", + " {\"age\": 1, \"height\": 1.8, \"diameter\": 1.4},\n", + " {\"age\": 2, \"height\": 1.8, \"diameter\": 0.9},\n", + " {\"age\": 2, \"height\": 2.5, \"diameter\": 1.5},\n", + " {\"age\": 2, \"height\": 3, \"diameter\": 1.8},\n", + " {\"age\": 2, \"height\": 2.9, \"diameter\": 1.7},\n", + " {\"age\": 3, \"height\": 3.2, \"diameter\": 2.1},\n", + " {\"age\": 3, \"height\": 3, \"diameter\": 2},\n", + " {\"age\": 3, \"height\": 2.4, \"diameter\": 2.2},\n", + " {\"age\": 2, \"height\": 3.1, \"diameter\": 2.9},\n", + " {\"age\": 4, \"height\": 2.5, \"diameter\": 3.1},\n", + " {\"age\": 4, \"height\": 3.9, \"diameter\": 3.1},\n", + " {\"age\": 4, \"height\": 4.9, \"diameter\": 2.8},\n", + " {\"age\": 4, \"height\": 5.2, \"diameter\": 3.5},\n", + " {\"age\": 4, \"height\": 4.8, \"diameter\": 4},\n", + "]\n", + "trees_df = DataFrame(trees)\n", + "trees_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scatter Plots\n", + "We can make a scatter plot of a DataFrame using the following function...\n", + "\n", + "`df_name.plot.scatter(x = \"x_col_name\", y = \"y_col_name\", \\\n", + " color = \"red\", marker = \"*\", s = 50)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the trees data comparing a tree's age to its height...\n", + " - What is `df_name`?\n", + " - What is `x_col_name`?\n", + " - What is `y_col_name`?" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='age', ylabel='height'>" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEMCAYAAADeYiHoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAag0lEQVR4nO3df2zk9Z3f8ecLe3+4XhwjGLZ35OxZuKT82HSXi4NUKTloMNoj7XWvIlVxk4at3G5KyinQkIZKUH4qSCjhuEgJyeaG8iuyjly52w2hadocBCVClzWhsNkoQT3wLkfY1UCwwzpmvTbv/jEzt7POx/bMMv7OjOf1kL5ivt/5eL7v735kv/n8mM9HEYGZmdlCpzQ7ADMza01OEGZmluQEYWZmSU4QZmaW5ARhZmZJ3c0OoFHOOOOMyOfzzQ7DzKytPPPMM69FRC713qpJEPl8nvHx8WaHYWbWViQdWOw9dzGZmVmSE4SZmSU5QZiZWZIThJmZJTlBmJlZkhOEmVkbK04X2fvKXorTxYZ/thOEmVmbGts3xuA9g1z20GUM3jPI2E/GGvr5ThBmZm2oOF1kdM8oM3MzTB2dYmZuhtHdow1tSThBmJm1oYnJCdZ2rT3h2pquNUxMTjTsHk4QZmZtKN+fZ3Z+9oRrx+aPke/PN+weThBmZm0o15ujsL1AT3cPfev66OnuobC9QK43uazSSVk1azGZmXWakc0jDG8aZmJygnx/vqHJAZwgzMzaWq431/DEUOEuJjMzS3KCMDOzJCcIMzNLyixBSHpS0luSjpSPny9R9jpJhyRNSbpP0rqs4jQzs5KsWxDXRMSG8vGPUgUkbQNuAC4F8sDZwK3ZhWhmZtCaXUxXAYWI2B8RbwC3AzuaG5KZWefJOkHcKek1ST+UdMkiZS4Anqs6fw7YKOn0hQUl7ZQ0Lmm8WGz8SoZmZp0sywTxOUrdRWcBu4BvSTonUW4DMFV1Xnl96sKCEbErIoYiYiiXW5l5wGZmnSqzBBERfxMRb0bE0Yh4APgh8JFE0SNAX9V55fWbKx2jmVm7Wa37QQSgxPX9wJaq8y3A4Yh4PZOozMzaxKrYD0JSv6RtktZL6pb0MeD3gf+VKP4gMCrpfEmnATcC92cRp5lZu1hN+0GsAe4AisBrwB8DfxQRP5c0UP5exABARHwHuAt4AjhQPm7OKE4zs7aQxX4QmSzWFxFF4AOLvHeQ0sB09bW7gbszCM3MrC15PwgzM0vyfhBmZraokc0jbN24lR+98iMuOusizsud19DPd4IwM2tTY/vGGN0zytqutczOz1LYXmBk80jDPt9dTGZmbWg1zWIyM7MGymIWkxOEmVkb8iwmMzNL8iwmMzNb1MjmEYY3DTMxOUG+P9/Q5ABOEGZmbS3Xm2t4YqhwF5OZmSU5QZiZWZIThJmZJTlBmJlZkhOEmZklOUGYmVmSE4SZmSVlniAkvUfSW5IeXuT9HZLmy7vMVY5Lso3SzMya8UW5LwN7lynzdER8MItgzMwsLdMWhKQrgUnge1ne18zM6pdZgpDUB9wGfKaG4hdKek3SC5JukuQlQczMMpblH97bgUJEvCxpqXJPAZuBA8AFwJ8Dc8CdCwtK2gnsBBgYGGh0vGZmHS2TFoSkrcAw8CfLlY2IFyPipYh4OyL2UWp1fHSRsrsiYigihnK5lVmsysysU2XVgrgEyAMHy62HDUCXpPMj4veW+dkAlmxymJlZ42U1BrELOAfYWj6+Cnwb2LawoKTLJW0svz4XuAnYnVGcZmZWlkmCiIhfR8ShygEcAd6KiKKkgfJ3HSqDCJcCz0uaBh4HHgU+n0WcZmZ2XFNmB0XELVWvD1LqcqqcXw9c34SwzMysipfaMDOzJCcIMzNLcoIwM7MkJwgzM0tygjAzsyQnCDMzS3KCMDOzJCcIMzNLcoIwM7MkJwgzM0tygjAzsyQnCDMzS3KCMDOzJCcIMzNLcoIwM7MkJwgzM0tygjAzs6TME4Sk90h6S9LDS5S5TtIhSVOS7pO0LssYzcysOS2ILwN7F3tT0jbgBkp7U+eBs4FbM4nMzMz+XqYJQtKVwCTwvSWKXQUUImJ/RLwB3A7sWPnozMysWmYJQlIfcBvwmWWKXgA8V3X+HLBR0umJz9wpaVzSeLFYbFywZmaWaQvidkotg5eXKbcBmKo6r7w+dWHBiNgVEUMRMZTL5RoUppmZAXRncRNJW4Fh4MIaih8B+qrOK6/fbHBYZma2hEwSBHAJpQHng5Kg1EroknR+RPzegrL7gS3AI+XzLcDhiHg9m1DNzNpHcbrIxOQE+f48ud7G9qRk1cW0CzgH2Fo+vgp8G9iWKPsgMCrpfEmnATcC92cSpZlZGxnbN8bgPYNc9tBlDN4zyNhPxhr6+ZkkiIj4dUQcqhyUupHeioiipAFJRyQNlMt+B7gLeAI4UD5uziJOM7N2UZwuMrpnlJm5GaaOTjEzN8Po7lGK042bsJNVF9MJIuKWqtcHKXU5Vb9/N3B3xmGZmbWNickJ1natZWZu5u+vrelaw8TkRMO6mrzUhplZG8r355mdnz3h2rH5Y+T78w27hxOEmVkbyvXmKGwv0NPdQ9+6Pnq6eyhsLzR0oLopXUxmZvbOjWweYXjT8IrNYnKCMDNrY7neXMMTQ4W7mMzMLMkJwszMkpwgzMwsyQnCzMySnCDMzCzJCcLMzJKcIMzMLMkJwszMkmpOEJL+YT3XzcysvdXTgnhhkes/bUQgZmbWWupJEPqNC1If8HbjwjEzs1ax7FpMkl4GAuiRdHDB26cDjd3CyMzMWkIti/V9nFLr4XHg31ZdD0p7Rf98JQIzM7PmWjZBRMT3ASSdERG/PtkbSXoYuBToBQ4Bd0XEnyXK7QAKwEzV5X8eEU+e7L3NzKx+9Sz3PSdpJ7CV39wi9BM1/PydwGhEHJV0LvCkpGcj4plE2acj4oN1xGZmZg1WT4J4EPjHwLeAw/XeKCL2V5+Wj3OAVIIwM7MmqydBbAM2RcTkyd5M0leAHUAP8CylcY2UCyW9BvwSeAi4MyLmEp+3E9gJMDAwcLJhmZlZQj3TXA8C697JzSLiU8CpwIeAR4GjiWJPAZuBM4ErgBHgs4t83q6IGIqIoVxuZXZUMjPrVEu2ICR9uOr0QWC3pD9lQRdTRPx1rTeMiHngB5I+DlwNfGnB+y9Wne6TdBulBHFnrfcwM7N3brkupkLi2ucXnAdw9kne+5waygWJL+mZmdnKWjJBRMSmRtxE0pnAh4HHKE1fHabUdfRvEmUvB34cEYfLs51uAr7ZiDjMzKx2Wa3mGpS6k/4OeAP4AnBtROyWNCDpiKTKKPOlwPOSpikNYj/Kb7ZazMxshdU8i6lqyY2FjlL6w/8ocG9qtlFEFIGLU58bEQep+l5FRFwPXF9rXGZmtjLqmeb6JUrLbnwJeBkYAP4Tpe6fXwKfAX4H+C8NjtHMzJqgngSxA7gsIn5RuSDpfwLfjYgLJD0B/B+cIMzMVoV6xiB+Cziy4No08Nvl1y8A/Q2IyczMWkA9CeJblL4HMSzpXEnDwP8oXwf4J8BEg+MzM7MmqSdBfBL4G+BrlJbJ2AXsBf5j+f0XgX/W0OjMzKxpah6DiIi3gBvKR+r9Q40KyszMmm+5pTZ+PyKeKr/+8GLl6llqw8zaU3G6yMTkBPn+PLler33WCZZrQXyF0sJ5kF52A05+qQ0zaxNj+8YY3TPK2q61zM7PUtheYGTzSLPDshWmiNR339rP0NBQjI+PNzsMs1WnOF1k8J5BZuaOb/LY093DgWsPuCWxCkh6JiKGUu/VtdSGpDWSPiTpX5fPeyX1NiJIM2tNE5MTrO1ae8K1NV1rmJicaE5AlpmaE4Sk91H6rsPXOd7ddDFw3wrEZWYtIt+fZ3Z+9oRrx+aPke/PNycgy0w9LYh7gf8WEecCx8rXvg9472hruOJ0kb2v7KU4XWx2KB0v15ujsL1AT3cPfev66OnuobC94O6lDlDPUhsXAA+XXwdARExL6ml4VNbRPCDaekY2jzC8adizmDpMPS2ICeD91RckXQT8v0YGZJ2tOF1kdM8oM3MzTB2dYmZuhtHdo25JtIBcb44PnPUBJ4cOUk+CuAn4tqRbgXWS/ivwF8CNKxKZdSQPiJq1jpoTREQ8BvwBkAOepLTc9x9FxHdXJjTrRB4QNWsd9cxiWgt8gNL+0L8EeoFrJT24QrFZB/KAqFnrqGeQ+gFgC6XVW+ted0nSw5S2E+0t//xdEfFni5S9Dvgc0ENpxdirI+Jovfe09jSyeYStG7fyo1d+xEVnXcR5ufOaHZLhpTY6UT0J4g+ATRExeZL3uhMYjYijks4FnpT0bEQ8U11I0jZKCwJ+GPgF8JfArSyySKCtPp7F1HpcJ52pnkHqg8C6k71RROyvagVE+TgnUfQqoFAu/wZwO6Xd7KwDeBZT63GddK7lVnOtXsH1QUobBv0pcLi6XK2ruUr6CqU/9j2U9pR4PFHsAmB31flzwEZJp0fE6ws+byewE2BgYKCWEKzFVWYxVa/7U5nF5G6N5nCddK7luphSK7h+fsF5zau5RsSnJP0xpd3nLgFS4wobgKmq88rrU4ETEkRE7KK0cRFDQ0OrY9XBDudZTK3HddK5luxiiohNNRx1LfUdEfMR8QPg3cDViSJHgL6q88rrN+u5j7Wnyiym9V3r6V3Ty/qu9Z7F1GSeWda56hmkXol7p8Yg9lOaLfVI+XwLcHhh95KtYgGSgOP/tebyUhudqa7lvk+WpDMlXSlpg6Su8kylESA1dvEgMCrpfEmnUfqm9v1ZxGnNVz0gOn1s2gOiLcRLbXSeTBIEpXGKq4G/A94AvgBcGxG7JQ1IOiJpACAivgPcBTwBHCgfN2cUpzWZl9owax2ZdDFFRJHS3hGp9w5SGpiuvnY3cHcGoVmL8YCoWevIqgVhVhMPiJq1jmYOUpsleUDUrDU4QVhLyvXmnBjMmsxdTGZmluQEYWZmSU4QZmaW5ARhZmZJThBmZpbkBGFmZklOEGZmluQEYWZmSU4QZmaW5ARhZmZJThBmZpbkBGFmZklOEGZmlpTVlqPrJBUkHZD0pqRnJV2+SNkdkubLu8xVjkuyiNNaR3G6yN5X9nqrUbNlrOTvSlbLfXcDL1PaVe4g8BHgEUnvi4iJRPmnI+KDGcVmLWZs3xije0ZZ27WW2flZCtsLjGweaXZYZi1npX9XMmlBRMR0RNwSERMR8XZEPAa8BLw/i/tb+yhOFxndM8rM3AxTR6eYmZthdPeoWxJmC2Txu9KUMQhJG4H3AvsXKXKhpNckvSDpJknJlo6knZLGJY0Xi/4DshpMTE6wtmvtCdfWdK1hYnKiOQGZtagsflcyTxCS1gDfAB6IiJ8lijwFbAbOBK4ARoDPpj4rInZFxFBEDOVy3n1sNcj355mdnz3h2rH5Y+T7880JyKxFZfG7kmmCkHQK8BAwC1yTKhMRL0bES+WuqH3AbcBHMwzTmijXm6OwvUBPdw996/ro6e6hsL3g7UfNFsjidyWzPaklCSgAG4GPRMSxGn80AK1YYNZyRjaPMLxpmInJCfL9eSeHFlGcLrpOWsxK/65kliCAe4HzgOGImFmsUHn6648j4rCkc4GbgG9mFKO1iFxvzn+EWohnlrWulfxdyep7EIPAJ4GtwKGq7zd8TNJA+fVAufilwPOSpoHHgUeBz2cRp5n9Js8s61yZtCAi4gBLdxNtqCp7PXD9igdlZjWpzJaZmTve8K/MlnErb3XzUhtmtiTPLOtcThBmtiTPLOtcWQ5Sm1mb8syyzuQEYWY18cyyzuMuJjMzS3KCMDOzJCcIMzNLcoIwM7MkJwgzM0tygjAzsyQnCDMzS3KCMDOzJCcIMzNLcoIwM7MkJwgzM0tygjAzsyQnCDMzS8pqy9F1kgqSDkh6U9Kz5b2nFyt/naRDkqYk3SdpXRZxmpnZcVm1ILqBl4GLgXcBNwGPSMovLChpG3ADpb2p88DZwK0ZxWlmZmWZJIiImI6IWyJiIiLejojHgJeA9yeKXwUUImJ/RLwB3A7syCJOMzM7riljEJI2Au8F9ifevgB4rur8OWCjpNMTn7NT0rik8WKxuDLBmpl1qMwThKQ1wDeAByLiZ4kiG4CpqvPK61MXFoyIXRExFBFDuZx3ujIza6RME4SkU4CHgFngmkWKHQH6qs4rr99cwdDMzGyBzBKEJAEFYCNwRUQcW6TofmBL1fkW4HBEvL4ScRWni+x9ZS/FaXdRmZlVy7IFcS9wHvCHETGzRLkHgVFJ50s6DbgRuH8lAhrbN8bgPYNc9tBlDN4zyNhPxlbiNmZmbSmr70EMAp8EtgKHJB0pHx+TNFB+PQAQEd8B7gKeAA6Uj5sbHVNxusjonlFm5maYOjrFzNwMo7tH3ZIwMyvrzuImEXEA0BJFNiwofzdw90rGNDE5wdqutczMHW/MrOlaw8TkBLleD3ibmXXsUhv5/jyz87MnXDs2f4x8f745AZmZtZiOTRC53hyF7QXWd62nd00v67vWU9hecOuhRXjygFnzdWyCACCgNLnq+H+t+Tx5wKw1KCKaHUNDDA0Nxfj4eM3li9NFBu8ZPGEMoqe7hwPXHnAroolcL2bZkvRMRAyl3uvYFkRlkLpaZZDamsf1YtY6OjZBeJC6NblezFpHxyaIyiB1T3cPfev66Onu8SB1C3C9mLWOjh2DqChOF5mYnCDfn/cfoRbiejHLxlJjEJl8Ua6V5Xpz/gPUglwvZs3XsV1MZma2NCcIMzNLcoIwM7MkJwgzM0tygjAzsyQnCDMzS3KCMDOzJCcIMzNLyixBSLpG0riko5LuX6LcDknzVduSHpF0yUrF5X0HzMzSsvwm9S+AO4BtQM8yZZ+OiA+udEBj+8YY3TPK2q61zM7PUtheYGTzyErf1sysLWTWgoiIRyPir4DXs7rnUorTRUb3jDIzN8PU0Slm5mYY3T3qloSZWVmrjkFcKOk1SS9IuklSsqUjaWe522q8WKzvD7v3HTAzW1orJoingM3AmcAVwAjw2VTBiNgVEUMRMZTL1bewm/cdMDNbWssliIh4MSJeioi3I2IfcBvw0Ubfx/sOmJktrR2W+w5AK/HBI5tHGN407H0HzMwSMksQ5XGEbqAL6JK0HpiLiLkF5S4HfhwRhyWdC9wEfHOl4vK+A2ZmaVl2Md0IzAA3AB8vv75R0kD5uw4D5XKXAs9LmgYeBx4FPp9hnGZmhrccNTPraEttOdpyg9RmZtYanCDMzCzJCcLMzJJWzRiEpCJw4CR//AzgtQaG00x+lta0Wp5ltTwH+FkqBiMiOZVz1SSId0LS+GKDNO3Gz9KaVsuzrJbnAD9LLdzFZGZmSU4QZmaW5ARRsqvZATSQn6U1rZZnWS3PAX6WZXkMwszMktyCMDOzJCcIMzNLcoIwM7OkjkgQkq4pb016VNL9y5S9TtIhSVOS7pO0LqMwa1Lrs0jaIWm+vFJu5bgks0CXIWmdpIKkA5LelPRsean3xcq3bL3U8yytXi8Akh6W9KqkX5W3/f33S5Rt5Xqp6TnaoU4qJL1H0luSHl6iTMPqpCMSBPAL4A7gvqUKSdpGaTnyS4E8cDZw60oHV6eanqXs6YjYUHU8ubKh1aUbeBm4GHgXpX0/HpGUX1iwDeql5mcpa+V6AbgTyEdEH/AvgDskvX9hoTaol5qeo6zV66Tiy8Dexd5sdJ10RIKIiEcj4q+A15cpehVQiIj9EfEGcDuwY4XDq0sdz9LSImI6Im6JiIny9rKPAS8BqV/glq6XOp+l5ZX/nY9WTsvHOYmirV4vtT5HW5B0JTAJfG+JYg2tk45IEHW4AHiu6vw5YKOk05sUzzt1oaTXys3rm8q7+rUkSRuB9wL7E2+3Vb0s8yzQBvUi6SuSfg38DHiV0uZdC7V8vdT4HNDidSKpD7gN+MwyRRtaJ04QJ9oATFWdV16f2oRY3qmngM3AmcAVwAjw2aZGtAhJa4BvAA9ExM8SRdqmXmp4lraol4j4FKV/3w9R2tXxaKJYy9dLjc/RDnVyO6WWwcvLlGtonThBnOgI0Fd1Xnn9ZhNieUci4sWIeKnc5bGP0v99fLTZcS0k6RTgIWAWuGaRYm1RL7U8S7vUC0BEzEfED4B3A1cnirRFvSz3HK1eJ5K2AsPAn9RQvKF14gRxov3AlqrzLcDhiGjr/v6yANTsIKpJElAANgJXRMSxRYq2fL3U8SwLtVy9JHST7rtv+XpZYLHnWKjV6uQSSgPOByUdAq4HrpD040TZhtZJRyQISd2S1gNdQJek9Yv0MT4IjEo6X9JpwI3A/RmGuqxan0XS5eW+cCSdS2lmze5so13WvcB5wB9GxMwS5Vq+XqjxWVq9XiSdKelKSRskdZVnxYwAf50o3rL1Us9ztHqdUFpn6Rxga/n4KvBtYFuibGPrJCJW/QHcwvFZDJXjFmCAUpNsoKrsfwYOA78C/juwrtnxn8yzAF8oP8c08CKlZvOaZsdf9RyD5djfKsddOT7WbvVSz7O0Qb3kgO9Tmi3zK2Af8B/K77VNvdTzHK1eJ4lnuwV4OIs68WJ9ZmaW1BFdTGZmVj8nCDMzS3KCMDOzJCcIMzNLcoIwM7MkJwgzM0tygjAzsyQnCDMzS3KCMDOzJCcIs3dA0g2S/ra81ehPJf3L8vUuSV8s7zHwkkpbxUZl3SxJ71Jpm9JXJb0i6Q5JXc19GrMTtdSmGGZt6G8p7TVwCPhXwMOSfhfYDlxOaXG1aeCbC37uAUrr5fwu0As8Rmnb0q9lErVZDbwWk1kDSfq/wM3Ap4E/j4ivla8PA/8bWAOcDhwE+qO88qukEWBnRPzTZsRtluIWhNk7IOkTlFbPzJcvbQDOAH6bUougovr1IKVE8WppGwmg1N273G5hZplygjA7SZIGga8DlwJPR8R8uQUhSvsfv7uq+O9UvX6Z0taXZ0TEXEbhmtXNg9RmJ6+X0j4QRQBJ/47S3sYAjwCflnSWpH7gc5UfiohXge8CX5TUJ+kUSedIujjT6M2W4QRhdpIi4qfAF4GnKQ04vw/4Yfntr1NKAs8DzwKPA3PAfPn9TwBrgZ8CbwB/AfxWVrGb1cKD1GYZkHQ58NWIGGx2LGa1cgvCbAVI6pH0kfIe4mdRmtn0l82Oy6webkGYrQBJ/4DSnsjnAjOUNpn/dET8qqmBmdXBCcLMzJLcxWRmZklOEGZmluQEYWZmSU4QZmaW5ARhZmZJ/x/mh3cJngmVbwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "trees_df.plot.scatter(x = \"age\", y = \"height\", color = \"g\") \n", + "# TODO: change y to diameter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now plot with a little more beautification...\n", + " - Use a new [color](https://matplotlib.org/3.5.0/_images/sphx_glr_named_colors_003.png)\n", + " - Use a type of [marker](https://matplotlib.org/stable/api/markers_api.html)\n", + " - Change the size (any int)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='age', ylabel='height'>" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Plot with some more beautification options.\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", color = \"r\", marker = \"D\", s = 50) # D for diamond" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Tree Age vs Height')" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Add a title to your plot.\n", + "ax = trees_df.plot.scatter(x = \"age\", y = \"height\", color = \"r\", marker = \"D\", s = 50) # D for diamond\n", + "ax.set_title(\"Tree Age vs Height\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Correlation" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>age</th>\n", + " <th>height</th>\n", + " <th>diameter</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>age</th>\n", + " <td>1.000000</td>\n", + " <td>0.797468</td>\n", + " <td>0.854578</td>\n", + " </tr>\n", + " <tr>\n", + " <th>height</th>\n", + " <td>0.797468</td>\n", + " <td>1.000000</td>\n", + " <td>0.839345</td>\n", + " </tr>\n", + " <tr>\n", + " <th>diameter</th>\n", + " <td>0.854578</td>\n", + " <td>0.839345</td>\n", + " <td>1.000000</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " age height diameter\n", + "age 1.000000 0.797468 0.854578\n", + "height 0.797468 1.000000 0.839345\n", + "diameter 0.854578 0.839345 1.000000" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What is the correlation between our DataFrame columns?\n", + "corr_df = trees_df.corr()\n", + "corr_df" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7974683544303798" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What is the correlation between age and height (don't use .iloc)\n", + "# Using index in this case isn't considered as hardcoding\n", + "corr_df['age']['height']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Variating Stylistic Parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='age', ylabel='height'>" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Option 1:\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", marker = \"H\", s = \"diameter\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='age', ylabel='height'>" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Option 2:\n", + "# this way allows you to make it bigger\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", marker = \"H\", s = trees_df[\"diameter\"] * 50) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use subplots to group scatterplot data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Re-visit the Iris Data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>sep-length</th>\n", + " <th>sep-width</th>\n", + " <th>pet-length</th>\n", + " <th>pet-width</th>\n", + " <th>class</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>5.1</td>\n", + " <td>3.5</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>4.9</td>\n", + " <td>3.0</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>4.7</td>\n", + " <td>3.2</td>\n", + " <td>1.3</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>4.6</td>\n", + " <td>3.1</td>\n", + " <td>1.5</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5.0</td>\n", + " <td>3.6</td>\n", + " <td>1.4</td>\n", + " <td>0.2</td>\n", + " <td>Iris-setosa</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>145</th>\n", + " <td>6.7</td>\n", + " <td>3.0</td>\n", + " <td>5.2</td>\n", + " <td>2.3</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " <tr>\n", + " <th>146</th>\n", + " <td>6.3</td>\n", + " <td>2.5</td>\n", + " <td>5.0</td>\n", + " <td>1.9</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " <tr>\n", + " <th>147</th>\n", + " <td>6.5</td>\n", + " <td>3.0</td>\n", + " <td>5.2</td>\n", + " <td>2.0</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " <tr>\n", + " <th>148</th>\n", + " <td>6.2</td>\n", + " <td>3.4</td>\n", + " <td>5.4</td>\n", + " <td>2.3</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " <tr>\n", + " <th>149</th>\n", + " <td>5.9</td>\n", + " <td>3.0</td>\n", + " <td>5.1</td>\n", + " <td>1.8</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>150 rows × 5 columns</p>\n", + "</div>" + ], + "text/plain": [ + " sep-length sep-width pet-length pet-width class\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa\n", + ".. ... ... ... ... ...\n", + "145 6.7 3.0 5.2 2.3 Iris-virginica\n", + "146 6.3 2.5 5.0 1.9 Iris-virginica\n", + "147 6.5 3.0 5.2 2.0 Iris-virginica\n", + "148 6.2 3.4 5.4 2.3 Iris-virginica\n", + "149 5.9 3.0 5.1 1.8 Iris-virginica\n", + "\n", + "[150 rows x 5 columns]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How do we create a *scatter plot* for various *class types*?\n", + "First, gather all the class types." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# In Pandas\n", + "varietes = list(set(iris_df[\"class\"]))\n", + "varietes" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# In SQL\n", + "varietes = list(pd.read_sql(\"\"\"\n", + " SELECT DISTINCT class\n", + " FROM iris\n", + "\"\"\", iris_conn)[\"class\"])\n", + "varietes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In reality, you can choose to write Pandas or SQL queries (or a mix of both!). For the rest of this lecture, we'll use Pandas." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# If you want to continue using SQL instead, don't close the connection!\n", + "iris_conn.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='pet-width', ylabel='pet-length'>" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Change this scatter plot so that the data is only for class ='Iris-setosa'\n", + "iris_df[iris_df[\"class\"] == 'Iris-setosa'].plot.scatter(x = \"pet-width\", y = \"pet-length\")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEMCAYAAADeYiHoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAfeElEQVR4nO3de3TV5Z3v8feXkJhoCBaMWAwkoNWig/Q4KbX1MmoBdVVbnHopA1Uq6JlWKKNjZ5QiYscy2mpXlzpDR088WLURV5eHVlpvaGsL0yUJ51QLpUVrw1VhgxIuRrl9zx/PDuzEX5K9w75l789rrb1+2c/+7ezvkx/kk+f37P17zN0RERHprF+uCxARkfykgBARkUgKCBERiaSAEBGRSAoIERGJ1D/XBaTLcccd53V1dbkuQ0SkT1m5cuU2d6+OeqxgAqKuro7m5uZclyEi0qeY2bquHtMpJhERiaSAEBGRSAoIERGJpIAQEZFIBTNJLSK5c/DgQTZu3MiePXtyXYpEOOaYY6ipqaFfv9TGBAqIIhSLQUsL1NVBdeSb26QQZPM4b9u2DTPj1FNPTfmXkGTWwYMH2bRpE9u2beP4449P6bk6kkWmsRFqa2H8+LBtbMx1RZIJ2T7OO3bsYMiQIQqHPNSvXz+GDBlCa2tr6s/NQD2Sp2IxmDYN2tqgtTVsp00L7VI4cnGcDxw4QGlpaeZeQI5IaWkp+/fvT/l5Cogi0tICZWUd20pLQ7sUjlwdZzPL7AtIr/X22CggikhdHezd27Ft377QLoVDx1nSRQFRRKqroaEBKiqgqipsGxo0UV1odJyT98QTTzBhwoRcl5G3FBBFZtIkWLcOli4N20mTcl2RZIKO82F1dXUsXbo08rHJkyfzwgsvZK2WefPmMWXKlKy93pHS21yLUHW1/posBjrO3du/fz/9++tXYHc0ghCRnIrFoKkp8++mW7hwIWeffTY33XQTgwYNYt68eSxcuJBzzjkHAHfnpptu4vjjj2fgwIGcccYZrFq1KvJ7bdu2jUsvvZRjjz2WQYMGce6553Lw4EEANm/ezJe//GWqq6sZMWIE999/PwDPPfcc8+fPZ9GiRVRWVjJmzJhD+3/xi19k0KBBnHzyyTz88MOHXmfFihXU19dTVVXFkCFDuPnmmw89duWVV3LCCScwcOBAzjvvPFavXp32n5kCQkRyJtuf13j11VcZOXIkW7du5dvf/naHx1544QV+85vfsHbtWnbs2MGiRYsYPHhw5Pe57777qKmpIRaLsWXLFubPn4+ZcfDgQS677DLGjBnDpk2beOmll/jhD3/I888/z8UXX8zs2bO5+uqr2b17N6+99hoAkyZNoqamhs2bN/PTn/6U2bNn89JLLwEwa9YsZs2axc6dO/nLX/7CVVdddaiGSy65hDfeeIOtW7dy5plnMnny5LT/vBQQIpITufi8xtChQ5k5cyb9+/enoqKiw2OlpaXs2rWLP/3pT7g7o0aN4uMf/3jk9yktLeXtt99m3bp1lJaWcu6552JmNDU1EYvFmDt3LmVlZYwcOZLrr7+eJ598MvL7bNiwgWXLlnHPPfdQXl7Opz71KaZPn85jjz126HXefPNNtm3bRmVlJWedddah51533XUMGDCAo446innz5vHaa6/16sNw3VFAiEhO5OLzGsOGDevysQsvvJAZM2Zw4403MmTIEG644QZ27tzJ+vXrqaysPHQD+Na3vsXJJ5/MhAkTGDlyJHfffTcA69atY/PmzRx77LGHbvPnz2fLli2Rr7l582YGDRrEgAEDDrXV1tayadMmABoaGli7di2f/OQn+fSnP82SJUuA8MHEW2+9lZNOOomqqiraV9Pctm3bEf+MEikgRCQncvF5jZ4+MPbNb36TlStXsnr1atauXcv3v/99hg8fzu7duw/dAAYMGMB9993HW2+9xTPPPMMPfvADXnrpJYYNG8aIESPYsWPHoduuXbv45S9/Gfn6Q4cO5d1332XXrl2H2tavX8+JJ54IwCc+8QkaGxvZunUr//qv/8oVV1zBnj17+MlPfsLPfvYzli5dSmtrKy3xVHX3dP2oAAWEiORIvn1eo6mpiVdffZV9+/ZxzDHHUF5eTklJSeS+S5Ys4c0338TdqaqqoqSkhJKSEsaOHUtVVRX33HMPbW1tHDhwgFWrVtHU1ATAkCFDaGlpOTShPWzYMD73uc9x22238cEHH/D666/T0NBwaD7h8ccfJxaL0a9fP4499lgASkpK2LVrF0cddRSDBw/m/fffZ/bs2Rn5mSggRCRn8unzGjt37uT666/nYx/7GLW1tQwePJhbbrklct833niDcePGUVlZyWc/+1m+8Y1vcP7551NSUsIzzzzD73//e0aMGMFxxx3H9OnTD80NXHnllQAM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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEMCAYAAADeYiHoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAi7UlEQVR4nO3deZQU9bn/8fczMAIOmw6I4sBwQa8CURMdg/lprohejPmpx/xcroBGI8bjEmNIvOIaMWqMxOvNNTExigaJS8AlbgE1RpGIgg4ejYDLdWFAlGEYZVMgLM/vj+oee4aaYWrs7qru/rzOqUNPdU31x6pxnqnlqa+5OyIiIi2VxR1ARESSSQVCRERCqUCIiEgoFQgREQmlAiEiIqE6xx0gW/r06eODBg2KO4aISEFZsGDBKnfvG/Ze0RSIQYMGUVtbG3cMEZGCYmZ1rb2nU0wiIhJKBUJEREKpQIiISCgVCBERCVU0F6nbsnbtWlauXMnmzZvjjiI5VFFRQVVVFWVl+rtHJBuKvkCsXbuW+vp69txzT7p164aZxR1JcmDbtm0sX76cVatWsdtuu8UdR76k+vX19OveL+4YJa/o/9RauXIle+65JzvvvLOKQxErKyujX79+rFmzJu4o8iW9tuI1+t/cn9dXvB53lJJX9AVi8+bNdOvWLe4Ykgfl5eVs2bIl7hjyJU18ZiLuzsRnJsYdpeQVfYEAdORQIrSfC99rK17j73V/x3Hm1M3RUUTMSqJAiEhhmPjMRDZt3QTApq2bdBQRMxWIBLv33nsZPXp03DFadcwxx3D33Xd/qXWceeaZXHnllVlKJIWsbnUdT7/3NBXlFfTq0ouK8gqeeu8p6la3+iQIybGiv4sp6QYNGsSUKVM46qijtntv3LhxjBs3LoZU7TNr1qy4I0gRGdBrAPPGz2Pzti9uRy8vK2dArwExpiptKhAJtWXLFjp3jnf3JCFDa5KcTTqmzMoYUTUi7hiSQaeY2qF+fX3OP2Pq1KkceuihTJgwgV133ZVJkyYxdepUDjvsMADcnQkTJrDbbrvRq1cv9t9/fxYuXLjdeubNm8fuu+/O1q1bm+b9+c9/Zv/99weCfoFf/OIXDBkyhMrKSk455RQ++eQTAJYsWYKZceeddzJw4EBGjRrFxo0bOe2006isrKR3794cfPDB1NcH22PkyJFMmTKl6XPuuOMOhg4dSo8ePRg2bBivvvoqAG+++SYjR46kd+/eDB8+nMcee6zV7XDHHXew1157seuuu3L88cfz0UcfNb1nZtx6663svffe7L333h3d1CLSTnkrEGY228w2mtn61PR2G8tOMLMVZrbGzO4ysy75ytlSPu/Jnj9/PoMHD2blypVcccUVzd57+umnmTNnDu+88w6rV69m+vTpVFZWbreOQw45hIqKCp599tmmeffddx9jx44F4JZbbuGRRx7h+eef56OPPmKXXXbhggsuaLaO559/njfffJOnnnqKu+++mzVr1rBs2TIaGxu57bbbQm8bfuCBB5g0aRLTpk1j7dq1PPbYY1RWVrJ582aOO+44Ro8ezcqVK/n1r3/NuHHjePvt7Xf/s88+y2WXXcaMGTP4+OOPqa6u5tRTT222zCOPPML8+fNZvHhx+zesiHRIvo8gfuDu3VPTPmELmNnRwKXAkcAgYDBwTf4iNpfPe7L79+/PhRdeSOfOnbf7JVxeXs66det46623cHeGDh3KHnvsEbqeMWPGcP/99wOwbt06Zs6cyZgxYwD4/e9/z/XXX09VVRVdunRh0qRJPPjgg836ByZNmkRFRQXdunWjvLycxsZG3n33XTp16sRBBx1Ez549t/vMKVOmcMkll3DwwQdjZuy1115UV1czb9481q9fz6WXXspOO+3EqFGjOPbYY5vyZbr33ns566yzOPDAA+nSpQs33HADL730EkuWLGla5rLLLmPXXXdVb4vEIh9nE5IkiaeYzgDudPdF7v4pcC1wZhxB8n1P9oABrV+MGzVqFD/4wQ+44IIL6NevH+eccw5r165l6dKldO/evWkCGDt2LA8//DCbNm3i4Ycf5sADD6S6uhqAuro6vvOd79C7d2969+7N0KFD6dSpU9Npo5Y5Tj/9dI4++mhOPfVU+vfvzyWXXBL6TKtly5YxZMiQ7eZ/9NFHDBgwoNnzkaqrq1m+fHnosumcAN27d6eysrLZsm1tI5FcKsUO73wXiBvMbJWZzTWzka0sMxzI3AOvA/3MbPvzKTmW73uyd9To9cMf/pAFCxawaNEi3nnnHX75y18ycOBA1q9f3zQBDBs2jOrqambNmtXs9BIEv2BnzZrF6tWrm6aNGzey5557huYoLy/n6quvZvHixbz44os88cQTTJs2bbtsAwYM4L333ttufv/+/Vm2bBnb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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEQCAYAAACqduMIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAiCElEQVR4nO3de5hcVZnv8e8vF0ISQoi5AYFOIDiawJCALYIBxAiJMM7z4FEuQWbCUcLgI6gIKiJIQESDDGcU0CPXAKICZ8Ar4SiHmxckJCiXCGZACSGBkKC5TiCEvOePXZ1Umt3dVd1Vu2rv/n2ep56u2rWq9rv2qq639t5r7aWIwMzMrL0+jQ7AzMyakxOEmZmlcoIwM7NUThBmZpbKCcLMzFI5QZiZWSonCDMzS5VJgpC0vt3tTUlXdlL+LEkvS1oj6QZJA7KI08zMtskkQUTETm03YDSwEbgjrayk6cC5wAeAccDewEVZxGlmZtso65HUkmYCFwLjI2Xlkn4APB8R55UefwC4NSJ27ex9R4wYEePGjatDxGZmxbVw4cJVETEy7bl+WQcDzARuTksOJfsCPyl7/DgwWtLwiHi1ozcdN24cCxYsqGGYZmbFJ2lJR89lepJaUgvwPuCmTortBKwpe9x2f0jK+50maYGkBStXrqxdoGZmlnkvpn8FfhMRf+2kzHpg57LHbffXtS8YEddERGtEtI4cmbqHZGZm3dSIBNHZ3gPAImBS2eNJwIrODi+ZmVntZZYgJL0XGEMHvZfK3Ax8QtJEScOA84G5dQ7PzMzayfIk9UzgzojY7lBR6bzEn4CJEfFCRNwj6TLgfmAg8J8kvZ66be3atbzyyiu88cYbPXkba7D+/fszatQodt55564Lm1mPZZYgIuLfOlj+AsmJ6fJlVwBX1GK9a9euZcWKFYwZM4aBAwciqRZvaxmLCDZu3MiyZcsAnCSsa1u2wPz5sHnztmX9+sFBB0EfX0SiEo3o5pqpV155hTFjxjBo0KBGh2I9IIlBgwYxZswYli9f7gRhXVu6FA45BIYMSRLCli2wbh08/zyMHdvo6HKh8Gn0jTfeYODAgY0Ow2pk4MCBPlRolRk7FqZNgw0bYM2a5O/06U4OVSh8ggB8WKlA3JZWlTlzYEDpUm4DBiSPrWK9IkHk1a233sq0adNq+p6XXnopp556ardff/TRR3PTTV31VK6+rFldTJ4Mhx0GEhx+OEya1OVLbJvMr8VUL62trZF2qY2nn36aCRMmNCCiyowbN47rrruOI488stGh5Eazt6k1mccfhwMPhMcec4JIIWlhRLSmPVf4k9R5tXnzZvr1y7Z5GrFOs7qbNAmWL4fRoxsdSe74EFOTmDt3LlOmTOGss87ibW97G7Nnz2bu3LkceuihQNLN86yzzmLUqFEMHTqU/fffn6eeeuot7/P73/+eXXfdlTfffHPrsrvuuov9998fgNmzZ3PyyScD8PzzzyOJ66+/npaWFqZOncqbb77J2WefzYgRI9hrr7246qqrkMTmUlfBI444guuuu25rzIceeijnnHMOw4YNY6+99mLevHlb11teFuDaa69lwoQJDBkyhIkTJ/LYY48B8I1vfIPx48dvXX7XXXfVctOaOTl0k38udqQBfagfeeQRTjzxxK2D+m677batz/3yl7/koYceYvHixQwdOpRnnnmGXXbZ5S3vcfDBBzN48GDuu+8+jjrqKAB+8IMfcNJJJ3W43gcffJCnn36aPn36cO211zJv3jz++Mc/MnjwYI477rguY545cyarVq3immuu4ROf+ATLli17y8nkO+64g9mzZ/PjH/+Y1tZWnnvuOfr37w/A+PHj+fWvf82uu+7KHXfcwcknn8yzzz7LbrvtVummM7M68B5ER9r6UB9zDHzoQ8nfQw5JltfJ7rvvzplnnkm/fv3e0jW3f//+rFu3jmeeeYaIYMKECR1+gc6YMYMf/vCHAKxbt467776bGTNmdLje2bNnM3jwYAYOHMjtt9/OZz7zGfbYYw+GDRvGueee22nMY8eOZdasWfTt25eZM2fy0ksvsWLFireUu+666/jCF77Au9/9biSxzz77MLbU3fC4445j9913p0+fPpxwwgm8/e1vZ/78+Z2u18zqzwmiIw3oQ73nnnt2+NzUqVM544wz+NSnPsXo0aM57bTTWLt2LS+88AI77bTT1hvASSedxJ133snrr7/OnXfeyYEHHrj1y7ir9S5fvny7x53FBLDrrtvmcWobjLh+/fq3lFu6dCnjx49PfY+bb76ZyZMns8suu7DLLrvw1FNPsWrVqk7Xa2b15wTRmYz7UHfVx//Tn/40CxcuZNGiRSxevJhvfvObtLS0sH79+q03gIkTJzJ27FjmzZvX5eGl9uvdbbfdePHFF7c+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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Write a for loop that iterates through each variety in classes\n", + "# and makes a plot for only that class\n", + "\n", + "# For each class add a color and a marker style\n", + "colors = [\"blue\", \"green\", \"red\"]\n", + "markers = [\"o\", \"^\", \"v\"]\n", + "\n", + "for i in range(len(varietes)):\n", + " variety = varietes[i]\n", + " \n", + " # make a df just of just the data for this variety\n", + " variety_df = iris_df[iris_df[\"class\"] == variety] \n", + " \n", + " #make a scatter plot for this variety\n", + " variety_df.plot.scatter(x = \"pet-width\", y = \"pet-length\", \\\n", + " label = variety, color = colors[i], marker = markers[i])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Did you notice that it made 3 plots?!?! What's decieving about this?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### We can make Subplots in plots, called an AxesSubplot, keyword ax\n", + "1. if AxesSuplot ax passed, then plot in that subplot\n", + "2. if ax is None, create a new AxesSubplot\n", + "3. return AxesSubplot that was used" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEMCAYAAADHxQ0LAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAwFElEQVR4nO3deXxU5fX48c/JAgTCIiFikZCwWAVULKCIqLVUoVqp+rKyu/yEUOtGrVYUq+K+fNt+W6vftgpVEUWoVUQqimgVUUGWbyigfhEtEYlAAmUPmOX8/riZMAlJZu5k5s5yz/v1mtckT+7M89xcPdyceZ7niKpijDEm9aXFewDGGGO8YQHfGGN8wgK+Mcb4hAV8Y4zxCQv4xhjjExnxHkBTOnXqpAUFBfEehjHGJJVVq1aVqWpu/faEDvgFBQWsXLky3sMwxpikIiLFDbVbSscYY3zCAr4xxviEJwFfRPbVe1SJyB+96NsYY4zDkxy+qmYHvhaRNsA24G9e9G2MMcYRjw9tfwpsB96P9A2qq6v5+uuv2b9/f/RGZRJOZmYmRx99NO3atYv3UIxJCfEI+FcCM7WRXdtEZBIwCaBbt24NvkFZWRkiwvHHH09amn0MkYpUlfLycrZs2QJgQd/EV3U1fPwxVFYebsvIgNNOgySKQZ4GfBHpBnwfmNDYMar6JPAkwMCBAxv8R2HXrl0UFBRYsE9hIkLr1q059thjKSkpsYBv4mvzZhg8GNq2dQJ8dTXs3QubNkF+frxHFzavI+YVwFJV/Xdz3qSqqorMzMwoDckksqysLCoqKuI9DON3+fkwbBjs3w+7dzvPw4cnVbCH+AT8Z6PxRiISjbcxCc6us0kYjzwCLVs6X7ds6XyfZDwL+CJyBnAsNjvHGJOMTjkFzjoLRODss6Ffv3iPyDUv7/CvBF5W1b0e9plQnn/+eYYNGxbvYRhjIvXoo07AT8K7e/Aw4Kvqz1T1cq/6i5eCggIWL17c4M/GjRvHokWLPBvLtGnTGD9+vGf9GZPy+vWDkpKkvLuHBN88LZVUVlaSkWG/bmOa5MX0x+b20blzdMYRB76c11haCitWOM+x8swzzzBkyBBuuukmOnbsyLRp03jmmWc488wzAWee+U033cTRRx9N+/btOfnkk1m3bl2D71VWVsaFF15Ihw4d6NixI2eddRbV1dUAlJSUcOmll5Kbm0v37t157LHHAHjjjTd48MEHmTNnDtnZ2fSruSMpKSnhJz/5CR07dqRXr1489dRTtf18/PHHDBw4kHbt2tG5c2d++ctf1v7ssssu45hjjqF9+/acffbZrF+/Pia/N+NzgemPF1wAF17oPA8e7LQnUx8JyncBf/ZsZybVeec5z7Nnx66v5cuX06NHD7Zv384dd9xR52eLFi1iyZIlbNiwgV27djFnzhxycnIafJ/f/va3dO3aldLSUrZt28aDDz6IiFBdXc2IESPo168fW7Zs4e233+b3v/89b775Jj/60Y+YOnUqo0aNYt++faxZswaAMWPG0LVrV0pKSnjppZeYOnUqb7/9NgCTJ09m8uTJ7Nmzhy+++IKRI0fWjuH888/n888/Z/v27fTv359x48bF6LdmfM2L6Y8pMsUyEr4K+KWlMGEClJc717m83Pk+Vnf6Xbp04YYbbiAjI4OsrKw6P8vMzGTv3r189tlnqCq9e/fmO9/5ToPvk5mZyTfffENxcTGZmZmcddZZiAgrVqygtLSUu+66ixYtWtCjRw8KCwt58cUXG3yfzZs3s3TpUh555BFatWrFKaecwsSJE3nuuedq+9m4cSNlZWVkZ2dz+umn17726quvpm3btrRs2ZJp06axZs0adu/eHaXflDFB3E5/rK6GZctg6dLDj2XLnPZo9ZEifBXwN22CFi3qtmVmOu2xkJeX1+jPhg4dyvXXX891111H586dmTRpEnv27OGrr74iOzu79gHwq1/9il69ejFs2DB69OjBww8/DEBxcTElJSV06NCh9vHggw+ybdu2BvssKSmhY8eOtG3btrYtPz+/dvuCGTNmsGHDBk444QROPfVUFixYADgL3W677TZ69uxJu3btCFQhKysra/bvyJgjuJ3+GEmKJgWmWEbCVwG/oAC+/bZuW0WF0x4LoRYN3XjjjaxatYr169ezYcMG/uu//otu3bqxb9++2gdA27Zt+e1vf8uXX37Ja6+9xu9+9zvefvtt8vLy6N69O7t27ap97N27l9dff73B/rt06cLOnTvZu/fwzNivvvqKY489FoDjjjuO2bNns337dqZMmcJPf/pT9u/fzwsvvMCrr77K4sWL2b17N5tq/oVsZDskY5rPzfTHSFM0ST7FMhK+Cvi5uTBjBmRlQbt2zvOMGU6711asWMHy5cupqKigTZs2tGrV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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# complete this code to make 3 plots in one\n", + "\n", + "plot_area = None # don't change this...look at this variable in line 12\n", + "colors = [\"blue\", \"green\", \"red\"]\n", + "markers = [\"o\", \"^\", \"v\"]\n", + "for i in range(len(varietes)):\n", + " variety = varietes[i]\n", + " \n", + " # make a df just of just the data for this variety\n", + " variety_df = iris_df[iris_df[\"class\"] == variety] \n", + " \n", + " #make a scatter plot for this variety\n", + " plot_area = variety_df.plot.scatter(x = \"pet-width\", y = \"pet-length\", \\\n", + " label = variety, color = colors[i], marker = markers[i], \\\n", + " ax = plot_area)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's focus on \"Iris-virginica\" data" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>sep-length</th>\n", + " <th>sep-width</th>\n", + " <th>pet-length</th>\n", + " <th>pet-width</th>\n", + " <th>class</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>100</th>\n", + " <td>6.3</td>\n", + " <td>3.3</td>\n", + " <td>6.0</td>\n", + " <td>2.5</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " <tr>\n", + " <th>101</th>\n", + " <td>5.8</td>\n", + " <td>2.7</td>\n", + " <td>5.1</td>\n", + " <td>1.9</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " <tr>\n", + " <th>102</th>\n", + " <td>7.1</td>\n", + " <td>3.0</td>\n", + " <td>5.9</td>\n", + " <td>2.1</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " <tr>\n", + " <th>103</th>\n", + " <td>6.3</td>\n", + " <td>2.9</td>\n", + " <td>5.6</td>\n", + " <td>1.8</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " <tr>\n", + " <th>104</th>\n", + " <td>6.5</td>\n", + " <td>3.0</td>\n", + " <td>5.8</td>\n", + " <td>2.2</td>\n", + " <td>Iris-virginica</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " sep-length sep-width pet-length pet-width class\n", + "100 6.3 3.3 6.0 2.5 Iris-virginica\n", + "101 5.8 2.7 5.1 1.9 Iris-virginica\n", + "102 7.1 3.0 5.9 2.1 Iris-virginica\n", + "103 6.3 2.9 5.6 1.8 Iris-virginica\n", + "104 6.5 3.0 5.8 2.2 Iris-virginica" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris_virginica = iris_df[iris_df[\"class\"] == \"Iris-virginica\"]\n", + "assert(len(iris_virginica) == 50)\n", + "iris_virginica.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='pet-width', ylabel='pet-length'>" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEQCAYAAACqduMIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAdDElEQVR4nO3df5QdZZ3n8fcnEBOwg8QQMwNJm4Hs4BKBoD0DLDIiqKgzg7joAocVGHeWnTnqjjgI6oIIAmqOw+wOzjgyC4ZfrqK4ILhyRg8/HBCFRiGcgLBRIAlCNsQE05jEQH/3j7o93DTV3fdH3bpVT39e59TJrbrPvff71HNzv11Vz1OPIgIzM7PxZvQ7ADMzqyYnCDMzy+UEYWZmuZwgzMwslxOEmZnlcoIwM7NcThBmZparlAQhaWTc8qKkyyYpf6akZyQ9J+lKSbPKiNPMzF5SSoKIiIGxBVgAbAW+kVdW0rHAx4FjgMXAvsAFZcRpZmYvUdkjqSWdBpwP7Bc5Hy7pq8ATEfHJxvoxwHUR8TuTve9ee+0Vixcv7kHEZmbpuv/++5+NiPl5z+1adjDAacDVecmhYSlwU9P6g8ACSfMiYuNEb7p48WKGh4cLDNPMLH2SnpzouVIvUksaBN4MXDVJsQHguab1scdzct7vDEnDkoY3bNhQXKBmZlZ6L6ZTgbsi4vFJyowAezStjz3eMr5gRFweEUMRMTR/fu4RkpmZdagfCWKyoweAVcDBTesHA+snO71kZmbFKy1BSPp3wD5M0HupydXAf5J0gKS5wLnAih6HZ2Zm45R5BHEa8K2I2OlUkaTBxtiIQYCIuBVYDtwOPNlYzi8xTjMzo8ReTBHxXybYvobswnTztkuBS8uIy8zStnFkO+s2bWXh3N2YN+Axt+3oRzdXM7NS3PTAU5xzw0pmzpjBjtFRlp9wEMct26ffYdWG78VkZknaOLKdc25YybYdo2zZ/gLbdoxy9g0r2Tiyvd+h1YYThJklad2mrcycsfNP3MwZM1i3aWufIqofJwgzS9LCubuxY3R0p207RkdZOHe3PkVUP04QZpakeQOzWH7CQcyeOYM5s3Zl9swZLD/hIF+oboMvUptZso5btg9HLNnLvZg65ARhZkmbNzDLiaFDPsVkZma5nCDMzCyXE4SZmeVygjAzs1xOEGZmlssJwszMcjlBmJlZLicIMzPL5QRhZma5nCDMKmjjyHYeXLs52VtTp16/VPhWG2YVk/okN6nXLyU+gjCrkNQnuUm9fqlxgjCrkNQnuUm9fqlxgjCrkNQnuUm9fqlxgjCrkNQnuUm9fqlRRPQ7hkIMDQ3F8PBwv8MwK8TGke1JT3KTev3qRNL9ETGU95x7MZlVUOqT3KRev1T4FJOZeVyC5fIRhNk053EJNhEfQZhNYx6XYJNxgjCbxjwuwSbjBGE2jXlcgk3GCcJsGvO4BJuML1KbTXPHLduHI5bs5XEJ9jKlHkFIOknSI5Kel/RzSUfmlDld0ouSRpqWo8qM02y6mTcwi4MX7enkYDsp7QhC0tuAzwMnAvcCvztJ8Xsi4k2lBGZmZrnKPMV0AXBhRPyosf5UiZ9tZmZtKuUUk6RdgCFgvqTVktZJ+qKkibpKHCLpWUmPSTpPkq+VmJmVrKxrEAuAmcB7gSOBZcAhwLk5ZX8AvB54DXACcDLwsbw3lXSGpGFJwxs2bOhB2GZm01dZCWJs1M1lEfF0RDwLXAq8a3zBiPhFRDweEaMR8RBwIVlieZmIuDwihiJiaP78+T0L3sxsOiolQUTEJmAd0Mm9xQNQsRGZmdlUyuzm+hXgw5JeI2ku8BHglvGFJL1T0oLG49cB5wE3lRinmZlRboL4DHAf8BjwCPBT4GJJg42xDoONcscAKyU9D/wf4FvAJSXGaWZmeEY5s0ryjGtWFs8oZ1Yjnp/BqsI36zOrEM/PYFXiBGFWIZ6fwarECcKsQjw/g1WJE4RZhXh+BqsSX6Q2qxjPz2BV4QRhVkHzBmY5MVjf+RSTmZnlcoKw2to4sp0H1252F1CzHvEpJqslDyYz6z0fQVjteDCZWTmcIKx2PJjMrBxOEFY7HkxmVg4nCKsdDyYzK4cvUlsteTCZWe85QVhteTCZWW/5FJOZmeVygjAzs1xOEGZmlssJwszMcjlBmJlZLicIMzPL5QRhZma5nCDMzCyXE4RZizz/RD2l3m69rJ9HUpu1wPNP1FPq7dbr+vkIwmwKnn+inlJvtzLq5wRhNgXPP1FPqbdbGfVzgjCbguefqKfU262M+jlBmE3B80/UU+rtVkb9FBGFvVk/DQ0NxfDwcL/DsIRtHNnu+SdqKPV267Z+ku6PiKG859yLyaxFnn+inlJvt17Wr9RTTJJOkvSIpOcl/VzSkROUO1PSM5Kek3SlpHRb1zqWev92s1ZUZhyEpLcDy4CB5u0R8akWXvs24PPAicC9wO9OUO5Y4OPA0cAvgf8NXNDYZgak37/drBWVGQch6YvAtcAbgUVNy8IW3+IC4MKI+FFEjEbEUxHxVE6504ArImJVRGwCPgOc3mqclr7U+7ebtaKM/wftHEGcDCyLiLXtfoikXYAh4NuSVgOzgRuBj0XE+E67S4GbmtYfBBZImhcRG8e97xnAGQCDg4PthmU1Ndb/exsvdfEb6/+d8rlms2Zl/D9o5xrERmBzh5+zAJgJvBc4kuw01SHAuTllB4DnmtbHHs8ZXzAiLo+IoYgYmj9/foehWd2k3r/drBV9Hwchad+xBfgb4DpJhzdvbzw3lbGjhMsi4umIeBa4FHhXTtkRYI+m9bHHW1r4HJsGUu/fbtaKMv4fTHWKaTUQgJq2/cm4MgHsMtmbRMQmSesaZaeyCjgYuL6xfjCwfvzpJZvejlu2D0cs2Svp/u1mU+n1/4NJE0REFNkN9ivAhyXdCuwAPgLcklPuamCFpOuAp8lOQ60oMA5LROr9281aUYlxEJL+boLt/73Ft/gMcB/wGPAI8FPgYkmDkkYkDQJExK3AcuB24MnGcn6rcZqZWTFavtWGpF9HxB452zdGxLzCI2uTb7Vh1rmUb0eRct2K0NWtNiR9YKxs0+Mx+wLPdhmfmfVRyoMOU65bGVoZB/H+xr+vaHoM2QXn9WQD28yshpoHW431pz/7hpUcsWSv2v+1nXLdyjJlgoiItwBIuigi8sYtmFlNpTzoMOW6laWdkdSfkvSyi9oRMZpX2MyqL+VBhynXrSztdGN9gax76k6LpO2SHpf0N5IGJn0HM6uUlAcdply3srTTi+mDwPHA54C1wCBwNvAd4FGyrqirIuLPexLpFNyLyaxzKff0SbluRShqwqCPAm+IiLF7Iz0maRi4PyL2k/QQcH+XsZpZH6Q86DDluvVaO6eY9gB2H7dtd+BVjcfPAD65VzEpT6qTct1S57arh3aOIK4Gvifpf5CdYloI/BVwVeP5t5OdarKKSLkPeMp1S53brj7auQYxg2zuhfcBe5PdJ+l64J8i4kVJsxvvN35+h1L4GsTONo5s54jP38a2HS/14pg9cwZ3n3N07Q+3U65b6tx21VPINYhGd9Z/bCx5z2/rLDzrhZT7gKdct9S57eqltDmprVwp9wFPuW6pc9vVS5lzUluJUu4DnnLdUue2q5d2rkFspMM5qcvgaxD5Uu4DnnLdUue2q46ixkF0Mye19UnKfcBTrlvq3Hb10M44iG7mpDazCkt5XELKdYPe1q+dI4gvNf5te05qM6uulMclpFw36H39Wj6CiIgZEyxODmY11TxnwpbtL7Btxyhn37Ayib+2U64blFO/dk4xASBpkaTDCovAzPpmbFxCs7FxCXWXct2gnPq10811UNLdwM+A7ze2vVfS/ywsGjMrVcrjElKuG5RTv3aOIL5MdmvvOWRzQQB8D3hbYdGYWalSHpeQct2gnPq1Ow5ifkSMSvpVRLy6sX1zROxZWEQd8jgIs86lPC4h5bpB9/UrahzEemAJ8FjTGx8ArGk7IjOrlJTHJaRcN+ht/do5xfQF4BZJfwbsKulk4OvA53sSWUlS7yOdMrddccrelym33er1W/jm8FpWr9/S71C61s7dXK+U9CuyW36vBU4DzouIG3sUW8+l3kc6ZW674pS9L1Nuu0/d+BBX/+ilkyqnHj7Ihe8+sI8Rdaetbq4RcWNEvCsilkbEO+qcHFLvI50yt11xyt6XKbfd6vVbdkoOAFffs6bWRxKTHkFI+kArbxIRVxYTTnl8X/r6ctsVp+x9mXLbPbB284TblyyYU24wBZnqFNP7W3iPAGqXIFLvI50yt11xyt6XKbfdskV7trW9DiY9xRQRb2lhObqsYIuUeh/plLntilP2vky57ZYsmMOphw/utO3Uwwdre/QAbYyD2OlF0scj4nM9iKdjnY6DSL2PdMrcdsUpe1+m3Har12/hgbWbWbZoz1okh8nGQXSaIH4dEXt0HVmBPFDOzKx9kyWItm/WN/aeHQRxh6RtkkYay6MTlDtd0otN5UYkHdVhnGZm1qFOE8S1Hb7uQxEx0Fj2n6TcPU3lBiLijg4/zxKW0oCkfkt54Jp1ruWBcpLOiogvAETEXzZt/2hEXNqL4MwmktqApH5KeeCadaedI4hPTbD93Dbe47OSnpV09xSnjQ5plHtM0nmS2rlnlCUuxQFJ/ZLywDXr3pQ/vJLGurHuIukt7Hz9YV+g1f+V5wAPA78FTgJulrQsIn4+rtwPgNcDTwJLye739ALw2ZzYziC79QeDg4Pjn7ZEpTggqV9SHrhm3WvlL/MrGv/OZucBcUF2h9cPt/JBEfHjptWrGjf7exdw2bhyv2hafUjShcDHyEkQEXE5cDlkvZhaicPqL8UBSf2S8sA1696Up5gi4vci4veA68YeN5Z9I+LwiPh2h58dtNYbqtVyNk2kOCCpX1IeuGbda2schKSZwGHA3hHxdUmvBIiI56d43Z7AocCdZKeLTiT7y/8NEfHouLLvBH4SEeslvQ74JvCNiLhgss/wOIjpp24Dkqos5YFrNrlCJgySdCDwbWA7sJDs2sCbyW77feIUL58JXAS8DniRbF7r4yPiUUmDZNcmDoiINcAxwApJA2SnsK4FLmk1Tps+liyY48RQkNQn1bHOtDPl6F3AlyPiGkmbImJu4wjisYjoe584H0GYdS7lI4iU61aEoqYcXcpLA+QCslNLknw1y6zGUh4HkXLdytDOOIgngDc2b5D0h8DqIgMys/KkPA4i5bqVpZ0EcR7wHUkXALMkfYLsAnI7A+XMrELGxkE0GxsHUXcp160sLSeIiLgFeAcwH7gdGATeExH/3KPYzKzHUh4HkXLdytJygpD0CuA9wNuBo4G3AsdLmt2j2Mysx1IeB5Fy3crSTi+mK4D9gYvJboMxCHwSWB0RLc1d3UvuxWTWuZR7+qRctyIU1YvpeGC/iNjcWH9Y0r1kF6n7niDMrHMpj4NIuW691s5F6meA3cdt2w14urhwzKrLcybUk9utc+0cQVwD3CrpMmAdsAj4IHB10x1fiYjbig3RrP/cn76e3G7daecaxOMtFIuI2Le7kDrjaxDWKxtHtnPE529j246XesTMnjmDu8852qcuKszt1ppCrkE07uhqNu14zoR6crt1r9M5qc2mDfenrye3W/ecIMym4P709eR2615b80FUma9BWK+5P309ud0mV9Q4CLNpzf3p68nt1jmfYjKrIPfdL473Zed8BGFWMe67Xxzvy+74CMKsQjyHQXG8L7vnBGFWIZ7DoDjel91zgjCrEPfdL473ZfecIMwqxH33i+N92T2PgzCrIPfdL4735eQ8DsKsZtx3vzjel53zKaaSuU92ccrel6vXb+Gbw2tZvX5Lzz/L35PilL0vU2o7H0GUyH2yi1P2vvzUjQ9x9Y/W/Ov6qYcPcuG7D+zJZ/l7Upyy92VqbecjiJK4T3Zxyt6Xq9dv2Sk5AFx9z5qeHEn4e1Kcsvdlim3nBFES98kuTtn78oG1m9va3g1/T4pT9r5Mse2cIEriPtnFKXtfLlu0Z1vbu+HvSXHK3pcptp0TREncJ7s4Ze/LJQvmcOrhgzttO/XwQZYsmFP4Z/l7Upyy92WKbedxECVzn+zilL0vV6/fwgNrN7Ns0Z49SQ7N/D0pTtn7sm5tN9k4CCcIM7NpbLIEUdopJkl3SNomaaSxPDpJ2TMlPSPpOUlXSqp+GjYzS0zZ1yA+FBEDjWX/vAKSjgU+DhwDLAb2BS4oL8TeSmkQzXRTZtv5e2JVUMWBcqcBV0TEKgBJnwGuI0satZbaIJrppMy28/fEqqLsI4jPSnpW0t2SjpqgzFLgwab1B4EFkub1OrheSnEQzXRRZtv5e2JVUmaCOIfsdNE+wOXAzZL2yyk3ADzXtD72+GXdRiSdIWlY0vCGDRuKjrdQKQ6imS7KbDt/T6xKSksQEfHjiNgSEdsj4irgbuBdOUVHgD2a1scev+y+BhFxeUQMRcTQ/Pnziw+6QCkOopkuymw7f0+sSvo5UC4A5WxfBRzctH4wsD4iNpYSVY+kOIhmuiiz7fw9sSopZRyEpD2BQ4E7gReAE8lOM70hIh4dV/YdwArgaOBp4Abg3oiY9CJ1XcZB1G0Qjb2kzLbz98TKUoUJg2YCFwGvA14EfgYcHxGPShoEHgYOiIg1EXGrpOXA7cBuZAni/JLi7DlPXlJfZbadvydWBaUkiIjYAPzBBM+tIbsw3bztUuDSEkKzGivz1hdl8xGEVUEVx0GYTanMCXzK5nEQVhW+m6vVTpkT+JTN4yCsSpwgrHbKnMCnbB4HYVXiBGG1U+YEPmXzOAirEicIq50yJ/Apm8dBWJV4PgirLfdiMuteFcZBmBVuyYI5ySWGMR4HYVXgU0xWW6vXb+Gbw2uT6L1kVkU+grBaSnkchFlV+AjCaiflcRBmVeIEYbWT8jgIsypxgrDaSXkchFmVOEFY7aQ8DsKsSnyR2mrpwncfyKmHLU52HIRZFThBWG2lPA7CrAp8isnMzHI5QZiZWS4nCDMzy+UEYWZmuZwgzMwslxOEmZnlcoIwM7NcThBmZpbLCcLMzHI5QZiZWS4nCDMzy+UEYWZmuZwgzMwslxOEmZnlcoIwM7NcThBmZpar9AQh6d9I2ibp2gmeP13Si5JGmpajyo3SzMz6MaPc3wP3TVHmnoh4UxnBWHE2jmxn3aatLJy7G/MGZvU7HDPrUqkJQtJJwGbgh8CSMj/beuumB57inBtWMnPGDHaMjrL8hIM4btk+/Q7LzLpQ2ikmSXsAFwJ/3ULxQyQ9K+kxSedJ8tzZFbZxZDvn3LCSbTtG2bL9BbbtGOXsG1aycWR7v0Mzsy6UeQ3iM8AVEbF2inI/AF4PvAY4ATgZ+FheQUlnSBqWNLxhw4ZCg7XWrdu0lZkzdv4qzZwxg3WbtvYpIjMrQikJQtIy4K3A305VNiJ+ERGPR8RoRDxEdtTx3gnKXh4RQxExNH/+/EJjttYtnLsbO0ZHd9q2Y3SUhXN361NEZlaEso4gjgIWA2skPQOcBZwg6SctvDYA9S4069a8gVksP+EgZs+cwZxZuzJ75gyWn3CQL1Sb1VxZ5/YvB77WtH4WWcL4y/EFJb0T+ElErJf0OuA84BtlBGmdO27ZPhyxZC/3YjJLSCkJIiJ+A/xmbF3SCLAtIjZIGgQeBg6IiDXAMcAKSQPAeuBa4JIy4rTuzBuY5cRglpC+9A6KiE83PV4DDDStn0V2hGFmZn3kW22YmVkuJwgzM8vlBGFmZrmcIMzMLJciot8xFELSBuDJDl++F/BsgeFUTcr1c93qK+X61alur42I3JHGySSIbkgajoihfsfRKynXz3Wrr5Trl0rdfIrJzMxyOUGYmVkuJ4jM5f0OoMdSrp/rVl8p1y+JuvkahJmZ5fIRhJmZ5XKCMDOzXNMiQUj6UGPmue2SVrT4mtskRR2mO22nfpL2lXSLpC2NaV2XlxRmR1qtmzIXSXpK0nOS7pC0tMRQ2yZplqQrJD3ZaI+fNm53P1H5MyU906jflZIqe+vcduom6TRJ90v6taR1kpZX+f9du+3W9Lra/KaMmRYJAvglcBFwZSuFJZ1Cn+5026GW6ifpFcD3gNuA3wEWkt1Ovcpabbv3AR8AjgReDdwDXNPb0Lq2K7AWeDPwKrK5T66XtHh8QUnHAh8nux3+YmBf4IKyAu1Ay3UDdgc+Qja47FCyOlb5js7t1A2o5W9KJiKmzUL2Q7NiijKvAh4DDiObzW7XfsddVP2AM4B/6XecParbOcD1TetLyeYc6XvsbdZzJXBCzvavApc0rR8DPNPveIuoW065jwI39zveoupW59+U6XIE0Y5LgC8Bz/Q7kB44DHhC0ncbp5fukHRgv4MqyNeAJZJ+X9JM4DTg1j7H1BZJC4DfB1blPL0UeLBp/UFggaR5ZcTWrSnqNt4ftViuElqoW21/U5wgmkgaAo4ALut3LD2yEDgJ+Dtgb+A7wE2NU0919zTwL8CjwFayU05n9jWiNjSS2nXAVRHxs5wiA8BzTetjj+f0OrZutVC35rJ/BgwBXygjtm5NVbe6/6Y4QTRImgH8A/BXEfFCv+Ppka3AXRHx3Yj4Ldl/wnnAv+1vWIU4H/gDYBEwm+z8/G2Sdu9rVC1ofPeuAX4LfGiCYiPAHk3rY4+39DC0rrVYt7GyxwOfA94ZEZW/0d1UdUvhN8UJ4iV7kP3l8nVJzwD3Nbavk3Rk/8Iq1Eqyc6ApOhj4ekSsi4gXImIFMBc4oL9hTU6SgCuABWTnsHdMUHQVWR3HHAysj4iNPQ6xY23UDUnvAP4J+NOIeKikEDvWYt1q/5tSv6vqHWh0K9sV2AXYRdJs4IVxWf05stMuYxYB9wJvBDaUFWsnWqwfZD2W/lrSW4Hbgf9KdkviR8qMtx1t1O0+4H2SvkbWXqcAM4HVZcbbgS+RHcG9NSK2TlLuamCFpOvITqedC6zofXhdaaluko4mO03znoi4t6zgutRK3Wr7m/Kv+n2VvIwF+DTZX87Ny6eBQbJD98Gc1yymJj0O2qkf8O/JfjR/DdwBLO13/EXUjey00t+T/Xj+GvgJ8I5+xz9F3V7bqM+2Rl3GllMmaLuPAusb9fsKMKvfdSiibmR/rLwwrtx3+12Hotqt6XW1+U0ZW3wvJjMzy+VrEGZmlssJwszMcjlBmJlZLicIMzPL5QRhZma5nCDMzCyXE4RZn0haJemoCZ47StK6SV67uG5zC1j9OEGYtUHSE42R6F2LiKURcUfZn2vWKicIMzPL5QRh01LjL/JPSHpY0iZJX2nc5wlJfyLpAUmbJf1Q0kGN7deQ3UrhZkkjks7Oed+3SHqoaf37ku5tWr+rcdfSnY4KJO0maUUjlofJ7kw79prJPvcUSWsa83v8twJ3kdn0uFmf2QROAY4FngduBs6V9C2y6U3/FBgG/iPwbUn7R8T7G3fh/POI+P4E73kP2cRFewGbgdcDo5LmkN1v6I1k81aMdz6wX2N5JfDdsSfyPrdpess3AfuTTVhzr6RvRURlb75o9eIjCJvOvhgRayPiV8DFwMnAfwa+HBE/jogXI+IqYDvZbHxTiohtZInlj8hu9bwSuIts0pjDgP8b+bfo/g/AxRHxq4hYSzapUysuiIitEfEg2SxzB0/1ArNWOUHYdLa26fGTZLdmfi3ZLdE3jy1kt2neO+f1SPrHxmmfEUmfbGy+EziKLEncSXbX3Dc3ljsniGXvnHha0TyN5W/IZp4zK4QThE1ni5oeDwK/JPuRvjgi9mxado+I/9Uot9PtjyPiLyJioLFc0tg8PkHcydQJ4umceHb6qPaqZtY9Jwibzj4oaaGkVwOfBL5ONqvZX0g6VJlXSvrjxjUEyOZj2HeK9/0h2XWBPwTujYhVZEcmhwI/mOA11wOfkDRX0kLgw+Oeb+VzzQrlBGHT2VeBfwZ+0VguiohhsusQXwQ2kU2udHrTaz5LdjF7s6Sz8t40Ip4nm7BoVWRzf0N28frJiPh/E8RyAdlppccbMV0z7vkpP9esaJ4wyKYlSU8weW8ks2nPRxBmZpbLCcLMzHL5FJOZmeXyEYSZmeVygjAzs1xOEGZmlssJwszMcjlBmJlZLicIMzPL9f8Bud9B9gKxk4gAAAAASUVORK5CYII=\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's learn about *xlim* and *ylim*\n", + "- Allows us to set x-axis and y-axis limits\n", + "- Takes either a single value (LOWER-BOUND) or a tuple containing two values (LOWER-BOUND, UPPER-BOUND)\n", + "- You need to be careful about setting the UPPER-BOUND" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='pet-width', ylabel='pet-length'>" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\", xlim = 0, ylim = 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 216x216 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 6), ylim = (0, 6),\n", + " figsize = (3, 3))\n", + "\n", + "# What is wrong with this plot?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What is the maximum pet-len?" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6.9" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris_virginica[\"pet-length\"].max()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.0, 6.0)" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ax.get_ylim()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's include assert statements to make sure we don't crop the plot!" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "ename": "AssertionError", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/k6/kcy8b4f57hx9f1wh4sbs8mn40000gn/T/ipykernel_26032/2630924870.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mxlim\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mylim\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m figsize = (3, 3))\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0miris_virginica\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"pet-length\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_ylim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAssertionError\u001b[0m: " + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 216x216 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 6), ylim = (0, 6),\n", + " figsize = (3, 3))\n", + "assert iris_virginica[\"pet-length\"].max() <= ax.get_ylim()[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now let's try all 4 assert statements\n", + "\n", + "```\n", + "assert iris_virginica[ax.get_xlabel()].min() >= ax.get_xlim()[0]\n", + "assert iris_virginica[ax.get_xlabel()].max() <= ax.get_xlim()[1]\n", + "assert iris_virginica[ax.get_ylabel()].min() >= ax.get_ylim()[0]\n", + "assert iris_virginica[ax.get_ylabel()].max() <= ax.get_ylim()[1]\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 216x216 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 7), ylim = (0, 7),\n", + " figsize = (3, 3))\n", + "assert iris_virginica[ax.get_xlabel()].min() >= ax.get_xlim()[0]\n", + "assert iris_virginica[ax.get_xlabel()].max() <= ax.get_xlim()[1]\n", + "assert iris_virginica[ax.get_ylabel()].min() >= ax.get_ylim()[0]\n", + "assert iris_virginica[ax.get_ylabel()].max() <= ax.get_ylim()[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Time-Permitting\n", + "Plot this data in an interesting/meaningful way & identify any correlations." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>name</th>\n", + " <th>grade</th>\n", + " <th>gpa</th>\n", + " <th>attendance</th>\n", + " <th>height</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>Cole</td>\n", + " <td>C</td>\n", + " <td>2.0</td>\n", + " <td>4</td>\n", + " <td>68</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Cynthia</td>\n", + " <td>AB</td>\n", + " <td>3.5</td>\n", + " <td>11</td>\n", + " <td>66</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>Alice</td>\n", + " <td>B</td>\n", + " <td>3.0</td>\n", + " <td>10</td>\n", + " <td>60</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>Seth</td>\n", + " <td>BC</td>\n", + " <td>2.5</td>\n", + " <td>6</td>\n", + " <td>72</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " name grade gpa attendance height\n", + "0 Cole C 2.0 4 68\n", + "1 Cynthia AB 3.5 11 66\n", + "2 Alice B 3.0 10 60\n", + "3 Seth BC 2.5 6 72" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "students = pd.DataFrame({\n", + " \"name\": [\n", + " \"Cole\",\n", + " \"Cynthia\",\n", + " \"Alice\",\n", + " \"Seth\"\n", + " ],\n", + " \"grade\": [\n", + " \"C\",\n", + " \"AB\",\n", + " \"B\",\n", + " \"BC\"\n", + " ],\n", + " \"gpa\": [\n", + " 2.0,\n", + " 3.5,\n", + " 3.0,\n", + " 2.5\n", + " ],\n", + " \"attendance\": [\n", + " 4,\n", + " 11,\n", + " 10,\n", + " 6\n", + " ],\n", + " \"height\": [\n", + " 68,\n", + " 66,\n", + " 60,\n", + " 72\n", + " ]\n", + "})\n", + "students" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.3333333333333333\n", + "1 0.25\n", + "2 0.0\n", + "3 0.5\n", + "Name: height, dtype: string" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Min, Max, and Overall Difference in Student Height\n", + "min_height = students[\"height\"].min()\n", + "max_height = students[\"height\"].max()\n", + "diff_height = max_height - min_height\n", + "\n", + "# Normalize students heights on a scale of [0, 1] (black to white)\n", + "height_colors = (students[\"height\"] - min_height) / diff_height\n", + "\n", + "# Normalize students heights on a scale of [0, 0.5] (black to gray)\n", + "height_colors = height_colors / 2 \n", + "\n", + "# Color must be a string (e.g. c='0.34')\n", + "height_colors = height_colors.astype(\"string\")\n", + "\n", + "height_colors" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:xlabel='attendance', ylabel='gpa'>" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "students.plot.scatter(x=\"attendance\", y=\"gpa\", c=height_colors)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gpa</th>\n", + " <th>attendance</th>\n", + " <th>height</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>gpa</th>\n", + " <td>1.000000</td>\n", + " <td>0.976831</td>\n", + " <td>-0.464758</td>\n", + " </tr>\n", + " <tr>\n", + " <th>attendance</th>\n", + " <td>0.976831</td>\n", + " <td>1.000000</td>\n", + " <td>-0.635586</td>\n", + " </tr>\n", + " <tr>\n", + " <th>height</th>\n", + " <td>-0.464758</td>\n", + " <td>-0.635586</td>\n", + " <td>1.000000</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gpa attendance height\n", + "gpa 1.000000 0.976831 -0.464758\n", + "attendance 0.976831 1.000000 -0.635586\n", + "height -0.464758 -0.635586 1.000000" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "students.corr()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots_template_Gurmail_lec1.ipynb b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots_template_Gurmail_lec1.ipynb new file mode 100644 index 0000000..a02b77b --- /dev/null +++ b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots_template_Gurmail_lec1.ipynb @@ -0,0 +1,857 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Announcements - Friday, December 1\n", + "\n", + "* Download ALL files for today's lecture\n", + "* <b>If you have any problem with P7 or P8 grades, please send me (Gurmail.Singh@wisc.edu) an email by December 7.</b>\n", + "* Quiz 9 is due tonight at 11:59 pm\n", + "* Late days may not be used on P13\n", + "* If you have questions, it is almost always faster to \n", + " * Post on Piazza\n", + " * Go to [office hours](https://sites.google.com/wisc.edu/cs220-oh-f23/home?pli=1) \n", + "### Conflict Form\n", + " * [Final - December 19, 7:45 am](https://cs220.cs.wisc.edu/f23/surveys.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plotting 2 - Scatter Plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ignore this cell (it's just to make certain text red later, but you don't need to understand it).\n", + "from IPython.core.display import display, HTML\n", + "display(HTML('<style>em { color: red; }</style> <style>.container { width:100% !important; }</style>'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from pandas import DataFrame, Series\n", + "\n", + "import sqlite3\n", + "import os\n", + "\n", + "import matplotlib\n", + "# new import statement\n", + "from matplotlib import pyplot as plt\n", + "\n", + "import requests\n", + "matplotlib.rcParams[\"font.size\"] = 12" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Wrapping up bus dataset example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### What are the top routes, and how many people ride them daily?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "path = \"bus.db\"\n", + "# assert existence of path\n", + "assert os.path.exists(path)\n", + "\n", + "# establish connection to bus.db\n", + "conn = sqlite3.connect(path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_sql(\"\"\"\n", + "SELECT Route, SUM(DailyBoardings) AS daily\n", + "FROM boarding\n", + "GROUP BY Route\n", + "ORDER BY daily DESC\n", + "\"\"\", conn)\n", + "\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# let's extract daily column from df\n", + "df[\"daily\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# let's create a bar plot from daily column Series\n", + "df[\"daily\"].plot.bar()\n", + "\n", + "# Oops wrong x-axis labels!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df = ???\n", + "\n", + "# let's plot for top 5 routes alone\n", + "???" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# let's use slicing to aggregate the rest of the data\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# let's plot the bars\n", + "ax = (s / 1000).plot.bar(color = \"k\")\n", + "ax.set_ylabel(\"Rides / Day (Thousands)\")\n", + "None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### IRIS dataset: http://archive.ics.uci.edu/ml/datasets/iris\n", + "- This set of data is used in beginning Machine Learning Courses\n", + "- You can train a ML algorithm to use the values to predict the class of iris\n", + "- Dataset link: https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 1: Downloading IRIS dataset (https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use requests to get this URL\n", + "url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data\"\n", + "response = ???\n", + "\n", + "# check that the request was successful\n", + "???\n", + "\n", + "# open a file called \"iris.csv\" for writing the data locally\n", + "file_obj = open(\"iris.csv\", ???)\n", + "\n", + "# write the text of response to the file object\n", + "file_obj.write(???)\n", + "\n", + "# close the file object\n", + "file_obj.close()\n", + "\n", + "# Look at the file you downloaded. What's wrong with it?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 2: Making a DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# read the \"iris.csv\" file into a Pandas dataframe\n", + "iris_df = ???\n", + "\n", + "# display the head of the data frame\n", + "iris_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 3: Our CSV file has no header. Let's add column names.\n", + "- Refer to the documentation: https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Attribute Information:\n", + "# 1. sepal length in cm\n", + "# 2. sepal width in cm\n", + "# 3. petal length in cm\n", + "# 4. petal width in cm\n", + "# 5. class: Iris Setosa, Iris Versicolour, Iris Virginica\n", + "\n", + "# These should be our headers \n", + "# [\"sep-length\", \"sep-width\", \"pet-length\", \"pet-width\", \"class\"]\n", + "\n", + "iris_df = pd.read_csv(\"iris.csv\",\n", + " ???)\n", + "iris_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 4: Connect to our database version of this data!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_conn = sqlite3.connect(\"iris-flowers.db\")\n", + "pd.read_sql(\"SELECT * FROM sqlite_master WHERE type='table'\", iris_conn)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 5: Using SQL, get the 10 'Iris-setosa' flowers with the longest sepal length.\n", + "Break any ties by ordering by the shortest sepal width." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pd.read_sql(\"\"\"\n", + " SELECT\n", + " FROM\n", + " WHERE \n", + " ORDER BY \n", + " LIMIT 10\n", + "\"\"\", iris_conn)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lecture 35: Scatter Plots\n", + "**Learning Objectives**\n", + "- Set the marker, color, and size of scatter plot data\n", + "- Calculate correlation between DataFrame columns\n", + "- Use subplots to group scatterplot data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set the marker, color, and size of scatter plot data\n", + "\n", + "To start, let's look at some made-up data about Trees.\n", + "The city of Madison maintains a database of all the trees they care for." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "trees = [\n", + " {\"age\": 1, \"height\": 1.5, \"diameter\": 0.8},\n", + " {\"age\": 1, \"height\": 1.9, \"diameter\": 1.2},\n", + " {\"age\": 1, \"height\": 1.8, \"diameter\": 1.4},\n", + " {\"age\": 2, \"height\": 1.8, \"diameter\": 0.9},\n", + " {\"age\": 2, \"height\": 2.5, \"diameter\": 1.5},\n", + " {\"age\": 2, \"height\": 3, \"diameter\": 1.8},\n", + " {\"age\": 2, \"height\": 2.9, \"diameter\": 1.7},\n", + " {\"age\": 3, \"height\": 3.2, \"diameter\": 2.1},\n", + " {\"age\": 3, \"height\": 3, \"diameter\": 2},\n", + " {\"age\": 3, \"height\": 2.4, \"diameter\": 2.2},\n", + " {\"age\": 2, \"height\": 3.1, \"diameter\": 2.9},\n", + " {\"age\": 4, \"height\": 2.5, \"diameter\": 3.1},\n", + " {\"age\": 4, \"height\": 3.9, \"diameter\": 3.1},\n", + " {\"age\": 4, \"height\": 4.9, \"diameter\": 2.8},\n", + " {\"age\": 4, \"height\": 5.2, \"diameter\": 3.5},\n", + " {\"age\": 4, \"height\": 4.8, \"diameter\": 4},\n", + "]\n", + "trees_df = DataFrame(trees)\n", + "trees_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scatter Plots\n", + "We can make a scatter plot of a DataFrame using the following function...\n", + "\n", + "`df_name.plot.scatter(x = \"x_col_name\", y = \"y_col_name\", \\\n", + " color = \"red\", marker = \"*\", s = 50)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the trees data comparing a tree's age to its height...\n", + " - What is `df_name`?\n", + " - What is `x_col_name`?\n", + " - What is `y_col_name`?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# TODO: change y to diameter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now plot with a little more beautification...\n", + " - Use a new [color](https://matplotlib.org/3.5.0/_images/sphx_glr_named_colors_003.png)\n", + " - Use a type of [marker](https://matplotlib.org/stable/api/markers_api.html)\n", + " - Change the size (any int)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Plot with some more beautification options.\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", color = \"r\", marker = \"D\", s = 50) \n", + "# D for diamond" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Add a title to your plot.\n", + "ax = trees_df.plot.scatter(x = \"age\", y = \"height\", color = \"r\", marker = \"D\", s = 50) \n", + "# D for diamond\n", + "ax.set_title(\"Tree Age vs Height\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Correlation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What is the correlation between our DataFrame columns?\n", + "corr_df = trees_df.corr()\n", + "corr_df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What is the correlation between age and height (don't use .iloc)\n", + "# Using index in this case isn't considered as hardcoding\n", + "corr_df['age']['height']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Variating Stylistic Parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Option 1:\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", marker = \"H\", s = \"diameter\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Option 2:\n", + "# this way allows you to make it bigger\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", marker = \"H\", s = trees_df[\"diameter\"] * 50) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use subplots to group scatterplot data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Re-visit the Iris Data\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How do we create a *scatter plot* for various *class types*?\n", + "First, gather all the class types." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In Pandas\n", + "varietes = list(set(iris_df[\"class\"]))\n", + "varietes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In SQL\n", + "varietes = list(pd.read_sql(\"\"\"\n", + " SELECT DISTINCT class\n", + " FROM iris\n", + "\"\"\", iris_conn)[\"class\"])\n", + "varietes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In reality, you can choose to write Pandas or SQL queries (or a mix of both!). For the rest of this lecture, we'll use Pandas." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# If you want to continue using SQL instead, don't close the connection!\n", + "iris_conn.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Change this scatter plot so that the data is only for class ='Iris-setosa'\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Write a for loop that iterates through each variety in classes\n", + "# and makes a plot for only that class\n", + "\n", + "# For each class add a color and a marker style\n", + "colors = [\"blue\", \"green\", \"red\"]\n", + "markers = [\"o\", \"^\", \"v\"]\n", + "\n", + "for i in range(len(varietes)):\n", + " ???" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Did you notice that it made 3 plots?!?! What's decieving about this?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### We can make Subplots in plots, called an AxesSubplot, keyword ax\n", + "1. if AxesSuplot ax passed, then plot in that subplot\n", + "2. if ax is None, create a new AxesSubplot\n", + "3. return AxesSubplot that was used" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# complete this code to make 3 plots in one\n", + "\n", + "plot_area = None # don't change this...look at this variable in line 12\n", + "colors = [\"blue\", \"green\", \"red\"]\n", + "markers = [\"o\", \"^\", \"v\"]\n", + "for i in range(len(varietes)):\n", + " ???" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's focus on \"Iris-virginica\" data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_virginica = ???\n", + "assert(len(iris_virginica) == 50)\n", + "iris_virginica.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's learn about *xlim* and *ylim*\n", + "- Allows us to set x-axis and y-axis limits\n", + "- Takes either a single value (LOWER-BOUND) or a tuple containing two values (LOWER-BOUND, UPPER-BOUND)\n", + "- You need to be careful about setting the UPPER-BOUND" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\", xlim = ???, ylim = ???)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 6), ylim = (0, 6),\n", + " figsize = (3, 3))\n", + "\n", + "# What is wrong with this plot?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What is the maximum pet-len?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax.get_ylim()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's include assert statements to make sure we don't crop the plot!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 6), ylim = (0, 6),\n", + " figsize = (3, 3))\n", + "assert iris_virginica[\"pet-length\"].max() <= ax.get_ylim()[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now let's try all 4 assert statements\n", + "\n", + "```\n", + "assert iris_virginica[ax.get_xlabel()].min() >= ax.get_xlim()[0]\n", + "assert iris_virginica[ax.get_xlabel()].max() <= ax.get_xlim()[1]\n", + "assert iris_virginica[ax.get_ylabel()].min() >= ax.get_ylim()[0]\n", + "assert iris_virginica[ax.get_ylabel()].max() <= ax.get_ylim()[1]\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 7), ylim = (0, 7),\n", + " figsize = (3, 3))\n", + "assert iris_virginica[ax.get_xlabel()].min() >= ax.get_xlim()[0]\n", + "assert iris_virginica[ax.get_xlabel()].max() <= ax.get_xlim()[1]\n", + "assert iris_virginica[ax.get_ylabel()].min() >= ax.get_ylim()[0]\n", + "assert iris_virginica[ax.get_ylabel()].max() <= ax.get_ylim()[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Time-Permitting\n", + "Plot this data in an interesting/meaningful way & identify any correlations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "students = pd.DataFrame({\n", + " \"name\": [\n", + " \"Cole\",\n", + " \"Cynthia\",\n", + " \"Alice\",\n", + " \"Seth\"\n", + " ],\n", + " \"grade\": [\n", + " \"C\",\n", + " \"AB\",\n", + " \"B\",\n", + " \"BC\"\n", + " ],\n", + " \"gpa\": [\n", + " 2.0,\n", + " 3.5,\n", + " 3.0,\n", + " 2.5\n", + " ],\n", + " \"attendance\": [\n", + " 4,\n", + " 11,\n", + " 10,\n", + " 6\n", + " ],\n", + " \"height\": [\n", + " 68,\n", + " 66,\n", + " 60,\n", + " 72\n", + " ]\n", + "})\n", + "students" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Min, Max, and Overall Difference in Student Height\n", + "min_height = students[\"height\"].min()\n", + "max_height = students[\"height\"].max()\n", + "diff_height = max_height - min_height\n", + "\n", + "# Normalize students heights on a scale of [0, 1] (black to white)\n", + "height_colors = (students[\"height\"] - min_height) / diff_height\n", + "\n", + "# Normalize students heights on a scale of [0, 0.5] (black to gray)\n", + "height_colors = height_colors / 2 \n", + "\n", + "# Color must be a string (e.g. c='0.34')\n", + "height_colors = height_colors.astype(\"string\")\n", + "\n", + "height_colors" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "students.plot.scatter(x=\"attendance\", y=\"gpa\", c=height_colors)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "students.corr()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots_template_Gurmail_lec2.ipynb b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots_template_Gurmail_lec2.ipynb new file mode 100644 index 0000000..a02b77b --- /dev/null +++ b/f23/Gurmail_Lecture_Notes/35N_Plotting-2/lec_35N_plotting2_scatter_plots_template_Gurmail_lec2.ipynb @@ -0,0 +1,857 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Announcements - Friday, December 1\n", + "\n", + "* Download ALL files for today's lecture\n", + "* <b>If you have any problem with P7 or P8 grades, please send me (Gurmail.Singh@wisc.edu) an email by December 7.</b>\n", + "* Quiz 9 is due tonight at 11:59 pm\n", + "* Late days may not be used on P13\n", + "* If you have questions, it is almost always faster to \n", + " * Post on Piazza\n", + " * Go to [office hours](https://sites.google.com/wisc.edu/cs220-oh-f23/home?pli=1) \n", + "### Conflict Form\n", + " * [Final - December 19, 7:45 am](https://cs220.cs.wisc.edu/f23/surveys.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plotting 2 - Scatter Plots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# ignore this cell (it's just to make certain text red later, but you don't need to understand it).\n", + "from IPython.core.display import display, HTML\n", + "display(HTML('<style>em { color: red; }</style> <style>.container { width:100% !important; }</style>'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from pandas import DataFrame, Series\n", + "\n", + "import sqlite3\n", + "import os\n", + "\n", + "import matplotlib\n", + "# new import statement\n", + "from matplotlib import pyplot as plt\n", + "\n", + "import requests\n", + "matplotlib.rcParams[\"font.size\"] = 12" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Wrapping up bus dataset example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### What are the top routes, and how many people ride them daily?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "path = \"bus.db\"\n", + "# assert existence of path\n", + "assert os.path.exists(path)\n", + "\n", + "# establish connection to bus.db\n", + "conn = sqlite3.connect(path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_sql(\"\"\"\n", + "SELECT Route, SUM(DailyBoardings) AS daily\n", + "FROM boarding\n", + "GROUP BY Route\n", + "ORDER BY daily DESC\n", + "\"\"\", conn)\n", + "\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# let's extract daily column from df\n", + "df[\"daily\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# let's create a bar plot from daily column Series\n", + "df[\"daily\"].plot.bar()\n", + "\n", + "# Oops wrong x-axis labels!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df = ???\n", + "\n", + "# let's plot for top 5 routes alone\n", + "???" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# let's use slicing to aggregate the rest of the data\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# let's plot the bars\n", + "ax = (s / 1000).plot.bar(color = \"k\")\n", + "ax.set_ylabel(\"Rides / Day (Thousands)\")\n", + "None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### IRIS dataset: http://archive.ics.uci.edu/ml/datasets/iris\n", + "- This set of data is used in beginning Machine Learning Courses\n", + "- You can train a ML algorithm to use the values to predict the class of iris\n", + "- Dataset link: https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 1: Downloading IRIS dataset (https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use requests to get this URL\n", + "url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data\"\n", + "response = ???\n", + "\n", + "# check that the request was successful\n", + "???\n", + "\n", + "# open a file called \"iris.csv\" for writing the data locally\n", + "file_obj = open(\"iris.csv\", ???)\n", + "\n", + "# write the text of response to the file object\n", + "file_obj.write(???)\n", + "\n", + "# close the file object\n", + "file_obj.close()\n", + "\n", + "# Look at the file you downloaded. What's wrong with it?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 2: Making a DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# read the \"iris.csv\" file into a Pandas dataframe\n", + "iris_df = ???\n", + "\n", + "# display the head of the data frame\n", + "iris_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 3: Our CSV file has no header. Let's add column names.\n", + "- Refer to the documentation: https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Attribute Information:\n", + "# 1. sepal length in cm\n", + "# 2. sepal width in cm\n", + "# 3. petal length in cm\n", + "# 4. petal width in cm\n", + "# 5. class: Iris Setosa, Iris Versicolour, Iris Virginica\n", + "\n", + "# These should be our headers \n", + "# [\"sep-length\", \"sep-width\", \"pet-length\", \"pet-width\", \"class\"]\n", + "\n", + "iris_df = pd.read_csv(\"iris.csv\",\n", + " ???)\n", + "iris_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 4: Connect to our database version of this data!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_conn = sqlite3.connect(\"iris-flowers.db\")\n", + "pd.read_sql(\"SELECT * FROM sqlite_master WHERE type='table'\", iris_conn)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Warmup 5: Using SQL, get the 10 'Iris-setosa' flowers with the longest sepal length.\n", + "Break any ties by ordering by the shortest sepal width." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pd.read_sql(\"\"\"\n", + " SELECT\n", + " FROM\n", + " WHERE \n", + " ORDER BY \n", + " LIMIT 10\n", + "\"\"\", iris_conn)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lecture 35: Scatter Plots\n", + "**Learning Objectives**\n", + "- Set the marker, color, and size of scatter plot data\n", + "- Calculate correlation between DataFrame columns\n", + "- Use subplots to group scatterplot data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set the marker, color, and size of scatter plot data\n", + "\n", + "To start, let's look at some made-up data about Trees.\n", + "The city of Madison maintains a database of all the trees they care for." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "trees = [\n", + " {\"age\": 1, \"height\": 1.5, \"diameter\": 0.8},\n", + " {\"age\": 1, \"height\": 1.9, \"diameter\": 1.2},\n", + " {\"age\": 1, \"height\": 1.8, \"diameter\": 1.4},\n", + " {\"age\": 2, \"height\": 1.8, \"diameter\": 0.9},\n", + " {\"age\": 2, \"height\": 2.5, \"diameter\": 1.5},\n", + " {\"age\": 2, \"height\": 3, \"diameter\": 1.8},\n", + " {\"age\": 2, \"height\": 2.9, \"diameter\": 1.7},\n", + " {\"age\": 3, \"height\": 3.2, \"diameter\": 2.1},\n", + " {\"age\": 3, \"height\": 3, \"diameter\": 2},\n", + " {\"age\": 3, \"height\": 2.4, \"diameter\": 2.2},\n", + " {\"age\": 2, \"height\": 3.1, \"diameter\": 2.9},\n", + " {\"age\": 4, \"height\": 2.5, \"diameter\": 3.1},\n", + " {\"age\": 4, \"height\": 3.9, \"diameter\": 3.1},\n", + " {\"age\": 4, \"height\": 4.9, \"diameter\": 2.8},\n", + " {\"age\": 4, \"height\": 5.2, \"diameter\": 3.5},\n", + " {\"age\": 4, \"height\": 4.8, \"diameter\": 4},\n", + "]\n", + "trees_df = DataFrame(trees)\n", + "trees_df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scatter Plots\n", + "We can make a scatter plot of a DataFrame using the following function...\n", + "\n", + "`df_name.plot.scatter(x = \"x_col_name\", y = \"y_col_name\", \\\n", + " color = \"red\", marker = \"*\", s = 50)`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the trees data comparing a tree's age to its height...\n", + " - What is `df_name`?\n", + " - What is `x_col_name`?\n", + " - What is `y_col_name`?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# TODO: change y to diameter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now plot with a little more beautification...\n", + " - Use a new [color](https://matplotlib.org/3.5.0/_images/sphx_glr_named_colors_003.png)\n", + " - Use a type of [marker](https://matplotlib.org/stable/api/markers_api.html)\n", + " - Change the size (any int)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Plot with some more beautification options.\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", color = \"r\", marker = \"D\", s = 50) \n", + "# D for diamond" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Add a title to your plot.\n", + "ax = trees_df.plot.scatter(x = \"age\", y = \"height\", color = \"r\", marker = \"D\", s = 50) \n", + "# D for diamond\n", + "ax.set_title(\"Tree Age vs Height\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Correlation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What is the correlation between our DataFrame columns?\n", + "corr_df = trees_df.corr()\n", + "corr_df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# What is the correlation between age and height (don't use .iloc)\n", + "# Using index in this case isn't considered as hardcoding\n", + "corr_df['age']['height']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Variating Stylistic Parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Option 1:\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", marker = \"H\", s = \"diameter\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Option 2:\n", + "# this way allows you to make it bigger\n", + "trees_df.plot.scatter(x = \"age\", y = \"height\", marker = \"H\", s = trees_df[\"diameter\"] * 50) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use subplots to group scatterplot data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Re-visit the Iris Data\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How do we create a *scatter plot* for various *class types*?\n", + "First, gather all the class types." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In Pandas\n", + "varietes = list(set(iris_df[\"class\"]))\n", + "varietes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# In SQL\n", + "varietes = list(pd.read_sql(\"\"\"\n", + " SELECT DISTINCT class\n", + " FROM iris\n", + "\"\"\", iris_conn)[\"class\"])\n", + "varietes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In reality, you can choose to write Pandas or SQL queries (or a mix of both!). For the rest of this lecture, we'll use Pandas." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# If you want to continue using SQL instead, don't close the connection!\n", + "iris_conn.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Change this scatter plot so that the data is only for class ='Iris-setosa'\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Write a for loop that iterates through each variety in classes\n", + "# and makes a plot for only that class\n", + "\n", + "# For each class add a color and a marker style\n", + "colors = [\"blue\", \"green\", \"red\"]\n", + "markers = [\"o\", \"^\", \"v\"]\n", + "\n", + "for i in range(len(varietes)):\n", + " ???" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Did you notice that it made 3 plots?!?! What's decieving about this?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### We can make Subplots in plots, called an AxesSubplot, keyword ax\n", + "1. if AxesSuplot ax passed, then plot in that subplot\n", + "2. if ax is None, create a new AxesSubplot\n", + "3. return AxesSubplot that was used" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# complete this code to make 3 plots in one\n", + "\n", + "plot_area = None # don't change this...look at this variable in line 12\n", + "colors = [\"blue\", \"green\", \"red\"]\n", + "markers = [\"o\", \"^\", \"v\"]\n", + "for i in range(len(varietes)):\n", + " ???" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's focus on \"Iris-virginica\" data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_virginica = ???\n", + "assert(len(iris_virginica) == 50)\n", + "iris_virginica.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's learn about *xlim* and *ylim*\n", + "- Allows us to set x-axis and y-axis limits\n", + "- Takes either a single value (LOWER-BOUND) or a tuple containing two values (LOWER-BOUND, UPPER-BOUND)\n", + "- You need to be careful about setting the UPPER-BOUND" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\", xlim = ???, ylim = ???)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 6), ylim = (0, 6),\n", + " figsize = (3, 3))\n", + "\n", + "# What is wrong with this plot?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What is the maximum pet-len?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax.get_ylim()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's include assert statements to make sure we don't crop the plot!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 6), ylim = (0, 6),\n", + " figsize = (3, 3))\n", + "assert iris_virginica[\"pet-length\"].max() <= ax.get_ylim()[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now let's try all 4 assert statements\n", + "\n", + "```\n", + "assert iris_virginica[ax.get_xlabel()].min() >= ax.get_xlim()[0]\n", + "assert iris_virginica[ax.get_xlabel()].max() <= ax.get_xlim()[1]\n", + "assert iris_virginica[ax.get_ylabel()].min() >= ax.get_ylim()[0]\n", + "assert iris_virginica[ax.get_ylabel()].max() <= ax.get_ylim()[1]\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax = iris_virginica.plot.scatter(x = \"pet-width\", y = \"pet-length\",\n", + " xlim = (0, 7), ylim = (0, 7),\n", + " figsize = (3, 3))\n", + "assert iris_virginica[ax.get_xlabel()].min() >= ax.get_xlim()[0]\n", + "assert iris_virginica[ax.get_xlabel()].max() <= ax.get_xlim()[1]\n", + "assert iris_virginica[ax.get_ylabel()].min() >= ax.get_ylim()[0]\n", + "assert iris_virginica[ax.get_ylabel()].max() <= ax.get_ylim()[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Time-Permitting\n", + "Plot this data in an interesting/meaningful way & identify any correlations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "students = pd.DataFrame({\n", + " \"name\": [\n", + " \"Cole\",\n", + " \"Cynthia\",\n", + " \"Alice\",\n", + " \"Seth\"\n", + " ],\n", + " \"grade\": [\n", + " \"C\",\n", + " \"AB\",\n", + " \"B\",\n", + " \"BC\"\n", + " ],\n", + " \"gpa\": [\n", + " 2.0,\n", + " 3.5,\n", + " 3.0,\n", + " 2.5\n", + " ],\n", + " \"attendance\": [\n", + " 4,\n", + " 11,\n", + " 10,\n", + " 6\n", + " ],\n", + " \"height\": [\n", + " 68,\n", + " 66,\n", + " 60,\n", + " 72\n", + " ]\n", + "})\n", + "students" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Min, Max, and Overall Difference in Student Height\n", + "min_height = students[\"height\"].min()\n", + "max_height = students[\"height\"].max()\n", + "diff_height = max_height - min_height\n", + "\n", + "# Normalize students heights on a scale of [0, 1] (black to white)\n", + "height_colors = (students[\"height\"] - min_height) / diff_height\n", + "\n", + "# Normalize students heights on a scale of [0, 0.5] (black to gray)\n", + "height_colors = height_colors / 2 \n", + "\n", + "# Color must be a string (e.g. c='0.34')\n", + "height_colors = height_colors.astype(\"string\")\n", + "\n", + "height_colors" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "students.plot.scatter(x=\"attendance\", y=\"gpa\", c=height_colors)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "students.corr()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} -- GitLab