Skip to content

Instantly share code, notes, and snippets.

@cartershanklin
Created October 23, 2023 18:28
Show Gist options
  • Save cartershanklin/83c616b2253df3152f636512ac280264 to your computer and use it in GitHub Desktop.
Save cartershanklin/83c616b2253df3152f636512ac280264 to your computer and use it in GitHub Desktop.
OCI Data Flow Data Science Notebook
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "c336bea5",
"metadata": {},
"source": [
"### OCI Data Science - Useful Tips\n",
"<details>\n",
"<summary><font size=\"2\">Check for Public Internet Access</font></summary>\n",
"\n",
"```python\n",
"import requests\n",
"response = requests.get(\"https://oracle.com\")\n",
"assert response.status_code==200, \"Internet connection failed\"\n",
"```\n",
"</details>\n",
"<details>\n",
"<summary><font size=\"2\">Helpful Documentation </font></summary>\n",
"<ul><li><a href=\"https://docs.cloud.oracle.com/en-us/iaas/data-science/using/data-science.htm\">Data Science Service Documentation</a></li>\n",
"<li><a href=\"https://docs.cloud.oracle.com/iaas/tools/ads-sdk/latest/index.html\">ADS documentation</a></li>\n",
"</ul>\n",
"</details>\n",
"<details>\n",
"<summary><font size=\"2\">Typical Cell Imports and Settings for ADS</font></summary>\n",
"\n",
"```python\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"%matplotlib inline\n",
"\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"import logging\n",
"logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.ERROR)\n",
"\n",
"import ads\n",
"from ads.dataset.factory import DatasetFactory\n",
"from ads.automl.provider import OracleAutoMLProvider\n",
"from ads.automl.driver import AutoML\n",
"from ads.evaluations.evaluator import ADSEvaluator\n",
"from ads.common.data import ADSData\n",
"from ads.explanations.explainer import ADSExplainer\n",
"from ads.explanations.mlx_global_explainer import MLXGlobalExplainer\n",
"from ads.explanations.mlx_local_explainer import MLXLocalExplainer\n",
"from ads.catalog.model import ModelCatalog\n",
"from ads.common.model_artifact import ModelArtifact\n",
"```\n",
"</details>\n",
"<details>\n",
"<summary><font size=\"2\">Useful Environment Variables</font></summary>\n",
"\n",
"```python\n",
"import os\n",
"print(os.environ[\"NB_SESSION_COMPARTMENT_OCID\"])\n",
"print(os.environ[\"PROJECT_OCID\"])\n",
"print(os.environ[\"USER_OCID\"])\n",
"print(os.environ[\"TENANCY_OCID\"])\n",
"print(os.environ[\"NB_REGION\"])\n",
"```\n",
"</details>"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a90691f9",
"metadata": {},
"outputs": [],
"source": [
"## set variable for use in subsequent steps\n",
"userNumber = 'User1'\n",
"groupNumber = \"Grp2\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1744986d",
"metadata": {},
"outputs": [],
"source": [
"import ads\n",
"ads.set_auth(\"resource_principal\") # Supported values: resource_principal, api_key"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "06a5a29f",
"metadata": {},
"outputs": [],
"source": [
"#Non- autoscaling create session command \n",
"import json\n",
"command = {\n",
" \"compartmentId\": \"ocid1.compartment.oc1..aaaaaaaanrqwpoonzcufpkeie6o4cmpa2f5kxj6w2n5z37gmqkb4nb3tj4ya\",\n",
" \"displayName\": \"Data Analysis - \" + groupNumber + userNumber,\n",
" \"language\": \"PYTHON\",\n",
" \"sparkVersion\": \"3.2.1\",\n",
" \"driverShape\": \"VM.Standard.E4.Flex\",\n",
" \"executorShape\": \"VM.Standard.E4.Flex\",\n",
" \"driverShapeConfig\":{\"ocpus\":1,\"memoryInGBs\":16},\n",
" \"executorShapeConfig\":{\"ocpus\":1,\"memoryInGBs\":16},\n",
" \"numExecutors\": 2,\n",
" \"type\": \"SESSION\",\n",
" \"logsBucketUri\": \"oci://dataflow-logs@idhoajssicgj/\",\n",
" \"configuration\": {\"spark.oracle.datasource.enabled\":\"true\", \"spark.driverEnv.userNumber\" : userNumber},\n",
" \"lakeId\": \"ocid1.lake.oc1.iad.amaaaaaaetlj22iaaclt3xzric24mwih2sobnrukvqzyvurmmq4ma4lu2jwa\",\n",
" \"spark.driverEnv.userNumber\" : userNumber,\n",
"}\n",
"command = f'\\'{json.dumps(command)}\\''"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "0113e129",
"metadata": {},
"outputs": [],
"source": [
"load_ext dataflow.magics"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "c1bec50b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Setting up the Cluster..\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "99cc66257a3449dfb84d81dd38cad718",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cluster is ready..\n",
"Starting Spark application..\n"
]
},
{
"data": {
"text/html": [
"<table>\n",
"<tr><th>Session ID</th><th>Kind</th><th>State</th><th>Current session</th></tr><tr><td>ocid1.dataflowapplication.oc1.iad.anuwcljtetlj22iathmkmlwxureuy277x2caop7itkvmew6f42hlgf3gnx6a</td><td>pyspark</td><td>IN_PROGRESS</td><td><a target=\"_blank\" href=\"https://console.us-phoenix-1.oraclecloud.com/data-flow/runs/details/ocid1.dataflowrun.oc1.iad.anuwcljtetlj22iacrxm5recy27os7aufj26zf27rbc7xoyvilqwd2wxyn7a?region=us-ashburn-1\">Dataflow Run</a></td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"SparkSession available as 'spark'.\n",
"SparkContext available as 'sc'.\n"
]
}
],
"source": [
"create_session -l python -c $command"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "802a5cc6",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"User1"
]
}
],
"source": [
"%%spark\n",
"userNumber = spark.conf.get(\"spark.kubernetes.driverEnv.userNumber\")\n",
"print(userNumber)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "552211aa",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"DataFrame[]"
]
}
],
"source": [
"%%spark\n",
"schemaName = \"silverzone\" + userNumber\n",
"sqlContext.sql(\"Use \" + schemaName)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "fc51c287",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"+------------+-------------------+-------------------+----------------+--------------------+----------------------+-----------------------+--------------+--------------------+--------------------+---------------------+-------+----------+----------+-----------+\n",
"|tripduration| start_time| stop_time|start_station_id| start_station_name|start_station_latitude|start_station_longitude|end_station_id| end_station_name|end_station_latitude|end_station_longitude|bike_id| user_type|birth_year|user_gender|\n",
"+------------+-------------------+-------------------+----------------+--------------------+----------------------+-----------------------+--------------+--------------------+--------------------+---------------------+-------+----------+----------+-----------+\n",
"| 695|2013-06-01 00:00:01|2013-06-01 00:11:36| 444| Broadway & W 24 St| 40.7423543| -73.98915076| 434| 9 Ave & W 18 St| 40.74317449| -74.00366443| 19678|Subscriber| 1983| 1|\n",
"| 693|2013-06-01 00:00:08|2013-06-01 00:11:41| 444| Broadway & W 24 St| 40.7423543| -73.98915076| 434| 9 Ave & W 18 St| 40.74317449| -74.00366443| 16649|Subscriber| 1984| 1|\n",
"| 2059|2013-06-01 00:00:44|2013-06-01 00:35:03| 406|Hicks St & Montag...| 40.69512845| -73.99595065| 406|Hicks St & Montag...| 40.69512845| -73.99595065| 19599| Customer| NULL| 0|\n",
"| 123|2013-06-01 00:01:04|2013-06-01 00:03:07| 475| E 15 St & Irving Pl| 40.73524276| -73.98758561| 262| Washington Park| 40.6917823| -73.9737299| 16352|Subscriber| 1960| 1|\n",
"| 1521|2013-06-01 00:01:22|2013-06-01 00:26:43| 2008|Little West St & ...| 40.70569254| -74.01677685| 310| State St & Smith St| 40.68926942| -73.98912867| 15567|Subscriber| 1983| 1|\n",
"| 2028|2013-06-01 00:01:47|2013-06-01 00:35:35| 485| W 37 St & 5 Ave| 40.75038009| -73.98338988| 406|Hicks St & Montag...| 40.69512845| -73.99595065| 18445| Customer| NULL| 0|\n",
"| 2057|2013-06-01 00:02:33|2013-06-01 00:36:50| 285| Broadway & E 14 St| 40.73454567| -73.99074142| 532| S 5 Pl & S 5 St| 40.710451| -73.960876| 15693|Subscriber| 1991| 1|\n",
"| 369|2013-06-01 00:03:29|2013-06-01 00:09:38| 509| 9 Ave & W 22 St| 40.7454973| -74.00197139| 521| 8 Ave & W 31 St N| 40.75096734871598| -73.99444207549095| 16100|Subscriber| 1981| 1|\n",
"| 1829|2013-06-01 00:03:47|2013-06-01 00:34:16| 265|Stanton St & Chry...| 40.72229346| -73.99147535| 436|Hancock St & Bedf...| 40.68216564| -73.95399026| 15234|Subscriber| 1984| 1|\n",
"| 829|2013-06-01 00:04:22|2013-06-01 00:18:11| 404| 9 Ave & W 14 St| 40.7405826| -74.00550867| 303|Mercer St & Sprin...| 40.72362738| -73.99949601| 16400|Subscriber| 1987| 1|\n",
"| 1316|2013-06-01 00:04:28|2013-06-01 00:26:24| 423| W 54 St & 9 Ave| 40.76584941| -73.98690506| 314|Cadman Plaza West...| 40.69383| -73.990539| 19781|Subscriber| 1960| 1|\n",
"| 1456|2013-06-01 00:04:41|2013-06-01 00:28:57| 502| Henry St & Grand St| 40.714215| -73.981346| 532| S 5 Pl & S 5 St| 40.710451| -73.960876| 18886| Customer| NULL| 0|\n",
"| 386|2013-06-01 00:05:13|2013-06-01 00:11:39| 241|DeKalb Ave & S Po...| 40.68981035| -73.97493121| 365|Fulton St & Grand...| 40.68223166| -73.9614583| 19039|Subscriber| 1981| 1|\n",
"| 924|2013-06-01 00:05:21|2013-06-01 00:20:45| 486| Broadway & W 29 St| 40.7462009| -73.98855723| 521| 8 Ave & W 31 St N| 40.75096734871598| -73.99444207549095| 16608| Customer| NULL| 0|\n",
"| 1233|2013-06-01 00:06:44|2013-06-01 00:27:17| 527| E 33 St & 2 Ave| 40.744023| -73.976056| 296|Division St & Bowery| 40.71413089| -73.9970468| 14761|Subscriber| 1987| 1|\n",
"| 512|2013-06-01 00:03:36|2013-06-01 00:12:08| 309| Murray St & West St| 40.7149787| -74.013012| 300|Shevchenko Pl & E...| 40.728145| -73.990214| 19080|Subscriber| 1979| 2|\n",
"| 505|2013-06-01 00:03:45|2013-06-01 00:12:10| 309| Murray St & West St| 40.7149787| -74.013012| 347|Greenwich St & W ...| 40.728846| -74.008591| 16798|Subscriber| 1984| 1|\n",
"| 833|2013-06-01 00:07:29|2013-06-01 00:21:22| 503| E 20 St & Park Ave| 40.73827428| -73.98751968| 503| E 20 St & Park Ave| 40.73827428| -73.98751968| 19072| Customer| NULL| 0|\n",
"| 1818|2013-06-01 00:08:10|2013-06-01 00:38:28| 257|Lispenard St & Br...| 40.71939226| -74.00247214| 500| Broadway & W 51 St| 40.76228826| -73.98336183| 20349| Customer| NULL| 0|\n",
"| 682|2013-06-01 00:08:53|2013-06-01 00:20:15| 486| Broadway & W 29 St| 40.7462009| -73.98855723| 521| 8 Ave & W 31 St N| 40.75096734871598| -73.99444207549095| 20176| Customer| NULL| 0|\n",
"+------------+-------------------+-------------------+----------------+--------------------+----------------------+-----------------------+--------------+--------------------+--------------------+---------------------+-------+----------+----------+-----------+\n",
"only showing top 20 rows"
]
}
],
"source": [
"%%spark\n",
"##Read from the silverZone\n",
"tripsdf = sqlContext.sql(\"select * from trips\")\n",
"tripsdf.createOrReplaceTempView(\"citibike_data\")\n",
"tripsdf.show()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "640df1b7",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"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>user_type</th>\n",
" <th>num_of_trips</th>\n",
" <th>duration</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Subscriber</td>\n",
" <td>674768</td>\n",
" <td>18.36</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Customer</td>\n",
" <td>480638</td>\n",
" <td>29.22</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" user_type num_of_trips duration\n",
"0 Subscriber 674768 18.36\n",
"1 Customer 480638 29.22"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%spark -c sql -o df_user_type\n",
"select user_type,\n",
" count(*) as num_of_trips, \n",
" round(avg(cast(tripduration as int) / 60), 2) as duration\n",
"from citibike_data\n",
"where user_type in ('Subscriber', 'Customer')\n",
"group by\n",
" user_type\n",
"order by num_of_trips desc; "
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "270219f4",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"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>user_type</th>\n",
" <th>birth_year</th>\n",
" <th>num_of_trips</th>\n",
" <th>duration</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Subscriber</td>\n",
" <td>1983-01-01</td>\n",
" <td>32548</td>\n",
" <td>18.48</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Subscriber</td>\n",
" <td>1985-01-01</td>\n",
" <td>30154</td>\n",
" <td>16.96</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Subscriber</td>\n",
" <td>1981-01-01</td>\n",
" <td>29808</td>\n",
" <td>17.52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Subscriber</td>\n",
" <td>1982-01-01</td>\n",
" <td>28854</td>\n",
" <td>18.40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Subscriber</td>\n",
" <td>1980-01-01</td>\n",
" <td>27644</td>\n",
" <td>17.05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>71</th>\n",
" <td>Subscriber</td>\n",
" <td>1920-01-01</td>\n",
" <td>10</td>\n",
" <td>9.43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>72</th>\n",
" <td>Subscriber</td>\n",
" <td>1935-01-01</td>\n",
" <td>10</td>\n",
" <td>16.93</td>\n",
" </tr>\n",
" <tr>\n",
" <th>73</th>\n",
" <td>Subscriber</td>\n",
" <td>1927-01-01</td>\n",
" <td>6</td>\n",
" <td>12.27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>Subscriber</td>\n",
" <td>1930-01-01</td>\n",
" <td>4</td>\n",
" <td>22.89</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>Subscriber</td>\n",
" <td>1929-01-01</td>\n",
" <td>2</td>\n",
" <td>14.55</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>76 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" user_type birth_year num_of_trips duration\n",
"0 Subscriber 1983-01-01 32548 18.48\n",
"1 Subscriber 1985-01-01 30154 16.96\n",
"2 Subscriber 1981-01-01 29808 17.52\n",
"3 Subscriber 1982-01-01 28854 18.40\n",
"4 Subscriber 1980-01-01 27644 17.05\n",
".. ... ... ... ...\n",
"71 Subscriber 1920-01-01 10 9.43\n",
"72 Subscriber 1935-01-01 10 16.93\n",
"73 Subscriber 1927-01-01 6 12.27\n",
"74 Subscriber 1930-01-01 4 22.89\n",
"75 Subscriber 1929-01-01 2 14.55\n",
"\n",
"[76 rows x 4 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%spark -c sql -o df_user_type_birth_year\n",
"select user_type,\n",
" birth_year,\n",
" count(*) as num_of_trips, \n",
" round(avg(cast(tripduration as int) / 60), 2) as duration\n",
"from citibike_data\n",
"where user_type in ('Subscriber', 'Customer')\n",
"and birth_year not like ('NULL')\n",
"group by\n",
" user_type, birth_year\n",
"order by num_of_trips desc; "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7195e93a",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c655dff6339c4926ae945833d3354199",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox(children=(HBox(children=(HTML(value='Type:'), Button(description='Table', layout=Layout(width='70px'), st…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d3b52abdfff640a5b0cba398a6880287",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from autovizwidget.widget.utils import display_dataframe\n",
"display_dataframe(df_user_type)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f3f9c0c4",
"metadata": {},
"outputs": [],
"source": [
"from autovizwidget.widget.autovizwidget import AutoVizWidget\n",
"from autovizwidget.widget.utils import display_dataframe\n",
"from autovizwidget.widget.encoding import Encoding"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "44c85f27",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"linkText": "Export to plot.ly",
"plotlyServerURL": "https://plot.ly",
"showLink": false
},
"data": [
{
"type": "bar",
"x": [
"Customer",
"Subscriber"
],
"y": [
29.22,
18.36
]
}
],
"layout": {
"autosize": true,
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"heatmapgl": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmapgl"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"sequentialminus": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"xaxis": {
"autorange": true,
"range": [
-0.5,
1.5
],
"rangemode": "tozero",
"title": {
"text": "user_type"
},
"type": "category"
},
"yaxis": {
"autorange": true,
"range": [
0,
30.757894736842104
],
"rangemode": "tozero",
"title": {
"text": "duration"
},
"type": "linear"
}
}
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAABfsAAAHCCAYAAABYJxM1AAAAAXNSR0IArs4c6QAAIABJREFUeF7s3XmclWXd+PHvMKwKgormkrmVqVlWLo+tWi5YrrjUo6amuGC5F2KiqYi5lDyGIYZiGmWppeaS0uOWZpamLfKkmabmLuKCIosD/F7nlPwcwBi4rvvM3Pd581c257rmXO/rO6/X8OHMmZZ58+bNC38IECBAgAABAgQIECBAgAABAgQIECBAgACB0gq0iP2lvTtPnAABAgQIECBAgAABAgQIECBAgAABAgQI1AXEfoNAgAABAgQIECBAgAABAgQIECBAgAABAgRKLiD2l/wCPX0CBAgQIECAAAECBAgQIECAAAECBAgQICD2mwECBAgQIECAAAECBAgQIECAAAECBAgQIFByAbG/5Bfo6RMgQIAAAQIECBAgQIAAAQIECBAgQIAAAbHfDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZILiP0lv0BPnwABAgQIECBAgAABAgQIECBAgAABAgQIiP1mgAABAgQIECBAgAABAgQIECBAgAABAgQIlFxA7C/5BXr6BAgQIECAAAECBAgQIECAAAECBAgQIEBA7DcDBAgQIECAAAECBAgQIECAAAECBAgQIECg5AJif8kv0NMnQIAAAQIECBAgQIAAAQIECBAgQIAAAQJivxkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIlFxD7S36Bnj4BAgQIECBAgAABAgQIECBAgAABAgQIEBD7zQABAgQIECBAgAABAgQIECBAgAABAgQIECi5gNhf8gv09AkQIECAAAECBAgQIECAAAECBAgQIECAgNhvBggQIECAAAECBAgQIECAAAECBAgQIECAQMkFxP6SX6CnT4AAAQIECBAgQIAAAQIECBAgQIAAAQIExH4zQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESi4g9pf8Aj19AgQIECBAgAABAgQIECBAgAABAgQIECAg9psBAgQIECBAgAABAgQIECBAgAABAgQIECBQcgGxv+QX6OkTIECAAAECBAgQIECAAAECBAgQIECAAAGx3wwQIECAAAECBAgQIECAAAECBAgQIECAAIGSC4j9Jb9AT58AAQIECBAgQIAAAQIECBAgQIAAAQIECIj9ZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECJRcQOwv+QV6+gQIECBAgAABAgQIECBAgAABAgQIECBAQOw3AwQIECBAgAABAgQIECBAgAABAgQIECBAoOQCYn/JL9DTJ0CAAAECBAgQIECAAAECBAgQIECAAAECYr8ZIECAAAECBAgQIECAAAECBAgQIECAAAECJRcQ+0t+gZ4+AQIECBAgQIAAAQIECBAgQIAAAQIECBAQ+80AAQIECBAgQIAAAQIECBAgQIAAAQIECBAouYDYX/IL9PQJECBAgAABAgQIECBAgAABAgQIECBAgIDYbwYIECBAgAABAgQIECBAgAABAgQIECBAgEDJBcT+kl+gp0+AAAECBAgQIECAAAECBAgQIECAAAECBMR+M0CAAAECBAgQIECAAAECBAgQIECAAAECBEouIPaX/AI9fQIECBAgQIAAAQIECBAgQIAAAQIECBAgIPabAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUHIBsb/kF+jpEyBAgAABAgQIECBAgAABAgQIECBAgAABsd8MECBAgAABAgQIECBAgAABAgQIECBAgACBkguI/SW/QE+fAAECBAgQIECAAAECBAgQIECAAAECBAiI/WaAAAECBAgQIECAAAECBAgQIECAAAECBAiUXEDsL/kFevoECBAgQIAAAQIECBAgQIAAAQIECBAgQEDsNwMECBAgQIAAAQIECBAgQIAAAQIECBAgQKDkAmJ/yS/Q0ydAgAABAgQIECBAgAABAgQIECBAgAABAmK/GSBAgAABAgQIECBAgAABAgQIECBAgAABAiUXEPtLfoGePgECBAgQIECAAAECBAgQIECAAAECBAgQEPvNAAECBAgQIECAAAECBAgQIECAAAECBAgQKLmA2F/yC/T0CRAgQIAAAQIECBAgQIAAAQIECBAgQICA2G8GCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAyQXE/pJfoKdPgAABAgQIECBAgAABAgQIECBAgAABAgTEfjNAgAABAgQIECBAgAABAgQIECBAgAABAgRKLiD2l/wCPX0CBAgQIECAAAECBAgQIECAAAECBAgQICD2mwECBAgQIECAAAECBAgQIECAAAECBAgQIFByAbG/5Bfo6RMgQIAAAQIECBAgQIAAAQIECBAgQIAAAbHfDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZILiP0lv0BPnwABAgQIECBAgAABAgQIECBAgAABAgQIiP1mgAABAgQIECBAgAABAgQIECBAgAABAgQIlFxA7C/5BXr6BAgQIECAAAECBAgQIECAAAECBAgQIEBA7DcDBAgQIECAAAECBAgQIECAAAECBAgQIECg5AJif8kv0NMnQIAAAQIECBAgQIAAAQIECBAgQIAAAQJivxkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIlFxD7S36Bnj4BAgQIECBAgAABAgQIECBAgAABAgQIEBD7zQABAgQIECBAgAABAgQIECBAgAABAgQIECi5gNhf8gv09AkQIECAAAECBAgQIECAAAECBAgQIECAgNhvBggQIECAAAECBAgQIECAAAECBAgQIECAQMkFxP6SX6CnT4AAAQIECBAgQIAAAQIECBAgQIAAAQIExH4zQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESi4g9pf8Aj19AgQIECBAgAABAgQIECBAgAABAgQIECAg9psBAgQIECBAgAABAgQIECBAgAABAgQIECBQcgGxv+QX6OkTIECAAAECBAgQIECAAAECBAgQIECAAAGx3wwQIECAAAECBAgQIECAAAECBAgQIECAAIGSC4j9Jb9AT58AAQIECBAgQIAAAQIECBAgQIAAAQIECIj9ZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECJRcQOwv+QV6+gQIECBAgAABAgQIECBAgAABAgQIECBAQOw3AwQIECBAgAABAgQIECBAgAABAgQIECBAoOQCYn/JL9DTJ0CAAAECBAgQIECAAAECBAgQIECAAAECYr8ZIECAAAECBAgQIECAAAECBAgQIECAAAECJRcQ+0t+gZ4+AQIECBAgQIAAAQIECBAgQIAAAQIECBAQ+80AAQIECBAgQIAAAQIECBAgQIAAAQIECBAouYDYX/IL9PQJECBAgAABAgQIECBAgAABAgQIECBAgIDYbwYIECBAgAABAgQIECBAgAABAgQIECBAgEDJBcT+kl+gp0+AAAECBAgQIECAAAECBAgQIECAAAECBMR+M0CAAAECBAgQIECAAAECBAgQIECAAAECBEouIPaX/AI9fQIECBAgQIAAAQIECBAgQIAAAQIECBAgIPabAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUHIBsb/kF+jpEyBAgAABAgQIECBAgAABAgQIECBAgAABsd8MECBAgAABAgQIECBAgAABAgQIECBAgACBkguI/SW/QE+fAAECBAgQIECAAAECBAgQIECAAAECBAiI/WaAAAECBAgQIECAAAECBAgQIECAAAECBAiUXEDsL/kFevoECBAgQIAAAQIECBAgQIAAAQIECBAgQEDsNwMECBAgQIAAAQIECBAgQIAAAQIECBAgQKDkAmJ/yS/Q0ydAgAABAgQIECBAgAABAgQIECBAgAABAmK/GSBAgAABAgQIECBAgAABAgQIECBAgAABAiUXEPtLfoGePgECBAgQIECAAAECBAgQIECAAAECBAgQEPvNAAECBAgQIECAAAECBAgQIECAAAECBAgQKLmA2F/yC/T0CRAgQIAAAQIECBAgQIAAAQIECBAgQICA2G8GCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAyQXE/pJfoKdPgAABAgQIECBAgAABAgQIECBAgAABAgTEfjNAgAABAgQIECBAgAABAgQIECBAgAABAgRKLiD2l/wCPX0CBAgQIECAAAECBAgQIECAAAECBAgQICD2J87AM1NnJO5gOQECBAgQIECAAAECBAgQIECAAAECBAistmIfCAkCYv+/8V6fPiNeefX1WH5Av1h2md4Lkb42fUa0tbXF8v37tfuY2J8wfZYSIECAAAECBAgQIECAAAECBAgQIEDg3wJif9ooNH3sf2PGzNjn8NPj4UefnC+59+Bt4vgj9o7Wbt2i9vHho8bHrXfdX//4xhuuG2NGHRkDV+hf/2+xP20ArSZAgAABAgQIECBAgAABAgQIECBAgEBNQOxPm4Omj/21V/RfcsVNseugT8aqq6wYv713cgwdPjomnndCfPSD68WEy26IK66/PSaOGRF9+vSKw4aPjnXWXDVGDjtQ7E+bPasJECBAgAABAgQIECBAgAABAgQIECAwX0DsTxuGpo/9C/I9+vgzsfOXT4hfXHJ6vHet1WPPQ06OQVttHgftvUP9oZNuvzeOPWVsTL7tB9HS0uKV/WnzZzUBAgQIECBAgAABAgQIECBAgAABAgTqAmJ/2iCI/f/2e+rZKXHFdbfHLXfeF5/77H/F4QcMrn9k888PjVHDh8R2W25W/++/PvxE/R8A7r5ubCzXb1mxP23+rCZAgAABAgQIECBAgAABAgQIECBA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XQOXX+iZvvWxgcsvt9CPJNf2fOXV12OFAf3mv39+7RetzZg1e5F7LSnDW5+7f99lF/oR7yXdy+MJECBAgAABAgS6nkDtJ1FffvX1ePPNN2PgigOitVu3hZ5k7cUly/TpvcjvB2vrX3jx5UV+jztz1uyY9tob7X5B71ub176PnfrStBjQv2/9HweW5E/t7TBra1d91wqLfMue2vfDb7bNafc98pLs77EECBAg0JwCYn9z3rtTEyBAgAABAgQIECBAgAABAgQIECBAgECFBMT+Cl2moxAgQIAAAQIECBAgQIAAAQIECBAgQIBAcwqI/c15705NgAABAgQIECBAgAABAgQIECBAgAABAhUSEPsrdJmOQoAAAQIECBAgQIAAAQIECBAgQIAAAQL/r737DraiPOMA/F5ApAjiVQS7SGQQAYkYRQKTIPaGxHLRGBtFbFQxxYJgKIoFFJBYwJFYsEBEDE5igeiADUWiSNQYdSyxGxFUamY3OWcggsqOmuWcZ/+6c85+u+/3vPev39n9vvIUEPaXZ9/NmgABAgQIECBAgAABAgQIECBAgAABAgRKSEDYX0LNNBUCBAgQIECAAAECBAgQIECAAAECBAgQKE8BYX959t2sCRAgQIAAAQIECBAgQIAAAQIECBAgQKCEBIT9JdRMUyFAgAABAgQIECBAgAABAgQIECBAgACB8hQQ9pdn382aAAECBAgQIECAAAECBAgQIECAAAECBEpIQNhfQs00FQIECBAgQIAAAQIECBAgQIAAAQIECBAoTwFhf3n23awJECBAgAABAgQIECBAgAABAgQIECBAoIQEhP0l1ExTIUCAAAECBAgQIECAAAECBAgQIECAAIHyFBD2l2ffzZoAAQIECBAgQIAAAQIECBAgQIAAAQIESkhA2F9CzTQVAgQIECBAgAABAgQIECBAgAABAgQIEChPAWF/efbdrAkQIECAAAECBAgQIECAAAECBAgQIECghASE/SXUTFMhQIAAAQIECBAgQIAAAQIECBAgQIAAgfIUEPaXZ9/NmgABAgQIECBAoMwFvli2PPY8sGcM/3XP6HLQj8tcw/QJECBAgAABAgQIbPwCwv6Nv4dmQIAAAQIECBAgQGCDBT7/Ylm0PahXDPtVjzjq4A4bPN4AAgQIECBAgAABAgTyJSDsz1c/VEOAAAECBAgQIFBCAo89vTDG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",
"text/html": [
"<div> <div id=\"24643f44-157b-411d-87fd-c9d8c72ef430\" 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(\"24643f44-157b-411d-87fd-c9d8c72ef430\")) { Plotly.newPlot( \"24643f44-157b-411d-87fd-c9d8c72ef430\", [{\"x\":[\"Customer\",\"Subscriber\"],\"y\":[29.22,18.36],\"type\":\"bar\"}], {\"template\":{\"data\":{\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"choropleth\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"choropleth\"}],\"contourcarpet\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"contourcarpet\"}],\"contour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"contour\"}],\"heatmapgl\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmapgl\"}],\"heatmap\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmap\"}],\"histogram2dcontour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2dcontour\"}],\"histogram2d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2d\"}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"mesh3d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"mesh3d\"}],\"parcoords\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"parcoords\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}],\"scatter3d\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter3d\"}],\"scattercarpet\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattercarpet\"}],\"scattergeo\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergeo\"}],\"scattergl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergl\"}],\"scattermapbox\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattermapbox\"}],\"scatterpolargl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolargl\"}],\"scatterpolar\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolar\"}],\"scatter\":[{\"fillpattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2},\"type\":\"scatter\"}],\"scatterternary\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterternary\"}],\"surface\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"surface\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}]},\"layout\":{\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"autotypenumbers\":\"strict\",\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"geo\":{\"bgcolor\":\"white\",\"lakecolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"showlakes\":true,\"showland\":true,\"subunitcolor\":\"white\"},\"hoverlabel\":{\"align\":\"left\"},\"hovermode\":\"closest\",\"mapbox\":{\"style\":\"light\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"bgcolor\":\"#E5ECF6\",\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"ternary\":{\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"bgcolor\":\"#E5ECF6\",\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"title\":{\"x\":0.05},\"xaxis\":{\"automargin\":true,\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"zerolinewidth\":2},\"yaxis\":{\"automargin\":true,\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"zerolinewidth\":2}}},\"xaxis\":{\"rangemode\":\"tozero\",\"title\":{\"text\":\"user_type\"},\"type\":\"-\"},\"yaxis\":{\"rangemode\":\"tozero\",\"title\":{\"text\":\"duration\"},\"type\":\"-\"}}, {\"responsive\": true} ).then(function(){\n",
" \n",
"var gd = document.getElementById('24643f44-157b-411d-87fd-c9d8c72ef430');\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"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5ed0f2e2668f4d65ac01390fcc1da390",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"AutoVizWidget()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"encoding1 = Encoding(chart_type=Encoding.chart_type_bar, x='user_type', y='duration', y_aggregation=Encoding.y_agg_avg)\n",
"print(\"Trip duration: By user type\")\n",
"AutoVizWidget(df_user_type, encoding1)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "512001c9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trip duration: By birth year\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e19b3148200141b29e76a90903a2c1f8",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox(children=(HBox(children=(HTML(value='Type:'), Button(description='Table', layout=Layout(width='70px'), st…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8f5a9f9109b045a4808b096cfa00a271",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d83919546a204272bf498370540e1c54",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"AutoVizWidget()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"encoding2 = Encoding(chart_type=Encoding.chart_type_bar, x='birth_year', y='duration', y_aggregation=Encoding.y_agg_avg)\n",
"print(\"Trip duration: By birth year\")\n",
"AutoVizWidget(df_user_type_birth_year, encoding2)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "d392db28",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Num of trips: By birth year\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "81342f90230c4879927a583405b0770d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox(children=(HBox(children=(HTML(value='Type:'), Button(description='Table', layout=Layout(width='70px'), st…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a88029c89ccd4fa7aa5757c9bbad161a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d74756238de54f5ba6ce17e27cfc1968",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"AutoVizWidget()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"encoding3 = Encoding(chart_type=Encoding.chart_type_bar, x='birth_year', y='num_of_trips', y_aggregation=Encoding.y_agg_avg)\n",
"print(\"Num of trips: By birth year\")\n",
"AutoVizWidget(df_user_type_birth_year, encoding3)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "f8696810",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ac78b981186b49a2937dc5d607bb2872",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatProgress(value=0.0, bar_style='info', description='Progress:', layout=Layout(height='25px', width='50%'),…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Session has been stopped successfully.\n"
]
}
],
"source": [
"stop_session"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3e5d8358",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:pyspark32_p38_cpu_v2]",
"language": "python",
"name": "conda-env-pyspark32_p38_cpu_v2-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment