Skip to content

Instantly share code, notes, and snippets.

@kshirsagarsiddharth
Created March 15, 2022 10:39
Show Gist options
  • Save kshirsagarsiddharth/c4e494cca743cded0065b318be81684d to your computer and use it in GitHub Desktop.
Save kshirsagarsiddharth/c4e494cca743cded0065b318be81684d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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\" >&nbsp;</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