diff --git a/f22/worksheets/lec_33/bus-answers.ipynb b/f22/worksheets/lec_33/bus-answers.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c9e29ab6fe966d7341bfd2a9e38fc0a12325da20 --- /dev/null +++ b/f22/worksheets/lec_33/bus-answers.ipynb @@ -0,0 +1,1293 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from pandas import Series, DataFrame\n", + "import sqlite3" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "c = sqlite3.connect(\"bus.db\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def qry(sql):\n", + " return pd.read_sql(sql, c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How many people use the bus system daily?" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "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>SUM(DailyBoardings)</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>55987.18</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " SUM(DailyBoardings)\n", + "0 55987.18" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"SELECT SUM(DailyBoardings) FROM boarding\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How many stops does each route have?" + ] + }, + { + "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>tot</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>32</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>125</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>150</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>4</td>\n", + " <td>114</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5</td>\n", + " <td>91</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>6</td>\n", + " <td>211</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>10</td>\n", + " <td>130</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>11</td>\n", + " <td>93</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>12</td>\n", + " <td>69</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>13</td>\n", + " <td>56</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>14</td>\n", + " <td>133</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>15</td>\n", + " <td>173</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>16</td>\n", + " <td>78</td>\n", + " </tr>\n", + " <tr>\n", + " <th>13</th>\n", + " <td>17</td>\n", + " <td>15</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>18</td>\n", + " <td>90</td>\n", + " </tr>\n", + " <tr>\n", + " <th>15</th>\n", + " <td>19</td>\n", + " <td>100</td>\n", + " </tr>\n", + " <tr>\n", + " <th>16</th>\n", + " <td>20</td>\n", + " <td>52</td>\n", + " </tr>\n", + " <tr>\n", + " <th>17</th>\n", + " <td>21</td>\n", + " <td>38</td>\n", + " </tr>\n", + " <tr>\n", + " <th>18</th>\n", + " <td>22</td>\n", + " <td>36</td>\n", + " </tr>\n", + " <tr>\n", + " <th>19</th>\n", + " <td>25</td>\n", + " <td>21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>20</th>\n", + " <td>26</td>\n", + " <td>33</td>\n", + " </tr>\n", + " <tr>\n", + " <th>21</th>\n", + " <td>27</td>\n", + " <td>96</td>\n", + " </tr>\n", + " <tr>\n", + " <th>22</th>\n", + " <td>28</td>\n", + " <td>97</td>\n", + " </tr>\n", + " <tr>\n", + " <th>23</th>\n", + " <td>29</td>\n", + " <td>50</td>\n", + " </tr>\n", + " <tr>\n", + " <th>24</th>\n", + " <td>30</td>\n", + " <td>48</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25</th>\n", + " <td>31</td>\n", + " <td>51</td>\n", + " </tr>\n", + " <tr>\n", + " <th>26</th>\n", + " <td>32</td>\n", + " <td>60</td>\n", + " </tr>\n", + " <tr>\n", + " <th>27</th>\n", + " <td>33</td>\n", + " <td>65</td>\n", + " </tr>\n", + " <tr>\n", + " <th>28</th>\n", + " <td>34</td>\n", + " <td>28</td>\n", + " </tr>\n", + " <tr>\n", + " <th>29</th>\n", + " <td>35</td>\n", + " <td>66</td>\n", + " </tr>\n", + " <tr>\n", + " <th>30</th>\n", + " <td>36</td>\n", + " <td>11</td>\n", + " </tr>\n", + " <tr>\n", + " <th>31</th>\n", + " <td>37</td>\n", + " <td>95</td>\n", + " </tr>\n", + " <tr>\n", + " <th>32</th>\n", + " <td>38</td>\n", + " <td>159</td>\n", + " </tr>\n", + " <tr>\n", + " <th>33</th>\n", + " <td>39</td>\n", + " <td>32</td>\n", + " </tr>\n", + " <tr>\n", + " <th>34</th>\n", + " <td>40</td>\n", + " <td>42</td>\n", + " </tr>\n", + " <tr>\n", + " <th>35</th>\n", + " <td>44</td>\n", + " <td>59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36</th>\n", + " <td>47</td>\n", + " <td>78</td>\n", + " </tr>\n", + " <tr>\n", + " <th>37</th>\n", + " <td>48</td>\n", + " <td>23</td>\n", + " </tr>\n", + " <tr>\n", + " <th>38</th>\n", + " <td>49</td>\n", + " <td>34</td>\n", + " </tr>\n", + " <tr>\n", + " <th>39</th>\n", + " <td>50</td>\n", + " <td>33</td>\n", + " </tr>\n", + " <tr>\n", + " <th>40</th>\n", + " <td>51</td>\n", + " <td>36</td>\n", + " </tr>\n", + " <tr>\n", + " <th>41</th>\n", + " <td>52</td>\n", + " <td>19</td>\n", + " </tr>\n", + " <tr>\n", + " <th>42</th>\n", + " <td>55</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>43</th>\n", + " <td>56</td>\n", + " <td>130</td>\n", + " </tr>\n", + " <tr>\n", + " <th>44</th>\n", + " <td>57</td>\n", + " <td>118</td>\n", + " </tr>\n", + " <tr>\n", + " <th>45</th>\n", + " <td>58</td>\n", + " <td>88</td>\n", + " </tr>\n", + " <tr>\n", + " <th>46</th>\n", + " <td>67</td>\n", + " <td>27</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47</th>\n", + " <td>70</td>\n", + " <td>127</td>\n", + " </tr>\n", + " <tr>\n", + " <th>48</th>\n", + " <td>71</td>\n", + " <td>102</td>\n", + " </tr>\n", + " <tr>\n", + " <th>49</th>\n", + " <td>72</td>\n", + " <td>104</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50</th>\n", + " <td>73</td>\n", + " <td>85</td>\n", + " </tr>\n", + " <tr>\n", + " <th>51</th>\n", + " <td>75</td>\n", + " <td>39</td>\n", + " </tr>\n", + " <tr>\n", + " <th>52</th>\n", + " <td>80</td>\n", + " <td>47</td>\n", + " </tr>\n", + " <tr>\n", + " <th>53</th>\n", + " <td>81</td>\n", + " <td>32</td>\n", + " </tr>\n", + " <tr>\n", + " <th>54</th>\n", + " <td>82</td>\n", + " <td>33</td>\n", + " </tr>\n", + " <tr>\n", + " <th>55</th>\n", + " <td>84</td>\n", + " <td>6</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Route tot\n", + "0 1 32\n", + "1 2 125\n", + "2 3 150\n", + "3 4 114\n", + "4 5 91\n", + "5 6 211\n", + "6 10 130\n", + "7 11 93\n", + "8 12 69\n", + "9 13 56\n", + "10 14 133\n", + "11 15 173\n", + "12 16 78\n", + "13 17 15\n", + "14 18 90\n", + "15 19 100\n", + "16 20 52\n", + "17 21 38\n", + "18 22 36\n", + "19 25 21\n", + "20 26 33\n", + "21 27 96\n", + "22 28 97\n", + "23 29 50\n", + "24 30 48\n", + "25 31 51\n", + "26 32 60\n", + "27 33 65\n", + "28 34 28\n", + "29 35 66\n", + "30 36 11\n", + "31 37 95\n", + "32 38 159\n", + "33 39 32\n", + "34 40 42\n", + "35 44 59\n", + "36 47 78\n", + "37 48 23\n", + "38 49 34\n", + "39 50 33\n", + "40 51 36\n", + "41 52 19\n", + "42 55 12\n", + "43 56 130\n", + "44 57 118\n", + "45 58 88\n", + "46 67 27\n", + "47 70 127\n", + "48 71 102\n", + "49 72 104\n", + "50 73 85\n", + "51 75 39\n", + "52 80 47\n", + "53 81 32\n", + "54 82 33\n", + "55 84 6" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"SELECT Route, COUNT() AS tot FROM boarding GROUP BY Route\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Which routes have less than 20 stops?" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "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>tot</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>17</td>\n", + " <td>15</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>36</td>\n", + " <td>11</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>52</td>\n", + " <td>19</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>55</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>84</td>\n", + " <td>6</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Route tot\n", + "0 17 15\n", + "1 36 11\n", + "2 52 19\n", + "3 55 12\n", + "4 84 6" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"SELECT Route, COUNT() AS tot FROM boarding GROUP BY Route HAVING tot < 20\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How many people board each route daily?\n", + "\n", + "Show most popular routes first." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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>tot</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 tot\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": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"SELECT Route, SUM(DailyBoardings) AS tot FROM boarding GROUP BY Route ORDER BY tot DESC\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Which bus routes have at least 3 stops with more than 50 daily boardings?" + ] + }, + { + "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>stops</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>2</td>\n", + " <td>30</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>18</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>4</td>\n", + " <td>9</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>5</td>\n", + " <td>6</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>6</td>\n", + " <td>24</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>10</td>\n", + " <td>25</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>14</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>15</td>\n", + " <td>10</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>16</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>22</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>28</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>38</td>\n", + " <td>10</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>80</td>\n", + " <td>36</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Route stops\n", + "0 2 30\n", + "1 3 18\n", + "2 4 9\n", + "3 5 6\n", + "4 6 24\n", + "5 10 25\n", + "6 14 4\n", + "7 15 10\n", + "8 16 4\n", + "9 22 4\n", + "10 28 12\n", + "11 38 10\n", + "12 80 36" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"SELECT Route, COUNT() as stops FROM boarding WHERE DailyBoardings > 50 GROUP BY Route HAVING stops > 3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Which bus routes have at least 10 stops with more than 50 daily boardings?" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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>stops</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>2</td>\n", + " <td>30</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>18</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>6</td>\n", + " <td>24</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>10</td>\n", + " <td>25</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>28</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>80</td>\n", + " <td>36</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Route stops\n", + "0 2 30\n", + "1 3 18\n", + "2 6 24\n", + "3 10 25\n", + "4 28 12\n", + "5 80 36" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"SELECT Route, COUNT() as stops FROM boarding WHERE DailyBoardings > 50 GROUP BY Route HAVING stops > 10\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Which bus routes have at least 3 stops with more than 100 daily boardings?" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "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>stops</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>2</td>\n", + " <td>14</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>6</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>10</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>80</td>\n", + " <td>25</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Route stops\n", + "0 2 14\n", + "1 6 8\n", + "2 10 12\n", + "3 80 25" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"SELECT Route, COUNT() as stops FROM boarding WHERE DailyBoardings > 100 GROUP BY Route HAVING stops > 3\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/f22/worksheets/lec_33/bus.db b/f22/worksheets/lec_33/bus.db new file mode 100644 index 0000000000000000000000000000000000000000..3303edbe663ab1bcff61a5c3977edc23fbd1f0c7 Binary files /dev/null and b/f22/worksheets/lec_33/bus.db differ diff --git a/f22/worksheets/lec_33/bus.ipynb b/f22/worksheets/lec_33/bus.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..028eca69cd2ade9748474f186634a909b71b8976 --- /dev/null +++ b/f22/worksheets/lec_33/bus.ipynb @@ -0,0 +1,257 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from pandas import Series, DataFrame\n", + "import sqlite3" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "c = sqlite3.connect(\"bus.db\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def qry(sql):\n", + " return pd.read_sql(sql, c)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "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>index</th>\n", + " <th>StopID</th>\n", + " <th>Route</th>\n", + " <th>Lat</th>\n", + " <th>Lon</th>\n", + " <th>DailyBoardings</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>1163</td>\n", + " <td>27</td>\n", + " <td>43.073655</td>\n", + " <td>-89.385427</td>\n", + " <td>1.03</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>1</td>\n", + " <td>1163</td>\n", + " <td>47</td>\n", + " <td>43.073655</td>\n", + " <td>-89.385427</td>\n", + " <td>0.11</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>2</td>\n", + " <td>1163</td>\n", + " <td>75</td>\n", + " <td>43.073655</td>\n", + " <td>-89.385427</td>\n", + " <td>0.34</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>3</td>\n", + " <td>1164</td>\n", + " <td>6</td>\n", + " <td>43.106465</td>\n", + " <td>-89.340021</td>\n", + " <td>10.59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>4</td>\n", + " <td>1167</td>\n", + " <td>3</td>\n", + " <td>43.077867</td>\n", + " <td>-89.369993</td>\n", + " <td>3.11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " index StopID Route Lat Lon DailyBoardings\n", + "0 0 1163 27 43.073655 -89.385427 1.03\n", + "1 1 1163 47 43.073655 -89.385427 0.11\n", + "2 2 1163 75 43.073655 -89.385427 0.34\n", + "3 3 1164 6 43.106465 -89.340021 10.59\n", + "4 4 1167 3 43.077867 -89.369993 3.11" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qry(\"SELECT * FROM boarding\").head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How many people use the bus system daily?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How many stops does each route have?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Which routes have less than 20 stops?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How many people board each route daily?\n", + "\n", + "Show most popular routes first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Which bus routes have at least 3 stops with more than 50 daily boardings?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Which bus routes have at least 10 stops with more than 50 daily boardings?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Which bus routes have at least 3 stops with more than 100 daily boardings?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}