Last active
January 15, 2025 23:45
-
-
Save adamsilverstein/6d5111ca510d493559f2289a8fcab428 to your computer and use it in GitHub Desktop.
wordpress-sizes-attribute-exploration.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/adamsilverstein/6d5111ca510d493559f2289a8fcab428/wordpress-sizes-attribute-exploration.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Enhanced Responsive Images & Improved sizes attribute Impact" | |
], | |
"metadata": { | |
"id": "ZPBBdYvbTFr0" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Setup" | |
], | |
"metadata": { | |
"id": "4G2WkwMPzxbT" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "SeTJb51SKs_W", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "bdbf6d55-855f-4aec-eda4-7f7a3c32c6b0" | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Authenticated\n" | |
] | |
} | |
], | |
"source": [ | |
"from google.colab import auth\n", | |
"from google.cloud import bigquery\n", | |
"auth.authenticate_user()\n", | |
"\n", | |
"print('Authenticated')\n", | |
"project_id = 'wpp-research'" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from google.cloud.bigquery import magics\n", | |
"# Update with your own Google Cloud Platform project name\n", | |
"magics.context.project = project_id\n" | |
], | |
"metadata": { | |
"id": "YdTgQYtSoOoE" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from datetime import datetime, timedelta\n", | |
"\n", | |
"def get_first_of_previous_month():\n", | |
" today = datetime.now()\n", | |
" first_day_previous_month = datetime(today.year, today.month - 1, 1) if today.month > 1 else datetime(today.year - 1, 12, 1)\n", | |
" return first_day_previous_month.strftime('%Y_%m_%d')\n", | |
"\n", | |
"dataset = get_first_of_previous_month() # eg. \"2023_06_01\" - datasets are updated monthly, indicate the latest" | |
], | |
"metadata": { | |
"id": "stNLljYnR355" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "LMNA-vBHPyHz" | |
}, | |
"outputs": [], | |
"source": [ | |
"%load_ext google.colab.data_table" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from google.colab import data_table\n", | |
"data_table.enable_dataframe_formatter()" | |
], | |
"metadata": { | |
"id": "JlBfb2k3JpRS" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Queries" | |
], | |
"metadata": { | |
"id": "2FfbQTTPMspu" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"print( dataset )" | |
], | |
"metadata": { | |
"id": "X_4AMouQvHyr", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "8e3c6cd9-5414-47f5-a1cb-0ed48be4cb52" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"2024_10_01\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"### Innacurate sizes attribute impact\n", | |
"\n", | |
"HTTP Archive query to measure impact of inaccurate sizes attributes for WordPress sites.\n", | |
"\n", | |
"See https://github.com/GoogleChromeLabs/wpp-research/blob/main/sql/2024/04/inaccurate-sizes-attribute-impact.sql\n" | |
], | |
"metadata": { | |
"id": "jrwtTruf9xp5" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from google.cloud import bigquery\n", | |
"\n", | |
"client = bigquery.Client(project=project_id)\n", | |
"\n", | |
"query = f\"\"\"\n", | |
"# HTTP Archive query to measure impact of inaccurate sizes attributes per <img> for WordPress sites.\n", | |
"#\n", | |
"# WPP Research, Copyright 2024 Google LLC\n", | |
"#\n", | |
"# Licensed under the Apache License, Version 2.0 (the \"License\");\n", | |
"# you may not use this file except in compliance with the License.\n", | |
"# You may obtain a copy of the License at\n", | |
"#\n", | |
"# https://www.apache.org/licenses/LICENSE-2.0\n", | |
"#\n", | |
"# Unless required by applicable law or agreed to in writing, software\n", | |
"# distributed under the License is distributed on an \"AS IS\" BASIS,\n", | |
"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", | |
"# See the License for the specific language governing permissions and\n", | |
"# limitations under the License.\n", | |
"#\n", | |
"# See https://github.com/GoogleChromeLabs/wpp-research/pull/108\n", | |
"\n", | |
"DECLARE DATE_TO_QUERY DATE DEFAULT '2024-08-01';\n", | |
"\n", | |
"CREATE TEMPORARY FUNCTION GET_IMG_SIZES_ACCURACY(custom_metrics STRING) RETURNS\n", | |
" ARRAY<STRUCT<hasSrcset BOOL,\n", | |
" hasSizes BOOL,\n", | |
" sizesAbsoluteError FLOAT64,\n", | |
" sizesRelativeError FLOAT64,\n", | |
" idealSizesSelectedResourceEstimatedPixels INT64,\n", | |
" actualSizesEstimatedWastedLoadedPixels INT64,\n", | |
" relativeSizesEstimatedWastedLoadedPixels FLOAT64,\n", | |
" idealSizesSelectedResourceEstimatedBytes FLOAT64,\n", | |
" actualSizesEstimatedWastedLoadedBytes FLOAT64,\n", | |
" relativeSizesEstimatedWastedLoadedBytes FLOAT64>>\n", | |
"AS (\n", | |
" ARRAY(\n", | |
" SELECT AS STRUCT\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.hasSrcset') AS BOOL) AS hasSrcset,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.hasSizes') AS BOOL) AS hasSizes,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.sizesAbsoluteError') AS FLOAT64) AS sizesAbsoluteError,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.sizesRelativeError') AS FLOAT64) AS sizesRelativeError,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedPixels') AS INT64) AS idealSizesSelectedResourceEstimatedPixels,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedPixels') AS INT64) AS actualSizesEstimatedWastedLoadedPixels,\n", | |
" SAFE_DIVIDE(\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedPixels') AS INT64),\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedPixels') AS INT64)\n", | |
" ) AS relativeSizesEstimatedWastedLoadedPixels,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedBytes') AS FLOAT64) AS idealSizesSelectedResourceEstimatedBytes,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedBytes') AS FLOAT64) AS actualSizesEstimatedWastedLoadedBytes,\n", | |
" SAFE_DIVIDE(\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedBytes') AS FLOAT64),\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedBytes') AS FLOAT64)\n", | |
" ) AS relativeSizesEstimatedWastedLoadedBytes,\n", | |
" FROM\n", | |
" UNNEST(JSON_EXTRACT_ARRAY(custom_metrics, '$.responsive_images.responsive-images')) AS image\n", | |
" )\n", | |
");\n", | |
"\n", | |
"CREATE TEMPORARY FUNCTION IS_CMS(technologies ARRAY<STRUCT<technology STRING, categories ARRAY<STRING>, info ARRAY<STRING>>>, cms STRING, version STRING) RETURNS BOOL AS (\n", | |
" EXISTS(\n", | |
" SELECT * FROM UNNEST(technologies) AS technology, UNNEST(technology.info) AS info\n", | |
" WHERE technology.technology = cms\n", | |
" AND (\n", | |
" version = \"\"\n", | |
" OR ENDS_WITH(version, \".x\") AND (STARTS_WITH(info, RTRIM(version, \"x\")) OR info = RTRIM(version, \".x\"))\n", | |
" OR info = version\n", | |
" )\n", | |
" )\n", | |
");\n", | |
"\n", | |
"WITH wordpressSizesData AS (\n", | |
" SELECT\n", | |
" client,\n", | |
" image\n", | |
" FROM\n", | |
" `httparchive.all.pages`,\n", | |
" UNNEST(GET_IMG_SIZES_ACCURACY(custom_metrics)) AS image\n", | |
" WHERE\n", | |
" date = DATE_TO_QUERY\n", | |
" AND IS_CMS(technologies, 'WordPress', '')\n", | |
" AND is_root_page = TRUE\n", | |
" AND image.hasSrcset = TRUE\n", | |
" AND image.hasSizes = TRUE\n", | |
")\n", | |
"\n", | |
"SELECT\n", | |
" percentile,\n", | |
" client,\n", | |
" APPROX_QUANTILES(image.sizesAbsoluteError, 100)[OFFSET(percentile)] AS sizesAbsoluteError,\n", | |
" APPROX_QUANTILES(image.sizesRelativeError, 100)[OFFSET(percentile)] AS sizesRelativeError,\n", | |
" APPROX_QUANTILES(image.idealSizesSelectedResourceEstimatedPixels, 100)[OFFSET(percentile)] AS idealSizesSelectedResourceEstimatedPixels,\n", | |
" APPROX_QUANTILES(image.actualSizesEstimatedWastedLoadedPixels, 100)[OFFSET(percentile)] AS actualSizesEstimatedWastedLoadedPixels,\n", | |
" APPROX_QUANTILES(image.relativeSizesEstimatedWastedLoadedPixels, 100)[OFFSET(percentile)] AS relativeSizesEstimatedWastedLoadedPixels,\n", | |
" APPROX_QUANTILES(image.idealSizesSelectedResourceEstimatedBytes, 100)[OFFSET(percentile)] AS idealSizesSelectedResourceEstimatedBytes,\n", | |
" APPROX_QUANTILES(image.actualSizesEstimatedWastedLoadedBytes, 100)[OFFSET(percentile)] AS actualSizesEstimatedWastedLoadedBytes,\n", | |
" APPROX_QUANTILES(image.relativeSizesEstimatedWastedLoadedBytes, 100)[OFFSET(percentile)] AS relativeSizesEstimatedWastedLoadedBytes,\n", | |
"FROM\n", | |
" wordpressSizesData,\n", | |
" UNNEST([10, 20, 30, 40, 50, 60, 70, 80, 90]) AS percentile\n", | |
"GROUP BY\n", | |
" percentile,\n", | |
" client\n", | |
"ORDER BY\n", | |
" client,\n", | |
" percentile\n", | |
"\"\"\"\n", | |
"\n", | |
"total_sites = client.query(query).to_dataframe()\n", | |
"\n", | |
"total_sites" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 509 | |
}, | |
"id": "k_RSqKGl945K", | |
"outputId": "8ee33d88-e0eb-4e42-dbd9-b49953f8f325" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" percentile client sizesAbsoluteError sizesRelativeError \\\n", | |
"0 10 desktop 0.0 0.000000 \n", | |
"1 20 desktop 0.0 0.000000 \n", | |
"2 30 desktop 40.0 0.052632 \n", | |
"3 40 desktop 104.0 0.255230 \n", | |
"4 50 desktop 190.0 0.515152 \n", | |
"5 60 desktop 300.0 0.845045 \n", | |
"6 70 desktop 429.0 1.272727 \n", | |
"7 80 desktop 624.0 2.029586 \n", | |
"8 90 desktop 970.0 3.633484 \n", | |
"9 10 mobile 0.0 0.000000 \n", | |
"10 20 mobile 15.0 0.000000 \n", | |
"11 30 mobile 32.0 0.087879 \n", | |
"12 40 mobile 50.0 0.125000 \n", | |
"13 50 mobile 75.0 0.200000 \n", | |
"14 60 mobile 138.0 0.318681 \n", | |
"15 70 mobile 192.0 0.666667 \n", | |
"16 80 mobile 243.0 1.166667 \n", | |
"17 90 mobile 360.0 1.748092 \n", | |
"\n", | |
" idealSizesSelectedResourceEstimatedPixels \\\n", | |
"0 22500 \n", | |
"1 39204 \n", | |
"2 60000 \n", | |
"3 83100 \n", | |
"4 90000 \n", | |
"5 152100 \n", | |
"6 240000 \n", | |
"7 360000 \n", | |
"8 579072 \n", | |
"9 32700 \n", | |
"10 62500 \n", | |
"11 90000 \n", | |
"12 148400 \n", | |
"13 231500 \n", | |
"14 324096 \n", | |
"15 424800 \n", | |
"16 589824 \n", | |
"17 786432 \n", | |
"\n", | |
" actualSizesEstimatedWastedLoadedPixels \\\n", | |
"0 0 \n", | |
"1 0 \n", | |
"2 0 \n", | |
"3 0 \n", | |
"4 0 \n", | |
"5 10740 \n", | |
"6 92400 \n", | |
"7 272320 \n", | |
"8 667412 \n", | |
"9 0 \n", | |
"10 0 \n", | |
"11 0 \n", | |
"12 0 \n", | |
"13 0 \n", | |
"14 0 \n", | |
"15 22808 \n", | |
"16 212790 \n", | |
"17 481536 \n", | |
"\n", | |
" relativeSizesEstimatedWastedLoadedPixels \\\n", | |
"0 0.000000 \n", | |
"1 0.000000 \n", | |
"2 0.000000 \n", | |
"3 0.000000 \n", | |
"4 0.000000 \n", | |
"5 0.107225 \n", | |
"6 0.778646 \n", | |
"7 2.616129 \n", | |
"8 6.111111 \n", | |
"9 0.000000 \n", | |
"10 0.000000 \n", | |
"11 0.000000 \n", | |
"12 0.000000 \n", | |
"13 0.000000 \n", | |
"14 0.000000 \n", | |
"15 0.112366 \n", | |
"16 1.117413 \n", | |
"17 4.137778 \n", | |
"\n", | |
" idealSizesSelectedResourceEstimatedBytes \\\n", | |
"0 3075.428659 \n", | |
"1 6118.080000 \n", | |
"2 9916.791916 \n", | |
"3 14812.000000 \n", | |
"4 21728.000000 \n", | |
"5 32996.000000 \n", | |
"6 51566.000000 \n", | |
"7 84247.916042 \n", | |
"8 167744.000000 \n", | |
"9 5043.642469 \n", | |
"10 10096.796773 \n", | |
"11 16927.000000 \n", | |
"12 26540.000000 \n", | |
"13 40430.633817 \n", | |
"14 59485.000000 \n", | |
"15 86717.000000 \n", | |
"16 131166.000000 \n", | |
"17 243451.023891 \n", | |
"\n", | |
" actualSizesEstimatedWastedLoadedBytes \\\n", | |
"0 0.000000 \n", | |
"1 0.000000 \n", | |
"2 0.000000 \n", | |
"3 0.000000 \n", | |
"4 0.000000 \n", | |
"5 1466.640000 \n", | |
"6 13090.500000 \n", | |
"7 40305.155425 \n", | |
"8 118840.818343 \n", | |
"9 0.000000 \n", | |
"10 0.000000 \n", | |
"11 0.000000 \n", | |
"12 0.000000 \n", | |
"13 0.000000 \n", | |
"14 0.000000 \n", | |
"15 2955.941276 \n", | |
"16 25045.567692 \n", | |
"17 74206.779694 \n", | |
"\n", | |
" relativeSizesEstimatedWastedLoadedBytes \n", | |
"0 0.000000 \n", | |
"1 0.000000 \n", | |
"2 0.000000 \n", | |
"3 0.000000 \n", | |
"4 0.000000 \n", | |
"5 0.107225 \n", | |
"6 0.778646 \n", | |
"7 2.616129 \n", | |
"8 6.111111 \n", | |
"9 0.000000 \n", | |
"10 0.000000 \n", | |
"11 0.000000 \n", | |
"12 0.000000 \n", | |
"13 0.000000 \n", | |
"14 0.000000 \n", | |
"15 0.112366 \n", | |
"16 1.117413 \n", | |
"17 4.137778 " | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-448d2da1-2b04-426d-8953-62ba240050a0\" class=\"colab-df-container\">\n", | |
" <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>percentile</th>\n", | |
" <th>client</th>\n", | |
" <th>sizesAbsoluteError</th>\n", | |
" <th>sizesRelativeError</th>\n", | |
" <th>idealSizesSelectedResourceEstimatedPixels</th>\n", | |
" <th>actualSizesEstimatedWastedLoadedPixels</th>\n", | |
" <th>relativeSizesEstimatedWastedLoadedPixels</th>\n", | |
" <th>idealSizesSelectedResourceEstimatedBytes</th>\n", | |
" <th>actualSizesEstimatedWastedLoadedBytes</th>\n", | |
" <th>relativeSizesEstimatedWastedLoadedBytes</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>10</td>\n", | |
" <td>desktop</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>22500</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>3075.428659</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>20</td>\n", | |
" <td>desktop</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>39204</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>6118.080000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>30</td>\n", | |
" <td>desktop</td>\n", | |
" <td>40.0</td>\n", | |
" <td>0.052632</td>\n", | |
" <td>60000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>9916.791916</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>40</td>\n", | |
" <td>desktop</td>\n", | |
" <td>104.0</td>\n", | |
" <td>0.255230</td>\n", | |
" <td>83100</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>14812.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>50</td>\n", | |
" <td>desktop</td>\n", | |
" <td>190.0</td>\n", | |
" <td>0.515152</td>\n", | |
" <td>90000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>21728.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>60</td>\n", | |
" <td>desktop</td>\n", | |
" <td>300.0</td>\n", | |
" <td>0.845045</td>\n", | |
" <td>152100</td>\n", | |
" <td>10740</td>\n", | |
" <td>0.107225</td>\n", | |
" <td>32996.000000</td>\n", | |
" <td>1466.640000</td>\n", | |
" <td>0.107225</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>70</td>\n", | |
" <td>desktop</td>\n", | |
" <td>429.0</td>\n", | |
" <td>1.272727</td>\n", | |
" <td>240000</td>\n", | |
" <td>92400</td>\n", | |
" <td>0.778646</td>\n", | |
" <td>51566.000000</td>\n", | |
" <td>13090.500000</td>\n", | |
" <td>0.778646</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>80</td>\n", | |
" <td>desktop</td>\n", | |
" <td>624.0</td>\n", | |
" <td>2.029586</td>\n", | |
" <td>360000</td>\n", | |
" <td>272320</td>\n", | |
" <td>2.616129</td>\n", | |
" <td>84247.916042</td>\n", | |
" <td>40305.155425</td>\n", | |
" <td>2.616129</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>90</td>\n", | |
" <td>desktop</td>\n", | |
" <td>970.0</td>\n", | |
" <td>3.633484</td>\n", | |
" <td>579072</td>\n", | |
" <td>667412</td>\n", | |
" <td>6.111111</td>\n", | |
" <td>167744.000000</td>\n", | |
" <td>118840.818343</td>\n", | |
" <td>6.111111</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>10</td>\n", | |
" <td>mobile</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>32700</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>5043.642469</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>20</td>\n", | |
" <td>mobile</td>\n", | |
" <td>15.0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>62500</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>10096.796773</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>30</td>\n", | |
" <td>mobile</td>\n", | |
" <td>32.0</td>\n", | |
" <td>0.087879</td>\n", | |
" <td>90000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>16927.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>40</td>\n", | |
" <td>mobile</td>\n", | |
" <td>50.0</td>\n", | |
" <td>0.125000</td>\n", | |
" <td>148400</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>26540.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>50</td>\n", | |
" <td>mobile</td>\n", | |
" <td>75.0</td>\n", | |
" <td>0.200000</td>\n", | |
" <td>231500</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>40430.633817</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>60</td>\n", | |
" <td>mobile</td>\n", | |
" <td>138.0</td>\n", | |
" <td>0.318681</td>\n", | |
" <td>324096</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>59485.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>70</td>\n", | |
" <td>mobile</td>\n", | |
" <td>192.0</td>\n", | |
" <td>0.666667</td>\n", | |
" <td>424800</td>\n", | |
" <td>22808</td>\n", | |
" <td>0.112366</td>\n", | |
" <td>86717.000000</td>\n", | |
" <td>2955.941276</td>\n", | |
" <td>0.112366</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>80</td>\n", | |
" <td>mobile</td>\n", | |
" <td>243.0</td>\n", | |
" <td>1.166667</td>\n", | |
" <td>589824</td>\n", | |
" <td>212790</td>\n", | |
" <td>1.117413</td>\n", | |
" <td>131166.000000</td>\n", | |
" <td>25045.567692</td>\n", | |
" <td>1.117413</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>90</td>\n", | |
" <td>mobile</td>\n", | |
" <td>360.0</td>\n", | |
" <td>1.748092</td>\n", | |
" <td>786432</td>\n", | |
" <td>481536</td>\n", | |
" <td>4.137778</td>\n", | |
" <td>243451.023891</td>\n", | |
" <td>74206.779694</td>\n", | |
" <td>4.137778</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-448d2da1-2b04-426d-8953-62ba240050a0')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-448d2da1-2b04-426d-8953-62ba240050a0 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-448d2da1-2b04-426d-8953-62ba240050a0');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-2bfbfe40-af95-41ab-8a3a-af6489c1e66a\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-2bfbfe40-af95-41ab-8a3a-af6489c1e66a')\"\n", | |
" title=\"Suggest charts\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-2bfbfe40-af95-41ab-8a3a-af6489c1e66a button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
"\n", | |
" <div id=\"id_df2266e1-f796-48a0-8bd0-fdc89482cb2a\">\n", | |
" <style>\n", | |
" .colab-df-generate {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-generate:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-generate {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-generate:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
" <button class=\"colab-df-generate\" onclick=\"generateWithVariable('total_sites')\"\n", | |
" title=\"Generate code using this dataframe.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" <script>\n", | |
" (() => {\n", | |
" const buttonEl =\n", | |
" document.querySelector('#id_df2266e1-f796-48a0-8bd0-fdc89482cb2a button.colab-df-generate');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" buttonEl.onclick = () => {\n", | |
" google.colab.notebook.generateWithVariable('total_sites');\n", | |
" }\n", | |
" })();\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
" </div>\n", | |
" </div>\n" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "dataframe", | |
"variable_name": "total_sites", | |
"summary": "{\n \"name\": \"total_sites\",\n \"rows\": 18,\n \"fields\": [\n {\n \"column\": \"percentile\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 9,\n \"samples\": [\n 80,\n 20,\n 60\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"client\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"mobile\",\n \"desktop\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sizesAbsoluteError\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 256.7335538005479,\n \"min\": 0.0,\n \"max\": 970.0,\n \"num_unique_values\": 16,\n \"samples\": [\n 0.0,\n 40.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sizesRelativeError\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.9624046631385076,\n \"min\": 0.0,\n \"max\": 3.6334841628959276,\n \"num_unique_values\": 15,\n \"samples\": [\n 0.125,\n 0.31868131868131866\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"idealSizesSelectedResourceEstimatedPixels\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 17,\n \"samples\": [\n 22500,\n 39204\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"actualSizesEstimatedWastedLoadedPixels\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 8,\n \"samples\": [\n 10740,\n 22808\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"relativeSizesEstimatedWastedLoadedPixels\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.7273277557197213,\n \"min\": 0.0,\n \"max\": 6.111111111111111,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.1072248062015504,\n 0.11236572265625\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"idealSizesSelectedResourceEstimatedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 65619.50824964681,\n \"min\": 3075.4286589099816,\n \"max\": 243451.023890785,\n \"num_unique_values\": 18,\n \"samples\": [\n 3075.4286589099816,\n 6118.08\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"actualSizesEstimatedWastedLoadedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 32389.666689041976,\n \"min\": 0.0,\n \"max\": 118840.81834319526,\n \"num_unique_values\": 8,\n \"samples\": [\n 1466.6400000000003,\n 2955.941276481117\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"relativeSizesEstimatedWastedLoadedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.7273277557197213,\n \"min\": 0.0,\n \"max\": 6.111111111111112,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.10722480620155048,\n 0.11236572265625003\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
}, | |
"application/vnd.google.colaboratory.module+javascript": "\n import \"https://ssl.gstatic.com/colaboratory/data_table/e523c247d1e24a05/data_table.js\";\n\n const table = window.createDataTable({\n data: [[{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 10,\n 'f': \"10\",\n },\n\"desktop\",\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 22500,\n 'f': \"22500\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 3075.4286589099816,\n 'f': \"3075.4286589099816\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 1,\n 'f': \"1\",\n },\n{\n 'v': 20,\n 'f': \"20\",\n },\n\"desktop\",\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 39204,\n 'f': \"39204\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 6118.08,\n 'f': \"6118.08\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 2,\n 'f': \"2\",\n },\n{\n 'v': 30,\n 'f': \"30\",\n },\n\"desktop\",\n{\n 'v': 40.0,\n 'f': \"40.0\",\n },\n{\n 'v': 0.05263157894736842,\n 'f': \"0.05263157894736842\",\n },\n{\n 'v': 60000,\n 'f': \"60000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 9916.791915893555,\n 'f': \"9916.791915893555\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 3,\n 'f': \"3\",\n },\n{\n 'v': 40,\n 'f': \"40\",\n },\n\"desktop\",\n{\n 'v': 104.0,\n 'f': \"104.0\",\n },\n{\n 'v': 0.25523012552301255,\n 'f': \"0.25523012552301255\",\n },\n{\n 'v': 83100,\n 'f': \"83100\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 14812.0,\n 'f': \"14812.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 4,\n 'f': \"4\",\n },\n{\n 'v': 50,\n 'f': \"50\",\n },\n\"desktop\",\n{\n 'v': 190.0,\n 'f': \"190.0\",\n },\n{\n 'v': 0.5151515151515151,\n 'f': \"0.5151515151515151\",\n },\n{\n 'v': 90000,\n 'f': \"90000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 21728.0,\n 'f': \"21728.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 5,\n 'f': \"5\",\n },\n{\n 'v': 60,\n 'f': \"60\",\n },\n\"desktop\",\n{\n 'v': 300.0,\n 'f': \"300.0\",\n },\n{\n 'v': 0.8450450450450451,\n 'f': \"0.8450450450450451\",\n },\n{\n 'v': 152100,\n 'f': \"152100\",\n },\n{\n 'v': 10740,\n 'f': \"10740\",\n },\n{\n 'v': 0.1072248062015504,\n 'f': \"0.1072248062015504\",\n },\n{\n 'v': 32996.0,\n 'f': \"32996.0\",\n },\n{\n 'v': 1466.6400000000003,\n 'f': \"1466.6400000000003\",\n },\n{\n 'v': 0.10722480620155048,\n 'f': \"0.10722480620155048\",\n }],\n [{\n 'v': 6,\n 'f': \"6\",\n },\n{\n 'v': 70,\n 'f': \"70\",\n },\n\"desktop\",\n{\n 'v': 429.0,\n 'f': \"429.0\",\n },\n{\n 'v': 1.2727272727272727,\n 'f': \"1.2727272727272727\",\n },\n{\n 'v': 240000,\n 'f': \"240000\",\n },\n{\n 'v': 92400,\n 'f': \"92400\",\n },\n{\n 'v': 0.7786458333333334,\n 'f': \"0.7786458333333334\",\n },\n{\n 'v': 51566.0,\n 'f': \"51566.0\",\n },\n{\n 'v': 13090.5,\n 'f': \"13090.5\",\n },\n{\n 'v': 0.7786458333333333,\n 'f': \"0.7786458333333333\",\n }],\n [{\n 'v': 7,\n 'f': \"7\",\n },\n{\n 'v': 80,\n 'f': \"80\",\n },\n\"desktop\",\n{\n 'v': 624.0,\n 'f': \"624.0\",\n },\n{\n 'v': 2.029585798816568,\n 'f': \"2.029585798816568\",\n },\n{\n 'v': 360000,\n 'f': \"360000\",\n },\n{\n 'v': 272320,\n 'f': \"272320\",\n },\n{\n 'v': 2.6161290322580646,\n 'f': \"2.6161290322580646\",\n },\n{\n 'v': 84247.916041979,\n 'f': \"84247.916041979\",\n },\n{\n 'v': 40305.15542521994,\n 'f': \"40305.15542521994\",\n },\n{\n 'v': 2.6161290322580646,\n 'f': \"2.6161290322580646\",\n }],\n [{\n 'v': 8,\n 'f': \"8\",\n },\n{\n 'v': 90,\n 'f': \"90\",\n },\n\"desktop\",\n{\n 'v': 970.0,\n 'f': \"970.0\",\n },\n{\n 'v': 3.6334841628959276,\n 'f': \"3.6334841628959276\",\n },\n{\n 'v': 579072,\n 'f': \"579072\",\n },\n{\n 'v': 667412,\n 'f': \"667412\",\n },\n{\n 'v': 6.111111111111111,\n 'f': \"6.111111111111111\",\n },\n{\n 'v': 167744.0,\n 'f': \"167744.0\",\n },\n{\n 'v': 118840.81834319526,\n 'f': \"118840.81834319526\",\n },\n{\n 'v': 6.111111111111112,\n 'f': \"6.111111111111112\",\n }],\n [{\n 'v': 9,\n 'f': \"9\",\n },\n{\n 'v': 10,\n 'f': \"10\",\n },\n\"mobile\",\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 32700,\n 'f': \"32700\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 5043.6424691358025,\n 'f': \"5043.6424691358025\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 10,\n 'f': \"10\",\n },\n{\n 'v': 20,\n 'f': \"20\",\n },\n\"mobile\",\n{\n 'v': 15.0,\n 'f': \"15.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 62500,\n 'f': \"62500\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 10096.796772826909,\n 'f': \"10096.796772826909\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 11,\n 'f': \"11\",\n },\n{\n 'v': 30,\n 'f': \"30\",\n },\n\"mobile\",\n{\n 'v': 32.0,\n 'f': \"32.0\",\n },\n{\n 'v': 0.08787878787878788,\n 'f': \"0.08787878787878788\",\n },\n{\n 'v': 90000,\n 'f': \"90000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 16927.0,\n 'f': \"16927.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 12,\n 'f': \"12\",\n },\n{\n 'v': 40,\n 'f': \"40\",\n },\n\"mobile\",\n{\n 'v': 50.0,\n 'f': \"50.0\",\n },\n{\n 'v': 0.125,\n 'f': \"0.125\",\n },\n{\n 'v': 148400,\n 'f': \"148400\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 26540.0,\n 'f': \"26540.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 13,\n 'f': \"13\",\n },\n{\n 'v': 50,\n 'f': \"50\",\n },\n\"mobile\",\n{\n 'v': 75.0,\n 'f': \"75.0\",\n },\n{\n 'v': 0.2,\n 'f': \"0.2\",\n },\n{\n 'v': 231500,\n 'f': \"231500\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 40430.63381655389,\n 'f': \"40430.63381655389\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 14,\n 'f': \"14\",\n },\n{\n 'v': 60,\n 'f': \"60\",\n },\n\"mobile\",\n{\n 'v': 138.0,\n 'f': \"138.0\",\n },\n{\n 'v': 0.31868131868131866,\n 'f': \"0.31868131868131866\",\n },\n{\n 'v': 324096,\n 'f': \"324096\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 59485.0,\n 'f': \"59485.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 15,\n 'f': \"15\",\n },\n{\n 'v': 70,\n 'f': \"70\",\n },\n\"mobile\",\n{\n 'v': 192.0,\n 'f': \"192.0\",\n },\n{\n 'v': 0.6666666666666666,\n 'f': \"0.6666666666666666\",\n },\n{\n 'v': 424800,\n 'f': \"424800\",\n },\n{\n 'v': 22808,\n 'f': \"22808\",\n },\n{\n 'v': 0.11236572265625,\n 'f': \"0.11236572265625\",\n },\n{\n 'v': 86717.0,\n 'f': \"86717.0\",\n },\n{\n 'v': 2955.941276481117,\n 'f': \"2955.941276481117\",\n },\n{\n 'v': 0.11236572265625003,\n 'f': \"0.11236572265625003\",\n }],\n [{\n 'v': 16,\n 'f': \"16\",\n },\n{\n 'v': 80,\n 'f': \"80\",\n },\n\"mobile\",\n{\n 'v': 243.0,\n 'f': \"243.0\",\n },\n{\n 'v': 1.1666666666666667,\n 'f': \"1.1666666666666667\",\n },\n{\n 'v': 589824,\n 'f': \"589824\",\n },\n{\n 'v': 212790,\n 'f': \"212790\",\n },\n{\n 'v': 1.1174132299742898,\n 'f': \"1.1174132299742898\",\n },\n{\n 'v': 131166.0,\n 'f': \"131166.0\",\n },\n{\n 'v': 25045.567692307697,\n 'f': \"25045.567692307697\",\n },\n{\n 'v': 1.11741322997429,\n 'f': \"1.11741322997429\",\n }],\n [{\n 'v': 17,\n 'f': \"17\",\n },\n{\n 'v': 90,\n 'f': \"90\",\n },\n\"mobile\",\n{\n 'v': 360.0,\n 'f': \"360.0\",\n },\n{\n 'v': 1.748091603053435,\n 'f': \"1.748091603053435\",\n },\n{\n 'v': 786432,\n 'f': \"786432\",\n },\n{\n 'v': 481536,\n 'f': \"481536\",\n },\n{\n 'v': 4.137777777777778,\n 'f': \"4.137777777777778\",\n },\n{\n 'v': 243451.023890785,\n 'f': \"243451.023890785\",\n },\n{\n 'v': 74206.77969360352,\n 'f': \"74206.77969360352\",\n },\n{\n 'v': 4.137777777777778,\n 'f': \"4.137777777777778\",\n }]],\n columns: [[\"number\", \"index\"], [\"number\", \"percentile\"], [\"string\", \"client\"], [\"number\", \"sizesAbsoluteError\"], [\"number\", \"sizesRelativeError\"], [\"number\", \"idealSizesSelectedResourceEstimatedPixels\"], [\"number\", \"actualSizesEstimatedWastedLoadedPixels\"], [\"number\", \"relativeSizesEstimatedWastedLoadedPixels\"], [\"number\", \"idealSizesSelectedResourceEstimatedBytes\"], [\"number\", \"actualSizesEstimatedWastedLoadedBytes\"], [\"number\", \"relativeSizesEstimatedWastedLoadedBytes\"]],\n columnOptions: [{\"width\": \"1px\", \"className\": \"index_column\"}],\n rowsPerPage: 25,\n helpUrl: \"https://colab.research.google.com/notebooks/data_table.ipynb\",\n suppressOutputScrolling: true,\n minimumWidth: undefined,\n });\n\n function appendQuickchartButton(parentElement) {\n let quickchartButtonContainerElement = document.createElement('div');\n quickchartButtonContainerElement.innerHTML = `\n<div id=\"df-2ee23e19-2b39-4b92-9d87-95ce91e168c7\">\n <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-2ee23e19-2b39-4b92-9d87-95ce91e168c7')\"\n title=\"Suggest charts\"\n style=\"display:none;\">\n \n<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n width=\"24px\">\n <g>\n <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n </g>\n</svg>\n </button>\n \n<style>\n .colab-df-quickchart {\n --bg-color: #E8F0FE;\n --fill-color: #1967D2;\n --hover-bg-color: #E2EBFA;\n --hover-fill-color: #174EA6;\n --disabled-fill-color: #AAA;\n --disabled-bg-color: #DDD;\n }\n\n [theme=dark] .colab-df-quickchart {\n --bg-color: #3B4455;\n --fill-color: #D2E3FC;\n --hover-bg-color: #434B5C;\n --hover-fill-color: #FFFFFF;\n --disabled-bg-color: #3B4455;\n --disabled-fill-color: #666;\n }\n\n .colab-df-quickchart {\n background-color: var(--bg-color);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: none;\n fill: var(--fill-color);\n height: 32px;\n padding: 0;\n width: 32px;\n }\n\n .colab-df-quickchart:hover {\n background-color: var(--hover-bg-color);\n box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n fill: var(--button-hover-fill-color);\n }\n\n .colab-df-quickchart-complete:disabled,\n .colab-df-quickchart-complete:disabled:hover {\n background-color: var(--disabled-bg-color);\n fill: var(--disabled-fill-color);\n box-shadow: none;\n }\n\n .colab-df-spinner {\n border: 2px solid var(--fill-color);\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n animation:\n spin 1s steps(1) infinite;\n }\n\n @keyframes spin {\n 0% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n border-left-color: var(--fill-color);\n }\n 20% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 30% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n border-right-color: var(--fill-color);\n }\n 40% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 60% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n }\n 80% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-bottom-color: var(--fill-color);\n }\n 90% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n }\n }\n</style>\n\n <script>\n async function quickchart(key) {\n const quickchartButtonEl =\n document.querySelector('#' + key + ' button');\n quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n quickchartButtonEl.classList.add('colab-df-spinner');\n try {\n const charts = await google.colab.kernel.invokeFunction(\n 'suggestCharts', [key], {});\n } catch (error) {\n console.error('Error during call to suggestCharts:', error);\n }\n quickchartButtonEl.classList.remove('colab-df-spinner');\n quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n }\n (() => {\n let quickchartButtonEl =\n document.querySelector('#df-2ee23e19-2b39-4b92-9d87-95ce91e168c7 button');\n quickchartButtonEl.style.display =\n google.colab.kernel.accessAllowed ? 'block' : 'none';\n })();\n </script>\n</div>`;\n parentElement.appendChild(quickchartButtonContainerElement);\n }\n\n appendQuickchartButton(table);\n " | |
}, | |
"metadata": {}, | |
"execution_count": 7 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from google.cloud import bigquery\n", | |
"\n", | |
"client = bigquery.Client(project=project_id)\n", | |
"\n", | |
"query = f\"\"\"\n", | |
"# HTTP Archive query to measure impact of inaccurate sizes attributes per <img> for WordPress sites.\n", | |
"#\n", | |
"# WPP Research, Copyright 2024 Google LLC\n", | |
"#\n", | |
"# Licensed under the Apache License, Version 2.0 (the \"License\");\n", | |
"# you may not use this file except in compliance with the License.\n", | |
"# You may obtain a copy of the License at\n", | |
"#\n", | |
"# https://www.apache.org/licenses/LICENSE-2.0\n", | |
"#\n", | |
"# Unless required by applicable law or agreed to in writing, software\n", | |
"# distributed under the License is distributed on an \"AS IS\" BASIS,\n", | |
"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", | |
"# See the License for the specific language governing permissions and\n", | |
"# limitations under the License.\n", | |
"#\n", | |
"# See https://github.com/GoogleChromeLabs/wpp-research/pull/108\n", | |
"\n", | |
"DECLARE DATE_TO_QUERY DATE DEFAULT '2024-09-01';\n", | |
"\n", | |
"CREATE TEMP FUNCTION IS_GOOD(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64)\n", | |
" RETURNS BOOL\n", | |
" AS (\n", | |
" good / (good + needs_improvement + poor) >= 0.75\n", | |
" );\n", | |
"\n", | |
"CREATE TEMP FUNCTION IS_NON_ZERO(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64)\n", | |
" RETURNS BOOL\n", | |
" AS (\n", | |
" good + needs_improvement + poor > 0\n", | |
" );\n", | |
"\n", | |
"CREATE TEMPORARY FUNCTION GET_IMG_SIZES_ACCURACY(custom_metrics STRING) RETURNS\n", | |
" ARRAY<STRUCT<hasSrcset BOOL,\n", | |
" hasSizes BOOL,\n", | |
" sizesAbsoluteError FLOAT64,\n", | |
" sizesRelativeError FLOAT64,\n", | |
" idealSizesSelectedResourceEstimatedPixels INT64,\n", | |
" actualSizesEstimatedWastedLoadedPixels INT64,\n", | |
" relativeSizesEstimatedWastedLoadedPixels FLOAT64,\n", | |
" idealSizesSelectedResourceEstimatedBytes FLOAT64,\n", | |
" actualSizesEstimatedWastedLoadedBytes FLOAT64,\n", | |
" relativeSizesEstimatedWastedLoadedBytes FLOAT64>>\n", | |
"AS (\n", | |
" ARRAY(\n", | |
" SELECT AS STRUCT\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.hasSrcset') AS BOOL) AS hasSrcset,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.hasSizes') AS BOOL) AS hasSizes,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.sizesAbsoluteError') AS FLOAT64) AS sizesAbsoluteError,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.sizesRelativeError') AS FLOAT64) AS sizesRelativeError,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedPixels') AS INT64) AS idealSizesSelectedResourceEstimatedPixels,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedPixels') AS INT64) AS actualSizesEstimatedWastedLoadedPixels,\n", | |
" SAFE_DIVIDE(\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedPixels') AS INT64),\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedPixels') AS INT64)\n", | |
" ) AS relativeSizesEstimatedWastedLoadedPixels,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedBytes') AS FLOAT64) AS idealSizesSelectedResourceEstimatedBytes,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedBytes') AS FLOAT64) AS actualSizesEstimatedWastedLoadedBytes,\n", | |
" SAFE_DIVIDE(\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedBytes') AS FLOAT64),\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedBytes') AS FLOAT64)\n", | |
" ) AS relativeSizesEstimatedWastedLoadedBytes,\n", | |
" FROM\n", | |
" UNNEST(JSON_EXTRACT_ARRAY(custom_metrics, '$.responsive_images.responsive-images')) AS image\n", | |
" )\n", | |
");\n", | |
"\n", | |
"CREATE TEMPORARY FUNCTION IS_CMS(technologies ARRAY<STRUCT<technology STRING, categories ARRAY<STRING>, info ARRAY<STRING>>>, cms STRING, version STRING) RETURNS BOOL AS (\n", | |
" EXISTS(\n", | |
" SELECT * FROM UNNEST(technologies) AS technology, UNNEST(technology.info) AS info\n", | |
" WHERE technology.technology = cms\n", | |
" AND (\n", | |
" version = \"\"\n", | |
" OR ENDS_WITH(version, \".x\") AND (STARTS_WITH(info, RTRIM(version, \"x\")) OR info = RTRIM(version, \".x\"))\n", | |
" OR info = version\n", | |
" )\n", | |
" )\n", | |
");\n", | |
"\n", | |
"WITH\n", | |
"\n", | |
"cwvMetrics AS (\n", | |
" SELECT\n", | |
" CONCAT(origin, '/') AS origin,\n", | |
" IF(device = 'phone' OR device = 'tablet', 'mobile', device) AS device,\n", | |
" IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AS good_lcp,\n", | |
" IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AS any_lcp\n", | |
" FROM\n", | |
" `chrome-ux-report.materialized.device_summary`\n", | |
" WHERE\n", | |
" date = DATE_TO_QUERY\n", | |
"),\n", | |
"\n", | |
"wordpressSizesData AS (\n", | |
" SELECT\n", | |
" page,\n", | |
" client,\n", | |
" image,\n", | |
" IF( good_lcp, TRUE, FALSE ) AS good_lcp\n", | |
" FROM\n", | |
" `httparchive.all.pages`,\n", | |
" UNNEST(GET_IMG_SIZES_ACCURACY(custom_metrics)) AS image\n", | |
" JOIN cwvMetrics\n", | |
" ON\n", | |
" origin = page AND\n", | |
" device = client\n", | |
" WHERE\n", | |
" date = DATE_TO_QUERY\n", | |
" AND IS_CMS(technologies, 'WordPress', '')\n", | |
" AND is_root_page = TRUE\n", | |
" AND image.hasSrcset = TRUE\n", | |
" AND image.hasSizes = TRUE\n", | |
" AND any_lcp = TRUE\n", | |
")\n", | |
"\n", | |
"SELECT\n", | |
" percentile,\n", | |
" client,\n", | |
" good_lcp,\n", | |
" APPROX_QUANTILES(image.sizesRelativeError, 100)[OFFSET(percentile)] AS sizesRelativeError,\n", | |
" APPROX_QUANTILES(image.idealSizesSelectedResourceEstimatedPixels, 100)[OFFSET(percentile)] AS idealSizesSelectedResourceEstimatedPixels,\n", | |
" APPROX_QUANTILES(image.actualSizesEstimatedWastedLoadedPixels, 100)[OFFSET(percentile)] AS actualSizesEstimatedWastedLoadedPixels,\n", | |
" APPROX_QUANTILES(image.relativeSizesEstimatedWastedLoadedPixels, 100)[OFFSET(percentile)] AS relativeSizesEstimatedWastedLoadedPixels,\n", | |
" APPROX_QUANTILES(image.idealSizesSelectedResourceEstimatedBytes, 100)[OFFSET(percentile)] AS idealSizesSelectedResourceEstimatedBytes,\n", | |
" APPROX_QUANTILES(image.actualSizesEstimatedWastedLoadedBytes, 100)[OFFSET(percentile)] AS actualSizesEstimatedWastedLoadedBytes,\n", | |
" APPROX_QUANTILES(image.relativeSizesEstimatedWastedLoadedBytes, 100)[OFFSET(percentile)] AS relativeSizesEstimatedWastedLoadedBytes,\n", | |
"FROM\n", | |
" wordpressSizesData,\n", | |
" UNNEST([10, 20, 30, 40, 50, 60, 70, 80, 90]) AS percentile\n", | |
"GROUP BY\n", | |
" percentile,\n", | |
" client,\n", | |
" good_lcp\n", | |
"ORDER BY\n", | |
" client,\n", | |
" percentile\n", | |
"\"\"\"\n", | |
"\n", | |
"cwvsizedata = client.query(query).to_dataframe()\n", | |
"\n", | |
"cwvsizedata" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 670 | |
}, | |
"id": "5frchGMQAC7T", | |
"outputId": "1b464ea0-7e45-4156-be96-33b014b72da1" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" percentile client good_lcp sizesRelativeError \\\n", | |
"0 10 desktop True 0.000000 \n", | |
"1 10 desktop False 0.000000 \n", | |
"2 20 desktop False 0.000000 \n", | |
"3 20 desktop True 0.000000 \n", | |
"4 30 desktop False 0.088435 \n", | |
"5 30 desktop True 0.030928 \n", | |
"6 40 desktop False 0.299320 \n", | |
"7 40 desktop True 0.224880 \n", | |
"8 50 desktop False 0.555556 \n", | |
"9 50 desktop True 0.489362 \n", | |
"10 60 desktop False 0.895735 \n", | |
"11 60 desktop True 0.796407 \n", | |
"12 70 desktop False 1.339181 \n", | |
"13 70 desktop True 1.194226 \n", | |
"14 80 desktop True 1.935780 \n", | |
"15 80 desktop False 2.100775 \n", | |
"16 90 desktop False 3.697248 \n", | |
"17 90 desktop True 3.444444 \n", | |
"18 10 mobile False 0.000000 \n", | |
"19 10 mobile True 0.000000 \n", | |
"20 20 mobile False 0.012500 \n", | |
"21 20 mobile True 0.000000 \n", | |
"22 30 mobile False 0.090909 \n", | |
"23 30 mobile True 0.087613 \n", | |
"24 40 mobile False 0.125000 \n", | |
"25 40 mobile True 0.125000 \n", | |
"26 50 mobile False 0.200000 \n", | |
"27 50 mobile True 0.180328 \n", | |
"28 60 mobile False 0.406250 \n", | |
"29 60 mobile True 0.286624 \n", | |
"30 70 mobile False 0.851852 \n", | |
"31 70 mobile True 0.666667 \n", | |
"32 80 mobile False 1.250000 \n", | |
"33 80 mobile True 1.181818 \n", | |
"34 90 mobile False 1.880000 \n", | |
"35 90 mobile True 1.666667 \n", | |
"\n", | |
" idealSizesSelectedResourceEstimatedPixels \\\n", | |
"0 22500 \n", | |
"1 20400 \n", | |
"2 34596 \n", | |
"3 38700 \n", | |
"4 60000 \n", | |
"5 58800 \n", | |
"6 81225 \n", | |
"7 78400 \n", | |
"8 90000 \n", | |
"9 90000 \n", | |
"10 124800 \n", | |
"11 153600 \n", | |
"12 214560 \n", | |
"13 245000 \n", | |
"14 360000 \n", | |
"15 331776 \n", | |
"16 514200 \n", | |
"17 589824 \n", | |
"18 29800 \n", | |
"19 33900 \n", | |
"20 60300 \n", | |
"21 62001 \n", | |
"22 90000 \n", | |
"23 90000 \n", | |
"24 135408 \n", | |
"25 150000 \n", | |
"26 213600 \n", | |
"27 237900 \n", | |
"28 302500 \n", | |
"29 330240 \n", | |
"30 393216 \n", | |
"31 426400 \n", | |
"32 588800 \n", | |
"33 589824 \n", | |
"34 766700 \n", | |
"35 780288 \n", | |
"\n", | |
" actualSizesEstimatedWastedLoadedPixels \\\n", | |
"0 0 \n", | |
"1 0 \n", | |
"2 0 \n", | |
"3 0 \n", | |
"4 0 \n", | |
"5 0 \n", | |
"6 0 \n", | |
"7 0 \n", | |
"8 0 \n", | |
"9 0 \n", | |
"10 9090 \n", | |
"11 4760 \n", | |
"12 82636 \n", | |
"13 81600 \n", | |
"14 264721 \n", | |
"15 269100 \n", | |
"16 638709 \n", | |
"17 637800 \n", | |
"18 0 \n", | |
"19 0 \n", | |
"20 0 \n", | |
"21 0 \n", | |
"22 0 \n", | |
"23 0 \n", | |
"24 0 \n", | |
"25 0 \n", | |
"26 0 \n", | |
"27 0 \n", | |
"28 0 \n", | |
"29 0 \n", | |
"30 67500 \n", | |
"31 32248 \n", | |
"32 257024 \n", | |
"33 239644 \n", | |
"34 538400 \n", | |
"35 514925 \n", | |
"\n", | |
" relativeSizesEstimatedWastedLoadedPixels \\\n", | |
"0 0.000000 \n", | |
"1 0.000000 \n", | |
"2 0.000000 \n", | |
"3 0.000000 \n", | |
"4 0.000000 \n", | |
"5 0.000000 \n", | |
"6 0.000000 \n", | |
"7 0.000000 \n", | |
"8 0.000000 \n", | |
"9 0.000000 \n", | |
"10 0.089438 \n", | |
"11 0.075060 \n", | |
"12 0.804251 \n", | |
"13 0.777778 \n", | |
"14 2.394286 \n", | |
"15 2.815995 \n", | |
"16 6.555053 \n", | |
"17 6.109375 \n", | |
"18 0.000000 \n", | |
"19 0.000000 \n", | |
"20 0.000000 \n", | |
"21 0.000000 \n", | |
"22 0.000000 \n", | |
"23 0.000000 \n", | |
"24 0.000000 \n", | |
"25 0.000000 \n", | |
"26 0.000000 \n", | |
"27 0.000000 \n", | |
"28 0.000000 \n", | |
"29 0.000000 \n", | |
"30 0.562500 \n", | |
"31 0.155753 \n", | |
"32 1.560000 \n", | |
"33 1.250000 \n", | |
"34 5.250000 \n", | |
"35 4.623013 \n", | |
"\n", | |
" idealSizesSelectedResourceEstimatedBytes \\\n", | |
"0 3081.000000 \n", | |
"1 2727.592627 \n", | |
"2 5395.000000 \n", | |
"3 6139.386062 \n", | |
"4 8734.750000 \n", | |
"5 9944.000000 \n", | |
"6 13006.936115 \n", | |
"7 14796.000000 \n", | |
"8 18911.000000 \n", | |
"9 21644.000000 \n", | |
"10 28359.000000 \n", | |
"11 32789.255909 \n", | |
"12 44755.262500 \n", | |
"13 50969.000000 \n", | |
"14 82813.650222 \n", | |
"15 74588.313600 \n", | |
"16 149641.000000 \n", | |
"17 165346.000000 \n", | |
"18 4490.000000 \n", | |
"19 5140.000000 \n", | |
"20 8994.000000 \n", | |
"21 10126.249479 \n", | |
"22 15036.000000 \n", | |
"23 16694.068909 \n", | |
"24 23440.000000 \n", | |
"25 25969.790105 \n", | |
"26 35722.814062 \n", | |
"27 39403.000000 \n", | |
"28 53297.000000 \n", | |
"29 57709.000000 \n", | |
"30 78904.125000 \n", | |
"31 83523.223623 \n", | |
"32 120927.393123 \n", | |
"33 125272.160417 \n", | |
"34 226648.958449 \n", | |
"35 228122.000000 \n", | |
"\n", | |
" actualSizesEstimatedWastedLoadedBytes \\\n", | |
"0 0.000000 \n", | |
"1 0.000000 \n", | |
"2 0.000000 \n", | |
"3 0.000000 \n", | |
"4 0.000000 \n", | |
"5 0.000000 \n", | |
"6 0.000000 \n", | |
"7 0.000000 \n", | |
"8 0.000000 \n", | |
"9 0.000000 \n", | |
"10 1191.400000 \n", | |
"11 665.350676 \n", | |
"12 11393.529444 \n", | |
"13 11591.160000 \n", | |
"14 37450.849953 \n", | |
"15 35591.961255 \n", | |
"16 105216.553229 \n", | |
"17 111693.401000 \n", | |
"18 0.000000 \n", | |
"19 0.000000 \n", | |
"20 0.000000 \n", | |
"21 0.000000 \n", | |
"22 0.000000 \n", | |
"23 0.000000 \n", | |
"24 0.000000 \n", | |
"25 0.000000 \n", | |
"26 0.000000 \n", | |
"27 0.000000 \n", | |
"28 0.000000 \n", | |
"29 0.000000 \n", | |
"30 7419.905648 \n", | |
"31 3861.068374 \n", | |
"32 29766.196284 \n", | |
"33 27417.390000 \n", | |
"34 78796.265625 \n", | |
"35 76942.763672 \n", | |
"\n", | |
" relativeSizesEstimatedWastedLoadedBytes \n", | |
"0 0.000000 \n", | |
"1 0.000000 \n", | |
"2 0.000000 \n", | |
"3 0.000000 \n", | |
"4 0.000000 \n", | |
"5 0.000000 \n", | |
"6 0.000000 \n", | |
"7 0.000000 \n", | |
"8 0.000000 \n", | |
"9 0.000000 \n", | |
"10 0.089438 \n", | |
"11 0.075060 \n", | |
"12 0.804251 \n", | |
"13 0.777778 \n", | |
"14 2.394286 \n", | |
"15 2.815995 \n", | |
"16 6.555053 \n", | |
"17 6.109375 \n", | |
"18 0.000000 \n", | |
"19 0.000000 \n", | |
"20 0.000000 \n", | |
"21 0.000000 \n", | |
"22 0.000000 \n", | |
"23 0.000000 \n", | |
"24 0.000000 \n", | |
"25 0.000000 \n", | |
"26 0.000000 \n", | |
"27 0.000000 \n", | |
"28 0.000000 \n", | |
"29 0.000000 \n", | |
"30 0.562500 \n", | |
"31 0.155753 \n", | |
"32 1.560000 \n", | |
"33 1.250000 \n", | |
"34 5.250000 \n", | |
"35 4.623013 " | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-93eff5d2-15ca-4d2d-9107-5ffc176005e7\" class=\"colab-df-container\">\n", | |
" <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>percentile</th>\n", | |
" <th>client</th>\n", | |
" <th>good_lcp</th>\n", | |
" <th>sizesRelativeError</th>\n", | |
" <th>idealSizesSelectedResourceEstimatedPixels</th>\n", | |
" <th>actualSizesEstimatedWastedLoadedPixels</th>\n", | |
" <th>relativeSizesEstimatedWastedLoadedPixels</th>\n", | |
" <th>idealSizesSelectedResourceEstimatedBytes</th>\n", | |
" <th>actualSizesEstimatedWastedLoadedBytes</th>\n", | |
" <th>relativeSizesEstimatedWastedLoadedBytes</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>10</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>22500</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>3081.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>10</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>20400</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>2727.592627</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>20</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>34596</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>5395.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>20</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>38700</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>6139.386062</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>30</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>0.088435</td>\n", | |
" <td>60000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>8734.750000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>30</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>0.030928</td>\n", | |
" <td>58800</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>9944.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>40</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>0.299320</td>\n", | |
" <td>81225</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>13006.936115</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>40</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>0.224880</td>\n", | |
" <td>78400</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>14796.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>50</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>0.555556</td>\n", | |
" <td>90000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>18911.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>50</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>0.489362</td>\n", | |
" <td>90000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>21644.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>60</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>0.895735</td>\n", | |
" <td>124800</td>\n", | |
" <td>9090</td>\n", | |
" <td>0.089438</td>\n", | |
" <td>28359.000000</td>\n", | |
" <td>1191.400000</td>\n", | |
" <td>0.089438</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>60</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>0.796407</td>\n", | |
" <td>153600</td>\n", | |
" <td>4760</td>\n", | |
" <td>0.075060</td>\n", | |
" <td>32789.255909</td>\n", | |
" <td>665.350676</td>\n", | |
" <td>0.075060</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>70</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.339181</td>\n", | |
" <td>214560</td>\n", | |
" <td>82636</td>\n", | |
" <td>0.804251</td>\n", | |
" <td>44755.262500</td>\n", | |
" <td>11393.529444</td>\n", | |
" <td>0.804251</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>70</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.194226</td>\n", | |
" <td>245000</td>\n", | |
" <td>81600</td>\n", | |
" <td>0.777778</td>\n", | |
" <td>50969.000000</td>\n", | |
" <td>11591.160000</td>\n", | |
" <td>0.777778</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>80</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.935780</td>\n", | |
" <td>360000</td>\n", | |
" <td>264721</td>\n", | |
" <td>2.394286</td>\n", | |
" <td>82813.650222</td>\n", | |
" <td>37450.849953</td>\n", | |
" <td>2.394286</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>80</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>2.100775</td>\n", | |
" <td>331776</td>\n", | |
" <td>269100</td>\n", | |
" <td>2.815995</td>\n", | |
" <td>74588.313600</td>\n", | |
" <td>35591.961255</td>\n", | |
" <td>2.815995</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>90</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>3.697248</td>\n", | |
" <td>514200</td>\n", | |
" <td>638709</td>\n", | |
" <td>6.555053</td>\n", | |
" <td>149641.000000</td>\n", | |
" <td>105216.553229</td>\n", | |
" <td>6.555053</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>90</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>3.444444</td>\n", | |
" <td>589824</td>\n", | |
" <td>637800</td>\n", | |
" <td>6.109375</td>\n", | |
" <td>165346.000000</td>\n", | |
" <td>111693.401000</td>\n", | |
" <td>6.109375</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>10</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>29800</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>4490.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>10</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>33900</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>5140.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>20</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>0.012500</td>\n", | |
" <td>60300</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>8994.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21</th>\n", | |
" <td>20</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>62001</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>10126.249479</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>30</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>0.090909</td>\n", | |
" <td>90000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>15036.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>23</th>\n", | |
" <td>30</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.087613</td>\n", | |
" <td>90000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>16694.068909</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>24</th>\n", | |
" <td>40</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>0.125000</td>\n", | |
" <td>135408</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>23440.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25</th>\n", | |
" <td>40</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.125000</td>\n", | |
" <td>150000</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>25969.790105</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>26</th>\n", | |
" <td>50</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>0.200000</td>\n", | |
" <td>213600</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>35722.814062</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>27</th>\n", | |
" <td>50</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.180328</td>\n", | |
" <td>237900</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>39403.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>28</th>\n", | |
" <td>60</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>0.406250</td>\n", | |
" <td>302500</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>53297.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>29</th>\n", | |
" <td>60</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.286624</td>\n", | |
" <td>330240</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>57709.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30</th>\n", | |
" <td>70</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>0.851852</td>\n", | |
" <td>393216</td>\n", | |
" <td>67500</td>\n", | |
" <td>0.562500</td>\n", | |
" <td>78904.125000</td>\n", | |
" <td>7419.905648</td>\n", | |
" <td>0.562500</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>31</th>\n", | |
" <td>70</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.666667</td>\n", | |
" <td>426400</td>\n", | |
" <td>32248</td>\n", | |
" <td>0.155753</td>\n", | |
" <td>83523.223623</td>\n", | |
" <td>3861.068374</td>\n", | |
" <td>0.155753</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32</th>\n", | |
" <td>80</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>588800</td>\n", | |
" <td>257024</td>\n", | |
" <td>1.560000</td>\n", | |
" <td>120927.393123</td>\n", | |
" <td>29766.196284</td>\n", | |
" <td>1.560000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>33</th>\n", | |
" <td>80</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>1.181818</td>\n", | |
" <td>589824</td>\n", | |
" <td>239644</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>125272.160417</td>\n", | |
" <td>27417.390000</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>34</th>\n", | |
" <td>90</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.880000</td>\n", | |
" <td>766700</td>\n", | |
" <td>538400</td>\n", | |
" <td>5.250000</td>\n", | |
" <td>226648.958449</td>\n", | |
" <td>78796.265625</td>\n", | |
" <td>5.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>35</th>\n", | |
" <td>90</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>1.666667</td>\n", | |
" <td>780288</td>\n", | |
" <td>514925</td>\n", | |
" <td>4.623013</td>\n", | |
" <td>228122.000000</td>\n", | |
" <td>76942.763672</td>\n", | |
" <td>4.623013</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-93eff5d2-15ca-4d2d-9107-5ffc176005e7')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-93eff5d2-15ca-4d2d-9107-5ffc176005e7 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-93eff5d2-15ca-4d2d-9107-5ffc176005e7');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-4c9cee55-35b5-4d59-b490-b8203ba7b0c5\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-4c9cee55-35b5-4d59-b490-b8203ba7b0c5')\"\n", | |
" title=\"Suggest charts\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-4c9cee55-35b5-4d59-b490-b8203ba7b0c5 button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
"\n", | |
" <div id=\"id_4080f156-966d-4c53-b951-7564bd4be61e\">\n", | |
" <style>\n", | |
" .colab-df-generate {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-generate:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-generate {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-generate:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
" <button class=\"colab-df-generate\" onclick=\"generateWithVariable('cwvsizedata')\"\n", | |
" title=\"Generate code using this dataframe.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" <script>\n", | |
" (() => {\n", | |
" const buttonEl =\n", | |
" document.querySelector('#id_4080f156-966d-4c53-b951-7564bd4be61e button.colab-df-generate');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" buttonEl.onclick = () => {\n", | |
" google.colab.notebook.generateWithVariable('cwvsizedata');\n", | |
" }\n", | |
" })();\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
" </div>\n", | |
" </div>\n" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "dataframe", | |
"variable_name": "cwvsizedata", | |
"summary": "{\n \"name\": \"cwvsizedata\",\n \"rows\": 36,\n \"fields\": [\n {\n \"column\": \"percentile\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 9,\n \"samples\": [\n 80,\n 20,\n 60\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"client\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"mobile\",\n \"desktop\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"good_lcp\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 2,\n \"samples\": [\n false,\n true\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sizesRelativeError\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.9400383882161787,\n \"min\": 0.0,\n \"max\": 3.697247706422018,\n \"num_unique_values\": 29,\n \"samples\": [\n 1.88,\n 0.09090909090909091\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"idealSizesSelectedResourceEstimatedPixels\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 32,\n \"samples\": [\n 588800,\n 514200\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"actualSizesEstimatedWastedLoadedPixels\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 15,\n \"samples\": [\n 67500,\n 257024\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"relativeSizesEstimatedWastedLoadedPixels\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.837710120287071,\n \"min\": 0.0,\n \"max\": 6.55505291005291,\n \"num_unique_values\": 15,\n \"samples\": [\n 0.5625,\n 1.56\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"idealSizesSelectedResourceEstimatedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 60579.61196018727,\n \"min\": 2727.592627071309,\n \"max\": 228122.0,\n \"num_unique_values\": 36,\n \"samples\": [\n 228122.0,\n 50969.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"actualSizesEstimatedWastedLoadedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 30354.149428940356,\n \"min\": 0.0,\n \"max\": 111693.40099972548,\n \"num_unique_values\": 15,\n \"samples\": [\n 7419.905647954656,\n 29766.196284452566\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"relativeSizesEstimatedWastedLoadedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.837710120287071,\n \"min\": 0.0,\n \"max\": 6.55505291005291,\n \"num_unique_values\": 15,\n \"samples\": [\n 0.5624999999999999,\n 1.56\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
}, | |
"application/vnd.google.colaboratory.module+javascript": "\n import \"https://ssl.gstatic.com/colaboratory/data_table/81954c9606dcf997/data_table.js\";\n\n const table = window.createDataTable({\n data: [[{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 10,\n 'f': \"10\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 22500,\n 'f': \"22500\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 3081.0,\n 'f': \"3081.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 1,\n 'f': \"1\",\n },\n{\n 'v': 10,\n 'f': \"10\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 20400,\n 'f': \"20400\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 2727.592627071309,\n 'f': \"2727.592627071309\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 2,\n 'f': \"2\",\n },\n{\n 'v': 20,\n 'f': \"20\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 34596,\n 'f': \"34596\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 5395.0,\n 'f': \"5395.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 3,\n 'f': \"3\",\n },\n{\n 'v': 20,\n 'f': \"20\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 38700,\n 'f': \"38700\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 6139.386061946902,\n 'f': \"6139.386061946902\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 4,\n 'f': \"4\",\n },\n{\n 'v': 30,\n 'f': \"30\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 0.08843537414965986,\n 'f': \"0.08843537414965986\",\n },\n{\n 'v': 60000,\n 'f': \"60000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 8734.75,\n 'f': \"8734.75\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 5,\n 'f': \"5\",\n },\n{\n 'v': 30,\n 'f': \"30\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 0.030927835051546393,\n 'f': \"0.030927835051546393\",\n },\n{\n 'v': 58800,\n 'f': \"58800\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 9944.0,\n 'f': \"9944.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 6,\n 'f': \"6\",\n },\n{\n 'v': 40,\n 'f': \"40\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 0.29931972789115646,\n 'f': \"0.29931972789115646\",\n },\n{\n 'v': 81225,\n 'f': \"81225\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 13006.936114732725,\n 'f': \"13006.936114732725\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 7,\n 'f': \"7\",\n },\n{\n 'v': 40,\n 'f': \"40\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 0.22488038277511962,\n 'f': \"0.22488038277511962\",\n },\n{\n 'v': 78400,\n 'f': \"78400\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 14796.0,\n 'f': \"14796.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 8,\n 'f': \"8\",\n },\n{\n 'v': 50,\n 'f': \"50\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 0.5555555555555556,\n 'f': \"0.5555555555555556\",\n },\n{\n 'v': 90000,\n 'f': \"90000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 18911.0,\n 'f': \"18911.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 9,\n 'f': \"9\",\n },\n{\n 'v': 50,\n 'f': \"50\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 0.48936170212765956,\n 'f': \"0.48936170212765956\",\n },\n{\n 'v': 90000,\n 'f': \"90000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 21644.0,\n 'f': \"21644.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 10,\n 'f': \"10\",\n },\n{\n 'v': 60,\n 'f': \"60\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 0.8957345971563981,\n 'f': \"0.8957345971563981\",\n },\n{\n 'v': 124800,\n 'f': \"124800\",\n },\n{\n 'v': 9090,\n 'f': \"9090\",\n },\n{\n 'v': 0.08943838632058568,\n 'f': \"0.08943838632058568\",\n },\n{\n 'v': 28358.999999999996,\n 'f': \"28358.999999999996\",\n },\n{\n 'v': 1191.4,\n 'f': \"1191.4\",\n },\n{\n 'v': 0.08943838632058579,\n 'f': \"0.08943838632058579\",\n }],\n [{\n 'v': 11,\n 'f': \"11\",\n },\n{\n 'v': 60,\n 'f': \"60\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 0.7964071856287425,\n 'f': \"0.7964071856287425\",\n },\n{\n 'v': 153600,\n 'f': \"153600\",\n },\n{\n 'v': 4760,\n 'f': \"4760\",\n },\n{\n 'v': 0.07505990783410138,\n 'f': \"0.07505990783410138\",\n },\n{\n 'v': 32789.25590920329,\n 'f': \"32789.25590920329\",\n },\n{\n 'v': 665.3506763787718,\n 'f': \"665.3506763787718\",\n },\n{\n 'v': 0.07505990783410131,\n 'f': \"0.07505990783410131\",\n }],\n [{\n 'v': 12,\n 'f': \"12\",\n },\n{\n 'v': 70,\n 'f': \"70\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 1.3391812865497077,\n 'f': \"1.3391812865497077\",\n },\n{\n 'v': 214560,\n 'f': \"214560\",\n },\n{\n 'v': 82636,\n 'f': \"82636\",\n },\n{\n 'v': 0.8042513167795334,\n 'f': \"0.8042513167795334\",\n },\n{\n 'v': 44755.2625,\n 'f': \"44755.2625\",\n },\n{\n 'v': 11393.529444444444,\n 'f': \"11393.529444444444\",\n },\n{\n 'v': 0.8042513167795335,\n 'f': \"0.8042513167795335\",\n }],\n [{\n 'v': 13,\n 'f': \"13\",\n },\n{\n 'v': 70,\n 'f': \"70\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 1.194225721784777,\n 'f': \"1.194225721784777\",\n },\n{\n 'v': 245000,\n 'f': \"245000\",\n },\n{\n 'v': 81600,\n 'f': \"81600\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n },\n{\n 'v': 50969.0,\n 'f': \"50969.0\",\n },\n{\n 'v': 11591.16,\n 'f': \"11591.16\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n }],\n [{\n 'v': 14,\n 'f': \"14\",\n },\n{\n 'v': 80,\n 'f': \"80\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 1.9357798165137614,\n 'f': \"1.9357798165137614\",\n },\n{\n 'v': 360000,\n 'f': \"360000\",\n },\n{\n 'v': 264721,\n 'f': \"264721\",\n },\n{\n 'v': 2.394285714285714,\n 'f': \"2.394285714285714\",\n },\n{\n 'v': 82813.65022172949,\n 'f': \"82813.65022172949\",\n },\n{\n 'v': 37450.84995299298,\n 'f': \"37450.84995299298\",\n },\n{\n 'v': 2.3942857142857146,\n 'f': \"2.3942857142857146\",\n }],\n [{\n 'v': 15,\n 'f': \"15\",\n },\n{\n 'v': 80,\n 'f': \"80\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 2.10077519379845,\n 'f': \"2.10077519379845\",\n },\n{\n 'v': 331776,\n 'f': \"331776\",\n },\n{\n 'v': 269100,\n 'f': \"269100\",\n },\n{\n 'v': 2.815994685767098,\n 'f': \"2.815994685767098\",\n },\n{\n 'v': 74588.3136,\n 'f': \"74588.3136\",\n },\n{\n 'v': 35591.96125461254,\n 'f': \"35591.96125461254\",\n },\n{\n 'v': 2.815994685767098,\n 'f': \"2.815994685767098\",\n }],\n [{\n 'v': 16,\n 'f': \"16\",\n },\n{\n 'v': 90,\n 'f': \"90\",\n },\n\"desktop\",\nfalse,\n{\n 'v': 3.697247706422018,\n 'f': \"3.697247706422018\",\n },\n{\n 'v': 514200,\n 'f': \"514200\",\n },\n{\n 'v': 638709,\n 'f': \"638709\",\n },\n{\n 'v': 6.55505291005291,\n 'f': \"6.55505291005291\",\n },\n{\n 'v': 149641.0,\n 'f': \"149641.0\",\n },\n{\n 'v': 105216.5532288716,\n 'f': \"105216.5532288716\",\n },\n{\n 'v': 6.55505291005291,\n 'f': \"6.55505291005291\",\n }],\n [{\n 'v': 17,\n 'f': \"17\",\n },\n{\n 'v': 90,\n 'f': \"90\",\n },\n\"desktop\",\ntrue,\n{\n 'v': 3.4444444444444446,\n 'f': \"3.4444444444444446\",\n },\n{\n 'v': 589824,\n 'f': \"589824\",\n },\n{\n 'v': 637800,\n 'f': \"637800\",\n },\n{\n 'v': 6.109375,\n 'f': \"6.109375\",\n },\n{\n 'v': 165346.0,\n 'f': \"165346.0\",\n },\n{\n 'v': 111693.40099972548,\n 'f': \"111693.40099972548\",\n },\n{\n 'v': 6.109375,\n 'f': \"6.109375\",\n }],\n [{\n 'v': 18,\n 'f': \"18\",\n },\n{\n 'v': 10,\n 'f': \"10\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 29800,\n 'f': \"29800\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 4490.0,\n 'f': \"4490.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 19,\n 'f': \"19\",\n },\n{\n 'v': 10,\n 'f': \"10\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 33900,\n 'f': \"33900\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 5140.0,\n 'f': \"5140.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 20,\n 'f': \"20\",\n },\n{\n 'v': 20,\n 'f': \"20\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 0.0125,\n 'f': \"0.0125\",\n },\n{\n 'v': 60300,\n 'f': \"60300\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 8994.0,\n 'f': \"8994.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 21,\n 'f': \"21\",\n },\n{\n 'v': 20,\n 'f': \"20\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 62001,\n 'f': \"62001\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 10126.24947938359,\n 'f': \"10126.24947938359\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 22,\n 'f': \"22\",\n },\n{\n 'v': 30,\n 'f': \"30\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 0.09090909090909091,\n 'f': \"0.09090909090909091\",\n },\n{\n 'v': 90000,\n 'f': \"90000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 15036.0,\n 'f': \"15036.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 23,\n 'f': \"23\",\n },\n{\n 'v': 30,\n 'f': \"30\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 0.08761329305135952,\n 'f': \"0.08761329305135952\",\n },\n{\n 'v': 90000,\n 'f': \"90000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 16694.068908691406,\n 'f': \"16694.068908691406\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 24,\n 'f': \"24\",\n },\n{\n 'v': 40,\n 'f': \"40\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 0.125,\n 'f': \"0.125\",\n },\n{\n 'v': 135408,\n 'f': \"135408\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 23440.0,\n 'f': \"23440.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 25,\n 'f': \"25\",\n },\n{\n 'v': 40,\n 'f': \"40\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 0.125,\n 'f': \"0.125\",\n },\n{\n 'v': 150000,\n 'f': \"150000\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 25969.79010494753,\n 'f': \"25969.79010494753\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 26,\n 'f': \"26\",\n },\n{\n 'v': 50,\n 'f': \"50\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 0.2,\n 'f': \"0.2\",\n },\n{\n 'v': 213600,\n 'f': \"213600\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 35722.81406240413,\n 'f': \"35722.81406240413\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 27,\n 'f': \"27\",\n },\n{\n 'v': 50,\n 'f': \"50\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 0.18032786885245902,\n 'f': \"0.18032786885245902\",\n },\n{\n 'v': 237900,\n 'f': \"237900\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 39403.0,\n 'f': \"39403.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 28,\n 'f': \"28\",\n },\n{\n 'v': 60,\n 'f': \"60\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 0.40625,\n 'f': \"0.40625\",\n },\n{\n 'v': 302500,\n 'f': \"302500\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 53297.0,\n 'f': \"53297.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 29,\n 'f': \"29\",\n },\n{\n 'v': 60,\n 'f': \"60\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 0.28662420382165604,\n 'f': \"0.28662420382165604\",\n },\n{\n 'v': 330240,\n 'f': \"330240\",\n },\n{\n 'v': 0,\n 'f': \"0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 57709.0,\n 'f': \"57709.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n },\n{\n 'v': 0.0,\n 'f': \"0.0\",\n }],\n [{\n 'v': 30,\n 'f': \"30\",\n },\n{\n 'v': 70,\n 'f': \"70\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 0.8518518518518519,\n 'f': \"0.8518518518518519\",\n },\n{\n 'v': 393216,\n 'f': \"393216\",\n },\n{\n 'v': 67500,\n 'f': \"67500\",\n },\n{\n 'v': 0.5625,\n 'f': \"0.5625\",\n },\n{\n 'v': 78904.125,\n 'f': \"78904.125\",\n },\n{\n 'v': 7419.905647954656,\n 'f': \"7419.905647954656\",\n },\n{\n 'v': 0.5624999999999999,\n 'f': \"0.5624999999999999\",\n }],\n [{\n 'v': 31,\n 'f': \"31\",\n },\n{\n 'v': 70,\n 'f': \"70\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 0.6666666666666666,\n 'f': \"0.6666666666666666\",\n },\n{\n 'v': 426400,\n 'f': \"426400\",\n },\n{\n 'v': 32248,\n 'f': \"32248\",\n },\n{\n 'v': 0.15575337998102468,\n 'f': \"0.15575337998102468\",\n },\n{\n 'v': 83523.22362251257,\n 'f': \"83523.22362251257\",\n },\n{\n 'v': 3861.068373702423,\n 'f': \"3861.068373702423\",\n },\n{\n 'v': 0.15575337998102465,\n 'f': \"0.15575337998102465\",\n }],\n [{\n 'v': 32,\n 'f': \"32\",\n },\n{\n 'v': 80,\n 'f': \"80\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 588800,\n 'f': \"588800\",\n },\n{\n 'v': 257024,\n 'f': \"257024\",\n },\n{\n 'v': 1.56,\n 'f': \"1.56\",\n },\n{\n 'v': 120927.39312292998,\n 'f': \"120927.39312292998\",\n },\n{\n 'v': 29766.196284452566,\n 'f': \"29766.196284452566\",\n },\n{\n 'v': 1.56,\n 'f': \"1.56\",\n }],\n [{\n 'v': 33,\n 'f': \"33\",\n },\n{\n 'v': 80,\n 'f': \"80\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 1.1818181818181819,\n 'f': \"1.1818181818181819\",\n },\n{\n 'v': 589824,\n 'f': \"589824\",\n },\n{\n 'v': 239644,\n 'f': \"239644\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 125272.16041666667,\n 'f': \"125272.16041666667\",\n },\n{\n 'v': 27417.39,\n 'f': \"27417.39\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n }],\n [{\n 'v': 34,\n 'f': \"34\",\n },\n{\n 'v': 90,\n 'f': \"90\",\n },\n\"mobile\",\nfalse,\n{\n 'v': 1.88,\n 'f': \"1.88\",\n },\n{\n 'v': 766700,\n 'f': \"766700\",\n },\n{\n 'v': 538400,\n 'f': \"538400\",\n },\n{\n 'v': 5.25,\n 'f': \"5.25\",\n },\n{\n 'v': 226648.95844922483,\n 'f': \"226648.95844922483\",\n },\n{\n 'v': 78796.265625,\n 'f': \"78796.265625\",\n },\n{\n 'v': 5.25,\n 'f': \"5.25\",\n }],\n [{\n 'v': 35,\n 'f': \"35\",\n },\n{\n 'v': 90,\n 'f': \"90\",\n },\n\"mobile\",\ntrue,\n{\n 'v': 1.6666666666666667,\n 'f': \"1.6666666666666667\",\n },\n{\n 'v': 780288,\n 'f': \"780288\",\n },\n{\n 'v': 514925,\n 'f': \"514925\",\n },\n{\n 'v': 4.623012590754526,\n 'f': \"4.623012590754526\",\n },\n{\n 'v': 228122.0,\n 'f': \"228122.0\",\n },\n{\n 'v': 76942.763671875,\n 'f': \"76942.763671875\",\n },\n{\n 'v': 4.623012590754526,\n 'f': \"4.623012590754526\",\n }]],\n columns: [[\"number\", \"index\"], [\"number\", \"percentile\"], [\"string\", \"client\"], [\"string\", \"good_lcp\"], [\"number\", \"sizesRelativeError\"], [\"number\", \"idealSizesSelectedResourceEstimatedPixels\"], [\"number\", \"actualSizesEstimatedWastedLoadedPixels\"], [\"number\", \"relativeSizesEstimatedWastedLoadedPixels\"], [\"number\", \"idealSizesSelectedResourceEstimatedBytes\"], [\"number\", \"actualSizesEstimatedWastedLoadedBytes\"], [\"number\", \"relativeSizesEstimatedWastedLoadedBytes\"]],\n columnOptions: [{\"width\": \"1px\", \"className\": \"index_column\"}],\n rowsPerPage: 25,\n helpUrl: \"https://colab.research.google.com/notebooks/data_table.ipynb\",\n suppressOutputScrolling: true,\n minimumWidth: undefined,\n });\n\n function appendQuickchartButton(parentElement) {\n let quickchartButtonContainerElement = document.createElement('div');\n quickchartButtonContainerElement.innerHTML = `\n<div id=\"df-d1d69727-e485-4372-ad8a-2e6c7d6b1f67\">\n <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-d1d69727-e485-4372-ad8a-2e6c7d6b1f67')\"\n title=\"Suggest charts\"\n style=\"display:none;\">\n \n<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n width=\"24px\">\n <g>\n <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n </g>\n</svg>\n </button>\n \n<style>\n .colab-df-quickchart {\n --bg-color: #E8F0FE;\n --fill-color: #1967D2;\n --hover-bg-color: #E2EBFA;\n --hover-fill-color: #174EA6;\n --disabled-fill-color: #AAA;\n --disabled-bg-color: #DDD;\n }\n\n [theme=dark] .colab-df-quickchart {\n --bg-color: #3B4455;\n --fill-color: #D2E3FC;\n --hover-bg-color: #434B5C;\n --hover-fill-color: #FFFFFF;\n --disabled-bg-color: #3B4455;\n --disabled-fill-color: #666;\n }\n\n .colab-df-quickchart {\n background-color: var(--bg-color);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: none;\n fill: var(--fill-color);\n height: 32px;\n padding: 0;\n width: 32px;\n }\n\n .colab-df-quickchart:hover {\n background-color: var(--hover-bg-color);\n box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n fill: var(--button-hover-fill-color);\n }\n\n .colab-df-quickchart-complete:disabled,\n .colab-df-quickchart-complete:disabled:hover {\n background-color: var(--disabled-bg-color);\n fill: var(--disabled-fill-color);\n box-shadow: none;\n }\n\n .colab-df-spinner {\n border: 2px solid var(--fill-color);\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n animation:\n spin 1s steps(1) infinite;\n }\n\n @keyframes spin {\n 0% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n border-left-color: var(--fill-color);\n }\n 20% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 30% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n border-right-color: var(--fill-color);\n }\n 40% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 60% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n }\n 80% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-bottom-color: var(--fill-color);\n }\n 90% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n }\n }\n</style>\n\n <script>\n async function quickchart(key) {\n const quickchartButtonEl =\n document.querySelector('#' + key + ' button');\n quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n quickchartButtonEl.classList.add('colab-df-spinner');\n try {\n const charts = await google.colab.kernel.invokeFunction(\n 'suggestCharts', [key], {});\n } catch (error) {\n console.error('Error during call to suggestCharts:', error);\n }\n quickchartButtonEl.classList.remove('colab-df-spinner');\n quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n }\n (() => {\n let quickchartButtonEl =\n document.querySelector('#df-d1d69727-e485-4372-ad8a-2e6c7d6b1f67 button');\n quickchartButtonEl.style.display =\n google.colab.kernel.accessAllowed ? 'block' : 'none';\n })();\n </script>\n</div>`;\n parentElement.appendChild(quickchartButtonContainerElement);\n }\n\n appendQuickchartButton(table);\n " | |
}, | |
"metadata": {}, | |
"execution_count": 8 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Plot cwvsizedata dataset\n", | |
"import pandas as pd\n", | |
"import matplotlib.ticker as mticker\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"\n", | |
"# Copy the cwvsizedata dataset\n", | |
"df = cwvsizedata.copy();\n", | |
"\n", | |
"\n", | |
"df['sizesRelativeError'] *= 100\n", | |
"\n", | |
"# Filter data into groups based on 'good_lcp'\n", | |
"good_lcp_data = df[df['good_lcp'] == True]\n", | |
"bad_lcp_data = df[df['good_lcp'] == False]\n", | |
"\n", | |
"good_lcp_data_mobile = good_lcp_data[good_lcp_data['client'] == 'mobile']\n", | |
"bad_lcp_data_mobile = bad_lcp_data[bad_lcp_data['client'] == 'mobile']\n", | |
"\n", | |
"good_lcp_data_desktop = good_lcp_data[good_lcp_data['client'] == 'desktop']\n", | |
"bad_lcp_data_desktop = bad_lcp_data[bad_lcp_data['client'] == 'desktop']\n", | |
"\n", | |
"# Set up the plot\n", | |
"plt.figure(figsize=(10, 6)) # Adjust size as needed\n", | |
"plt.xlabel('Percentile')\n", | |
"plt.ylabel('sizesRelativeError')\n", | |
"plt.title('Mobile sizesRelativeError by Good LCP and Percentile')\n", | |
"\n", | |
"# Plot the data\n", | |
"plt.plot(good_lcp_data_mobile['percentile'], good_lcp_data_mobile['sizesRelativeError'], label='Good LCP', marker='o', linestyle='none')\n", | |
"plt.plot(bad_lcp_data_mobile['percentile'], bad_lcp_data_mobile['sizesRelativeError'], label='Bad LCP', marker='x', linestyle='none')\n", | |
"\n", | |
"# Add a legend and grid for clarity\n", | |
"plt.legend()\n", | |
"plt.grid(True)\n", | |
"\n", | |
"\n", | |
"plt.gca().yaxis.set_major_formatter(mticker.PercentFormatter())\n", | |
"\n", | |
"# Show the plot\n", | |
"plt.show()\n", | |
"\n", | |
"\n", | |
"\n", | |
"# Set up the plot\n", | |
"plt.figure(figsize=(10, 6)) # Adjust size as needed\n", | |
"plt.xlabel('Percentile')\n", | |
"plt.ylabel('sizesRelativeError')\n", | |
"plt.title('Desktop sizesRelativeError by Good LCP and Percentile')\n", | |
"\n", | |
"# Plot the data\n", | |
"plt.plot(good_lcp_data_desktop['percentile'], good_lcp_data_desktop['sizesRelativeError'], label='Good LCP', marker='o', linestyle='none')\n", | |
"plt.plot(bad_lcp_data_desktop['percentile'], bad_lcp_data_desktop['sizesRelativeError'], label='Bad LCP', marker='x', linestyle='none')\n", | |
"\n", | |
"# Add a legend and grid for clarity\n", | |
"plt.legend()\n", | |
"plt.grid(True)\n", | |
"# Show the plot\n", | |
"plt.show()\n", | |
"\n" | |
], | |
"metadata": { | |
"id": "lzR0w5C6icBV", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 1000 | |
}, | |
"outputId": "39f82cef-59da-4939-cf50-966c95e50dcf" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1000x600 with 1 Axes>" | |
], | |
"image/png": "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kz6D0vq5mBT30qVLValSJTk5OZljvnDhgl566SXzZ4K/v78GDBiguLg48+vDw8M1bNgw8/siICBA7733nhITE81j7v5+nDdvnvn764knntCvv/5qHterVy/NmjXLHFfS4+5Y0zIl8ccff1S9evXk6uoqd3d3tWzZUn/88Ue6cgrkRJz5AvKwUqVKqXbt2vrqq6/UokULSXd+oEVERKhLly6aMWOGxXjDMNSmTRtt27ZNL730kh577DFt2LBBr776qi5cuJDsL9EhISFavny5hgwZIicnJ3366adq3ry59u7dm66FCRITE9WmTRvt2LFDffv2VYUKFfT777/ro48+0l9//aU1a9ak+tq4uDg1a9ZMsbGxGjx4sLy9vXXhwgWtW7dO4eHh8vT0TPF1ixcvTtb25ptv6sqVK3Jzc5Mk/fHHH6pbt66KFy+u119/Xa6urlqxYoXatWunr7/+Wu3bt5d053quKVOm6OWXX1atWrUUGRmpffv26cCBA2ratOl9jz3pl6yCBQua27Zu3aoWLVqoRo0aGjdunOzs7DR//nw9/fTT+vnnn+97hmzBggVyc3PTiBEj5Obmpq1bt+rtt99WZGSk3n//fUnS2LFjFRERofPnz5u/pknHfK/OnTtr9OjRWrFihV599VWLvhUrVigoKMgce3rjjoiISHb21WQyqVChQhZt8+fPV0xMjPr27SsnJyd5eXmZ+zp16qSyZctq8uTJ5gLi5Zdf1sKFC/Xss89q5MiR2rNnj6ZMmaJjx45p9erVFts+fvy4unbtqn79+qlPnz569NFHU82tJP3777965pln1LlzZ3Xt2lUrVqzQgAED5OjoqBdffFFubm5q3769+ezF3Wd9v/rqKxmGkaxwutvatWslyeKMyIPcunVLDRs21MmTJzVo0CD5+/tr5cqV6tWrl8LDw82FYHq+v19++WUtWbJE3bp1U506dbR161a1bNkyzTE9yI8//qjbt2/r+eefz9R2kv5oce975l7/+9//1KZNG3Xv3l1xcXFatmyZOnXqpHXr1iU7rh07duibb77RK6+8Ind3d82YMUMdO3bU2bNnzfv5/fffFRQUpCJFimj8+PG6ffu2xo0bp2LFimXZ8aT3c3Hr1q1asWKFBg0apMKFC6tUqVK6ePGiatWqpfDwcPXt21fly5fXhQsXtGrVKkVHR8vR0VHR0dFq0KCBLly4oH79+qlEiRLauXOnxowZo7CwsGTXhgYHB+vGjRvq16+fTCaTpk2bpg4dOujvv/+Wg4OD+vXrp4sXL2rTpk0pfs6mxeLFi9WzZ081a9ZM7733nqKjozV79mw99dRTOnjwoPmPRUCuZADIc+bPn29IMn799Vfjk08+Mdzd3Y3o6GjDMAyjU6dORqNGjQzDMIySJUsaLVu2NL9uzZo1hiRj0qRJFtt79tlnDZPJZJw8edLcJsmQZOzbt8/cdubMGcPZ2dlo3759slhCQ0PNbQ0aNDAaNGhgfr548WLDzs7O+Pnnny32O2fOHEOS8csvv6R6rAcPHjQkGStXrrxvTkqWLGn07Nkz1f5p06YZkoxFixaZ2xo3bmxUqVLFiImJMbclJiYaderUMcqWLWtuq1atmkUeUzJu3DhDknH8+HHj6tWrxunTp40vv/zSyJ8/v1GkSBHj5s2b5u2XLVvWaNasmZGYmGh+fXR0tOHv7280bdrU3JZSbpO+znfr16+f4eLiYnEcLVu2NEqWLJlsbGhoqCHJmD9/vrmtdu3aRo0aNSzG7d271yJfGYk7pYeTk1OyWDw8PIwrV66kmM+uXbtatB86dMiQZLz88ssW7aNGjTIkGVu3bjW3lSxZ0pBkrF+/PlkeUtKgQQNDkvHhhx+a22JjY43HHnvMKFq0qBEXF2cYhmFs2LDBkGT8+OOPFq+vWrWqxfs+Je3btzckGeHh4Rbtt27dMq5evWp+/Pvvv+a+jz/+2JBkLFmyxNwWFxdn1K5d23BzczMiIyMNw0j793dSDl955RWLcd26dTMkGePGjbvvMSR93d5///1UxwwfPtyQZBw8ePC+20qS9J7ZvHmzcfXqVePcuXPGsmXLjEKFChn58+c3zp8/f9/X3/t9ERcXZ1SuXNl4+umnLdolGY6Ojhafdb/99pshyZg5c6a5rV27doazs7Nx5swZc9vRo0cNe3t7Iy2/WvXs2dNwdXU1fz1PnjxpTJ482TCZTEbVqlUNw0jf56Ikw87Ozvjjjz8sxr7wwguGnZ2d8euvvyaLIen79J133jFcXV2Nv/76y6L/9ddfN+zt7Y2zZ88ahvHf17VQoULG9evXzeO+/fZbQ5Kxdu1ac9vAgQNTzcO976F7P8du3LhhFChQwOjTp4/F6y5dumR4enomawdyG6YdAnlc586ddevWLa1bt043btzQunXrUp1y+MMPP8je3l5DhgyxaB85cqQMw9CPP/5o0V67dm3VqFHD/LxEiRJq27atNmzYkK7V2FauXKkKFSqofPnyunbtmvmRNKVo27Ztqb426czWhg0bFB0dneZ93m3btm0aM2aMBg8ebP5L/PXr17V161Z17txZN27cMMf0zz//qFmzZjpx4oQuXLggSSpQoID++OMPnThx4oH7evTRR1WkSBGVKlVKL774ogICAvTjjz+aFws4dOiQTpw4oW7duumff/4x7/fmzZtq3Lixtm/fbjEV6F53X6+UFHe9evUUHR2tP//8M0P5ee6557R//36LqZHLly+Xk5OT2rZtm+G4Z82apU2bNlk87n2PSVLHjh1VpEiRFGPr37+/xfMffvhBkjRixAiL9pEjR0qSvv/+e4t2f39/NWvWLC1pkHTnOp1+/fqZnzs6Oqpfv366cuWK9u/fL0lq0qSJfH19tXTpUvO4I0eO6PDhww88oxUZGSkp+ZnIOXPmqEiRIubH3Yvo/PDDD/L29ra45snBwUFDhgxRVFSUQkJCzOPS8v2dlMN7x6U0PTCjko7T3d09Xa9r0qSJihQpIj8/P3Xp0kVubm5avXq1ihcvft/X3f198e+//yoiIkL16tXTgQMHUtxHmTJlzM+rVq0qDw8P/f3335LurNC4YcMGtWvXTiVKlDCPq1ChQrreSzdv3jR/PQMCAvTGG2+odu3a5rOz6f1cbNCggSpWrGh+npiYqDVr1qh169YpXluZNBVw5cqVqlevngoWLGixnyZNmighISHZVPLnnnvO4kx90tTppPxk1qZNmxQeHq6uXbtaxGNvb6/AwMD7/jwAcgOmHQJ5XJEiRdSkSRMFBwcrOjpaCQkJevbZZ1Mce+bMGfn6+ib7hahChQrm/ruVLVs22TbKlSun6OhoXb16Vd7e3mmK8cSJEzp27Fiqv2BfuXIl1df6+/trxIgRmj59upYuXap69eqpTZs26tGjR6pTDu92/vx5Pffcc6pbt66mT59ubj958qQMw9Bbb72V6qpyV65cUfHixTVx4kS1bdtW5cqVU+XKldW8eXM9//zzqlq1arLXfP311/Lw8NDVq1c1Y8YMhYaGWvximFTA9ezZM9WYIyIiLH75udsff/yhN998U1u3bjX/gnv36zKiU6dOGjFihJYvX6433nhDhmFo5cqVatGihTw8PDIcd61atdK04EZKKyKm1nfmzBnZ2dklWzHR29tbBQoUSPYevt+2U+Lr65tsUY9y5cpJujOF9Mknn5SdnZ26d++u2bNnKzo6Wi4uLlq6dKmcnZ3VqVOn+24/6XsvKirK4v3bsWNH81TekSNHWvxx48yZMypbtmyy1Tzv/b5N6/d3Ug7vLkAkPXBKZnokvW9u3LiRrtfNmjVL5cqVU758+VSsWDE9+uijaVrFdN26dZo0aZIOHTpkcb1USvfkurugSlKwYEHztY1Xr17VrVu3Uvz8e/TRR83F64M4Ozubp5kmXYt19zVu6f1cvPe9fPXqVUVGRj5wCviJEyd0+PDhNO/n3vwkfU/ffe1nZiR9liQVmfdKeu8AuRXFF/AQ6Natm/r06aNLly6pRYsWKlCgQHaHZCExMVFVqlSxKH7u5ufnd9/Xf/jhh+rVq5e+/fZbbdy4UUOGDNGUKVO0e/fu+16wHxcXp2effVZOTk5asWKFxYqQSWdpRo0alepfs5N+wa9fv75OnTpl3v/nn3+ujz76SHPmzNHLL79s8Zr69eubVzts3bq1qlSpou7du2v//v2ys7Mz7/f999/XY489luJ+U7s+Kzw8XA0aNJCHh4cmTpyoMmXKyNnZWQcOHNBrr7123zNm9+Pr66t69eppxYoVeuONN7R7926dPXtW7733nnlMZuJ+kPutPphaX1pvdGutlQ1feOEFvf/++1qzZo26du2q4OBgtWrV6oF/EChfvrykO2fK6tata2738/Mzfx8knaHIzZKO8/fff0/1/ZKStBbsd/v555/Vpk0b1a9fX59++ql8fHzk4OCg+fPnKzg4ONn41FZnNVJZdCij7O3t1aRJk1T70/u5mNH3cmJiopo2barRo0en2J/0x4Uk1s5P0mfJ4sWLU/wDHsvUI7fjHQw8BNq3b69+/fpp9+7dWr58earjSpYsqc2bN+vGjRsWfx1Pmq5WsmRJi/EpTbP766+/5OLikupfUVNSpkwZ/fbbb2rcuHGaf2m+V5UqVVSlShW9+eab2rlzp+rWras5c+Zo0qRJqb5myJAhOnTokLZv357sQvnSpUtLujN9636/ICXx8vJS79691bt3b0VFRal+/foaP358suLrbm5ubho3bpx69+6tFStWqEuXLuazDR4eHmna791++ukn/fPPP/rmm29Uv359c3tKK8GlN8/PPfecXnnlFR0/flzLly+Xi4uLWrdube7PTNxZqWTJkkpMTNSJEyfMZ3Qk6fLlywoPD0/2Hk6vixcvJlvS/q+//pIki0UAKleurOrVq2vp0qV65JFHdPbsWc2cOfOB22/VqpWmTp2qpUuXWhRf91OyZEkdPnxYiYmJFmeB7v2+Tev3d1IOT506ZXG2KyuXt2/RooXs7e21ZMmSTC+68SBff/21nJ2dtWHDBotbTsyfPz9D2ytSpIjy58+f4udfVuYos5+LRYoUkYeHh44cOfLA/URFRWXp921GP8eT4pGkokWLZutnCWAtXPMFPATc3Nw0e/ZsjR8/3uIX5ns988wzSkhI0CeffGLR/tFHH8lkMplXTEyya9cui2smzp07p2+//VZBQUHpurdX586ddeHCBX322WfJ+m7duqWbN2+m+trIyEjdvn3boq1KlSqys7O77zL18+fP19y5czVr1qwUVw8sWrSoGjZsqLlz5yosLCxZ/9WrV83//+effyz63NzcFBAQkKZl8rt3765HHnnEfBapRo0aKlOmjD744ANFRUXdd7/3Ssr53X+BjouL06effppsrKura7qmIXbs2FH29vb66quvtHLlSrVq1cqiAMlM3FnpmWeekaRkK7QlnT3I7Ip9t2/ftlhSPC4uTnPnzlWRIkUsrn+U7tyva+PGjfr4449VqFChZN8/Kalbt66aNm2qefPm6dtvv01xzL1nGJ555hldunTJ4g8rt2/f1syZM+Xm5qYGDRqYx6Xl+zvp33tXQ703p5nh5+enPn36aOPGjSkWpYmJifrwww+zZHl7e3t7mUwmi6map0+fvu8qqg/aXrNmzbRmzRqdPXvW3H7s2DFt2LAhs+GaZeZzUbqzdH27du20du1a7du3L1l/0vuoc+fO5lsc3Cs8PDzZ52taJH02hIeHp/u1zZo1k4eHhyZPnqz4+Phk/bb6LAGshTNfwEPiftfiJGndurUaNWqksWPH6vTp06pWrZo2btyob7/9VsOGDUt2DUjlypXVrFkzi6XmJWnChAnpiu3555/XihUr1L9/f23btk1169ZVQkKC/vzzT61YscJ8H6aUbN26VYMGDVKnTp1Urlw53b59W4sXL5a9vb06duyY4muuXbumV155RRUrVpSTk5OWLFli0d++fXu5urpq1qxZeuqpp1SlShX16dNHpUuX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zc3tvjd1Q/oZhqHY2FglJibq7NmzKleuHDkGAABAhlB8WUF8fLwMw1CRIkWUP39+q+8vMTFRcXFxcnZ2pjCwAicnJxUpUkT//POPOc8AAABAevGbuhUxBTDv4GsJAACAzKL4AgAAAAAboPgCAAAAABug+MrBEhIN7Tr1j749dEG7Tv2jhMS8v+S5yWTSmjVrsjsMAAAAIMtRfOVQ64+E6an3tqrrZ7s1dNkhdf1st556b6vWHwmz6n4vXbqkoUOHKiAgQM7OzipWrJjq1q2r2bNnKzo62qr7TotevXqpXbt29x1z8OBBderUScWKFZOzs7PKli2rPn366K+//pIknT59WiaTyfwoVKiQgoKCdPDgQRscAQAAAB5WFF850PojYRqw5IDCImIs2i9FxGjAkgNWK8D+/vtvVa9eXRs3btTkyZN18OBB7dq1S6NHj9a6deu0efNmq+w3K61bt05PPvmkYmNjtXTpUh07dkxLliyRp6en3nrrLYuxmzdvVlhYmDZs2KCoqCi1aNFC4eHh2RM4AAAA8jyKrxwmIdHQhLVHldIEw6S2CWuPWmUK4iuvvKJ8+fJp37596ty5sypUqKDSpUurbdu2+v7779W6dWvz2LNnz6pt27Zyc3OTh4eHOnfurMuXL1tsb/bs2SpTpowcHR316KOPavHixRb9J06cUP369eXs7KyKFStq06ZNmYo/OjpavXv31jPPPKPvvvtOTZo0kb+/vwIDA/XBBx9o7ty5FuMLFSokb29v1axZUx988IEuX76sPXv2ZCoGAAAAIDUUXznM3tDryc543c2QFBYRo72h17N0v//88482btyogQMHytXVNcUxScutJyYmqm3btrp+/bpCQkK0adMm/f3333ruuefMY1evXq2hQ4dq5MiROnLkiPr166fevXtr27Zt5m106NBBjo6O2rNnj+bMmaPXXnstU8ewYcMGXbt2TaNHj06xv0CBAqm+Nul+bHFxcZmKAQAAAFa0bYoUMi3lvpBpd/pzMIqvHObKjdQLr4yMS6uTJ0/KMAw9+uijFu2FCxeWm5ub3NzczMXRli1b9Pvvvys4OFg1atRQYGCgFi1apJCQEP3666+SpA8++EC9evXSK6+8onLlymnEiBHq0KGDPvjgA0l3pvz9+eefWrRokapVq6b69etr8uTJmTqGEydOSJLKly+frteFh4fr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AADwUMnW+3zt27dP1atXV/Xq1SVJI0aMUPXq1fX222/L3t5ehw8fVps2bVSuXDm99NJLqlGjhn7++WeL6X9Lly5V+fLl1bhxYz3zzDN66qmnNG/evGT7mjdvnooVK6ZWrVqZ28aPH6+YmBgFBgYqICBAAwcOtP5BAwAAAHgoZeuZr4YNG+p+iy1u2LDhgdvw8vJScHDwA8f169dP/fr1s2grWrSoNm/e/OBAAQAAACCTsvXMFwAAAAA8LCi+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAACArLBtihQyLeW+kGl3+vFQy9bia/v27WrdurV8fX1lMpm0Zs0ac198fLxee+01ValSRa6urvL19dULL7ygixcvWmyjVKlSMplMFo+pU6ea+0+fPq369evL1dVV9evX1+nTpy1e36pVK3399dfWPEwAAAA8DOzspW3vJi/AQqbdabezz564kGNka/F18+ZNVatWTbNmzUrWFx0drQMHDuitt97SgQMH9M033+j48eNq06ZNsrETJ05UWFiY+TF48GBz38iRI1W8eHEdOnRIPj4+GjVqlLlv+fLlsrOzU8eOHa1zgAAAAHh4NBgtNRorbXtXdj9/IEl3/t327p32BqOzOUBkt3zZufMWLVqoRYsWKfZ5enpq06ZNFm2ffPKJatWqpbNnz6pEiRLmdnd3d3l7e6e4nWPHjmn69OkqW7asevXqZS6+wsPD9eabb2rr1q1pijU2NlaxsbHm55GRkZLunKGLj49P0zasJWn/2R1HXkV+rYv8Whf5tS7ya13k17rIr5XUGS67hATZb5+qVqZ8sjduK6H+60qsM1wi11kqJ72H0xqDyTAMw8qxpInJZNLq1avVrl27VMds3rxZQUFBCg8Pl4eHh6Q70w5jYmIUHx+vEiVKqFu3bho+fLjy5btTV3bt2lXFixfXtGnTNHLkSF26dElfffWV+vTpo0qVKmnYsGFpim/8+PGaMGFCsvbg4GC5uLik+3gBAACQd7U69OKdwsuUT+se+zK7w4GVRUdHq1u3boqIiDDXKSnJNcVXTEyM6tatq/Lly2vp0qXm9unTp+vxxx+Xl5eXdu7cqTFjxqh3796aPn26JOnChQvq16+fDh8+rKpVq2ru3Lk6deqURo4cqQ0bNqh///7at2+fgoKCNGPGDDk6Oqa4/5TOfPn5+enatWv3TbAtxMfHa9OmTWratKkcHByyNZa8iPxaF/m1LvJrXeTXusivdZFf67H7+QPZb5+qhLvPfNUb9eAXIl1y0ns4MjJShQsXfmDxla3TDtMqPj5enTt3lmEYmj17tkXfiBEjzP+vWrWqHB0d1a9fP02ZMkVOTk4qXry41q1bZx4TGxurZs2aaeHChZo0aZLc3d11/PhxNW/eXHPnzrW4XuxuTk5OcnJyStbu4OCQ7V/sJDkplryI/FoX+bUu8mtd5Ne6yK91kd8sFjJN2j5VCfVf17obFdXK/ajst0+Vvb0913xZSU54D6d1/zl+qfmkwuvMmTPatGnTA88yBQYG6vbt28lWNUwyefJkBQUFqUaNGvrpp5/UsWNHOTg4qEOHDvrpp5+y/gAAAADwcEha1bDRWPOZrsR6o8yLcKS6DD0eGjn6zFdS4XXixAlt27ZNhQoVeuBrDh06JDs7OxUtWjRZ37FjxxQcHKxDhw5JkhISEiwu1EtISMjS+AEAAPAQSUz4b1XDuxdgSDrjlcjvmg+7bC2+oqKidPLkSfPz0NBQHTp0SF5eXvLx8dGzzz6rAwcOaN26dUpISNClS5ckSV5eXnJ0dNSuXbu0Z88eNWrUSO7u7tq1a5eGDx+uHj16qGDBghb7MgxDffv21UcffSRXV1dJUt26dfXZZ5+pXLlyWrRokbp27Wq7gwcAAEDe0mhM6n1MOYSyedrhvn37VL16dVWvXl3Sneu3qlevrrffflsXLlzQd999p/Pnz+uxxx6Tj4+P+bFz505Jd67DWrZsmRo0aKBKlSrp3Xff1fDhwzVv3rxk+5o3b56KFSumVq1amdvGjx+vmJgYBQYGKiAgQAMHDrTNgQMAAAB46GTrma+GDRvqfostPmghxscff1y7d+9O07769eunfv36WbQVLVpUmzdvTtPrAQAAACAzcvyCGwAAAACQF6S7+DIMQ2fPnlVMTIw14gEAAACAPClDxVdAQIDOnTtnjXgAAAAAIE9Kd/FlZ2ensmXL6p9//rFGPAAAAECulpBoaE/ode2/ZtKe0OtKSLz/OgZ4eGRowY2pU6fq1Vdf1ezZs1W5cuWsjgkAAADIldYfCdOEtUcVFhEjyV6LTuyTj6ezxrWuqOaVfbI7PGSzDBVfL7zwgqKjo1WtWjU5Ojoqf/78Fv3Xr1/PkuAAAACA3GL9kTANWHJA957nuhQRowFLDmh2j8cpwB5yGSq+Pv744ywOAwAAAMi9EhINTVh7NFnhJUmGJJOkCWuPqmlFb9nbmWwcHXKKDBVfPXv2zOo4AAAAgFxrb+j1/59qmDJDUlhEjPaGXlftMoVsFxhylAzfZDkhIUFr1qzRsWPHJEmVKlVSmzZtZG9vn2XBAQAAALnBlRtpuw1TWschb8pQ8XXy5Ek988wzunDhgh599FFJ0pQpU+Tn56fvv/9eZcqUydIgAQAAgJysqLtzlo5D3pTupeYlaciQISpTpozOnTunAwcO6MCBAzp79qz8/f01ZMiQrI4RAAAAyNFq+XvJx9NZqV3NZZLk4+msWv5etgwLOUyGiq+QkBBNmzZNXl7/vXkKFSqkqVOnKiQkJMuCAwAAAHIDezuTxrWuKEnJCrCk5+NaV2SxjYdchoovJycn3bhxI1l7VFSUHB0dMx0UAAAAkNs0r+yj2T0el7en5dRCb09nlpmHpAxe89WqVSv17dtXX3zxhWrVqiVJ2rNnj/r37682bdpkaYAAAABAbtG8so+aVvTWrpNXtPHnPQqqF6jaAUU54wVJGTzzNWPGDJUpU0a1a9eWs7OznJ2dVbduXQUEBOh///tfVscIAAAA5Br2diYF+nupRmFDgf5eFF4wS/eZL8MwFBkZqWXLlunChQvmpeYrVKiggICALA8QAAAAAPKCDBVfAQEB+uOPP1S2bFkKLgAAAABIg3RPO7Szs1PZsmX1zz//WCMeAAAAAMiTMnTN19SpU/Xqq6/qyJEjWR0PAAAAAORJGVrt8IUXXlB0dLSqVasmR0dH5c+f36L/+vXrWRIcAAAAAOQVGSq+Pv744ywOAwAAAADytnQXX/Hx8QoJCdFbb70lf39/a8QEAAAAAHlOuq/5cnBw0Ndff22NWAAAAAAgz8rQghvt2rXTmjVrsjgUAAAAAMi7MnTNV9myZTVx4kT98ssvqlGjhlxdXS36hwwZkiXBAQAAAEBekaHi64svvlCBAgW0f/9+7d+/36LPZDJRfAEAAADAPTJUfIWGhmZ1HAAAAACQp2Xomi8AAAAAQPqkq/iqWLGixQ2UX3nlFV27ds38/MqVK3Jxccm66AAAAAAgj0hX8fXnn3/q9u3b5udLlixRZGSk+blhGIqJicm66AAAAAAgj8jUtEPDMJK1mUymzGwSAAAAAPIkrvkCAAAAABtIV/FlMpmSndniTBcAAAAAPFi6lpo3DEONGzdWvnx3Xnbr1i21bt1ajo6OkmRxPRgAAAAA4D/pKr7GjRtn8bxt27bJxnTs2DFzEQEAAABAHpSp4gsAAAAAkDYZXnDj9u3b2rx5s+bOnasbN25Iki5evKioqKgsCw4AAAAA8op0nflKcubMGTVv3lxnz55VbGysmjZtKnd3d7333nuKjY3VnDlzsjpOAAAAAMjVMnTma+jQoapZs6b+/fdf5c+f39zevn17bdmyJcuCAwAAAIC8IkNnvn7++Wft3LnTvMphklKlSunChQtZEhgAAAAA5CUZOvOVmJiohISEZO3nz5+Xu7t7poMCAAAAgLwmQ8VXUFCQPv74Y/Nzk8mkqKgojRs3Ts8880xWxQYAAAAAeUaGph1++OGHatasmSpWrKiYmBh169ZNJ06cUOHChfXVV19ldYwAAAAAkOtlqPh65JFH9Ntvv2nZsmU6fPiwoqKi9NJLL6l79+4WC3AAAAAAAO7I0LTDmJgY5cuXTz169NC0adP06aef6uWXX0534bV9+3a1bt1avr6+MplMWrNmjUW/YRh6++235ePjo/z586tJkyY6ceKExZjr16+re/fu8vDwUIECBfTSSy9Z3Gvs9OnTql+/vlxdXVW/fn2dPn3a4vWtWrXS119/na64AQAAACC9MlR8FS1aVD179tSmTZuUmJiY4Z3fvHlT1apV06xZs1LsnzZtmmbMmKE5c+Zoz549cnV1VbNmzRQTE2Me0717d/3xxx/atGmT1q1bp+3bt6tv377m/pEjR6p48eI6dOiQfHx8NGrUKHPf8uXLZWdnp44dO2b4GAAAAAAgLTJUfC1cuFDR0dFq27atihcvrmHDhmnfvn3p3k6LFi00adIktW/fPlmfYRj6+OOP9eabb6pt27aqWrWqFi1apIsXL5rPkB07dkzr16/X559/rsDAQD311FOaOXOmli1bposXL5rH9OzZU2XLllWvXr107NgxSVJ4eLjefPPNVAs/AAAAAMhKGbrmq3379mrfvr1u3LihVatW6auvvtKTTz6p0qVLq0ePHnr77bczHVhoaKguXbqkJk2amNs8PT0VGBioXbt2qUuXLtq1a5cKFCigmjVrmsc0adJEdnZ22rNnj9q3b69q1app8+bNCgoK0saNG1W1alVJ0quvvqqBAwfKz88vTfHExsYqNjbW/DwyMlKSFB8fr/j4+Ewfb2Yk7T+748iryK91kV/rIr/WRX6ti/xaF/m1LvJrfTkpx2mNwWQYhpEVOzx69Ki6d++uw4cPp3gPsAcGYjJp9erVateunSRp586dqlu3ri5evCgfHx/zuM6dO8tkMmn58uWaPHmyFi5cqOPHj1tsq2jRopowYYIGDBigCxcuqF+/fjp8+LCqVq2quXPn6tSpUxo5cqQ2bNig/v37a9++fQoKCtKMGTOS3Tg6yfjx4zVhwoRk7cHBwXJxcUn38QIAAADIG6Kjo9WtWzdFRETIw8Mj1XEZOvOVJCYmRt99952Cg4O1fv16FStWTK+++mpmNpnlihcvrnXr1pmfx8bGqlmzZlq4cKEmTZokd3d3HT9+XM2bN9fcuXM1ePDgFLczZswYjRgxwvw8MjJSfn5+CgoKum+CbSE+Pl6bNm1S06ZN5eDgkK2x5EXk17rIr3WRX+siv9ZFfq2L/FoX+bW+nJTjpFlxD5Kh4mvDhg0KDg7WmjVrlC9fPj377LPauHGj6tevn5HNpcjb21uSdPnyZYszX5cvX9Zjjz1mHnPlyhWL192+fVvXr183v/5ekydPVlBQkGrUqKE+ffpo0qRJcnBwUIcOHbR169ZUiy8nJyc5OTkla3dwcMj2L3aSnBRLXkR+rYv8Whf5tS7ya13k17rIr3WRX+vLCTlO6/4ztOBG+/btdevWLS1atEiXLl3S3Llzs7TwkiR/f395e3try5Yt5rbIyEjt2bNHtWvXliTVrl1b4eHh2r9/v3nM1q1blZiYqMDAwGTbPHbsmIKDg/XOO+9IkhISEizmimZkuiQAAAAApEWGznxdvnxZ7u7umd55VFSUTp48aX4eGhqqQ4cOycvLSyVKlNCwYcM0adIklS1bVv7+/nrrrbfk6+trvi6sQoUKat68ufr06aM5c+YoPj5egwYNUpcuXeTr62uxL8Mw1LdvX3300UdydXWVJNWtW1efffaZypUrp0WLFqlr166ZPiYAAAAASEmai6/IyEjztU2GYdx3XmNar4Hat2+fGjVqZH6edE1Vz549tWDBAo0ePVo3b95U3759FR4erqeeekrr16+Xs7Oz+TVLly7VoEGD1LhxY/M9u2bMmJFsX/PmzVOxYsXUqlUrc9v48ePVrVs3BQYGqnnz5ho4cGCa4gYAAACA9Epz8VWwYEGFhYWpaNGiKlCggEwmU7IxhmHIZDKlefpew4YNdb/FFk0mkyZOnKiJEyemOsbLy0vBwcEP3Fe/fv3Ur18/i7aiRYtq8+bNaYoVAAAAADIjzcXX1q1b5eXlJUnatm2b1QICAAAAgLwozcVXgwYNzP/39/eXn59fsrNfhmHo3LlzWRcdAAAAAOQRGVrt0N/fX1evXk3Wfv36dfn7+2c6KAAAAADIazJUfCVd23WvqKgoi8UwAAAAAAB3pGup+aTVCE0mk9566y25uLiY+xISErRnzx7zDZABAAAAAP9JV/F18OBBSXfOfP3+++9ydHQ09zk6OqpatWoaNWpU1kYIAAAAAHlAuoqvpFUOe/furf/9739pvp8XAAAAADzs0lV8JZk/f35WxwEAAAAAeVqGii9J2rdvn1asWKGzZ88qLi7Oou+bb77JdGAAAAAAkJdkaLXDZcuWqU6dOjp27JhWr16t+Ph4/fHHH9q6das8PT2zOkYAAAAAyPUyVHxNnjxZH330kdauXStHR0f973//059//qnOnTurRIkSWR0jAAAAAOR6GSq+Tp06pZYtW0q6s8rhzZs3ZTKZNHz4cM2bNy9LAwQAAACAvCBDxVfBggV148YNSVLx4sV15MgRSVJ4eLiio6OzLjoAAAAAyCMytOBG/fr1tWnTJlWpUkWdOnXS0KFDtXXrVm3atEmNGzfO6hgBAAAAINfLUPH1ySefKCYmRpI0duxYOTg4aOfOnerYsaPefPPNLA0QAAAAAPKCDBVfXl5e5v/b2dnp9ddfz7KAAAAAACAvSnPxFRkZmeaNenh4ZCgYAAAAAMir0lx8FShQQCaT6b5jDMOQyWRSQkJCpgMDAAAAgLwkzcXXtm3brBkHAAAAAORpaS6+GjRoYM04AAAAACBPy9B9viTp559/Vo8ePVSnTh1duHBBkrR48WLt2LEjy4IDAAAAgLwiQ8XX119/rWbNmil//vw6cOCAYmNjJUkRERGaPHlylgYIAAAAAHlBhoqvSZMmac6cOfrss8/k4OBgbq9bt64OHDiQZcEBAAAgC22bIoVMS7kvZNqdfgBWk6Hi6/jx46pfv36ydk9PT4WHh2c2JgAAAFiDnb207d3kBVjItDvtdvbZExfwkMjQTZa9vb118uRJlSpVyqJ9x44dKl26dFbEBQAAgKzWYPSdf7e9K7uEBEkVZffzB9L2qVKjsf/1A7CKDBVfffr00dChQ/Xll1/KZDLp4sWL2rVrl0aNGqW33norq2MEAABAVvn/Ast+27tqZcone+M2hRdgIxkqvl5//XUlJiaqcePGio6OVv369eXk5KRRo0Zp8ODBWR0jAAAAslKD0TK2vy/7hDgZ9o4yUXgBNpGha75MJpPGjh2r69ev68iRI9q9e7euXr2qd955R7du3crqGAEAAJCVQqbJlBCnBFM+mRLiUl+EA0CWyvB9viTJ0dFRFStWVK1ateTg4KDp06fL398/q2IDAABAVvv/xTUS6r+udY99qYT6r6e8CAeALJeu4is2NlZjxoxRzZo1VadOHa1Zs0aSNH/+fPn7++ujjz7S8OHDrREnAAAAMitpVcNGY5VYb5Qk3fm30VgKMMAG0nXN19tvv625c+eqSZMm2rlzpzp16qTevXtr9+7dmj59ujp16iR7e5YoBQAAyJESE/5bXCM+/r/2pGu+EhOyJy7gIZGu4mvlypVatGiR2rRpoyNHjqhq1aq6ffu2fvvtN5lMJmvFCAAAgKzQaEzqfSy6AVhduqYdnj9/XjVq1JAkVa5cWU5OTho+fDiFFwAAAAA8QLqKr4SEBDk6Opqf58uXT25ublkeFAAAAADkNemadmgYhnr16iUnJydJUkxMjPr37y9XV1eLcd98803WRQgAAAAAeUC6iq+ePXtaPO/Ro0eWBgMAAAAAeVW6iq/58+dbKw4AAAAAyNMydZPlJJGRkVqzZo3+/PPPrNgcAAAAAOQ5GSq+OnfurE8++USSdOvWLdWsWVOdO3dWlSpV9PXXX2dpgAAAAACQF2So+Nq+fbvq1asnSVq9erUMw1B4eLhmzJihSZMmZWmAAAAAAJAXZKj4ioiIkJeXlyRp/fr16tixo1xcXNSyZUudOHEiSwMEAAAAgLwgQ8WXn5+fdu3apZs3b2r9+vUKCgqSJP37779ydnbO0gABAAAAIC9I12qHSYYNG6bu3bvLzc1NJUqUUMOGDSXdmY5YpUqVrIwPAAAAAPKEDBVfr7zyimrVqqVz586padOmsrO7cwKtdOnSXPMFAAAAACnIUPElSTVr1lTVqlUVGhqqMmXKKF++fGrZsmVWxgYAAAAAeUaGrvmKjo7WSy+9JBcXF1WqVElnz56VJA0ePFhTp07N0gBLlSolk8mU7DFw4EBJUsOGDZP19e/f3/z669evq3Xr1nJzc1P16tV18OBBi+0PHDhQH374YZbGDAAAAAD3ylDxNWbMGP3222/66aefLBbYaNKkiZYvX55lwUnSr7/+qrCwMPNj06ZNkqROnTqZx/Tp08dizLRp08x97777rm7cuKEDBw6oYcOG6tOnj7lv9+7d2rNnj4YNG5alMQMAAADAvTI07XDNmjVavny5nnzySZlMJnN7pUqVdOrUqSwLTpKKFCli8Xzq1KkqU6aMGjRoYG5zcXGRt7d3iq8/duyYunTponLlyqlv376aN2+eJCk+Pl79+/fX559/Lnt7+yyNGQAAAADulaHi6+rVqypatGiy9ps3b1oUY1ktLi5OS5Ys0YgRIyz2s3TpUi1ZskTe3t5q3bq13nrrLbm4uEiSqlWrpq1bt+rll1/Whg0bVLVqVUnStGnT1LBhQ9WsWTNN+46NjVVsbKz5eWRkpKQ7RVx8fHxWHWKGJO0/u+PIq8ivdZFf6yK/1kV+rYv8Whf5tS7ya305KcdpjcFkGIaR3o3Xr19fnTp10uDBg+Xu7q7Dhw/L399fgwcP1okTJ7R+/fp0B5wWK1asULdu3XT27Fn5+vpKkubNm6eSJUvK19dXhw8f1muvvaZatWrpm2++kXTnhtADBgzQL7/8olKlSmn27NlycHBQy5YttWvXLo0dO1YbN25UzZo19dlnn8nT0zPFfY8fP14TJkxI1h4cHGwu9AAAAAA8fKKjo9WtWzdFRETIw8Mj1XEZKr527NihFi1aqEePHlqwYIH69euno0ePaufOnQoJCVGNGjUyFXxqmjVrJkdHR61duzbVMVu3blXjxo118uRJlSlTJsUxTz/9tIYOHaozZ85o3bp1+v7779WnTx8VKlQo1cU3Ujrz5efnp2vXrt03wbYQHx+vTZs2qWnTpnJwcMjWWPIi8mtd5Ne6yK91kV/rIr/WRX6ti/xaX07KcWRkpAoXLvzA4itD0w6feuopHTp0SFOnTlWVKlW0ceNGPf7449q1a5fVbrJ85swZbd682XxGKzWBgYGSlGrxNX/+fBUoUEBt27ZVhw4d1K5dOzk4OKhTp056++23U92uk5OTnJyckrU7ODhk+xc7SU6KJS8iv9ZFfq2L/FoX+bUu8mtd5Ne6yK/15YQcp3X/Gb7PV5kyZfTZZ59l9OXpNn/+fBUtWvSB9xI7dOiQJMnHxydZ39WrVzVx4kTt2LFDkpSQkGAxVzQhISFrgwYAAACA/5ehpeaffvrpFK9/+vfff/X0009nOqh7JSYmav78+erZs6fy5fuvXjx16pTeeecd7d+/X6dPn9Z3332nF154QfXr1zcvrHG3YcOGaeTIkSpevLgkqW7dulq8eLGOHTumefPmqW7dulkeOwAAAABIGSy+fvrpJ33yySdq166dbt68aW6Pi4tTSEhIlgWXZPPmzTp79qxefPFFi3ZHR0dt3rxZQUFBKl++vEaOHKmOHTumeE3Yhg0bdPLkSb3yyivmtkGDBql06dIKDAxUXFycxo0bl+WxAwAAAICUiWmHmzdvVr9+/fTkk09q7dq1KlWqVBaGZSkoKEgprQvi5+eX5mKvWbNmatasmUWbi4uLVqxYkSUxAgAAAMD9ZOjMl3TnmqqQkBBVqVJFTzzxhH766acsDAsAAAAA8pYMFV9JNzh2cnJScHCwhg4dqubNm+vTTz/N0uAAAAAAIK/I0LTDe6cAvvnmm6pQoYJ69uyZJUEBAAAAQF6ToeIrNDRUhQsXtmjr2LGjHn30Ue3fvz9LAgMAAACAvCRDxVfJkiVTbK9cubIqV66cqYAAAAAAIC9Kc/HVoUMHLViwQB4eHurQocN9x37zzTeZDgwAAAAA8pI0F1+enp7mhTY8PT2tFhAAAAAA5EVpLr7mz59v/v+nn36qxMREubq6SpJOnz6tNWvWqEKFCsnupQUAAICcJSHR0J7Q69p/zaRCoddVO6Co7O1M2R0WkOdl6Jqvtm3bqkOHDurfv7/Cw8P15JNPysHBQdeuXdP06dM1YMCArI4TAAAAWWD9kTBNWHtUYRExkuy16MQ++Xg6a1zrimpe2Se7wwPytAzd5+vAgQOqV6+eJGnVqlUqVqyYzpw5o0WLFmnGjBlZGiAAAACyxvojYRqw5MD/F17/uRQRowFLDmj9kbBsigx4OGSo+IqOjpa7u7skaePGjerQoYPs7Oz05JNP6syZM1kaIAAAADIvIdHQhLVHZaTQl9Q2Ye1RJSSmNAJAVshQ8RUQEKA1a9bo3Llz2rBhg4KCgiRJV65ckYeHR5YGCAAAgMzbG3o92RmvuxmSwiJitDf0uu2CAh4yGSq+3n77bY0aNUqlSpVSYGCgateuLenOWbDq1atnaYAAAADIvCs3Ui+8MjIOQPplaMGNZ599Vk899ZTCwsJUrVo1c3vjxo3Vvn37LAsOAAAAWaOou3OWjgOQfhkqviTJ29tb3t7eFm21atXKdEAAAADIerX8veTj6axLETEpXvdlkuTt6axa/l62Dg14aGRo2iEAAAByF3s7k8a1rijpTqF1t6Tn41pX5H5fgBVRfAEAADwkmlf20ewej8vb03Jqobens2b3eJz7fAFWluFphwAAAMh9mlf2UdOK3tp18oo2/rxHQfUCVTugKGe8ABug+AIAAHjI2NuZFOjvpX+OGQr096LwAmyEaYcAAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAzm6+Bo/frxMJpPFo3z58ub+mJgYDRw4UIUKFZKbm5s6duyoy5cvm/uvX7+u1q1by83NTdWrV9fBgwcttj9w4EB9+OGHNjseAAAAAA+vHF18SVKlSpUUFhZmfuzYscPcN3z4cK1du1YrV65USEiILl68qA4dOpj73333Xd24cUMHDhxQw4YN1adPH3Pf7t27tWfPHg0bNsyWhwMAAADgIZUvuwN4kHz58snb2ztZe0REhL744gsFBwfr6aefliTNnz9fFSpU0O7du/Xkk0/q2LFj6tKli8qVK6e+fftq3rx5kqT4+Hj1799fn3/+uezt7W16PAAAAAAeTjm++Dpx4oR8fX3l7Oys2rVra8qUKSpRooT279+v+Ph4NWnSxDy2fPnyKlGihHbt2qUnn3xS1apV09atW/Xyyy9rw4YNqlq1qiRp2rRpatiwoWrWrJnmOGJjYxUbG2t+HhkZKelOIRcfH59FR5sxSfvP7jjyKvJrXeTXusivdZFf6yK/1kV+rYv8Wl9OynFaYzAZhmFYOZYM+/HHHxUVFaVHH31UYWFhmjBhgi5cuKAjR45o7dq16t27t0VBJEm1atVSo0aN9N577ykiIkIDBgzQL7/8olKlSmn27NlycHBQy5YttWvXLo0dO1YbN25UzZo19dlnn8nT0zPVWMaPH68JEyYkaw8ODpaLi0uWHzsAAACA3CE6OlrdunVTRESEPDw8Uh2Xo4uve4WHh6tkyZKaPn268ufP/8DiKyVPP/20hg4dqjNnzmjdunX6/vvv1adPHxUqVOi+i2+kdObLz89P165du2+CbSE+Pl6bNm1S06ZN5eDgkK2x5EXk17rIr3WRX+siv9ZFfq2L/FoX+bW+nJTjyMhIFS5c+IHFV46fdni3AgUKqFy5cjp58qSaNm2quLg4hYeHq0CBAuYxly9fTvEaMenONWEFChRQ27Zt1aFDB7Vr104ODg7q1KmT3n777fvu28nJSU5OTsnaHRwcsv2LnSQnxZIXkV/rIr/WRX6ti/xaF/m1LvJrXeTX+nJCjtO6/xy/2uHdoqKidOrUKfn4+KhGjRpycHDQli1bzP3Hjx/X2bNnVbt27WSvvXr1qiZOnKiZM2dKkhISEizmiSYkJNjmIAAAAAA8lHL0ma9Ro0apdevWKlmypC5evKhx48bJ3t5eXbt2laenp1566SWNGDFCXl5e8vDw0ODBg1W7dm09+eSTybY1bNgwjRw5UsWLF5ck1a1bV4sXL1ZQUJDmzZununXr2vrwAAAAADxEcnTxdf78eXXt2lX//POPihQpoqeeekq7d+9WkSJFJEkfffSR7Ozs1LFjR8XGxqpZs2b69NNPk21nw4YNOnnypBYvXmxuGzRokPbt26fAwEDVqlVL48aNs9lxAQAAAHj45Ojia9myZfftd3Z21qxZszRr1qz7jmvWrJmaNWtm0ebi4qIVK1ZkOkYAAAAASItcdc0XAAAAAORWFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AACDn2DZFCpmWcl/ItDv9AJBLUXwBAICcw85e2vZu8gIsZNqddjv77IkLALJAvuwOAAAAwKzB6Dv/bntXdgkJkirK7ucPpO1TpUZj/+sHgFyI4gsAAOQs/19g2W97V61M+WRv3KbwApAnMO0QAADkPA1Gy7B3lL1xW4a9I4UXgDyB4gsAAOQ8IdNkSohTgimfTAlxqS/CAQC5CNMOAQBAzvL/i2sk1H9d625UVCv3o7Lf9u6dPs6AAcjFKL4AAEDOkbSqYaOxSqwzXPrhByXWGyV7+/9fBVGiAAOQa1F8AQCAnCMx4b/FNeLj/2tPKrgSE7InLgDIAhRfAAAg52g0JvU+zngByOVYcAMAAAAAbIDiCwAAAABsgOILAAAAAGyA4gsAAAAAbIDiCwAAAABsgOILAAAAAGyA4gsAAAAAbIDiCwAAAABsgOILAAAAAGyA4gsAAAAAbIDiCwAAAABsgOILAAAAAGyA4gsAAAAAbIDiCwAAAABsgOILAAAAAGyA4gsAAAAAbIDiCwAA5DgJiYb2hF7X/msm7Qm9roREI7tDAoBMy5fdAQAAANxt/ZEwTVh7VGERMZLstejEPvl4Omtc64pqXtknu8MDgAzjzBcAAMgx1h8J04AlB/6/8PrPpYgYDVhyQOuPhGVTZACQeRRfAAAgR0hINDRh7VGlNMEwqW3C2qNMQQSQa1F8AQCAHGFv6PVkZ7zuZkgKi4jR3tDrtgsKALIQxRcAAMgRrtxIvfDKyDgAyGkovgAAQI5Q1N05S8cBQE5D8QUAAHKEWv5e8vF0limVfpMkH09n1fL3smVYAJBlKL4AAECOYG9n0rjWFSUpWQGW9Hxc64qyt0utPAOAnC1HF19TpkzRE088IXd3dxUtWlTt2rXT8ePHLcY0bNhQJpPJ4tG/f39z//Xr19W6dWu5ubmpevXqOnjwoMXrBw4cqA8//NAmxwMAAO6veWUfze7xuLw9LacWens6a3aPx7nPF4BcLUffZDkkJEQDBw7UE088odu3b+uNN95QUFCQjh49KldXV/O4Pn36aOLEiebnLi4u5v+/++67unHjhg4cOKDZs2erT58+2rdvnyRp9+7d2rNnj2bMmGG7gwIAAPfVvLKPmlb01q6TV7Tx5z0Kqheo2gFFOeMFINfL0cXX+vXrLZ4vWLBARYsW1f79+1W/fn1zu4uLi7y9vVPcxrFjx9SlSxeVK1dOffv21bx58yRJ8fHx6t+/vz7//HPZ29tb7yAAAEC62duZFOjvpX+OGQr096LwApAn5Oji614RERGSJC8vywttly5dqiVLlsjb21utW7fWW2+9ZT77Va1aNW3dulUvv/yyNmzYoKpVq0qSpk2bpoYNG6pmzZpp2ndsbKxiY2PNzyMjIyXdKeLi4+MzfWyZkbT/7I4jryK/1kV+rYv8Whf5tS7ya13k17rIr/XlpBynNQaTYRi54jbxiYmJatOmjcLDw7Vjxw5z+7x581SyZEn5+vrq8OHDeu2111SrVi198803ku4UbAMGDNAvv/yiUqVKafbs2XJwcFDLli21a9cujR07Vhs3blTNmjX12WefydPTM8X9jx8/XhMmTEjWHhwcbDHNEQAAAMDDJTo6Wt26dVNERIQ8PDxSHZdriq8BAwboxx9/1I4dO/TII4+kOm7r1q1q3LixTp48qTJlyqQ45umnn9bQoUN15swZrVu3Tt9//7369OmjQoUKpbr4Rkpnvvz8/HTt2rX7JtgW4uPjtWnTJjVt2lQODg7ZGkteRH6ti/xaF/m1LvJrXeTXusivdZFf68tJOY6MjFThwoUfWHzlimmHgwYN0rp167R9+/b7Fl6SFBgYKEmpFl/z589XgQIF1LZtW3Xo0EHt2rWTg4ODOnXqpLfffjvV7To5OcnJySlZu4ODQ7Z/sZPkpFjyIvJrXeTXusivdZFf6yK/1kV+rYv8Wl9OyHFa95+jiy/DMDR48GCtXr1aP/30k/z9/R/4mkOHDkmSfHySL0V79epVTZw40TxtMSEhwWKuaEJCQtYFDwAAAAB3ydHF18CBAxUcHKxvv/1W7u7uunTpkiTJ09NT+fPn16lTpxQcHKxnnnlGhQoV0uHDhzV8+HDVr1/fvLDG3YYNG6aRI0eqePHikqS6detq8eLFCgoK0rx581S3bl2bHh8AAACAh0eOvsny7NmzFRERoYYNG8rHx8f8WL58uSTJ0dFRmzdvVlBQkMqXL6+RI0eqY8eOWrt2bbJtbdiwQSdPntQrr7xibhs0aJBKly6twMBAxcXFady4cTY7NgAAAAAPlxx95utBa4H4+fkpJCQkTdtq1qyZmjVrZtHm4uKiFStWZDg+AAAAAEirHH3mCwCAHGfbFClkWsp9IdPu9AMAkAKKLwAA0sPOXtr2bvICLGTanXY7++yJCwCQ4+XoaYcAAOQ4DUbf+Xfbu7JLSJBUUXY/fyBtnyo1GvtfPwAA96D4AgAgvRqMVqJhyP6nyWqpfLLXbSU2fEN2FF4AgPtg2iEAAOm0/kiY6u6qqVgjn/LptmKNfKq7q6bWHwnL7tAAADkYxRcAAOmw/kiYBiw5oGejguVkulN4OZluq1NUsAYsOUABBgBIFdMOAQBIo4REQxPWHtUg+2800mGVPox/VjMTOmjw/z+XpAlrndW0orfs7UzZHC0AIKeh+AIAII32hl7Xs1HBFoWXJPO/Ix1WyYiS9oY+ptplCmVnqACAHIjiCwCANLpyI0b2pkSLwitJ0nN7U6Ku3IjJjvAAADkcxRcAAGlU1N1ZQ28/m2p/UgH2lbuzrUICAOQiLLgBAEAa1fL3ko+ns1K7msskycfTWbX8vWwZFgAgl6D4AgAgjeztTBrXuqIkJSvAkp6Pa12RxTYAACmi+AIAIB2aV/bR7B6Py9vTcmqht6ezZvd4XM0r+2RTZACAnI5rvgAASKfmlX3UtKK3dp28oo0/71FQvUDVDijKGS8AwH1RfAEAkAH2diYF+nvpn2OGAv29KLwAAA/EtEMAAAAAsAGKLwDIoxISDe0Jva7910zaE3pdCYlGdocEAMBDjWmHAJDXbJuiE1ej9cKphgqLiJFkr0Un9snH01mLyvykskVcpEZjsjtKAAAeOpz5AoA85sTVaJU9OkPPRgVbtHeKClbZozN04mp0NkUGAMDDjTNfAJCHJCQaeuFUQz0bf1EjHVZJkmYmdNBg+280wmGVpsc/q5WnGmpHosECEQAA2BjFFwDkIXtDryssIkYz1UGSNNJhlQblWyMn0219GP+sZiZ0kCJitDf0umqXKZTN0QIA8HBh2iEA5CFXbsSY/z8zoYNijXxyMt1WrJHvTuGVwjgAAGAbFF8AkIcUdXc2/3+w/TfmwsvJdFuD7b9JcRwAALANph0CQB5Sy99LPp7O6hQVrBEOq8xTDQfbf6ORDqtkkrTSrZtq+Xtld6gAADx0KL4A2N62KZKdvRLqvWq+D1Wh0OuqHVBU9j+/LyUmsBR6Btnbme4sJ3/0zuIaSVMNZyZ0kEnSCIdVal3GV/Z2jbM1TgAAHkYUXwBsz85e2vauvth+SpNvtlHSfajecP1OfROWSY3GZneEuVrZIi46UXGIVp5qKEX8d23XSrdual3G9859vgAAgM1RfAGwufWFntfR+OMaoWW6YX/bPC2ub8KdszUVCz2v5tkdZG7WaIzKStqRaGjXySva+PMeBdULvHNmkTNeAABkG4ovADaVkGhowtqjCkvoIEPJl0L/JKGDvNceVdOK3tyHKpPs7UwK9PfSP8cMBfp7kU8AALIZqx0CsKmk+1BJKS+FbkgK+//7UAEAAOQlFF8AbOru+0vdbyl07kMFAADyGoovADaVdH+ppKXPP4x/Vo/GLtKH8c9qpMMqcwHGfagAAEBewzVfAGyqlr/X/69q+N89qCSZ/x3psEruzvlUy/+Z7AwTAAAgy1F8AbApezuTni5XSNMP31lc426f/P+9qNpUKMTiEAAAIM+h+AJgcwHPTVbFSmHyXnvUvPiGJHl7Oqti60kKqOyTjdEBAABYB8UXgGzRvLKPmlb0TuE+VJzxAgAAeRPFF4Bsw32oAADAw4TVDgEAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovoCUbJsihUxLuS9k2p1+AAAAIB0ovoCU2NlL295NXoCFTLvTbmefPXEBAAAg1+Imy7lcQqKhPaHXtf+aSYVCr6t2QFFuVJsVGoy+8++2d3XxWpT2h9fUY9+9o5K//09qNPa/fgAAACCN8syZr1mzZqlUqVJydnZWYGCg9u7da+4bMWKEvLy85Ofnp6VLl1q8buXKlWrdurWtw828bVN0YsVbeuq9rerx5T4tOmGvHl/u01PvbdWJFW8xLS4LrC/0vObZd1HJ3/+nsWd7q+Tv/9M8+y5aX+j57A4NAAAAuVCeKL6WL1+uESNGaNy4cTpw4ICqVaumZs2a6cqVK1q7dq2Cg4O1ceNGTZs2TS+//LKuXbsmSYqIiNDYsWM1a9asbD6C9DtxNVplj87Qs1HBFu2dooJV9ugMnbganU2R5Q3rj4RpwJIDmnyzjWKNfHIy3VaskU9TbrbRgCUHtP5IWHaHCAAAgFwmTxRf06dPV58+fdS7d29VrFhRc+bMkYuLi7788ksdO3ZMDRs2VM2aNdW1a1d5eHgoNDRUkjR69GgNGDBAJUqUyOYjSJ+EREMvnGqoD+Of1UiHVRps/40kabD9NxrhsErT45/VC6caKiHRyOZIc6eEREMT1h6VoTs5TSq8nEy3Nej/cz1h7VHyCwAAgHTJ9dd8xcXFaf/+/RozZoy5zc7OTk2aNNGuXbv0yiuvaN68efr333/1999/69atWwoICNCOHTt04MABffrpp2naT2xsrGJjY83PIyMjJUnx8fGKj4/P2oN6gD2h1xUWEaOZ6iBJGumwSoPyrZGT6bY+jH9WMxM6SBEx2nXyigL9vWwaW16QlN/B9t9opMMqc06TnkvSzIgO5DeLJH3/2Pr76GFBfq2L/FoX+bUu8mtd5Nf6clKO0xqDyTCMXP3n+4sXL6p48eLauXOnateubW4fPXq0QkJCtGfPHo0fP15LlixR/vz5NXHiRLVs2VI1atTQggULtGvXLs2cOVOFCxfWvHnzVKlSpRT3M378eE2YMCFZe3BwsFxcXKx2fCnZf82kRSf+W23vuNML5rMzj8YuMre/UDZBNQrn6i9vtth/zSTPv7+1KLyS3F2QRZRuS34BAACg6OhodevWTREREfLw8Eh1XK4/85UW48eP1/jx483PJ0yYoCZNmsjBwUGTJk3S77//rnXr1umFF17Q/v37U9zGmDFjNGLECPPzyMhI+fn5KSgo6L4JtoZCode16MQ+ScmnxQ22/8ZcLATVC+TMTAYUCr2ufaGrkxVekszP7U2J5DeLxMfHa9OmTWratKkcHByyO5w8h/xaF/m1LvJrXeTXusiv9eWkHCfNinuQXF98FS5cWPb29rp8+bJF++XLl+Xt7Z1s/J9//qklS5bo4MGD+vLLL1W/fn0VKVJEnTt31osvvqgbN27I3d092eucnJzk5OSUrN3BwcHmX+zaAUXl4+msTlHBGpHCtDiTpJVu3Vh2PoNqBxTVq649dCkiJsX+TxI6yNvTWYPJb5bKju+lhwn5tS7ya13k17rIr3WRX+vLCTlO6/5z/YIbjo6OqlGjhrZs2WJuS0xM1JYtWyymIUqSYRjq16+fpk+fLjc3NyUkJCSbK5qQkGC74DPI3s6kRWV+Mi+ukXQ2ZmZCB02Pf1YjHFZpUZmfKAwyyN7OpHGtK0qS7s1g0vNxrSuSXwAAAKRLri++pDv38frss8+0cOFCHTt2TAMGDNDNmzfVu3dvi3Gff/65ihQpYr6vV926dbV161bt3r1bH330kSpWrKgCBQpkwxGkX9kiLjpRcYhWunWzaF/p1k0nKg5R2SK2vQ4tr2le2Uezezwub09ni3ZvT2fN7vG4mlf2yabIAAAAkFvl+mmHkvTcc8/p6tWrevvtt3Xp0iU99thjWr9+vYoVK2Yec/nyZb377rvauXOnua1WrVoaOXKkWrZsqaJFi2rhwoXZEX7GNBqjspJ2JBradfKKNv68R0H1Av9/qmHj7I4uT2he2UdNK3qnkF/OeAEAACD98kTxJUmDBg3SoEGDUu0vVqyYTp8+naz97bff1ttvv23FyKzL3s6kQH8v/XPMUKC/F4VBFiO/AAAAyCp5YtohAAAAAOR0FF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGADFF8AAAAAYAMUXwAAAABgAxRfAAAAAGAD+bI7gNzKMAxJUmRkZDZHIsXHxys6OlqRkZFycHDI7nDyHPJrXeTXusivdZFf6yK/1kV+rYv8Wl9OynFSTZBUI6SG4iuDbty4IUny8/PL5kgAAAAA5AQ3btyQp6dnqv0m40HlGVKUmJioixcvyt3dXSaTKVtjiYyMlJ+fn86dOycPD49sjSUvIr/WRX6ti/xaF/m1LvJrXeTXusiv9eWkHBuGoRs3bsjX11d2dqlf2cWZrwyys7PTI488kt1hWPDw8Mj2N15eRn6ti/xaF/m1LvJrXeTXusivdZFf68spOb7fGa8kLLgBAAAAADZA8QUAAAAANkDxlQc4OTlp3LhxcnJyyu5Q8iTya13k17rIr3WRX+siv9ZFfq2L/FpfbswxC24AAAAAgA1w5gsAAAAAbIDiCwAAAABsgOILAAAAAGyA4gsAAAAAbIDiKxfZvn27WrduLV9fX5lMJq1Zs8ai3zAMvf322/Lx8VH+/PnVpEkTnThxInuCzWWmTJmiJ554Qu7u7ipatKjatWun48ePW4yJiYnRwIEDVahQIbm5ualjx466fPlyNkWcu8yePVtVq1Y13wSxdu3a+vHHH8395DZrTZ06VSaTScOGDTO3kePMGT9+vEwmk8WjfPny5n7ym3kXLlxQjx49VKhQIeXPn19VqlTRvn37zP38jMu4UqVKJXv/mkwmDRw4UBLv38xKSEjQW2+9JX9/f+XPn19lypTRO++8o7vXtOP9mzk3btzQsGHDVLJkSeXPn1916tTRr7/+au7PTfml+MpFbt68qWrVqmnWrFkp9k+bNk0zZszQnDlztGfPHrm6uqpZs2aKiYmxcaS5T0hIiAYOHKjdu3dr06ZNio+PV1BQkG7evGkeM3z4cK1du1YrV65USEiILl68qA4dOmRj1LnHI488oqlTp2r//v3at2+fnn76abVt21Z//PGHJHKblX799VfNnTtXVatWtWgnx5lXqVIlhYWFmR87duww95HfzPn3339Vt25dOTg46Mcff9TRo0f14YcfqmDBguYx/IzLuF9//dXivbtp0yZJUqdOnSTx/s2s9957T7Nnz9Ynn3yiY8eO6b333tO0adM0c+ZM8xjev5nz8ssva9OmTVq8eLF+//13BQUFqUmTJrpw4YKkXJZfA7mSJGP16tXm54mJiYa3t7fx/vvvm9vCw8MNJycn46uvvsqGCHO3K1euGJKMkJAQwzDu5NLBwcFYuXKlecyxY8cMScauXbuyK8xcrWDBgsbnn39ObrPQjRs3jLJlyxqbNm0yGjRoYAwdOtQwDN6/WWHcuHFGtWrVUuwjv5n32muvGU899VSq/fyMy1pDhw41ypQpYyQmJvL+zQItW7Y0XnzxRYu2Dh06GN27dzcMg/dvZkVHRxv29vbGunXrLNoff/xxY+zYsbkuv5z5yiNCQ0N16dIlNWnSxNzm6empwMBA7dq1Kxsjy50iIiIkSV5eXpKk/fv3Kz4+3iK/5cuXV4kSJchvOiUkJGjZsmW6efOmateuTW6z0MCBA9WyZUuLXEq8f7PKiRMn5Ovrq9KlS6t79+46e/asJPKbFb777jvVrFlTnTp1UtGiRVW9enV99tln5n5+xmWduLg4LVmyRC+++KJMJhPv3yxQp04dbdmyRX/99Zck6bffftOOHTvUokULSbx/M+v27dtKSEiQs7OzRXv+/Pm1Y8eOXJfffNkdALLGpUuXJEnFihWzaC9WrJi5D2mTmJioYcOGqW7duqpcubKkO/l1dHRUgQIFLMaS37T7/fffVbt2bcXExMjNzU2rV69WxYoVdejQIXKbBZYtW6YDBw5YzIFPwvs38wIDA7VgwQI9+uijCgsL04QJE1SvXj0dOXKE/GaBv//+W7Nnz9aIESP0xhtv6Ndff9WQIUPk6Oionj178jMuC61Zs0bh4eHq1auXJD4fssLrr7+uyMhIlS9fXvb29kpISNC7776r7t27S+J3tMxyd3dX7dq19c4776hChQoqVqyYvvrqK+3atUsBAQG5Lr8UX8A9Bg4cqCNHjlhcz4HMe/TRR3Xo0CFFRERo1apV6tmzp0JCQrI7rDzh3LlzGjp0qDZt2pTsL4PIGkl/wZakqlWrKjAwUCVLltSKFSuUP3/+bIwsb0hMTFTNmjU1efJkSVL16tV15MgRzZkzRz179szm6PKWL774Qi1atJCvr292h5JnrFixQkuXLlVwcLAqVaqkQ4cOadiwYfL19eX9m0UWL16sF198UcWLF5e9vb0ef/xxde3aVfv378/u0NKNaYd5hLe3tyQlW53o8uXL5j482KBBg7Ru3Tpt27ZNjzzyiLnd29tbcXFxCg8PtxhPftPO0dFRAQEBqlGjhqZMmaJq1arpf//7H7nNAvv379eVK1f0+OOPK1++fMqXL59CQkI0Y8YM5cuXT8WKFSPHWaxAgQIqV66cTp48yXs4C/j4+KhixYoWbRUqVDBP7eRnXNY4c+aMNm/erJdfftncxvs381599VW9/vrr6tKli6pUqaLnn39ew4cP15QpUyTx/s0KZcqUUUhIiKKionTu3Dnt3btX8fHxKl26dK7LL8VXHuHv7y9vb29t2bLF3BYZGak9e/aodu3a2RhZ7mAYhgYNGqTVq1dr69at8vf3t+ivUaOGHBwcLPJ7/PhxnT17lvxmUGJiomJjY8ltFmjcuLF+//13HTp0yPyoWbOmunfvbv4/Oc5aUVFROnXqlHx8fHgPZ4G6desmu73HX3/9pZIlS0riZ1xWmT9/vooWLaqWLVua23j/Zl50dLTs7Cx/pba3t1diYqIk3r9ZydXVVT4+Pvr333+1YcMGtW3bNvflN7tX/EDa3bhxwzh48KBx8OBBQ5Ixffp04+DBg8aZM2cMwzCMqVOnGgUKFDC+/fZb4/Dhw0bbtm0Nf39/49atW9kcec43YMAAw9PT0/jpp5+MsLAw8yM6Oto8pn///kaJEiWMrVu3Gvv27TNq165t1K5dOxujzj1ef/11IyQkxAgNDTUOHz5svP7664bJZDI2btxoGAa5tYa7Vzs0DHKcWSNHjjR++uknIzQ01Pjll1+MJk2aGIULFzauXLliGAb5zay9e/ca+fLlM959913jxIkTxtKlSw0XFxdjyZIl5jH8jMuchIQEo0SJEsZrr72WrI/3b+b07NnTKF68uLFu3TojNDTU+Oabb4zChQsbo0ePNo/h/Zs569evN3788Ufj77//NjZu3GhUq1bNCAwMNOLi4gzDyF35pfjKRbZt22ZISvbo2bOnYRh3ljJ96623jGLFihlOTk5G48aNjePHj2dv0LlESnmVZMyfP9885tatW8Yrr7xiFCxY0HBxcTHat29vhIWFZV/QuciLL75olCxZ0nB0dDSKFCliNG7c2Fx4GQa5tYZ7iy9ynDnPPfec4ePjYzg6OhrFixc3nnvuOePkyZPmfvKbeWvXrjUqV65sODk5GeXLlzfmzZtn0c/PuMzZsGGDISnFnPH+zZzIyEhj6NChRokSJQxnZ2ejdOnSxtixY43Y2FjzGN6/mbN8+XKjdOnShqOjo+Ht7W0MHDjQCA8PN/fnpvyaDOOu228DAAAAAKyCa74AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AAAAAMAGKL4AAAAAwAYovgAAAADABii+AADIAcaPH6/HHnvM/LxXr15q165dtsUDAMh6FF8AgFyrV69eMplMMplMcnR0VEBAgCZOnKjbt29nd2j3ZTKZtGbNGou2UaNGacuWLdkTEADAJvJldwAAAGRG8+bNNX/+fMXGxuqHH37QwIED5eDgoDFjxqRrOwkJCTKZTLKzy56/S7q5ucnNzS1b9g0AsA3OfAEAcjUnJyd5e3urZMmSGjBggJo0aaLvvvtOsbGxGjVqlIoXLy5XV1cFBgbqp59+Mr9uwYIFKlCggL777jtVrFhRTk5OOnv2rGJjY/Xaa6/Jz89PTk5OCggI0BdffGF+3ZEjR9SiRQu5ubmpWLFiev7553Xt2jVzf8OGDTVkyBCNHj1aXl5e8vb21vjx4839pUqVkiS1b99eJpPJ/PzeaYf3SkxM1JQpU+Tv76/8+fOrWrVqWrVqVVakEABgIxRfAIA8JX/+/IqLi9OgQYO0a9cuLVu2TIcPH1anTp3UvHlznThxwjw2Ojpa7733nj7//HP98ccfKlq0qF544QV99dVXmjFjho4dO6a5c+eaz0iFh4fr6aefVvXq1bVv3z6tX79ely9fVufOnS1iWLhwoVxdXbVnzx5NmzZNEydO1KZNmyRJv/76qyRp/vz5CgsLMz9/kClTpmjRokWaM2eO/vjjDw0fPlw9evRQSEhIVqQNAGADTDsEAOQJhmFoy5Yt2rBhg7p27ar58+fr7Nmz8vX1lXTnmqr169dr/vz5mjx5siQpPj5en376qapVqyZJ+uuvv7RixQpt2rRJTZo0kSSVLl3avI9PPvlE1atXN79ekr788kv5+fnpr7/+Urly5SRJVatW1bhx4yRJZcuW1SeffKItW7aoadOmKlKkiCSpQIEC8vb2TtOxxcbGavLkydq8ebNq165tjmvHjh2aO3euGjRokOG8AQBsh+ILAJCrrVu3Tm5uboqPj1diYqK6deumZ599VgsWLDAXQ0liY2NVqFAh83NHR0dVrVrV/PzQoUOyt7dPtZj57bfftG3bthSvzTp16pRF8XU3Hx8fXblyJcPHePLkSUVHR6tp06YW7XFxcapevXqGtwsAsC2KLwBArtaoUSPNnj1bjo6O8vX1Vb58+bR8+XLZ29tr//79sre3txh/d+GUP39+mUwmi+f3ExUVpdatW+u9995L1ufj42P+v4ODg0WfyWRSYmJiuo7r3v1K0vfff6/ixYtb9Dk5OWV4uwAA26L4AgDkaq6urgoICLBoq169uhISEnTlyhXVq1cvzduqUqWKEhMTFRISYp52eLfHH39cX3/9tUqVKqV8+TL+I9TBwUEJCQlpHn/3giBMMQSA3IsFNwAAeU65cuXUvXt3vfDCC/rmm28UGhqqvXv3asqUKfr+++9TfV2pUqXUs2dPvfjii1qzZo1CQ0P1008/acWKFZKkgQMH6vr16+ratat+/fVXnTp1Shs2bFDv3r3TVUyVKlVKW7Zs0aVLl/Tvv/8+cLy7u/v/tXeHqAoGYRhG37sDs6BgUoPbEKPBbLOYFK0mg8lkMMq/CJPZJLgDl2GU/+7g4i0jyDl9+L76MAyT9Xqd5XKZqqryeDxyv99zOBxSVdXbcwH4LPEFwFc6nU6ZTqdZrVbpdrsZj8e53W5pt9t/njsej5lMJpnP5+n1epnNZnk+n0mSZrOZ6/Wa1+uV4XCYwWCQxWKRRqPxr//B9vt9LpdLWq3W22+2ttttNptNdrtd+v1+RqNRzudzOp3O23MB+Kyfuq7rTy8BAADw7dx8AQAAFCC+AAAAChBfAAAABYgvAACAAsQXAABAAeILAACgAPEFAABQgPgCAAAoQHwBAAAUIL4AAAAKEF8AAAAF/AIrEMrroGK4/gAAAABJRU5ErkJggg==\n" | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1000x600 with 1 Axes>" | |
], | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAIjCAYAAAAJLyrXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB9Y0lEQVR4nO3dd3QU5dvG8WvTezBAChAgEFqkCgJRei9SBMQCUkRUBEWQKiKgIkVfBSygP5UiohQFFRUILYqELkoTAyKgJlRJCDF93j8wK0sSyCZZdgPfzzk5sDPPztx7Z1KuzMyzJsMwDAEAAAAA8s3J3gUAAAAAQHFDkAIAAAAAKxGkAAAAAMBKBCkAAAAAsBJBCgAAAACsRJACAAAAACsRpAAAAADASgQpAAAAALASQQoAAAAArESQAqABAwbIx8fH3mUUiQEDBqhixYr2LqNI/f777zKZTFqwYEGRbrdixYoaMGBAkW7zZjB58mSZTCadPXvW3qXYTYsWLdSiRQt7l+GwNm/eLJPJpM2bN9u7FId19TFkq+9jgD0RpAAHsGDBAplMJvOHh4eHypQpo/bt22vOnDm6ePGivUuUJL3zzjv8ELyO7F+wsj+cnZ0VGBioXr166dChQze8nq1bt2ry5Mm6cOHCDd939i9OeX1Mnz79htfkiL766it16dJFQUFBcnNzU0BAgJo1a6b/+7//U2Jior3Lu6aKFSvqnnvuydfYzZs3q0ePHgoODpabm5sCAwPVpUsXff755+YxVx8zzs7OKl++vO69917t3bvXRq/CdnL73l61alUNGzZMp06dsnd5hXbw4EFNnjxZv//+u71LAezCxd4FAPjPiy++qLCwMKWnpys+Pl6bN2/WM888o9dff11ffvmlateubdf63nnnHZUqVcqhz2L873//U1ZWlr3L0NNPP60777xT6enp+vnnnzVv3jxt3rxZ+/fvV3Bw8A2rY+vWrZoyZYoGDBigEiVKWKw7fPiwnJxs//e0Bx98UJ06dcqxvF69ejbftyPLysrSoEGDtGDBAtWqVUtPPvmkQkNDdfHiRcXExOj555/XN998ow0bNti71EKbNGmSXnzxRVWpUkWPP/64KlSooHPnzumbb75Rz5499fHHH+uhhx4yj88+ZjIzM3Xo0CHNnTtX3377rbZt26a6deva74UUUPb39pSUFG3ZskVz587VN998o/3798vLy8ve5RXYwYMHNWXKFLVo0SLHlQDr1q2zT1HADUSQAhxIx44d1aBBA/Pj8ePHa+PGjbrnnnvUtWtXHTp0SJ6ennas0PG5urrauwRJUtOmTdWrVy/z42rVqmnIkCFatGiRxowZY8fK/uPu7n5D9nPHHXeob9++Vj3HMAylpKTkerynpKTIzc2tUCHw0qVL8vb2LvDzi8LMmTO1YMECjRgxQv/3f/8nk8lkXjd8+HDFxcVp0aJFdqywaKxYsUIvvviievXqpSVLllh8jY4ePVpr165Venq6xXOuPmbuvvtude3aVXPnztW77757w2ovKld+b3/00UdVsmRJvf766/riiy/04IMPFmrbycnJDhnG3Nzc7F0CYHNc2gc4uFatWmnixIk6fvy4Fi9ebLHul19+Ua9evRQQECAPDw81aNBAX375pcWY9PR0TZkyRVWqVJGHh4dKliypJk2aKCoq6pr73bt3r0qXLq0WLVooKSlJFStW1IEDBxQdHW2+TOXK699/++033XfffQoICJCXl5caN26sr7/+2mKb2Ze9LV26VM8995yCg4Pl7e2trl276uTJk9ftxcWLF/XMM8+oYsWKcnd3V2BgoNq2bas9e/aYx1x9j1SLFi3yvLTsyssUL1y4oGeeeUahoaFyd3dXeHi4ZsyYkePs1qeffqr69evL19dXfn5+qlWrlmbPnn3d2ps2bSpJOnr0qMXyP//8U4888oiCgoLk7u6u22+/XR9++OF1t/fzzz9rwIABqlSpkjw8PBQcHKxHHnlE586dM4+ZPHmyRo8eLUkKCwszv+7sy3CuvEdq165dMplMWrhwYY59rV27ViaTSatXry503XnJvkRs7dq1atCggTw9PfXuu++aj5lPP/1Uzz//vMqWLSsvLy/zJW/Lly9X/fr15enpqVKlSqlv3776888/LbadfQ/g0aNH1alTJ/n6+qpPnz7Xrens2bPq3bu3/Pz8VLJkSQ0fPlwpKSnm9c2bN1edOnVyfW61atXUvn37PLednJysGTNm6Pbbb9err75qEaKyhYSEaOzYsRbLMjIy9NJLL6ly5cpyd3dXxYoV9dxzzyk1NTXH89955x3dfvvtcnd3V5kyZTR06NBcL/F87733VLlyZXl6eqphw4b6/vvv86y7ICZOnKiAgAB9+OGHuf6ho3379te9PLBVq1aSpGPHjl1z3BdffKHOnTurTJkycnd3V+XKlfXSSy8pMzPTYlyLFi1Us2ZNHTx4UC1btpSXl5fKli2rmTNn5tjmH3/8oe7du8vb21uBgYEaMWJErv22Rm6vZ/HixeZjOSAgQA888ECO74vZde/evVvNmjWTl5eXnnvuOUmX/8AwefJkVa1aVR4eHgoJCVGPHj0svudkZWVp1qxZuv322+Xh4aGgoCA9/vjj+vvvvy32k/31uGXLFjVs2FAeHh6qVKmSRbBfsGCB7rvvPklSy5Ytzd9fsu8by+99dvn5OQY4Ks5IAcXAww8/rOeee07r1q3T4MGDJUkHDhzQ3XffrbJly2rcuHHy9vbWsmXL1L17d3322We69957JV3+ZXratGl69NFH1bBhQyUmJmrXrl3as2eP2rZtm+v+du7cqfbt26tBgwb64osv5OnpqVmzZumpp56Sj4+PJkyYIEkKCgqSJJ06dUp33XWXkpOT9fTTT6tkyZJauHChunbtqhUrVphryTZ16lSZTCaNHTtWp0+f1qxZs9SmTRvt3bv3mmfcnnjiCa1YsULDhg1TRESEzp07py1btujQoUO64447cn3OhAkT9Oijj1osW7x4sdauXavAwEBJl3+pbd68uf788089/vjjKl++vLZu3arx48crLi5Os2bNkiRFRUXpwQcfVOvWrTVjxgxJ0qFDh/TDDz9o+PDhedYtyRxebrvtNvOyU6dOqXHjxjKZTBo2bJhKly6tb7/9VoMGDVJiYqKeeeaZPLcXFRWl3377TQMHDlRwcLAOHDig9957TwcOHNC2bdtkMpnUo0cP/frrr/rkk0/0xhtvqFSpUpKk0qVL59hegwYNVKlSJS1btkz9+/e3WLd06VLddttt5mBgbd3Jycm5TtxQokQJubj892Po8OHDevDBB/X4449r8ODBqlatmnndSy+9JDc3N40aNUqpqalyc3PTggULNHDgQN15552aNm2aTp06pdmzZ+uHH37Qjz/+aHEpY0ZGhtq3b68mTZrotddey9df8Hv37q2KFStq2rRp2rZtm+bMmaO///7b/Mvkww8/rMGDB2v//v2qWbOm+Xk7d+7Ur7/+queffz7PbW/ZskUXLlzQqFGj5OzsfN1asj366KNauHChevXqpWeffVbbt2/XtGnTdOjQIa1cudI8bvLkyZoyZYratGmjIUOG6PDhw5o7d6527typH374wRxoPvjgAz3++OO666679Mwzz+i3335T165dFRAQoNDQ0HzXlZfY2Fj98ssveuSRR+Tr61vg7WSHgZIlS15z3IIFC+Tj46ORI0fKx8dHGzdu1AsvvKDExES9+uqrFmP//vtvdejQQT169FDv3r21YsUKjR07VrVq1VLHjh0lSf/8849at26tEydO6Omnn1aZMmX00UcfaePGjQV+Lbm9nqlTp2rixInq3bu3Hn30UZ05c0ZvvvmmmjVrluNYPnfunDp27KgHHnhAffv2VVBQkDIzM3XPPfdow4YNeuCBBzR8+HBdvHhRUVFR2r9/vypXrixJevzxx81fN08//bSOHTumt956Sz/++KPFcSFJR44cUa9evTRo0CD1799fH374oQYMGKD69evr9ttvV7NmzfT0009rzpw5eu6551SjRg1JMv+bH/n9OQY4LAOA3c2fP9+QZOzcuTPPMf7+/ka9evXMj1u3bm3UqlXLSElJMS/Lysoy7rrrLqNKlSrmZXXq1DE6d+58zf3379/f8Pb2NgzDMLZs2WL4+fkZnTt3tti2YRjG7bffbjRv3jzH85955hlDkvH999+bl128eNEICwszKlasaGRmZhqGYRibNm0yJBlly5Y1EhMTzWOXLVtmSDJmz559zTr9/f2NoUOHXve1VKhQIc/1P/zwg+Hq6mo88sgj5mUvvfSS4e3tbfz6668WY8eNG2c4OzsbJ06cMAzDMIYPH274+fkZGRkZeW4/+zV++OGHxpkzZ4y//vrLWLNmjREeHm6YTCZjx44d5rGDBg0yQkJCjLNnz1ps44EHHjD8/f2N5ORkwzAM49ixY4YkY/78+eYx2euu9MknnxiSjO+++8687NVXXzUkGceOHcsxvkKFCkb//v3Nj8ePH2+4uroa58+fNy9LTU01SpQoYdEva+vO6yMmJsaiFknGmjVrcu1npUqVLF5zWlqaERgYaNSsWdP4559/zMtXr15tSDJeeOEF87L+/fsbkoxx48bl6EFuJk2aZEgyunbtarH8ySefNCQZP/30k2EYhnHhwgXDw8PDGDt2rMW4p59+2vD29jaSkpLy3Mfs2bMNScaqVasslmdkZBhnzpyx+MjKyjIMwzD27t1rSDIeffRRi+eMGjXKkGRs3LjRMAzDOH36tOHm5ma0a9fO/LVnGIbx1ltvmY9Nw/ivh3Xr1jVSU1PN49577z1DUq5f61erUKHCNb+/fPHFF4Yk44033rjutgzjv2NmypQpxpkzZ4z4+Hhj8+bNRr169QxJxmeffXbN5+f2dfH4448bXl5eFt/PmjdvbkgyFi1aZF6WmppqBAcHGz179jQvmzVrliHJWLZsmXnZpUuXjPDwcEOSsWnTpmvWk/29ff369caZM2eMkydPGp9++qlRsmRJw9PT0/jjjz+M33//3XB2djamTp1q8dx9+/YZLi4uFsuz6543b57F2A8//NCQZLz++us5asg+fr7//ntDkvHxxx9brF+zZk2O5dlfj1d+Lzl9+rTh7u5uPPvss+Zly5cvz7MPzZs3tziGcvs+lt+fY4Cj4tI+oJjw8fExz953/vx5bdy4Ub1799bFixd19uxZnT17VufOnVP79u0VGxtrvrypRIkSOnDggGJjY6+7j02bNql9+/Zq3bq1Pv/883zfQ/PNN9+oYcOGatKkiUW9jz32mH7//XcdPHjQYny/fv0s/jrdq1cvhYSE6JtvvrnmfkqUKKHt27frr7/+ylddV4uPj1evXr1Ut25dvfPOO+bly5cvV9OmTXXbbbeZe3n27Fm1adNGmZmZ+u6778z7v3Tp0nUvi5SkRx55RKVLl1aZMmXUoUMHJSQk6KOPPtKdd94p6fI9QJ999pm6dOkiwzAs9tu+fXslJCRYXLJ4tSvP3KWkpOjs2bNq3LixJF3zeddy//33Kz093WIWtXXr1unChQu6//77C1z3Y489pqioqBwfERERFuPCwsLyvByuf//+Fq95165dOn36tJ588kl5eHiYl3fu3FnVq1fPcVmpJA0ZMsSqfgwdOtTi8VNPPSVJ5uPU399f3bp10yeffCLDMCRJmZmZWrp0qflSsLxkX5p49dsO7Nu3T6VLl7b4yL5cM3u/I0eOtHjOs88+K0nm17x+/XqlpaXpmWeesbiPbPDgwfLz8zOPy+7hE088YXE/y4ABA+Tv73/d/uRH9uu09mzUpEmTVLp0aQUHB6tFixY6evSoZsyYoR49elzzeVceI9nfG5s2bark5GT98ssvFmN9fHws7sNyc3NTw4YN9dtvv5mXffPNNwoJCbG439HLy0uPPfaYVa+nTZs2Kl26tEJDQ/XAAw/Ix8dHK1euVNmyZfX5558rKytLvXv3tvh6Cg4OVpUqVbRp0yaLbbm7u2vgwIEWyz777DOVKlXKfIxeKfuy0eXLl8vf319t27a12E/9+vXl4+OTYz8RERHmS5Kly2eyq1WrZtGfwrDm5xjgqLi0DygmkpKSzJeiHTlyRIZhaOLEiZo4cWKu40+fPq2yZcvqxRdfVLdu3VS1alXVrFlTHTp00MMPP5xjBsCUlBR17txZ9evX17Jlyywuubqe48ePq1GjRjmWZ1/icfz4cYtLn6pUqWIxzmQyKTw8/LpT6M6cOVP9+/dXaGio6tevr06dOqlfv36qVKnSdWvMyMhQ7969lZmZmSMkxsbG6ueff871kjfpci8l6cknn9SyZcvUsWNHlS1bVu3atVPv3r3VoUOHHM954YUX1LRpUyUlJWnlypX69NNPLX6pPXPmjC5cuKD33ntP77333jX3m5vz589rypQp+vTTT3OMS0hIyLsR11CnTh1Vr15dS5cu1aBBgyRdvqyvVKlS5ns6ClJ3lSpV1KZNm+vuPywsLN/rjh8/LkkWl/9lq169urZs2WKxzMXFReXKlbtuDVe6+jitXLmynJycLI7Tfv36aenSpfr+++/VrFkzrV+/XqdOndLDDz98zW1nB4ukpCSL5eHh4eagvmjRIn300UfmdcePH5eTk5PCw8MtnhMcHKwSJUqYe5JXb9zc3FSpUqUc465+na6urvn6msoPPz8/SbL6LRwee+wx3XfffXJyclKJEiXM93pdz4EDB/T8889r48aNOaaOv/rroly5cjnuTbvtttv0888/mx8fP35c4eHhOcbldtxdy9tvv62qVavKxcVFQUFBqlatmvn7QWxsrAzDyPF5yHb1fWVly5bNMZHD0aNHVa1atWt+346NjVVCQoL558jVrv66LV++fI4xt912W477qQrKmp9jgKMiSAHFwB9//KGEhATzL1DZEyCMGjUqz7/gZ49t1qyZjh49qi+++ELr1q3T+++/rzfeeEPz5s2zuHfI3d1dnTp10hdffKE1a9bk+71hbqTevXuradOmWrlypdatW6dXX31VM2bM0Oeff26+pyEvo0ePVkxMjNavX5/jF+qsrCy1bds2z9n0qlatKkkKDAzU3r17tXbtWn377bf69ttvNX/+fPXr1y/HJA21atUyh4fu3bsrOTlZgwcPVpMmTRQaGmr+HPbt2zfHPUnZrjXdfe/evbV161aNHj1adevWlY+Pj7KystShQ4dCTf9+//33a+rUqTp79qx8fX315Zdf6sEHHzT/glbYuq/lWvfHFXa2Snd390JP9Z7bhBDt27dXUFCQFi9erGbNmmnx4sUKDg6+bnCsXr26JGn//v3q1q2bebmPj4/5uVeHwWvV4aiyX+e+ffusel5+w/eVLly4oObNm8vPz08vvviiKleuLA8PD+3Zs0djx47N8XWR171p2WcXi1LDhg0tZmS9UlZWlkwmk7799ttca7r6rGVBvxaysrIUGBiojz/+ONf1V/8hydb9sebnGOCoCFJAMZD9V+nsHzbZfy12dXXN1y8bAQEBGjhwoAYOHKikpCQ1a9ZMkydPtghSJpNJH3/8sbp166b77rtP3377bY4Zl/L6Ba5ChQo6fPhwjuXZl9JUqFDBYvnVlxkahqEjR47k6xfwkJAQPfnkk3ryySd1+vRp3XHHHZo6deo1g9Snn36qWbNmadasWWrevHmO9ZUrV1ZSUlK+eunm5qYuXbqoS5cuysrK0pNPPql3331XEydOvOYP/enTp2vlypWaOnWq5s2bp9KlS8vX11eZmZlW/8L4999/a8OGDZoyZYpeeOEF8/LcLt+09pfu+++/X1OmTNFnn32moKAgJSYm6oEHHjCvL0zdRSn7mDp8+LD5bFm2w4cP5zjmCiI2NtbiTNiRI0eUlZVlMSuks7OzHnroIS1YsEAzZszQqlWrNHjw4OtOING0aVP5+/vr008/1fjx4/MV8ipUqKCsrCzFxsZa3NB/6tQpXbhwwfyar+zNlWeW0tLSdOzYMfPnLXtcbGysRQ/T09N17NixPGcktEbVqlVVrVo1ffHFF5o9e3aOUFCUNm/erHPnzunzzz9Xs2bNzMuvN9PftVSoUEH79++XYRgWX0u5fb8rqMqVK8swDIWFhZn/aFOQbWzfvl3p6el5vgVE5cqVtX79et19991F9jYahQn11v4cAxwR90gBDm7jxo166aWXFBYWZp6yOTAwUC1atNC7776ruLi4HM85c+aM+f9XToctXf7rZnh4eK7T97q5uenzzz/XnXfeqS5dumjHjh0W6729vXOdPrlTp07asWOHYmJizMsuXbqk9957TxUrVsxxL8yiRYssLvVZsWKF4uLirhmGMjMzc1yaExgYqDJlylxzKuL9+/fr0UcfVd++ffOcWa93796KiYnR2rVrc6y7cOGCMjIyJOXspZOTkzn8XW865MqVK6tnz55asGCB4uPj5ezsrJ49e+qzzz7T/v37c4y/8nN4texf0q/+y3D27IJXyr5PJ7fPW25q1KihWrVqaenSpVq6dKlCQkIsfiktTN1FqUGDBgoMDNS8efMsev/tt9/q0KFD6ty5c6H38fbbb1s8fvPNNyUpx3H68MMP6++//9bjjz+upKSkfL1nlpeXl8aMGaP9+/dr3Lhxuf6V/+pl2W9qfPXn+fXXX5ck82tu06aN3NzcNGfOHIttfPDBB0pISDCPa9CggUqXLq158+YpLS3NPG7BggX5Pl7yY8qUKTp37pweffRR89fSldatW2cxtX5B5fZ1kZaWZnE/pLU6deqkv/76SytWrDAvS05OzvOy1oLo0aOHnJ2dNWXKlByfc8MwcnzfyU3Pnj119uxZvfXWWznWZW8z+9Lml156KceYjIyMAn3Orf3+ciVrfo4BjoozUoAD+fbbb/XLL78oIyNDp06d0saNGxUVFaUKFSroyy+/tLip/u2331aTJk1Uq1YtDR48WJUqVdKpU6cUExOjP/74Qz/99JOkyzcMt2jRQvXr11dAQIB27dplnkI8N56enlq9erVatWqljh07Kjo62nx/U/369TV37ly9/PLLCg8PV2BgoFq1aqVx48bpk08+UceOHfX0008rICBACxcu1LFjx/TZZ5/l+Gt7QECAmjRpooEDB+rUqVOaNWuWwsPDzVO75+bixYsqV66cevXqpTp16sjHx0fr16/Xzp079X//9395Pi/7puzsy66udNddd6lSpUoaPXq0vvzyS91zzz3m6X0vXbqkffv2acWKFfr9999VqlQpPfroozp//rxatWqlcuXK6fjx43rzzTdVt27dfE35O3r0aC1btkyzZs3S9OnTNX36dG3atEmNGjXS4MGDFRERofPnz2vPnj1av369zp8/n+t2/Pz81KxZM82cOVPp6ekqW7as1q1bl+tf3uvXry/p8jTwDzzwgFxdXdWlS5drToRw//3364UXXpCHh4cGDRqU4/Nnbd179uzJ0XvpcriMjIy8bt9y4+rqqhkzZmjgwIFq3ry5HnzwQfP05xUrVtSIESMKtN0rHTt2TF27dlWHDh0UExOjxYsX66GHHspxpqZevXqqWbOmli9frho1auQ5Ff/Vxo0bp0OHDunVV1/VunXr1LNnT5UrV05///239uzZo+XLlyswMND8dV+nTh31799f7733nvkyth07dmjhwoXq3r27WrZsKenyWcPx48drypQp6tChg7p27arDhw/rnXfe0Z133mkOeq6urnr55Zf1+OOPq1WrVrr//vt17NgxzZ8/36p7pI4cOaKXX345x/J69eqpc+fOuv/++7Vv3z5NnTpVP/74ox588EFVqFBB586d05o1a7RhwwYtWbIk3/vLy1133aXbbrtN/fv319NPPy2TyaSPPvqoUJeiDR48WG+99Zb69eun3bt3KyQkRB999FGRvgFu5cqV9fLLL2v8+PH6/fff1b17d/n6+urYsWNauXKlHnvsMY0aNeqa2+jXr58WLVqkkSNHaseOHWratKkuXbqk9evX68knn1S3bt3UvHlzPf7445o2bZr27t2rdu3aydXVVbGxsVq+fLlmz55tMalGftStW1fOzs6aMWOGEhIS5O7urlatWuV5H9bV8vtzDHBYN3KKQAC5y54iN/vDzc3NCA4ONtq2bWvMnj3bYqrwKx09etTo16+fERwcbLi6uhply5Y17rnnHmPFihXmMS+//LLRsGFDo0SJEoanp6dRvXp1Y+rUqUZaWpp5zJXTn2c7e/asERERYQQHBxuxsbGGYRhGfHy80blzZ8PX1zfH9MhHjx41evXqZZQoUcLw8PAwGjZsaKxevdpim9lTWX/yySfG+PHjjcDAQMPT09Po3Lmzcfz48Wv2KDU11Rg9erRRp04dw9fX1/D29jbq1KljvPPOOxbjrp7+PHsa39w+rpyG9+LFi8b48eON8PBww83NzShVqpRx1113Ga+99pq5VytWrDDatWtnBAYGGm5ubkb58uWNxx9/3IiLi8vxGpcvX57r62jRooXh5+dnXLhwwTAMwzh16pQxdOhQIzQ01HB1dTWCg4ON1q1bG++99575OblNG/zHH38Y9957r1GiRAnD39/fuO+++4y//vrLkGRMmjTJYp8vvfSSUbZsWcPJycliKvSrpz/PFhsba+7Rli1bcn0d1tSd18eV+85rGu3r9XPp0qVGvXr1DHd3dyMgIMDo06eP8ccff1iMye34vpbs6c8PHjxo9OrVy/D19TVuu+02Y9iwYRZTrV9p5syZhiTjlVdeyfd+sq1cudLo1KmTUbp0acPFxcUoUaKE0aRJE+PVV181HyfZ0tPTjSlTphhhYWGG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tttu008//aSlS5cqKCioUDUAAADARpqPkVpOkDZNldP3l/847/T9a5dDVMsJl9c7OBd7F3AzaxgWoBB/D8UnpOR6n5RJUrC/hxqGBRTpfsPDw2UymXT48GGL5ZUqVZL036Vvjqxq1aqSpF9++SVfoWzp0qWKiIhQyZIlr3nZHwAAABzEv2HJedNU3WNykbORUWxClMQZKZtydjJpUpcISZdD05WyH0/qEiFnp6vXFk7JkiXVtm1bvfXWW7p06dI1x9aoUUMnT57UyZMnzcsOHjyoCxcuKCIiwjzmhx9+sHjeDz/8YLH+5MmTiov7bwbCbdu2Feo1tGvXTqVKldLMmblfO3v1jHyhoaGqXLkyIQoAAKA4aT5GhrObnI0MGc5uxSZESQQpm+tQM0Rz+96hYH/Ly/eC/T00t+8d6lAzxCb7feedd5SRkaEGDRpo6dKlOnTokA4fPqzFixfrl19+kbPz5etO27Rpo1q1aqlPnz7as2ePduzYoX79+ql58+Zq0KCBJGn06NFasGCB5s6dq9jYWL3++uv6/PPPNWrUKPM2qlatqv79++unn37S999/rwkTJuSrzoSEBO3du9fi4+TJk/L29tb777+vr7/+Wl27dtX69ev1+++/a9euXRozZoyeeOIJm/QNAAAAN1D0TJky05RpcpEpMy3vCSgcEJf23QAdaoaobUSwdhw7r9MXUxToe/lyvqI+E3WlypUr68cff9Qrr7yi8ePH648//pC7u7siIiI0atQoPfnkk5Iuz973xRdf6KmnnlKzZs3k5OSkDh066M033zRvq3v37po9e7Zee+01DR8+XGFhYZo/f75atGghSXJyctLKlSs1aNAgNWzYUBUrVtScOXPUoUOH69a5efNm1atXz2LZoEGD9P7776tbt27aunWrpk2bpoceekiJiYkKDQ1Vq1at9PLLLxddswAAAHDj/TuxRGazcVp9MUL3+B6U86apl9cVgzNTBKkbxNnJpMjKJW/oPkNCQvTmm29ahKLclC9fXl988cU1xwwZMkRDhgzJc33VqlX1/fffWyy73oQRCxYs0IIFC645pkGDBvrss8/yXF+xYkWrJ6YAAACAnWXPztdygrLuGiF9842ymo66fNVUMQlTBCkAAAAAN1ZW5n8TS6Sn/7c8OzxlZdqnLisQpAAAAADcWC3H573Owc9EZWOyCQAAAACwEkEKAAAAAKxEkAIAAAAAKxGkAAAAAMBKBCkAAAAAsBJBCgAAAACsRJACAAAAACsRpGC1yZMnq27duvYuAwAAALAbgpStbZomRc/MfV30zMvrbWDAgAEymUzmj5IlS6pDhw76+eefbbK/K/3+++8ymUzau3dvnmPS0tI0c+ZM1alTR15eXipVqpTuvvtuzZ8/X+n/vrv1la/Bzc1N4eHhevHFF5WRkWHz1wAAAABcC0HK1pycpU1Tc4ap6JmXlzs522zXHTp0UFxcnOLi4rRhwwa5uLjonnvusdn+8istLU3t27fX9OnT9dhjj2nr1q3asWOHhg4dqjfffFMHDhwwj81+DbGxsXr22Wc1efJkvfrqq3asHgAAACBI2V7zMVLLCZZhKjtEtZxweb2NuLu7Kzg4WMHBwapbt67GjRunkydP6syZM+YxY8eOVdWqVeXl5aVKlSpp4sSJ5jNC2aZPn66goCD5+vpq0KBBSklJKVRds2bN0nfffacNGzZo6NChqlu3ripVqqSHHnpI27dvV5UqVXK8hgoVKmjIkCFq06aNvvzyy0LtHwAAACgsF3sXcEvIDkubpkrfvSplptk8RF0tKSlJixcvVnh4uEqWLGle7uvrqwULFqhMmTLat2+fBg8eLF9fX40Zc7m2ZcuWafLkyXr77bfVpEkTffTRR5ozZ44qVapU4Fo+/vhjtWnTRvXq1cuxztXVVa6urnk+19PTU+fOnSvwvgEAAICiYNczUnPnzlXt2rXl5+cnPz8/RUZG6ttvvzWvb9GihcV9PiaTSU888YTFNk6cOKHOnTvLy8tLgYGBGj16tGPeQ9N8jOTsdjlEObvdkBC1evVq+fj4yMfHR76+vvryyy+1dOlSOTn992l//vnnddddd6lixYrq0qWLRo0apWXLlpnXz5o1S4MGDdKgQYNUrVo1vfzyy4qIiChUXbGxsapevbpVzzEMQ+vXr9fatWvVqlWrQu0fAAAAKCy7npEqV66cpk+fripVqsgwDC1cuFDdunXTjz/+qNtvv12SNHjwYL344ovm53h5eZn/n5mZqc6dOys4OFhbt25VXFyc+vXrJ1dXV73yyis3/PVcU/TM/0JUZtrlxzYOUy1bttTcuXMlSX///bfeeecddezYUTt27FCFChUkSUuXLtWcOXN09OhRJSUlKSMjQ35+fuZtHDp0KEd4jYyM1KZNmwpcl2EY+R6bHQbT09OVlZWlhx56SJMnTy7wvgEAAICiYNczUl26dFGnTp1UpUoVVa1aVVOnTpWPj4+2bdtmHuPl5WW+zyc4ONjil/x169bp4MGDWrx4serWrauOHTvqpZde0ttvv620tDR7vKTcXXlP1MQzOe+ZshFvb2+Fh4crPDxcd955p95//31dunRJ//vf/yRJMTEx6tOnjzp16qTVq1frxx9/1IQJE2zeu6pVq+qXX37J19iWLVtq7969io2N1T///KOFCxfK29vbpvUBAAAA1+Mw90hlZmZq+fLlunTpkiIjI83LP/74Yy1evFjBwcHq0qWLJk6caD4rFRMTo1q1aikoKMg8vn379hoyZIgOHDiQ6z04kpSamqrU1FTz48TERElSenp6jokW0tPTZRiGsrKylJWVZf0L++5VOW1+RVktnpOajpKysi7/axhy2jRVWYYhNRttHp59tiZ7nwVlGEaObRiGIScnJyUnJysrK0s//PCDKlSooPHjx5vH/P7775Jkfl6NGjW0bds29e3b1zwmO+jmVV/28rx69uCDD2rChAnavXt3js9Renq60tLS5O3tLcMwzJNgXL3tgsrub0ZGRo7PNQovu6f01jbor23RX9uiv7ZFf22L/tqWo/U3v3XYPUjt27dPkZGRSklJkY+Pj1auXGm+B+ehhx5ShQoVVKZMGf38888aO3asDh8+rM8//1ySFB8fbxGiJJkfx8fH57nPadOmacqUKTmWr1u3zuLSQUlycXFRcHCwkpKSCnSmxuOfZBmRI5Va93Hp38AmSar7uNxTU2T6J1kpVy7/18WLF63e15XS09N16dIlxcbGSpIuXLig//3vf0pKSlKrVq2UmJioMmXK6MSJE5o/f77uuOMOrVu3TitXrpRhGOZw+eijj2ro0KG6/fbb1ahRIy1fvlwHDhxQhQoVzGOulpSUJEnau3evLl26ZLGuevXqGjhwoL788ku1adNGzz33nBo3bixfX1/9+OOPmj17tt58803VqlVL6enpysjIyHM/BZH9Ody6datj3kt3k4iKirJ3CTc1+mtb9Ne26K9t0V/bor+25Sj9TU5Oztc4k2HNDSs2kJaWphMnTighIUErVqzQ+++/r+jo6FwnNNi4caNat26tI0eOqHLlynrsscd0/PhxrV271jwmOTlZ3t7e+uabb9SxY8dc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KisrS40aNbJZHQAAAABubQU6I/XKK6+oY8eOOnjwoDIyMjR79mwdPHhQW7duVXR0dL63k5SUpCNHjpgfHzt2THv37lVAQIACAgI0ZcoU9ezZU8HBwTp69KjGjBmj8PBwtW/fXpJUo0YNdejQQYMHD9a8efOUnp6uYcOG6YEHHmDGPgAAAAA2U6AzUk2aNNHevXuVkZGhWrVqad26dQoMDFRMTIzq16+f7+3s2rVL9erVU7169SRJI0eOVL169fTCCy/I2dlZP//8s7p27aqqVatq0KBBql+/vr7//nuLy/I+/vhjVa9eXa1bt1anTp3UpEkTvffeewV5WQAAAACQLwV+H6nKlSvrf//7X6F23qJFCxmGkef6tWvXXncbAQEBvPkuAAAAgBuqQGekWrVqlev04X///bdatWpV6KIAAAAAwJEV6IzU5s2btW/fPv3444/6+OOP5e3tLUlKS0uz6h4pAAAAACiOCnRGSpLWr1+v+Ph4NW7cWL///nsRlgQAAAAAjq3AQSokJETR0dGqVauW7rzzTm3evLkIywIAAAAAx1WgIJX9vlHu7u5asmSJhg8frg4dOuidd94p0uIAAAAAwBEV6B6pq2fae/7551WjRg3179+/SIoCAAAAAEdWoCB17NgxlSpVymJZz549Va1aNe3evbtICgMAAAAAR1WgIFWhQoVcl9esWVM1a9YsVEEAAAAA4OjyHaR69OihBQsWyM/PTz169Ljm2M8//7zQhQEAAOAaNk2TnJyl5mNyroueKWVlSi3H3/i6gFtEvoOUv7+/eZIJf39/mxUEAACAfHByljZNvfz/u0b8tzx65uXlLSfYpy7gFpHvIDV//nzz/9955x1lZWWZ34j3999/16pVq1SjRg21b9++6KsEAACApewzUZumyikzU1KEnL5/Tfpu+uUQlduZKgBFpkD3SHXr1k09evTQE088oQsXLqhx48ZydXXV2bNn9frrr2vIkCFFXScAAACu9m9Yct40VfeYXORsZBCigBukQO8jtWfPHjVt2lSStGLFCgUFBen48eNatGiR5syZU6QFAgAA4Bqaj5Hh7CZnI0OGsxshCrhBChSkkpOT5evrK0lat26devToIScnJzVu3FjHjx8v0gIBAABwDdEzZcpMU6bJRabMtMv3SAGwuQIFqfDwcK1atUonT57U2rVr1a5dO0nS6dOn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O3fq3XffVe3atS2W0+PCuf322xUXF2f+2LJli3kdvS2cv//+W3fffbdcXV317bff6uDBg/q///s/3XbbbeYx/HwrnJ07d1ocv1FRUZKk++67TxLHcGHNmDFDc+fO1VtvvaVDhw5pxowZmjlzpt58803zGI7hgnv00UcVFRWljz76SPv27VO7du3Upk0b/fnnn5KKYW8N2J0kY+XKlebHWVlZRnBwsPHqq6+al124cMFwd3c3PvnkEztUWLydPn3akGRER0cbhnG5l66ursby5cvNYw4dOmRIMmJiYuxVZrF22223Ge+//z69LUIXL140qlSpYkRFRRnNmzc3hg8fbhgGx29hTZo0yahTp06u6+ht4Y0dO9Zo0qRJnuv5+Vb0hg8fblSuXNnIysriGC4CnTt3Nh555BGLZT169DD69OljGAbHcGEkJycbzs7OxurVqy2W33HHHcaECROKZW85I+WAjh07pvj4eLVp08a8zN/fX40aNVJMTIwdKyueEhISJEkBAQGSpN27dys9Pd2iv9WrV1f58uXpr5UyMzP16aef6tKlS4qMjKS3RWjo0KHq3LmzRS8ljt+iEBsbqzJlyqhSpUrq06ePTpw4IYneFoUvv/xSDRo00H333afAwEDVq1dP//vf/8zr+flWtNLS0rR48WI98sgjMplMHMNF4K677tKGDRv066+/SpJ++uknbdmyRR07dpTEMVwYGRkZyszMlIeHh8VyT09PbdmypVj21sXeBSCn+Ph4SVJQUJDF8qCgIPM65E9WVpaeeeYZ3X333apZs6aky/11c3NTiRIlLMbS3/zbt2+fIiMjlZKSIh8fH61cuVIRERHau3cvvS0Cn376qfbs2WNx3Xg2jt/CadSokRYsWKBq1aopLi5OU6ZMUdOmTbV//356WwR+++03zZ07VyNHjtRzzz2nnTt36umnn5abm5v69+/Pz7citmrVKl24cEEDBgyQxPeHojBu3DglJiaqevXqcnZ2VmZmpqZOnao+ffpI4ne0wvD19VVkZKReeukl1ahRQ0FBQfrkk08UExOj8PDwYtlbghRuakOHDtX+/fst7oFA4VWrVk179+5VQkKCVqxYof79+ys6OtreZd0UTp48qeHDhysqKirHX+1QeNl/VZak2rVrq1GjRqpQoYKWLVsmT09PO1Z2c8jKylKDBg30yiuvSJLq1aun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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Lighthouse \"Properly size images\" audit\n", | |
"https://developer.chrome.com/docs/lighthouse/performance/uses-responsive-images\n", | |
"\n", | |
"Using $.audits.uses-responsive-images.details.overallSavingsBytes which estimates the benefits of optimizing all images. Lower is better.\n" | |
], | |
"metadata": { | |
"id": "jkBDwA2LZ6T2" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from google.cloud import bigquery\n", | |
"import pandas as pd\n", | |
"\n", | |
"client = bigquery.Client(project=project_id)\n", | |
"\n", | |
"query = f\"\"\"\n", | |
"CREATE TEMPORARY FUNCTION IS_CMS(technologies ARRAY<STRUCT<technology STRING, categories ARRAY<STRING>, info ARRAY<STRING>>>, cms STRING, version STRING) RETURNS BOOL AS (\n", | |
" EXISTS(\n", | |
" SELECT * FROM UNNEST(technologies) AS technology, UNNEST(technology.info) AS info\n", | |
" WHERE technology.technology = cms\n", | |
" AND (\n", | |
" version = \"\"\n", | |
" OR ENDS_WITH(version, \".x\") AND (STARTS_WITH(info, RTRIM(version, \"x\")) OR info = RTRIM(version, \".x\"))\n", | |
" OR info = version\n", | |
" )\n", | |
" )\n", | |
");\n", | |
"SELECT\n", | |
" date,\n", | |
" client as device,\n", | |
" IF( IS_CMS(technologies, 'Enhanced Responsive Images', ''), TRUE, FALSE ) AS has_enhanced_responsive_images,\n", | |
" AVG( CAST( JSON_EXTRACT(lighthouse, '$.audits.uses-responsive-images.details.overallSavingsBytes') AS INT64 ) ) AS avg_overallSavingsBytes,\n", | |
"FROM\n", | |
"`httparchive.all.pages`\n", | |
" WHERE\n", | |
" date >= '2024-07-01'\n", | |
" AND IS_CMS(technologies, 'WordPress', '')\n", | |
" AND is_root_page = TRUE\n", | |
"group by date, device, has_enhanced_responsive_images\n", | |
"order by date desc\n", | |
" \"\"\"\n", | |
"\n", | |
"query_job = client.query(query)\n", | |
"data = query_job.result()\n", | |
"\n", | |
"savings_data = data.to_dataframe()\n", | |
"savings_data.head(1000)\n" | |
], | |
"metadata": { | |
"id": "wCmDTib4Z_iP", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 466 | |
}, | |
"outputId": "d078a6f7-f260-4d28-be24-d7d52736cc02" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" date device has_enhanced_responsive_images \\\n", | |
"0 2024-11-01 desktop False \n", | |
"1 2024-11-01 mobile True \n", | |
"2 2024-11-01 mobile False \n", | |
"3 2024-11-01 desktop True \n", | |
"4 2024-10-01 desktop True \n", | |
"5 2024-10-01 mobile True \n", | |
"6 2024-10-01 desktop False \n", | |
"7 2024-10-01 mobile False \n", | |
"8 2024-09-01 desktop True \n", | |
"9 2024-09-01 mobile False \n", | |
"10 2024-09-01 mobile True \n", | |
"11 2024-09-01 desktop False \n", | |
"12 2024-08-01 desktop False \n", | |
"13 2024-08-01 mobile False \n", | |
"14 2024-07-01 desktop False \n", | |
"15 2024-07-01 mobile False \n", | |
"\n", | |
" avg_overallSavingsBytes \n", | |
"0 9.922193e+05 \n", | |
"1 3.850266e+05 \n", | |
"2 5.641636e+05 \n", | |
"3 6.728159e+05 \n", | |
"4 6.739606e+05 \n", | |
"5 3.763887e+05 \n", | |
"6 1.004577e+06 \n", | |
"7 5.748563e+05 \n", | |
"8 6.458372e+05 \n", | |
"9 5.404580e+05 \n", | |
"10 3.674483e+05 \n", | |
"11 9.951503e+05 \n", | |
"12 9.828806e+05 \n", | |
"13 4.994676e+05 \n", | |
"14 9.677986e+05 \n", | |
"15 5.351513e+05 " | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-2dc209e1-f741-4b0f-b713-4dd4bed466cc\" class=\"colab-df-container\">\n", | |
" <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>date</th>\n", | |
" <th>device</th>\n", | |
" <th>has_enhanced_responsive_images</th>\n", | |
" <th>avg_overallSavingsBytes</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2024-11-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>9.922193e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2024-11-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>3.850266e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2024-11-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>5.641636e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>2024-11-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>6.728159e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>2024-10-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>6.739606e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>2024-10-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>3.763887e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>2024-10-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.004577e+06</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>2024-10-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>5.748563e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>2024-09-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>6.458372e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>2024-09-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>5.404580e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>2024-09-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>3.674483e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>2024-09-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>9.951503e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>2024-08-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>9.828806e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>2024-08-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>4.994676e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>2024-07-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>9.677986e+05</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>2024-07-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>5.351513e+05</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-2dc209e1-f741-4b0f-b713-4dd4bed466cc')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-2dc209e1-f741-4b0f-b713-4dd4bed466cc button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-2dc209e1-f741-4b0f-b713-4dd4bed466cc');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-3688b598-5f14-469c-8fd8-aa60860b8bd2\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-3688b598-5f14-469c-8fd8-aa60860b8bd2')\"\n", | |
" title=\"Suggest charts\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-3688b598-5f14-469c-8fd8-aa60860b8bd2 button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
"\n", | |
" </div>\n", | |
" </div>\n" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "dataframe", | |
"variable_name": "savings_data", | |
"summary": "{\n \"name\": \"savings_data\",\n \"rows\": 16,\n \"fields\": [\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"dbdate\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"2024-10-01\",\n \"2024-07-01\",\n \"2024-09-01\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"device\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"mobile\",\n \"desktop\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"has_enhanced_responsive_images\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 2,\n \"samples\": [\n true,\n false\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"avg_overallSavingsBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 238288.182135446,\n \"min\": 367448.30202443997,\n \"max\": 1004576.7702615611,\n \"num_unique_values\": 16,\n \"samples\": [\n 992219.257736346,\n 385026.62235558935\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
}, | |
"application/vnd.google.colaboratory.module+javascript": "\n import \"https://ssl.gstatic.com/colaboratory/data_table/e523c247d1e24a05/data_table.js\";\n\n const table = window.createDataTable({\n data: [[{\n 'v': 0,\n 'f': \"0\",\n },\n\"2024-11-01\",\n\"desktop\",\nfalse,\n{\n 'v': 992219.257736346,\n 'f': \"992219.257736346\",\n }],\n [{\n 'v': 1,\n 'f': \"1\",\n },\n\"2024-11-01\",\n\"mobile\",\ntrue,\n{\n 'v': 385026.62235558935,\n 'f': \"385026.62235558935\",\n }],\n [{\n 'v': 2,\n 'f': \"2\",\n },\n\"2024-11-01\",\n\"mobile\",\nfalse,\n{\n 'v': 564163.5904816478,\n 'f': \"564163.5904816478\",\n }],\n [{\n 'v': 3,\n 'f': \"3\",\n },\n\"2024-11-01\",\n\"desktop\",\ntrue,\n{\n 'v': 672815.9259862461,\n 'f': \"672815.9259862461\",\n }],\n [{\n 'v': 4,\n 'f': \"4\",\n },\n\"2024-10-01\",\n\"desktop\",\ntrue,\n{\n 'v': 673960.5539301749,\n 'f': \"673960.5539301749\",\n }],\n [{\n 'v': 5,\n 'f': \"5\",\n },\n\"2024-10-01\",\n\"mobile\",\ntrue,\n{\n 'v': 376388.70094064344,\n 'f': \"376388.70094064344\",\n }],\n [{\n 'v': 6,\n 'f': \"6\",\n },\n\"2024-10-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1004576.7702615611,\n 'f': \"1004576.7702615611\",\n }],\n [{\n 'v': 7,\n 'f': \"7\",\n },\n\"2024-10-01\",\n\"mobile\",\nfalse,\n{\n 'v': 574856.3241418735,\n 'f': \"574856.3241418735\",\n }],\n [{\n 'v': 8,\n 'f': \"8\",\n },\n\"2024-09-01\",\n\"desktop\",\ntrue,\n{\n 'v': 645837.1692515153,\n 'f': \"645837.1692515153\",\n }],\n [{\n 'v': 9,\n 'f': \"9\",\n },\n\"2024-09-01\",\n\"mobile\",\nfalse,\n{\n 'v': 540458.017944187,\n 'f': \"540458.017944187\",\n }],\n [{\n 'v': 10,\n 'f': \"10\",\n },\n\"2024-09-01\",\n\"mobile\",\ntrue,\n{\n 'v': 367448.30202443997,\n 'f': \"367448.30202443997\",\n }],\n [{\n 'v': 11,\n 'f': \"11\",\n },\n\"2024-09-01\",\n\"desktop\",\nfalse,\n{\n 'v': 995150.3114712802,\n 'f': \"995150.3114712802\",\n }],\n [{\n 'v': 12,\n 'f': \"12\",\n },\n\"2024-08-01\",\n\"desktop\",\nfalse,\n{\n 'v': 982880.6008834876,\n 'f': \"982880.6008834876\",\n }],\n [{\n 'v': 13,\n 'f': \"13\",\n },\n\"2024-08-01\",\n\"mobile\",\nfalse,\n{\n 'v': 499467.6288865285,\n 'f': \"499467.6288865285\",\n }],\n [{\n 'v': 14,\n 'f': \"14\",\n },\n\"2024-07-01\",\n\"desktop\",\nfalse,\n{\n 'v': 967798.649239414,\n 'f': \"967798.649239414\",\n }],\n [{\n 'v': 15,\n 'f': \"15\",\n },\n\"2024-07-01\",\n\"mobile\",\nfalse,\n{\n 'v': 535151.2618143432,\n 'f': \"535151.2618143432\",\n }]],\n columns: [[\"number\", \"index\"], [\"string\", \"date\"], [\"string\", \"device\"], [\"string\", \"has_enhanced_responsive_images\"], [\"number\", \"avg_overallSavingsBytes\"]],\n columnOptions: [{\"width\": \"1px\", \"className\": \"index_column\"}],\n rowsPerPage: 25,\n helpUrl: \"https://colab.research.google.com/notebooks/data_table.ipynb\",\n suppressOutputScrolling: true,\n minimumWidth: undefined,\n });\n\n function appendQuickchartButton(parentElement) {\n let quickchartButtonContainerElement = document.createElement('div');\n quickchartButtonContainerElement.innerHTML = `\n<div id=\"df-d6ab05cb-7c25-47c4-a687-978a23e9dbfa\">\n <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-d6ab05cb-7c25-47c4-a687-978a23e9dbfa')\"\n title=\"Suggest charts\"\n style=\"display:none;\">\n \n<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n width=\"24px\">\n <g>\n <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n </g>\n</svg>\n </button>\n \n<style>\n .colab-df-quickchart {\n --bg-color: #E8F0FE;\n --fill-color: #1967D2;\n --hover-bg-color: #E2EBFA;\n --hover-fill-color: #174EA6;\n --disabled-fill-color: #AAA;\n --disabled-bg-color: #DDD;\n }\n\n [theme=dark] .colab-df-quickchart {\n --bg-color: #3B4455;\n --fill-color: #D2E3FC;\n --hover-bg-color: #434B5C;\n --hover-fill-color: #FFFFFF;\n --disabled-bg-color: #3B4455;\n --disabled-fill-color: #666;\n }\n\n .colab-df-quickchart {\n background-color: var(--bg-color);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: none;\n fill: var(--fill-color);\n height: 32px;\n padding: 0;\n width: 32px;\n }\n\n .colab-df-quickchart:hover {\n background-color: var(--hover-bg-color);\n box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n fill: var(--button-hover-fill-color);\n }\n\n .colab-df-quickchart-complete:disabled,\n .colab-df-quickchart-complete:disabled:hover {\n background-color: var(--disabled-bg-color);\n fill: var(--disabled-fill-color);\n box-shadow: none;\n }\n\n .colab-df-spinner {\n border: 2px solid var(--fill-color);\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n animation:\n spin 1s steps(1) infinite;\n }\n\n @keyframes spin {\n 0% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n border-left-color: var(--fill-color);\n }\n 20% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 30% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n border-right-color: var(--fill-color);\n }\n 40% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 60% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n }\n 80% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-bottom-color: var(--fill-color);\n }\n 90% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n }\n }\n</style>\n\n <script>\n async function quickchart(key) {\n const quickchartButtonEl =\n document.querySelector('#' + key + ' button');\n quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n quickchartButtonEl.classList.add('colab-df-spinner');\n try {\n const charts = await google.colab.kernel.invokeFunction(\n 'suggestCharts', [key], {});\n } catch (error) {\n console.error('Error during call to suggestCharts:', error);\n }\n quickchartButtonEl.classList.remove('colab-df-spinner');\n quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n }\n (() => {\n let quickchartButtonEl =\n document.querySelector('#df-d6ab05cb-7c25-47c4-a687-978a23e9dbfa button');\n quickchartButtonEl.style.display =\n google.colab.kernel.accessAllowed ? 'block' : 'none';\n })();\n </script>\n</div>`;\n parentElement.appendChild(quickchartButtonContainerElement);\n }\n\n appendQuickchartButton(table);\n " | |
}, | |
"metadata": {}, | |
"execution_count": 8 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import altair as alt\n", | |
"from io import StringIO\n", | |
"import pandas as pd\n", | |
"import warnings\n", | |
"\n", | |
"# Suppress FutureWarnings\n", | |
"warnings.simplefilter(action='ignore', category=FutureWarning)\n", | |
"\n", | |
"df = savings_data.copy()\n", | |
"\n", | |
"# Convert `date` to datetime\n", | |
"df['date'] = pd.to_datetime(df['date'])\n", | |
"\n", | |
"# Convert `avg_overallSavingsBytes` to MB\n", | |
"df['avg_overallSavingsBytes'] = df['avg_overallSavingsBytes'] / 1000000 # \"MB\"\n", | |
"\n", | |
"# Create a multi-series line chart\n", | |
"chart = alt.Chart(df).mark_line(point=True).encode(\n", | |
" # Set the x-axis to show `date`\n", | |
" x=alt.X('date', axis=alt.Axis(title='Date')),\n", | |
" # Set the y-axis to display `avg_overallSavingsBytes` in MB\n", | |
" y=alt.Y('avg_overallSavingsBytes', axis=alt.Axis(title='MB'), scale=alt.Scale(domain=[0, df['avg_overallSavingsBytes'].max() * 1.1], nice=True)),\n", | |
" # Use different colors for lines based on `has_enhanced_responsive_images` with a custom legend title\n", | |
" color=alt.Color('has_enhanced_responsive_images', legend=alt.Legend(title=\"Has enhanced responsive images\")),\n", | |
" # Group the lines by `device`\n", | |
" column=alt.Column('device', header=alt.Header(titleOrient='bottom', labelOrient='bottom')),\n", | |
" # Add tooltip for relevant columns to show details on hover. Display `avg_overallSavingsBytes` in MB.\n", | |
" tooltip=['device', 'has_enhanced_responsive_images', alt.Tooltip('avg_overallSavingsBytes', title='Average Overall Savings Bytes (MB)', format='.2f')]\n", | |
").properties(\n", | |
" # Add a title to the chart\n", | |
" title='Benefits of optimizing all images in megabytes. Lower is better - there is less to optimize.'\n", | |
").interactive() # Add interactive features for zoom and pan\n", | |
"\n", | |
"# Display the chart\n", | |
"chart.display()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 437 | |
}, | |
"id": "qlkonMliP1Mi", | |
"outputId": "8111c25c-d6bb-439b-bc5d-989aaecbba1a" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"\n", | |
"<div id=\"altair-viz-42e2f32be53e400d9d35675da573f09b\"></div>\n", | |
"<script type=\"text/javascript\">\n", | |
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n", | |
" (function(spec, embedOpt){\n", | |
" let outputDiv = document.currentScript.previousElementSibling;\n", | |
" if (outputDiv.id !== \"altair-viz-42e2f32be53e400d9d35675da573f09b\") {\n", | |
" outputDiv = document.getElementById(\"altair-viz-42e2f32be53e400d9d35675da573f09b\");\n", | |
" }\n", | |
" const paths = {\n", | |
" \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", | |
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", | |
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm//[email protected]?noext\",\n", | |
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n", | |
" };\n", | |
"\n", | |
" function maybeLoadScript(lib, version) {\n", | |
" var key = `${lib.replace(\"-\", \"\")}_version`;\n", | |
" return (VEGA_DEBUG[key] == version) ?\n", | |
" Promise.resolve(paths[lib]) :\n", | |
" new Promise(function(resolve, reject) {\n", | |
" var s = document.createElement('script');\n", | |
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n", | |
" s.async = true;\n", | |
" s.onload = () => {\n", | |
" VEGA_DEBUG[key] = version;\n", | |
" return resolve(paths[lib]);\n", | |
" };\n", | |
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n", | |
" s.src = paths[lib];\n", | |
" });\n", | |
" }\n", | |
"\n", | |
" function showError(err) {\n", | |
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n", | |
" throw err;\n", | |
" }\n", | |
"\n", | |
" function displayChart(vegaEmbed) {\n", | |
" vegaEmbed(outputDiv, spec, embedOpt)\n", | |
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n", | |
" }\n", | |
"\n", | |
" if(typeof define === \"function\" && define.amd) {\n", | |
" requirejs.config({paths});\n", | |
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n", | |
" } else {\n", | |
" maybeLoadScript(\"vega\", \"5\")\n", | |
" .then(() => maybeLoadScript(\"vega-lite\", \"4.17.0\"))\n", | |
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n", | |
" .catch(showError)\n", | |
" .then(() => displayChart(vegaEmbed));\n", | |
" }\n", | |
" })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-5d6041b80b05e9f15156821e1dc7e236\"}, \"mark\": {\"type\": \"line\", \"point\": true}, \"encoding\": {\"color\": {\"field\": \"has_enhanced_responsive_images\", \"legend\": {\"title\": \"Has enhanced responsive images\"}, \"type\": \"nominal\"}, \"column\": {\"field\": \"device\", \"header\": {\"labelOrient\": \"bottom\", \"titleOrient\": \"bottom\"}, \"type\": \"nominal\"}, \"tooltip\": [{\"field\": \"device\", \"type\": \"nominal\"}, {\"field\": \"has_enhanced_responsive_images\", \"type\": \"nominal\"}, {\"field\": \"avg_overallSavingsBytes\", \"format\": \".2f\", \"title\": \"Average Overall Savings Bytes (MB)\", \"type\": \"quantitative\"}], \"x\": {\"axis\": {\"title\": \"Date\"}, \"field\": \"date\", \"type\": \"temporal\"}, \"y\": {\"axis\": {\"title\": \"MB\"}, \"field\": \"avg_overallSavingsBytes\", \"scale\": {\"domain\": [0, 1.105034447287715], \"nice\": true}, \"type\": \"quantitative\"}}, \"selection\": {\"selector001\": {\"type\": \"interval\", \"bind\": \"scales\", \"encodings\": [\"x\", \"y\"]}}, \"title\": \"Benefits of optimizing all images in megabytes. Lower is better - there is less to optimize.\", \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.17.0.json\", \"datasets\": {\"data-5d6041b80b05e9f15156821e1dc7e236\": [{\"date\": \"2024-11-01T00:00:00\", \"device\": \"desktop\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.9922192577363493}, {\"date\": \"2024-11-01T00:00:00\", \"device\": \"mobile\", \"has_enhanced_responsive_images\": true, \"avg_overallSavingsBytes\": 0.38502662235559015}, {\"date\": \"2024-11-01T00:00:00\", \"device\": \"mobile\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.5641635904816521}, {\"date\": \"2024-11-01T00:00:00\", \"device\": \"desktop\", \"has_enhanced_responsive_images\": true, \"avg_overallSavingsBytes\": 0.6728159259862477}, {\"date\": \"2024-10-01T00:00:00\", \"device\": \"desktop\", \"has_enhanced_responsive_images\": true, \"avg_overallSavingsBytes\": 0.673960553930174}, {\"date\": \"2024-10-01T00:00:00\", \"device\": \"mobile\", \"has_enhanced_responsive_images\": true, \"avg_overallSavingsBytes\": 0.37638870094064064}, {\"date\": \"2024-10-01T00:00:00\", \"device\": \"desktop\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 1.004576770261559}, {\"date\": \"2024-10-01T00:00:00\", \"device\": \"mobile\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.5748563241418612}, {\"date\": \"2024-09-01T00:00:00\", \"device\": \"desktop\", \"has_enhanced_responsive_images\": true, \"avg_overallSavingsBytes\": 0.6458371692515148}, {\"date\": \"2024-09-01T00:00:00\", \"device\": \"mobile\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.540458017944164}, {\"date\": \"2024-09-01T00:00:00\", \"device\": \"mobile\", \"has_enhanced_responsive_images\": true, \"avg_overallSavingsBytes\": 0.3674483020244394}, {\"date\": \"2024-09-01T00:00:00\", \"device\": \"desktop\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.9951503114712881}, {\"date\": \"2024-08-01T00:00:00\", \"device\": \"desktop\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.9828806008834752}, {\"date\": \"2024-08-01T00:00:00\", \"device\": \"mobile\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.4994676288865302}, {\"date\": \"2024-07-01T00:00:00\", \"device\": \"desktop\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.9677986492394233}, {\"date\": \"2024-07-01T00:00:00\", \"device\": \"mobile\", \"has_enhanced_responsive_images\": false, \"avg_overallSavingsBytes\": 0.5351512618143442}]}}, {\"mode\": \"vega-lite\"});\n", | |
"</script>" | |
], | |
"text/plain": [ | |
"alt.Chart(...)" | |
] | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import altair as alt\n", | |
"from io import StringIO\n", | |
"import pandas as pd\n", | |
"import warnings\n", | |
"\n", | |
"# Suppress FutureWarnings\n", | |
"warnings.simplefilter(action='ignore', category=FutureWarning)\n", | |
"\n", | |
"df = savings_data.copy()\n", | |
"\n", | |
"# Convert `date` to datetime\n", | |
"df['date'] = pd.to_datetime(df['date'])\n", | |
"\n", | |
"# Convert `avg_overallSavingsBytes` to MB\n", | |
"df['avg_overallSavingsBytes'] = df['avg_overallSavingsBytes'] / 1000000\n", | |
"\n", | |
"# Group by `date`, `device`, and `has_enhanced_responsive_images` and calculate the mean of `avg_overallSavingsBytes`\n", | |
"df_grouped = df.groupby(['date', 'device', 'has_enhanced_responsive_images'])['avg_overallSavingsBytes'].mean().reset_index()\n", | |
"\n", | |
"# Create a pivot table with `has_enhanced_responsive_images` as columns, `avg_overallSavingsBytes` as values, and `date` and `device` as the index\n", | |
"df_pivot = df_grouped.pivot(index=['date', 'device'], columns='has_enhanced_responsive_images', values='avg_overallSavingsBytes').reset_index()\n", | |
"\n", | |
"# Rename the columns to strings\n", | |
"df_pivot = df_pivot.rename(columns={True: 'True', False: 'False'})\n", | |
"\n", | |
"# Calculate the difference between the true and false values of `has_enhanced_responsive_images`\n", | |
"df_pivot['difference'] = df_pivot['False'] - df_pivot['True']\n", | |
"\n", | |
"# Create a bar chart to show the differences\n", | |
"chart = alt.Chart(df_pivot).mark_bar().encode(\n", | |
" # Set the x-axis to show `device`\n", | |
" x=alt.X('device', axis=None),\n", | |
" # Set the y-axis to display the `difference`\n", | |
" y=alt.Y('difference', axis=alt.Axis(title='Difference in Average Overall Savings Bytes (MB)')),\n", | |
" # Use different colors for bars based on `device`\n", | |
" color='device',\n", | |
" # Group the bars by `date`. Move the date label below the chart and format the date.\n", | |
" column=alt.Column('date', header=alt.Header(title='Difference by Month and Device', titleOrient='bottom', labelOrient='top', format='%B %Y')),\n", | |
" # Add tooltip for relevant columns to show details on hover. Display `avg_overallSavingsBytes` in MB.\n", | |
" tooltip=[alt.Tooltip('date', title='Date', format='%B %Y'), 'device', alt.Tooltip('difference', title='Difference (MB)', format='.2f')]\n", | |
").properties(\n", | |
" # Add a title to the chart\n", | |
" title='Difference by Month and Device'\n", | |
").interactive() # Add interactive features for zoom and pan\n", | |
"\n", | |
"# Display the chart\n", | |
"chart.display()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 401 | |
}, | |
"id": "iamOp9bQT1Ch", | |
"outputId": "23b78c17-c559-4fe4-c828-a2076634e7c9" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"\n", | |
"<div id=\"altair-viz-88a1bb6047b94b4a930d76fb56291b9c\"></div>\n", | |
"<script type=\"text/javascript\">\n", | |
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n", | |
" (function(spec, embedOpt){\n", | |
" let outputDiv = document.currentScript.previousElementSibling;\n", | |
" if (outputDiv.id !== \"altair-viz-88a1bb6047b94b4a930d76fb56291b9c\") {\n", | |
" outputDiv = document.getElementById(\"altair-viz-88a1bb6047b94b4a930d76fb56291b9c\");\n", | |
" }\n", | |
" const paths = {\n", | |
" \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", | |
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", | |
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm//[email protected]?noext\",\n", | |
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n", | |
" };\n", | |
"\n", | |
" function maybeLoadScript(lib, version) {\n", | |
" var key = `${lib.replace(\"-\", \"\")}_version`;\n", | |
" return (VEGA_DEBUG[key] == version) ?\n", | |
" Promise.resolve(paths[lib]) :\n", | |
" new Promise(function(resolve, reject) {\n", | |
" var s = document.createElement('script');\n", | |
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n", | |
" s.async = true;\n", | |
" s.onload = () => {\n", | |
" VEGA_DEBUG[key] = version;\n", | |
" return resolve(paths[lib]);\n", | |
" };\n", | |
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n", | |
" s.src = paths[lib];\n", | |
" });\n", | |
" }\n", | |
"\n", | |
" function showError(err) {\n", | |
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n", | |
" throw err;\n", | |
" }\n", | |
"\n", | |
" function displayChart(vegaEmbed) {\n", | |
" vegaEmbed(outputDiv, spec, embedOpt)\n", | |
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n", | |
" }\n", | |
"\n", | |
" if(typeof define === \"function\" && define.amd) {\n", | |
" requirejs.config({paths});\n", | |
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n", | |
" } else {\n", | |
" maybeLoadScript(\"vega\", \"5\")\n", | |
" .then(() => maybeLoadScript(\"vega-lite\", \"4.17.0\"))\n", | |
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n", | |
" .catch(showError)\n", | |
" .then(() => displayChart(vegaEmbed));\n", | |
" }\n", | |
" })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-3f8bb64ad7a75876634e6fa4ed730ff0\"}, \"mark\": \"bar\", \"encoding\": {\"color\": {\"field\": \"device\", \"type\": \"nominal\"}, \"column\": {\"field\": \"date\", \"header\": {\"format\": \"%B %Y\", \"labelOrient\": \"top\", \"title\": \"Difference by Month and Device\", \"titleOrient\": \"bottom\"}, \"type\": \"temporal\"}, \"tooltip\": [{\"field\": \"date\", \"format\": \"%B %Y\", \"title\": \"Date\", \"type\": \"temporal\"}, {\"field\": \"device\", \"type\": \"nominal\"}, {\"field\": \"difference\", \"format\": \".2f\", \"title\": \"Difference (MB)\", \"type\": \"quantitative\"}], \"x\": {\"axis\": null, \"field\": \"device\", \"type\": \"nominal\"}, \"y\": {\"axis\": {\"title\": \"Difference in Average Overall Savings Bytes (MB)\"}, \"field\": \"difference\", \"type\": \"quantitative\"}}, \"selection\": {\"selector002\": {\"type\": \"interval\", \"bind\": \"scales\", \"encodings\": [\"x\", \"y\"]}}, \"title\": \"Difference by Month and Device\", \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.17.0.json\", \"datasets\": {\"data-3f8bb64ad7a75876634e6fa4ed730ff0\": [{\"date\": \"2024-07-01T00:00:00\", \"device\": \"desktop\", \"False\": 0.9677986492394233, \"True\": null, \"difference\": null}, {\"date\": \"2024-07-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.5351512618143442, \"True\": null, \"difference\": null}, {\"date\": \"2024-08-01T00:00:00\", \"device\": \"desktop\", \"False\": 0.9828806008834752, \"True\": null, \"difference\": null}, {\"date\": \"2024-08-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.4994676288865302, \"True\": null, \"difference\": null}, {\"date\": \"2024-09-01T00:00:00\", \"device\": \"desktop\", \"False\": 0.9951503114712881, \"True\": 0.6458371692515148, \"difference\": 0.3493131422197733}, {\"date\": \"2024-09-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.540458017944164, \"True\": 0.3674483020244394, \"difference\": 0.17300971591972464}, {\"date\": \"2024-10-01T00:00:00\", \"device\": \"desktop\", \"False\": 1.004576770261559, \"True\": 0.673960553930174, \"difference\": 0.33061621633138494}, {\"date\": \"2024-10-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.5748563241418612, \"True\": 0.37638870094064064, \"difference\": 0.19846762320122052}, {\"date\": \"2024-11-01T00:00:00\", \"device\": \"desktop\", \"False\": 0.9922192577363493, \"True\": 0.6728159259862477, \"difference\": 0.3194033317501016}, {\"date\": \"2024-11-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.5641635904816521, \"True\": 0.38502662235559015, \"difference\": 0.17913696812606195}]}}, {\"mode\": \"vega-lite\"});\n", | |
"</script>" | |
], | |
"text/plain": [ | |
"alt.Chart(...)" | |
] | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import altair as alt\n", | |
"from io import StringIO\n", | |
"import pandas as pd\n", | |
"import warnings\n", | |
"\n", | |
"# Suppress FutureWarnings\n", | |
"warnings.simplefilter(action='ignore', category=FutureWarning)\n", | |
"\n", | |
"df = savings_data.copy()\n", | |
"\n", | |
"# Convert `date` to datetime\n", | |
"df['date'] = pd.to_datetime(df['date'])\n", | |
"\n", | |
"# Convert `avg_overallSavingsBytes` to MB\n", | |
"df['avg_overallSavingsBytes'] = df['avg_overallSavingsBytes'] / 1000000\n", | |
"\n", | |
"# Group by `date`, `device`, and `has_enhanced_responsive_images` and calculate the mean of `avg_overallSavingsBytes`\n", | |
"df_grouped = df.groupby(['date', 'device', 'has_enhanced_responsive_images'])['avg_overallSavingsBytes'].mean().reset_index()\n", | |
"\n", | |
"# Create a pivot table with `has_enhanced_responsive_images` as columns, `avg_overallSavingsBytes` as values, and `date` and `device` as the index\n", | |
"df_pivot = df_grouped.pivot(index=['date', 'device'], columns='has_enhanced_responsive_images', values='avg_overallSavingsBytes').reset_index()\n", | |
"\n", | |
"# Rename the columns to strings\n", | |
"df_pivot = df_pivot.rename(columns={True: 'True', False: 'False'})\n", | |
"\n", | |
"# Calculate the percent change from True to False\n", | |
"df_pivot['percent_change'] = ((df_pivot['False'] - df_pivot['True']) / df_pivot['False']) * 100\n", | |
"\n", | |
"# Create a bar chart to show the percent change\n", | |
"chart = alt.Chart(df_pivot).mark_bar().encode(\n", | |
" # Set the x-axis to show `device`\n", | |
" x=alt.X('device', axis=None),\n", | |
" # Set the y-axis to display the `percent_change`\n", | |
" y=alt.Y('percent_change', axis=alt.Axis(title='Percent Change in Average Overall Savings Bytes (%)')),\n", | |
" # Use different colors for bars based on `device`\n", | |
" color='device',\n", | |
" # Group the bars by `date`. Move the date label below the chart and format the date.\n", | |
" column=alt.Column('date', header=alt.Header(title='Percent Change', titleOrient='top', labelOrient='top', format='%B %Y')),\n", | |
" # Add tooltip for relevant columns to show details on hover. Display `avg_overallSavingsBytes` in MB.\n", | |
" tooltip=[alt.Tooltip('date', title='Date', format='%B %Y'), 'device', alt.Tooltip('percent_change', title='Percent Change (%)', format='.2f')]\n", | |
").properties(\n", | |
" # Add a title to the chart\n", | |
" title='Percent Impact of Enhanced responsive images by Month and Device'\n", | |
").interactive() # Add interactive features for zoom and pan\n", | |
"\n", | |
"# Display the chart\n", | |
"chart.display()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 405 | |
}, | |
"id": "sdtfstFiW37Y", | |
"outputId": "2936fca2-66bc-49ae-c842-d3b4b0475fe7" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": [ | |
"\n", | |
"<div id=\"altair-viz-c6ecafcd8cf74f99bfd8b20a32eab18c\"></div>\n", | |
"<script type=\"text/javascript\">\n", | |
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n", | |
" (function(spec, embedOpt){\n", | |
" let outputDiv = document.currentScript.previousElementSibling;\n", | |
" if (outputDiv.id !== \"altair-viz-c6ecafcd8cf74f99bfd8b20a32eab18c\") {\n", | |
" outputDiv = document.getElementById(\"altair-viz-c6ecafcd8cf74f99bfd8b20a32eab18c\");\n", | |
" }\n", | |
" const paths = {\n", | |
" \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", | |
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", | |
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm//[email protected]?noext\",\n", | |
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n", | |
" };\n", | |
"\n", | |
" function maybeLoadScript(lib, version) {\n", | |
" var key = `${lib.replace(\"-\", \"\")}_version`;\n", | |
" return (VEGA_DEBUG[key] == version) ?\n", | |
" Promise.resolve(paths[lib]) :\n", | |
" new Promise(function(resolve, reject) {\n", | |
" var s = document.createElement('script');\n", | |
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n", | |
" s.async = true;\n", | |
" s.onload = () => {\n", | |
" VEGA_DEBUG[key] = version;\n", | |
" return resolve(paths[lib]);\n", | |
" };\n", | |
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n", | |
" s.src = paths[lib];\n", | |
" });\n", | |
" }\n", | |
"\n", | |
" function showError(err) {\n", | |
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n", | |
" throw err;\n", | |
" }\n", | |
"\n", | |
" function displayChart(vegaEmbed) {\n", | |
" vegaEmbed(outputDiv, spec, embedOpt)\n", | |
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n", | |
" }\n", | |
"\n", | |
" if(typeof define === \"function\" && define.amd) {\n", | |
" requirejs.config({paths});\n", | |
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n", | |
" } else {\n", | |
" maybeLoadScript(\"vega\", \"5\")\n", | |
" .then(() => maybeLoadScript(\"vega-lite\", \"4.17.0\"))\n", | |
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n", | |
" .catch(showError)\n", | |
" .then(() => displayChart(vegaEmbed));\n", | |
" }\n", | |
" })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-2f0da53be26925f06c763d769a8fdb25\"}, \"mark\": \"bar\", \"encoding\": {\"color\": {\"field\": \"device\", \"type\": \"nominal\"}, \"column\": {\"field\": \"date\", \"header\": {\"format\": \"%B %Y\", \"labelOrient\": \"top\", \"title\": \"Percent Change\", \"titleOrient\": \"top\"}, \"type\": \"temporal\"}, \"tooltip\": [{\"field\": \"date\", \"format\": \"%B %Y\", \"title\": \"Date\", \"type\": \"temporal\"}, {\"field\": \"device\", \"type\": \"nominal\"}, {\"field\": \"percent_change\", \"format\": \".2f\", \"title\": \"Percent Change (%)\", \"type\": \"quantitative\"}], \"x\": {\"axis\": null, \"field\": \"device\", \"type\": \"nominal\"}, \"y\": {\"axis\": {\"title\": \"Percent Change in Average Overall Savings Bytes (%)\"}, \"field\": \"percent_change\", \"type\": \"quantitative\"}}, \"selection\": {\"selector003\": {\"type\": \"interval\", \"bind\": \"scales\", \"encodings\": [\"x\", \"y\"]}}, \"title\": \"Percent Impact of Enhanced responsive images by Month and Device\", \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.17.0.json\", \"datasets\": {\"data-2f0da53be26925f06c763d769a8fdb25\": [{\"date\": \"2024-07-01T00:00:00\", \"device\": \"desktop\", \"False\": 0.9677986492394233, \"True\": null, \"percent_change\": null}, {\"date\": \"2024-07-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.5351512618143442, \"True\": null, \"percent_change\": null}, {\"date\": \"2024-08-01T00:00:00\", \"device\": \"desktop\", \"False\": 0.9828806008834752, \"True\": null, \"percent_change\": null}, {\"date\": \"2024-08-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.4994676288865302, \"True\": null, \"percent_change\": null}, {\"date\": \"2024-09-01T00:00:00\", \"device\": \"desktop\", \"False\": 0.9951503114712881, \"True\": 0.6458371692515148, \"percent_change\": 35.10154578591534}, {\"date\": \"2024-09-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.540458017944164, \"True\": 0.3674483020244394, \"percent_change\": 32.01168456669999}, {\"date\": \"2024-10-01T00:00:00\", \"device\": \"desktop\", \"False\": 1.004576770261559, \"True\": 0.673960553930174, \"percent_change\": 32.91099556734756}, {\"date\": \"2024-10-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.5748563241418612, \"True\": 0.37638870094064064, \"percent_change\": 34.52473511489861}, {\"date\": \"2024-11-01T00:00:00\", \"device\": \"desktop\", \"False\": 0.9922192577363493, \"True\": 0.6728159259862477, \"percent_change\": 32.19080150477919}, {\"date\": \"2024-11-01T00:00:00\", \"device\": \"mobile\", \"False\": 0.5641635904816521, \"True\": 0.38502662235559015, \"percent_change\": 31.75266379262876}]}}, {\"mode\": \"vega-lite\"});\n", | |
"</script>" | |
], | |
"text/plain": [ | |
"alt.Chart(...)" | |
] | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Impact of installing\n", | |
"Compare a set of sites that installed the plugin during a date range against a set of sites that did not." | |
], | |
"metadata": { | |
"id": "jRQc971Ksx8U" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# auto-sizes\n", | |
"before_date = '2024-06-01'\n", | |
"after_date = '2024-09-01'\n", | |
"generator_tag = 'auto-sizes'\n", | |
"\n", | |
"results_is2 = query_cwv_compare_feature_to_baseline_by_device(generator_tag, before_date, after_date)\n", | |
"print(results_is2)\n", | |
"# results from https://colab.sandbox.google.com/gist/adamsilverstein/20fbb28b6db2c280089b79b9fadb2ca1/wpp-metrics-tracking.ipynb#scrollTo=9EmGXoLLdCmc" | |
], | |
"metadata": { | |
"id": "VEGvd3Hu4w_x" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Innacurate sizes over time" | |
], | |
"metadata": { | |
"id": "gbV30ZDwVNFf" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from google.cloud import bigquery\n", | |
"\n", | |
"client = bigquery.Client(project=project_id)\n", | |
"\n", | |
"query = f\"\"\"\n", | |
"CREATE TEMP FUNCTION IS_GOOD(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64)\n", | |
" RETURNS BOOL\n", | |
" AS (\n", | |
" good / (good + needs_improvement + poor) >= 0.75\n", | |
" );\n", | |
"\n", | |
"CREATE TEMP FUNCTION IS_NON_ZERO(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64)\n", | |
" RETURNS BOOL\n", | |
" AS (\n", | |
" good + needs_improvement + poor > 0\n", | |
" );\n", | |
"\n", | |
"CREATE TEMPORARY FUNCTION GET_IMG_SIZES_ACCURACY(custom_metrics STRING) RETURNS\n", | |
" ARRAY<STRUCT<hasSrcset BOOL,\n", | |
" hasSizes BOOL,\n", | |
" sizesAbsoluteError FLOAT64,\n", | |
" sizesRelativeError FLOAT64,\n", | |
" idealSizesSelectedResourceEstimatedPixels INT64,\n", | |
" actualSizesEstimatedWastedLoadedPixels INT64,\n", | |
" relativeSizesEstimatedWastedLoadedPixels FLOAT64,\n", | |
" idealSizesSelectedResourceEstimatedBytes FLOAT64,\n", | |
" actualSizesEstimatedWastedLoadedBytes FLOAT64,\n", | |
" relativeSizesEstimatedWastedLoadedBytes FLOAT64>>\n", | |
"AS (\n", | |
" ARRAY(\n", | |
" SELECT AS STRUCT\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.hasSrcset') AS BOOL) AS hasSrcset,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.hasSizes') AS BOOL) AS hasSizes,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.sizesAbsoluteError') AS FLOAT64) AS sizesAbsoluteError,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.sizesRelativeError') AS FLOAT64) AS sizesRelativeError,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedPixels') AS INT64) AS idealSizesSelectedResourceEstimatedPixels,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedPixels') AS INT64) AS actualSizesEstimatedWastedLoadedPixels,\n", | |
" SAFE_DIVIDE(\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedPixels') AS INT64),\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedPixels') AS INT64)\n", | |
" ) AS relativeSizesEstimatedWastedLoadedPixels,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedBytes') AS FLOAT64) AS idealSizesSelectedResourceEstimatedBytes,\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedBytes') AS FLOAT64) AS actualSizesEstimatedWastedLoadedBytes,\n", | |
" SAFE_DIVIDE(\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.actualSizesEstimatedWastedLoadedBytes') AS FLOAT64),\n", | |
" CAST(JSON_EXTRACT_SCALAR(image, '$.idealSizesSelectedResourceEstimatedBytes') AS FLOAT64)\n", | |
" ) AS relativeSizesEstimatedWastedLoadedBytes,\n", | |
" FROM\n", | |
" UNNEST(JSON_EXTRACT_ARRAY(custom_metrics, '$.responsive_images.responsive-images')) AS image\n", | |
" )\n", | |
");\n", | |
"\n", | |
"CREATE TEMPORARY FUNCTION IS_CMS(technologies ARRAY<STRUCT<technology STRING, categories ARRAY<STRING>, info ARRAY<STRING>>>, cms STRING, version STRING) RETURNS BOOL AS (\n", | |
" EXISTS(\n", | |
" SELECT * FROM UNNEST(technologies) AS technology, UNNEST(technology.info) AS info\n", | |
" WHERE technology.technology = cms\n", | |
" AND (\n", | |
" version = \"\"\n", | |
" OR ENDS_WITH(version, \".x\") AND (STARTS_WITH(info, RTRIM(version, \"x\")) OR info = RTRIM(version, \".x\"))\n", | |
" OR info = version\n", | |
" )\n", | |
" )\n", | |
");\n", | |
"\n", | |
"WITH\n", | |
"\n", | |
"cwvMetrics AS (\n", | |
" SELECT\n", | |
" CONCAT(origin, '/') AS origin,\n", | |
" IF(device = 'phone' OR device = 'tablet', 'mobile', device) AS device,\n", | |
" IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AS good_lcp,\n", | |
" IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AS any_lcp,\n", | |
" date\n", | |
" FROM\n", | |
" `chrome-ux-report.materialized.device_summary`\n", | |
" WHERE\n", | |
" date >= '2024-01-01'\n", | |
"),\n", | |
"\n", | |
"wordpressSizesData AS (\n", | |
" SELECT\n", | |
" page,\n", | |
" client,\n", | |
" image,\n", | |
" IF( good_lcp, TRUE, FALSE ) AS good_lcp,\n", | |
" -- Specify the source of the date column\n", | |
" cwvMetrics.date as date\n", | |
" FROM\n", | |
" `httparchive.all.pages` AS httpa,\n", | |
" UNNEST(GET_IMG_SIZES_ACCURACY(custom_metrics)) AS image\n", | |
" JOIN cwvMetrics\n", | |
" ON\n", | |
" origin = page AND\n", | |
" device = client\n", | |
" WHERE\n", | |
" httpa.date >= '2024-01-01'\n", | |
" AND IS_CMS(technologies, 'WordPress', '')\n", | |
" AND is_root_page = TRUE\n", | |
" AND image.hasSrcset = TRUE\n", | |
" AND image.hasSizes = TRUE\n", | |
" AND any_lcp = TRUE\n", | |
")\n", | |
"\n", | |
"SELECT\n", | |
" -- Specify the source of the date column\n", | |
" wordpressSizesData.date,\n", | |
" client,\n", | |
" good_lcp,\n", | |
" APPROX_QUANTILES(image.sizesRelativeError, 100)[OFFSET(75)] AS sizesRelativeError,\n", | |
" APPROX_QUANTILES(image.idealSizesSelectedResourceEstimatedPixels, 100)[OFFSET(75)] AS idealSizesSelectedResourceEstimatedPixels,\n", | |
" APPROX_QUANTILES(image.actualSizesEstimatedWastedLoadedPixels, 100)[OFFSET(75)] AS actualSizesEstimatedWastedLoadedPixels,\n", | |
" APPROX_QUANTILES(image.relativeSizesEstimatedWastedLoadedPixels, 100)[OFFSET(75)] AS relativeSizesEstimatedWastedLoadedPixels,\n", | |
" APPROX_QUANTILES(image.idealSizesSelectedResourceEstimatedBytes, 100)[OFFSET(75)] AS idealSizesSelectedResourceEstimatedBytes,\n", | |
" APPROX_QUANTILES(image.actualSizesEstimatedWastedLoadedBytes, 100)[OFFSET(75)] AS actualSizesEstimatedWastedLoadedBytes,\n", | |
" APPROX_QUANTILES(image.relativeSizesEstimatedWastedLoadedBytes, 100)[OFFSET(75)] AS relativeSizesEstimatedWastedLoadedBytes,\n", | |
"FROM\n", | |
" wordpressSizesData\n", | |
"GROUP BY\n", | |
" -- Specify the source of the date column\n", | |
" wordpressSizesData.date,\n", | |
" client,\n", | |
" good_lcp\n", | |
"ORDER BY\n", | |
" -- Specify the source of the date column\n", | |
" wordpressSizesData.date,\n", | |
" client\n", | |
"\"\"\"\n", | |
"\n", | |
"inacurate_sizes_over_time = client.query(query).to_dataframe()\n", | |
"\n", | |
"inacurate_sizes_over_time" | |
], | |
"metadata": { | |
"id": "LVv6XLWtVW7L", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 670 | |
}, | |
"outputId": "abd127f8-33f3-4526-bded-92800d89c03a" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" date client good_lcp sizesRelativeError \\\n", | |
"0 2024-01-01 desktop False 1.542373 \n", | |
"1 2024-01-01 desktop True 1.406716 \n", | |
"2 2024-01-01 mobile False 0.988950 \n", | |
"3 2024-01-01 mobile True 0.875000 \n", | |
"4 2024-02-01 desktop False 1.560000 \n", | |
"5 2024-02-01 desktop True 1.410714 \n", | |
"6 2024-02-01 mobile True 0.875000 \n", | |
"7 2024-02-01 mobile False 1.000000 \n", | |
"8 2024-03-01 desktop True 1.416667 \n", | |
"9 2024-03-01 desktop False 1.580645 \n", | |
"10 2024-03-01 mobile False 1.000000 \n", | |
"11 2024-03-01 mobile True 0.875000 \n", | |
"12 2024-04-01 desktop False 1.597884 \n", | |
"13 2024-04-01 desktop True 1.424242 \n", | |
"14 2024-04-01 mobile False 1.000000 \n", | |
"15 2024-04-01 mobile True 0.875000 \n", | |
"16 2024-05-01 desktop True 1.439024 \n", | |
"17 2024-05-01 desktop False 1.604878 \n", | |
"18 2024-05-01 mobile False 1.000000 \n", | |
"19 2024-05-01 mobile True 0.875000 \n", | |
"20 2024-06-01 desktop False 1.611429 \n", | |
"21 2024-06-01 desktop True 1.445860 \n", | |
"22 2024-06-01 mobile True 0.875000 \n", | |
"23 2024-06-01 mobile False 1.000000 \n", | |
"24 2024-07-01 desktop False 1.626446 \n", | |
"25 2024-07-01 desktop True 1.454545 \n", | |
"26 2024-07-01 mobile True 0.875000 \n", | |
"27 2024-07-01 mobile False 1.000000 \n", | |
"28 2024-08-01 desktop False 1.625641 \n", | |
"29 2024-08-01 desktop True 1.461538 \n", | |
"30 2024-08-01 mobile False 1.000000 \n", | |
"31 2024-08-01 mobile True 0.875000 \n", | |
"32 2024-09-01 desktop True 1.462857 \n", | |
"33 2024-09-01 desktop False 1.630137 \n", | |
"34 2024-09-01 mobile False 1.000000 \n", | |
"35 2024-09-01 mobile True 0.875000 \n", | |
"\n", | |
" idealSizesSelectedResourceEstimatedPixels \\\n", | |
"0 250090 \n", | |
"1 296480 \n", | |
"2 480000 \n", | |
"3 514500 \n", | |
"4 253340 \n", | |
"5 302500 \n", | |
"6 517440 \n", | |
"7 480000 \n", | |
"8 302500 \n", | |
"9 252672 \n", | |
"10 480000 \n", | |
"11 518144 \n", | |
"12 255792 \n", | |
"13 302592 \n", | |
"14 480000 \n", | |
"15 520000 \n", | |
"16 303360 \n", | |
"17 255792 \n", | |
"18 480000 \n", | |
"19 520192 \n", | |
"20 255000 \n", | |
"21 303100 \n", | |
"22 522648 \n", | |
"23 480000 \n", | |
"24 253952 \n", | |
"25 302400 \n", | |
"26 519000 \n", | |
"27 480000 \n", | |
"28 253440 \n", | |
"29 302500 \n", | |
"30 480000 \n", | |
"31 518400 \n", | |
"32 304640 \n", | |
"33 253920 \n", | |
"34 480000 \n", | |
"35 518400 \n", | |
"\n", | |
" actualSizesEstimatedWastedLoadedPixels \\\n", | |
"0 141000 \n", | |
"1 148350 \n", | |
"2 132784 \n", | |
"3 102240 \n", | |
"4 145700 \n", | |
"5 151420 \n", | |
"6 101256 \n", | |
"7 134200 \n", | |
"8 151200 \n", | |
"9 149440 \n", | |
"10 137500 \n", | |
"11 105000 \n", | |
"12 152259 \n", | |
"13 153536 \n", | |
"14 137500 \n", | |
"15 108032 \n", | |
"16 156016 \n", | |
"17 152700 \n", | |
"18 139007 \n", | |
"19 111794 \n", | |
"20 156280 \n", | |
"21 157356 \n", | |
"22 112500 \n", | |
"23 141920 \n", | |
"24 157200 \n", | |
"25 157980 \n", | |
"26 112808 \n", | |
"27 145024 \n", | |
"28 157500 \n", | |
"29 157952 \n", | |
"30 146688 \n", | |
"31 114688 \n", | |
"32 158100 \n", | |
"33 159000 \n", | |
"34 146164 \n", | |
"35 114742 \n", | |
"\n", | |
" relativeSizesEstimatedWastedLoadedPixels \\\n", | |
"0 1.351111 \n", | |
"1 1.250000 \n", | |
"2 0.777778 \n", | |
"3 0.734399 \n", | |
"4 1.392907 \n", | |
"5 1.250000 \n", | |
"6 0.708945 \n", | |
"7 0.777778 \n", | |
"8 1.250000 \n", | |
"9 1.441406 \n", | |
"10 0.777778 \n", | |
"11 0.743853 \n", | |
"12 1.441406 \n", | |
"13 1.250000 \n", | |
"14 0.777778 \n", | |
"15 0.771715 \n", | |
"16 1.250000 \n", | |
"17 1.441406 \n", | |
"18 0.777778 \n", | |
"19 0.774713 \n", | |
"20 1.450261 \n", | |
"21 1.250000 \n", | |
"22 0.774892 \n", | |
"23 0.777778 \n", | |
"24 1.487222 \n", | |
"25 1.250000 \n", | |
"26 0.775578 \n", | |
"27 0.778520 \n", | |
"28 1.483503 \n", | |
"29 1.250000 \n", | |
"30 0.778636 \n", | |
"31 0.776000 \n", | |
"32 1.250000 \n", | |
"33 1.532007 \n", | |
"34 0.778580 \n", | |
"35 0.776224 \n", | |
"\n", | |
" idealSizesSelectedResourceEstimatedBytes \\\n", | |
"0 56476.440000 \n", | |
"1 63371.000000 \n", | |
"2 95823.871445 \n", | |
"3 101485.000000 \n", | |
"4 56750.000000 \n", | |
"5 64058.863215 \n", | |
"6 102167.000000 \n", | |
"7 95625.000000 \n", | |
"8 63868.815590 \n", | |
"9 56983.500000 \n", | |
"10 96098.000000 \n", | |
"11 102499.801642 \n", | |
"12 57467.000000 \n", | |
"13 64185.000000 \n", | |
"14 96457.000000 \n", | |
"15 102965.000000 \n", | |
"16 64265.369923 \n", | |
"17 57499.570036 \n", | |
"18 96953.000000 \n", | |
"19 103048.203593 \n", | |
"20 57193.777778 \n", | |
"21 64360.753395 \n", | |
"22 102990.000000 \n", | |
"23 96870.000000 \n", | |
"24 56841.193630 \n", | |
"25 63938.245841 \n", | |
"26 102398.000000 \n", | |
"27 97056.000000 \n", | |
"28 57029.000000 \n", | |
"29 63828.692686 \n", | |
"30 97604.515556 \n", | |
"31 102251.812500 \n", | |
"32 64095.500000 \n", | |
"33 57108.000000 \n", | |
"34 97172.014709 \n", | |
"35 101859.000000 \n", | |
"\n", | |
" actualSizesEstimatedWastedLoadedBytes \\\n", | |
"0 18196.841510 \n", | |
"1 19793.608392 \n", | |
"2 15172.863043 \n", | |
"3 11982.758400 \n", | |
"4 18640.339623 \n", | |
"5 20050.403509 \n", | |
"6 11827.164174 \n", | |
"7 15154.835821 \n", | |
"8 20003.760710 \n", | |
"9 19100.998974 \n", | |
"10 15657.809101 \n", | |
"11 12153.664506 \n", | |
"12 19388.359375 \n", | |
"13 20275.468657 \n", | |
"14 15667.005737 \n", | |
"15 12351.062500 \n", | |
"16 20543.462573 \n", | |
"17 19453.448000 \n", | |
"18 15732.990000 \n", | |
"19 12667.561334 \n", | |
"20 19782.749821 \n", | |
"21 20622.000000 \n", | |
"22 12661.200000 \n", | |
"23 16015.639342 \n", | |
"24 19724.250000 \n", | |
"25 20656.000000 \n", | |
"26 12759.209126 \n", | |
"27 16144.641899 \n", | |
"28 19875.000000 \n", | |
"29 20600.015507 \n", | |
"30 16334.582772 \n", | |
"31 13107.956248 \n", | |
"32 20619.375000 \n", | |
"33 20079.905325 \n", | |
"34 16117.163115 \n", | |
"35 13147.545600 \n", | |
"\n", | |
" relativeSizesEstimatedWastedLoadedBytes \n", | |
"0 1.351111 \n", | |
"1 1.250000 \n", | |
"2 0.777778 \n", | |
"3 0.734399 \n", | |
"4 1.392907 \n", | |
"5 1.250000 \n", | |
"6 0.708945 \n", | |
"7 0.777778 \n", | |
"8 1.250000 \n", | |
"9 1.441406 \n", | |
"10 0.777778 \n", | |
"11 0.743853 \n", | |
"12 1.441406 \n", | |
"13 1.250000 \n", | |
"14 0.777778 \n", | |
"15 0.771715 \n", | |
"16 1.250000 \n", | |
"17 1.441406 \n", | |
"18 0.777778 \n", | |
"19 0.774713 \n", | |
"20 1.450261 \n", | |
"21 1.250000 \n", | |
"22 0.774892 \n", | |
"23 0.777778 \n", | |
"24 1.487222 \n", | |
"25 1.250000 \n", | |
"26 0.775578 \n", | |
"27 0.778520 \n", | |
"28 1.483503 \n", | |
"29 1.250000 \n", | |
"30 0.778636 \n", | |
"31 0.776000 \n", | |
"32 1.250000 \n", | |
"33 1.532007 \n", | |
"34 0.778580 \n", | |
"35 0.776224 " | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-08b000df-6589-462d-aa2e-0fdf0a0530df\" class=\"colab-df-container\">\n", | |
" <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>date</th>\n", | |
" <th>client</th>\n", | |
" <th>good_lcp</th>\n", | |
" <th>sizesRelativeError</th>\n", | |
" <th>idealSizesSelectedResourceEstimatedPixels</th>\n", | |
" <th>actualSizesEstimatedWastedLoadedPixels</th>\n", | |
" <th>relativeSizesEstimatedWastedLoadedPixels</th>\n", | |
" <th>idealSizesSelectedResourceEstimatedBytes</th>\n", | |
" <th>actualSizesEstimatedWastedLoadedBytes</th>\n", | |
" <th>relativeSizesEstimatedWastedLoadedBytes</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2024-01-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.542373</td>\n", | |
" <td>250090</td>\n", | |
" <td>141000</td>\n", | |
" <td>1.351111</td>\n", | |
" <td>56476.440000</td>\n", | |
" <td>18196.841510</td>\n", | |
" <td>1.351111</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2024-01-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.406716</td>\n", | |
" <td>296480</td>\n", | |
" <td>148350</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>63371.000000</td>\n", | |
" <td>19793.608392</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2024-01-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>0.988950</td>\n", | |
" <td>480000</td>\n", | |
" <td>132784</td>\n", | |
" <td>0.777778</td>\n", | |
" <td>95823.871445</td>\n", | |
" <td>15172.863043</td>\n", | |
" <td>0.777778</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>2024-01-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>514500</td>\n", | |
" <td>102240</td>\n", | |
" <td>0.734399</td>\n", | |
" <td>101485.000000</td>\n", | |
" <td>11982.758400</td>\n", | |
" <td>0.734399</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>2024-02-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.560000</td>\n", | |
" <td>253340</td>\n", | |
" <td>145700</td>\n", | |
" <td>1.392907</td>\n", | |
" <td>56750.000000</td>\n", | |
" <td>18640.339623</td>\n", | |
" <td>1.392907</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>2024-02-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.410714</td>\n", | |
" <td>302500</td>\n", | |
" <td>151420</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>64058.863215</td>\n", | |
" <td>20050.403509</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>2024-02-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>517440</td>\n", | |
" <td>101256</td>\n", | |
" <td>0.708945</td>\n", | |
" <td>102167.000000</td>\n", | |
" <td>11827.164174</td>\n", | |
" <td>0.708945</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>2024-02-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>480000</td>\n", | |
" <td>134200</td>\n", | |
" <td>0.777778</td>\n", | |
" <td>95625.000000</td>\n", | |
" <td>15154.835821</td>\n", | |
" <td>0.777778</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>2024-03-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.416667</td>\n", | |
" <td>302500</td>\n", | |
" <td>151200</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>63868.815590</td>\n", | |
" <td>20003.760710</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>2024-03-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.580645</td>\n", | |
" <td>252672</td>\n", | |
" <td>149440</td>\n", | |
" <td>1.441406</td>\n", | |
" <td>56983.500000</td>\n", | |
" <td>19100.998974</td>\n", | |
" <td>1.441406</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>2024-03-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>480000</td>\n", | |
" <td>137500</td>\n", | |
" <td>0.777778</td>\n", | |
" <td>96098.000000</td>\n", | |
" <td>15657.809101</td>\n", | |
" <td>0.777778</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>2024-03-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>518144</td>\n", | |
" <td>105000</td>\n", | |
" <td>0.743853</td>\n", | |
" <td>102499.801642</td>\n", | |
" <td>12153.664506</td>\n", | |
" <td>0.743853</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>2024-04-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.597884</td>\n", | |
" <td>255792</td>\n", | |
" <td>152259</td>\n", | |
" <td>1.441406</td>\n", | |
" <td>57467.000000</td>\n", | |
" <td>19388.359375</td>\n", | |
" <td>1.441406</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>2024-04-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.424242</td>\n", | |
" <td>302592</td>\n", | |
" <td>153536</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>64185.000000</td>\n", | |
" <td>20275.468657</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>2024-04-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>480000</td>\n", | |
" <td>137500</td>\n", | |
" <td>0.777778</td>\n", | |
" <td>96457.000000</td>\n", | |
" <td>15667.005737</td>\n", | |
" <td>0.777778</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>2024-04-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>520000</td>\n", | |
" <td>108032</td>\n", | |
" <td>0.771715</td>\n", | |
" <td>102965.000000</td>\n", | |
" <td>12351.062500</td>\n", | |
" <td>0.771715</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>2024-05-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.439024</td>\n", | |
" <td>303360</td>\n", | |
" <td>156016</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>64265.369923</td>\n", | |
" <td>20543.462573</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>2024-05-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.604878</td>\n", | |
" <td>255792</td>\n", | |
" <td>152700</td>\n", | |
" <td>1.441406</td>\n", | |
" <td>57499.570036</td>\n", | |
" <td>19453.448000</td>\n", | |
" <td>1.441406</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>2024-05-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>480000</td>\n", | |
" <td>139007</td>\n", | |
" <td>0.777778</td>\n", | |
" <td>96953.000000</td>\n", | |
" <td>15732.990000</td>\n", | |
" <td>0.777778</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>2024-05-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>520192</td>\n", | |
" <td>111794</td>\n", | |
" <td>0.774713</td>\n", | |
" <td>103048.203593</td>\n", | |
" <td>12667.561334</td>\n", | |
" <td>0.774713</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>2024-06-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.611429</td>\n", | |
" <td>255000</td>\n", | |
" <td>156280</td>\n", | |
" <td>1.450261</td>\n", | |
" <td>57193.777778</td>\n", | |
" <td>19782.749821</td>\n", | |
" <td>1.450261</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21</th>\n", | |
" <td>2024-06-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.445860</td>\n", | |
" <td>303100</td>\n", | |
" <td>157356</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>64360.753395</td>\n", | |
" <td>20622.000000</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>2024-06-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>522648</td>\n", | |
" <td>112500</td>\n", | |
" <td>0.774892</td>\n", | |
" <td>102990.000000</td>\n", | |
" <td>12661.200000</td>\n", | |
" <td>0.774892</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>23</th>\n", | |
" <td>2024-06-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>480000</td>\n", | |
" <td>141920</td>\n", | |
" <td>0.777778</td>\n", | |
" <td>96870.000000</td>\n", | |
" <td>16015.639342</td>\n", | |
" <td>0.777778</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>24</th>\n", | |
" <td>2024-07-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.626446</td>\n", | |
" <td>253952</td>\n", | |
" <td>157200</td>\n", | |
" <td>1.487222</td>\n", | |
" <td>56841.193630</td>\n", | |
" <td>19724.250000</td>\n", | |
" <td>1.487222</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25</th>\n", | |
" <td>2024-07-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.454545</td>\n", | |
" <td>302400</td>\n", | |
" <td>157980</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>63938.245841</td>\n", | |
" <td>20656.000000</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>26</th>\n", | |
" <td>2024-07-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>519000</td>\n", | |
" <td>112808</td>\n", | |
" <td>0.775578</td>\n", | |
" <td>102398.000000</td>\n", | |
" <td>12759.209126</td>\n", | |
" <td>0.775578</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>27</th>\n", | |
" <td>2024-07-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>480000</td>\n", | |
" <td>145024</td>\n", | |
" <td>0.778520</td>\n", | |
" <td>97056.000000</td>\n", | |
" <td>16144.641899</td>\n", | |
" <td>0.778520</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>28</th>\n", | |
" <td>2024-08-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.625641</td>\n", | |
" <td>253440</td>\n", | |
" <td>157500</td>\n", | |
" <td>1.483503</td>\n", | |
" <td>57029.000000</td>\n", | |
" <td>19875.000000</td>\n", | |
" <td>1.483503</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>29</th>\n", | |
" <td>2024-08-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.461538</td>\n", | |
" <td>302500</td>\n", | |
" <td>157952</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>63828.692686</td>\n", | |
" <td>20600.015507</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30</th>\n", | |
" <td>2024-08-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>480000</td>\n", | |
" <td>146688</td>\n", | |
" <td>0.778636</td>\n", | |
" <td>97604.515556</td>\n", | |
" <td>16334.582772</td>\n", | |
" <td>0.778636</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>31</th>\n", | |
" <td>2024-08-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>518400</td>\n", | |
" <td>114688</td>\n", | |
" <td>0.776000</td>\n", | |
" <td>102251.812500</td>\n", | |
" <td>13107.956248</td>\n", | |
" <td>0.776000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32</th>\n", | |
" <td>2024-09-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>1.462857</td>\n", | |
" <td>304640</td>\n", | |
" <td>158100</td>\n", | |
" <td>1.250000</td>\n", | |
" <td>64095.500000</td>\n", | |
" <td>20619.375000</td>\n", | |
" <td>1.250000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>33</th>\n", | |
" <td>2024-09-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>1.630137</td>\n", | |
" <td>253920</td>\n", | |
" <td>159000</td>\n", | |
" <td>1.532007</td>\n", | |
" <td>57108.000000</td>\n", | |
" <td>20079.905325</td>\n", | |
" <td>1.532007</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>34</th>\n", | |
" <td>2024-09-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>480000</td>\n", | |
" <td>146164</td>\n", | |
" <td>0.778580</td>\n", | |
" <td>97172.014709</td>\n", | |
" <td>16117.163115</td>\n", | |
" <td>0.778580</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>35</th>\n", | |
" <td>2024-09-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>0.875000</td>\n", | |
" <td>518400</td>\n", | |
" <td>114742</td>\n", | |
" <td>0.776224</td>\n", | |
" <td>101859.000000</td>\n", | |
" <td>13147.545600</td>\n", | |
" <td>0.776224</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-08b000df-6589-462d-aa2e-0fdf0a0530df')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-08b000df-6589-462d-aa2e-0fdf0a0530df button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-08b000df-6589-462d-aa2e-0fdf0a0530df');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-87577dfa-ad9c-44ce-8ad1-444c1d130f8a\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-87577dfa-ad9c-44ce-8ad1-444c1d130f8a')\"\n", | |
" title=\"Suggest charts\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-87577dfa-ad9c-44ce-8ad1-444c1d130f8a button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
"\n", | |
" <div id=\"id_0831970f-614a-4a41-b13e-974d5d8ff64f\">\n", | |
" <style>\n", | |
" .colab-df-generate {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-generate:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-generate {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-generate:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
" <button class=\"colab-df-generate\" onclick=\"generateWithVariable('inacurate_sizes_over_time')\"\n", | |
" title=\"Generate code using this dataframe.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" <script>\n", | |
" (() => {\n", | |
" const buttonEl =\n", | |
" document.querySelector('#id_0831970f-614a-4a41-b13e-974d5d8ff64f button.colab-df-generate');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" buttonEl.onclick = () => {\n", | |
" google.colab.notebook.generateWithVariable('inacurate_sizes_over_time');\n", | |
" }\n", | |
" })();\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
" </div>\n", | |
" </div>\n" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "dataframe", | |
"variable_name": "inacurate_sizes_over_time", | |
"summary": "{\n \"name\": \"inacurate_sizes_over_time\",\n \"rows\": 36,\n \"fields\": [\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"dbdate\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"2024-08-01\",\n \"2024-02-01\",\n \"2024-06-01\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"client\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"mobile\",\n \"desktop\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"good_lcp\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 2,\n \"samples\": [\n true,\n false\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sizesRelativeError\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.3035394272574326,\n \"min\": 0.875,\n \"max\": 1.63013698630137,\n \"num_unique_values\": 21,\n \"samples\": [\n 1.5423728813559323,\n 1.6256410256410256\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"idealSizesSelectedResourceEstimatedPixels\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 24,\n \"samples\": [\n 518144,\n 522648\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"actualSizesEstimatedWastedLoadedPixels\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 35,\n \"samples\": [\n 145024,\n 153536\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"relativeSizesEstimatedWastedLoadedPixels\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.30361356580479815,\n \"min\": 0.7089452603471295,\n \"max\": 1.5320067713142504,\n \"num_unique_values\": 21,\n \"samples\": [\n 1.3511111111111112,\n 0.776\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"idealSizesSelectedResourceEstimatedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 20046.119520230128,\n \"min\": 56476.439999999995,\n \"max\": 103048.20359325082,\n \"num_unique_values\": 36,\n \"samples\": [\n 101859.0,\n 64185.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"actualSizesEstimatedWastedLoadedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3173.9491540979884,\n \"min\": 11827.164173546747,\n \"max\": 20656.000000000004,\n \"num_unique_values\": 36,\n \"samples\": [\n 13147.5456,\n 20275.468656716417\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"relativeSizesEstimatedWastedLoadedBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.30361356580479815,\n \"min\": 0.7089452603471292,\n \"max\": 1.5320067713142504,\n \"num_unique_values\": 25,\n \"samples\": [\n 1.44140625,\n 1.487222222222222\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
}, | |
"application/vnd.google.colaboratory.module+javascript": "\n import \"https://ssl.gstatic.com/colaboratory/data_table/81954c9606dcf997/data_table.js\";\n\n const table = window.createDataTable({\n data: [[{\n 'v': 0,\n 'f': \"0\",\n },\n\"2024-01-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.5423728813559323,\n 'f': \"1.5423728813559323\",\n },\n{\n 'v': 250090,\n 'f': \"250090\",\n },\n{\n 'v': 141000,\n 'f': \"141000\",\n },\n{\n 'v': 1.3511111111111112,\n 'f': \"1.3511111111111112\",\n },\n{\n 'v': 56476.439999999995,\n 'f': \"56476.439999999995\",\n },\n{\n 'v': 18196.841510307662,\n 'f': \"18196.841510307662\",\n },\n{\n 'v': 1.351111111111111,\n 'f': \"1.351111111111111\",\n }],\n [{\n 'v': 1,\n 'f': \"1\",\n },\n\"2024-01-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4067164179104477,\n 'f': \"1.4067164179104477\",\n },\n{\n 'v': 296480,\n 'f': \"296480\",\n },\n{\n 'v': 148350,\n 'f': \"148350\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 63371.0,\n 'f': \"63371.0\",\n },\n{\n 'v': 19793.60839160839,\n 'f': \"19793.60839160839\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n }],\n [{\n 'v': 2,\n 'f': \"2\",\n },\n\"2024-01-01\",\n\"mobile\",\nfalse,\n{\n 'v': 0.988950276243094,\n 'f': \"0.988950276243094\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 132784,\n 'f': \"132784\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n },\n{\n 'v': 95823.87144533718,\n 'f': \"95823.87144533718\",\n },\n{\n 'v': 15172.86304347826,\n 'f': \"15172.86304347826\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n }],\n [{\n 'v': 3,\n 'f': \"3\",\n },\n\"2024-01-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 514500,\n 'f': \"514500\",\n },\n{\n 'v': 102240,\n 'f': \"102240\",\n },\n{\n 'v': 0.734399162371134,\n 'f': \"0.734399162371134\",\n },\n{\n 'v': 101485.0,\n 'f': \"101485.0\",\n },\n{\n 'v': 11982.7584,\n 'f': \"11982.7584\",\n },\n{\n 'v': 0.7343991623711342,\n 'f': \"0.7343991623711342\",\n }],\n [{\n 'v': 4,\n 'f': \"4\",\n },\n\"2024-02-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.56,\n 'f': \"1.56\",\n },\n{\n 'v': 253340,\n 'f': \"253340\",\n },\n{\n 'v': 145700,\n 'f': \"145700\",\n },\n{\n 'v': 1.3929068462401795,\n 'f': \"1.3929068462401795\",\n },\n{\n 'v': 56750.0,\n 'f': \"56750.0\",\n },\n{\n 'v': 18640.339622641513,\n 'f': \"18640.339622641513\",\n },\n{\n 'v': 1.3929068462401797,\n 'f': \"1.3929068462401797\",\n }],\n [{\n 'v': 5,\n 'f': \"5\",\n },\n\"2024-02-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4107142857142858,\n 'f': \"1.4107142857142858\",\n },\n{\n 'v': 302500,\n 'f': \"302500\",\n },\n{\n 'v': 151420,\n 'f': \"151420\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 64058.86321470737,\n 'f': \"64058.86321470737\",\n },\n{\n 'v': 20050.40350877193,\n 'f': \"20050.40350877193\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n }],\n [{\n 'v': 6,\n 'f': \"6\",\n },\n\"2024-02-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 517440,\n 'f': \"517440\",\n },\n{\n 'v': 101256,\n 'f': \"101256\",\n },\n{\n 'v': 0.7089452603471295,\n 'f': \"0.7089452603471295\",\n },\n{\n 'v': 102167.0,\n 'f': \"102167.0\",\n },\n{\n 'v': 11827.164173546747,\n 'f': \"11827.164173546747\",\n },\n{\n 'v': 0.7089452603471292,\n 'f': \"0.7089452603471292\",\n }],\n [{\n 'v': 7,\n 'f': \"7\",\n },\n\"2024-02-01\",\n\"mobile\",\nfalse,\n{\n 'v': 1.0,\n 'f': \"1.0\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 134200,\n 'f': \"134200\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n },\n{\n 'v': 95625.0,\n 'f': \"95625.0\",\n },\n{\n 'v': 15154.83582089552,\n 'f': \"15154.83582089552\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n }],\n [{\n 'v': 8,\n 'f': \"8\",\n },\n\"2024-03-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4166666666666667,\n 'f': \"1.4166666666666667\",\n },\n{\n 'v': 302500,\n 'f': \"302500\",\n },\n{\n 'v': 151200,\n 'f': \"151200\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 63868.81558960693,\n 'f': \"63868.81558960693\",\n },\n{\n 'v': 20003.760709812108,\n 'f': \"20003.760709812108\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n }],\n [{\n 'v': 9,\n 'f': \"9\",\n },\n\"2024-03-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.5806451612903225,\n 'f': \"1.5806451612903225\",\n },\n{\n 'v': 252672,\n 'f': \"252672\",\n },\n{\n 'v': 149440,\n 'f': \"149440\",\n },\n{\n 'v': 1.44140625,\n 'f': \"1.44140625\",\n },\n{\n 'v': 56983.5,\n 'f': \"56983.5\",\n },\n{\n 'v': 19100.998974437825,\n 'f': \"19100.998974437825\",\n },\n{\n 'v': 1.4414062499999998,\n 'f': \"1.4414062499999998\",\n }],\n [{\n 'v': 10,\n 'f': \"10\",\n },\n\"2024-03-01\",\n\"mobile\",\nfalse,\n{\n 'v': 1.0,\n 'f': \"1.0\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 137500,\n 'f': \"137500\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n },\n{\n 'v': 96098.0,\n 'f': \"96098.0\",\n },\n{\n 'v': 15657.809100667939,\n 'f': \"15657.809100667939\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n }],\n [{\n 'v': 11,\n 'f': \"11\",\n },\n\"2024-03-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 518144,\n 'f': \"518144\",\n },\n{\n 'v': 105000,\n 'f': \"105000\",\n },\n{\n 'v': 0.7438532110091743,\n 'f': \"0.7438532110091743\",\n },\n{\n 'v': 102499.80164158688,\n 'f': \"102499.80164158688\",\n },\n{\n 'v': 12153.664505870838,\n 'f': \"12153.664505870838\",\n },\n{\n 'v': 0.7438532110091742,\n 'f': \"0.7438532110091742\",\n }],\n [{\n 'v': 12,\n 'f': \"12\",\n },\n\"2024-04-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.597883597883598,\n 'f': \"1.597883597883598\",\n },\n{\n 'v': 255792,\n 'f': \"255792\",\n },\n{\n 'v': 152259,\n 'f': \"152259\",\n },\n{\n 'v': 1.44140625,\n 'f': \"1.44140625\",\n },\n{\n 'v': 57467.0,\n 'f': \"57467.0\",\n },\n{\n 'v': 19388.359375,\n 'f': \"19388.359375\",\n },\n{\n 'v': 1.44140625,\n 'f': \"1.44140625\",\n }],\n [{\n 'v': 13,\n 'f': \"13\",\n },\n\"2024-04-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4242424242424243,\n 'f': \"1.4242424242424243\",\n },\n{\n 'v': 302592,\n 'f': \"302592\",\n },\n{\n 'v': 153536,\n 'f': \"153536\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 64185.0,\n 'f': \"64185.0\",\n },\n{\n 'v': 20275.468656716417,\n 'f': \"20275.468656716417\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n }],\n [{\n 'v': 14,\n 'f': \"14\",\n },\n\"2024-04-01\",\n\"mobile\",\nfalse,\n{\n 'v': 1.0,\n 'f': \"1.0\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 137500,\n 'f': \"137500\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n },\n{\n 'v': 96457.0,\n 'f': \"96457.0\",\n },\n{\n 'v': 15667.005737304688,\n 'f': \"15667.005737304688\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n }],\n [{\n 'v': 15,\n 'f': \"15\",\n },\n\"2024-04-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 520000,\n 'f': \"520000\",\n },\n{\n 'v': 108032,\n 'f': \"108032\",\n },\n{\n 'v': 0.7717154538783212,\n 'f': \"0.7717154538783212\",\n },\n{\n 'v': 102965.0,\n 'f': \"102965.0\",\n },\n{\n 'v': 12351.062499999998,\n 'f': \"12351.062499999998\",\n },\n{\n 'v': 0.7717154538783214,\n 'f': \"0.7717154538783214\",\n }],\n [{\n 'v': 16,\n 'f': \"16\",\n },\n\"2024-05-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4390243902439024,\n 'f': \"1.4390243902439024\",\n },\n{\n 'v': 303360,\n 'f': \"303360\",\n },\n{\n 'v': 156016,\n 'f': \"156016\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 64265.36992310725,\n 'f': \"64265.36992310725\",\n },\n{\n 'v': 20543.46257267442,\n 'f': \"20543.46257267442\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n }],\n [{\n 'v': 17,\n 'f': \"17\",\n },\n\"2024-05-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.604878048780488,\n 'f': \"1.604878048780488\",\n },\n{\n 'v': 255792,\n 'f': \"255792\",\n },\n{\n 'v': 152700,\n 'f': \"152700\",\n },\n{\n 'v': 1.44140625,\n 'f': \"1.44140625\",\n },\n{\n 'v': 57499.570035668636,\n 'f': \"57499.570035668636\",\n },\n{\n 'v': 19453.448000000004,\n 'f': \"19453.448000000004\",\n },\n{\n 'v': 1.4414062500000002,\n 'f': \"1.4414062500000002\",\n }],\n [{\n 'v': 18,\n 'f': \"18\",\n },\n\"2024-05-01\",\n\"mobile\",\nfalse,\n{\n 'v': 1.0,\n 'f': \"1.0\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 139007,\n 'f': \"139007\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n },\n{\n 'v': 96953.0,\n 'f': \"96953.0\",\n },\n{\n 'v': 15732.99,\n 'f': \"15732.99\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n }],\n [{\n 'v': 19,\n 'f': \"19\",\n },\n\"2024-05-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 520192,\n 'f': \"520192\",\n },\n{\n 'v': 111794,\n 'f': \"111794\",\n },\n{\n 'v': 0.774712643678161,\n 'f': \"0.774712643678161\",\n },\n{\n 'v': 103048.20359325082,\n 'f': \"103048.20359325082\",\n },\n{\n 'v': 12667.561334087055,\n 'f': \"12667.561334087055\",\n },\n{\n 'v': 0.7747126436781611,\n 'f': \"0.7747126436781611\",\n }],\n [{\n 'v': 20,\n 'f': \"20\",\n },\n\"2024-06-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.6114285714285714,\n 'f': \"1.6114285714285714\",\n },\n{\n 'v': 255000,\n 'f': \"255000\",\n },\n{\n 'v': 156280,\n 'f': \"156280\",\n },\n{\n 'v': 1.4502609262883235,\n 'f': \"1.4502609262883235\",\n },\n{\n 'v': 57193.777777777774,\n 'f': \"57193.777777777774\",\n },\n{\n 'v': 19782.74982106217,\n 'f': \"19782.74982106217\",\n },\n{\n 'v': 1.4502609262883235,\n 'f': \"1.4502609262883235\",\n }],\n [{\n 'v': 21,\n 'f': \"21\",\n },\n\"2024-06-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4458598726114649,\n 'f': \"1.4458598726114649\",\n },\n{\n 'v': 303100,\n 'f': \"303100\",\n },\n{\n 'v': 157356,\n 'f': \"157356\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 64360.75339549607,\n 'f': \"64360.75339549607\",\n },\n{\n 'v': 20622.0,\n 'f': \"20622.0\",\n },\n{\n 'v': 1.2500000000000002,\n 'f': \"1.2500000000000002\",\n }],\n [{\n 'v': 22,\n 'f': \"22\",\n },\n\"2024-06-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 522648,\n 'f': \"522648\",\n },\n{\n 'v': 112500,\n 'f': \"112500\",\n },\n{\n 'v': 0.7748917748917749,\n 'f': \"0.7748917748917749\",\n },\n{\n 'v': 102990.0,\n 'f': \"102990.0\",\n },\n{\n 'v': 12661.2,\n 'f': \"12661.2\",\n },\n{\n 'v': 0.7748917748917749,\n 'f': \"0.7748917748917749\",\n }],\n [{\n 'v': 23,\n 'f': \"23\",\n },\n\"2024-06-01\",\n\"mobile\",\nfalse,\n{\n 'v': 1.0,\n 'f': \"1.0\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 141920,\n 'f': \"141920\",\n },\n{\n 'v': 0.7777777777777778,\n 'f': \"0.7777777777777778\",\n },\n{\n 'v': 96870.0,\n 'f': \"96870.0\",\n },\n{\n 'v': 16015.639341563801,\n 'f': \"16015.639341563801\",\n },\n{\n 'v': 0.777777777777778,\n 'f': \"0.777777777777778\",\n }],\n [{\n 'v': 24,\n 'f': \"24\",\n },\n\"2024-07-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.6264462809917355,\n 'f': \"1.6264462809917355\",\n },\n{\n 'v': 253952,\n 'f': \"253952\",\n },\n{\n 'v': 157200,\n 'f': \"157200\",\n },\n{\n 'v': 1.4872222222222222,\n 'f': \"1.4872222222222222\",\n },\n{\n 'v': 56841.193630214206,\n 'f': \"56841.193630214206\",\n },\n{\n 'v': 19724.249999999996,\n 'f': \"19724.249999999996\",\n },\n{\n 'v': 1.487222222222222,\n 'f': \"1.487222222222222\",\n }],\n [{\n 'v': 25,\n 'f': \"25\",\n },\n\"2024-07-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4545454545454546,\n 'f': \"1.4545454545454546\",\n },\n{\n 'v': 302400,\n 'f': \"302400\",\n },\n{\n 'v': 157980,\n 'f': \"157980\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 63938.245841035125,\n 'f': \"63938.245841035125\",\n },\n{\n 'v': 20656.000000000004,\n 'f': \"20656.000000000004\",\n },\n{\n 'v': 1.2500000000000002,\n 'f': \"1.2500000000000002\",\n }],\n [{\n 'v': 26,\n 'f': \"26\",\n },\n\"2024-07-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 519000,\n 'f': \"519000\",\n },\n{\n 'v': 112808,\n 'f': \"112808\",\n },\n{\n 'v': 0.7755775577557755,\n 'f': \"0.7755775577557755\",\n },\n{\n 'v': 102398.0,\n 'f': \"102398.0\",\n },\n{\n 'v': 12759.209125827201,\n 'f': \"12759.209125827201\",\n },\n{\n 'v': 0.7755775577557755,\n 'f': \"0.7755775577557755\",\n }],\n [{\n 'v': 27,\n 'f': \"27\",\n },\n\"2024-07-01\",\n\"mobile\",\nfalse,\n{\n 'v': 1.0,\n 'f': \"1.0\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 145024,\n 'f': \"145024\",\n },\n{\n 'v': 0.778519755147468,\n 'f': \"0.778519755147468\",\n },\n{\n 'v': 97056.0,\n 'f': \"97056.0\",\n },\n{\n 'v': 16144.64189886481,\n 'f': \"16144.64189886481\",\n },\n{\n 'v': 0.7785197551474677,\n 'f': \"0.7785197551474677\",\n }],\n [{\n 'v': 28,\n 'f': \"28\",\n },\n\"2024-08-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.6256410256410256,\n 'f': \"1.6256410256410256\",\n },\n{\n 'v': 253440,\n 'f': \"253440\",\n },\n{\n 'v': 157500,\n 'f': \"157500\",\n },\n{\n 'v': 1.483502824858757,\n 'f': \"1.483502824858757\",\n },\n{\n 'v': 57029.0,\n 'f': \"57029.0\",\n },\n{\n 'v': 19875.0,\n 'f': \"19875.0\",\n },\n{\n 'v': 1.4835028248587567,\n 'f': \"1.4835028248587567\",\n }],\n [{\n 'v': 29,\n 'f': \"29\",\n },\n\"2024-08-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4615384615384615,\n 'f': \"1.4615384615384615\",\n },\n{\n 'v': 302500,\n 'f': \"302500\",\n },\n{\n 'v': 157952,\n 'f': \"157952\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 63828.692686357244,\n 'f': \"63828.692686357244\",\n },\n{\n 'v': 20600.01550688118,\n 'f': \"20600.01550688118\",\n },\n{\n 'v': 1.2500000000000002,\n 'f': \"1.2500000000000002\",\n }],\n [{\n 'v': 30,\n 'f': \"30\",\n },\n\"2024-08-01\",\n\"mobile\",\nfalse,\n{\n 'v': 1.0,\n 'f': \"1.0\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 146688,\n 'f': \"146688\",\n },\n{\n 'v': 0.7786357786357786,\n 'f': \"0.7786357786357786\",\n },\n{\n 'v': 97604.51555555555,\n 'f': \"97604.51555555555\",\n },\n{\n 'v': 16334.582772014357,\n 'f': \"16334.582772014357\",\n },\n{\n 'v': 0.7786357786357787,\n 'f': \"0.7786357786357787\",\n }],\n [{\n 'v': 31,\n 'f': \"31\",\n },\n\"2024-08-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 518400,\n 'f': \"518400\",\n },\n{\n 'v': 114688,\n 'f': \"114688\",\n },\n{\n 'v': 0.776,\n 'f': \"0.776\",\n },\n{\n 'v': 102251.8125,\n 'f': \"102251.8125\",\n },\n{\n 'v': 13107.956248127062,\n 'f': \"13107.956248127062\",\n },\n{\n 'v': 0.7759999999999999,\n 'f': \"0.7759999999999999\",\n }],\n [{\n 'v': 32,\n 'f': \"32\",\n },\n\"2024-09-01\",\n\"desktop\",\ntrue,\n{\n 'v': 1.4628571428571429,\n 'f': \"1.4628571428571429\",\n },\n{\n 'v': 304640,\n 'f': \"304640\",\n },\n{\n 'v': 158100,\n 'f': \"158100\",\n },\n{\n 'v': 1.25,\n 'f': \"1.25\",\n },\n{\n 'v': 64095.5,\n 'f': \"64095.5\",\n },\n{\n 'v': 20619.375,\n 'f': \"20619.375\",\n },\n{\n 'v': 1.2500000000000002,\n 'f': \"1.2500000000000002\",\n }],\n [{\n 'v': 33,\n 'f': \"33\",\n },\n\"2024-09-01\",\n\"desktop\",\nfalse,\n{\n 'v': 1.63013698630137,\n 'f': \"1.63013698630137\",\n },\n{\n 'v': 253920,\n 'f': \"253920\",\n },\n{\n 'v': 159000,\n 'f': \"159000\",\n },\n{\n 'v': 1.5320067713142504,\n 'f': \"1.5320067713142504\",\n },\n{\n 'v': 57108.0,\n 'f': \"57108.0\",\n },\n{\n 'v': 20079.905325443786,\n 'f': \"20079.905325443786\",\n },\n{\n 'v': 1.5320067713142504,\n 'f': \"1.5320067713142504\",\n }],\n [{\n 'v': 34,\n 'f': \"34\",\n },\n\"2024-09-01\",\n\"mobile\",\nfalse,\n{\n 'v': 1.0,\n 'f': \"1.0\",\n },\n{\n 'v': 480000,\n 'f': \"480000\",\n },\n{\n 'v': 146164,\n 'f': \"146164\",\n },\n{\n 'v': 0.7785800240673887,\n 'f': \"0.7785800240673887\",\n },\n{\n 'v': 97172.01470911488,\n 'f': \"97172.01470911488\",\n },\n{\n 'v': 16117.163114829882,\n 'f': \"16117.163114829882\",\n },\n{\n 'v': 0.7785800240673887,\n 'f': \"0.7785800240673887\",\n }],\n [{\n 'v': 35,\n 'f': \"35\",\n },\n\"2024-09-01\",\n\"mobile\",\ntrue,\n{\n 'v': 0.875,\n 'f': \"0.875\",\n },\n{\n 'v': 518400,\n 'f': \"518400\",\n },\n{\n 'v': 114742,\n 'f': \"114742\",\n },\n{\n 'v': 0.7762237762237763,\n 'f': \"0.7762237762237763\",\n },\n{\n 'v': 101859.0,\n 'f': \"101859.0\",\n },\n{\n 'v': 13147.5456,\n 'f': \"13147.5456\",\n },\n{\n 'v': 0.7762237762237763,\n 'f': \"0.7762237762237763\",\n }]],\n columns: [[\"number\", \"index\"], [\"string\", \"date\"], [\"string\", \"client\"], [\"string\", \"good_lcp\"], [\"number\", \"sizesRelativeError\"], [\"number\", \"idealSizesSelectedResourceEstimatedPixels\"], [\"number\", \"actualSizesEstimatedWastedLoadedPixels\"], [\"number\", \"relativeSizesEstimatedWastedLoadedPixels\"], [\"number\", \"idealSizesSelectedResourceEstimatedBytes\"], [\"number\", \"actualSizesEstimatedWastedLoadedBytes\"], [\"number\", \"relativeSizesEstimatedWastedLoadedBytes\"]],\n columnOptions: [{\"width\": \"1px\", \"className\": \"index_column\"}],\n rowsPerPage: 25,\n helpUrl: \"https://colab.research.google.com/notebooks/data_table.ipynb\",\n suppressOutputScrolling: true,\n minimumWidth: undefined,\n });\n\n function appendQuickchartButton(parentElement) {\n let quickchartButtonContainerElement = document.createElement('div');\n quickchartButtonContainerElement.innerHTML = `\n<div id=\"df-8232a837-2422-4fd1-a1d5-71a13256a1e6\">\n <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-8232a837-2422-4fd1-a1d5-71a13256a1e6')\"\n title=\"Suggest charts\"\n style=\"display:none;\">\n \n<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n width=\"24px\">\n <g>\n <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n </g>\n</svg>\n </button>\n \n<style>\n .colab-df-quickchart {\n --bg-color: #E8F0FE;\n --fill-color: #1967D2;\n --hover-bg-color: #E2EBFA;\n --hover-fill-color: #174EA6;\n --disabled-fill-color: #AAA;\n --disabled-bg-color: #DDD;\n }\n\n [theme=dark] .colab-df-quickchart {\n --bg-color: #3B4455;\n --fill-color: #D2E3FC;\n --hover-bg-color: #434B5C;\n --hover-fill-color: #FFFFFF;\n --disabled-bg-color: #3B4455;\n --disabled-fill-color: #666;\n }\n\n .colab-df-quickchart {\n background-color: var(--bg-color);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: none;\n fill: var(--fill-color);\n height: 32px;\n padding: 0;\n width: 32px;\n }\n\n .colab-df-quickchart:hover {\n background-color: var(--hover-bg-color);\n box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n fill: var(--button-hover-fill-color);\n }\n\n .colab-df-quickchart-complete:disabled,\n .colab-df-quickchart-complete:disabled:hover {\n background-color: var(--disabled-bg-color);\n fill: var(--disabled-fill-color);\n box-shadow: none;\n }\n\n .colab-df-spinner {\n border: 2px solid var(--fill-color);\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n animation:\n spin 1s steps(1) infinite;\n }\n\n @keyframes spin {\n 0% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n border-left-color: var(--fill-color);\n }\n 20% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 30% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n border-right-color: var(--fill-color);\n }\n 40% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 60% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n }\n 80% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-bottom-color: var(--fill-color);\n }\n 90% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n }\n }\n</style>\n\n <script>\n async function quickchart(key) {\n const quickchartButtonEl =\n document.querySelector('#' + key + ' button');\n quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n quickchartButtonEl.classList.add('colab-df-spinner');\n try {\n const charts = await google.colab.kernel.invokeFunction(\n 'suggestCharts', [key], {});\n } catch (error) {\n console.error('Error during call to suggestCharts:', error);\n }\n quickchartButtonEl.classList.remove('colab-df-spinner');\n quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n }\n (() => {\n let quickchartButtonEl =\n document.querySelector('#df-8232a837-2422-4fd1-a1d5-71a13256a1e6 button');\n quickchartButtonEl.style.display =\n google.colab.kernel.accessAllowed ? 'block' : 'none';\n })();\n </script>\n</div>`;\n parentElement.appendChild(quickchartButtonContainerElement);\n }\n\n appendQuickchartButton(table);\n " | |
}, | |
"metadata": {}, | |
"execution_count": 11 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"# Group data by date and client, then calculate the mean sizesRelativeError\n", | |
"average_sizes_error = inacurate_sizes_over_time.groupby(['date', 'client'])['sizesRelativeError'].mean().unstack()\n", | |
"\n", | |
"# Create the plot\n", | |
"plt.figure(figsize=(12, 6))\n", | |
"\n", | |
"# Plot lines for each client type\n", | |
"for client in average_sizes_error.columns:\n", | |
" plt.plot(average_sizes_error.index, average_sizes_error[client], label=client)\n", | |
"\n", | |
"plt.title('Average sizesRelativeError Over Time for WordPress Sites by Client')\n", | |
"plt.xlabel('Date')\n", | |
"plt.ylabel('Average sizesRelativeError')\n", | |
"plt.grid(True)\n", | |
"plt.legend() # Add a legend to distinguish lines\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"id": "aqDZ3eJzWxZA", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 564 | |
}, | |
"outputId": "ae8731c5-ada3-4c45-e9e2-976847fae20f" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1200x600 with 1 Axes>" | |
], | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAIjCAYAAAB/OVoZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB+D0lEQVR4nO3dd3gUZdvG4WvTe0KA0EsElKaAqEiRKlVAbKiogBUEBAT0Ff2UIoqgFEVfG74giAoqYEMUBKRYQSJFqlIEgoCQHpJN9vn+CFmzJIEsJGSW/Z3HkSPZ2dmZe+dOAleemWdsxhgjAAAAAABQ6nxKuwAAAAAAAJCDkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AZ7F3717ZbDbNnj27tEspVv3791fNmjWLdZuzZ8+WzWbT3r17i3W7sLaaNWuqf//+pV2Gi6VLl6px48YKCgqSzWZTQkJCaZd0wa1atUo2m02rVq0q7VJKTdu2bdW2bdvSLkOSNHbsWNlsNh07dqy0S3Eq6HukJP5tAOAeQjrgJf773//KZrOpWbNmpV0KzkHbtm1ls9mcH8HBwbriiis0ffp0ORyOC17P888/r8WLF1/w/Uo5/4HMeyzyfgQFBZVKTUVlt9v1yiuv6Oqrr1Z4eLjCwsJ09dVX65VXXpHdbi/t8pxy/+NelA8r+ueff9S7d28FBwfrtdde09y5cxUaGloi+1qwYIFsNpsWLVqU77lGjRrJZrNp5cqV+Z6rXr26WrRoUSI1ncnpPz8RERFq1KiRpkyZooyMjAtez7nau3ev7r33XtWqVUtBQUGqWLGiWrdurTFjxpzxdYcOHdLYsWMVFxd3YQotRYsWLVLXrl1Vrlw5BQQEqHLlyurdu7dWrFhR2qXp999/19ixY/mDLlAIv9IuAMCFMW/ePNWsWVM///yzdu/erdq1a5d2SR6jRo0aSk9Pl7+/f6nWUbVqVU2cOFGSdOzYMb3//vt69NFHdfToUT333HMXtJbnn39et956q3r16uWy/J577tEdd9yhwMDAEt1/YGCgZs6cmW+5r69vie73fKSmpuqGG27Qd999p+7du6t///7y8fHR0qVLNWzYMC1cuFBffvlliYVJd9SrV09z5851WTZ69GiFhYXpqaeeyrf+jh075ONjnb/7//LLL0pOTtazzz6r66+/vkT31apVK0nS2rVrddNNNzmXJyUlacuWLfLz89O6devUrl0753N//fWX/vrrL91xxx0lWlth8v78JCQk6JNPPtGoUaP0yy+/6MMPPyyVmtyxe/duXX311QoODtZ9992nmjVrKj4+Xr/++qsmTZqkcePGOdf95ptvXF576NAhjRs3TjVr1lTjxo0vcOUXhjFG9913n2bPnq0mTZpoxIgRqlixouLj47Vo0SJ16NBB69atK/SPRG+//XaJ//H3999/17hx49S2bVtG7YECENIBL7Bnzx59//33WrhwoQYMGKB58+addbShuDkcDmVmZlp+pLMgVhmhjYyM1N133+18PHDgQNWtW1czZszQ+PHjLRFQfX19L0gdfn5+LseiqFJTUwsNwWlpaQoJCTnnmrKysuRwOBQQEFDg8yNGjNB3332nGTNmaMiQIc7lDz/8sF577TUNGTJEo0aN0uuvv37ONbjLGKOTJ08qODjYZXmFChXyHd8XXnhB5cqVK/C4l/QfZdx15MgRSVJUVFSxbbOw753KlSsrNjZWa9eudVn+ww8/yBij2267Ld9zuY9zA/65Kqx/Z3P6z8+gQYPUrFkzzZ8/X1OnTlXlypWLbV8lYdq0aUpJSVFcXJxq1Kjh8lxu73MV9vN4MZsyZYpmz56t4cOHa+rUqS5nvDz11FOaO3eu/PwKjwCl/QdpAJzuDniFefPmqUyZMrrhhht06623at68ec7n7Ha7oqOjde+99+Z7XVJSkoKCgjRq1CjnsoyMDI0ZM0a1a9dWYGCgqlWrpscffzzfaZI2m01DhgzRvHnz1KBBAwUGBmrp0qWSpJdeekktWrRQ2bJlFRwcrKZNm+rjjz/Ot//09HQNHTpU5cqVU3h4uHr27KmDBw/KZrNp7NixLusePHhQ9913nypUqKDAwEA1aNBA//vf/4p0fJYtW6ZWrVopKipKYWFhuuyyy/Tkk086nz/9mvQznQp8+ojAV199peuuu06hoaEKDw/XDTfcoK1bt7qsc/jwYd17772qWrWqAgMDValSJd14441nPQ0wKChIV199tZKTk/P9x/S9995T06ZNFRwcrOjoaN1xxx3666+/znositIbm82m1NRUvfvuu873nXs98unXpHfv3l2XXHJJgftq3ry5rrrqqmKpuyC5tXz33XcaNGiQYmJiVLVqVUk5lw80bNhQGzZsUOvWrRUSEuLs+ZEjR3T//ferQoUKCgoKUqNGjfTuu++6bDv3e+Kll17S9OnTVatWLQUGBur3338vsJYDBw7onXfeUfv27V0Ceq7BgwerXbt2mjlzpg4cOCBJatiwocvoay6Hw6EqVaro1ltvdVk2ffp0NWjQQEFBQapQoYIGDBigEydOuLy2Zs2a6t69u77++mtdddVVCg4O1ptvvunGUS3Y6dek5x77tWvXaujQoSpfvryioqI0YMAAZWZmKiEhQX379lWZMmVUpkwZPf744zLG5HufRXlPp2vbtq369esnSbr66qtdvj8l6aOPPnJ+j+X+0eHgwYMu2+jfv7/CwsL0xx9/qFu3bgoPD9ddd91V6D5btWqljRs3Kj093bls3bp1atCggbp27aoff/zRZWRy3bp1stlsatmypaScP/A8++yzzu+jmjVr6sknn8z3e/VM/Ttw4IB69eql0NBQxcTE6NFHHy3y6es+Pj7O67Zzf3bPtK+EhAQNHz5c1apVU2BgoGrXrq1JkyblG3398MMP1bRpU4WHhysiIkKXX365Xn75Zefzdrtd48aNU506dRQUFKSyZcuqVatWWrZs2Rnr/eOPP1S1atV8AV2SYmJiXB7nvSZ91apVuvrqqyVJ9957r/P3V975Rn766Sd16dJFkZGRCgkJUZs2bbRu3TqXbSYnJ2v48OGqWbOmAgMDFRMTo44dO+rXX389Y925jh07pt69eysiIkJly5bVsGHDdPLkSefzbdq0UaNGjQp87WWXXabOnTsXuu309HRNnDhRdevW1UsvvVTgJSn33HOPrrnmmkK3UdA16e7+jlm7dq2uueYaBQUF6ZJLLtGcOXOc68yePVu33XabJKldu3bOPnjz3AnA6RhJB7zAvHnzdPPNNysgIEB33nmnXn/9df3yyy+6+uqr5e/vr5tuukkLFy7Um2++6TLqsHjxYmVkZDhPyXQ4HOrZs6fWrl2rhx56SPXq1dPmzZs1bdo07dy5M981yitWrNCCBQs0ZMgQlStXzvmP/ssvv6yePXvqrrvuUmZmpj788EPddttt+uKLL3TDDTc4X9+/f38tWLBA99xzj6699lp99913Ls/n+vvvv3Xttdc6/zBQvnx5ffXVV7r//vuVlJSk4cOHF3pstm7dqu7du+uKK67Q+PHjFRgYqN27d+f7T1leBZ0KnJCQoBEjRrj8B3Hu3Lnq16+fOnfurEmTJiktLU2vv/668z/0ucfjlltu0datW/XII4+oZs2aOnLkiJYtW6b9+/ef9TTA3LCYd8Twueee09NPP63evXvrgQce0NGjRzVjxgy1bt1aGzduPOPoYlF6M3fuXD3wwAO65ppr9NBDD0mSatWqVeD2br/9dvXt29f5/ZZr3759+vHHH/Xiiy+ec90FTb4UEBCgiIgIl2WDBg1S+fLl9cwzzyg1NdW5/J9//lHXrl11xx136O6771aFChWUnp6utm3bavfu3RoyZIhiY2P10UcfqX///kpISNCwYcNctj1r1iydPHlSDz30kAIDAxUdHV3gcfjqq6+UnZ2tvn37Fvi8JPXt21crV67U0qVL9cADD+j222/X2LFjdfjwYVWsWNG53tq1a3Xo0CGXU6UHDBig2bNn695779XQoUO1Z88evfrqq9q4caPWrVvnMjK2Y8cO3XnnnRowYIAefPBBXXbZZYXWdL4eeeQRVaxYUePGjdOPP/6ot956S1FRUfr+++9VvXp1Pf/881qyZIlefPFFNWzY0OX4uPOe8nrqqad02WWX6a233tL48eMVGxvr/P7M3d7VV1+tiRMn6u+//9bLL7+sdevW5fsey8rKUufOndWqVSu99NJLZzzLolWrVpo7d65++uknZyDMPZ24RYsWSkxM1JYtW3TFFVc4n6tbt67Kli0rSXrggQf07rvv6tZbb9XIkSP1008/aeLEidq2bVu+a90L6l96ero6dOig/fv3a+jQoapcubLmzp3r1rXHf/zxhyQ5aypsX2lpaWrTpo0OHjyoAQMGqHr16vr+++81evRoxcfHa/r06ZJy/vh55513qkOHDpo0aZIkadu2bVq3bp3z52js2LGaOHGi8/dJUlKS1q9fr19//VUdO3YstNYaNWpo+fLlWrFihdq3b1/k91ivXj2NHz9ezzzzjB566CFdd911kuQ87XvFihXq2rWrmjZtqjFjxsjHx0ezZs1S+/bttWbNGmewHThwoD7++GMNGTJE9evX1z///KO1a9dq27ZtuvLKK89aR+/evVWzZk1NnDhRP/74o1555RWdOHHCGWTvuecePfjgg9qyZYsaNmzofN0vv/yinTt36v/+7/8K3fbatWt1/PhxDR8+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du20Z88e5/JmzZppypQp+vbbb9WpUyf5+fnplltu0fvvv6+MjAwFBgZq4cKFstvtLiF9165d2rZtW6Gh5PTromNjYwtc74svvtCECRMUFxfncs1k3v/M79u3Tz4+Pvm2cfqs9EePHlVCQoLeeustvfXWW0WqK6/bb79dM2fO1AMPPKAnnnhCHTp00M0336xbb721SLNVL126VOPGjdPo0aN1yy23OJfn/qezsFMxc0/JDgwM1KRJkzRy5EhVqFBB1157rbp3766+ffu6nOIs5Vzrlzvr7h9//KHnnntOR48edQkcu3btkjFGderUKXC/Z5sQqCi9cdftt9+uxYsX64cfflCLFi30xx9/aMOGDc7TYs+lbl9f3yLP2l3Y92GVKlXyTSq1b98+1alTJ1/vc0/D3LdvX5G2fbrc/zDnhvWCFBTkb7/9dj355JM6ePCgqlSpolWrVunIkSP5fi4TExPzXYubq6g/lyUh948wuSIjIyVJ1apVy7c87x+p3H1PRZHbu4JO769bt26+yd38/Pyccxicjc1mU4sWLZxBbt26dYqJiXH+vmrRooVeffVVSXKG9dyQnvu77vTfbRUrVlRUVFSRvuf27dun2rVr5/s5LexShqCgIH3++eeScn4HxcbGFvheC9rXrl27tGnTprP+OzBo0CAtWLBAXbt2VZUqVdSpUyf17t1bXbp0ca47fvx43Xjjjbr00kvVsGFDdenSRffcc4/zsoAzufTSSzV37lxlZ2fr999/1xdffKHJkyfroYceUmxsrNuz+uf+zs6dz6AgiYmJKlOmjCZPnqx+/fqpWrVqatq0qbp166a+ffsWOv/G6U7/PVerVi35+Pi4zEPSt29fzZ8/X2vWrFHr1q21fPly/f3337rnnnvOuO3cf1vO9LvGXe7+PJ7+cy9JZcqUOesfogH8i5AOXMRWrFih+Ph4ffjhhwXeVmfevHnq1KmTJOmOO+7Qm2++qa+++kq9evXSggULVLduXZfJaxwOhy6//HJNnTq1wP2d/h/vgmYBXrNmjXr27KnWrVvrv//9rypVqiR/f3/NmjVL77//vtvvMXdk4+677y70P1dn+g9fcHCwVq9erZUrV+rLL7/U0qVLNX/+fLVv317ffPPNGa/p27Nnj+666y517NhREyZMKLCuuXPn5gvbklxm1h0+fLh69OihxYsX6+uvv9bT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brlF06dP1z///OO8BdvOnTsluf4V/oUXXtDKlSvVrFkzPfjgg6pfv76OHz+uX3/9VcuXLy8wiOcaP368Vq9erRtuuEE1atTQkSNH9N///ldVq1Z1+Y90Xl9++aXmzJmjW265RZs2bXKpOywsTL169VJERIRef/113XPPPbryyit1xx13qHz58tq/f7++/PJLtWzZUq+++qp27typDh06qHfv3qpfv778/Py0aNEi/f333y632CpM/fr11a1bN82cOVNPP/20atWqpQkTJmj06NHau3evevXqpfDwcO3Zs0eLFi3SQw895HLf+3PpTW5/li9frqlTp6py5cqKjY1Vs2bNCq0z917To0aNcv5hJS93687Kyir0LIObbrrpjBMrnclDDz2kN998U/3799eGDRtUs2ZNffzxx1q3bp2mT59+XpMxTZs2Tdu3b9egQYO0dOlS54j5119/rU8//VRt2rTRlClT8r2ud+/eGjVqlEaNGqXo6Oh8o3xt2rTRgAEDNHHiRMXFxalTp07y9/fXrl279NFHH+nll192mVDME5TEe/L399ekSZN07733qk2bNrrzzjudt2CrWbOmHn300fOqOSAgQFdffbXWrFmjwMBANW3a1OX5Fi1aOPub93dLo0aN1K9fP7311ltKSEhQmzZt9PPPP+vdd99Vr169nJN+nsmDDz6oV199VX379tWGDRtUqVIlzZ0794y3jTtXjz32mD777DN1797deVut1NRUbd68WR9//LH27t2rcuXK6YEHHtDx48fVvn17Va1aVfv27dOMGTPUuHFj578t9evXV9u2bdW0aVNFR0dr/fr1zlubncmkSZO0YcMG3Xzzzc7g/+uvv2rOnDmKjo4+4203a9WqpaioKL3xxhsKDw9XaGiomjVrptjYWM2cOVNdu3ZVgwYNdO+996pKlSo6ePCgVq5cqYiICH3++edKTk5W1apVdeutt6pRo0YKCwvT8uXL9csvvxT481uQPXv2qGfPnurSpYt++OEHvffee+rTp0++e6M3adJEDRs2dE7aWpTbu0k5Pdq6daumTJmilStX6tZbb1XFihV1+PBhLV68WD///LO+//77Im1LKpmfx8aNG8vX11eTJk1SYmKiAgMD1b59+0Kvewe8zgWfTx7ABdGjRw8TFBRU4C1pcvXv39/4+/s7b13mcDhMtWrVjCQzYcKE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/mOPPabvvvtOn376qWJiYvTkk0/q119/VePGjSVJQ4YM0e+//64PP/xQlStX1qJFi9SlSxdt3rxZderU0eDBg5WZmanVq1crNDRUv//+u8LCwvLtJyEhQTfccIPCwsK0bNkyhYSE6Oeff9Y111yj5cuXq0GDBgoICJAkvfzyy5oyZYrefPNNNWnSRP/73//Us2dPbd26VXXq1HGpffr06apfv76mTp2qHj16aM+ePSpbtuy5H0AAAAAA8DCMpF8kUlJS9M477+ill15Shw4ddPnll+vdd99VVlaWJGn//v2aNWuWPvroI1133XWqVauWRo0apVatWmnWrFnOdVq2bKnLL79cl1xyibp3767WrVu77Ofw4cNq06aNKlWqpM8//1whISGSpPLly0uSypYtq4oVKyo6OlqS9NJLL+k///mP7rjjDl122WWaNGmSGjdurOnTp7tsd8iQIbrllltUr149vf7664qMjNQ777xTkocMAAAAACyHkfSzCPb31e/jO5fKvgN9bUo+WbR1//jjD2VmZqpZs2bOZdHR0brsssskSZs3b1Z2drYuvfRSl9dlZGQ4R6uHDh2qhx9+WN98842uv/563XLLLbriiitc1u/YsaOuueYazZ8/X76+vmesKSkpSYcOHVLLli1dlrds2VK//faby7LmzZs7v/bz89NVV12lbdu2Fe3NAwAAAPA4xhhlO4yyHEb2bIeyHUb2bKMsh0NZ2TnLs7Id/y5zmJzl2Q7ZHUbZDodOZmRp4z82XXcyS9H+/qX9looFIf0sbDabQgJK5zA5HI5i21ZKSop8fX21YcOGfOE695T2Bx54QJ07d9aXX36pb775RhMnTtSUKVP0yCOPONe94YYb9Mknn+j333/X5ZdfXmz1AQAAACjY6WHWGWDdCLP27FPLnK/JXXZq/TzbyHYY2U+tl51nn3ZHTpDOyj61LM/r8j7vut1Tz53aZ3b2v9vOcrg3B1fhfNU78aSiw4OLaXuli5B+kahVq5b8/f31008/qXr16pKkEydOaOfOnWrTpo2aNGmi7OxsHTlyRNddd12h26lWrZoGDhyogQMHavTo0Xr77bddQvoLL7ygsLAwdejQQatWrVL9+vUlyXkNenZ2tnPdiIgIVa5cWevWrVObNm2cy9etW6drrrnGZb8//vij89T6rKwsbdiwQUOGDDnPowIAAABv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HR2tfv36acKECfLz+/fbIisrS0OGDNHcuXPl7++vhx9+WOPHj3eOApx+uvvp/vrrL40cOVLffPONfHx8dN111+nll19WzZo1z/mwAAAKZj91D+uEUyE7Ic2uhPS8X+fcSisx9+tUuxLT7Uo5632sfaTDh9yqJdDPJ//Ic57R6CD/vMG58NO5QwJ8861bkqPRAACUNkL62djTpOcrl86+nzjg1urvvvuuHn/8cf3888+aP3++Hn74YS1atEg33XSTnnzySU2bNk333HOP9u/frxMnTqhbt27q37+/5syZo+3bt+vBBx9UUFCQxo4d67LN+++/Xz///LPWr1+vhx56SNWrV9eDDz541nrsdrs6d+6s5s2ba82aNfLz89OECRPUpUsXbdq0SQEBAe4eEQDwClmnwvaJQka3T5wK3S5fp9mVfNawXTibTYoI8ldUiL+igv0VFRKgqBB/RQT66u8D+9Sw3qUKCwo44+ncwaceB/v7ypfRaAAAzgkh/SLSqFEj/d///Z8kafTo0XrhhRdUrlw5Z6B+5pln9Prrr2vTpk36/PPPVa1aNb366quy2WyqW7euDh06pP/85z965pln5OOTM9NrtWrVNG3aNNlsNl122WXavHmzpk2bVqSQPn/+fDkcDs2cOdM54jFr1ixFRUVp1apV6tSpUwkdCQCwhtywnXDG0W3Xke6E1PML25IUEeSnqJCce1hHhuTcMsvl61B/RQUHKPLU7baigv0VEexfYLC22+1asmSPurW5hMnIAAC4AAjpZ+MfIj3p3il+xcY3SDqZXOTVr7jiin9f6uursmXL6vLLL3cuq1ChgiTpyJEj2rZtm5o3b+5yumDLli2VkpKiAwcOqHr16pKka6+91mWd5s2ba8qUKcrOzpavr+8Z6/ntt9+0e/duhYeHuyw/efKk/vjjjyK/LwAobVnZDiWdzFJCWma+0e3EtEwlpBc80p188vzCdniQX06IDvFXZLC/8+u8I905HwHOZZGFhG0AAOAZCOlnY7NJAaU0e7nD4dbqp49w2Gw2l2W5Ydvh5nbPVUpKipo2bap58+ble44J5wCUhmyHUVJuiE7POUX8xNlGt9MylVQMYTsnXAe4hOrTR7cjTz1fJiRAEUF+8vPl/tUAAHgbQrqXqlevnj755BMZY5zhfd26dQoPD1fVqlWd6/30008ur/vxxx9Vp06d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jxZ7gQAAAAAAeAu3Jo6TpL/++ku1a9eWJC1evFi33HKLHnroIbVs2VJt27Yt7voAAAAAAPAabo+kh4WF6Z9//pEkffPNN+rYsaMkKSgoSOnp6cVbHQAAAAAAXsTtkfSOHTvqgQceUJMmTbRz505169ZNkrR161bVrFmzuOsDAAAAAMBruD2S/tprr6l58+Y6evSoPvnkE5UtW1aStGHDBt15553FXiAAAAAAAN7C7ZH0qKgovfrqq/mWjxs3rlgKAgAAAADAW53TfdLXrFmju+++Wy1atNDBgwclSXPnztXatWuLtTgAAAAAALyJ2yH9k08+UefOnRUcHKxff/1VGRkZkqTExEQ9//zzxV4gAAAAAADewu2QPmHCBL3xxht6++235e/v71zesmVL/frrr8VaHAAAAAAA3sTtkL5jxw61bt063/LIyEglJCQUR00AAAAAAHglt0N6xYoVtXv37nzL165dq0suuaRYigIAAAAAwBu5HdIffPBBDRs2TD/99JNsNpsOHTqkefPmadSoUXr44YdLokYAAAAAALyC27dge+KJJ+RwONShQwelpaWpdevWCgwM1KhRo/TII4+URI0AAAAAAHgFt0O6zWbTU089pccee0y7d+9WSkqK6tevr7CwsJKoDwAAAAAAr+H26e5z5szRtm3bFBAQoPr16+uaa65RWFiYTp48qTlz5pREjQAAAAAAeAW3Q3r//v11zTXX6JNPPnFZnpiYqHvvvbfYCgMAAAAAwNu4HdIlady4cbrnnns0duzYYi4HAAAAAADvdU4h/e6779aKFSv05ptv6tZbb1V6enpx1wUAAAAAgNdxO6TbbDZJ0rXXXquffvpJu3fvVosWLbR3797irg0AAAAAAK/idkg3xji/rl69ur7//nvVrFlTHTt2LNbCAAAAAADwNm6H9DFjxrjcbi0kJESLFi3So48+qtatWxdrcQAAAAAAeBO375M+ZsyYApePGzfuvIsBAAAAAMCbFSmkf/bZZ+ratav8/f312WefFbqezWZTjx49iq04AAAAAAC8SZFCeq9evXT48GHFxMSoV69eha5ns9mUnZ1d5J2vXr1aL774ojZs2KD4+HgtWrTojNtfuHChXn/9dcXFxSkjI0MNGjTQ2LFj1blz5yLvEwAAAAAAqyrSNekOh0MxMTHOrwv7cCegS1JqaqoaNWqk1157rUjrr169Wh07dtSSJUu0YcMGtWvXTj169NDGjRvd2i8AAAAAAFbk9jXpBUlISFBUVJTbr+vatau6du1a5PWnT5/u8vj555/Xp59+qs8//1xNmjRxe/8AAAAAAFiJ2yF90qRJqlmzpm6//XZJ0m233aZPPvlElSpV0pIlS9SoUaNiL7IwDodDycnJio6OLnSdjIwMZWRkOB8nJSVJkux2u+x2e4nXeD5y67N6naBXVkRPPAe9sjb64znolbXRH89CvzyHp/TKnfpsJu+Nz4sgNjZW8+bNU4sWLbRs2TL17t1b8+fP14IFC7R//3598803bhcs5VzPfrZr0k83efJkvfDCC9q+fbvzdPzTjR07tsCZ599//32FhIScU60AAAAAABRVWlqa+vTpo8TEREVERJxxXbdDenBwsHbu3Klq1app2LBhOnnypN58803t3LlTzZo104kTJ86paHdD+vvvv68HH3xQn376qa6//vpC1ytoJL1atWo6duzYWQ9OabPb7Vq2bJk6duwof3//0i4HZ0CvrIeeeA56ZW30x3PQK2ujP56FfnkOT+lVUlKSypUrV6SQ7vbp7mXKlNFff/2latWqaenSpZowYYIkyRjj9sRx5+rDDz/UAw88oI8++uiMAV2SAgMDFRgYmG+5v7+/pZuYlyfV6u3olfXQE89Br6yN/ngOemVt9Mez0C/PYfVeuVOb2yH95ptvVp8+fVSnTh39888/zonfNm7cqNq1a7u7Obd98MEHuu+++/Thhx/qhhtuKPH9AQAAAABwobgd0qdNm6aaNWvqr7/+0uTJkxUWFiZJio+P16BBg9zaVkpKinbv3u18vGfPHsXFxSk6OlrVq1fX6NGjdfDgQc2ZM0dSzinu/fr108svv6xmzZrp8OHDknJOwY+MjHT3rQAAAAAAYCluh3R/f3+NGjUq3/JHH33U7Z2vX79e7dq1cz4eMWKEJKlfv36aPXu24uPjtX//fufzb731lrKysjR48GANHjzYuTx3fQAAAAAAPFmx3Cf9XLVt21Znmrfu9OC9atWqki0IAAAAAIBS5FPaBQAAAAAAgByEdAAAAAAALIKQDgAAAACARZxTSE9ISNDMmTM1evRoHT9+XJL066+/6uDBg8VaHAAAAAAA3sTtieM2bdqk66+/XpGRkdq7d68efPBBRUdHa+HChdq/f7/zdmkAAAAAAMA9bo+kjxgxQv3799euXbsUFBTkXN6tWzetXr26WIsDAAAAAMCbuB3Sf/nlFw0YMCDf8ipVqujw4cPFUhQAAAAAAN7I7ZAeGBiopKSkfMt37typ8uXLF0tRAAAAAAB4I7dDes+ePTV+/HjZ7XZJks1m0/79+/Wf//xHt9xyS7EXCAAAAACAt3A7pE+ZMkUpKSmKiYlRenq62rRpo9q1ays8PFzPPfdcSdQIAAAAAIBXcHt298jISC1btkxr167Vpk2blJKSoiuvvFLXX399SdQHAAAAAIDXcDuk52rVqpVatWpVnLUAAAAAAODV3A7pr7zySoHLbTabgoKCVLt2bbVu3Vq+vr7nXRwAAAAAAN7E7ZA+bdo0HT16VGlpaSpTpowk6cSJEwoJCVFYWJiOHDmiSy65RCtXrlS1atWKvWAAAAAAAC5Wbk8c9/zzz+vqq6/Wrl279M8//+iff/7Rzp071axZM7388svav3+/KlasqEcffbQk6gUAAAAA4KLl9kj6//3f/+mTTz5RrVq1nMtq166tl156Sbfccov+/PNPTZ48mduxAQAAAADgJrdH0uPj45WVlZVveVZWlg4fPixJqly5spKTk8+/OgAAAAAAvIjbIb1du3YaMGCANm7c6Fy2ceNGPfzww2rfvr0kafPmzYqNjS2+KgEAAAAA8AJuh/R33nlH0dHRatq0qQIDAxUYGKirrrpK0dHReueddyRJYWFhmjJlSrEXCwAAAADAxczta9IrVqyoZcuWafv27dq5c6ck6bLLLtNll13mXKddu3bFVyEAAAAAAF7C7ZCeq27duqpbt25x1gIAAAAAgFc7p5B+4MABffbZZ9q/f78yMzNdnps6dWqxFAYAAAAAgLdxO6R/++236tmzpy655BJt375dDRs21N69e2WM0ZVXXlkSNQIAAAAA4BXcnjhu9OjRGjVqlDZv3qygoCB98skn+uuvv9SmTRvddtttJVEjAAAAAABewe2Qvm3bNvXt21eS5Ofnp/T0dIWFhWn8+PGaNGlSsRcIAAAAAIC3cDukh4aGOq9Dr1Spkv744w/nc8eOHSu+ygAAAAAA8DJuX5N+7bXXau3atapXr566deumkSNHavPmzVq4cKGuvfbakqgRAAAAAACv4HZInzp1qlJSUiRJ48aNU0pKiubPn686deowszsAAAAAAOfBrZCenZ2tAwcO6IorrpCUc+r7G2+8USKFAQAAAADgbdy6Jt3X11edOnXSiRMnSqoeAAAAAAC8ltsTxzVs2FB//vlnSdQCAAAAAIBXczukT5gwQaNGjdIXX3yh+Ph4JSUluXwAAAAAAIBz4/bEcd26dZMk9ezZUzabzbncGCObzabs7Oziqw4AAAAAAC/idkhfuXJlSdQBAAAAAIDXczukt2nTpiTqAAAAAADA67l9TbokrVmzRnfffbdatGihgwcPSpLmzp2rtWvXFmtxAAAAAAB4E7dD+ieffKLOnTsrODhYv/76qzIyMiRJiYmJev7554u9QAAAAAAAvMU5ze7+xhtv6O2335a/v79zecuWLfXrr78Wa3EAAAAAAHgTt0P6jh071Lp163zLIyMjlZCQUBw1AQAAAADgldwO6RUrVtTu3bvzLV+7dq0uueSSYikKAAAAAABv5HZIf/DBBzVs2DD99NNPstlsOnTokObNm6dRo0bp4YcfLokaAQAAAADwCm7fgu2JJ56Qw+FQhw4dlJaWptatWyswMFCjRo3SI488UhI1AgAAAADgFdwO6TabTU899ZQee+wx7d69WykpKapfv77CwsJKoj4AAAAAALyG26e7v/fee0pLS1NAQIDq16+va665hoAOAAAAAEAxcDukP/roo4qJiVGfPn20ZMkSZWdnl0RdAAAAAAB4HbdDenx8vD788EPZbDb17t1blSpV0uDBg/X999+XRH0AAAAAAHgNt0O6n5+funfvrnnz5unIkSOaNm2a9u7dq3bt2qlWrVolUSMAAAAAAF7B7Ynj8goJCVHnzp114sQJ7du3T9u2bSuuugAAAAAA8Dpuj6RLUlpamubNm6du3bqpSpUqmj59um666SZt3bq1uOsDAAAAAMBruD2Sfscdd+iLL75QSEiIevfuraefflrNmzcvidoAAAAAAPAqbod0X19fLViwQJ07d5avr6/Lc1u2bFHDhg2LrTgAAAAAALyJ2yF93rx5Lo+Tk5P1wQcfaObMmdqwYQO3ZAMAAAAA4Byd0zXpkrR69Wr169dPlSpV0ksvvaT27dvrxx9/LM7aAAAAAADwKm6NpB8+fFizZ8/WO++8o6SkJPXu3VsZGRlavHix6tevX1I1AgAAAADgFYo8kt6jRw9ddtll2rRpk6ZPn65Dhw5pxowZJVkbAAAAAABepcgj6V999ZWGDh2qhx9+WHXq1CnJmgAAAAAA8EpFHklfu3atkpOT1bRpUzVr1kyvvvqqjh07VpK1AQAAAADgVYoc0q+99lq9/fbbio+P14ABA/Thhx+qcuXKcjgcWrZsmZKTk93e+erVq9WjRw9VrlxZNptNixcvPuP68fHx6tOnjy699FL5+Pho+PDhbu8TAAAAAACrcnt299DQUN13331au3atNm/erJEjR+qFF15QTEyMevbs6da2UlNT1ahRI7322mtFWj8jI0Ply5fX//3f/6lRo0bulg4AAAAAgKWd8y3YJOmyyy7T5MmTdeDAAX3wwQduv75r166aMGGCbrrppiKtX7NmTb388svq27evIiMj3d4fAAAAAABW5tYt2Arj6+urXr16qVevXsWxuWKVkZGhjIwM5+OkpCRJkt1ul91uL62yiiS3PqvXCXplRfTEc9Ara6M/noNeWRv98Sz0y3N4Sq/cqc9mjDElWEuR2Ww2LVq0qMhBv23btmrcuLGmT59+xvXGjh2rcePG5Vv+/vvvKyQk5BwqBQAAAACg6NLS0tSnTx8lJiYqIiLijOsWy0i6lY0ePVojRoxwPk5KSlK1atXUqVOnsx6c0ma327Vs2TJ17NhR/v7+pV0OzoBeWQ898Rz0ytroj+egV9ZGfzwL/fIcntKr3DO6i+KiD+mBgYEKDAzMt9zf39/STczLk2r1dvTKeuiJ56BX1kZ/PAe9sjb641nol+eweq/cqe28Jo4DAAAAAADFp1RH0lNSUrR7927n4z179iguLk7R0dGqXr26Ro8erYMHD2rOnDnOdeLi4pyvPXr0qOLi4hQQEKD69etf6PIBAAAAAChWpRrS169fr3bt2jkf51473q9fP82ePVvx8fHav3+/y2uaNGni/HrDhg16//33VaNGDe3du/eC1AwAAAAAQEkp1ZDetm1bnWly+dmzZ+dbZpHJ6AEAAAAAKHZckw4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEWUakhfvXq1evToocqVK8tms2nx4sVnfc2qVat05ZVXKjAwULVr19bs2bNLvE4AAAAAAC6EUg3pqampatSokV577bUirb9nzx7dcMMNateuneLi4jR8+HA98MAD+vrrr0u4UgAAAAAASp5fae68a9eu6tq1a5HXf+ONNxQbG6spU6ZIkurVq6e1a9dq2rRp6ty5c0mVCQAAAADABVGqId1dP/zwg66//nqXZZ07d9bw4cMLfU1GRoYyMjKcj5OSkiRJdrtddru9ROosLrn1Wb1O0Csroieeg15ZG/3xHPTK2uiPZ6FfnsNTeuVOfR4V0g8fPqwKFSq4LKtQoYKSkpKUnp6u4ODgfK+ZOHGixo0bl2/5N998o5CQkBKrtTgtW7astEtAEdEr66EnnoNeWRv98Rz0ytroj2ehX57D6r1KS0sr8roeFdLPxejRozVixAjn46SkJFWrVk2dOnVSREREKVZ2dna7XcuWLVPHjh3l7+9f2uXgDOiV9dATz0GvrI3+eA56ZW30x7PQL8/hKb3KPaO7KDwqpFesWFF///23y7K///5bERERBY6iS1JgYKACAwPzLff397d0E/PypFq9Hb2yHnriOeiVtdEfz0GvrI3+eBb65Tms3it3avOo+6Q3b95c3377rcuyZcuWqXnz5qVUEQAAAAAAxadUQ3pKSori4uIUFxcnKecWa3Fxcdq/f7+knFPV+/bt61x/4MCB+vPPP/X4449r+/bt+u9//6sFCxbo0UcfLY3yAQAAAAAoVqUa0tevX68mTZqoSZMmkqQRI0aoSZMmeuaZZyRJ8fHxzsAuSbGxsfryyy+1bNkyNWrUSFOmTNHMmTO5/RoAAAAA4KJQqtekt23bVsaYQp+fPXt2ga/ZuHFjCVYFAAAAAEDp8Khr0gEAAAAAuJgR0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAi/0i4A8GgOh5SVLqUnK9CeIKX8Lfn5l3ZVkKQsOz3xFPTK2uiP56BX1kZ/PAv98hy5vcq2S/4XR69sxhhT2kVcSElJSYqMjFRiYqIiIiJKu5wzstvtWrJkibp16yb/i+QbrkQZk/PDmZUu2U+ew+eTkj29iJ9PvS47s7TfNQAAAOD17A+ukX+VK0q7jEK5k0MZSUfJcThyAq1b4dfNkHz6Z+MotbdrZJNsNtlKrQLkZaScP9zQE8ujV9ZGfzwHvbI2+uNZ6JfncPbqIkJI9ybZ9pILxwV9zs4oxTdrk/yDJb+gM3wOkvyCi+Wz3fhqydKvOevBQrI4E8Vj0Ctroz+eg15ZG/3xLPTLczh7FVOvtEspNoR0q0r4S7a/NqjK8R9kizsuOc7lNO7TQrbJLr334+NXQMA9U4Au4LM76/oGSLYL+HdPu/3C7QsAAADARYuQblV7vpPfp4N1lSTtK4Ht+xU1JBfTaLMv32oAAAAAcDYkJ6sKryRHlav1T2KqylasIp+AkPMIyQWE7ws5ygwAAAAAKBJCulXV7qDsGq31/alrYXy4FgYAAAAALno+pV0AAAAAAADIQUgHAAAAAMAiCOkAAAAAAFgEIR0AAAAAAIsgpAMAAAAAYBGEdAAAAAAALIKQDgAAAACARRDSAQAAAACwCEI6AAAAAAAWQUgHAAAAAMAiCOkAAAAAAFgEIR0AAAAAAIsgpAMAAAAAYBGEdAAAAAAALIKQDgAAAACARRDSAQAAAACwCEI6AAAAAAAWQUgHAAAAAMAi/Eq7gAvNGCNJSkpKKuVKzs5utystLU1JSUny9/cv7XJwBvTKeuiJ56BX1kZ/PAe9sjb641nol+fwlF7l5s/cPHomXhfSk5OTJUnVqlUr5UoAAAAAAN4kOTlZkZGRZ1zHZooS5S8iDodDhw4dUnh4uGw2W2mXc0ZJSUmqVq2a/vrrL0VERJR2OTgDemU99MRz0Ctroz+eg15ZG/3xLPTLc3hKr4wxSk5OVuXKleXjc+arzr1uJN3Hx0dVq1Yt7TLcEhERYelvOPyLXlkPPfEc9Mra6I/noFfWRn88C/3yHJ7Qq7ONoOdi4jgAAAAAACyCkA4AAAAAgEUQ0i0sMDBQY8aMUWBgYGmXgrOgV9ZDTzwHvbI2+uM56JW10R/PQr88x8XYK6+bOA4AAAAAAKtiJB0AAAAAAIsgpAMAAAAAYBGEdAAAAAAALIKQDgAAAACARRDS3TRx4kRdffXVCg8PV0xMjHr16qUdO3a4rHPy5EkNHjxYZcuWVVhYmG655Rb9/fffzud/++033XnnnapWrZqCg4NVr149vfzyy4Xuc926dfLz81Pjxo3PWp8xRs8884wqVaqk4OBgXX/99dq1a5fLOs8995xatGihkJAQRUVFufX+PYmn92rv3r26//77FRsbq+DgYNWqVUtjxoxRZmam+wfDIjy9J5LUs2dPVa9eXUFBQapUqZLuueceHTp0yL0D4QEuhl7lysjIUOPGjWWz2RQXF1ek9291F0N/atasKZvN5vLxwgsvuHcgPMTF0C9J+vLLL9WsWTMFBwerTJky6tWrV5GPgZV5en9WrVqV72cp9+OXX35x/4BYmKf3SpJ27typG2+8UeXKlVNERIRatWqllStXuncgPMDF0Ktff/1VHTt2VFRUlMqWLauHHnpIKSkp7h2Ic2Xgls6dO5tZs2aZLVu2mLi4ONOtWzdTvXp1k5KS4lxn4MCBplq1aubbb78169evN9dee61p0aKF8/l33nnHDB061Kxatcr88ccfZu7cuSY4ONjMmDEj3/5OnDhhLrnkEtOpUyfTqFGjs9b3wgsvmMjISLN48WLz22+/mZ49e5rY2FiTnp7uXOeZZ54xU6dONSNGjDCRkZHndTyszNN79dVXX5n+/fubr7/+2vzxxx/m008/NTExMWbkyJHnf3BKiaf3xBhjpk6dan744Qezd+9es27dOtO8eXPTvHnz8zswFnQx9CrX0KFDTdeuXY0ks3HjxnM6HlZzMfSnRo0aZvz48SY+Pt75kbf+i8nF0K+PP/7YlClTxrz++utmx44dZuvWrWb+/Pnnd2AswtP7k5GR4fJzFB8fbx544AETGxtrHA7H+R8gC/H0XhljTJ06dUy3bt3Mb7/9Znbu3GkGDRpkQkJCTHx8/PkdHIvx9F4dPHjQlClTxgwcONBs377d/Pzzz6ZFixbmlltuOf+DUwSE9PN05MgRI8l89913xhhjEhISjL+/v/noo4+c62zbts1IMj/88EOh2xk0aJBp165dvuW33367+b//+z8zZsyYs37DORwOU7FiRfPiiy86lyUkJJjAwEDzwQcf5Ft/1qxZF3VIP50n9yrX5MmTTWxs7Bm37Ukuhp58+umnxmazmczMzDNu39N5aq+WLFli6tata7Zu3XpRhfTTeWJ/atSoYaZNm1bEd3hx8bR+2e12U6VKFTNz5kx33qbH8rT+nC4zM9OUL1/ejB8//ozbvhh4Wq+OHj1qJJnVq1c710lKSjKSzLJly4r0nj2Vp/XqzTffNDExMSY7O9u5zqZNm4wks2vXriK95/PB6e7nKTExUZIUHR0tSdqwYYPsdruuv/565zp169ZV9erV9cMPP5xxO7nbyDVr1iz9+eefGjNmTJFq2bNnjw4fPuyy78jISDVr1uyM+/YWF0OvCtq3J/P0nhw/flzz5s1TixYt5O/vX6T9eCpP7NXff/+tBx98UHPnzlVISEiRtu2pPLE/kvTCCy+obNmyatKkiV588UVlZWUVaR+eztP69euvv+rgwYPy8fFRkyZNVKlSJXXt2lVbtmwp2hv2MJ7Wn9N99tln+ueff3TvvfcWaR+ezNN6VbZsWV122WWaM2eOUlNTlZWVpTfffFMxMTFq2rRp0d60h/K0XmVkZCggIEA+Pv/G5eDgYEnS2rVri7Sf8+FX4nu4iDkcDg0fPlwtW7ZUw4YNJUmHDx9WQEBAvmu9K1SooMOHDxe4ne+//17z58/Xl19+6Vy2a9cuPfHEE1qzZo38/IrWptztV6hQocj79hYXQ692796tGTNm6KWXXirSPqzOk3vyn//8R6+++qrS0tJ07bXX6osvvijSPjyVJ/bKGKP+/ftr4MCBuuqqq7R3794ibdsTeWJ/JGno0KG68sorFR0dre+//16jR49WfHy8pk6dWqT9eCpP7Neff/4pSRo7dqymTp2qmjVrasqUKWrbtq127tx5Uf3x2BP7c7p33nlHnTt3VtWqVYu0D0/lib2y2Wxavny5evXqpfDwcPn4+CgmJkZLly5VmTJlirQfT+SJvWrfvr1GjBihF198UcOGDVNqaqqeeOIJSVJ8fHyR9nM+GEk/D4MHD9aWLVv04YcfnvM2tmzZohtvvFFjxoxRp06dJEnZ2dnq06ePxo0bp0svvbTA182bN09hYWHOjzVr1pxzDd7A03t18OBBdenSRbfddpsefPDBc34PVuLJPXnssce0ceNGffPNN/L19VXfvn1ljDnn92F1ntirGTNmKDk5WaNHjz7nmj2FJ/ZHkkaMGKG2bdvqiiuu0MCBAzVlyhTNmDFDGRkZ5/w+PIEn9svhcEiSnnrqKd1yyy1q2rSpZs2aJZvNpo8++uic34cVeWJ/8jpw4IC+/vpr3X///edcv6fwxF4ZYzR48GDFxMRozZo1+vnnn9WrVy/16NHjggS/0uKJvWrQoIHeffddTZkyRSEhIapYsaJiY2NVoUIFl9H1ElPiJ9RfpAYPHmyqVq1q/vzzT5fl3377rZFkTpw44bK8evXqZurUqS7Ltm7damJiYsyTTz7psvzEiRNGkvH19XV+2Gw257Jvv/3WJCUlmV27djk/0tLSzB9//FHgNZetW7c2Q4cOzfcevOWadE/v1cGDB02dOnXMPffc43JdjCfz9J7k9ddffxlJ5vvvv3f/QHgAT+3VjTfeaHx8fFy2nbvdvn37Fs/BsQBP7U9BtmzZYiSZ7du3u38gPISn9mvFihVGklmzZo3LOtdcc02+OjyZp/Ynr/Hjx5vy5ctf9POkeGqvli9fbnx8fExiYqLLOrVr1zYTJ048jyNiXZ7aq7wOHz5skpOTTUpKivHx8TELFiw49wNSRIR0NzkcDjN48GBTuXJls3PnznzP506C8PHHHzuXbd++Pd8kCFu2bDExMTHmsccey7eN7Oxss3nzZpePhx9+2Fx22WVm8+bNhc5+mzsJwksvveRclpiY6LUTx10MvTpw4ICpU6eOueOOO0xWVtY5HQcruRh6crp9+/YZSWblypVFOQQew9N7tW/fPpftfv3110aS+fjjj81ff/11zsfFKjy9PwV57733jI+Pjzl+/HiRjoEn8fR+5T7OO3FcZmamiYmJMW+++ab7B8RiPL0/edeNjY316LvAnI2n9+qzzz4zPj4+Jjk52eW1l156qXnuuefcOxgW5+m9Ksg777xjQkJC8v1hoSQQ0t308MMPm8jISLNq1SqXW12kpaU51xk4cKCpXr26WbFihVm/fn2+WzRt3rzZlC9f3tx9990u2zhy5Eih+y3KTIXG5NxOICoqynz66adm06ZN5sYbb8x364d9+/aZjRs3mnHjxpmwsDCzceNGs3Hjxny/MDydp/fqwIEDpnbt2qZDhw7mwIEDLvv3VJ7ekx9//NHMmDHDbNy40ezdu9d8++23pkWLFqZWrVrm5MmT535gLMjTe3W6PXv2XFSzu3t6f77//nszbdo0ExcXZ/744w/z3nvvmfLly19UZznk5en9MsaYYcOGmSpVqpivv/7abN++3dx///0mJibmovijysXQH2NyRmklmW3btrl/EDyEp/fq6NGjpmzZsubmm282cXFxZseOHWbUqFHG39/fxMXFnfuBsSBP75UxxsyYMcNs2LDB7Nixw7z66qsmODjYvPzyy+d2QNxESHeTpAI/Zs2a5VwnPT3dDBo0yJQpU8aEhISYm266ySVYjRkzpsBt1KhRo9D9FvUbzuFwmKefftpUqFDBBAYGmg4dOpgdO3a4rNOvX78C93+xjQR6eq9mzZpV6HvwVJ7ek02bNpl27dqZ6OhoExgYaGrWrGkGDhxoDhw4cC6Hw9I8vVenu9hCuqf3Z8OGDaZZs2YmMjLSBAUFmXr16pnnn3/+ovtjVy5P75cxOSPnI0eONDExMSY8PNxcf/31ZsuWLe4eCku6GPpjjDF33nmnyz2mL0YXQ69++eUX06lTJxMdHW3Cw8PNtddea5YsWeLuobC8i6FX99xzj4mOjjYBAQHmiiuuMHPmzHH3MJwzmzEX8WxHAAAAAAB4EGZ3BwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAB4mf79+8tms8lms8nf318VKlRQx44d9b///U8Oh6PI25k9e7aioqJKrlAAALwQIR0AAC/UpUsXxcfHa+/evfrqq6/Url07DRs2TN27d1dWVlZplwcAgNcipAMA4IUCAwNVsWJFValSRVdeeaWefPJJffrpp/rqq680e/ZsSdLUqVN1+eWXKzQ0VNWqVdOgQYOUkpIiSVq1apXuvfdeJSYmOkflx44dK0nKyMjQqFGjVKVKFYWGhqpZs2ZatWpV6bxRAAA8DCEdAABIktq3b69GjRpp4cKFkiQfHx+98sor2rp1q959912tWLFCjz/+uCSpRYsWmj59uiIiIhQfH6/4+HiNGjVKkjRkyBD98MMP+vDDD7Vp0ybddttt6tKli3bt2lVq7w0AAE9hM8aY0i4CAABcOP3791dCQoIWL16c77k77rhDmzZt0u+//57vuY8//lgDBw7UsWPHJOVckz58+HAlJCQ419m/f78uueQS7d+/X5UrV3Yuv/7663XNNdfo+eefL/b3AwDAxcSvtAsAAADWYYyRzWaTJC1fvlwTJ07U9u3blZSUpKysLJ08eVJpaWkKCQkp8PWbN29Wdna2Lr30UpflGRkZKlu2bInXDwCApyOkAwAAp23btik2NlZ79+5V9+7d9fDDD+u5555TdHS01q5dq/vvv1+ZmZmFhvSUlBT5+vpqw4YN8vX1dXkuLCzsQrwFAAA8GiEdAABIklasWKHNmzfr0Ucf1YYNG+RwODRlyhT5+ORMYbNgwQKX9QMCApSdne2yrEmTJsrOztaRI0d03XXXXbDaAQC4WBDSAQDwQhkZGTp8+LCys7P1999/a+nSpZo4caK6d++uvn37asuWLbLb7ZoxY4Z69OihdevW6Y033nDZRs2aNZWSkqJvv/1WjRo1UkhIiC699FLddddd6tu3r6ZMmaImTZro6NGj+vbbb3XFFVfohhtuKKV3DACAZ2B2dwAAvNDSpUtVqVIl1axZU126dNHKlSv1yiuv6NNPP5Wvr68aNWqkqVOnatKkSWrYsKHmzZuniRMnumyjRYsWGjhwoG6//XaVL19ekydPliTNmjVLffv21ciRI3XZZZepV69e+uWXX1S9evXSeKsAAHgUZncHAAAAAMAiGEkHAAAAAMAiCOkAAAAAAFgEIR0AAAAAAIsgpAMAAAAAYBGEdAAAAAAALIKQDgAAAACARRDSAQAAAACwCEI6AAAAAAAWQUgHAAAAAMAiCOkAAAAAAFgEIR0AAAAAAIv4fzVggCEyj5sCAAAAAElFTkSuQmCC\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"# Assuming 'inacurate_sizes_over_time' is your DataFrame\n", | |
"\n", | |
"# Group data by date and client, calculate the mean actualSizesEstimatedWastedLoadedPixels\n", | |
"average_wasted_pixels = inacurate_sizes_over_time.groupby(['date', 'client'])['actualSizesEstimatedWastedLoadedPixels'].mean().unstack()\n", | |
"\n", | |
"# Create the plot\n", | |
"plt.figure(figsize=(12, 6))\n", | |
"\n", | |
"# Plot lines for each client type\n", | |
"for client in average_wasted_pixels.columns:\n", | |
" plt.plot(average_wasted_pixels.index, average_wasted_pixels[client], label=client)\n", | |
"\n", | |
"plt.title('Average actualSizesEstimatedWastedLoadedPixels Over Time for WordPress Sites by Client')\n", | |
"plt.xlabel('Date')\n", | |
"plt.ylabel('Average actualSizesEstimatedWastedLoadedPixels')\n", | |
"plt.grid(True)\n", | |
"plt.legend()\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"id": "e6nmZ-Bpba9q", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 564 | |
}, | |
"outputId": "9ec979cc-9378-45e3-d56e-6f867762eb07" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1200x600 with 1 Axes>" | |
], | |
"image/png": "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YiQiIiIiIiKiEqZzgmDRokViQiA1NRUuLi5o164dVqxYgfbt28PDw6Mk4yQiIiIiIiKiEqRzgmDFihVo164dlixZgvbt26NGjRolGRcRERERERERlSKdEwTR0dElGQcRERERERERlSGdEgShoaE677B+/fovHQwRERERERERlQ2dEgQ+Pj6QSCQQBAEAIJFICq3LVQyIiIiIiIiIKh6pLpXCwsJw//59hIWFYc+ePfDw8MCaNWtw+fJlXL58GWvWrEH16tWxe/fuko6XiIiIiIiIiEqATj0I3NzcxL8HDhyIVatWoVu3bmJZ/fr1UaVKFXzxxRfo06dPsQdJRERERERERCVLpx4E+V27dq3AJQ09PDxw48aNYgmKiIiIiIiIiEqX3gkCLy8vLFiwADk5OWJZTk4OFixYAC8vr2INjoiIiIiIiIhKh87LHKqtW7cOPXv2hKurq7hiQWhoKCQSCQ4cOFDsARIRERERERFRydM7QdC0aVPcv38fW7duxa1btwAAb7/9NoYOHQozM7NiD5CIiIiIiIiISp7eCQIAMDMzw7hx44o7FiIiIiIiIiIqI3rPQQAAW7Zsga+vL5ydnREREQEAWL58Of744w+99nPixAn07NkTzs7OkEgk2LdvX6F133vvPUgkEqxYsUKjPDExEcOGDYOlpSWsra0xZswYpKWladQJDQ1F69atYWxsjCpVqmDRokVa+//999/h6ekJY2NjeHt74+DBgxrbBUHA7Nmz4eTkBBMTE3Ts2BF3797V6/ESERERERERlVd6JwjWrl2LKVOmoGvXrkhKSoJSqQQA2NjYaF28v0h6ejoaNGiA77//vsh6e/fuxdmzZ+Hs7Ky1bdiwYbh+/ToCAwPx559/4sSJExq9G1JSUtC5c2e4ubnh0qVLWLx4Mb788kts2LBBrHPmzBkMGTIEY8aMweXLl9GnTx/06dMH//77r1hn0aJFWLVqFdatW4dz587BzMwM/v7+yMrK0usxExEREREREZVHeicIVq9ejR9++AEzZ86EgcGzEQpNmjTBtWvX9NpX165dMX/+fPTt27fQOlFRUfjwww+xdetWyOVyjW03b97EoUOH8OOPP6JZs2bw9fXF6tWrsX37dkRHRwMAtm7dipycHPz888+oW7cuBg8ejI8++gjLli0T97Ny5Up06dIF06dPh5eXF7766is0atQI3333HYC83gMrVqzArFmz0Lt3b9SvXx+//PILoqOji+z1QERERERERFRR6D0HQVhYGBo2bKhVbmRkhPT09GIJSk2lUmH48OGYPn066tatq7U9ODgY1tbWaNKkiVjWsWNHSKVSnDt3Dn379kVwcDDatGkDQ0NDsY6/vz8WLlyIpKQk2NjYIDg4GFOmTNHYt7+/v3jxHxYWhtjYWHTs2FHcbmVlhWbNmiE4OBiDBw8uMP7s7GxkZ2eLt1NSUgAACoUCCoVC/yeklKhjK88x0jNsr/KF7VGxsL3KN7ZPxcG2Kt/YPhUH26piqSjtpU98eicIPDw8cOXKFbi5uWmUHzp0CF5eXvrurkgLFy6EgYEBPvroowK3x8bGwsHBQaPMwMAAtra2iI2NFet4eHho1KlcubK4zcbGBrGxsWJZ/jr595H/fgXVKciCBQswd+5crfKAgACYmpoWer/yIjAwsKxDID2wvcoXtkfFwvYq39g+FQfbqnxj+1QcbKuKpby3V0ZGhs519U4QTJkyBRMmTEBWVhYEQcD58+fx22+/YcGCBfjxxx/13V2hLl26hJUrVyIkJAQSiaTY9luaPvvsM42eCSkpKahSpQo6d+4MS0vLMoysaAqFAoGBgejUqZPWsA4qf9he5Qvbo2Jhe5VvbJ+Kg21VvrF9Kg62VcVSUdpL3ZNdF3onCN59912YmJhg1qxZyMjIwNChQ+Hs7IyVK1cW2tX+ZZw8eRJxcXGoWrWqWKZUKjF16lSsWLEC4eHhcHR0RFxcnMb9cnNzkZiYCEdHRwCAo6MjHj16pFFHfftFdfJvV5c5OTlp1PHx8Sn0MRgZGcHIyEirXC6Xl+sXkFpFiZPysL3KF7ZHxcL2Kt/YPhUH26p8Y/tUHGyriqW8t5c+sb3UMofDhg3D3bt3kZaWhtjYWERGRmLMmDEvs6tCDR8+HKGhobhy5Yr4z9nZGdOnT8fhw4cBAC1atEBycjIuXbok3u/YsWNQqVRo1qyZWOfEiRMa4y4CAwNRu3Zt2NjYiHWOHj2qcfzAwEC0aNECQN6wCkdHR406KSkpOHfunFiHiIiIiIiIqCLTO0HQoUMHJCcnAwBMTU3FOQBSUlLQoUMHvfaVlpYmXvwDeZMBXrlyBQ8ePICdnR3q1aun8U8ul8PR0RG1a9cGAHh5eaFLly4YO3Yszp8/j9OnT2PixIkYPHiwuCTi0KFDYWhoiDFjxuD69evYsWMHVq5cqdH1f9KkSTh06BCWLl2KW7du4csvv8TFixcxceJEAIBEIsHkyZMxf/587N+/H9euXcOIESPg7OyMPn366PsUEhEREREREZU7eg8xCAoKQk5OjlZ5VlYWTp48qde+Ll68iPbt24u31RftI0eOxKZNm3Tax9atWzFx4kT4+flBKpWif//+WLVqlbjdysoKAQEBmDBhAho3bgx7e3vMnj0b48aNE+u0bNkS27Ztw6xZs/D555+jZs2a2LdvH+rVqyfWmTFjBtLT0zFu3DgkJyfD19cXhw4dgrGxsV6PmYiIiIiIiKg80jlBEBoaKv5948YNjdn7lUolDh06BBcXF70O3q5dOwiCoHP98PBwrTJbW1ts27atyPvVr1//hcmLgQMHYuDAgYVul0gkmDdvHubNm6dTrEREREREREQVic4JAh8fH0gkEkgkkgKHEpiYmGD16tXFGhwRERERERERlQ6dEwRhYWEQBAHVqlXD+fPnUalSJXGboaEhHBwcIJPJSiRIIiIiIiIiIipZOicI3NzcAAAqlarEgiEiIiIiIiKisqH3JIVqN27cwIMHD7QmLOzVq9crB0VEREREREREpUvvBMH9+/fRt29fXLt2DRKJRJxkUCKRAMibsJCIiIiIiIiIKhapvneYNGkSPDw8EBcXB1NTU1y/fh0nTpxAkyZNEBQUVAIhEhEREREREVFJ07sHQXBwMI4dOwZ7e3tIpVJIpVL4+vpiwYIF+Oijj3D58uWSiJOIiIiIiIiISpDePQiUSiUsLCwAAPb29oiOjgaQN4nh7du3izc6IiIiIiIiIioVevcgqFevHq5evQoPDw80a9YMixYtgqGhITZs2IBq1aqVRIxEREREREREVML0ThDMmjUL6enpAIB58+ahR48eaN26Nezs7LBjx45iD5CIiIiIiIiISp7eCQJ/f3/x7xo1auDWrVtITEyEjY2NuJIBEREREREREVUseicICmJra1scuyEiIiIiIiKiMqJ3giArKwurV6/G8ePHERcXB5VKpbE9JCSk2IIjIiIiIiIiotKhd4JgzJgxCAgIwIABA9C0aVMOKyAiIiIiIiJ6DeidIPjzzz9x8OBBtGrVqiTiISIiIiIiIqIyINX3Di4uLrCwsCiJWIiIiIiIiIiojOidIFi6dCk++eQTRERElEQ8RERERERERFQG9B5i0KRJE2RlZaFatWowNTWFXC7X2J6YmFhswRERERERERFR6dA7QTBkyBBERUXhm2++QeXKlTlJIREREREREdFrQO8EwZkzZxAcHIwGDRqURDxEREREREREVAb0noPA09MTmZmZJRELEREREREREZURvRME3377LaZOnYqgoCAkJCQgJSVF4x8RERERERERVTx6DzHo0qULAMDPz0+jXBAESCQSKJXK4omMiIiIiIiIiEqN3gmC48ePl0QcRERERERERFSG9E4QtG3btiTiICIiIiIiIqIypFOCIDQ0FPXq1YNUKkVoaGiRdevXr18sgRERERERERFR6dEpQeDj44PY2Fg4ODjAx8cHEokEgiBo1eMcBEREREREREQVk04JgrCwMFSqVEn8m4iIiIiIiIheLzolCNzc3MS/IyIi0LJlSxgYaN41NzcXZ86c0ahLRERERERERBWDVN87tG/fHomJiVrlT548Qfv27YslKCIiIiIiIiIqXXonCARBgEQi0SpPSEiAmZlZsQRFRERERERERKVL52UO+/XrByBvIsJRo0bByMhI3KZUKhEaGoqWLVsWf4REREREREREVOJ0ThBYWVkByOtBYGFhARMTE3GboaEhmjdvjrFjxxZ/hERERERERERU4nROEGzcuBEA4O7ujmnTpnE4AREREREREdFrRO85CGbMmKExB0FERARWrFiBgICAYg2MiIiIiIiIiEqP3gmC3r1745dffgEAJCcno2nTpli6dCl69+6NtWvXFnuARERERERERFTy9E4QhISEoHXr1gCAXbt2wdHREREREfjll1+watWqYg+QiIiIiIiIiEqe3gmCjIwMWFhYAAACAgLQr18/SKVSNG/eHBEREcUeIBERERERERGVPL0TBDVq1MC+ffvw8OFDHD58GJ07dwYAxMXFwdLSstgDJCIiIiIiIqKSp3eCYPbs2Zg2bRrc3d3RrFkztGjRAkBeb4KGDRsWe4BEREREREREVPJ0XuZQbcCAAfD19UVMTAwaNGgglvv5+aFv377FGhwRERERERERlQ69EwQA4OjoCEdHR42yt956C/Hx8cUSFBERERERERGVLp2HGJiammokALp3746YmBjxdlxcHJycnIo3OiIiIiIiIiIqFTonCLKysiAIgnj7xIkTyMzM1KiTfzsRERERERER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LzQ0VElJSa5thccUPkfh44obU5ypU6dq8uTJRbYvXbpUgYGBf/ieK9u5d3DAu1WXfvnmpKn+qdVqkLxS4ad3uLbn2nyVGHyZDoV11dHabWUcNaSNx6SNX1VKndWlH1UF/fJu9Mc66JV3oz/WQa+sxdv7lZGRUeqxlggIsrOzNXz4cBlj9Pe//72yyym1J5980u3OhNTUVDVs2FC9e/d2hRzeKDs7WwkJCbruuuvk6+tb2eXgD1SLfuWclW3nUuedAru+kc3hTEGNbDJNrpKjzTCZVgMV5V9bUX9wqvJWLfpRhdAv70Z/rINeeTf6Yx30ylqs0q/8O9lLw+sDgvxwYP/+/fr222/dPljXq1dPR48edRufk5Oj5ORk1atXzzXmyJEjbmPyf/+jMYX352+Ljo52G3PppZeWWLu/v7/8/f2LbPf19fXqP0D5rFInnKpcvxwOaf9PzmUJf/tcykwp2BfVVmo3XLa2f5atTkzlzrZagirXjyqOfnk3+mMd9Mq70R/roFfW4u398qQ2b/z/apf8cGDnzp365ptvFB4e7ra/S5cuOnXqlNauLVjT/Ntvv5XD4VCnTp1cY5YvX+723EVCQoJatmyp0NBQ15hly5a5nTshIUFdunSRJMXGxqpevXpuY1JTU/XLL7+4xgAoI0e2SAkTpVfbSO8OlNa/7wwH6jSQuj0kjVkljflRuvIBqU5MZVcLAAAAVBmVegdBenq6du3a5fp979692rBhg8LCwhQdHa0///nPWrdunb744gvl5ua6nvcPCwuTn5+f4uPj1bdvX919992aM2eOsrOzdd9992nEiBGKiXF+cLjllls0efJkjRo1So8//rg2b96s1157TTNnznS97rhx49SjRw9Nnz5dAwYM0EcffaQ1a9a4lkK02Wx68MEH9dxzzykuLk6xsbGaMGGCYmJiNGTIkIq7YEBVlXLYufrAxgXSkYLlReUfLF0y2LkKQaOukt2rM00AAADA0io1IFizZo169uzp+j3/ef077rhDkyZN0ueffy5JRW7j/+6773T11VdLkubPn6/77rtP1157rex2u4YOHapZs2a5xgYHB2vp0qUaO3asOnbsqLp162rixImuJQ4lqWvXrvrggw/0zDPP6KmnnlJcXJwWL16sNm3auMY89thjOn36tO655x6dOnVK3bp105IlS1SzZs2yvixA9XA2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CggIUGhoqIYMGVLqa+DNrN6f77//vsg/R/lfq1ev9vyCeDmr90uSduzYocGDB6tu3bqqU6eOunXrpu+++86zC2EBVaFX69at03XXXaeQkBCFh4frnnvuUXp6umcX4kIZWEafPn3MvHnzzObNm82GDRtM//79TaNGjUx6erprzOjRo03Dhg3NsmXLzJo1a0znzp1N165dXfvnzp1rHnjgAfP999+b3bt3m/fff98EBASY2bNnF3m9kydPmqZNm5revXub9u3b/2F9L774ogkODjaLFy82v/76qxk0aJCJjY01Z86ccY2ZOHGimTFjhhk/frwJDg6+qOvhzazeq6+++srceeed5uuvvza7d+82n332mYmMjDQPP/zwxV+cSmL1nhhjzIwZM8yqVavMvn37zE8//WS6dOliunTpcnEXxgtVhV7le+CBB0y/fv2MJLN+/foLuh7epir0p3HjxmbKlCkmMTHR9VW4/qqiKvRq4cKFJjQ01Pz9738327dvN1u2bDEff/zxxV0YL2H1/mRmZrr9M5SYmGj+7//+z8TGxhqHw3HxF8jLWL1fxhgTFxdn+vfvb3799VezY8cOc++995rAwECTmJh4cRfHy1i9V4cPHzahoaFm9OjRZtu2beZ///uf6dq1qxk6dOjFX5xSICCwsKNHjxpJ5ocffjDGGHPq1Cnj6+trPvnkE9eYrVu3Gklm1apVJZ7n3nvvNT179iyy/aabbjLPPPOMefbZZ//wD7vD4TD16tUzL7/8smvbqVOnjL+/v/nwww+LjJ83b16VDgjOZeVe5Zs2bZqJjY0977mtpCr05LPPPjM2m81kZWWd9/xWZ9Veffnll6ZVq1Zmy5YtVSogOJcV+9O4cWMzc+bMUr7DqsNqvcrOzjb169c3b7/9tidv07Ks1p9zZWVlmYiICDNlypTznruqsFq/jh07ZiSZ5cuXu8akpqYaSSYhIaFU79mqrNarN99800RGRprc3FzXmI0bNxpJZufOnaV6zxeDRwwsLCUlRZIUFhYmSVq7dq2ys7PVq1cv15hWrVqpUaNGWrVq1XnPk3+OfPPmzdOePXv07LPPlqqWvXv3Kikpye21g4OD1alTp/O+dnVRFXpV3GtbmdV7kpycrPnz56tr167y9fUt1etYlRV7deTIEd199916//33FRgYWKpzW5UV+yNJL774osLDw9Wh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\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"# Assuming 'inacurate_sizes_over_time' is your DataFrame\n", | |
"\n", | |
"# Group data by date and client, calculate the mean relativeSizesEstimatedWastedLoadedPixels\n", | |
"average_relative_wasted_pixels = inacurate_sizes_over_time.groupby(['date', 'client'])['relativeSizesEstimatedWastedLoadedPixels'].mean().unstack()\n", | |
"\n", | |
"# Create the plot\n", | |
"plt.figure(figsize=(12, 6))\n", | |
"\n", | |
"# Plot lines for each client type\n", | |
"for client in average_relative_wasted_pixels.columns:\n", | |
" plt.plot(average_relative_wasted_pixels.index, average_relative_wasted_pixels[client], label=client)\n", | |
"\n", | |
"plt.title('Average relativeSizesEstimatedWastedLoadedPixels Over Time for WordPress Sites by Client')\n", | |
"plt.xlabel('Date')\n", | |
"plt.ylabel('Average relativeSizesEstimatedWastedLoadedPixels')\n", | |
"plt.grid(True)\n", | |
"plt.legend()\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"id": "Mn2qSBUFbn1t", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 564 | |
}, | |
"outputId": "c0806121-16f5-4f5a-9b55-329adc7f5d88" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1200x600 with 1 Axes>" | |
], | |
"image/png": "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cjm7qhsy1pXhYZ0UHqwrw8b6KTxYV4aN9VO4sL4Kj8JSV+oe3brQKUkvVaqUuOObN28iNTUVNWrUEBP3983LywsAUKFCBTx58gRTpkzJMUlXKBRQKBRa5XK53KArMbPCFKuxY10ZHtZJ4cG6Mmysn8KDdWXYWD+FC+ur8DD0upISm84Tx124cAEtWrTAkydPIAgCbG1tsXHjRgQEBOQpSH1RqVQaY86JiIiIiIiICiudk/Tx48fDy8sLmzdvhoWFBb777jsMGzYMt27dyvPB4+Pjcfv2bfF2REQELly4ACcnJ5QsWRJBQUGIiorC2rVrAQALFy5EyZIl4efnByBjnfWffvoJI0aMyHMMRERERERERIZC5yT97Nmz2Lt3L6pWrQoAWLlyJZycnBAXF5fnsd1nzpxB48aNxdvqseO9e/fG6tWrER0djcjISPF+lUqFoKAgREREwMzMDD4+Ppg5cyYGDhyYp+MTERERERERGRKdk/SXL1+iRIkS4m0HBwdYW1vjxYsXeU7SGzVqhNwml1+9erXG7eHDh2P48OF5OhYRERERERGRodM5SQeAq1ev4vHjx+JtQRBw7do1vH79Wix7n+ukExEREREREX1IJCXpTZo00Wr5btWqlV7WSSciIiIiIiIydjon6YawPjoRERERERHRh0znJF29VjoRERERERER5Q+dkvRLly7pvEOOSSciIiIiIiLKG52S9MqVK2uMO88Nx6QTERERERER5Y2JLhtFRETg7t27iIiIwObNm+Hl5YVFixbh/PnzOH/+PBYtWgQfHx9s3rw5v+MlIiIiIiIi+mDp1JKeeTx6586d8fPPP6NFixZiWcWKFeHh4YFvv/0W7dq103uQRERERERERMZAp5b0zC5fvgwvLy+tci8vL1y9elUvQREREREREREZI8lJetmyZTFjxgykpqaKZampqZgxYwbKli2r1+CIiIiIiIiIjInOS7CpLVmyBK1bt0aJEiXEmdwvXboEmUyGHTt26D1AIiIiIiIiImMhOUmvUaMG7t69i5CQEFy/fh0A0LVrV/To0QPW1tZ6D5CIiIiIiIjIWEhO0gHA2toaX331lb5jISIiIiIiIjJqksekA8C6detQr149uLu74/79+wCAuXPnYtu2bXoNjoiIiIiIiMiYSE7SFy9ejMDAQDRv3hyvXr2CUqkEADg6OmLevHn6jo+IiIiIiIjIaEhO0hcsWIBly5Zh4sSJMDP7r7d89erVcfnyZb0GR0RERERERGRMJCfpERERqFKlila5QqFAQkKCXoIiIiIiIiIiMkaSk3QvLy9cuHBBq3z37t1cJ52IiIiIiIjoHUie3T0wMBBDhw5FcnIyBEHAqVOn8Pvvv2PGjBlYvnx5fsRIREREREREZBQkJ+n9+/eHpaUlvvnmGyQmJqJHjx5wd3fH/Pnz0a1bt/yIkYiIiIiIiMgo5Gmd9J49e6Jnz55ITExEfHw8XF1d9R0XERERERERkdHJU5KuZmVlBSsrK33FQkRERERERGTUdErSq1SpAplMptMOz507904BERERERERERkrnZL0du3aiX8nJydj0aJFKFeuHGrXrg0AOHHiBK5cuYIhQ4bkS5BERERERERExkCnJH3y5Mni3/3798eIESPw3XffaW3z4MED/UZHREREREREZEQkr5P+xx9/oFevXlrln3/+OTZv3qyXoIiIiIiIiIiMkeQk3dLSEuHh4Vrl4eHhsLCw0EtQRERERERERMZI8uzuo0aNwuDBg3Hu3DnUqFEDAHDy5EmsXLkS3377rd4DJCIiIiIiIjIWkpP0CRMmwNvbG/Pnz8dvv/0GAChbtixWrVqFLl266D1AIiIiIiIiImORp3XSu3TpwoSciIiIiIiISM8kj0knIiIiIiIiovwhuSVdqVRi7ty52LhxIyIjI5Gamqpx/8uXL/UWHBEREREREZExkdySHhwcjDlz5qBr166IjY1FYGAgOnToABMTE0yZMiUfQiQiIiIiIiIyDpKT9JCQECxbtgxff/01zMzM0L17dyxfvhyTJk3CiRMn8iNGIiIiIiIiIqMgOUl//PgxKlSoAACwsbFBbGwsAKBVq1bYtWuXfqMjIiIiIiIiMiKSk/QSJUogOjoaAODj44O9e/cCAE6fPg2FQqHf6IiIiIiIiIiMiOQkvX379ti/fz8AYPjw4fj2229RunRp9OrVC/369dN7gERERERERETGQvLs7j/88IP4d9euXVGyZEkcP34cpUuXRuvWrfUaHBEREREREZExkZykZ1W7dm3Url1bH7EQERERERERGbU8Jel37tzBvHnzcO3aNQDAxx9/jJEjR8Lb21uvwREREREREREZE8lj0vfs2YNy5crh1KlTqFixIipWrIgTJ06gXLlyCAsLy48YiYiIiIiIiIyC5Jb0CRMmYPTo0Rpj09Xl48ePR9OmTfUWHBEREREREZExkdySfu3aNXz55Zda5f369cPVq1f1EhQRERERERGRMZKcpLu4uODChQta5RcuXICrq6s+YiIiIiIiIiIySpK7uw8YMABfffUV7t69izp16gAAwsPDMXPmTAQGBuo9QCIiIiIiIiJjITlJ//bbb2Fra4vZs2cjKCgIAODu7o4pU6Zg5MiReg+QiIiIiIiIyFhI7u4uk8kwevRoPHz4ELGxsYiNjcXDhw8xYMAAHDt2LD9iJCIiIiIiIjIKeVonXc3W1lb8+9atW6hfvz6USuU7B0VERERERERkjCS3pBMRERERERFR/mCSTkRERERERGQgmKQTERERERERGQidx6Rv37491/sjIiLeORgiIiIiIiIiY6Zzkt6uXbu3biOTyd4lFiIiIiIiIiKjpnOSrlKp8jMOIiIiIiIiIqNXoGPSDx8+jNatW8Pd3R0ymQxbt27NdfstW7agadOmcHFxgZ2dHWrXro09e/a8n2CJiIiIiIiI8plOLelvG4+eWZs2bXTeNiEhAZUqVUK/fv3QoUOHt25/+PBhNG3aFNOnT4eDgwNWrVqF1q1b4+TJk6hSpYrOxyUiIiIiIiIyRDol6VnHo8tkMgiCoHFbTalU6nzw5s2bo3nz5jpvP2/ePI3b06dPx7Zt27Bjxw4m6URERERERFTo6ZSkZx6Pvm/fPowfPx7Tp09H7dq1AQDHjx/HN998g+nTp+dPlLnE9fr1azg5OeW4TUpKClJSUsTbcXFxAIC0tDSkpaXle4zvQh2focdJrCtDxDopPFhXho31U3iwrgwb66dwYX0VHoWlrqTEJxMyN4nroHz58liyZAnq1aunUX7kyBF89dVXuHbtmpTd/ReITIY///xTp1nk1WbNmoUffvgB169fh6ura7bbTJkyBcHBwVrl69evh5WVVZ5iJSIiIiIiItJVYmIievTogdjYWNjZ2eW6rc6zu6vduXMHDg4OWuX29va4d++e1N3l2fr16xEcHIxt27blmKADQFBQEAIDA8XbcXFx8PDwQLNmzd765BS0tLQ0hIWFoWnTppDL5QUdDuWCdWV4WCeFB+vKsLF+Cg/WlWFj/RQurK/Co7DUlbpHty4kJ+mffPIJAgMDsW7dOhQtWhQA8OTJE4wdOxY1atSQurs82bBhA/r3748//vgD/v7+uW6rUCigUCi0yuVyuUFXYmaFKVZjx7oyPKyTwoN1ZdhYP4UH68qwsX4KF9ZX4WHodSUlNslLsK1cuRLR0dEoWbIkfH194evri5IlSyIqKgorVqyQujvJfv/9d/Tt2xe///47WrZsme/HIyIiIiIiInpfJLek+/r64tKlSwgLC8P169cBAGXLloW/v7/GLO+6iI+Px+3bt8XbERERuHDhApycnFCyZEkEBQUhKioKa9euBZDRxb13796YP38+atasicePHwMALC0tYW9vL/VUiIiIiIiIiAyK5CQdyJjkrVmzZmjQoAEUCoXk5FztzJkzaNy4sXhbPXa8d+/eWL16NaKjoxEZGSnev3TpUqSnp2Po0KEYOnSoWK7enoiIiIiIiKgwk5ykq1QqfP/991iyZAmePHmCmzdvwtvbG99++y08PT3x5Zdf6ryvRo0aIbfJ5bMm3ocOHZIaLhEREREREVGhIXlM+rRp07B69WrMmjUL5ubmYnn58uWxfPlyvQZHREREREREZEwkJ+lr167F0qVL0bNnT5iamorllSpVEseoExEREREREZF0kpP0qKgo+Pr6apWrVCqkpaXpJSgiIiIiIiIiYyQ5SS9XrhyOHDmiVb5p0yZUqVJFL0ERERERERERGSPJE8dNmjQJvXv3RlRUFFQqFbZs2YIbN25g7dq12LlzZ37ESERERERERGQUJLekt23bFjt27MC+fftgbW2NSZMm4dq1a9ixYweaNm2aHzESERERERERGYU8rZNev359hIWF6TsWIiIiIiIiIqMmuSXd29sbL1680CqPiYmBt7e3XoIiIiIiIiIiMkaSk/R79+5BqVRqlaekpCAqKkovQREREREREREZI527u2/fvl38e8+ePbC3txdvK5VK7N+/H56ennoNjoiIiIiIiMiY6Jykt2vXDgAgk8nQu3dvjfvkcjk8PT0xe/ZsvQZHREREREREZEx0TtJVKhUAwMvLC6dPn0aRIkXyLSgiIiIiIiIiYyR5dveIiAitspiYGDg4OOgjHiIiIiIiIiKjJXniuJkzZyI0NFS83blzZzg5OaF48eK4ePGiXoMjIiIiIiIiMiaSk/QlS5bAw8MDABAWFoZ9+/Zh9+7daN68OcaOHav3AImIiIiIiIiMheTu7o8fPxaT9J07d6JLly5o1qwZPD09UbNmTb0HSERERERERGQsJLekOzo64sGDBwCA3bt3w9/fHwAgCEK266cTERERERERkW4kt6R36NABPXr0QOnSpfHixQs0b94cAHD+/Hn4+vrqPUAiIiIiIiIiYyE5SZ87dy48PT3x4MEDzJo1CzY2NgCA6OhoDBkyRO8BEhERERERERkLyUm6XC7HmDFjtMpHjx6tl4CIiIiIiIiIjJXkJF3t6tWriIyMRGpqqkZ5mzZt3jkoIiIiIiIiImMkOUm/e/cu2rdvj8uXL0Mmk0EQBACATCYDAE4eR0RERERERJRHkmd3HzlyJLy8vPD06VNYWVnhypUrOHz4MKpXr45Dhw7lQ4hERERERERExkFyS/rx48dx4MABFClSBCYmJjAxMUG9evUwY8YMjBgxAufPn8+POImIiIiIiIg+eJJb0pVKJWxtbQEARYoUwaNHjwAApUqVwo0bN/QbHREREREREZERkdySXr58eVy8eBFeXl6oWbMmZs2aBXNzcyxduhTe3t75ESMRERERERGRUZCcpH/zzTdISEgAAEydOhWtWrVC/fr14ezsjNDQUL0HSERERERERGQsdE7SDx48iLp16yIgIEAs8/X1xfXr1/Hy5Us4OjqKM7wTERERERERkXQ6J+lNmjSBhYUFatWqhcaNG6Nx48aoVasWzMzM4OTklJ8xEhERERERERkFnSeOi4iIwMKFC1GyZEmsWLECDRo0gIODAwICAvDDDz/g5MmTUKlU+RkrERERERER0QdN5yS9VKlS6Nu3L1avXo179+7h9u3b+Pnnn1G0aFEsXrwYderUYYs6ERERERER0TuQPHGcmre3N0xNTSGTySCTybB161akpqbqMzYiIiIiIiIioyIpSY+MjMShQ4dw8OBBHDp0CM+fP0edOnVQv3597Ny5EzVr1syvOImIiIiIiIg+eDon6d7e3nj16hXq1q2LBg0aYODAgahevTrMzPLcGE9EREREREREmeg8Jj0pKSnjASYmMDMzg1wuh6mpab4FRkRERERERGRsdE7So6Ojcfz4cbRo0QInT55Ey5Yt4ejoiFatWuGnn37C6dOnObs7ERERERER0TuQ1Ffdz88Pfn5+GDRoEADg2rVr4vj0adOmAQBiYmL0HiQRERERERGRMdC5JT2rJ0+e4NKlS7h06RIuXryIuLg4pKSk6DM2IiIiIiIiIqOic0v606dPcejQIXF295s3b0Iul6NGjRro1q0bGjdujNq1a+dnrEREREREREQfNJ2TdDc3N8jlclSvXh0dO3ZE48aNUadOHVhaWuZnfERERERERERGQ+ck/e+//0a9evVgbW2dn/EQERERERERGS2dk/SAgID8jIOIiIiIiIjI6OmUpFepUgUymUynHZ47d+6dAiIiIiIiIiIyVjol6e3atRP/Tk5OxqJFi1CuXDlxorgTJ07gypUrGDJkSL4ESURERERERGQMdErSJ0+eLP7dv39/jBgxAt99953WNg8ePNBvdERERERERERGRPI66X/88Qd69eqlVf75559j8+bNegmKiIiIiIiIyBhJTtItLS0RHh6uVR4eHg4LCwu9BEVERERERERkjHSe3V1t1KhRGDx4MM6dO4caNWoAAE6ePImVK1fi22+/1XuARERERERERMZCcpI+YcIEeHt7Y/78+fjtt98AAGXLlsWqVavQpUsXvQdIREREREREZCwkJ+kA0KVLFybkRERERERERHomeUw6AMTExGD58uX43//+h5cvXwLIWB89KipKr8ERERERERERGRPJLemXLl2Cv78/7O3tce/ePfTv3x9OTk7YsmULIiMjsXbt2vyIk4iIiIiIiOiDJ7klPTAwEH369MGtW7c0ZnNv0aIFDh8+rNfgiIiIiIiIiIyJ5CT99OnTGDhwoFZ58eLF8fjxY70ERURERERERGSMJCfpCoUCcXFxWuU3b96Ei4uLpH0dPnwYrVu3hru7O2QyGbZu3Zrr9tHR0ejRowfKlCkDExMTjBo1StLxiIiIiIiIiAyZ5CS9TZs2mDp1KtLS0gAAMpkMkZGRGD9+PDp27ChpXwkJCahUqRIWLlyo0/YpKSlwcXHBN998g0qVKkkNnYiIiIiIiMigSZ44bvbs2ejUqRNcXV2RlJSEhg0b4vHjx6hduza+//57Sftq3rw5mjdvrvP2np6emD9/PgBg5cqVOj0mJSUFKSkp4m11L4C0tDTxhwZDpY7P0OMk1pUhYp0UHqwrw8b6KTxYV4aN9VO4sL4Kj8JSV1LikwmCIOTlIOHh4bh48SLi4+NRtWpV+Pv752U3/wUik+HPP/9Eu3btdNq+UaNGqFy5MubNm5frdlOmTEFwcLBW+fr162FlZZWHSImIiIiIiIh0l5iYiB49eiA2NhZ2dna5biu5JX3t2rXo2rUr6tati7p164rlqamp2LBhA3r16iU94nwUFBSEwMBA8XZcXBw8PDzQrFmztz45BS0tLQ1hYWFo2rQp5HJ5QYdDuWBdGR7WSeHBujJsrJ/Cg3Vl2Fg/hQvrq/AoLHWV3bxuOZGcpPft2xefffYZXF1dNcpfv36Nvn37GlySrlAooFAotMrlcrlBV2JmhSlWY8e6Mjysk8KDdWXYWD+FB+vKsLF+ChfWV+Fh6HUlJTbJE8cJggCZTKZV/vDhQ9jb20vdHRERERERERG9oXNLepUqVSCTySCTydCkSROYmf33UKVSiYiICHz22Wf5EiQRERERERGRMdA5SVdP6HbhwgUEBATAxsZGvM/c3Byenp6Sl2CLj4/H7du3xdsRERG4cOECnJycULJkSQQFBSEqKgpr164Vt7lw4YL42GfPnuHChQswNzdHuXLlJB2biIiIiIiIyNDonKRPnjwZQMYyaF27doWFhcU7H/zMmTNo3LixeFs9wVvv3r2xevVqREdHIzIyUuMxVapUEf8+e/Ys1q9fj1KlSuHevXvvHA8RERERERFRQZI8cVzv3r31dvBGjRohtxXgVq9erVWWxxXjiIiIiIiIiAye5CRdqVRi7ty52LhxIyIjI5Gamqpx/8uXL/UWHBEREREREZExkTy7e3BwMObMmYOuXbsiNjYWgYGB6NChA0xMTDBlypR8CJGIiIiIiIjIOEhO0kNCQrBs2TJ8/fXXMDMzQ/fu3bF8+XJMmjQJJ06cyI8YiYiIiIiIiIyC5CT98ePHqFChAgDAxsYGsbGxAIBWrVph165d+o2OiIiIiIiIyIhITtJLlCiB6OhoAICPjw/27t0LADh9+jQUCoV+oyMiIiIiIiIyIpKT9Pbt22P//v0AgOHDh+Pbb79F6dKl0atXL/Tr10/vARIREREREREZC8mzu//www/i3127dkXJkiVx/PhxlC5dGq1bt9ZrcERERERERETGRHKSnlXt2rVRu3ZtfcRCREREREREZNTylKQ/evQIR48exdOnT6FSqTTuGzFihF4CIyIiIiIiIjI2kpP01atXY+DAgTA3N4ezszNkMpl4n0wmY5JORERERERElEeSk/Rvv/0WkyZNQlBQEExMJM87R0REREREREQ5kJxlJyYmolu3bkzQiYiIiIiIiPRMcqb95Zdf4o8//siPWIiIiIiIiIiMmuTu7jNmzECrVq2we/duVKhQAXK5XOP+OXPm6C04IiIiIiIiImOSpyR9z549+OijjwBAa+I4IiIiIiIiIsobyUn67NmzsXLlSvTp0ycfwiEiIiIiIiIyXpLHpCsUCtStWzc/YiEiIiIiIiIyapKT9JEjR2LBggX5EQsRERERERGRUZPc3f3UqVM4cOAAdu7ciY8//lhr4rgtW7boLTgiIiIiIiIiYyI5SXdwcECHDh3yIxYiIiIiIiIioyY5SV+1alV+xEFERERERERk9CSPSSciIiIiIiKi/KFTS3rVqlWxf/9+ODo6okqVKrmuh37u3Dm9BUdERERERERkTHRK0tu2bQuFQiH+nVuSTkRERERERER5o1OSPnnyZPHvKVOm5FcsREREREREREZN8ph0b29vvHjxQqs8JiYG3t7eegmKiIiIiIiIyBhJTtLv3bsHpVKpVZ6SkoKHDx/qJSgiIiIiIiIiY6TzEmzbt28X/96zZw/s7e3F20qlEvv374eXl5d+oyMiIiIiIiIyIjon6e3atQMAyGQy9O7dW+M+uVwOT09PzJ49W6/BERERERERERkTnZN0lUoFAPDy8sLp06dRpEiRfAuKiIiIiIiIyBjpnKSrRUREaJXFxMTAwcFBH/EQERERERERGS3JE8fNnDkToaGh4u3OnTvDyckJxYsXx8WLF/UaHBEREREREZExkZykL1myBB4eHgCAsLAw7Nu3D7t370bz5s0xduxYvQdIREREREREZCwkd3d//PixmKTv3LkTXbp0QbNmzeDp6YmaNWvqPUAiIiIiIiIiYyG5Jd3R0REPHjwAAOzevRv+/v4AAEEQsl0/nYiIiIiIiIh0I7klvUOHDujRowdKly6NFy9eoHnz5gCA8+fPw9fXV+8BEhERERERERkLyUn63Llz4enpiQcPHmDWrFmwsbEBAERHR2PIkCF6D5CIiIiIiIjIWEhO0uVyOcaMGaNVPnr0aL0ERERERERERGSsdB6TPmTIEMTHx4u3f//9dyQkJIi3Y2Ji0KJFC/1GR0RERERERGREdE7Sf/31VyQmJoq3Bw4ciCdPnoi3U1JSsGfPHv1GR0RERERERGREdE7SBUHI9TYRERERERERvRvJS7ARERERERERUf5gkk5ERERERERkICTN7j5p0iRYWVkBAFJTU/H999/D3t4eADTG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O3YM5cuXz5cgiYiIiIiIiIyBzkn6uHHjkJiYiC1btsDNzQ1//PGHxv3h4eHo3r273gMkIiIiIiIiMhY6J+kmJiaYOnUqpk6dmu39WZN2IiIiIiIiIpJG5zHpmcXExGD58uUICgrCy5cvAQDnzp1DVFSUXoMjIiIiIiIiMiY6t6SrXbp0CU2aNIGDgwPu3buHAQMGwMnJCVu2bEFkZCTWrl2bH3ESERERERERffAkt6QHBgaib9++uHXrFiwsLMTyFi1a4PDhw3oNjoiIiIiIiMiYSE7ST58+jYEDB2qVFy9enOukExEREREREb0DyUm6QqFAXFycVvnNmzfh4uKil6CIiIiIiIiIjJHkJL1NmzaYOnUq0tLSAAAymQyRkZEYP348OnbsqPcAiYiIiIiIiIyF5CR99uzZiI+Ph6urK5KSktCwYUP4+vrC1tYW33//fX7ESERERERERGQUJM/ubm9vj7CwMBw9ehSXLl1CfHw8qlatCn9///yIj4iIiIiIiMhoSE7SHzx4AA8PD9SrVw/16tXLj5iIiIiIiIiIjJLk7u6enp5o2LAhli1bhlevXuVHTERERERERERGSXKSfubMGdSoUQNTp05FsWLF0K5dO2zatAkpKSn5ER8RERERERGR0ZCcpFepUgU//vgjIiMj8ffff8PFxQVfffUVihYtin79+uVHjERERERERERGQXKSriaTydC4cWMsW7YM+/btg5eXF9asWaPP2IiIiIiIiIiMSp6T9IcPH2LWrFmoXLkyatSoARsbGyxcuFCfsREREREREREZFcmzu//6669Yv349wsPD4efnh549e2Lbtm0oVapUfsRHREREREREZDQkJ+nTpk1D9+7d8fPPP6NSpUr5ERMRERERERGRUZKcpEdGRkImk+VHLERERERERERGTack/dKlSyhfvjxMTExw+fLlXLetWLGiXgIjIiIiIiIiMjY6JemVK1fG48eP4erqisqVK0Mmk0EQBPF+9W2ZTAalUplvwRIRERERERF9yHRK0iMiIuDi4iL+TURERERERET6p1OSnnnm9vv376NOnTowM9N8aHp6Oo4dO8ZZ3omIiIiIiIjySPI66Y0bN8bLly+1ymNjY9G4cWO9BEVERERERERkjCQn6eqx51m9ePEC1tbWegmKiIiIiIiIyBjpvARbhw4dAGRMEtenTx8oFArxPqVSiUuXLqFOnTr6j5CIiIiIiIjISOicpNvb2wPIaEm3tbWFpaWleJ+5uTlq1aqFAQMG6D9CIiIiIiIiIiOhc5K+atUqAICnpyfGjBnDru1EREREREREeqZzkq42efLk/IiDiIiIiIiIyOhJTtIBYNOmTdi4cSMiIyORmpqqcd+5c+f0EhgRERERERGRsZE8u/vPP/+Mvn37omjRojh//jxq1KgBZ2dn3L17F82bN8+PGImIiIiIiIiMguQkfdGiRVi6dCkWLFgAc3NzjBs3DmFhYRgxYgRiY2PzI0YiIiIiIiIioyA5SY+MjBSXWrO0tMTr168BAF988QV+//13/UZHREREREREZEQkJ+lubm54+fIlAKBkyZI4ceIEACAiIgKCIOg3OiIiIiIiIiIjIjlJ//TTT7F9+3YAQN++fTF69Gg0bdoUXbt2Rfv27fUeIBEREREREZGxkDy7+9KlS6FSqQAAQ4cOhbOzM44dO4Y2bdpg4MCBeg+QiIiIiIiIyFhITtJNTExgYvJfA3y3bt3QrVs3vQZFREREREREZIx0StIvXbqk8w4rVqyY52CIiIiIiIiIjJlOSXrlypUhk8neOjGcTCaDUqmUHMTChQvx448/4vHjx6hUqRIWLFiAGjVqZLttWloaZsyYgTVr1iAqKgofffQRZs6cic8++0zycYmIiIiIiIgMiU5JekRERL4FEBoaisDAQCxZsgQ1a9bEvHnzEBAQgBs3bsDV1VVr+2+++Qa//fYbli1bBj8/P+zZswft27fHsWPHUKVKlXyLk4iIiIiIiCi/6ZSklypVKt8CmDNnDgYMGIC+ffsCAJYsWYJdu3Zh5cqVmDBhgtb269atw8SJE9GiRQsAwODBg7Fv3z7Mnj0bv/32W77FSURERERERJTfJE8cB2QkykuWLEFERASOHz+OUqVKYd68efDy8kLbtm113k9qairOnj2LoKAgsczExAT+/v44fvx4to9JSUmBhYWFRpmlpSWOHj2a4/YpKSni7bi4OAAZ3ebT0tJ0jrUgqOMz9DiJdWWIWCeFB+vKsLF+Cg/WlWFj/RQurK/Co7DUlZT4ZMLbBppnsXjxYkyaNAmjRo3C999/j3///Rfe3t5YvXo11qxZg4MHD+q8r0ePHqF48eI4duwYateuLZaPGzcO//zzD06ePKn1mB49euDixYvYunUrfHx8sH//frRt2xZKpVIjGVebMmUKgoODtcrXr18PKysrnWMlIiIiIiIiyovExET06NEDsbGxsLOzy3VbyUl6uXLlMH36dLRr1w62tra4ePEivL298e+//6JRo0Z4/vy5zvvKS5L+7NkzDBgwADt27IBMJoOPjw/8/f2xcuVKJCUlaW2fXUu6h4cHnj9//tYnp6ClpaUhLCwMTZs2hVwuL+hwKBesK8PDOik8WFeGjfVTeLCuDBvrp3BhfRUehaWu4uLiUKRIEZ2SdMnd3SMiIrKdoE2hUCAhIUHSvooUKQJTU1M8efJEo/zJkydwc3PL9jEuLi7YunUrkpOT8eLFC7i7u2PChAnw9vbOdnuFQgGFQqFVLpfLDboSMytMsRo71pXhYZ0UHqwrw8b6KTxYV4aN9VO4sL4KD0OvKymxmUjduZeXFy5cuKBVvnv3bpQtW1bSvszNzVGtWjXs379fLFOpVNi/f79Gy3p2LCwsULx4caSnp2Pz5s2SxsITERERERERGSLJLemBgYEYOnQokpOTIQgCTp06hd9//x0zZszA8uXLJQcQGBiI3r17o3r16qhRowbmzZuHhIQEcbb3Xr16oXjx4pgxYwYA4OTJk4iKikLlypURFRWFKVOmQKVSYdy4cZKPTURERERERGRIJCfp/fv3h6WlJb755htx8Lu7uzvmz5+Pbt26SQ6ga9euePbsGSZNmoTHjx+jcuXK2L17N4oWLQoAiIyMhInJfw3+ycnJ+Oabb3D37l3Y2NigRYsWWLduHRwcHCQfm4iIiIiIiMiQSErS09PTsX79egQEBKBnz55ITExEfHw8XF1d3ymIYcOGYdiwYdned+jQIY3bDRs2xNWrV9/peERERERERESGSNKYdDMzMwwaNAjJyckAACsrq3dO0ImIiIiIiIgog+SJ42rUqIHz58/nRyxERERERERERk3ymPQhQ4bg66+/xsOHD1GtWjVYW1tr3F+xYkW9BUdERERERERkTCQn6erJ4UaMGCGWyWQyCIIAmUwGpVKpv+iIiIiIiIiIjIjkJD0iIiI/4iAiIiIiIiIyepKT9FKlSuVHHERERERERERGT/LEcURERERERESUP5ikExERERERERkIJulEREREREREBoJJOhEREREREZGByFOSHhMTg+XLlyMoKAgvX74EAJw7dw5RUVF6DY6IiIiIiIjImEie3f3SpUvw9/eHvb097t27hwEDBsDJyQlbtmxBZGQk1q5dmx9xEhEREREREX3wJLekBwYGok+fPrh16xYsLCzE8hYtWuDw4cN6DY6IiIiIiIjImEhO0k+fPo2BAwdqlRcvXhyPHz/WS1BERERERERExkhykq5QKBAXF6dVfvPmTbi4uOglKCIiIiIiIiJjJDlJb9OmDaZOnYq0tDQAgEwmQ2RkJMaPH4+OHTvqPUAiIiIiIiIiYyE5SZ89ezbi4+Ph6uqKpKQkNGzYEL6+vrC1tcX333+fHzESERERERERGQXJs7vb29sjLCwMR48exaVLlxAfH4+qVavC398/P+IjIiIiIiIiMhqSk3S1evXqoV69evqMhYiIiIiIiMioSU7Sf/7552zLZTIZLCws4OvriwYNGsDU1PSdgyMiIiIiIiIyJpKT9Llz5+LZs2dITEyEo6MjAODVq1ewsrKCjY0Nnj59Cm9vbxw8eBAeHh56D5iIiIiIiIjoQyV54rjp06fjk08+wa1bt/DixQu8ePECN2/eRM2aNTF//nxERkbCzc0No0ePzo94iYiIiIiIiD5YklvSv/nmG2zevBk+Pj5ima+vL3766Sd07NgRd+/exaxZs7gcGxEREREREZFEklvSo6OjkZ6erlWenp6Ox48fAwDc3d3x+vXrd4+OiIiIiIiIyIhITtIbN26MgQMH4vz582LZ+fPnMXjwYHz66acAgMuXL8PLy0t/URIREREREREZAclJ+ooVK+Dk5IRq1apBoVBAoVCgevXqcHJywooVKwAANjY2mD17tt6DJSIiIiIiIvqQSR6T7ubmhrCwMFy/fh03b94EAHz00Uf46KOPxG0aN26svwiJiIiIiIiIjITkJF3Nz88Pfn5++oyFiIiIiIiIyKjlKUl/+PAhtm/fjsjISKSmpmrcN2fOHL0ERkRERERERGRsJCfp+/fvR5s2beDt7Y3r16+jfPnyuHfvHgRBQNWqVfMjRiIiIiIiIiKjIHniuKCgIIwZMwaXL1+GhYUFNm/ejAcPHqBhw4bo3LlzfsRIREREREREZBQkJ+nXrl1Dr169AABmZmZISkqCjY0Npk6dipkzZ+o9QCIiIiIiIiJjITlJt7a2FsehFytWDHfu3BHve/78uf4iIyIiIiIiIjIyksek16pVC0ePHkXZsmXRokULfP3117h8+TK2bNmCWrVq5UeMREREREREREZBcpI+Z84cxMfHAwCCg4MRHx+P0NBQlC5dmjO7ExEREREREb0DSUm6UqnEw4cPUbFiRQAZXd+XLFmSL4ERERERERERGRtJY9JNTU3RrFkzvHr1Kr/iISIiIiIiIjJakieOK1++PO7evZsfsRAREREREREZNclJ+rRp0zBmzBjs3LkT0dHRiIuL0/hHRERERERERHkjeeK4Fi1aAADatGkDmUwmlguCAJlMBqVSqb/oiIiIiIiIiIyI5CT94MGD+REHERERERERkdGTnKQ3bNgwP+IgIiIiIiIiMnqSx6QDwJEjR/D555+jTp06iIqKAgCsW7cOR48e1WtwRERERERERMZEcpK+efNmBAQEwNLSEufOnUNKSgoAIDY2FtOnT9d7gERERERERETGIk+zuy9ZsgTLli2DXC4Xy+vWrYtz587pNTgiIiIiIiIiYyI5Sb9x4wYaNGigVW5vb4+YmBh9xERERERERERklCQn6W5ubrh9+7ZW+dGjR+Ht7a2XoIiIiIiIiIiMkeQkfcCAARg5ciROnjwJmUyGR48eISQkBGPGjMHgwYPzI0YiIiIiIiIioyB5CbYJEyZApVKhSZMmSExMRIMGDaBQKDBmzBgMHz48P2IkIiIiIiIiMgqSk3SZTIaJEydi7NixuH37NuLj41GuXDnY2NjkR3xERERERERERkNyd/fffvsNiYmJMDc3R7ly5VCjRg0m6ERERERERER6IDlJHz16NFxdXdGjRw/89ddfUCqV+REXERERERERkdGRnKRHR0djw4YNkMlk6NKlC4oVK4ahQ4fi2LFj+REfERERERERkdGQnKSbmZmhVatWCAkJwdOnTzF37lzcu3cPjRs3ho+PT37ESERERERERGQUJCfpmVlZWSEgIADNmzdH6dKlce/evTztZ+HChfD09ISFhQVq1qyJU6dO5br9vHnz8NFHH8HS0hIeHh4YPXo0kpOT83RsIiIiIiIiIkORpyQ9MTERISEhaNGiBYoXL4558+ahffv2uHLliuR9hYaGIjAwEJMnT8a5c+dQqVIlBAQE4OnTp9luv379ekyYMAGTJ0/GtWvXsGLFCoSGhuJ///tfXk6FiIiIiIiIyGBIXoKtW7du2LlzJ6ysrNClSxd8++23qF27dp4DmDNnDgYMGIC+ffsCAJYsWYJdu3Zh5cqV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45EkPfnkk7rjjjs0cOBALViwQA6HQ5988kmjt8OK7Fgfbzk5OVqxYoXGjx/f6PHbhR1rZYzRpEmTFB8fr9WrV2v9+vUaPXq0Ro4ceUGCX3OxY61+9rOf6e2339bcuXMVGRmpLl26KCkpSZ07d/Y5un7enPcT6luoSZMmme7du5s9e/b4tGdkZBhJ5vjx4z7tPXr0MGlpaT5tW7duNfHx8eaJJ57waT9+/LiRZFwuV/XkcDiq2zIyMkxBQYHZtWtX9VRcXGx2797t95rLX//612by5Mm1tqG1XJNu91rl5uaaXr16mTFjxvhcF2Nndq+Jt/379xtJZu3atcHvCBuwa61GjRplnE6nT99V/Y4dO/bc7BwLsGt9/MnKyjKSzPbt24PfETZh13qtXLnSSDKrV6/2mWfQoEG1xmFndq2Pt+eee8506tSpxd8nxa61+uKLL4zT6TQnT570mefSSy81s2fPbsIesS671spbfn6+KSwsNEVFRcbpdJqPP/648TskQIT0IHk8HjNp0iTTrVs3s3PnzlqfV90EYdGiRdVt27dvr3UThKysLBMfH28effTRWn2Ul5ebzMxMn2nChAmmT58+JjMzs86731bdBOGll16qbjt58mSrvXFcS6hVTk6O6dWrl7n77rtNWVlZo/aDlbSEmtS0d+9eI8l8+eWXgewC27B7rfbu3evT74oVK4wks2jRIrN///5G7xersHt9/HnvvfeM0+k0x44dC2gf2Ind61X13vvGcaWlpSY+Pt688cYbwe8Qi7F7fbznTUpKsvVTYBpi91p9+umnxul0msLCQp9le/fubWbNmhXczrA4u9fKn/nz55vIyMhaf1g4HwjpQZowYYKJiYkxq1at8nnURXFxcfU8KSkppkePHmblypXmu+++q/WIpszMTNOpUyfzhz/8waePQ4cO1bneQO5UaEzF4wTat29vlixZYrZs2WJGjRpV69EPe/fuNRs3bjTPPvusadeundm4caPZuHFjrf8w7M7utcrJyTGXXnqpufHGG01OTo7P+u3K7jX53//+Z9LT083GjRtNdna2ycjIMMnJyeaSSy4xZ86cafyOsSC716qmn376qUXd3d3u9Vm7dq15+eWXzaZNm8zu3bvNe++9Zzp16tSiznLwZvd6GWPMlClTTEJCglmxYoXZvn27GT9+vImPj28Rf1RpCfUxpuIorSSzbdu24HeCTdi9VocPHzZxcXHm9ttvN5s2bTI7duww06dPN6GhoWbTpk2N3zEWZPdaGWNMenq62bBhg9mxY4d57bXXTEREhHnllVcat0OCREgPkiS/04IFC6rnOX36tJk4caLp0KGDiYyMNL/97W99glVqaqrfPi666KI61xvoL5zH4zEzZ840nTt3NuHh4ebGG280O3bs8Jnnvvvu87v+lnYk0O61WrBgQZ3bYFd2r8mWLVvM9ddfb2JjY014eLjp2bOnSUlJMTk5OY3ZHZZm91rV1NJCut3rs2HDBjN48GATExNj2rRpYy6//HLz/PPPt7g/dlWxe72MqThyPm3aNBMfH2+ioqLM0KFDTVZWVrC7wpJaQn2MMeaee+7xecZ0S9QSavXtt9+aYcOGmdjYWBMVFWWGDBlili5dGuyusLyWUKsxY8aY2NhYExYWZvr162feeeedYHdDozmMacF3OwIAAAAAwEa4uzsAAAAAABZBSAcAAAAAwCII6QAAAAAAWAQhHQAAAAAAiyCkAwAAAABgEYR0AAAAAAAsgpAOAAAAAIBFENIBAAAAALAIQjoAAAAAABZBSAcAoJUZN26cHA6HHA6HQkND1blzZ910001666235PF4Au5n4cKFat++/fkbKAAArRAhHQCAVmj48OHKy8tTdna2li1bpuuvv15TpkzRrbfeqrKysuYeHgAArRYhHQCAVig8PFxdunRRQkKCrr76aj3xxBNasmSJli1bpoULF0qS0tLSdOWVV6pt27ZKTEzUxIkTVVRUJElatWqV7r//fp08ebL6qPwzzzwjSSopKdH06dOVkJCgtm3bavDgwVq1alXzbCgAADZDSAcAAJKkG264Qf3799e///1vSZLT6dSrr76qrVu36u2339bKlSv12GOPSZKSk5M1b948RUdHKy8vT3l5eZo+fbok6eGHH9a6dev04YcfasuWLbrzzjs1fPhw7dq1q9m2DQAAu3AYY0xzDwIAAFw448aN04kTJ7R48eJan919993asmWLfvjhh1qfLVq0SCkpKTpy5IikimvSH3nkEZ04caJ6nn379uniiy/Wvn371K1bt+r2oUOHatCgQXr++efP+fYAANCShDT3AAAAgHUYY+RwOCRJX3zxhWbPnq3t27eroKBAZWVlOnPmjIqLixUZGel3+czMTJWXl6t3794+7SUlJYqLizvv4wcAwO4I6QAAoNq2bduUlJSk7Oxs3XrrrZowYYJmzZql2NhYrVmzRuPHj1dpaWmdIb2oqEgul0sbNmyQy+Xy+axdu3YXYhMAALA1QjoAAJAkrVy5UpmZmfrTn/6kDRs2yOPxaO7cuXI6K25h8/HHH/vMHxYWpvLycp+2AQMGqLy8XIcOHdKvfvWrCzZ2AABaCkI6AACtUElJifLz81VeXq6DBw9q+fLlmj17tm699VaNHTtWWVlZcrvdSk9P18iRI/XNN9/oH//4h08fPXv2VFFRkTIyMtS/f39FRkaqd+/e+v3vf6+xY8dq7ty5GjBggA4fPqyMjAz169dPv/nNb5ppiwEAsAfu7g4AQCu0fPlyde3aVT179tTw4cP15Zdf6tVXX9WSJUvkcrnUv39/paWl6a9//av69u2r999/X7Nnz/bpIzk5WSkpKbrrrrvUqVMnvfDCC5KkBQsWaOzYsZo2bZr69Omj0aNH69tvv1WPHj2aY1MBALAV7u4OAAAAAIBFcCQdAAAAAACLIKQDAAAAAGARhHQAAAAAACyCkA4AAAAAgEUQ0gEAAAAAsAhCOgAAAAAAFkFIBwAAAADAIgjpAAAAAABYBCEdAAAAAACLIKQDAAAAAGARhHQAAAAAACzi/6MyHjnK3a+KAAAAAElFTkSuQmCC\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Lighthouse Audit \"Properly sized images\" for WordPress 6.7" | |
], | |
"metadata": { | |
"id": "0I2Q-ZOn4su0" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from google.cloud import bigquery\n", | |
"import pandas as pd\n", | |
"\n", | |
"client = bigquery.Client(project=project_id)\n", | |
"\n", | |
"query = f\"\"\"\n", | |
"CREATE TEMPORARY FUNCTION IS_CMS(technologies ARRAY<STRUCT<technology STRING, categories ARRAY<STRING>, info ARRAY<STRING>>>, cms STRING, version STRING) RETURNS BOOL AS (\n", | |
" EXISTS(\n", | |
" SELECT * FROM UNNEST(technologies) AS technology, UNNEST(technology.info) AS info\n", | |
" WHERE technology.technology = cms\n", | |
" AND (\n", | |
" version = \"\"\n", | |
" OR ENDS_WITH(version, \".x\") AND (STARTS_WITH(info, RTRIM(version, \"x\")) OR info = RTRIM(version, \".x\"))\n", | |
" OR info = version\n", | |
" )\n", | |
" )\n", | |
");\n", | |
"SELECT\n", | |
" date,\n", | |
" client as device,\n", | |
" IF( date = '2024-10-01' AND IS_CMS( technologies, 'WordPress', '6.6.x' ), TRUE, FALSE ) AS using_6_6_before,\n", | |
" IF( date = '2024-12-01' AND IS_CMS( technologies, 'WordPress', '6.7.x' ), TRUE, FALSE ) AS using_6_7_after,\n", | |
" AVG( CAST( JSON_EXTRACT(lighthouse, '$.audits.uses-responsive-images.details.overallSavingsBytes') AS INT64 ) ) AS avg_overallSavingsBytes,\n", | |
" COUNT( DISTINCT( page ) ) AS origins,\n", | |
"FROM\n", | |
"`httparchive.all.pages`\n", | |
" WHERE\n", | |
" date >= '2024-10-01'\n", | |
" AND is_root_page = TRUE\n", | |
"group by date, device, using_6_6_before, using_6_7_after\n", | |
"order by date desc\n", | |
" \"\"\"\n", | |
"\n", | |
"query_job = client.query(query)\n", | |
"data = query_job.result()\n", | |
"\n", | |
"savings_data = data.to_dataframe()\n", | |
"savings_data.head(1000)\n" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 251 | |
}, | |
"id": "YL16JKY74zfQ", | |
"outputId": "801ff214-af6c-4a78-8ecd-abd1d9cee2b4" | |
}, | |
"execution_count": 14, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" date device using_6_6_before using_6_7_after \\\n", | |
"0 2024-11-01 mobile False False \n", | |
"1 2024-11-01 desktop False False \n", | |
"2 2024-10-01 mobile False False \n", | |
"3 2024-10-01 mobile True False \n", | |
"4 2024-10-01 desktop False False \n", | |
"5 2024-10-01 desktop True False \n", | |
"\n", | |
" avg_overallSavingsBytes origins \n", | |
"0 6.543764e+05 16257083 \n", | |
"1 1.007562e+06 12851192 \n", | |
"2 6.696237e+05 14168484 \n", | |
"3 5.644537e+05 2258314 \n", | |
"4 1.005502e+06 11168360 \n", | |
"5 1.013911e+06 1721361 " | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-ae147dd6-58e3-470e-a14a-a2a49dedbe20\" class=\"colab-df-container\">\n", | |
" <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>date</th>\n", | |
" <th>device</th>\n", | |
" <th>using_6_6_before</th>\n", | |
" <th>using_6_7_after</th>\n", | |
" <th>avg_overallSavingsBytes</th>\n", | |
" <th>origins</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2024-11-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>6.543764e+05</td>\n", | |
" <td>16257083</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2024-11-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>1.007562e+06</td>\n", | |
" <td>12851192</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2024-10-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>6.696237e+05</td>\n", | |
" <td>14168484</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>2024-10-01</td>\n", | |
" <td>mobile</td>\n", | |
" <td>True</td>\n", | |
" <td>False</td>\n", | |
" <td>5.644537e+05</td>\n", | |
" <td>2258314</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>2024-10-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>False</td>\n", | |
" <td>False</td>\n", | |
" <td>1.005502e+06</td>\n", | |
" <td>11168360</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>2024-10-01</td>\n", | |
" <td>desktop</td>\n", | |
" <td>True</td>\n", | |
" <td>False</td>\n", | |
" <td>1.013911e+06</td>\n", | |
" <td>1721361</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <div class=\"colab-df-buttons\">\n", | |
"\n", | |
" <div class=\"colab-df-container\">\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-ae147dd6-58e3-470e-a14a-a2a49dedbe20')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", | |
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
"\n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" .colab-df-buttons div {\n", | |
" margin-bottom: 4px;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-ae147dd6-58e3-470e-a14a-a2a49dedbe20 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-ae147dd6-58e3-470e-a14a-a2a49dedbe20');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
"\n", | |
"\n", | |
"<div id=\"df-37e461bf-496a-4a7b-b2ca-696fe58f5886\">\n", | |
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-37e461bf-496a-4a7b-b2ca-696fe58f5886')\"\n", | |
" title=\"Suggest charts\"\n", | |
" style=\"display:none;\">\n", | |
"\n", | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <g>\n", | |
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", | |
" </g>\n", | |
"</svg>\n", | |
" </button>\n", | |
"\n", | |
"<style>\n", | |
" .colab-df-quickchart {\n", | |
" --bg-color: #E8F0FE;\n", | |
" --fill-color: #1967D2;\n", | |
" --hover-bg-color: #E2EBFA;\n", | |
" --hover-fill-color: #174EA6;\n", | |
" --disabled-fill-color: #AAA;\n", | |
" --disabled-bg-color: #DDD;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-quickchart {\n", | |
" --bg-color: #3B4455;\n", | |
" --fill-color: #D2E3FC;\n", | |
" --hover-bg-color: #434B5C;\n", | |
" --hover-fill-color: #FFFFFF;\n", | |
" --disabled-bg-color: #3B4455;\n", | |
" --disabled-fill-color: #666;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart {\n", | |
" background-color: var(--bg-color);\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: var(--fill-color);\n", | |
" height: 32px;\n", | |
" padding: 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart:hover {\n", | |
" background-color: var(--hover-bg-color);\n", | |
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: var(--button-hover-fill-color);\n", | |
" }\n", | |
"\n", | |
" .colab-df-quickchart-complete:disabled,\n", | |
" .colab-df-quickchart-complete:disabled:hover {\n", | |
" background-color: var(--disabled-bg-color);\n", | |
" fill: var(--disabled-fill-color);\n", | |
" box-shadow: none;\n", | |
" }\n", | |
"\n", | |
" .colab-df-spinner {\n", | |
" border: 2px solid var(--fill-color);\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" animation:\n", | |
" spin 1s steps(1) infinite;\n", | |
" }\n", | |
"\n", | |
" @keyframes spin {\n", | |
" 0% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" border-left-color: var(--fill-color);\n", | |
" }\n", | |
" 20% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 30% {\n", | |
" border-color: transparent;\n", | |
" border-left-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 40% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-top-color: var(--fill-color);\n", | |
" }\n", | |
" 60% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" }\n", | |
" 80% {\n", | |
" border-color: transparent;\n", | |
" border-right-color: var(--fill-color);\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" 90% {\n", | |
" border-color: transparent;\n", | |
" border-bottom-color: var(--fill-color);\n", | |
" }\n", | |
" }\n", | |
"</style>\n", | |
"\n", | |
" <script>\n", | |
" async function quickchart(key) {\n", | |
" const quickchartButtonEl =\n", | |
" document.querySelector('#' + key + ' button');\n", | |
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", | |
" quickchartButtonEl.classList.add('colab-df-spinner');\n", | |
" try {\n", | |
" const charts = await google.colab.kernel.invokeFunction(\n", | |
" 'suggestCharts', [key], {});\n", | |
" } catch (error) {\n", | |
" console.error('Error during call to suggestCharts:', error);\n", | |
" }\n", | |
" quickchartButtonEl.classList.remove('colab-df-spinner');\n", | |
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", | |
" }\n", | |
" (() => {\n", | |
" let quickchartButtonEl =\n", | |
" document.querySelector('#df-37e461bf-496a-4a7b-b2ca-696fe58f5886 button');\n", | |
" quickchartButtonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
" })();\n", | |
" </script>\n", | |
"</div>\n", | |
"\n", | |
" </div>\n", | |
" </div>\n" | |
], | |
"application/vnd.google.colaboratory.intrinsic+json": { | |
"type": "dataframe", | |
"variable_name": "savings_data", | |
"summary": "{\n \"name\": \"savings_data\",\n \"rows\": 6,\n \"fields\": [\n {\n \"column\": \"date\",\n \"properties\": {\n \"dtype\": \"dbdate\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"2024-10-01\",\n \"2024-11-01\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"device\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"desktop\",\n \"mobile\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"using_6_6_before\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 2,\n \"samples\": [\n true,\n false\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"using_6_7_after\",\n \"properties\": {\n \"dtype\": \"boolean\",\n \"num_unique_values\": 1,\n \"samples\": [\n false\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"avg_overallSavingsBytes\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 210967.6716070315,\n \"min\": 564453.6626198117,\n \"max\": 1013911.2899378254,\n \"num_unique_values\": 6,\n \"samples\": [\n 654376.350454013\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"origins\",\n \"properties\": {\n \"dtype\": \"Int64\",\n \"num_unique_values\": 6,\n \"samples\": [\n 16257083\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" | |
}, | |
"application/vnd.google.colaboratory.module+javascript": "\n import \"https://ssl.gstatic.com/colaboratory/data_table/e523c247d1e24a05/data_table.js\";\n\n const table = window.createDataTable({\n data: [[{\n 'v': 0,\n 'f': \"0\",\n },\n\"2024-11-01\",\n\"mobile\",\nfalse,\nfalse,\n{\n 'v': 654376.350454013,\n 'f': \"654376.350454013\",\n },\n{\n 'v': 16257083,\n 'f': \"16257083\",\n }],\n [{\n 'v': 1,\n 'f': \"1\",\n },\n\"2024-11-01\",\n\"desktop\",\nfalse,\nfalse,\n{\n 'v': 1007561.8678002616,\n 'f': \"1007561.8678002616\",\n },\n{\n 'v': 12851192,\n 'f': \"12851192\",\n }],\n [{\n 'v': 2,\n 'f': \"2\",\n },\n\"2024-10-01\",\n\"mobile\",\nfalse,\nfalse,\n{\n 'v': 669623.6972515482,\n 'f': \"669623.6972515482\",\n },\n{\n 'v': 14168484,\n 'f': \"14168484\",\n }],\n [{\n 'v': 3,\n 'f': \"3\",\n },\n\"2024-10-01\",\n\"mobile\",\ntrue,\nfalse,\n{\n 'v': 564453.6626198117,\n 'f': \"564453.6626198117\",\n },\n{\n 'v': 2258314,\n 'f': \"2258314\",\n }],\n [{\n 'v': 4,\n 'f': \"4\",\n },\n\"2024-10-01\",\n\"desktop\",\nfalse,\nfalse,\n{\n 'v': 1005502.2254057466,\n 'f': \"1005502.2254057466\",\n },\n{\n 'v': 11168360,\n 'f': \"11168360\",\n }],\n [{\n 'v': 5,\n 'f': \"5\",\n },\n\"2024-10-01\",\n\"desktop\",\ntrue,\nfalse,\n{\n 'v': 1013911.2899378254,\n 'f': \"1013911.2899378254\",\n },\n{\n 'v': 1721361,\n 'f': \"1721361\",\n }]],\n columns: [[\"number\", \"index\"], [\"string\", \"date\"], [\"string\", \"device\"], [\"string\", \"using_6_6_before\"], [\"string\", \"using_6_7_after\"], [\"number\", \"avg_overallSavingsBytes\"], [\"number\", \"origins\"]],\n columnOptions: [{\"width\": \"1px\", \"className\": \"index_column\"}],\n rowsPerPage: 25,\n helpUrl: \"https://colab.research.google.com/notebooks/data_table.ipynb\",\n suppressOutputScrolling: true,\n minimumWidth: undefined,\n });\n\n function appendQuickchartButton(parentElement) {\n let quickchartButtonContainerElement = document.createElement('div');\n quickchartButtonContainerElement.innerHTML = `\n<div id=\"df-02d007fb-c3d2-412f-ae52-594083bb265e\">\n <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-02d007fb-c3d2-412f-ae52-594083bb265e')\"\n title=\"Suggest charts\"\n style=\"display:none;\">\n \n<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n width=\"24px\">\n <g>\n <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n </g>\n</svg>\n </button>\n \n<style>\n .colab-df-quickchart {\n --bg-color: #E8F0FE;\n --fill-color: #1967D2;\n --hover-bg-color: #E2EBFA;\n --hover-fill-color: #174EA6;\n --disabled-fill-color: #AAA;\n --disabled-bg-color: #DDD;\n }\n\n [theme=dark] .colab-df-quickchart {\n --bg-color: #3B4455;\n --fill-color: #D2E3FC;\n --hover-bg-color: #434B5C;\n --hover-fill-color: #FFFFFF;\n --disabled-bg-color: #3B4455;\n --disabled-fill-color: #666;\n }\n\n .colab-df-quickchart {\n background-color: var(--bg-color);\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: none;\n fill: var(--fill-color);\n height: 32px;\n padding: 0;\n width: 32px;\n }\n\n .colab-df-quickchart:hover {\n background-color: var(--hover-bg-color);\n box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n fill: var(--button-hover-fill-color);\n }\n\n .colab-df-quickchart-complete:disabled,\n .colab-df-quickchart-complete:disabled:hover {\n background-color: var(--disabled-bg-color);\n fill: var(--disabled-fill-color);\n box-shadow: none;\n }\n\n .colab-df-spinner {\n border: 2px solid var(--fill-color);\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n animation:\n spin 1s steps(1) infinite;\n }\n\n @keyframes spin {\n 0% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n border-left-color: var(--fill-color);\n }\n 20% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 30% {\n border-color: transparent;\n border-left-color: var(--fill-color);\n border-top-color: var(--fill-color);\n border-right-color: var(--fill-color);\n }\n 40% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-top-color: var(--fill-color);\n }\n 60% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n }\n 80% {\n border-color: transparent;\n border-right-color: var(--fill-color);\n border-bottom-color: var(--fill-color);\n }\n 90% {\n border-color: transparent;\n border-bottom-color: var(--fill-color);\n }\n }\n</style>\n\n <script>\n async function quickchart(key) {\n const quickchartButtonEl =\n document.querySelector('#' + key + ' button');\n quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n quickchartButtonEl.classList.add('colab-df-spinner');\n try {\n const charts = await google.colab.kernel.invokeFunction(\n 'suggestCharts', [key], {});\n } catch (error) {\n console.error('Error during call to suggestCharts:', error);\n }\n quickchartButtonEl.classList.remove('colab-df-spinner');\n quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n }\n (() => {\n let quickchartButtonEl =\n document.querySelector('#df-02d007fb-c3d2-412f-ae52-594083bb265e button');\n quickchartButtonEl.style.display =\n google.colab.kernel.accessAllowed ? 'block' : 'none';\n })();\n </script>\n</div>`;\n parentElement.appendChild(quickchartButtonContainerElement);\n }\n\n appendQuickchartButton(table);\n " | |
}, | |
"metadata": {}, | |
"execution_count": 14 | |
} | |
] | |
} | |
], | |
"metadata": { | |
"colab": { | |
"provenance": [], | |
"collapsed_sections": [ | |
"4G2WkwMPzxbT" | |
], | |
"toc_visible": true, | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"display_name": "Python 3", | |
"name": "python3" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment