Created
October 31, 2020 21:30
-
-
Save adamnovotnycom/0d980a908a35732e9e55e8b1e8f27985 to your computer and use it in GitHub Desktop.
google_100_carbon_free.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "google_100_carbon_free.ipynb", | |
"provenance": [], | |
"collapsed_sections": [], | |
"toc_visible": true, | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/excitedAtom/0d980a908a35732e9e55e8b1e8f27985/google_100_carbon_free.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "4f3CKqFUqL2-" | |
}, | |
"source": [ | |
"# Google 24/7 by 2030: Realizing a Carbon-free Future\n", | |
"Paper: https://www.gstatic.com/gumdrop/sustainability/247-carbon-free-energy.pdf" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "hbeJeHAoloR8", | |
"outputId": "7f29bc63-27cc-4e44-b4f7-27b72147b0ee", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"from google.colab import drive\n", | |
"drive.mount('/content/drive')" | |
], | |
"execution_count": 1, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "qyW1JliPleN8", | |
"outputId": "dc0852ba-db5a-42d9-94f3-79f040545fe5", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"import json\n", | |
"import pandas as pd\n", | |
"import plotly.graph_objects as go\n", | |
"import requests\n", | |
"import sys\n", | |
"import time\n", | |
"print(sys.version)" | |
], | |
"execution_count": 2, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"3.6.9 (default, Oct 8 2020, 12:12:24) \n", | |
"[GCC 8.4.0]\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Mc3jP-EPKGjY" | |
}, | |
"source": [ | |
"# import mysecrets.py which includes username, passwords, etc\n", | |
"sys.path.append(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free\")\n", | |
"import mysecrets" | |
], | |
"execution_count": 3, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "nGFsHX0PSHZ0" | |
}, | |
"source": [ | |
"# source https://github.com/WattTime/apiv2-example/blob/master/query_apiv2.py\n", | |
"def register(username, password, email, org):\n", | |
" url = 'https://api2.watttime.org/register'\n", | |
" params = {'username': username,\n", | |
" 'password': password,\n", | |
" 'email': email,\n", | |
" 'org': org}\n", | |
" rsp = requests.post(url, json=params)\n", | |
" print(rsp.text)" | |
], | |
"execution_count": 4, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "E6GfVp0BSNMJ" | |
}, | |
"source": [ | |
"# ### Create WattTime account -> RUN ONCE\n", | |
"# register(mysecrets.user, mysecrets.pwd, mysecrets.email, mysecrets.org)" | |
], | |
"execution_count": 5, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "AmsZpdB1Q1y0" | |
}, | |
"source": [ | |
"# source https://github.com/WattTime/apiv2-example/blob/master/query_apiv2.py\n", | |
"from requests.auth import HTTPBasicAuth\n", | |
"def login(username, password):\n", | |
" url = 'https://api2.watttime.org/login'\n", | |
" try:\n", | |
" rsp = requests.get(url, auth=HTTPBasicAuth(username, password))\n", | |
" except BaseException as e:\n", | |
" print('There was an error making your login request: {}'.format(e))\n", | |
" return None\n", | |
"\n", | |
" try:\n", | |
" token = rsp.json()['token']\n", | |
" except BaseException:\n", | |
" print('There was an error logging in. The message returned from the '\n", | |
" 'api is {}'.format(rsp.text))\n", | |
" return None\n", | |
"\n", | |
" return token" | |
], | |
"execution_count": 6, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "ndKOJ5UmSa0Z" | |
}, | |
"source": [ | |
"# source https://github.com/WattTime/apiv2-example/blob/master/query_apiv2.py\n", | |
"def real_time(token: str, latitude: float, longitude: float):\n", | |
" \"\"\"\n", | |
" returns:\n", | |
" percent: An integer between 0 (minimum MOER in the last two weeks \n", | |
" i.e. clean) and 100 (maximum MOER in the last two weeks i.e. dirty) \n", | |
" representing the relative realtime marginal emissions intensity.\n", | |
" \"\"\"\n", | |
" url = 'https://api2.watttime.org/index'\n", | |
" headers = {'Authorization': 'Bearer {}'.format(token)}\n", | |
" params = {\n", | |
" \"latitude\": latitude, \n", | |
" \"longitude\": longitude\n", | |
" }\n", | |
" rsp = requests.get(url, headers=headers, params=params)\n", | |
" return rsp.json()" | |
], | |
"execution_count": 7, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "wQiYQGk33Pet" | |
}, | |
"source": [ | |
"#### Google data centers\n", | |
"https://www.google.com/about/datacenters/locations/" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_BZ34pxa3R3m" | |
}, | |
"source": [ | |
"google_datacenters = {\n", | |
" \"Dalles_OR\": {\n", | |
" \"latitude\": 45.6280001,\n", | |
" \"longitude\": -121.2085228\n", | |
" },\n", | |
" \"Midlothian_TX\": {\n", | |
" \"latitude\": 32.4678977,\n", | |
" \"longitude\": -97.0643545\n", | |
" },\n", | |
" \"Douglas_County_GA\": {\n", | |
" \"latitude\": 33.6897026,\n", | |
" \"longitude\": -84.8850217\n", | |
" },\n", | |
" \"Berkeley_County_SC\": {\n", | |
" \"latitude\": 33.1638858,\n", | |
" \"longitude\": -80.1850489\n", | |
" },\n", | |
" \"Loudoun_County_VA\": {\n", | |
" \"latitude\": 39.0851461,\n", | |
" \"longitude\": -77.9250639\n", | |
" },\n", | |
" \"New_Albany_OH\": {\n", | |
" \"latitude\": 40.0849199,\n", | |
" \"longitude\": -82.8173774\n", | |
" },\n", | |
" \"Mayes_County_OK\": {\n", | |
" \"latitude\": 36.2924474,\n", | |
" \"longitude\": -95.3632184\n", | |
" }\n", | |
"}" | |
], | |
"execution_count": 8, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Jn8q_UZ39tr0" | |
}, | |
"source": [ | |
"# ### create empty file to store real time data -> RUN ONCE\n", | |
"# with open(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free/datacenter.json\", \"w\") as f:\n", | |
"# json.dump([], f)" | |
], | |
"execution_count": 9, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "TG9ykfhuSbRm", | |
"outputId": "fcb85690-ed77-4cb9-ce78-d29e568f6674", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
} | |
}, | |
"source": [ | |
"for _ in range(1):\n", | |
" token = login(mysecrets.user, mysecrets.pwd)\n", | |
" for dc_name in google_datacenters:\n", | |
" r_json = real_time(\n", | |
" token=token,\n", | |
" latitude=google_datacenters[dc_name][\"latitude\"], \n", | |
" longitude=google_datacenters[dc_name][\"longitude\"]\n", | |
" )\n", | |
" r_json[\"location\"] = dc_name\n", | |
" with open(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free/datacenter.json\", \"r\") as f:\n", | |
" old_data = json.load(f)\n", | |
" with open(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free/datacenter.json\", \"w\") as f:\n", | |
" new_data = old_data + [r_json]\n", | |
" json.dump(new_data, f)\n", | |
" # print(f\"Appended location {dc_name} @ {r_json['point_time']}\")\n", | |
" print(pd.DataFrame(new_data).tail(len(google_datacenters)))\n", | |
" print(f\"Sleeping... new dataset size {len(new_data)}\")\n", | |
" # time.sleep(600)" | |
], | |
"execution_count": 10, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
" freq ba percent point_time location\n", | |
"336 300 BPA 78 2020-10-31T21:25:00Z Dalles_OR\n", | |
"337 300 ERCOT_NORTH 62 2020-10-31T21:25:00Z Midlothian_TX\n", | |
"338 300 SOCO 13 2020-10-31T21:25:00Z Douglas_County_GA\n", | |
"339 300 SCEG 26 2020-10-31T21:25:00Z Berkeley_County_SC\n", | |
"340 300 PJM_ATLANTIC 22 2020-10-31T21:20:00Z Loudoun_County_VA\n", | |
"341 300 PJM_WEST 43 2020-10-31T21:20:00Z New_Albany_OH\n", | |
"342 300 SPP_RZ4 85 2020-10-31T21:30:00Z Mayes_County_OK\n", | |
"Sleeping... new dataset size 343\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "5OgCl_RIxV0U" | |
}, | |
"source": [ | |
"## Analysis" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "fxLryPoNxXuM", | |
"outputId": "da3db79c-d2b8-4be8-8624-dc46657caad3", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 204 | |
} | |
}, | |
"source": [ | |
"with open(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free/datacenter.json\", \"r\") as f:\n", | |
" file_data = json.load(f)\n", | |
"df = pd.DataFrame(file_data)\n", | |
"df.head(5)" | |
], | |
"execution_count": 11, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"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>freq</th>\n", | |
" <th>ba</th>\n", | |
" <th>percent</th>\n", | |
" <th>point_time</th>\n", | |
" <th>location</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>300</td>\n", | |
" <td>BPA</td>\n", | |
" <td>70</td>\n", | |
" <td>2020-10-30T19:50:00Z</td>\n", | |
" <td>Dalles_OR</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>300</td>\n", | |
" <td>ERCOT_NORTH</td>\n", | |
" <td>51</td>\n", | |
" <td>2020-10-30T19:50:00Z</td>\n", | |
" <td>Midlothian_TX</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>300</td>\n", | |
" <td>SOCO</td>\n", | |
" <td>31</td>\n", | |
" <td>2020-10-30T19:50:00Z</td>\n", | |
" <td>Douglas_County_GA</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>300</td>\n", | |
" <td>SCEG</td>\n", | |
" <td>6</td>\n", | |
" <td>2020-10-30T19:50:00Z</td>\n", | |
" <td>Berkeley_County_SC</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>300</td>\n", | |
" <td>PJM_ATLANTIC</td>\n", | |
" <td>22</td>\n", | |
" <td>2020-10-30T19:45:00Z</td>\n", | |
" <td>Loudoun_County_VA</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" freq ba percent point_time location\n", | |
"0 300 BPA 70 2020-10-30T19:50:00Z Dalles_OR\n", | |
"1 300 ERCOT_NORTH 51 2020-10-30T19:50:00Z Midlothian_TX\n", | |
"2 300 SOCO 31 2020-10-30T19:50:00Z Douglas_County_GA\n", | |
"3 300 SCEG 6 2020-10-30T19:50:00Z Berkeley_County_SC\n", | |
"4 300 PJM_ATLANTIC 22 2020-10-30T19:45:00Z Loudoun_County_VA" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 11 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "xP6U_X5qWCQ9", | |
"outputId": "1c6b30dc-96d5-4da9-fe56-0e9eb227adf6", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 306 | |
} | |
}, | |
"source": [ | |
"df[\"point_time\"] = df[\"point_time\"].apply(\n", | |
" lambda x: pd.Timestamp(x)\n", | |
")\n", | |
"print(df.dtypes)\n", | |
"df = df.sort_values(by=\"point_time\", ascending=True)\n", | |
"df.head(5)" | |
], | |
"execution_count": 12, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"freq object\n", | |
"ba object\n", | |
"percent object\n", | |
"point_time datetime64[ns, UTC]\n", | |
"location object\n", | |
"dtype: object\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "execute_result", | |
"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>freq</th>\n", | |
" <th>ba</th>\n", | |
" <th>percent</th>\n", | |
" <th>point_time</th>\n", | |
" <th>location</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>300</td>\n", | |
" <td>PJM_ATLANTIC</td>\n", | |
" <td>22</td>\n", | |
" <td>2020-10-30 19:45:00+00:00</td>\n", | |
" <td>Loudoun_County_VA</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>300</td>\n", | |
" <td>PJM_WEST</td>\n", | |
" <td>7</td>\n", | |
" <td>2020-10-30 19:45:00+00:00</td>\n", | |
" <td>New_Albany_OH</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>300</td>\n", | |
" <td>BPA</td>\n", | |
" <td>70</td>\n", | |
" <td>2020-10-30 19:50:00+00:00</td>\n", | |
" <td>Dalles_OR</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>300</td>\n", | |
" <td>ERCOT_NORTH</td>\n", | |
" <td>51</td>\n", | |
" <td>2020-10-30 19:50:00+00:00</td>\n", | |
" <td>Midlothian_TX</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>300</td>\n", | |
" <td>SOCO</td>\n", | |
" <td>31</td>\n", | |
" <td>2020-10-30 19:50:00+00:00</td>\n", | |
" <td>Douglas_County_GA</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" freq ba percent point_time location\n", | |
"4 300 PJM_ATLANTIC 22 2020-10-30 19:45:00+00:00 Loudoun_County_VA\n", | |
"5 300 PJM_WEST 7 2020-10-30 19:45:00+00:00 New_Albany_OH\n", | |
"0 300 BPA 70 2020-10-30 19:50:00+00:00 Dalles_OR\n", | |
"1 300 ERCOT_NORTH 51 2020-10-30 19:50:00+00:00 Midlothian_TX\n", | |
"2 300 SOCO 31 2020-10-30 19:50:00+00:00 Douglas_County_GA" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 12 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "JNrGS8sVEviY", | |
"outputId": "1e4327d7-19f5-464b-d829-8f37e50d7898", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 323 | |
} | |
}, | |
"source": [ | |
"df = df.drop_duplicates(subset=[\"location\", \"point_time\"], keep=\"first\")\n", | |
"df.describe()" | |
], | |
"execution_count": 13, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:2: FutureWarning:\n", | |
"\n", | |
"Treating datetime data as categorical rather than numeric in `.describe` is deprecated and will be removed in a future version of pandas. Specify `datetime_is_numeric=True` to silence this warning and adopt the future behavior now.\n", | |
"\n" | |
], | |
"name": "stderr" | |
}, | |
{ | |
"output_type": "execute_result", | |
"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>freq</th>\n", | |
" <th>ba</th>\n", | |
" <th>percent</th>\n", | |
" <th>point_time</th>\n", | |
" <th>location</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>293</td>\n", | |
" <td>293</td>\n", | |
" <td>293</td>\n", | |
" <td>293</td>\n", | |
" <td>293</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>unique</th>\n", | |
" <td>1</td>\n", | |
" <td>7</td>\n", | |
" <td>60</td>\n", | |
" <td>89</td>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>top</th>\n", | |
" <td>300</td>\n", | |
" <td>BPA</td>\n", | |
" <td>0</td>\n", | |
" <td>2020-10-30 21:15:00+00:00</td>\n", | |
" <td>Dalles_OR</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>freq</th>\n", | |
" <td>293</td>\n", | |
" <td>43</td>\n", | |
" <td>42</td>\n", | |
" <td>6</td>\n", | |
" <td>43</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>first</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2020-10-30 19:45:00+00:00</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>last</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2020-10-31 21:30:00+00:00</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" freq ba percent point_time location\n", | |
"count 293 293 293 293 293\n", | |
"unique 1 7 60 89 7\n", | |
"top 300 BPA 0 2020-10-30 21:15:00+00:00 Dalles_OR\n", | |
"freq 293 43 42 6 43\n", | |
"first NaN NaN NaN 2020-10-30 19:45:00+00:00 NaN\n", | |
"last NaN NaN NaN 2020-10-31 21:30:00+00:00 NaN" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 13 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "sfk-PGWGFipW", | |
"outputId": "4596cd93-1b62-416c-f9b9-593df31fc5b4", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 542 | |
} | |
}, | |
"source": [ | |
"fig = go.Figure()\n", | |
"for dc_name in list(google_datacenters.keys()):\n", | |
" fig.add_trace(go.Scatter(\n", | |
" x=df.loc[df[\"location\"]==dc_name, \"point_time\"],\n", | |
" y=df.loc[df[\"location\"]==dc_name, \"percent\"],\n", | |
" name=dc_name,\n", | |
" line_shape=\"vh\"\n", | |
" ))\n", | |
"fig.update_layout(\n", | |
" title=\"Marginal Operating Emissions Rates (MOER) of Select Google Data Centers\",\n", | |
" xaxis_title=\"Day and Time\",\n", | |
" yaxis_title=\"MOER (0 = clean, 100 = max emissions)\"\n", | |
")\n", | |
"fig.show()" | |
], | |
"execution_count": 14, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"<html>\n", | |
"<head><meta charset=\"utf-8\" /></head>\n", | |
"<body>\n", | |
" <div>\n", | |
" <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script>\n", | |
" <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n", | |
" <script src=\"https://cdn.plot.ly/plotly-latest.min.js\"></script> \n", | |
" <div id=\"a2b923c3-c485-47b8-b975-37250c5513c7\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div>\n", | |
" <script type=\"text/javascript\">\n", | |
" \n", | |
" window.PLOTLYENV=window.PLOTLYENV || {};\n", | |
" \n", | |
" if (document.getElementById(\"a2b923c3-c485-47b8-b975-37250c5513c7\")) {\n", | |
" Plotly.newPlot(\n", | |
" 'a2b923c3-c485-47b8-b975-37250c5513c7',\n", | |
" [{\"line\": {\"shape\": \"vh\"}, \"name\": \"Dalles_OR\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:50:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:20:00+00:00\", \"2020-10-31T01:30:00+00:00\", \"2020-10-31T01:35:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:45:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:15:00+00:00\", \"2020-10-31T12:55:00+00:00\", \"2020-10-31T13:05:00+00:00\", \"2020-10-31T13:15:00+00:00\", \"2020-10-31T13:25:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:05:00+00:00\", \"2020-10-31T16:55:00+00:00\", \"2020-10-31T17:05:00+00:00\", \"2020-10-31T17:15:00+00:00\", \"2020-10-31T17:25:00+00:00\", \"2020-10-31T17:35:00+00:00\", \"2020-10-31T17:45:00+00:00\", \"2020-10-31T17:55:00+00:00\", \"2020-10-31T18:05:00+00:00\", \"2020-10-31T18:15:00+00:00\", \"2020-10-31T18:25:00+00:00\", \"2020-10-31T18:35:00+00:00\", \"2020-10-31T18:45:00+00:00\", \"2020-10-31T18:55:00+00:00\", \"2020-10-31T19:15:00+00:00\", \"2020-10-31T19:30:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:50:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:40:00+00:00\", \"2020-10-31T20:50:00+00:00\", \"2020-10-31T21:00:00+00:00\", \"2020-10-31T21:20:00+00:00\", \"2020-10-31T21:25:00+00:00\"], \"y\": [\"70\", \"69\", \"60\", \"56\", \"56\", \"56\", \"55\", \"65\", \"62\", \"61\", \"56\", \"56\", \"44\", \"37\", \"47\", \"54\", \"56\", \"65\", \"70\", \"67\", \"64\", \"61\", \"58\", \"58\", \"60\", \"61\", \"61\", \"61\", \"61\", \"61\", \"61\", \"62\", \"61\", \"62\", \"62\", \"63\", \"78\", \"77\", \"75\", \"77\", \"77\", \"78\", \"78\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Midlothian_TX\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:50:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:20:00+00:00\", \"2020-10-31T01:35:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:45:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:15:00+00:00\", \"2020-10-31T12:55:00+00:00\", \"2020-10-31T13:05:00+00:00\", \"2020-10-31T13:15:00+00:00\", \"2020-10-31T13:25:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:05:00+00:00\", \"2020-10-31T16:55:00+00:00\", \"2020-10-31T17:05:00+00:00\", \"2020-10-31T17:15:00+00:00\", \"2020-10-31T17:25:00+00:00\", \"2020-10-31T17:35:00+00:00\", \"2020-10-31T17:45:00+00:00\", \"2020-10-31T17:55:00+00:00\", \"2020-10-31T18:05:00+00:00\", \"2020-10-31T18:15:00+00:00\", \"2020-10-31T18:25:00+00:00\", \"2020-10-31T18:35:00+00:00\", \"2020-10-31T18:45:00+00:00\", \"2020-10-31T18:55:00+00:00\", \"2020-10-31T19:20:00+00:00\", \"2020-10-31T19:30:00+00:00\", \"2020-10-31T19:40:00+00:00\", \"2020-10-31T19:50:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:40:00+00:00\", \"2020-10-31T20:50:00+00:00\", \"2020-10-31T21:00:00+00:00\", \"2020-10-31T21:25:00+00:00\"], \"y\": [\"51\", \"62\", \"70\", \"65\", \"62\", \"62\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"77\", \"45\", \"77\", \"77\", \"45\", \"45\", \"45\", \"45\", \"77\", \"77\", \"77\", \"77\", \"77\", \"77\", \"77\", \"77\", \"77\", \"87\", \"59\", \"25\", \"49\", \"48\", \"49\", \"48\", \"62\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Douglas_County_GA\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:50:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:20:00+00:00\", \"2020-10-31T01:35:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:45:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:15:00+00:00\", \"2020-10-31T12:55:00+00:00\", \"2020-10-31T13:05:00+00:00\", \"2020-10-31T13:15:00+00:00\", \"2020-10-31T13:25:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:05:00+00:00\", \"2020-10-31T16:55:00+00:00\", \"2020-10-31T17:05:00+00:00\", \"2020-10-31T17:15:00+00:00\", \"2020-10-31T17:25:00+00:00\", \"2020-10-31T17:35:00+00:00\", \"2020-10-31T17:45:00+00:00\", \"2020-10-31T17:55:00+00:00\", \"2020-10-31T18:05:00+00:00\", \"2020-10-31T18:15:00+00:00\", \"2020-10-31T18:25:00+00:00\", \"2020-10-31T18:35:00+00:00\", \"2020-10-31T18:45:00+00:00\", \"2020-10-31T18:55:00+00:00\", \"2020-10-31T19:15:00+00:00\", \"2020-10-31T19:30:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:50:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:40:00+00:00\", \"2020-10-31T20:50:00+00:00\", \"2020-10-31T21:00:00+00:00\", \"2020-10-31T21:20:00+00:00\", \"2020-10-31T21:25:00+00:00\"], \"y\": [\"31\", \"34\", \"5\", \"31\", \"31\", \"31\", \"23\", \"23\", \"23\", \"23\", \"21\", \"21\", \"21\", \"11\", \"11\", \"11\", \"23\", \"10\", \"13\", \"13\", \"13\", \"13\", \"13\", \"13\", \"13\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"13\", \"13\", \"13\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Berkeley_County_SC\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:50:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:20:00+00:00\", \"2020-10-31T01:35:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:35:00+00:00\", \"2020-10-31T11:40:00+00:00\", \"2020-10-31T11:55:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:15:00+00:00\", \"2020-10-31T12:55:00+00:00\", \"2020-10-31T13:05:00+00:00\", \"2020-10-31T13:15:00+00:00\", \"2020-10-31T13:25:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:05:00+00:00\", \"2020-10-31T16:55:00+00:00\", \"2020-10-31T17:05:00+00:00\", \"2020-10-31T17:15:00+00:00\", \"2020-10-31T17:25:00+00:00\", \"2020-10-31T17:35:00+00:00\", \"2020-10-31T17:45:00+00:00\", \"2020-10-31T17:55:00+00:00\", \"2020-10-31T18:05:00+00:00\", \"2020-10-31T18:15:00+00:00\", \"2020-10-31T18:25:00+00:00\", \"2020-10-31T18:35:00+00:00\", \"2020-10-31T18:45:00+00:00\", \"2020-10-31T18:55:00+00:00\", \"2020-10-31T19:20:00+00:00\", \"2020-10-31T19:30:00+00:00\", \"2020-10-31T19:40:00+00:00\", \"2020-10-31T19:50:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:40:00+00:00\", \"2020-10-31T20:50:00+00:00\", \"2020-10-31T21:00:00+00:00\", \"2020-10-31T21:25:00+00:00\"], \"y\": [\"6\", \"4\", \"8\", \"12\", \"12\", \"12\", \"51\", \"51\", \"51\", \"52\", \"52\", \"53\", \"52\", \"54\", \"54\", \"54\", \"42\", \"43\", \"38\", \"23\", \"24\", \"24\", \"24\", \"24\", \"24\", \"25\", \"25\", \"25\", \"25\", \"25\", \"25\", \"27\", \"27\", \"27\", \"27\", \"27\", \"27\", \"27\", \"27\", \"27\", \"26\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Loudoun_County_VA\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:45:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:05:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:15:00+00:00\", \"2020-10-31T01:30:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:40:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T11:55:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:10:00+00:00\", \"2020-10-31T12:50:00+00:00\", \"2020-10-31T13:00:00+00:00\", \"2020-10-31T13:10:00+00:00\", \"2020-10-31T13:20:00+00:00\", \"2020-10-31T14:50:00+00:00\", \"2020-10-31T15:00:00+00:00\", \"2020-10-31T16:50:00+00:00\", \"2020-10-31T17:00:00+00:00\", \"2020-10-31T17:10:00+00:00\", \"2020-10-31T17:20:00+00:00\", \"2020-10-31T17:30:00+00:00\", \"2020-10-31T17:40:00+00:00\", \"2020-10-31T17:50:00+00:00\", \"2020-10-31T18:00:00+00:00\", \"2020-10-31T18:10:00+00:00\", \"2020-10-31T18:20:00+00:00\", \"2020-10-31T18:30:00+00:00\", \"2020-10-31T18:40:00+00:00\", \"2020-10-31T18:50:00+00:00\", \"2020-10-31T19:15:00+00:00\", \"2020-10-31T19:25:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:45:00+00:00\", \"2020-10-31T20:20:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:35:00+00:00\", \"2020-10-31T20:45:00+00:00\", \"2020-10-31T20:55:00+00:00\", \"2020-10-31T21:20:00+00:00\"], \"y\": [\"22\", \"22\", \"14\", \"12\", \"12\", \"12\", \"12\", \"14\", \"14\", \"14\", \"25\", \"14\", \"14\", \"14\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"New_Albany_OH\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:45:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:05:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:15:00+00:00\", \"2020-10-31T01:30:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:40:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T11:55:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:10:00+00:00\", \"2020-10-31T12:50:00+00:00\", \"2020-10-31T13:00:00+00:00\", \"2020-10-31T13:10:00+00:00\", \"2020-10-31T13:20:00+00:00\", \"2020-10-31T14:50:00+00:00\", \"2020-10-31T15:00:00+00:00\", \"2020-10-31T16:50:00+00:00\", \"2020-10-31T17:00:00+00:00\", \"2020-10-31T17:10:00+00:00\", \"2020-10-31T17:20:00+00:00\", \"2020-10-31T17:30:00+00:00\", \"2020-10-31T17:40:00+00:00\", \"2020-10-31T17:50:00+00:00\", \"2020-10-31T18:00:00+00:00\", \"2020-10-31T18:10:00+00:00\", \"2020-10-31T18:20:00+00:00\", \"2020-10-31T18:30:00+00:00\", \"2020-10-31T18:40:00+00:00\", \"2020-10-31T18:50:00+00:00\", \"2020-10-31T19:15:00+00:00\", \"2020-10-31T19:25:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:45:00+00:00\", \"2020-10-31T20:20:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:35:00+00:00\", \"2020-10-31T20:45:00+00:00\", \"2020-10-31T20:55:00+00:00\", \"2020-10-31T21:20:00+00:00\"], \"y\": [\"7\", \"7\", \"29\", \"80\", \"80\", \"73\", \"73\", \"86\", \"70\", \"62\", \"70\", \"62\", \"62\", \"86\", \"22\", \"7\", \"7\", \"22\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Mayes_County_OK\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:55:00+00:00\", \"2020-10-30T21:20:00+00:00\", \"2020-10-31T00:05:00+00:00\", \"2020-10-31T01:15:00+00:00\", \"2020-10-31T01:25:00+00:00\", \"2020-10-31T01:40:00+00:00\", \"2020-10-31T11:35:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T11:55:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:10:00+00:00\", \"2020-10-31T12:20:00+00:00\", \"2020-10-31T13:00:00+00:00\", \"2020-10-31T13:10:00+00:00\", \"2020-10-31T13:20:00+00:00\", \"2020-10-31T13:30:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:10:00+00:00\", \"2020-10-31T17:00:00+00:00\", \"2020-10-31T17:10:00+00:00\", \"2020-10-31T17:20:00+00:00\", \"2020-10-31T17:30:00+00:00\", \"2020-10-31T17:40:00+00:00\", \"2020-10-31T17:50:00+00:00\", \"2020-10-31T18:00:00+00:00\", \"2020-10-31T18:10:00+00:00\", \"2020-10-31T18:20:00+00:00\", \"2020-10-31T18:30:00+00:00\", \"2020-10-31T18:40:00+00:00\", \"2020-10-31T18:50:00+00:00\", \"2020-10-31T19:00:00+00:00\", \"2020-10-31T19:20:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:40:00+00:00\", \"2020-10-31T19:55:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:35:00+00:00\", \"2020-10-31T20:45:00+00:00\", \"2020-10-31T20:55:00+00:00\", \"2020-10-31T21:05:00+00:00\", \"2020-10-31T21:25:00+00:00\", \"2020-10-31T21:30:00+00:00\"], \"y\": [\"92\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"80\", \"92\", \"85\", \"0\", \"0\", \"0\", \"94\", \"0\", \"0\", \"0\", \"94\", \"96\", \"0\", \"0\", \"0\", \"94\", \"0\", \"0\", \"97\", \"81\", \"80\", \"81\", \"80\", \"87\", \"80\", \"85\"]}],\n", | |
" {\"template\": {\"data\": {\"bar\": [{\"error_x\": {\"color\": \"#2a3f5f\"}, \"error_y\": {\"color\": \"#2a3f5f\"}, \"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"bar\"}], \"barpolar\": [{\"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"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.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\"}], \"contourcarpet\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"contourcarpet\"}], \"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\"}], \"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\"}], \"histogram\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"histogram\"}], \"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\"}], \"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\"}], \"mesh3d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"mesh3d\"}], \"parcoords\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"parcoords\"}], \"pie\": [{\"automargin\": true, \"type\": \"pie\"}], \"scatter\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"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.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}, \"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}}}, \"title\": {\"text\": \"Marginal Operating Emissions Rates (MOER) of Select Google Data Centers\"}, \"xaxis\": {\"title\": {\"text\": \"Day and Time\"}}, \"yaxis\": {\"title\": {\"text\": \"MOER (0 = clean, 100 = max emissions)\"}}},\n", | |
" {\"responsive\": true}\n", | |
" ).then(function(){\n", | |
" \n", | |
"var gd = document.getElementById('a2b923c3-c485-47b8-b975-37250c5513c7');\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", | |
" })\n", | |
" };\n", | |
" \n", | |
" </script>\n", | |
" </div>\n", | |
"</body>\n", | |
"</html>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment