Skip to content

Instantly share code, notes, and snippets.

@kshirsagarsiddharth
Created March 15, 2022 12:16
Show Gist options
  • Save kshirsagarsiddharth/c03722c2da91a025987ae02d84504016 to your computer and use it in GitHub Desktop.
Save kshirsagarsiddharth/c03722c2da91a025987ae02d84504016 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "bf831def-63c1-4cd8-a1f3-fd4899d8348e",
"metadata": {},
"source": [
"### Perform Necessary Imports\n",
"I have stored my credentials in a json file."
]
},
{
"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": "markdown",
"id": "5a246416-a25e-4396-8100-3117c0d20af8",
"metadata": {},
"source": [
"### Defining A connection string and making a connection"
]
},
{
"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 results 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 results 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": "iVBORw0KGgoAAAANSUhEUgAABmoAAAFoCAYAAABXK6RrAAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Q+0XVV9J/Bf/pAAAUMCCSxsrGDknyKkpRP+jIhaU41k0jfMQCOoBVJGARtrQkiAADHR/JGocShBBMRxgfwZSx0sCthaaRNkpEoRJRMwQCkKiSGJMSQh/2bt077XJOTBuffl7nvveZ+71lsuXvY5e+/PPt639/3es0+f7du3bw8vAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB7AJ9BDXZzVVIgAABAgQIECBAgAABAgQIECBAgAABAgQIECgEBDUuBAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAkwQENU2CVy0BAgQIECBAgAABAgQIECBAgAABAgQIECBAQFDjGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQINElAUNMkeNUSIECAAAECBAgQIECAAAECBAgQIECAAAECBAQ1rgECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJMEBDVNglctAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEBQ4xogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRJQFDTJHjVEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQENa4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgECTBAQ1TYJXLQECBAgQIECAAAECBAgQIECAAAECBAgQIEBAUOMaIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0SUBQ0yR41RIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBDWuAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAkwQENU2CVy0BAgQIECBAgAABAgQIECBAgAABAgQIECBAQFDjGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQINElAUNMkeNUSIECAAAECBAgQIECAAAECBAgQIECAAAECBAQ1rgECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJMEBDVNglctAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEBQ4xogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRJQFDTJHjVEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQENa4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgECTBAQ1TYJXLQECBAgQIECAAAECBAgQIECAAAECBAgQIEBAUOMaIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0SUBQ0yR41RIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBDWuAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAkwQENU2CVy0BAgQIECBAgAABAgQIECBAgAABAgQIECBAQFDjGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQINElAUNMkeNUSIECAAAECBAgQIECAAAECBAgQIECAAAECBAQ1rgECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJMEBDVNglctAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEBQ4xogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRJQFDTJHjVEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQENa4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgECTBAQ1TYJXLQECBAgQIECAAAECBAgQIECAAAECBAgQIEBAUOMaIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0SUBQ0yR41RIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBDWuAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAkwQENU2CVy0BAgQIECBAgAABAgQIECBAgAABAgQIECBAQFDjGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQINElAUNMkeNUSIECAAAECBAgQIECAAAECBAgQIECAAAECBAQ1rgECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJMEBDVNglctAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEBQ4xogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRJQFDTJHjVEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQENa4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgECTBAQ1TYJXLQECBAgQIECAAAECBAgQIECAAAECBAgQIEBAUOMaIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0SUBQ0yR41RIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBDWuAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAkwQENU2CVy0BAgQIECBAgAABAgQIECBAgAABAgQIECBAQFDjGiBAgAABAgQIECBAgAABAgQIECBAgAABAgQINElAUNMkeNUSIECAAAECBAgQIECAAAECBAgQIECAAAECBAQ1rgECBAgQIECAAAECBAgQIECAAAECBAgQIECAQJMEBDVNglctAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEBQ0801sHr16pg8eXKMGzcuOjo6XCkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgT0uUJmg5pVXXoklS5bEHXfcEcuXL4++ffvGscceG+edd14cddRRO8GlsnfffXfxs2rVqjj44IPj7LPPjve9733Rv3//oqygZo9fa05IgAABAgQIECBAgAABAgQIECBAgAABAgQI7CJQiaBm06ZNMX/+/Hj88cfjrLPOipNOOil+85vfxJ133hkPP/xwfPazn413vOMdRde3bt0aN954YzzwwANx/vnnx/HHHx+PPvpo3HzzzUVYM378+OjTp4+gxv9VCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYYLVCKoSUrpDpiBAwfGvvvu24W2bt26uPLKK+Pwww+Piy++uAhgli1bFtOnT49JkybFqaee2lX2wQcfjOuvvz7mzZsXI0aMENQ0/NJTAQECBAgQIECAAAECBAgQIECAAAECBAgQIFCZoKa7oVy4cGGsWLEiZsyYEXvvvXfcc8898a1vfau4A2fo0KFdh7300kvFM2kmTJgQY8aM2W1Qk+7cWbRoUSxdujRmzZoVw4YNcwURIECAAAECBAgQIECAAAECBAgQIECAAAECBOoWqHRQs2HDhpg5c2Zxh8xFF11UIO0a3HTKbdy4sQhfDj300KLsrs+o2bJlS9xwww2xePHioly6S8eLAAECBAgQIECAAAECBAgQIECAAAECBAgQINATgUoHNY899lh8+tOfLrY/S8+oSc+nWbBgQey1117xyU9+stgKrfO1efPmmDt3brzhDW8otkXbMagZN25cEdKk7dFmz54dI0eO7Im5YwkQIECAAAECBAgQIECAAAECBAgQIECAAAEChUBlg5qVK1cW252lgOaCCy6I/v37R+ddM8OHDy/CmF1fO95tk+7GSVuhjR07NlatWhX33XdfXHrppTF69OidDlu/fr1LiQABAgQIECBAgAABAgQIECBAgAABAgQI9FqBQYMG9dq+74mOVzKoWbNmTfEMmn79+sX06dNj3333LazquaMmBTbp+TWnnXZaXHLJJUXgs+PrlVde2RPj4BwECBAgQIAAAQIECBAgQIAAAQIECBAgQKAtBQYMGNCW7W6VRlcuqPntb38b8+bNK3zTHTD77bffTta1PqMmhT3pjpzrrrsuxo8fX/zsuGVaqwykdhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtJ1CpoOb1Qpo0PPfff3/ceeedxR03Q4cO7RqxF198sbhj5pxzzokxY8bs9Iyajo6O4vk0ixYtilmzZnlGTftd51pMgAABAgQIECBAgAABAgQIECBAgAABAgRaUqAyQU1nSLPXXnvFlClTurY721X9ueeeK+60+djHPhannnpq1z+nIOb6668v7sYZMWLEq4KaLVu2FEHNsmXLYvbs2TF48OCWHFCNIkCAAAECBAgQIECAAAECBAgQIECAAAECBNpHoBJBzcsvvxxz5syJf/mXf4mPfOQjuw1pjjzyyOIOmu3bt8dXv/rVuPfee+P888+P448/Ph599NG46aabYuzYsXHuuecWW5utXr06Jk+eHOPGjYt0R016rVy5Mi677LIYNWpUsR3ars+raZ9h11ICBAgQIECAAAECBAgQIECAAAECBAgQIECgFQQqEdQsX748pk6dGmvXru3WNAU5J5xwQvHv6e6YFNTcdtttsWrVqjjwwANjwoQJ8YEPfCA6H3q0u6AmHbtkyZJi27RU38knn9wKY6gNBAgQIECAAAECBAgQIECAAAECBAgQIECAQJsKVCKoaVN7zSZAgAABAgQIECBAgAABAgQIECBAgAABAgR6uYCgppdfALpPgAABAgQIECBAgAABAgQIECCws8BXHlwen7n3CSwECBBoOYFBA/vHz2b+Ucu1S4N6JiCo6ZmfowkQIECAAAECBAgQIECAAAECBComIKip2IDqDoEKCQhqKjSYO3RFUFPNcdUrAgQIECBAgAABAgQIECBAgACBOgUENXXCOYwAgYYLCGoaTtyUCgQ1TWFXKQECBAgQIECAAAECBAgQIECAQKsKCGpadWS0iwABQU01rwFBTTXHVa8IECBAgAABAgQIECBAgAABAgTqFBDU1AnnMAIEGi4gqGk4cVMqENQ0hV2lBAgQIECAAAECBAgQIECAAAECrSogqGnVkdEuAgQENdW8BgQ11RxXvSJAgAABAgQIECBAgAABAgQIEKhTQFBTJ5zDCBBouICgpuHETalAUNMUdpUSIECAAAECBAgQIECAAAECBAi0qoCgplVHRrsIEBDUVPMaENRUc1z1igABAgQIECBAgAABAgQIECBAoE4BQU2dcA4jQKDhAoKahhM3pQJBTVPYVUqAAAECBAgQIECAAAECBAgQINCqAoKaVh0Z7SJAQFBTzWtAUFPNcdUrAgQIECBAgAABAgQIECBAgACBOgUENXXCOYwAgYYLCGoaTtyUCgQ1TWFXKQECBAgQIECAAAECBAgQIECAQKsKCGpadWS0iwABQU01rwFBTTXHVa8IECBAgAABAgQIECBAgAABAgTqFBDU1AnnMAIEGi4gqGk4cVMqENQ0hV2lBAgQIECAAAECBAgQIECAAAECrSogqGnVkdEuAgQENdW8BgQ11RxXvSJAgAABAgQIECBAgAABAgQIEKhTQFBTJ5zDCBBouICgpuHETalAUNMUdpUSIECAAAECBAgQIECAAAECBAi0qoCgplVHRrsIEBDUVPMaENRUc1z1igABAgQIECBAgAABAgQIECBAoE4BQU2dcA4jQKDhAoKahhM3pQJBTVPYVUqAAAECBAgQIECAAAECBAgQINCqAoKaVh0Z7SJAQFBTzWtAUFPNcdUrAgQIECBAgAABAgQIECBAgACBOgUENXXCOYwAgYYLCGoaTtyUCgQ1TWFXKQECBAgQIECAAAECBAgQIECAQKsKCGpadWS0iwABQU01rwFBTTXHVa8IECBAgAABAgQIECBAgAABAgTqFBDU1AnnMAIEGi4gqGk4cVMqENQ0hV2lBAgQIECAAAECBAgQIECAAAECrSogqGnVkdEuAgQENdW8BgQ11RxXvSJAgAABAgQIECBAgAABAgQIEKhTQFBTJ5zDCBBouICgpuHETalAUNMUdpUSIECAAAECBAgQIECAAAECBAi0qoCgplVHRrsIEBDUVPMaENRUc1z1igABAgQIECBAgAABAgQIECBAoE4BQU2dcA4jQKDhAoKahhM3pQJBTVPYVUqAAAECBAgQIECAAAECBAgQINCqAoKaVh0Z7SJAQFBTzWtAUFPNcdUrAgQIECBAgAABAgQIECBAgACBOgUENXXCOYwAgYYLCGoaTtyUCgQ1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pmIDqjsEKiQgqKnQYO7QFUFNNcdVrwgQIECAAAECBAgQIECAAAECBOoUENTUCecwAgQaLiCoaThxUyqoOajZvn17PPXUU3H77bfHww8/HJs2bSoaPnDgwBg9enT8yZ/8SYwcOTL69OnTlA6plAABAgQIECBAgAABAgQIECBAgEBPBAQ1PdFzLAECjRQQ1DRSt3kaoM8rAAAgAElEQVTnrimoSSHNPffcE4sWLYotW7bEAQccEPvvv3/R+nXr1sWaNWuib9++8fGPfzzGjx8vrGneuKqZAAECBAgQIECAAAECBAgQIECgTgFBTZ1wDiNAoOECgpqGEzelgpqCmsceeywuu+yyGDVqVHziE5+I4cOH79ToX/7yl3HttddGKnfVVVfFH/zBHzSlUyolQIAAAQIECBAgQIAAAQIECBAgUK+AoKZeOccRINBoAUFNo4Wbc/7SQc3WrVtjwYIF8cwzz8ScOXNi8ODBu23x2rVr44orrogRI0bE5MmTo1+/fs3pmVoJECBAgAABAgQIECBAgAABAgQI1CEgqKkDzSEECGQRENRkYc5eSemgJgUwU6ZMKZ5DM3HixNds6K233hp///d/H9dcc023gU72nqqQAAECBAgQIECAAAECBAgQIECAQAkBQU0JJEUIEGiKgKCmKewNr7R0ULN69eriDplx48ZFR0fHazbs7rvvLp5lk+7AGTJkSMM7oQICBAgQIECAAAECBAgQIECAAAECe0pAULOnJJ2HAIE9LSCo2dOirXG+0kHN+vXrY8aMGXHYYYfFxRdfHH369NltD7Zv3148p+bpp5+OWbNmxaBBg1qjp1pBgAABAgQIECBAgAABAgQIECBAoISAoKYEkiIECDRFQFDTFPaGV1o6qEkBzI033hh/+7d/G7Nnz46RI0futnFPPfVU8Yya9773vcUWad0FOg3vmQoIECBAgAABAgQIECBAgAABAgQI1CEgqKkDzSEECGQRENRkYc5eSemgJrUs3SUzffr0SKHNhAkT4pRTTokDDjigaPSaNWviH//xHyM9n2bgwIExd+7cGDFiRPYOqZAAAQIECBAgQIAAAQIECBAgQIBATwQENT3RcywBAo0UENQ0Urd5564pqEnNfPzxx2POnDmxYsWK3bY6bY126aWXxlve8pbm9UrNBAgQIECAAAECBAgQIECAAAECBOoUENTUCecwAgQaLiCoaThxUyqoOahJrdy0aVP8+Mc/jh/+8Ifx85//vGj4McccE+985zvj+OOPj/79+zelMyolQIAAAQIECBAgQIAAAQIECBAg0FMBQU1PBR1PgECjBAQ1jZJt7nnrCmqa22S1EyBAgAABAgQIECBAgAABAgQIEGicgKCmcbbOTIBAzwQENT3za9WjBTXdjMzq1atj8uTJMW7cuOjo6GjV8dMuAgQIECBAgAABAgQIECBAgACBPSwgqNnDoE5HgMAeExDU7DHKljpRt0HN9u3b47e//W3stddesffee7dUo1+rMVu2bIm//uu/jptuuilmzZoVJ5xwwquKv/LKK3H33XcXP6tWrYqDDz44zj777Hjf+97XtW2boKZthlxDCRAgQIAAAQIECBAgQIAAAQJ7VEBQs0c5nYwAgT0oIKjZg5gtdKpug5qf/OQnMW3atDjyyCPjM5/5TKQAJN1h8txzz5Vq/ogRI2LBggUxZMiQUuX3RKH07JwbbrghHnjggdi8efNug5qtW7fGjTfeWJQ5//zzi2fqPProo3HzzTcXYc348eOjT58+IajZEyPiHAQIECBAgAABAgQIECBAgACB9hMQ1LTfmGkxgd4iIKip5kh3G9Q888wzcc0118Tb3/72OO+882LDhg0xZ86cWLFiRSmJ4cOHx/Tp02Pw4MGlyve00Jo1a4pg6Pnnny8Cly9/+csxderUV91Rs2zZsqJdkyZNilNPPbWr2gcffDCuv/76mDdvXqSQSVDT0xFxPAECBAgQIECAAAECBAgQIECgPQUENe05blpNoDcICGqqOcqVeUbNunXr4pZbbokzzzwz1q9fX4Q06Y6gXbc+u+eee+Jb3/pWzJ8/P4YOHdo1qi+99FJxx9CECRNizJgxuw1q0h07ixYtiqVLlxZ36wwbNqyaV4VeESBAgAABAgQIECBAgAABAgR6sYCgphcPvq4TaHEBQU2LD1CdzatMULNj/5cvX95tULNw4cLirqAZM2bs9OydjRs3FuHLoYceGhdddNGrgpq09VvaVm3x4sVFucMPP7xOcocRIECAAAECBAgQIECAAAECBAi0soCgppVHR9sI9G4BQU01x7+moCaFFenVv3//nTS2b98ezz77bPzqV7+KQYMGxVFHHRUDBgxomlh3QU16Pk3aHm2vvfaKT37yk8WzaDpf6Zk2c+fOjTe8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xhvj5z//ua3PWmKINYIAAQIECBAgQIAAAQIECBAgQKAWAUFNLVrKEiCQU0BQk1M7X101BTUrV66MGTNmxC9+8YuihcOHDy/CmMMPP7yrxZs3b465c+fGwIEDi2fa9OvXL19v1ESAAAECBAgQIECAAAECBAgQIECghwKCmh4COpwAgYYJCGoaRtvUE9cU1KSWpjtpli5dGimQOfLII2P//fffqQNbtmyJxx9/PIYNGxZpmzQvAgQIECBAgAABAgQIECBAgAABAu0kIKhpp9HSVgK9S0BQU83xrjmoqSaDXhEgQIAAAQIECBAgQIAAAQIECBD4NwFBjSuBAIFWFRDUtOrI9KxddQU127dvjzVr1hRboKU7a970pje5e6Zn4+BoAgQIECBAgAABAgQIECBAgACBFhEQ1LTIQGgGAQKvEhDUVPOiqDmo+eUvfxkLFiyIxx57rEvkwgsvjI6OjuK/ly1bFtOnT49PfepTccopp1RTTa8IECBAgAABAgQIECBAgAABAgQqKyCoqezQ6hiBthcQ1LT9EO62AzUFNU8//XQRwqxduzZ+7/d+L44++uj49re/HWeddVZXULN+/fqYMWNGHHLIITF58uTo169fNeX0igABAgQIECBAgAABAgQIECBAoJICgppKDqtOEaiEgKCmEsP4qk6UDmrSdmfXXnttLF68OGbOnBlHHnlkrF69ughjxo0b1xXUpBoWLlwYTz75ZMyZMyf233//asrpFQECBAgQIECAAAECBAgQIECAQCUFBDWVHFadIlAJAUFNJYax/qBm3bp1xd00xx13XEycODH69OnTbVDzzW9+M/7mb/6m2CJtyJAh1ZTTKwIECBAgQIAAAQIECBAgQIAAgUoKCGoqOaw6RaASAoKaSgxj/UHN7u6e6e6OmhtvvDGWLFkiqKnmNaNXBAgQIECAAAECBAgQIECAAIFKCwhqKj28OkegrQUENW09fN02vvTWZ53PnjnssMPi4osv7vaOmo0bN8asWbOib9++ccUVV8TAgQOrKadXBAgQIECAAAECBAgQIECAAAEClRQQ1FRyWHWKQCUEBDWVGMZXdaJ0UJOOvOWWW+J//+//XQQwJ5544qu2PkvPsbnvvvviC1/4Qpx33nlx1llnVVNNrwgQIECAAAECBAgQIECAAAECBCorIKip7NDqGIG2FxDUtP0Q7rYDNQU1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QIAAAQIECBAgQIAAAQIECBAgQIAAAQJVFhDUVHl09Y0AAQIECBAgQIAAAQIECBAgQIAAAQIECBBoaQFBTUsPj8YRIECAAAECBAgQIECAAAECBAgQIECAAAECVRYQ1FR5dPWNAAECBAgQIECAAAECBAgQIECAAAECBAgQaGkBQU1LD4/GESBAgAABAgQIECBAgAABAgQIECBAgAABAlUWENRUeXT1jQABAgQIECBAgAABAgQIECBAgAABAgQIEGhpAUFNSw+PxhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJVFhDUVHl09Y0AAQIECBAgQIAAAQIECBAgQIAAAQIECBBoaQFBTUsPj8YRIECAAAECBAgQIECAAAECBAgQIECAAAECVRYQ1FR5dPWNAAECBAgQIECAAAECBAgQIECAAAECBAgQaGkBQU1LD4/GESBAgAABAgQIECBAgAABAgQIECBAgAABAlUWENRUeXT1jQABAgQIECBAgAABAgQIECBAgAABAgQIEGhpAUFNSw+PxhEgQIAAAQIECBCojsDGjRtj1qxZ8atf/SoWLFgQQ4YMKTr3yiuvxFNPPRVvfvObY999962rwy+++GJs2LAhfvd3fzf69OlT6hzLly+PqVOnxjvf+c6YNGlSqWMUIkCAAAECBAgQIECAwJ4WENTsaVHnI0CAAAECBAgQIEBgtwLdBTUPPvhgEeD88R//cVx00UU1661fvz5mzJgR//qv/xrz588vAp8yL0FNGSVlCBAgQIAAAQIECBBotICgptHCzk+AAAECBAgQIECAQCHQXVDzs5/9LK688so499xz4/TTT69Za/PmzfHFL34xnnvuubj66qtj6NChpc4hqCnFpBABAgQIECBAgAABAg0WENQ0GNjpCRAgQIAAAQIECBD4N4Hugppm+QhqmiWvXgIECBAgQIAAAQIEdhQQ1LgeCBAgQIAAAQIECBDIIiCoycKsEgIECBAgQIAAAQIE2kxAUNNmA6a5BAgQIECAAAECBFpdYNWqVXHHHXfE/fffH+n5MQcccEB84AMfKJ5Bs2DBgvjVr35V/O+QIUOKrjzyyCMxffr0uPDCC6OjoyO+853vxOc///m45JJLYsyYMa/qbtrqbO7cuZG2TPvc5z4Xw4YNK55xs+t504Hbt2+PJ554Im655Zb46U9/Gtu2bYsRI0bEn/7p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AQIECBAgQIAAAQIECBQiIKgphFERAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB+AUFNfjMrCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFCAhqCmFUhAABAgQIECBAgAABAgQIECBAgAABAgQIECCQX0BQk9/MCgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAIQKCmkIYFSFAgAABAgQIECBAgAABAgQIECBAgAABAgQI5BcQ1OQ3s4IAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUIiAoKYQRkUIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkFBDX5zawgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQiIKgphFERAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB+AUFNfjMrCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFCAhqCmFUhAABAgQIECBAgAABAgQIECBAgAABAgQIECCQX0BQk9/MCgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAIQKCmkIYFSFAgAABAgQIECBAgAABAgQIECBAgAABAgQI5BcQ1OQ3s4IAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUIiAoKYQRkUIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkFBDX5zawgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQiIKgphFERAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB+AUFNfjMrCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFCAhqCmFUhAABAgQIECBAgAABAgQIECBAgAABAgQIECCQX0BQk9/MCgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAIQKCmkIYFSFAgAABAgQIECBAgAABAgQIECBAgAABAgQI5BcQ1OQ3s4IAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUIiAoKYQRkUIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkFBDX5zawgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQi8A+UlhEwlx6CtAAAAABJRU5ErkJggg==",
"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