Created
March 15, 2022 10:39
-
-
Save kshirsagarsiddharth/c4e494cca743cded0065b318be81684d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"id": "f9ebae95-76ef-4664-bcb2-c098865b11ed", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import json \n", | |
"import pandas as pd \n", | |
"import plotly.express as px\n", | |
"with open(\"creds.json\",\"r\") as f:\n", | |
" creds = json.load(f)\n", | |
"user = creds['user']\n", | |
"password = creds['password']\n", | |
"database_name = 'mavenfuzzyfactory'" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "c5b80d60-64a4-40ed-b02b-b1cac1f2e833", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"%load_ext sql\n", | |
"connection_string = f\"mysql://{user}:{password}@localhost/{database_name}\"\n", | |
"%sql $connection_string" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "c5d42f58-2244-474e-8063-5c07e4c0a8c9", | |
"metadata": {}, | |
"source": [ | |
"### Perform simple select query multi line" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "8b4baf12-4544-41f4-8b09-1cac054a9544", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" * mysql://root:***@localhost/mavenfuzzyfactory\n", | |
"10 rows affected.\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
" <tr>\n", | |
" <th>order_id</th>\n", | |
" <th>created_at</th>\n", | |
" <th>website_session_id</th>\n", | |
" <th>user_id</th>\n", | |
" <th>primary_product_id</th>\n", | |
" <th>items_purchased</th>\n", | |
" <th>price_usd</th>\n", | |
" <th>cogs_usd</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>2012-03-19 21:12:46</td>\n", | |
" <td>20</td>\n", | |
" <td>20</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>2012-03-20 05:57:37</td>\n", | |
" <td>104</td>\n", | |
" <td>104</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>2012-03-20 17:14:45</td>\n", | |
" <td>147</td>\n", | |
" <td>147</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>2012-03-20 20:11:45</td>\n", | |
" <td>160</td>\n", | |
" <td>160</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>5</td>\n", | |
" <td>2012-03-20 21:58:15</td>\n", | |
" <td>177</td>\n", | |
" <td>177</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>6</td>\n", | |
" <td>2012-03-21 02:42:47</td>\n", | |
" <td>232</td>\n", | |
" <td>232</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>7</td>\n", | |
" <td>2012-03-21 03:33:41</td>\n", | |
" <td>241</td>\n", | |
" <td>241</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>8</td>\n", | |
" <td>2012-03-21 10:05:27</td>\n", | |
" <td>295</td>\n", | |
" <td>295</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>9</td>\n", | |
" <td>2012-03-21 13:05:01</td>\n", | |
" <td>304</td>\n", | |
" <td>304</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>10</td>\n", | |
" <td>2012-03-21 17:15:58</td>\n", | |
" <td>317</td>\n", | |
" <td>317</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"[(1, datetime.datetime(2012, 3, 19, 21, 12, 46), 20, 20, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (2, datetime.datetime(2012, 3, 20, 5, 57, 37), 104, 104, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (3, datetime.datetime(2012, 3, 20, 17, 14, 45), 147, 147, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (4, datetime.datetime(2012, 3, 20, 20, 11, 45), 160, 160, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (5, datetime.datetime(2012, 3, 20, 21, 58, 15), 177, 177, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (6, datetime.datetime(2012, 3, 21, 2, 42, 47), 232, 232, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (7, datetime.datetime(2012, 3, 21, 3, 33, 41), 241, 241, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (8, datetime.datetime(2012, 3, 21, 10, 5, 27), 295, 295, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (9, datetime.datetime(2012, 3, 21, 13, 5, 1), 304, 304, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (10, datetime.datetime(2012, 3, 21, 17, 15, 58), 317, 317, 1, 1, Decimal('49.99'), Decimal('19.49'))]" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%sql \n", | |
"select * from orders\n", | |
"limit 10;" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "793d171b-6198-4ce2-9542-ce81799b8bda", | |
"metadata": {}, | |
"source": [ | |
"### Storing the results in a variable " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"id": "3d7dfcb5-8b85-4170-9260-b0ce5a6f9ca2", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" * mysql://root:***@localhost/mavenfuzzyfactory\n", | |
"4 rows affected.\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
" <tr>\n", | |
" <th>order_id</th>\n", | |
" <th>created_at</th>\n", | |
" <th>website_session_id</th>\n", | |
" <th>user_id</th>\n", | |
" <th>primary_product_id</th>\n", | |
" <th>items_purchased</th>\n", | |
" <th>price_usd</th>\n", | |
" <th>cogs_usd</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>2012-03-19 21:12:46</td>\n", | |
" <td>20</td>\n", | |
" <td>20</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>2012-03-20 05:57:37</td>\n", | |
" <td>104</td>\n", | |
" <td>104</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>2012-03-20 17:14:45</td>\n", | |
" <td>147</td>\n", | |
" <td>147</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>2012-03-20 20:11:45</td>\n", | |
" <td>160</td>\n", | |
" <td>160</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"[(1, datetime.datetime(2012, 3, 19, 21, 12, 46), 20, 20, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (2, datetime.datetime(2012, 3, 20, 5, 57, 37), 104, 104, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (3, datetime.datetime(2012, 3, 20, 17, 14, 45), 147, 147, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (4, datetime.datetime(2012, 3, 20, 20, 11, 45), 160, 160, 1, 1, Decimal('49.99'), Decimal('19.49'))]" | |
] | |
}, | |
"execution_count": 24, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"results = %sql select * from orders limit 4;\n", | |
"results" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "13bc409c-44c6-4d22-8d8e-e9d7e6514956", | |
"metadata": {}, | |
"source": [ | |
"## converting to a DataFrame" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"id": "bcd1690d-0185-4c10-a913-96b4ce594c82", | |
"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>order_id</th>\n", | |
" <th>created_at</th>\n", | |
" <th>website_session_id</th>\n", | |
" <th>user_id</th>\n", | |
" <th>primary_product_id</th>\n", | |
" <th>items_purchased</th>\n", | |
" <th>price_usd</th>\n", | |
" <th>cogs_usd</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>1</td>\n", | |
" <td>2012-03-19 21:12:46</td>\n", | |
" <td>20</td>\n", | |
" <td>20</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2</td>\n", | |
" <td>2012-03-20 05:57:37</td>\n", | |
" <td>104</td>\n", | |
" <td>104</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>3</td>\n", | |
" <td>2012-03-20 17:14:45</td>\n", | |
" <td>147</td>\n", | |
" <td>147</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>4</td>\n", | |
" <td>2012-03-20 20:11:45</td>\n", | |
" <td>160</td>\n", | |
" <td>160</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" order_id created_at website_session_id user_id \\\n", | |
"0 1 2012-03-19 21:12:46 20 20 \n", | |
"1 2 2012-03-20 05:57:37 104 104 \n", | |
"2 3 2012-03-20 17:14:45 147 147 \n", | |
"3 4 2012-03-20 20:11:45 160 160 \n", | |
"\n", | |
" primary_product_id items_purchased price_usd cogs_usd \n", | |
"0 1 1 49.99 19.49 \n", | |
"1 1 1 49.99 19.49 \n", | |
"2 1 1 49.99 19.49 \n", | |
"3 1 1 49.99 19.49 " | |
] | |
}, | |
"execution_count": 25, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"results_df = results.DataFrame()\n", | |
"results_df.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "a34f1897-d80c-4709-ac2a-ad1d7ab7be83", | |
"metadata": {}, | |
"source": [ | |
"### Converting to a python Dictonary" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"id": "3c23fb9c-e8b3-4f60-929d-b29bd252404e", | |
"metadata": { | |
"scrolled": true, | |
"tags": [] | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"{'order_id': (1, 2, 3, 4),\n", | |
" 'created_at': (datetime.datetime(2012, 3, 19, 21, 12, 46),\n", | |
" datetime.datetime(2012, 3, 20, 5, 57, 37),\n", | |
" datetime.datetime(2012, 3, 20, 17, 14, 45),\n", | |
" datetime.datetime(2012, 3, 20, 20, 11, 45)),\n", | |
" 'website_session_id': (20, 104, 147, 160),\n", | |
" 'user_id': (20, 104, 147, 160),\n", | |
" 'primary_product_id': (1, 1, 1, 1),\n", | |
" 'items_purchased': (1, 1, 1, 1),\n", | |
" 'price_usd': (Decimal('49.99'),\n", | |
" Decimal('49.99'),\n", | |
" Decimal('49.99'),\n", | |
" Decimal('49.99')),\n", | |
" 'cogs_usd': (Decimal('19.49'),\n", | |
" Decimal('19.49'),\n", | |
" Decimal('19.49'),\n", | |
" Decimal('19.49'))}" | |
] | |
}, | |
"execution_count": 28, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Returns a single dict built from the result set\n", | |
"results.dict()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"id": "1b197a6b-7006-4cd3-89fb-52d6d353890e", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'order_id': 1, 'created_at': datetime.datetime(2012, 3, 19, 21, 12, 46), 'website_session_id': 20, 'user_id': 20, 'primary_product_id': 1, 'items_purchased': 1, 'price_usd': Decimal('49.99'), 'cogs_usd': Decimal('19.49')}\n", | |
"{'order_id': 2, 'created_at': datetime.datetime(2012, 3, 20, 5, 57, 37), 'website_session_id': 104, 'user_id': 104, 'primary_product_id': 1, 'items_purchased': 1, 'price_usd': Decimal('49.99'), 'cogs_usd': Decimal('19.49')}\n", | |
"{'order_id': 3, 'created_at': datetime.datetime(2012, 3, 20, 17, 14, 45), 'website_session_id': 147, 'user_id': 147, 'primary_product_id': 1, 'items_purchased': 1, 'price_usd': Decimal('49.99'), 'cogs_usd': Decimal('19.49')}\n", | |
"{'order_id': 4, 'created_at': datetime.datetime(2012, 3, 20, 20, 11, 45), 'website_session_id': 160, 'user_id': 160, 'primary_product_id': 1, 'items_purchased': 1, 'price_usd': Decimal('49.99'), 'cogs_usd': Decimal('19.49')}\n" | |
] | |
} | |
], | |
"source": [ | |
"# Iterator yielding a dict for each row\n", | |
"for elem in results.dicts():\n", | |
" print(elem)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "9e7e928f-dff6-4370-a7c4-2579d5f9bfe7", | |
"metadata": {}, | |
"source": [ | |
"### Get Column Names" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 33, | |
"id": "34c84690-f959-4bff-aea9-2e3294b6c31b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['order_id',\n", | |
" 'created_at',\n", | |
" 'website_session_id',\n", | |
" 'user_id',\n", | |
" 'primary_product_id',\n", | |
" 'items_purchased',\n", | |
" 'price_usd',\n", | |
" 'cogs_usd']" | |
] | |
}, | |
"execution_count": 33, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"results.field_names" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "78b50f04-39eb-4a43-abd9-099b35a34c74", | |
"metadata": {}, | |
"source": [ | |
"### Get index" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 34, | |
"id": "28cde230-5985-457e-b2c1-9f46b36d304d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<function ResultSet.index(value, start=0, stop=9223372036854775807, /)>" | |
] | |
}, | |
"execution_count": 34, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"results.index" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "e1905fc7-d824-4fe4-90cd-fc09d9d285b0", | |
"metadata": {}, | |
"source": [ | |
"### Store results of multi line queries" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 38, | |
"id": "fe9cd830-7246-4334-9dcc-d1ab22dff8a1", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" * mysql://root:***@localhost/mavenfuzzyfactory\n", | |
"5 rows affected.\n", | |
"Returning data to local variable result\n" | |
] | |
} | |
], | |
"source": [ | |
"%%sql \n", | |
"result << \n", | |
"SELECT \n", | |
" * \n", | |
"FROM orders \n", | |
"limit 5" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 39, | |
"id": "812479ab-f4b2-49be-a27d-928c9757b30d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
" <tr>\n", | |
" <th>order_id</th>\n", | |
" <th>created_at</th>\n", | |
" <th>website_session_id</th>\n", | |
" <th>user_id</th>\n", | |
" <th>primary_product_id</th>\n", | |
" <th>items_purchased</th>\n", | |
" <th>price_usd</th>\n", | |
" <th>cogs_usd</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>2012-03-19 21:12:46</td>\n", | |
" <td>20</td>\n", | |
" <td>20</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>2012-03-20 05:57:37</td>\n", | |
" <td>104</td>\n", | |
" <td>104</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>2012-03-20 17:14:45</td>\n", | |
" <td>147</td>\n", | |
" <td>147</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>2012-03-20 20:11:45</td>\n", | |
" <td>160</td>\n", | |
" <td>160</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>5</td>\n", | |
" <td>2012-03-20 21:58:15</td>\n", | |
" <td>177</td>\n", | |
" <td>177</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>49.99</td>\n", | |
" <td>19.49</td>\n", | |
" </tr>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"[(1, datetime.datetime(2012, 3, 19, 21, 12, 46), 20, 20, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (2, datetime.datetime(2012, 3, 20, 5, 57, 37), 104, 104, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (3, datetime.datetime(2012, 3, 20, 17, 14, 45), 147, 147, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (4, datetime.datetime(2012, 3, 20, 20, 11, 45), 160, 160, 1, 1, Decimal('49.99'), Decimal('19.49')),\n", | |
" (5, datetime.datetime(2012, 3, 20, 21, 58, 15), 177, 177, 1, 1, Decimal('49.99'), Decimal('19.49'))]" | |
] | |
}, | |
"execution_count": 39, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "b4affe3b-5d68-4388-b68f-5856a4f3e565", | |
"metadata": {}, | |
"source": [ | |
"### Variable Substitution" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 51, | |
"id": "a4d3f296-cb1e-4ca5-9151-04e86062e50f", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"item_value = 2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 54, | |
"id": "d9bb22b4-e53b-4415-b554-40bae0004429", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" * mysql://root:***@localhost/mavenfuzzyfactory\n", | |
"4 rows affected.\n", | |
"Returning data to local variable result\n" | |
] | |
} | |
], | |
"source": [ | |
"%%sql \n", | |
"result << \n", | |
"SELECT user_id \n", | |
"FROM orders \n", | |
"WHERE items_purchased = :item_value\n", | |
"LIMIT 4" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 53, | |
"id": "e816057b-bf98-47eb-aaac-fdad9cd77989", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
" <tr>\n", | |
" <th>user_id</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>116186</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>116266</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>116378</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>103416</td>\n", | |
" </tr>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"[(116186,), (116266,), (116378,), (103416,)]" | |
] | |
}, | |
"execution_count": 53, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "8c1c3c6b-030f-4dbe-b008-13019fdd8156", | |
"metadata": {}, | |
"source": [ | |
"### Visualization" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 67, | |
"id": "d5b84daa-e8fb-48b3-85a3-693a19808322", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" * mysql://root:***@localhost/mavenfuzzyfactory\n", | |
"2 rows affected.\n", | |
"Returning data to local variable result\n" | |
] | |
} | |
], | |
"source": [ | |
"# find the price paid for 1 item vs 2 items in the dataset\n", | |
"%%sql\n", | |
"result << \n", | |
"SELECT items_purchased,\n", | |
" AVG(price_usd) as price\n", | |
"FROM orders\n", | |
"GROUP BY items_purchased;\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 69, | |
"id": "44a02c53-9fca-4c3f-806f-d4c016ffdd81", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<style type=\"text/css\">\n", | |
"#T_ed357_row0_col0 {\n", | |
" background-color: #fff7fb;\n", | |
" color: #000000;\n", | |
"}\n", | |
"#T_ed357_row1_col0 {\n", | |
" background-color: #023858;\n", | |
" color: #f1f1f1;\n", | |
"}\n", | |
"</style>\n", | |
"<table id=\"T_ed357\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th class=\"blank level0\" > </th>\n", | |
" <th id=\"T_ed357_level0_col0\" class=\"col_heading level0 col0\" >items_purchased</th>\n", | |
" <th id=\"T_ed357_level0_col1\" class=\"col_heading level0 col1\" >price</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th id=\"T_ed357_level0_row0\" class=\"row_heading level0 row0\" >0</th>\n", | |
" <td id=\"T_ed357_row0_col0\" class=\"data row0 col0\" >1</td>\n", | |
" <td id=\"T_ed357_row0_col1\" class=\"data row0 col1\" >50.819397</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th id=\"T_ed357_level0_row1\" class=\"row_heading level0 row1\" >1</th>\n", | |
" <td id=\"T_ed357_row1_col0\" class=\"data row1 col0\" >2</td>\n", | |
" <td id=\"T_ed357_row1_col1\" class=\"data row1 col1\" >89.250747</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n" | |
], | |
"text/plain": [ | |
"<pandas.io.formats.style.Styler at 0x274524a66e0>" | |
] | |
}, | |
"execution_count": 69, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"result.DataFrame().style.background_gradient()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 73, | |
"id": "c2daae25-e53b-4272-a1d3-5c60275872ee", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" * mysql://root:***@localhost/mavenfuzzyfactory\n", | |
"4 rows affected.\n", | |
"Returning data to local variable result\n" | |
] | |
} | |
], | |
"source": [ | |
"# find the distribution of website sessions in morning, afternoon, evening and night \n", | |
"%%sql\n", | |
"result << \n", | |
"SELECT \n", | |
" CASE\n", | |
" WHEN HOUR(created_at) BETWEEN 7 AND 12 THEN 'morning'\n", | |
" WHEN HOUR(created_at) BETWEEN 12 AND 16 THEN 'afternoon'\n", | |
" WHEN HOUR(created_at) BETWEEN 16 AND 20 THEN 'evening'\n", | |
" ELSE 'night'\n", | |
" END AS divide,\n", | |
" COUNT(DISTINCT website_session_id) AS sessions\n", | |
"FROM\n", | |
" orders\n", | |
"GROUP BY divide;" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 77, | |
"id": "96eee15c-79ca-442b-9a13-b89deb361b75", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"result = result.DataFrame()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 80, | |
"id": "ee8f9913-5fa6-471d-ab2f-53ad4acd8240", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/vnd.plotly.v1+json": { | |
"config": { | |
"plotlyServerURL": "https://plot.ly" | |
}, | |
"data": [ | |
{ | |
"alignmentgroup": "True", | |
"hovertemplate": "divide=%{x}<br>sessions=%{y}<extra></extra>", | |
"legendgroup": "", | |
"marker": { | |
"color": "#1F77B4", | |
"pattern": { | |
"shape": "" | |
} | |
}, | |
"name": "", | |
"offsetgroup": "", | |
"orientation": "v", | |
"showlegend": false, | |
"textposition": "auto", | |
"type": "bar", | |
"x": [ | |
"afternoon", | |
"evening", | |
"morning", | |
"night" | |
], | |
"xaxis": "x", | |
"y": [ | |
2286, | |
4928, | |
5763, | |
19336 | |
], | |
"yaxis": "y" | |
} | |
], | |
"layout": { | |
"autosize": true, | |
"barmode": "relative", | |
"legend": { | |
"tracegroupgap": 0 | |
}, | |
"margin": { | |
"t": 60 | |
}, | |
"template": { | |
"data": { | |
"pie": [ | |
{ | |
"automargin": true, | |
"type": "pie" | |
} | |
], | |
"scatter": [ | |
{ | |
"line": { | |
"width": 3 | |
}, | |
"marker": { | |
"size": 9 | |
}, | |
"type": "scatter" | |
} | |
], | |
"scatter3d": [ | |
{ | |
"line": { | |
"width": 3 | |
}, | |
"marker": { | |
"size": 9 | |
}, | |
"type": "scatter3d" | |
} | |
], | |
"scattergeo": [ | |
{ | |
"line": { | |
"width": 3 | |
}, | |
"marker": { | |
"size": 9 | |
}, | |
"type": "scattergeo" | |
} | |
], | |
"scattergl": [ | |
{ | |
"line": { | |
"width": 3 | |
}, | |
"marker": { | |
"size": 9 | |
}, | |
"type": "scattergl" | |
} | |
], | |
"scatterpolar": [ | |
{ | |
"line": { | |
"width": 3 | |
}, | |
"marker": { | |
"size": 9 | |
}, | |
"type": "scatterpolar" | |
} | |
], | |
"scatterpolargl": [ | |
{ | |
"line": { | |
"width": 3 | |
}, | |
"marker": { | |
"size": 9 | |
}, | |
"type": "scatterpolargl" | |
} | |
], | |
"scatterternary": [ | |
{ | |
"line": { | |
"width": 3 | |
}, | |
"marker": { | |
"size": 9 | |
}, | |
"type": "scatterternary" | |
} | |
], | |
"table": [ | |
{ | |
"cells": { | |
"height": 30 | |
}, | |
"header": { | |
"height": 36 | |
}, | |
"type": "table" | |
} | |
] | |
}, | |
"layout": { | |
"font": { | |
"size": 18 | |
}, | |
"xaxis": { | |
"title": { | |
"standoff": 15 | |
} | |
}, | |
"yaxis": { | |
"title": { | |
"standoff": 15 | |
} | |
} | |
} | |
}, | |
"xaxis": { | |
"anchor": "y", | |
"autorange": true, | |
"domain": [ | |
0, | |
1 | |
], | |
"range": [ | |
-0.5, | |
3.5 | |
], | |
"title": { | |
"text": "divide" | |
}, | |
"type": "category" | |
}, | |
"yaxis": { | |
"anchor": "x", | |
"autorange": true, | |
"domain": [ | |
0, | |
1 | |
], | |
"range": [ | |
0, | |
20353.684210526317 | |
], | |
"title": { | |
"text": "sessions" | |
}, | |
"type": "linear" | |
} | |
} | |
}, | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAABmkAAAFoCAYAAAC8HB9oAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Qu81WWdL/7vBgQFCUHFeTWHUsJrF7FjBy8nsxtTKuPsYUbjqMcxyWNqYwWiG8UkMNCkonHEDMxycryMY0VjqTX2t6Doppmpg4aWU+MlBCJucvu/nt9p7bNBtv3W2ns/a+213+v14lXi8/t9n+f9/Pzttddn/Z6nZfv27dvDiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAIKtAi5Amq7diBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCQEjjQiBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1EFASFMHdCUJECBAgAABAgQIECBAgAABAgQIECBAgAABAkIa1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAoA4CQpo6oCtJgAABAgQIECBAgAABAgQIECBAgAABAgQIEBDSuAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAnUQENLUAV1JAgQIECBAgAABAgQIECBAgAABAgQIECBAgICQxjVAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKiDgJCmDuhKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgSENK4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAdBIQ0dUBXkgABAgQIECBAgAABAgQIECBAgAABAgQIECAgpHENECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqICCkqQO6kgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIY1rgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQBwEhTR3QlSRAgAABAgQIECBAgAABAgQIECBAgAABAgQICGlcAwQIECBAgAABAgQIECBAgAABAgQIECBAgACBOggIaeqAriQBAgQIECBAgAABAgQIECBAgAABAgQIECBAQEjjGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1EFASFMHdCUJECBAgAABAgQIECBAgAABAgQIECBAgAABAkIa1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAoA4CQpo6oCtJgAABAgQIECBAgAABAgQIECBAgAABAgQIEBDSuAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAnUQENLUAV1JAgQIECBAgAABAgQIECBAgAABAgQIECBAgICQxjVAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKiDgJCmDuhKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgSENK4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAdBIQ0dUBXkgABAgQIECBAgAABAgQIECBAgAABAgQIECAgpHENECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqICCkqQO6kgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIY1rgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQBwEhTR3QlSRAgAABAgQIECBAgAABAgQIECBAgAABAgQICGlcAwQIECBAgAABAgQIECBAgAABAgQIECBAgACBOggIaeqAriQBAgQIECBAgAABAgQIECBAgAABAgQIECBAQEjjGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1EFASFMHdCUJECBAgAABAgQIECBAgAABAgQIECBAgAABAkIa1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAoA4CQpo6oCtJgAABAgQIECBAgAABAgQIECBAgAABAgQIEBDSuAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAnUQENLUAV1JAgQIECBAgAABAgQIECBAgAABAgQIECBAgICQxjVAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKiDgJCmDuhKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgSENK4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAdBIQ0dUBXkgABAgQIECBAgAABAgQIECBAgAABAgQIECAgpHENECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqICCkqQO6kgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIY1rgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQBwEhTR3QlSRAgAABAgQIECBAgAABAgQIECBAgAABAgQICGlcAwQIECBAgAABAgQIECBAgAABAgQIECBAgACBOggIaeqAriQBAgQIECBAgAABAgQIECBAgAABAgQIECBAQEjjGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1EFASFMHdCUJECBAgAABAgQIECBAgAABAgQIECBAgAABAkIa1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAoA4CQpo6oCtJgAABAgQIECBAgAABAgQIECBAgAABAgQIEBDSuAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAnUQENLUAV1JAgQIECBAgAABAgQIECBAgAABAgQIECBAgICQppNrYNWqVTFlypSYMGFCtLa2ulIIECBAgAABAgQIECBAgAABAgQIECBAgAABAt0q0DQhzUsvvRRLly6N2267LVasWBH9+vWLN77xjfH+978/DjnkkB3QUtu77rqr+LNy5crYb7/94rTTTot3v/vdMWDAgKKtkKZbrzMnI0CAAAECBAgQIECAAAECBAgQIECAAAECBHYSaIqQZtOmTXH11VfHI488EqeeemocffTR8fvf/z5uv/32WLZsWXziE5+IN73pTcXQt27dGgsXLoz77rsvzj777Bg7dmw89NBDceONNxZBzcknnxwtLS1CGv+pECBAgAABAgQIECBAgAABAgQIECBAgAABAj0q0BQhTRJKT74MGjQoBg8e3A62du3auPzyy2P06NFxwQUXFOHL8uXLo62tLS688MI47rjj2ts+8MADcf3118dVV10Vo0aNEtL06GXn5AQIECBAgAABAgQIECBAgAABAgQIECBAgEDThDSdTeX8+fPj+eefjxkzZsTuu+8eixcvjq9+9avFkzcjRoxoP+zFF18s9qCZNGlSjB8/fpchTXpiZ8GCBfH444/HrFmzYt9993UFESBAgAABAgQIECBAgAABAgQIECBAgAABAgRqEmjqkGbDhg0xc+bM4smY888/vwDaObSpqG3cuLEIXl796lcXbXfek2bLli1xww03xJIlS4p26ekcLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBArQJNHdI8/PDD8fGPf7xY8iztSZP2o5k3b17stttu8eEPf7hY/qzy2rx5c8ydOzde9apXFUuhdQxpJkyYUAQ0aUm02bNnx5gxY2r1dhwBAgQIECBAgAABAgQIECBAgAABAgQIECBAoBBo2pDmhRdeKJY4S+HMOeecEwMGDIjK0zIjR44sgpidXx2fsklP4aTlz0444YRYuXJl3HPPPXHxxRfHuHHjdjhs3bp1LiUCBAgQIECAAAECBAgQIECAAAECBAgQINAnBYYMGdInx91dg27KkGb16tXFnjP9+/ePtra2GDx4cOFVy5M0KaxJ+9Ucf/zxcdFFFxVhT8fXSy+91F1z4TwECBAgQIAAAQIECBAgQIAAAQIECBAgQKBXCQwcOLBX9bfROtt0Ic0f/vCHuOqqqwrn9OTLnnvuuYN5tXvSpKAnPYlz3XXXxcknn1z86bhMWqNNqP4QIECAAAECBAgQIECAAAECBAgQIECAAAECvUOgqUKaPxXQpCm599574/bbby+etBkxYkT7LD333HPFkzKnn356jB8/foc9aVpbW4v9aBYsWBCzZs2yJ03vuLb1kgABAgQIECBAgAABAgQIECBAgAABAgQINLRA04Q0lYBmt912i6lTp7Yvcbaz/jPPPFM8YXPuuefGcccd1/6vUwhz/fXXF0/hjBo16mUhzZYtW4qQZvny5TF79uwYNmxYQ0+szhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKNLdAUIc369etjzpw58etf/zr+9//+37sMaA4++ODiyZnt27fHF77whbj77rvj7LPPjrFjx8ZDDz0UixYtihNOOCHOOuusYjmzVatWxZQpU2LChAmRnqRJrxdeeCGmT58eRxxxRLEE2s770zT2VOsdAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0EgCTRHSrFixIqZNmxZr1qzp1DaFOEceeWTx79NTMSmkueWWW2LlypWx9957x6RJk+K9731vVDY52lVIk45dunRpsVRaqnfMMcc00lzqCwECBAgQIECAAAECBAgQIECAAAECBAgQINCLBJoipOlF3rpKgAABAgQIECBAgAABAgQIECBAgAABAgQIECgEhDQuBAIECBAgQIAAAQIECBAgQIAAAQJ/FHjw16ui9bqlPAgQINBwAgP6t8STV57QcP3Soa4JCGm65udoAgQIECBAgAABAgQIECBAgACBJhIQ0jTRZBoKgSYTENI02YT+cThCmuacV6MiQIAAAQIECBAgQIAAAQIECBCoQUBIUwOaQwgQyCIgpMnCnL2IkCY7uYIECBAgQIAAAQIECBAgQIAAAQKNKiCkadSZ0S8CBIQ0zXkNCGmac16NigABAgQIECBAgAABAgQIECBAoAYBIU0NaA4hQCCLgJAmC3P2IkKa7OQKEiBAgAABAgQIECBAgAABAgQINKqA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RxMgQIAAAQIECBAgQIAAAQIECDSRgJCmiSbTUAg0mYCQpskm9I/DEdI057waFQECBAgQIECAAAECBAgQIECAQA0CQpoa0BxCgEAWASFNFubsRbotpNm4cWNs2LCh2ONlzz33jJaWluyDUZAAAQIECBAgQIAAAQIECBAgQIBAVwSENF3RcywBAj0pIKTpSd36nbuqkOZb3/pWfP/7348LLrgghg8f3t7rZcuWxZw5c2LdunXRr1+/OOmkk+Kcc86JQYMG1W9kKhMgQIAAAQIECBAgQIAAAQIECBCoUkBIUyWY5gQIZBMQ0mSjzlqodEizdevWmDdvXjz77LMxa9asGDJkSNHR559/Pi6++OJYv359nH766fH000/H3XffHR/5yEdi/PjxWQejGAECBAgQIECAAAECBAgQIECAAIGuCAhpuqLnWAIEelJASNOTuvU7d+mQZu3atdHW1haHHnponH/++e09/sY3vhHXXnttXH755TFu3LjYsmVLfPKTnyxCm8suu8zTNPWbW5UJECBAgAABAgQIECBAgAABAgSqFBDSVAmmOQEC2QSENNmosxYqHdKsWrUqpkyZEhMmTIjW1taikymI+djHPlbsQZMCnIEDBxZ/f9dddxVP01xzzTUxbNiwrANSjAABAgQIECBAgAABAgQIECBAgECtAkKaWuUcR4BATwsIaXpauD7nLx3SrFmzJqZOnRrvec97YuLEiUVvH3roobj00kvjwgsv3GFpsxTSLF68uFgerePeNfUZoqoECBAgQIAAAQIECBAgQIAAAQIEygkIaco5aUWAQH4BIU1+8xwVS4c0mzdvjrlz58a2bduKp2b69esXn/70p+PRRx+Nq666KkaOHNneXyFNjqlTgwABAgQIECBAgAABAgQIECBAoLsFhDTdLep8BAh0l4CQprskG+s8pUOa1O0HHngg5syZE4cffnhs3LgxHnvssTjzzDNj0qRJ0dLS0j6y+fPnx/PPPx8zZsyI3XffvbFGrDcECBAgQIAAAQIECBAgQIAAAQIEOhEQ0rg0CBBoVAEhTaPOTNf6VVVIs2XLlrj11luLP1u3bo2TTjopJk+eHIMGDWrvxYYNG2LmzJkxZsyY4t95ESBAgAABAgQIECBAgAABAgQIEOgtAkKa3jJT+kmg7wkIaZpzzqsKaZqTwKgIECBAgAABAgQIECBAgAABAgQI/F8BIY0rgQCBRhUQ0jTqzHStX0Karvk5mgABAgQIECBAgAABAgQIECBAoIkEhDRNNJmGQqDJBIQ0TTahfxyOkKY559WoCBAgQIAAAQIECBAgQIAAAQIEahAQ0tSA5hACBLIICGmyMGcvUnVIs2LFirjlllviZz/7WaxevbrTDo8aNSrmzZsXw4cPzz4oBQkQIECAAAECBAgQIECAAAECBAjUIiCkqUXNMQQI5BAQ0uRQzl+jqpDm4YcfjunTp8emTZtiyJAhMWLEiE57PHLkyGhra4thw4blH5WKBAgQIECAAAECBAgQIECAAAECBGoQENLUgOYQAgSyCAhpsjBnL1I6pNm6dWvxZMxPf/rTuOSSS+Lwww+PlpaW7B1WkAABAgQIECBAgAABAgQIECBAgEBPCQhpekrWeQkQ6KqAkKargo15fOmQZs2aNTF16tR405veFBdccIGApjHnU68IECBAgAABAgQIECBAgAABAgS6ICCk6QKeQwkQ6FEBIU2P8tbt5KVDmlWrVsWUKVNiwoQJ0draWrcOK0yAAAECBAgQIECAAAECBAgQIECgpwSEND0l67wECHRVQEjTVcHGPL50SLNu3bqYMWNGHHbYYTF58uTGHI1eESBAgAABAgQIECBAgAABAgQIEOiCgJCmC3gOJUCgRwWEND3KW7eTlw5pUg9vu+22+OEPfxhXXHFFDB06tG6dVpgAAQIECBAgQIAAAQIECBAgQIBATwgIaXpC1TkJEOgOASFNdyg23jmqCmnWr18fc+bMiT322CPOPvvsGDlypL1pGm9O9YgAAQIECBAgQIAAAQIECBAgQKBGASFNjXAOI0CgxwWEND1OXJcCpUOaFNDceuutsXTp0njmmWdi27ZtMWDAgCKo6d+//8s6n/6+ra0thg0bVpeBKUqAAAECBAgQIECAAAECBAgQIECgWgEhTbVi2hMgkEtASJNLOm+d0iHNqlWrYsqUKUVAU+Y1atSomDdvXgwfPrxMc20IECBAgAABAgQIECBAgAABAgQI1F1ASFP3KdABAgQ6ERDSNOelUTqkac7hGxUBAgQIECBAgAABAgQIECBAgACB/ycgpHE1ECDQqAJCmkadma71S0jTNT9HEyBAgAABAgQIECBAgAABAgQINJGAkKaJJtNQCDSZgJCmySb0j8MR0jTnvBoVAQIECBAgQIAAAQIECBAgQIBADQJCmhrQHEKAQBYBIU0W5uxFqg5ptm/fHk8++WTceuutsWzZsti0aVPR6UGDBsW4cePife97X4wZMyZaWlqyD0ZBAgQIECBAgAABAgQIECBAgAABAl0RENJ0Rc+xBAj0pICQpid163fuqkKaFNAsXrw4FixYEFu2bIm99torhg4dWvR+7dq1sXrCcgoNAAAgAElEQVT16ujXr1988IMfjJNPPllQU795VZkAAQIECBAgQIAAAQIECBAgQKAGASFNDWgOIUAgi4CQJgtz9iJVhTQPP/xwTJ8+PY444oj40Ic+FCNHjtyhw7/97W/j2muvjdTuYx/7WLzlLW/JPiAFCRAgQIAAAQIECBAgQIAAAQIECNQqIKSpVc5xBAj0tICQpqeF63P+0iHN1q1bY968efH000/HnDlzYtiwYbvs8Zo1a+Kyyy6LUaNGxZQpU6J///71GZmqBAgQIECAAAECBAgQIECAAAECBKoUENJUCaY5AQLZBIQ02aizFiod0qTwZerUqcW+M5MnT37FTn75y1+O73znO3HNNdd0GuZkHaViBAgQIECAAAECBAgQIECAAAECBEoICGlKIGlCgEBdBIQ0dWHv8aKlQ5pVq1YVT8ZMmDAhWltbX7Fjd911V7F3TXryZvjw4T0+CAUIECBAgAABAgQIECBAgAABAgQIdIeAkKY7FJ2DAIGeEBDS9IRq/c9ZOqRZt25dzJgxIw444IC44IILoqWlZZe93759e7EvzVNPPRWzZs2KIUOG1H+UekCAAAECBAgQIECAAAECBAgQIECghICQpgSSJgQI1EVASFMX9h4vWjqkSeHLwoUL49vf/nbMnj07xowZs8vOPfnkk8WeNO985zuLZdE6C3N6fGQKECBAgAABAgQIECBAgAABAgQIEKhSQEhTJZjmBAhkExDSZKPOWqh0SJN6lZ6OaWtrixTYTJo0KY499tjYa6+9ig6vXr06vve970Xaj2bQoEExd+7cGDVqVNbBKEaAAAECBAgQIECAAAECBAgQIECgKwJCmq7oOZYAgZ4UENL0pG79zl1VSJO6+cgjj8ScOXPi+eef32Wv03JoF198cbzuda+r36hUJkCAAAECBAgQIECAAAECBAgQIFCDgJCmBjSHECCQRUBIk4U5e5GqQ5rUw02bNsVPf/rT+MEPfhCPPvpo0enDDjss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9TM9FZNCmltuuSVWrlwZe++9d0yaNCne+973xsCBA4uh7CqkSX+/dOnSYqm0adOmxTHHHJNjjtQgQIAAAQIECBAgQIAAAQIECBDIJCCkyQStDAECVQsIaaom6xUHVBXSpABm2bJl8c///M/x0ksvxcSJE+Md73hH9OvXr32w69evj/nz58chhxwSlb1reoWEThIgQIAAAQIECBAgQIAAAQIECPR5ASFNn78EABBoWAEhTcNOTZc6VlVI06VKDiZAgAABAgQIECBAgAABAgQIECDQ4AJCmgafIN0j0IcFhDTNOflCmuacV6MiQIAAAQIECBAgQIAAAQIECBCoQUBIUwOaQwgQyCIgpMnCnL1IVSHNU089FevWrYvDDjtshyXOVq9eHTfeeGM88sgjsddee8XZZ58dr3/967MPRkECBAgQIECAAAECBAgQIECAAAECXREQ0nRFz7EECPSkgJCmJ3Xrd+6qQpqFCxfGkiVL4qqrroqRI0cWvd64cWPMmTMnli5dGvvss09s2LAhWlpa4hOf+EQceuih9RuZygQIECBAgAABAgQIECBAgAABAgSqFBDSVAmmOQEC2QSENNmosxYqHdKk8GXmzJkxYsSImDJlSvTv37/o6EMPPRSXXnppTJo0Kf7X//pfsXLlypgxY0YcdNBBceGFF7a3yzoqxQgQIECAAAECBAgQIECAAAECBAjUICCkqQHNIQQIZBEQ0mRhzl6kdEizatWqIpw58cQTY+LEiUVHt27dGvPnz4//+I//iCuvvLJ4kia9vvzlL8dPfvKTmDVrVgwZMiT7oBQkQIAAAQIECBAgQIAAAQIECBAgUIuAkKYWNccQIJBDQEiTQzl/japDmgkTJkRra2vR02eeeSYuuuiiSH932mmntff+rrvuisWLF8e8efNi+PDh+UelIgECBAgQIECAAAECBAgQIECAAIEaBIQ0NaA5hACBLAJCmizM2YuUDmkqy539+Z//eVxwwQXFvjO33XZb3HrrrcUeNWl5s8pLSJN9HhUkQIAAAQIECBAgQIAAAQIECBDoBgEhTTcgOgUBAj0iIKTpEda6n7R0SJN6etNNN8U3v/nN4umZTZs2xWc/+9l44xvfWPzzwIED2wezcOHCePTRRy13Vvfp1QECBAgQIECAAAECBAgQIECAAIFqBIQ01WhpS4BATgEhTU7tfLWqCmleeOGFmDFjRvzyl78sejhy5MgiiBk9enR7jzdv3hxz586NQYMGFXvY9O/fP99oVCJAgAABAgQIECBAgAABAgQIECDQBQEhTRfwHEqAQI8KCGl6lLduJ68qpEm9TE/QPP7445HCmIMPPjiGDh26Q+e3bNkSjzzySOy7776RlkbzIkCAAAECBAgQIECAAAECBAgQINBbBIQ0vWWm9JNA3xMQ0jTnnFcd0jQng1ERIECAAAECBAgQIECAAAECBAgQiBDSuAoIEGhUASFNo85M1/pVU0izffv2WL16dbHsWXqi5jWveY2nZro2D44mQIAAAQIECBAgQIAAAQIECBBoAAEhTQNMgi4QILBLASFNc14YVYc0v/3tb2PevHnx8MMPt4ucd9550draWvzz8uXLo62tLT760Y/Gscce25xqRkWAAAECBAgQIECAAAECBAgQINCUAkKappxWgyLQFAJCmqaYxpcNoqqQ5qmnnioCmDVr1sSb3/zmOPTQQ+PrX/96nHrqqe0hzbp162LGjBnxZ3/2ZzFlypTo379/c8oZFQECBAgQIECAAAECBAgQIECAQNMJCGmabkoNiEDTCAhpmmYqdxhI6ZAmLXF27bXXxpIlS2LmzJlx8MEHx6pVq4ogZsKECe0hTTr7/Pnz44knnog5c+bE0KFDm1POqAgQIECAAAECBAgQIECAAAECBJpOQEjTdFNqQASaRkBI0zRTWVtIs3bt2uIpmsMPPzwmT54cLS0tnYY0d955Z/zbv/1bsSza8OHDm1POqAgQIECAAAECBAgQIECAAAECBJpOQEjTdFNqQASaRkBI0zRTWVtIs6unZjp7kmbhwoWxdOlSIU1zXjNGRYAAAQIECBAgQIAAAQIECBBoWgEhTdNOrYER6PUCQppeP4W7HEDp5c4qe80ccMABccEFF3T6JM3GjRtj1qxZ0a9fv7jsssti0KBBzSlnVAQIECBAgAABAgQIECBAgAABAk0nIKRpuik1IAJNIyCkaZqp3GEgpUOadNRNN90U//Iv/1KEL0cdddTLljtL+9bcc8898elPfzre//73x6mnntqcakZFgAABAgQIECBAgAABAgQIECDQlAJCmqacVoMi0BQCQpqmmMaXDaKqkOaFF16IGTNmxK9+9as4+uij4y1veUt88YtfjHe9611x6KGHxr333hs/+MEP4qCDDorZs2fH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tWvXFv98yCGHFE/UtLS05JijqmsIaaomcwABApkEhDTloIU05Zy0IkAgv4CQppy5kKack1YECOQXENKUMxfSlHPSigCB/AJCmvzmOSoKaXahvGbNmpg6dWqccMIJ0draukOLO++8M+6///6YM2dOe3iTY6KqqSGkqUZLWwIEcgoIacppC2nKOWlFgEB+ASFNOXMhTTknrQgQyC8gpClnLqQp56QVAQL5BYQ0+c1zVBTS7EJ5xYoVMW3atLjkkkviyCOP3KHFj3/847j66quLP/vvv3+OOaq6hpCmajIHECCQSUBIUw5aSFPOSSsCBPILCGnKmQtpyjlpRYBAfgEhTTlzIU05J60IEMgvIKTJb56jopBmF8qPP/54zJ49O2bOnBmve93rdmjx8MMPF0/RXHnllTF69Ogcc1R1DSFN1WQOIEAgk4CQphy0kKack1YECOQXENKUMxfSlHPSigCB/AJCmnLmQppyTloRIJBfQEiT3zxHRSHNLpTT0zJz584tnpbZOYjZ+Smbm2++Occ8VVVj5qPDY8v2xtwvp6qBaEyAQNMJfOCA38drBm9punF194C+9Kuh8cQfduvu0zofAQIEuizwrpHr4237buzyeZr9BN/93e5x73ODm32YxkeAQC8UGLPn5jjztWt7Yc/zdvmZ9f3jhqeG5S2qGgECBEoI9GvZHjMPW1WiZd4mZ5xxRt6CTVZNSLOLCa3mSZpGDGma7Bo1HAIECBAgQIAAAQIECBAgQIAAAQIECBBoUAEhTdcmRkizC7/evidN1y4JRxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQI5BIQ0u1Beu3ZttLW1xTvf+c5obW3docWXv/zl+P73v1/sSzN06NAcc6QGAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0IQCQppdTOr27dtj4cKFkZY9u+KKK9rDmBTepH8+5JBDYvLkydHSYt+XJvxvwpAIECBAgAABAgQIECBAgAABAgQIECBAgEAWASFNJ8zPPPNMXHLJJUUgc8oppxStbr/99iK4mTt3bowaNSrLBClCgAABAgQIECBAgAABAgQIECBAgAABAgQINKeAkOYV5vW3v/1tXHvttfHggw8WrY444og477zz4r/9t//WnFeDUTW0wLZt2+Kee+6JL37xi7Fy5co48MAD42Mf+1jst99+Dd1vnSNAgACBxhe4+eab41e/+lVMnTo1dt9998bvsB4SIECAQKcC999/f3zta1+LGTNmxIgRI0gRIECAQA8KpFV3Pv7xj8fb3va2OOmkk6qqdNddd8XixYtj3rx5MXz48KqO1ZgAgeYSENI013waTRMLPPTQQ8UP/rTU3lve8pZYs2ZN7L///jFgwIAmHrWhESBAgEAOgZtuuimWL18el112WQwePDhHSTUIECBAoIcEvv3tb8ett94an/jEJ2LfffftoSpOS4AAAQJJIIU0KRT/n//zf8bf/M3fVIUipKmKS2MCTS0gpGnq6TW4ZhJI+yQ9+eSTxdMze+yxR/vQvvzlLxcfqLW2tjbTcI2FAAECBAgQIECAAAECBAgQINC0AtWENOvWrYurrroq/u7v/i5Gjx7dtCYGRqCvCghp+urMG3evE5g/f348//zzxTc0KkvRpB/S6Z/f+ta3Cml63YzqMAECBAgQIECAAAECBAgQINBXBaoJadIe2VdeeWXMnDlTSNNXLxjjbmoBIU1TT6/B9QaBFStWxC233BI//vGPI4UuQ4YMib/8y7+M0047LQYNGhSPPvpopKdoHnvssdiyZUsxpGHDhsUFF1xQ/P1zzz23wzDnzJkTRx55ZPF3aV+lRYsWxbJly2Lz5s3xhje8IT7wgQ/EIYcc0n5MCn/S68wzz4zPf/7z8e///u9Fu/SD/9lnny2WSZg2bVpR/5//+Z+L/XD23nvvIhRKfwYOHNh+rtS/++67r1heIdVO/R83blycffbZ8epXv3qHfq5evboY97333luMO50zrd/6t3/7t8VxlVd60/LTn/40zj333KL+d77znWIs6Zsj55xzTowdOzZaWlp6w1TrIwECfVhg+/btxb047SuW7vu77bZbvOc974nTTz899tprr0hLWs6ePbv40/EencjSL2RpGbL0J93zqrm/pyUxTz755Ljuuuva99h74xvfGB/84AfjgAMO2OFnQccvAqQ+VnP/7/jzZtOmTTvM9KhRo6yz3YevfUMn0JsFKu9DP/KRj8Ttt98eX//614vh/PVf/3XxXj290lPt//qv/xpbt24t9jBN79F3ft+78z0y/fv3ve998e53v7t96eJVq1bFlClTij1Q01Pz//iP/xhPPPFEsdTxqaeeGuk9e9l7+s4f+qVzX3TRRcW9f8OGDcV7/tSn9HtH5WfRnnvu2T5V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AgQIECBAgAABAv9PQEjjaiBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1EFASFMHdCUJECBAgAABAgQIECBAgAABAgQIECBAgAABAkIa1wABAgQIECBAgAABAgQIECBAgAABAgQIECBAoA4CQpo6oCtJgAABAgQIECBAgAABAgQIECBAgAABAgQIEBDSuAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAnUQENLUAV1JAgQIECBAgAABAgQIECBAgAABAgQIECBAgICQxjVAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKiDgJCmDuhKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgSENK4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAdBIQ0dUBXkgABAgQIECBAgAABAgQIECBAgAABAgQIECAgpHENECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqICCkqQO6kgQIECBAgAABAgQIECBAgAABAgQIECBAgAABIY1rgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQBwEhTR3QlSRAgAABAgQIECDQFwV+/OMfR1tbW5x33nnR2traTvDcc8/Fhg0b4rWvfW20tLRUTfPSSy/Fk08+Gfvvv38MHjy49PHz58+P7373u3H11VfH6NGjSx+nIQECBAgQIECAAAECBLpLQEjTXZLOQ4AAAQIECBAgQIDAKwrsKqRZt25dzJgxI/7zP/+zCEtS0FLt64EHHohZs2bFX/3VX8X5559f+nAhTWkqDQkQIECAAAECBAgQ6CEBIU0PwTotAQIECBAgQIAAAQI7CuwqpNm8eXN85jOfiWeeeSauuOKKGDFiRNVsv/jFL+Lyyy+Ps846K0466aTSxwtpSlNpSIAAAQIECBAgQIBADwkIaXoI1mkJECBAgAABAgQIEPjTIU09jYQ09dRXmwABAgQIECBAgACBJCCkcR0QIECAAAECBAgQIJBFoLM9abIU30URIU295NUlQIAAAQIECBAgQKAiIKRxLRAgQIAAAQIECBAg0G0C27Ztix/84Adx8803x4oVK6Jfv35x8MEHx+TJk2PDhg0xffr0OO+886K1tbWouXHjxmI/mf/6r/+KefPmFe3b2tqK/50zZ04MHTr0ZX17+OGHizZpD5p03p/85CfFP3c8b+Wg9evX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COQRENLk0VNLgAABAgQIECBAgAABAgQIECBAgAABAgQIEMgoIKTJCKeMAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBHQEiTR08tAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCjgJAmI5wyAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAeASFNHj21BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGMAkKajHDKCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ5BIQ0efTUEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQyCghpMsIpI0CAAAECBAgQIECAAAECBAgQIECAAAECBAjkERDS5NFTS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBDIKCCkyQinjAABAgQIECBAgAABAgQIECBAgAABAgQIECCQR0BIk0dPLQECBAgQIECAAAECBAgQIECAAAECBAgQIEAgo4CQJiOcMgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAHgEhTR49tQQIECBAgAABAgQIECBAgAABAgQIECBAgACBjAJCmoxwyggQIECAAAECBAgQIECAAAECBAgQIECAAAECeQSENHn01BIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEMgoIaTLCKSNAgAABAgQIECBAgAABAgQIECBAgAABAgQI5BEQ0uTRU0uAAAECBAgQIECAAAECBAgQIECAAAECBAgQyCggpMkIp4wAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkEdASJNHTy0BAgQIECBAgAABAgQIECBAgAABAgQIECBAIKOAkCYjnDICBAgQIECAAAECBAgQIECAAAECBAgQIECAQB4BIU0ePbUECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYwCQpqMcMoIECBAgAABAgQIECBAgAABAgQIECBAgAABAnkEhDR59NQSIECAAAECBAgQIECAAAECBAgQIECAAAECBDIKCGkywikjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOQR+A/FENshATehZAAAAABJRU5ErkJggg==", | |
"text/html": [ | |
"<div> <div id=\"1f942c05-b28f-4b99-8c1f-3863c35aa98f\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div> <script type=\"text/javascript\"> require([\"plotly\"], function(Plotly) { window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById(\"1f942c05-b28f-4b99-8c1f-3863c35aa98f\")) { Plotly.newPlot( \"1f942c05-b28f-4b99-8c1f-3863c35aa98f\", [{\"alignmentgroup\":\"True\",\"hovertemplate\":\"divide=%{x}<br>sessions=%{y}<extra></extra>\",\"legendgroup\":\"\",\"marker\":{\"color\":\"#1F77B4\",\"pattern\":{\"shape\":\"\"}},\"name\":\"\",\"offsetgroup\":\"\",\"orientation\":\"v\",\"showlegend\":false,\"textposition\":\"auto\",\"x\":[\"afternoon\",\"evening\",\"morning\",\"night\"],\"xaxis\":\"x\",\"y\":[2286,4928,5763,19336],\"yaxis\":\"y\",\"type\":\"bar\"}], {\"template\":{\"data\":{\"pie\":[{\"automargin\":true,\"type\":\"pie\"}],\"scatter3d\":[{\"line\":{\"width\":3},\"marker\":{\"size\":9},\"type\":\"scatter3d\"}],\"scattergeo\":[{\"line\":{\"width\":3},\"marker\":{\"size\":9},\"type\":\"scattergeo\"}],\"scattergl\":[{\"line\":{\"width\":3},\"marker\":{\"size\":9},\"type\":\"scattergl\"}],\"scatterpolargl\":[{\"line\":{\"width\":3},\"marker\":{\"size\":9},\"type\":\"scatterpolargl\"}],\"scatterpolar\":[{\"line\":{\"width\":3},\"marker\":{\"size\":9},\"type\":\"scatterpolar\"}],\"scatter\":[{\"line\":{\"width\":3},\"marker\":{\"size\":9},\"type\":\"scatter\"}],\"scatterternary\":[{\"line\":{\"width\":3},\"marker\":{\"size\":9},\"type\":\"scatterternary\"}],\"table\":[{\"cells\":{\"height\":30},\"header\":{\"height\":36},\"type\":\"table\"}]},\"layout\":{\"font\":{\"size\":18},\"xaxis\":{\"title\":{\"standoff\":15}},\"yaxis\":{\"title\":{\"standoff\":15}}}},\"xaxis\":{\"anchor\":\"y\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"divide\"}},\"yaxis\":{\"anchor\":\"x\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"sessions\"}},\"legend\":{\"tracegroupgap\":0},\"margin\":{\"t\":60},\"barmode\":\"relative\"}, {\"responsive\": true} ).then(function(){\n", | |
" \n", | |
"var gd = document.getElementById('1f942c05-b28f-4b99-8c1f-3863c35aa98f');\n", | |
"var x = new MutationObserver(function (mutations, observer) {{\n", | |
" var display = window.getComputedStyle(gd).display;\n", | |
" if (!display || display === 'none') {{\n", | |
" console.log([gd, 'removed!']);\n", | |
" Plotly.purge(gd);\n", | |
" observer.disconnect();\n", | |
" }}\n", | |
"}});\n", | |
"\n", | |
"// Listen for the removal of the full notebook cells\n", | |
"var notebookContainer = gd.closest('#notebook-container');\n", | |
"if (notebookContainer) {{\n", | |
" x.observe(notebookContainer, {childList: true});\n", | |
"}}\n", | |
"\n", | |
"// Listen for the clearing of the current output cell\n", | |
"var outputEl = gd.closest('.output');\n", | |
"if (outputEl) {{\n", | |
" x.observe(outputEl, {childList: true});\n", | |
"}}\n", | |
"\n", | |
" }) }; }); </script> </div>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"px.bar(data_frame=result, x = 'divide', y = 'sessions', template='presentation')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 78, | |
"id": "c9a92bea-a33e-4e78-9e0d-46abaec2eb58", | |
"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>divide</th>\n", | |
" <th>sessions</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>afternoon</td>\n", | |
" <td>2286</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>evening</td>\n", | |
" <td>4928</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>morning</td>\n", | |
" <td>5763</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>night</td>\n", | |
" <td>19336</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" divide sessions\n", | |
"0 afternoon 2286\n", | |
"1 evening 4928\n", | |
"2 morning 5763\n", | |
"3 night 19336" | |
] | |
}, | |
"execution_count": 78, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "0df228a3-fc27-4d20-bf46-98277f987139", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"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.10.2" | |
}, | |
"widgets": { | |
"application/vnd.jupyter.widget-state+json": { | |
"state": {}, | |
"version_major": 2, | |
"version_minor": 0 | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment