"
],
"text/plain": [
"Trip ID | Duration | Start Date | Start Station | Start Terminal | End Date | End Station | End Terminal | Bike # | Subscriber Type | Zip Code\n",
"913460 | 765 | 8/31/2015 23:26 | Harry Bridges Plaza (Ferry Building) | 50 | 8/31/2015 23:39 | San Francisco Caltrain (Townsend at 4th) | 70 | 288 | Subscriber | 2139\n",
"913459 | 1036 | 8/31/2015 23:11 | San Antonio Shopping Center | 31 | 8/31/2015 23:28 | Mountain View City Hall | 27 | 35 | Subscriber | 95032\n",
"913455 | 307 | 8/31/2015 23:13 | Post at Kearny | 47 | 8/31/2015 23:18 | 2nd at South Park | 64 | 468 | Subscriber | 94107\n",
"913454 | 409 | 8/31/2015 23:10 | San Jose City Hall | 10 | 8/31/2015 23:17 | San Salvador at 1st | 8 | 68 | Subscriber | 95113\n",
"913453 | 789 | 8/31/2015 23:09 | Embarcadero at Folsom | 51 | 8/31/2015 23:22 | Embarcadero at Sansome | 60 | 487 | Customer | 9069\n",
"913452 | 293 | 8/31/2015 23:07 | Yerba Buena Center of the Arts (3rd @ Howard) | 68 | 8/31/2015 23:12 | San Francisco Caltrain (Townsend at 4th) | 70 | 538 | Subscriber | 94118\n",
"913451 | 896 | 8/31/2015 23:07 | Embarcadero at Folsom | 51 | 8/31/2015 23:22 | Embarcadero at Sansome | 60 | 363 | Customer | 92562\n",
"913450 | 255 | 8/31/2015 22:16 | Embarcadero at Sansome | 60 | 8/31/2015 22:20 | Steuart at Market | 74 | 470 | Subscriber | 94111\n",
"913449 | 126 | 8/31/2015 22:12 | Beale at Market | 56 | 8/31/2015 22:15 | Temporary Transbay Terminal (Howard at Beale) | 55 | 439 | Subscriber | 94130\n",
"913448 | 932 | 8/31/2015 21:57 | Post at Kearny | 47 | 8/31/2015 22:12 | South Van Ness at Market | 66 | 472 | Subscriber | 94702\n",
"... (354142 rows omitted)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trips = Table.read_table('https://raw.githubusercontent.com/data-8/textbook/refs/heads/main/assets/data/trip.csv')\n",
"trips"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.with_column`\n",
"\n",
"\n",
"```python\n",
"tbl = Table()\n",
"tbl.with_column(name, values) \n",
"tbl.with_columns(n1, v1, n2, v2,...)\n",
"```\n",
"\n",
"\n",
"\n",
"Creates a new table by adding a column with name `name` and values `values` to another table. `name` should be a string and `values` should have as many entries as there are rows in the original table. If `values` is a single value, then every row of that column has the value `values`. \n",
"\n",
"\n",
"\n",
"In the examples below, we start with adding a column to the existing table `trips` with `values` being an array we construct from existing tables. \n",
""
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Trip ID
Duration
Start Date
Start Station
Start Terminal
End Date
End Station
End Terminal
Bike #
Subscriber Type
Zip Code
Difference in terminal
\n",
"
\n",
" \n",
" \n",
"
\n",
"
876419
413
8/5/2015 8:29
Civic Center BART (7th at Market)
72
8/5/2015 8:36
Townsend at 7th
65
269
Subscriber
94518
7
\n",
"
\n",
"
\n",
"
459672
408
9/18/2014 17:11
Harry Bridges Plaza (Ferry Building)
50
9/18/2014 17:17
Embarcadero at Sansome
60
429
Subscriber
94111
10
\n",
"
\n",
"
\n",
"
903647
723
8/25/2015 7:26
San Francisco Caltrain 2 (330 Townsend)
69
8/25/2015 7:38
Market at 10th
67
631
Subscriber
94025
2
\n",
"
\n",
"
\n",
"
452829
409
9/15/2014 8:29
Steuart at Market
74
9/15/2014 8:36
Market at 4th
76
428
Subscriber
94925
2
\n",
"
\n",
"
\n",
"
491023
224
10/9/2014 16:13
Santa Clara at Almaden
4
10/9/2014 16:17
San Jose Diridon Caltrain Station
2
144
Subscriber
94117
2
\n",
"
\n",
"
\n",
"
723352
519
4/13/2015 17:04
Howard at 2nd
63
4/13/2015 17:12
San Francisco Caltrain (Townsend at 4th)
70
629
Subscriber
94061
7
\n",
"
\n",
"
\n",
"
524499
431
10/31/2014 16:36
Townsend at 7th
65
10/31/2014 16:43
Civic Center BART (7th at Market)
72
630
Subscriber
94706
7
\n",
"
\n",
"
\n",
"
518524
389
10/28/2014 8:48
Market at Sansome
77
10/28/2014 8:54
2nd at South Park
64
458
Subscriber
94610
13
\n",
"
\n",
"
\n",
"
710070
11460
4/2/2015 18:13
Powell Street BART
39
4/2/2015 21:24
Powell Street BART
39
375
Subscriber
94107
0
\n",
"
\n",
"
\n",
"
793149
616
6/4/2015 5:26
Embarcadero at Bryant
54
6/4/2015 5:36
Embarcadero at Sansome
60
289
Subscriber
94105
6
\n",
"
\n",
" \n",
"
\n",
"
... (99990 rows omitted)
"
],
"text/plain": [
"Trip ID | Duration | Start Date | Start Station | Start Terminal | End Date | End Station | End Terminal | Bike # | Subscriber Type | Zip Code | Difference in terminal\n",
"876419 | 413 | 8/5/2015 8:29 | Civic Center BART (7th at Market) | 72 | 8/5/2015 8:36 | Townsend at 7th | 65 | 269 | Subscriber | 94518 | 7\n",
"459672 | 408 | 9/18/2014 17:11 | Harry Bridges Plaza (Ferry Building) | 50 | 9/18/2014 17:17 | Embarcadero at Sansome | 60 | 429 | Subscriber | 94111 | 10\n",
"903647 | 723 | 8/25/2015 7:26 | San Francisco Caltrain 2 (330 Townsend) | 69 | 8/25/2015 7:38 | Market at 10th | 67 | 631 | Subscriber | 94025 | 2\n",
"452829 | 409 | 9/15/2014 8:29 | Steuart at Market | 74 | 9/15/2014 8:36 | Market at 4th | 76 | 428 | Subscriber | 94925 | 2\n",
"491023 | 224 | 10/9/2014 16:13 | Santa Clara at Almaden | 4 | 10/9/2014 16:17 | San Jose Diridon Caltrain Station | 2 | 144 | Subscriber | 94117 | 2\n",
"723352 | 519 | 4/13/2015 17:04 | Howard at 2nd | 63 | 4/13/2015 17:12 | San Francisco Caltrain (Townsend at 4th) | 70 | 629 | Subscriber | 94061 | 7\n",
"524499 | 431 | 10/31/2014 16:36 | Townsend at 7th | 65 | 10/31/2014 16:43 | Civic Center BART (7th at Market) | 72 | 630 | Subscriber | 94706 | 7\n",
"518524 | 389 | 10/28/2014 8:48 | Market at Sansome | 77 | 10/28/2014 8:54 | 2nd at South Park | 64 | 458 | Subscriber | 94610 | 13\n",
"710070 | 11460 | 4/2/2015 18:13 | Powell Street BART | 39 | 4/2/2015 21:24 | Powell Street BART | 39 | 375 | Subscriber | 94107 | 0\n",
"793149 | 616 | 6/4/2015 5:26 | Embarcadero at Bryant | 54 | 6/4/2015 5:36 | Embarcadero at Sansome | 60 | 289 | Subscriber | 94105 | 6\n",
"... (99990 rows omitted)"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trips.with_column(\n",
" \"Difference in terminal\", abs(trips.column(\"Start Terminal\") - trips.column(\"End Terminal\"))\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also create a new table by adding two new columns with column name followed by the array values."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
"Cookie | Quantity | Price ($)\n",
"Sugar cookies | 10 | 1\n",
"Chocolate chip | 15 | 1.5\n",
"Red velvet | 15 | 1.75\n",
"Oatmeal raisin | 10 | 1.25\n",
"Peanut butter | 5 | 1"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prices = make_array(1.00, 1.50, 1.75, 1.25, 1.00)\n",
"cookies = cookies.with_column(\"Price ($)\", prices)\n",
"cookies"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the last examples, we add a new column `Delicious` with one value \"yes,\" and we see every column has the same value."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Cookie
Quantity
Price ($)
Delicious
\n",
"
\n",
" \n",
" \n",
"
\n",
"
Sugar cookies
10
1
yes
\n",
"
\n",
"
\n",
"
Chocolate chip
15
1.5
yes
\n",
"
\n",
"
\n",
"
Red velvet
15
1.75
yes
\n",
"
\n",
"
\n",
"
Oatmeal raisin
10
1.25
yes
\n",
"
\n",
"
\n",
"
Peanut butter
5
1
yes
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Cookie | Quantity | Price ($) | Delicious\n",
"Sugar cookies | 10 | 1 | yes\n",
"Chocolate chip | 15 | 1.5 | yes\n",
"Red velvet | 15 | 1.75 | yes\n",
"Oatmeal raisin | 10 | 1.25 | yes\n",
"Peanut butter | 5 | 1 | yes"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cookies.with_column(\"Delicious\", \"yes\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.column()`\n",
"\n",
"```python\n",
"tbl.column(column_name_or_index)\n",
"```\n",
"\n",
"\n",
"\n",
"\n",
"Outputs an array of values of the column `column_name_or_index`. `column_name_or_index` is a string of the column name or number which is the index of the column. \n",
"\n",
"\n",
"\n",
"In the examples below, we start with an array of the `Cookie` column from the table `cookies` first by the column name then by using the index of the column.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Sugar cookies', 'Chocolate chip', 'Red velvet', 'Oatmeal raisin',\n",
" 'Peanut butter'], dtype='\n",
" \n",
"
"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"trips.show(5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.sort()`\n",
"\n",
"```python\n",
"tbl.sort(column_name_or_index, descending=False)\n",
"```\n",
"\n",
"Sorts the rows in the table by the values in the column `column_name_or_index` in ascending order by default. Set `descending=True` to sort in descending order. `column_name_or_index` can be a string column label or an integer index."
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
"Actor | Total Gross | Number of Movies | Average per Movie | #1 Movie | Gross\n",
"Harrison Ford | 4871.7 | 41 | 118.8 | Star Wars: The Force Awakens | 936.7\n",
"Samuel L. Jackson | 4772.8 | 69 | 69.2 | The Avengers | 623.4\n",
"Morgan Freeman | 4468.3 | 61 | 73.3 | The Dark Knight | 534.9\n",
"Tom Hanks | 4340.8 | 44 | 98.7 | Toy Story 3 | 415\n",
"Robert Downey, Jr. | 3947.3 | 53 | 74.5 | The Avengers | 623.4\n",
"Eddie Murphy | 3810.4 | 38 | 100.3 | Shrek 2 | 441.2\n",
"Tom Cruise | 3587.2 | 36 | 99.6 | War of the Worlds | 234.3\n",
"Johnny Depp | 3368.6 | 45 | 74.9 | Dead Man's Chest | 423.3\n",
"Michael Caine | 3351.5 | 58 | 57.8 | The Dark Knight | 534.9\n",
"Scarlett Johansson | 3341.2 | 37 | 90.3 | The Avengers | 623.4\n",
"... (40 rows omitted)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"actors = Table().read_table(\"https://raw.githubusercontent.com/data-8/textbook/refs/heads/main/assets/data/actors.csv\")\n",
"actors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.scatter()`\n",
"\n",
"```python\n",
"tbl.scatter(x_column, y_column, fit_line=False)\n",
"```\n",
"\n",
"Creates a scatter plot with `x_column` on the horizontal axis and `y_column` on the vertical axis. These labels can be column names as strings or integer indices. Set `fit_line=True` to include a line of best fit for the data. You can find more examples in the [textbook](https://www.inferentialthinking.com/chapters/07/Visualization.html#Scatter-Plots-and-Line-Graphs)."
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"actors.scatter(2, 3, fit_line=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.plot()`\n",
"\n",
"```python\n",
"tbl.plot(x_column, y_column)\n",
"```\n",
"\n",
"Plot a line graph with `x_column` on the horizontal axis and `y_column` on the vertical axis. Sorts the table in ascending order by values in `x_column` first. `x_column` and `y_column` can be column names as strings or integer indices."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"movies_by_year.plot('Year', 'Number of Movies')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.barh()`\n",
"\n",
"```python\n",
"tbl.barh(categories) \n",
"tbl.barh(categories, values)\n",
"```\n",
"\n",
"Plots a horizontal bar chart broken down by `categories` as the bars. If `values` is unspecified, one bar for each column of the table (except `categories`) is plotted. `categories` and `values` can be column names as strings or integer indices."
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtYAAAEJCAYAAACwkGChAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXhMd+P+8XciRGLpaEQ2IgRJCNGHKKqJpVoSe6UhdFUqam2tD6otra2oWsq3tLW1jaVEUVvUEmKptVUiStDatbFEkWV+f/iZxzSLJCZGuF/X5brMOZ9zzj1TLndOP3M+NklJSUZEREREROS+2Fo7gIiIiIjIo0DFWkRERETEAlSsRUREREQsQMVaRERERMQCVKxFRERERCxAxVpERERExAJUrEVERERELEDFWkRERETEAlSs5ZGWkJBg7Qj3RfmtpyBnB+W3toKeX0TyRsVaRERERMQCVKxFRERERCxAxVpERERExAJUrEVERERELMDO2gFERETk0ZaamkpycrK1Y4jcNzs7O4oVK5b1/geYRURERB4zqampXL16FYPBgI2NjbXjiNyX5ORkbt68ib29fab7NRVERERE8k1ycrJKtTwyHB0duXHjRpb7VaxFREQkX6lUy6PiXn+WNRVEcmz73kPWjpBrly9f5tK1VGvHyDPlt56CnB3AvpDR2hFERB47KtaSY5NmL7V2hFxLTk7O9ksGDzvlt56CnB3gjfaNrR1BROSxo6kgIiIiIvJQWbBgAR4eHrk6ZvTo0dSrVy+fEuWM7liLiIjIA3fq9AX+PHfxgV3Pw6U05dydc33c/v37adSoEYGBgaxZsyYfkuWfEydOEBAQwE8//cRTTz1l7Ti50q5dO55//vlcHdOrVy/eeuutfEqUMyrWIiIi8sD9ee7iA51i2K9L2zwV67lz59KlSxeioqKIj4/Hx8cnH9I9fFJSUihcuLDVru/g4ICDg0OujilevHg+pck5TQURERERycQ///zDokWLePXVV2nVqhXz5s0z23/ixAkMBgNLliwhJCQEV1dXnn32WX799Vd+++03nn/+edzd3WnWrBmJiYlmx3711Vc89dRTODs789RTTzFnzhyz/QaDgejoaLNt1atXZ8qUKWZjvv76a1599VXc3d0JCAggKirKtD8gIACARo0aYTAYCA0NzfR9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8mLp0qVMmDCBuLg4li5dSlBQEMOGDaNq1apmYx0cHExTUcSyVKxFREREMlG/fn0mT56MnZ0dbm5uFC5cOMOY+3koQnp6OjY2NmzYsCHDue+su5EZJyenTNewqF+/PvXr12f06NGULl2azZs306pVK/bt20fx4sVN4/7++29Kly6d59ySNc2xFhEREcmEo6MjFStWxNPTM9NSnRM1atRg06ZNWe4zGo2cO3eOihUrmv1yd3fP9pzx8fHZXtfX15dRo0Zx8eJFjh49atp+48YNjh8/TkBAQJ7ej2RPxVpEREQkn7z77rssW7aMUaNGcfjwYQ4dOsS0adO4fv06lSpV4qWXXqJHjx5ER0eTmJjI3r17mTJlCsuXL8/ynI0bNyY+Pp6//vrLtG39+vVMmzaNxMRE0tPTSUpKYsaMGZQoUcLsWde7du3C3t6ep59+Ol/f9+NKxVpEREQknzz//PPMnz+fdevWERQURGhoKFu2bDGtfDht2jQ6derEe++9R2BgIOHh4WzduhVPT88sz1mtWjVq1arFkiVLTNs8PT3ZvXs3ISEhTJw4ka5duxIXF8f8+fPNVglcsmQJYWFhODo65t+bfow9Nkuay/3TkuYPnvJbT0HODspvbQU9vyVltfzzw77y4sNu/fr1DB48mB07dlCoUCGzfVktaX7x4kUCAwP56aef8PLyeoBpHy2P5ZLmYnk3nTpb/JzpdmXuPUhERB45xiKuuV4JUf7nueee48033+TPP//M9u723U6cOMGECRNUqvORirXkWH7eWRYREZHc6d69e6bbhwwZkun2WrVqUatWrfyM9NjTHGsREREREQtQsRYRERERsQAVaxERERERC1CxFhERkXxlNOoBZPJouNefZRVrERERyTfFihUjKSlJ5VoeCdevX892uXk9FURERETyjZ2dHSVKlODKlSvWjiJy3+zs7LC3t896/wPMIiIiIo8hOzu7LBfUEHmUqFhLjm3fe8jaEXLt8uXLXLqWau0Yeab81lOQs4PyW1t+5/dwKU05d+d8O7+I5I2KteTYpNlLrR0h15KTkylWrJi1Y+SZ8ltPQc4Oym9t+Z2/X5e2KtYiDyF9eVFERERExAJUrEVERERELEDFWkRERETEAlSsRUREREQsQMVaRERERMQCVKxFRERERCxAxVpERERExAJUrEVERERELEDFWkRERETE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QefOnXP8hcS7TZ06FYDGjRvTr1+/DMXazs6OsWPHMm/ePHx9fYmIiMj2fCNGjGDatGk0aNCAmJgY5s+fb5oDXbhwYWbPnk1iYiINGjRg9OjRvPfee2bHu7u7M2TIEEaNGkXlypVNi8L06tWLIkWKULduXby9vTl16lSOPicRERERsQybpKQkPZJBcsTx1ECLn/OmU2fSHPXlxawov/UU5Oyg/NZW0POLSN4UyDvWIiIiIiIPGxVrERERERELULEWEREREbEAFWsREREREQtQsRYRERERsQAVaxERERERC1CxFhERERGxABVrERERERELULEWEREREbEAFWsREREREQtQsRYRERERsQA7aweQguOmU2eLnzPdrozFzykiIiJiDSrWkmNpjjWsHUFERETkoaWpICIiIiIiFqBiLSIiIiJiASrWIiIiIiIWoGItIiIiImIBKtYiIiIiIhagYi0iIiIiYgEq1iIiIiIiFmCTlJRktHYIEREREZGCTnesRUREREQsQMVaRERERMQCVKxFRERERCxAxVpERERExAJUrEVERERELEDFWrI0a9YsatSogYuLC8HBwWzbts3akXJk4sSJNGrUiHLlyuHt7U14eDi//fabtWPlyYQJEzAYDAwYMMDaUXLs7NmzdO/eHW9vb1xcXHj66aeJjY21dqwcSUtLY9SoUaY/9zVq1GDUqFGkpqZaO1qmtm7dSocOHfDz88NgMLBgwQKz/UajkdGjR+Pr64urqyuhoaEcOnTISmkzyi5/SkoKI0aMoH79+ri7u+Pj48Obb77JqVOnrJj4f+712d+tT58+GAwGpkyZ8gATiog1qFhLpr7//nsGDx7Mu+++y+bNm6lTpw5hYWEPzT9q2YmNjaVLly6sWbOG5cuXY2dnR5s2bfj777+tHS1Xdu3axZw5c6hWrZq1o+RYUlISL7zwAkajkYULF7Jjxw7GjRuHs7OztaPlyKeffsqsWbMYO3YsO3fuZMyYMXzxxRdMnDjR2tEylZycTNWqVRkzZgwODg4Z9k+ePJlp06YxduxYNmzYgLOzM23btuXq1atWSJtRdvmvX7/O/v376d+/P5s2beKbb77hzz//pH379g/FDzr3+uzviI6OZs+ePbi5uT3AdCJiLXqOtWSqSZMmVKtWjc8++8y07T//+Q+tW7dmxIgRVkyWe9euXcPT05MFCxbQ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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cookies.barh(0, 2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.hist()`\n",
"\n",
"```python\n",
"tbl.hist(column)\n",
"tbl.hist(column, bins=...)\n",
"```\n",
"\n",
"Plot a histogram of the values in `column`. Defaults to 10 bins of equal width. If `bins` is specified, it can be a number of bins to use (e.g. `bins=25` will produce a histogram with 25 bins) or an array of values to use as bins (e.g. `bins=make_array(1, 3, 4)` will produce 2 bins: $[1, 3)$ and $[3, 4)$). `column` can be column names as strings or integer indices."
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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BkONiIh0BkONiIh0BkONiIh0BkONiIh0huBQ69+/P+Li4iptP378OPr376+RooiIiGpDcKj98ccfkMvllbbL5XLlF4fWRGRkJGxtbWFmZgYXFxckJydX2b+4uBhffPEFbG1tYWpqir59+2Lr1q013i8REemeGn1JaFVvCLl58ybatGlTo53HxMQgJCQEX375JQYNGoTIyEh4enoiJSUFFhYWFa7j5+eHBw8eYOPGjejevTuys7NRVFRUo/0SEZFuqjLU9uzZg7179yo/r1u3Djt37lTrl5+fj+vXr2PUqFE12nlERAR8fHwwdepUAEB4eDh++uknREVFYdmyZWr9T58+jTNnzuDSpUswNjYGAHTp0qVG+yQiIt1V5eVHuVwOmUwGmUwGACgoKFB+fvknKysLzZs3x9SpU7FhwwbBOy4uLkZqaipcXV1Vlru6uuLcuXMVrnP06FEMGDAAERERsLGxwVtvvYXg4GAUFhYK3i8REemuKs/UAgICEBAQAACwtbXF6tWrMWbMGI3sOCcnB6WlpTAxMVFZbmJigqysrArXycjIQEpKClq2bIldu3ahoKAAwcHByMzMxK5duyrdV3p6eq3rLJQXV3kv8XUpKS3RSB113UahvLBO46krOAaaw7HUnKYylhKJpNI2wffULl++rJFiXvXqfTqFQlHpvbuysjKIRCJs374db7zxBoDyS5YeHh7IysqCqalphetVNQDVufb7XRgaGtZ6fU1prte8znXI5fI6b8PI0AgSSdO+5Juenl6nnyn6H46l5nAsy9VooggAPH36FPfv30deXh4UCoVau5OTk6DtGBsbQ09PT+2s7PHjx2pnby+ZmZmhY8eOykADgB49egAA7t+/X2moERFR0yA41PLy8rBo0SIcOnQIpaWlau0vz7Byc3MFbU9fXx92dnaIj4+Hu7u7cnl8fDzGjx9f4TqDBg3C4cOHUVhYCCMjIwDArVu3AKDS2ZJERNR0CA61uXPn4siRIwgICICTkxPEYnGddx4UFITAwEDY29vD0dERUVFRyMzMxLRp0wAAgYGBAIBt27YBACZNmoTw8HAEBQUhJCQEBQUFCAkJwYQJEyo9uyMioqZDcKj9+OOPCAwMxBdffKGxnXt4eCA3Nxfh4eGQyWTo3bs3pFIpLC0tAZRfUvwrIyMjfP/99wgODoarqyvEYjHc3NwqnP5P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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"Table.static_plots()\n",
"actors.scatter(\"Total Gross\", \"Gross\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Advanced `Table` Functions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.apply()`\n",
"\n",
"```python\n",
"tbl.apply(function, column)\n",
"tbl.apply(function, col1, col2, ...)\n",
"```\n",
"\n",
"Applies the function `function` to each element of the column `column` and returns the values returned as an array. If `function` takes more than one argument, you can specify multiple columns to use for each argument _in order_."
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([41., 69., 61., 44., 53., 38., 36., 45., 58., 37., 38., 49., 60.,\n",
" 43., 7., 31., 24., 50., 39., 79., 34., 63., 23., 34., 37., 36.,\n",
" 17., 50., 39., 42., 35., 36., 17., 46., 40., 32., 17., 29., 39.,\n",
" 26., 25., 36., 27., 43., 25., 21., 40., 35., 23., 25.])"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"actors.apply(np.average, \"Number of Movies\")"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Actor
Total Gross
Number of Movies
Average per Movie
#1 Movie
Gross
\n",
"
\n",
" \n",
" \n",
"
\n",
"
Harrison Ford
4871.7
41
118.8
Star Wars: The Force Awakens
936.7
\n",
"
\n",
"
\n",
"
Samuel L. Jackson
4772.8
69
69.2
The Avengers
623.4
\n",
"
\n",
"
\n",
"
Morgan Freeman
4468.3
61
73.3
The Dark Knight
534.9
\n",
"
\n",
"
\n",
"
Tom Hanks
4340.8
44
98.7
Toy Story 3
415
\n",
"
\n",
"
\n",
"
Robert Downey, Jr.
3947.3
53
74.5
The Avengers
623.4
\n",
"
\n",
"
\n",
"
Eddie Murphy
3810.4
38
100.3
Shrek 2
441.2
\n",
"
\n",
"
\n",
"
Tom Cruise
3587.2
36
99.6
War of the Worlds
234.3
\n",
"
\n",
"
\n",
"
Johnny Depp
3368.6
45
74.9
Dead Man's Chest
423.3
\n",
"
\n",
"
\n",
"
Michael Caine
3351.5
58
57.8
The Dark Knight
534.9
\n",
"
\n",
"
\n",
"
Scarlett Johansson
3341.2
37
90.3
The Avengers
623.4
\n",
"
\n",
" \n",
"
\n",
"
... (40 rows omitted)
"
],
"text/plain": [
"Actor | Total Gross | Number of Movies | Average per Movie | #1 Movie | Gross\n",
"Harrison Ford | 4871.7 | 41 | 118.8 | Star Wars: The Force Awakens | 936.7\n",
"Samuel L. Jackson | 4772.8 | 69 | 69.2 | The Avengers | 623.4\n",
"Morgan Freeman | 4468.3 | 61 | 73.3 | The Dark Knight | 534.9\n",
"Tom Hanks | 4340.8 | 44 | 98.7 | Toy Story 3 | 415\n",
"Robert Downey, Jr. | 3947.3 | 53 | 74.5 | The Avengers | 623.4\n",
"Eddie Murphy | 3810.4 | 38 | 100.3 | Shrek 2 | 441.2\n",
"Tom Cruise | 3587.2 | 36 | 99.6 | War of the Worlds | 234.3\n",
"Johnny Depp | 3368.6 | 45 | 74.9 | Dead Man's Chest | 423.3\n",
"Michael Caine | 3351.5 | 58 | 57.8 | The Dark Knight | 534.9\n",
"Scarlett Johansson | 3341.2 | 37 | 90.3 | The Avengers | 623.4\n",
"... (40 rows omitted)"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"actors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The example below calculates the average gross for each movie by actor by applying a function that takes in the value of `Total Gross` and `Number of Movies` and returns their quotient."
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([118.82195122, 69.17101449, 73.25081967, 98.65454545,\n",
" 74.47735849, 100.27368421, 99.64444444, 74.85777778,\n",
" 57.78448276, 90.3027027 , 86.68421053, 66.9244898 ,\n",
" 53.15666667, 73.8372093 , 451.84285714, 101.62580645,\n",
" 131.2125 , 62.478 , 79.67435897, 39.00379747,\n",
" 89.16764706, 46.70952381, 125.67826087, 84.86470588,\n",
" 76.40540541, 78.38888889, 165.63529412, 56.316 ,\n",
" 71.86153846, 65.12619048, 77.89428571, 75.425 ,\n",
" 157.75882353, 58.28913043, 67.0225 , 83.15625 ,\n",
" 154.96470588, 89.83103448, 66.72564103, 99.25384615,\n",
" 102.308 , 70.82777778, 94.26666667, 58.65348837,\n",
" 100.732 , 119.06190476, 61.5925 , 70.36 ,\n",
" 106.86086957, 96.66 ])"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def average_gross(total_gross, num_movies):\n",
" return total_gross / num_movies\n",
"\n",
"actors.apply(average_gross, \"Total Gross\", \"Number of Movies\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.group()`\n",
"\n",
"```python\n",
"tbl.group(column_or_columns)\n",
"tbl.group(column_or_columns, func)\n",
"```\n",
"\n",
"Groups a table by values in `column_or_columns`. If `column_or_columns` is an array, groups by each unique combination of elements in those columns. If `func` is specified, it should be a function that takes in an array of values and returns a single value. If unspecified, this defaults to the count of rows in the set."
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Start Station
count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2nd at Folsom
2302
\n",
"
\n",
"
\n",
"
2nd at South Park
2610
\n",
"
\n",
"
\n",
"
2nd at Townsend
3904
\n",
"
\n",
"
\n",
"
5th at Howard
2190
\n",
"
\n",
"
\n",
"
Adobe on Almaden
165
\n",
"
\n",
"
\n",
"
Arena Green / SAP Center
176
\n",
"
\n",
"
\n",
"
Beale at Market
2377
\n",
"
\n",
"
\n",
"
Broadway St at Battery St
2157
\n",
"
\n",
"
\n",
"
California Ave Caltrain Station
127
\n",
"
\n",
"
\n",
"
Castro Street and El Camino Real
339
\n",
"
\n",
" \n",
"
\n",
"
... (60 rows omitted)
"
],
"text/plain": [
"Start Station | count\n",
"2nd at Folsom | 2302\n",
"2nd at South Park | 2610\n",
"2nd at Townsend | 3904\n",
"5th at Howard | 2190\n",
"Adobe on Almaden | 165\n",
"Arena Green / SAP Center | 176\n",
"Beale at Market | 2377\n",
"Broadway St at Battery St | 2157\n",
"California Ave Caltrain Station | 127\n",
"Castro Street and El Camino Real | 339\n",
"... (60 rows omitted)"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trips.group(\"Start Station\")"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Start Station
Duration mean
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2nd at Folsom
512.887
\n",
"
\n",
"
\n",
"
2nd at South Park
654.565
\n",
"
\n",
"
\n",
"
2nd at Townsend
755.176
\n",
"
\n",
"
\n",
"
5th at Howard
819.509
\n",
"
\n",
"
\n",
"
Adobe on Almaden
2522.5
\n",
"
\n",
"
\n",
"
Arena Green / SAP Center
1999.7
\n",
"
\n",
"
\n",
"
Beale at Market
679.602
\n",
"
\n",
"
\n",
"
Broadway St at Battery St
827.753
\n",
"
\n",
"
\n",
"
California Ave Caltrain Station
4403.29
\n",
"
\n",
"
\n",
"
Castro Street and El Camino Real
1221.86
\n",
"
\n",
" \n",
"
\n",
"
... (60 rows omitted)
"
],
"text/plain": [
"Start Station | Duration mean\n",
"2nd at Folsom | 512.887\n",
"2nd at South Park | 654.565\n",
"2nd at Townsend | 755.176\n",
"5th at Howard | 819.509\n",
"Adobe on Almaden | 2522.5\n",
"Arena Green / SAP Center | 1999.7\n",
"Beale at Market | 679.602\n",
"Broadway St at Battery St | 827.753\n",
"California Ave Caltrain Station | 4403.29\n",
"Castro Street and El Camino Real | 1221.86\n",
"... (60 rows omitted)"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trips.group(\"Start Station\", np.mean).select(0,2)"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Start Station
count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
San Francisco Caltrain (Townsend at 4th)
7426
\n",
"
\n",
"
\n",
"
San Francisco Caltrain 2 (330 Townsend)
6114
\n",
"
\n",
"
\n",
"
Harry Bridges Plaza (Ferry Building)
4795
\n",
"
\n",
"
\n",
"
Temporary Transbay Terminal (Howard at Beale)
4212
\n",
"
\n",
"
\n",
"
Townsend at 7th
3925
\n",
"
\n",
"
\n",
"
2nd at Townsend
3904
\n",
"
\n",
"
\n",
"
Embarcadero at Sansome
3900
\n",
"
\n",
"
\n",
"
Steuart at Market
3872
\n",
"
\n",
"
\n",
"
Market at 10th
3370
\n",
"
\n",
"
\n",
"
Market at Sansome
3218
\n",
"
\n",
" \n",
"
\n",
"
... (60 rows omitted)
"
],
"text/plain": [
"Start Station | count\n",
"San Francisco Caltrain (Townsend at 4th) | 7426\n",
"San Francisco Caltrain 2 (330 Townsend) | 6114\n",
"Harry Bridges Plaza (Ferry Building) | 4795\n",
"Temporary Transbay Terminal (Howard at Beale) | 4212\n",
"Townsend at 7th | 3925\n",
"2nd at Townsend | 3904\n",
"Embarcadero at Sansome | 3900\n",
"Steuart at Market | 3872\n",
"Market at 10th | 3370\n",
"Market at Sansome | 3218\n",
"... (60 rows omitted)"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trips.group(\"Start Station\").sort(\"count\", descending = True)"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Start Station
End Station
count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2nd at Folsom
2nd at Folsom
22
\n",
"
\n",
"
\n",
"
2nd at Folsom
2nd at South Park
84
\n",
"
\n",
"
\n",
"
2nd at Folsom
2nd at Townsend
123
\n",
"
\n",
"
\n",
"
2nd at Folsom
5th at Howard
28
\n",
"
\n",
"
\n",
"
2nd at Folsom
Beale at Market
34
\n",
"
\n",
"
\n",
"
2nd at Folsom
Broadway St at Battery St
18
\n",
"
\n",
"
\n",
"
2nd at Folsom
Civic Center BART (7th at Market)
13
\n",
"
\n",
"
\n",
"
2nd at Folsom
Clay at Battery
70
\n",
"
\n",
"
\n",
"
2nd at Folsom
Commercial at Montgomery
46
\n",
"
\n",
"
\n",
"
2nd at Folsom
Davis at Jackson
8
\n",
"
\n",
" \n",
"
\n",
"
... (1616 rows omitted)
"
],
"text/plain": [
"Start Station | End Station | count\n",
"2nd at Folsom | 2nd at Folsom | 22\n",
"2nd at Folsom | 2nd at South Park | 84\n",
"2nd at Folsom | 2nd at Townsend | 123\n",
"2nd at Folsom | 5th at Howard | 28\n",
"2nd at Folsom | Beale at Market | 34\n",
"2nd at Folsom | Broadway St at Battery St | 18\n",
"2nd at Folsom | Civic Center BART (7th at Market) | 13\n",
"2nd at Folsom | Clay at Battery | 70\n",
"2nd at Folsom | Commercial at Montgomery | 46\n",
"2nd at Folsom | Davis at Jackson | 8\n",
"... (1616 rows omitted)"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trips.group(['Start Station', 'End Station'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.pivot()`\n",
"\n",
"```python\n",
"tbl.pivot(col1, col2)\n",
"tbl.pivot(col1, col2, values, collect)\n",
"```\n",
"\n",
"Creates a [pivot table](https://en.wikipedia.org/wiki/Pivot_table) with values in `col1` as columns and values in `col2` as rows. If `values` is unspecified, the values in the cells default to counts. If `values` is specified, it should be the label of a column whose values to pass as an array to `collect`, which should return a single value."
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
"Flavor | Price | Stars\n",
"chocolate | 6.55 | 3.5\n",
"chocolate | 5.75 | 3.5\n",
"strawberry | 3.55 | 2.5\n",
"strawberry | 5.25 | 2.5\n",
"vanilla | 4.75 | 4"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Joins cones on ratings. Note that the mint chip flavor doesn't appear since it's not in cones\n",
"rated = cones.join('Flavor', ratings, 'Kind')\n",
"rated"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `tbl.sample()`\n",
"\n",
"```python\n",
"tbl.sample(k, with_replacement=True)\n",
"```\n",
"\n",
"Returns a new table with `k` rows that were randomly sampled from the original table. If `with_replacement` is true, sampling occurs with replacement. For sampling without replacement, set `with_replacement=False`.\n"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Flavor
Price
Stars
\n",
"
\n",
" \n",
" \n",
"
\n",
"
chocolate
6.55
3.5
\n",
"
\n",
"
\n",
"
chocolate
6.55
3.5
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Flavor | Price | Stars\n",
"chocolate | 6.55 | 3.5\n",
"chocolate | 6.55 | 3.5"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# if you rerun this cell, you should get different results since the sample is random\n",
"rated.sample(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice how the table below has more rows for certain flavors than the original rated table. This is because we are sampling with replacement, so you get theoretically get 5 of the same flavors!"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"