Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save KaroAntonio/4ff7814b0512c35499e2aef3c7a2c86a to your computer and use it in GitHub Desktop.
Save KaroAntonio/4ff7814b0512c35499e2aef3c7a2c86a to your computer and use it in GitHub Desktop.
Sustainable Energy Growth - Data Wrangling.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyPMRxpMPDIKePwutMB1E0jt",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/KaroAntonio/4ff7814b0512c35499e2aef3c7a2c86a/sustainable-energy-growth-data-wrangling.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"# Sustainable Energy Growth - Data Wrangling\n",
"\n",
"In our first step of analysis, we wrangle our data.\n",
"We are acquiring data from the WorldBank, and from a composite dataset from kaggle.\n",
"Our primary dataset contains national scale energy and economic data relating to sustainable energy by country.\n",
"We explore two other datasets to determine if they are appropriate to integrate into the original dataset.\n",
"The world bank education level atainment data we find to be too sparse and incomplete to be a good candidate. \n",
"The gdp % spend on education data is more complete but requires some mapping and cleaning before merging.\n",
"We explore which of the sustainable energy production/consumption measures is a good candidate for a target variable.\n",
"low_c_pct looks like a good target candidate because it has good coverage (98%), and it represents the % of energy coming from the combination of renewable and nuclear sources. It is a percent value which is well-scaled for models to use.\n"
],
"metadata": {
"id": "-1gFTV7oj-pl"
}
},
{
"cell_type": "code",
"execution_count": 290,
"metadata": {
"id": "eyTl7QRcjT1U"
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from google.colab import drive"
]
},
{
"cell_type": "code",
"source": [
"drive.mount('/content/drive')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "p4NwxDpqkivS",
"outputId": "75f82f6f-50ff-41a1-9248-59740d176eb5"
},
"execution_count": 291,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"DATA_DIR = \"/content/drive/MyDrive/Karo/learn/Springboard/data/\"\n",
"GLOBAL_SUS_ENRGY_DATA_FID = \"global-data-on-sustainable-energy.csv\"\n",
"GLOBAL_ED_DATA_FID = \"world_bank_education_data_1994-2002.csv\"\n",
"ED_SPEND_DATA_FID = \"gov_spend_on_ed.csv\"\n",
"GLOBAL_SUS_ENRGY_DATA_PATH = DATA_DIR + GLOBAL_SUS_ENRGY_DATA_FID\n",
"GLOBAL_ED_DATA_PATH = DATA_DIR + GLOBAL_ED_DATA_FID\n",
"ED_SPEND_DATA_PATH = DATA_DIR + ED_SPEND_DATA_FID\n",
"\n",
"# Abbreviate Col names\n",
"LOW_C_PCT = \"Low-carbon electricity (% electricity)\"\n",
"ENTITY = \"Entity\"\n",
"YEAR = \"Year\"\n",
"ACCESS_E = \"Access to electricity (% of population)\"\n",
"ACCESS_CF = \"Access to clean fuels for cooking\"\n",
"RE_PP = \"Renewable-electricity-generating-capacity-per-capita\"\n",
"FLOWS_US = \"Financial flows to developing countries (US $)\"\n",
"RE_TOT_PCT = \"Renewable energy share in the total final energy consumption (%)\"\n",
"E_FF = \"Electricity from fossil fuels (TWh)\"\n",
"E_NU = \"Electricity from nuclear (TWh)\"\n",
"E_R = \"Electricity from renewables (TWh)\"\n",
"E_CON_PP = \"Primary energy consumption per capita (kWh/person)\"\n",
"E_PPP = \"Energy intensity level of primary energy (MJ/$2017 PPP GDP)\"\n",
"V_CO2 = \"Value_co2_emissions_kt_by_country\"\n",
"RE_PRIME_PCT = \"Renewables (% equivalent primary energy)\"\n",
"GDP_GROWTH = \"gdp_growth\"\n",
"GDP_PP = \"gdp_per_capita\"\n",
"POP_DENS = \"Density\\\\n(P/Km2)\"\n",
"AREA = \"Land Area(Km2)\"\n",
"LAT = \"Latitude\"\n",
"LON = \"Longitude\"\n",
"\n",
"col_names_map = {\n",
" LOW_C_PCT: \"low_c_pct\",\n",
" ENTITY: \"entity\",\n",
" YEAR: \"year\",\n",
" ACCESS_E: \"access\",\n",
" ACCESS_CF: \"access_cf\",\n",
" RE_PP: \"re_pp\",\n",
" FLOWS_US: \"flows_us\",\n",
" RE_TOT_PCT: \"re_tot_pct\",\n",
" E_FF: \"e_ff\",\n",
" E_NU: \"e_nu\",\n",
" E_R: \"e_r\",\n",
" E_CON_PP: \"e_con_pp\",\n",
" E_PPP: \"e_ppp\",\n",
" V_CO2: \"v_co2\",\n",
" RE_PRIME_PCT: \"re_prime_pct\",\n",
" GDP_GROWTH: \"gdp_growth\",\n",
" GDP_PP: \"gdp_pp\",\n",
" POP_DENS: \"pop_dens\",\n",
" AREA: \"area\",\n",
" LAT: \"lat\",\n",
" LON: \"lon\"\n",
"}"
],
"metadata": {
"id": "9nBgdah8kmlw"
},
"execution_count": 292,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Load Sus Energy Data\n",
"source_data_df = pd.read_csv(GLOBAL_SUS_ENRGY_DATA_PATH).rename(columns=col_names_map).rename(columns=col_names_map)\n",
"ed_data_df = pd.read_csv(GLOBAL_ED_DATA_PATH).rename(columns=col_names_map).rename(columns=col_names_map)"
],
"metadata": {
"id": "WoeWT8TclATF"
},
"execution_count": 293,
"outputs": []
},
{
"cell_type": "code",
"source": [
"source_data_df.columns"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "BYx4yWJ_nMFo",
"outputId": "6df7913e-3336-4761-abe2-e898e38fbcef"
},
"execution_count": 294,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['entity', 'year', 'access', 'access_cf', 're_pp', 'flows_us',\n",
" 're_tot_pct', 'e_ff', 'e_nu', 'e_r', 'low_c_pct', 'e_con_pp', 'e_ppp',\n",
" 'v_co2', 're_prime_pct', 'gdp_growth', 'gdp_pp', 'pop_dens', 'area',\n",
" 'lat', 'lon'],\n",
" dtype='object')"
]
},
"metadata": {},
"execution_count": 294
}
]
},
{
"cell_type": "code",
"source": [
"source_data_df.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 236
},
"id": "zLY3K9IlleXh",
"outputId": "13788d47-0f7f-45c0-8935-8993db34cb37"
},
"execution_count": 295,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" entity year access access_cf re_pp flows_us re_tot_pct \\\n",
"0 Afghanistan 2000 1.613591 6.2 9.22 20000.0 44.99 \n",
"1 Afghanistan 2001 4.074574 7.2 8.86 130000.0 45.60 \n",
"2 Afghanistan 2002 9.409158 8.2 8.47 3950000.0 37.83 \n",
"3 Afghanistan 2003 14.738506 9.5 8.09 25970000.0 36.66 \n",
"4 Afghanistan 2004 20.064968 10.9 7.75 NaN 44.24 \n",
"\n",
" e_ff e_nu e_r ... e_con_pp e_ppp v_co2 re_prime_pct \\\n",
"0 0.16 0.0 0.31 ... 302.59482 1.64 760.000000 NaN \n",
"1 0.09 0.0 0.50 ... 236.89185 1.74 730.000000 NaN \n",
"2 0.13 0.0 0.56 ... 210.86215 1.40 1029.999971 NaN \n",
"3 0.31 0.0 0.63 ... 229.96822 1.40 1220.000029 NaN \n",
"4 0.33 0.0 0.56 ... 204.23125 1.20 1029.999971 NaN \n",
"\n",
" gdp_growth gdp_pp pop_dens area lat lon \n",
"0 NaN NaN 60 652230.0 33.93911 67.709953 \n",
"1 NaN NaN 60 652230.0 33.93911 67.709953 \n",
"2 NaN 179.426579 60 652230.0 33.93911 67.709953 \n",
"3 8.832278 190.683814 60 652230.0 33.93911 67.709953 \n",
"4 1.414118 211.382074 60 652230.0 33.93911 67.709953 \n",
"\n",
"[5 rows x 21 columns]"
],
"text/html": [
"\n",
" <div id=\"df-b2ac4285-5bd9-447e-a832-83557d84faa9\" 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>entity</th>\n",
" <th>year</th>\n",
" <th>access</th>\n",
" <th>access_cf</th>\n",
" <th>re_pp</th>\n",
" <th>flows_us</th>\n",
" <th>re_tot_pct</th>\n",
" <th>e_ff</th>\n",
" <th>e_nu</th>\n",
" <th>e_r</th>\n",
" <th>...</th>\n",
" <th>e_con_pp</th>\n",
" <th>e_ppp</th>\n",
" <th>v_co2</th>\n",
" <th>re_prime_pct</th>\n",
" <th>gdp_growth</th>\n",
" <th>gdp_pp</th>\n",
" <th>pop_dens</th>\n",
" <th>area</th>\n",
" <th>lat</th>\n",
" <th>lon</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Afghanistan</td>\n",
" <td>2000</td>\n",
" <td>1.613591</td>\n",
" <td>6.2</td>\n",
" <td>9.22</td>\n",
" <td>20000.0</td>\n",
" <td>44.99</td>\n",
" <td>0.16</td>\n",
" <td>0.0</td>\n",
" <td>0.31</td>\n",
" <td>...</td>\n",
" <td>302.59482</td>\n",
" <td>1.64</td>\n",
" <td>760.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>60</td>\n",
" <td>652230.0</td>\n",
" <td>33.93911</td>\n",
" <td>67.709953</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Afghanistan</td>\n",
" <td>2001</td>\n",
" <td>4.074574</td>\n",
" <td>7.2</td>\n",
" <td>8.86</td>\n",
" <td>130000.0</td>\n",
" <td>45.60</td>\n",
" <td>0.09</td>\n",
" <td>0.0</td>\n",
" <td>0.50</td>\n",
" <td>...</td>\n",
" <td>236.89185</td>\n",
" <td>1.74</td>\n",
" <td>730.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>60</td>\n",
" <td>652230.0</td>\n",
" <td>33.93911</td>\n",
" <td>67.709953</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Afghanistan</td>\n",
" <td>2002</td>\n",
" <td>9.409158</td>\n",
" <td>8.2</td>\n",
" <td>8.47</td>\n",
" <td>3950000.0</td>\n",
" <td>37.83</td>\n",
" <td>0.13</td>\n",
" <td>0.0</td>\n",
" <td>0.56</td>\n",
" <td>...</td>\n",
" <td>210.86215</td>\n",
" <td>1.40</td>\n",
" <td>1029.999971</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>179.426579</td>\n",
" <td>60</td>\n",
" <td>652230.0</td>\n",
" <td>33.93911</td>\n",
" <td>67.709953</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Afghanistan</td>\n",
" <td>2003</td>\n",
" <td>14.738506</td>\n",
" <td>9.5</td>\n",
" <td>8.09</td>\n",
" <td>25970000.0</td>\n",
" <td>36.66</td>\n",
" <td>0.31</td>\n",
" <td>0.0</td>\n",
" <td>0.63</td>\n",
" <td>...</td>\n",
" <td>229.96822</td>\n",
" <td>1.40</td>\n",
" <td>1220.000029</td>\n",
" <td>NaN</td>\n",
" <td>8.832278</td>\n",
" <td>190.683814</td>\n",
" <td>60</td>\n",
" <td>652230.0</td>\n",
" <td>33.93911</td>\n",
" <td>67.709953</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Afghanistan</td>\n",
" <td>2004</td>\n",
" <td>20.064968</td>\n",
" <td>10.9</td>\n",
" <td>7.75</td>\n",
" <td>NaN</td>\n",
" <td>44.24</td>\n",
" <td>0.33</td>\n",
" <td>0.0</td>\n",
" <td>0.56</td>\n",
" <td>...</td>\n",
" <td>204.23125</td>\n",
" <td>1.20</td>\n",
" <td>1029.999971</td>\n",
" <td>NaN</td>\n",
" <td>1.414118</td>\n",
" <td>211.382074</td>\n",
" <td>60</td>\n",
" <td>652230.0</td>\n",
" <td>33.93911</td>\n",
" <td>67.709953</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 21 columns</p>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b2ac4285-5bd9-447e-a832-83557d84faa9')\"\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-b2ac4285-5bd9-447e-a832-83557d84faa9 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-b2ac4285-5bd9-447e-a832-83557d84faa9');\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-b9ea0fc1-70f0-4324-a2d5-6ecd642036fe\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b9ea0fc1-70f0-4324-a2d5-6ecd642036fe')\"\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-b9ea0fc1-70f0-4324-a2d5-6ecd642036fe 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": "source_data_df"
}
},
"metadata": {},
"execution_count": 295
}
]
},
{
"cell_type": "code",
"source": [
"source_data_df.describe()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 320
},
"id": "Cj3DFy-Jljow",
"outputId": "07e51123-2d56-41a6-8b13-439e138de831"
},
"execution_count": 296,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" year access access_cf re_pp flows_us \\\n",
"count 3649.000000 3639.000000 3480.000000 2718.000000 1.560000e+03 \n",
"mean 2010.038367 78.933702 63.255287 113.137498 9.422400e+07 \n",
"std 6.054228 30.275541 39.043658 244.167256 2.981544e+08 \n",
"min 2000.000000 1.252269 0.000000 0.000000 0.000000e+00 \n",
"25% 2005.000000 59.800890 23.175000 3.540000 2.600000e+05 \n",
"50% 2010.000000 98.361570 83.150000 32.910000 5.665000e+06 \n",
"75% 2015.000000 100.000000 100.000000 112.210000 5.534750e+07 \n",
"max 2020.000000 100.000000 100.000000 3060.190000 5.202310e+09 \n",
"\n",
" re_tot_pct e_ff e_nu e_r low_c_pct \\\n",
"count 3455.000000 3628.000000 3523.000000 3628.000000 3607.000000 \n",
"mean 32.638165 70.365003 13.450190 23.968010 36.801182 \n",
"std 29.894901 348.051866 73.006623 104.431085 34.314884 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 6.515000 0.290000 0.000000 0.040000 2.877847 \n",
"50% 23.300000 2.970000 0.000000 1.470000 27.865068 \n",
"75% 55.245000 26.837500 0.000000 9.600000 64.403792 \n",
"max 96.040000 5184.130000 809.410000 2184.940000 100.000010 \n",
"\n",
" e_con_pp e_ppp v_co2 re_prime_pct gdp_growth \\\n",
"count 3649.000000 3442.000000 3.221000e+03 1512.000000 3332.000000 \n",
"mean 25743.981745 5.307345 1.598665e+05 11.986707 3.441610 \n",
"std 34773.221366 3.532020 7.736611e+05 14.994644 5.686720 \n",
"min 0.000000 0.110000 1.000000e+01 0.000000 -62.075920 \n",
"25% 3116.737300 3.170000 2.020000e+03 2.137095 1.383302 \n",
"50% 13120.570000 4.300000 1.050000e+04 6.290766 3.559855 \n",
"75% 33892.780000 6.027500 6.058000e+04 16.841638 5.830099 \n",
"max 262585.700000 32.570000 1.070722e+07 86.836586 123.139555 \n",
"\n",
" gdp_pp area lat lon \n",
"count 3367.000000 3.648000e+03 3648.000000 3648.000000 \n",
"mean 13283.774348 6.332135e+05 18.246388 14.822695 \n",
"std 19709.866716 1.585519e+06 24.159232 66.348148 \n",
"min 111.927225 2.100000e+01 -40.900557 -175.198242 \n",
"25% 1337.813437 2.571300e+04 3.202778 -11.779889 \n",
"50% 4578.633208 1.176000e+05 17.189877 19.145136 \n",
"75% 15768.615365 5.131200e+05 38.969719 46.199616 \n",
"max 123514.196700 9.984670e+06 64.963051 178.065032 "
],
"text/html": [
"\n",
" <div id=\"df-8c2f5c52-183f-46f3-8153-ec55a5b90195\" 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>year</th>\n",
" <th>access</th>\n",
" <th>access_cf</th>\n",
" <th>re_pp</th>\n",
" <th>flows_us</th>\n",
" <th>re_tot_pct</th>\n",
" <th>e_ff</th>\n",
" <th>e_nu</th>\n",
" <th>e_r</th>\n",
" <th>low_c_pct</th>\n",
" <th>e_con_pp</th>\n",
" <th>e_ppp</th>\n",
" <th>v_co2</th>\n",
" <th>re_prime_pct</th>\n",
" <th>gdp_growth</th>\n",
" <th>gdp_pp</th>\n",
" <th>area</th>\n",
" <th>lat</th>\n",
" <th>lon</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>3649.000000</td>\n",
" <td>3639.000000</td>\n",
" <td>3480.000000</td>\n",
" <td>2718.000000</td>\n",
" <td>1.560000e+03</td>\n",
" <td>3455.000000</td>\n",
" <td>3628.000000</td>\n",
" <td>3523.000000</td>\n",
" <td>3628.000000</td>\n",
" <td>3607.000000</td>\n",
" <td>3649.000000</td>\n",
" <td>3442.000000</td>\n",
" <td>3.221000e+03</td>\n",
" <td>1512.000000</td>\n",
" <td>3332.000000</td>\n",
" <td>3367.000000</td>\n",
" <td>3.648000e+03</td>\n",
" <td>3648.000000</td>\n",
" <td>3648.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>2010.038367</td>\n",
" <td>78.933702</td>\n",
" <td>63.255287</td>\n",
" <td>113.137498</td>\n",
" <td>9.422400e+07</td>\n",
" <td>32.638165</td>\n",
" <td>70.365003</td>\n",
" <td>13.450190</td>\n",
" <td>23.968010</td>\n",
" <td>36.801182</td>\n",
" <td>25743.981745</td>\n",
" <td>5.307345</td>\n",
" <td>1.598665e+05</td>\n",
" <td>11.986707</td>\n",
" <td>3.441610</td>\n",
" <td>13283.774348</td>\n",
" <td>6.332135e+05</td>\n",
" <td>18.246388</td>\n",
" <td>14.822695</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>6.054228</td>\n",
" <td>30.275541</td>\n",
" <td>39.043658</td>\n",
" <td>244.167256</td>\n",
" <td>2.981544e+08</td>\n",
" <td>29.894901</td>\n",
" <td>348.051866</td>\n",
" <td>73.006623</td>\n",
" <td>104.431085</td>\n",
" <td>34.314884</td>\n",
" <td>34773.221366</td>\n",
" <td>3.532020</td>\n",
" <td>7.736611e+05</td>\n",
" <td>14.994644</td>\n",
" <td>5.686720</td>\n",
" <td>19709.866716</td>\n",
" <td>1.585519e+06</td>\n",
" <td>24.159232</td>\n",
" <td>66.348148</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>2000.000000</td>\n",
" <td>1.252269</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000e+00</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.110000</td>\n",
" <td>1.000000e+01</td>\n",
" <td>0.000000</td>\n",
" <td>-62.075920</td>\n",
" <td>111.927225</td>\n",
" <td>2.100000e+01</td>\n",
" <td>-40.900557</td>\n",
" <td>-175.198242</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>2005.000000</td>\n",
" <td>59.800890</td>\n",
" <td>23.175000</td>\n",
" <td>3.540000</td>\n",
" <td>2.600000e+05</td>\n",
" <td>6.515000</td>\n",
" <td>0.290000</td>\n",
" <td>0.000000</td>\n",
" <td>0.040000</td>\n",
" <td>2.877847</td>\n",
" <td>3116.737300</td>\n",
" <td>3.170000</td>\n",
" <td>2.020000e+03</td>\n",
" <td>2.137095</td>\n",
" <td>1.383302</td>\n",
" <td>1337.813437</td>\n",
" <td>2.571300e+04</td>\n",
" <td>3.202778</td>\n",
" <td>-11.779889</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>2010.000000</td>\n",
" <td>98.361570</td>\n",
" <td>83.150000</td>\n",
" <td>32.910000</td>\n",
" <td>5.665000e+06</td>\n",
" <td>23.300000</td>\n",
" <td>2.970000</td>\n",
" <td>0.000000</td>\n",
" <td>1.470000</td>\n",
" <td>27.865068</td>\n",
" <td>13120.570000</td>\n",
" <td>4.300000</td>\n",
" <td>1.050000e+04</td>\n",
" <td>6.290766</td>\n",
" <td>3.559855</td>\n",
" <td>4578.633208</td>\n",
" <td>1.176000e+05</td>\n",
" <td>17.189877</td>\n",
" <td>19.145136</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>2015.000000</td>\n",
" <td>100.000000</td>\n",
" <td>100.000000</td>\n",
" <td>112.210000</td>\n",
" <td>5.534750e+07</td>\n",
" <td>55.245000</td>\n",
" <td>26.837500</td>\n",
" <td>0.000000</td>\n",
" <td>9.600000</td>\n",
" <td>64.403792</td>\n",
" <td>33892.780000</td>\n",
" <td>6.027500</td>\n",
" <td>6.058000e+04</td>\n",
" <td>16.841638</td>\n",
" <td>5.830099</td>\n",
" <td>15768.615365</td>\n",
" <td>5.131200e+05</td>\n",
" <td>38.969719</td>\n",
" <td>46.199616</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>2020.000000</td>\n",
" <td>100.000000</td>\n",
" <td>100.000000</td>\n",
" <td>3060.190000</td>\n",
" <td>5.202310e+09</td>\n",
" <td>96.040000</td>\n",
" <td>5184.130000</td>\n",
" <td>809.410000</td>\n",
" <td>2184.940000</td>\n",
" <td>100.000010</td>\n",
" <td>262585.700000</td>\n",
" <td>32.570000</td>\n",
" <td>1.070722e+07</td>\n",
" <td>86.836586</td>\n",
" <td>123.139555</td>\n",
" <td>123514.196700</td>\n",
" <td>9.984670e+06</td>\n",
" <td>64.963051</td>\n",
" <td>178.065032</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-8c2f5c52-183f-46f3-8153-ec55a5b90195')\"\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-8c2f5c52-183f-46f3-8153-ec55a5b90195 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-8c2f5c52-183f-46f3-8153-ec55a5b90195');\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-8a79d5e5-4f93-4dd1-89a2-9734a0101a2c\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-8a79d5e5-4f93-4dd1-89a2-9734a0101a2c')\"\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-8a79d5e5-4f93-4dd1-89a2-9734a0101a2c 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",
"summary": "{\n \"name\": \"source_data_df\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"year\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 977.2940031644953,\n \"min\": 6.054228365650787,\n \"max\": 3649.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 2010.0383666758016,\n 2010.0,\n 3649.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"access\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1263.42216748139,\n \"min\": 1.2522693,\n \"max\": 3639.0,\n \"num_unique_values\": 7,\n \"samples\": [\n 3639.0,\n 78.93370216207748,\n 98.36157\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"access_cf\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1210.2657393295283,\n \"min\": 0.0,\n \"max\": 3480.0,\n \"num_unique_values\": 7,\n \"samples\": [\n 3480.0,\n 63.25528735632183,\n 83.15\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"re_pp\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1303.9536659646174,\n \"min\": 0.0,\n \"max\": 3060.19,\n \"num_unique_values\": 8,\n \"samples\": [\n 113.13749816041205,\n 32.91,\n 2718.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"flows_us\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1819189777.50685,\n \"min\": 0.0,\n \"max\": 5202310000.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 94224000.0,\n 5665000.0,\n 1560.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"re_tot_pct\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1209.596105073427,\n \"min\": 0.0,\n \"max\": 3455.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 32.63816497829233,\n 23.3,\n 3455.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"e_ff\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2050.9393869486894,\n \"min\": 0.0,\n \"max\": 5184.13,\n \"num_unique_values\": 8,\n \"samples\": [\n 70.36500275633958,\n 2.97,\n 3628.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"e_nu\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1232.3836620577351,\n \"min\": 0.0,\n \"max\": 3523.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 13.450190178824867,\n 809.41,\n 73.00662309724117\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"e_r\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1389.7052701269513,\n \"min\": 0.0,\n \"max\": 3628.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 23.968009922822493,\n 1.47,\n 3628.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"low_c_pct\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1262.2340092945267,\n \"min\": 0.0,\n \"max\": 3607.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 36.80118186985084,\n 27.865068,\n 3607.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"e_con_pp\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 88165.48901548814,\n \"min\": 0.0,\n \"max\": 262585.7,\n \"num_unique_values\": 8,\n \"samples\": [\n 25743.98174504221,\n 13120.57,\n 3649.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"e_ppp\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1214.1951749643938,\n \"min\": 0.11,\n \"max\": 3442.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 5.3073450588901805,\n 4.3,\n 3442.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"v_co2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3743779.9338425444,\n \"min\": 9.999999776,\n \"max\": 10707219.73,\n \"num_unique_values\": 8,\n \"samples\": [\n 159866.46268574602,\n 10500.0,\n 3221.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"re_prime_pct\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 528.2882978472594,\n \"min\": 0.0,\n \"max\": 1512.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 11.986706828095237,\n 6.290766,\n 1512.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"gdp_growth\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1175.055748130778,\n \"min\": -62.07591958,\n \"max\": 3332.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 3.441610056684874,\n 3.559855155,\n 3332.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"gdp_pp\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 41365.7290464156,\n \"min\": 111.9272251,\n \"max\": 123514.1967,\n \"num_unique_values\": 8,\n \"samples\": [\n 13283.77434796745,\n 4578.633208,\n 3367.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"area\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3426838.2494322397,\n \"min\": 21.0,\n \"max\": 9984670.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 633213.4893092106,\n 117600.0,\n 3648.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lat\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1283.761964632404,\n \"min\": -40.900557,\n \"max\": 3648.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 18.246387760444083,\n 17.189877,\n 3648.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lon\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1286.535702326384,\n \"min\": -175.198242,\n \"max\": 3648.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 14.822694542171051,\n 19.145136,\n 3648.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 296
}
]
},
{
"cell_type": "code",
"source": [
"source_data_df.info()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "gbn3BKETrwrE",
"outputId": "a2ebb4e9-0072-4774-adee-c67844501fc7"
},
"execution_count": 297,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 3649 entries, 0 to 3648\n",
"Data columns (total 21 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 entity 3649 non-null object \n",
" 1 year 3649 non-null int64 \n",
" 2 access 3639 non-null float64\n",
" 3 access_cf 3480 non-null float64\n",
" 4 re_pp 2718 non-null float64\n",
" 5 flows_us 1560 non-null float64\n",
" 6 re_tot_pct 3455 non-null float64\n",
" 7 e_ff 3628 non-null float64\n",
" 8 e_nu 3523 non-null float64\n",
" 9 e_r 3628 non-null float64\n",
" 10 low_c_pct 3607 non-null float64\n",
" 11 e_con_pp 3649 non-null float64\n",
" 12 e_ppp 3442 non-null float64\n",
" 13 v_co2 3221 non-null float64\n",
" 14 re_prime_pct 1512 non-null float64\n",
" 15 gdp_growth 3332 non-null float64\n",
" 16 gdp_pp 3367 non-null float64\n",
" 17 pop_dens 3648 non-null object \n",
" 18 area 3648 non-null float64\n",
" 19 lat 3648 non-null float64\n",
" 20 lon 3648 non-null float64\n",
"dtypes: float64(18), int64(1), object(2)\n",
"memory usage: 598.8+ KB\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# sus energy data nulls\n",
"\n",
"n = source_data_df.shape[0]\n",
"not_null_sr = source_data_df.notnull().sum()\n",
"null_sr = source_data_df.isnull().sum()\n",
"null_ratio = null_sr / n\n",
"null_stats_df = pd.DataFrame({\"not_null\": not_null_sr, \"null\": null_sr, \"null_ratio\": null_ratio}).sort_values(by=\"null_ratio\", ascending=False)\n",
"null_stats_df"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 708
},
"id": "vywR1jmGyXM2",
"outputId": "b9469ffd-c794-497d-9858-25c7814e05cb"
},
"execution_count": 298,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" not_null null null_ratio\n",
"re_prime_pct 1512 2137 0.585640\n",
"flows_us 1560 2089 0.572486\n",
"re_pp 2718 931 0.255138\n",
"v_co2 3221 428 0.117292\n",
"gdp_growth 3332 317 0.086873\n",
"gdp_pp 3367 282 0.077281\n",
"e_ppp 3442 207 0.056728\n",
"re_tot_pct 3455 194 0.053165\n",
"access_cf 3480 169 0.046314\n",
"e_nu 3523 126 0.034530\n",
"low_c_pct 3607 42 0.011510\n",
"e_r 3628 21 0.005755\n",
"e_ff 3628 21 0.005755\n",
"access 3639 10 0.002740\n",
"lat 3648 1 0.000274\n",
"area 3648 1 0.000274\n",
"pop_dens 3648 1 0.000274\n",
"lon 3648 1 0.000274\n",
"e_con_pp 3649 0 0.000000\n",
"year 3649 0 0.000000\n",
"entity 3649 0 0.000000"
],
"text/html": [
"\n",
" <div id=\"df-35ded6b6-130a-4d84-a972-5a089520416d\" 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>not_null</th>\n",
" <th>null</th>\n",
" <th>null_ratio</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>re_prime_pct</th>\n",
" <td>1512</td>\n",
" <td>2137</td>\n",
" <td>0.585640</td>\n",
" </tr>\n",
" <tr>\n",
" <th>flows_us</th>\n",
" <td>1560</td>\n",
" <td>2089</td>\n",
" <td>0.572486</td>\n",
" </tr>\n",
" <tr>\n",
" <th>re_pp</th>\n",
" <td>2718</td>\n",
" <td>931</td>\n",
" <td>0.255138</td>\n",
" </tr>\n",
" <tr>\n",
" <th>v_co2</th>\n",
" <td>3221</td>\n",
" <td>428</td>\n",
" <td>0.117292</td>\n",
" </tr>\n",
" <tr>\n",
" <th>gdp_growth</th>\n",
" <td>3332</td>\n",
" <td>317</td>\n",
" <td>0.086873</td>\n",
" </tr>\n",
" <tr>\n",
" <th>gdp_pp</th>\n",
" <td>3367</td>\n",
" <td>282</td>\n",
" <td>0.077281</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e_ppp</th>\n",
" <td>3442</td>\n",
" <td>207</td>\n",
" <td>0.056728</td>\n",
" </tr>\n",
" <tr>\n",
" <th>re_tot_pct</th>\n",
" <td>3455</td>\n",
" <td>194</td>\n",
" <td>0.053165</td>\n",
" </tr>\n",
" <tr>\n",
" <th>access_cf</th>\n",
" <td>3480</td>\n",
" <td>169</td>\n",
" <td>0.046314</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e_nu</th>\n",
" <td>3523</td>\n",
" <td>126</td>\n",
" <td>0.034530</td>\n",
" </tr>\n",
" <tr>\n",
" <th>low_c_pct</th>\n",
" <td>3607</td>\n",
" <td>42</td>\n",
" <td>0.011510</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e_r</th>\n",
" <td>3628</td>\n",
" <td>21</td>\n",
" <td>0.005755</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e_ff</th>\n",
" <td>3628</td>\n",
" <td>21</td>\n",
" <td>0.005755</td>\n",
" </tr>\n",
" <tr>\n",
" <th>access</th>\n",
" <td>3639</td>\n",
" <td>10</td>\n",
" <td>0.002740</td>\n",
" </tr>\n",
" <tr>\n",
" <th>lat</th>\n",
" <td>3648</td>\n",
" <td>1</td>\n",
" <td>0.000274</td>\n",
" </tr>\n",
" <tr>\n",
" <th>area</th>\n",
" <td>3648</td>\n",
" <td>1</td>\n",
" <td>0.000274</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pop_dens</th>\n",
" <td>3648</td>\n",
" <td>1</td>\n",
" <td>0.000274</td>\n",
" </tr>\n",
" <tr>\n",
" <th>lon</th>\n",
" <td>3648</td>\n",
" <td>1</td>\n",
" <td>0.000274</td>\n",
" </tr>\n",
" <tr>\n",
" <th>e_con_pp</th>\n",
" <td>3649</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <td>3649</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>entity</th>\n",
" <td>3649</td>\n",
" <td>0</td>\n",
" <td>0.000000</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-35ded6b6-130a-4d84-a972-5a089520416d')\"\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-35ded6b6-130a-4d84-a972-5a089520416d 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-35ded6b6-130a-4d84-a972-5a089520416d');\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-7fdc2cd8-cb30-4393-840a-c42b2dae933e\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-7fdc2cd8-cb30-4393-840a-c42b2dae933e')\"\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-7fdc2cd8-cb30-4393-840a-c42b2dae933e button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
"\n",
" <div id=\"id_5d3e2979-39e0-45e8-bc0a-276bcf90bf9c\">\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('null_stats_df')\"\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_5d3e2979-39e0-45e8-bc0a-276bcf90bf9c button.colab-df-generate');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" buttonEl.onclick = () => {\n",
" google.colab.notebook.generateWithVariable('null_stats_df');\n",
" }\n",
" })();\n",
" </script>\n",
" </div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "null_stats_df",
"summary": "{\n \"name\": \"null_stats_df\",\n \"rows\": 21,\n \"fields\": [\n {\n \"column\": \"not_null\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 631,\n \"min\": 1512,\n \"max\": 3649,\n \"num_unique_values\": 15,\n \"samples\": [\n 3523,\n 3628,\n 1512\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"null\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 631,\n \"min\": 0,\n \"max\": 2137,\n \"num_unique_values\": 15,\n \"samples\": [\n 126,\n 21,\n 2137\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"null_ratio\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.1729936755807951,\n \"min\": 0.0,\n \"max\": 0.5856399013428336,\n \"num_unique_values\": 15,\n \"samples\": [\n 0.03453000822143053,\n 0.0057550013702384216,\n 0.5856399013428336\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 298
}
]
},
{
"cell_type": "code",
"source": [
"# What are the entities for which we have data\n",
"source_data_df.entity.unique()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "FbETzUm0rtrQ",
"outputId": "a1d52d9f-5f77-48e6-c253-0863337d4e72"
},
"execution_count": 299,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array(['Afghanistan', 'Albania', 'Algeria', 'Angola',\n",
" 'Antigua and Barbuda', 'Argentina', 'Armenia', 'Aruba',\n",
" 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain',\n",
" 'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin',\n",
" 'Bermuda', 'Bhutan', 'Bosnia and Herzegovina', 'Botswana',\n",
" 'Brazil', 'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia',\n",
" 'Cameroon', 'Canada', 'Cayman Islands', 'Central African Republic',\n",
" 'Chad', 'Chile', 'China', 'Colombia', 'Comoros', 'Congo',\n",
" 'Costa Rica', 'Croatia', 'Cuba', 'Cyprus', 'Czechia', 'Denmark',\n",
" 'Djibouti', 'Dominica', 'Dominican Republic', 'Ecuador', 'Egypt',\n",
" 'El Salvador', 'Equatorial Guinea', 'Eritrea', 'Estonia',\n",
" 'Eswatini', 'Ethiopia', 'Fiji', 'Finland', 'France',\n",
" 'French Guiana', 'Gabon', 'Gambia', 'Georgia', 'Germany', 'Ghana',\n",
" 'Greece', 'Grenada', 'Guatemala', 'Guinea', 'Guinea-Bissau',\n",
" 'Guyana', 'Haiti', 'Honduras', 'Hungary', 'Iceland', 'India',\n",
" 'Indonesia', 'Iraq', 'Ireland', 'Israel', 'Italy', 'Jamaica',\n",
" 'Japan', 'Jordan', 'Kazakhstan', 'Kenya', 'Kiribati', 'Kuwait',\n",
" 'Kyrgyzstan', 'Latvia', 'Lebanon', 'Lesotho', 'Liberia', 'Libya',\n",
" 'Lithuania', 'Luxembourg', 'Madagascar', 'Malawi', 'Malaysia',\n",
" 'Maldives', 'Mali', 'Malta', 'Mauritania', 'Mauritius', 'Mexico',\n",
" 'Mongolia', 'Montenegro', 'Morocco', 'Mozambique', 'Myanmar',\n",
" 'Namibia', 'Nauru', 'Nepal', 'Netherlands', 'New Caledonia',\n",
" 'New Zealand', 'Nicaragua', 'Niger', 'Nigeria', 'North Macedonia',\n",
" 'Norway', 'Oman', 'Pakistan', 'Panama', 'Papua New Guinea',\n",
" 'Paraguay', 'Peru', 'Philippines', 'Poland', 'Portugal',\n",
" 'Puerto Rico', 'Qatar', 'Romania', 'Rwanda',\n",
" 'Saint Kitts and Nevis', 'Saint Lucia',\n",
" 'Saint Vincent and the Grenadines', 'Samoa',\n",
" 'Sao Tome and Principe', 'Saudi Arabia', 'Senegal', 'Serbia',\n",
" 'Seychelles', 'Sierra Leone', 'Singapore', 'Slovakia', 'Slovenia',\n",
" 'Solomon Islands', 'Somalia', 'South Africa', 'South Sudan',\n",
" 'Spain', 'Sri Lanka', 'Sudan', 'Suriname', 'Sweden', 'Switzerland',\n",
" 'Tajikistan', 'Thailand', 'Togo', 'Tonga', 'Trinidad and Tobago',\n",
" 'Tunisia', 'Turkey', 'Turkmenistan', 'Tuvalu', 'Uganda', 'Ukraine',\n",
" 'United Arab Emirates', 'United Kingdom', 'United States',\n",
" 'Uruguay', 'Uzbekistan', 'Vanuatu', 'Yemen', 'Zambia', 'Zimbabwe'],\n",
" dtype=object)"
]
},
"metadata": {},
"execution_count": 299
}
]
},
{
"cell_type": "code",
"source": [
"# Inspect the trend for Low Carbon E to see if it's possibly a good target var\n",
"df = source_data_df\n",
"entity_df = df[df.entity == \"Canada\"]\n",
"low_c_pct = entity_df.low_c_pct\n",
"re_tot_pct = entity_df.re_tot_pct\n",
"re_prime_pct = entity_df.re_prime_pct\n",
"year = entity_df.year\n",
"\n",
"plt.plot(year, low_c_pct, marker='o', linestyle='-', label='Low Carbon % (low_c_pct)')\n",
"plt.plot(year, re_tot_pct, marker='o', linestyle='-', label='Renewable E Total % (re_tot_pct)')\n",
"plt.plot(year, re_prime_pct, marker='o', linestyle='-', label='Renewable E Prime % (re_prime_pct)')\n",
"\n",
"plt.xlabel('Year')\n",
"plt.ylabel('%')\n",
"plt.title('low_c_pct, re_tot_pct vs Year')\n",
"\n",
"plt.grid(True)\n",
"plt.legend()\n",
"plt.show()"
],
"metadata": {
"id": "rKvyhIHflsfP",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 472
},
"outputId": "aadcff89-936a-4deb-8d3e-0e29c989309c"
},
"execution_count": 331,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjQAAAHHCAYAAACoZcIpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACZ2klEQVR4nOzdd1xTVxsH8F8SQthhTxEQUHGh4sKFA8VZrdZV26q1tbbWumqtfWsVOxwdWlu1y1FbV62tbd1KBXHjHlBUBEFlyN4QkvP+EXMlEkgCiSTx+frJB3PHuefc3Nz75NxzzuUxxhgIIYQQQowYv7EzQAghhBDSUBTQEEIIIcToUUBDCCGEEKNHAQ0hhBBCjB4FNIQQQggxehTQEEIIIcToUUBDCCGEEKNHAQ0hhBBCjB4FNIQQQggxehTQkGfG5s2bwePxkJKS0thZIYQQomMU0BBClOzfvx9Llixp7GyoFR8fjyVLljQoQN22bRtWr16tszzV14MHD7BkyRJcvny5UfMhkUjQtm1b+Pv7o6ysrMb8lJQUWFlZYcyYMY2QO0LqRgENIUTJ/v37ERkZ2djZUCs+Ph6RkZEmE9BERkY2ekAjFArxww8/IDk5GR9//HGN+W+//TbMzc2xZs2aRsgdIXWjgIYQ8lSUlJQ0dhaIBkJDQzF9+nR88cUXuHHjBjd99+7d2LdvH5YtWwYPDw+954OOF6I1RsgzYtOmTQwAS05OVpq+du1a1qpVK2Zubs48PDzYW2+9xfLy8rj5X3/9NePz+UrTvvjiCwaAzZkzh5tWVVXFbGxs2HvvvadVvs6cOcMGDx7M7O3tmZWVFWvbti1bvXq1xusfO3aMAWA7duxgCxcuZG5ubszKyooNHz6cpaamarW9SZMmMQA1XtpavHgxA8Bu3LjBJkyYwOzt7Vn79u25+b/88gvr2LEjs7CwYA4ODmzcuHEq81obxWf55OvYsWPcMuo+17CwsBrr+/j4aJwHHx8fNnToUHbo0CEWHBzMRCIRCwoKYrt3766xbF5eHps9ezbz8fFh5ubmzMvLi7388svs4cOH3Of35GvTpk0qt7tr1y4GgEVHR9eY99133zEA7Nq1a4wxxtLT09nkyZOZl5cXMzc3Z+7u7uy5556r8R14Un5+PvPw8GA9e/ZkMpmMFRUVsSZNmrDQ0FAmk8kYY/LjKCIigtnZ2TFLS0vWu3dvduLECaV0UlJS2JtvvsmaN2/OLCwsmKOjI3vhhRdqbF/xeUZHR7M333yTubi4MHt7+zrzSMiTzJ5W4ESIIVqyZAkiIyMRHh6ON998E4mJiVi/fj3i4uJw8uRJCIVC9OrVCzKZDCdOnMCwYcMAALGxseDz+YiNjeXSunTpEoqLi9G7d2+Nt3/kyBEMGzYMHh4emDVrFtzd3ZGQkIC9e/di1qxZWpXl008/BY/Hw4IFC5CVlYXVq1cjPDwcly9fhqWlpUbbe+ONN/DgwQMcOXIEv/zyi1bbV2XMmDEIDAzEZ599BsYYl89FixZh7NixeO211/Dw4UN888036N27Ny5dugR7e3u16fbu3RvvvPMO1qxZgw8++ABBQUEAwP3V5HP93//+h4KCAty7dw+rVq0CANjY2GhVvlu3bmHcuHGYPn06Jk2ahE2bNmHMmDE4ePAgBgwYAAAoLi5Gr169kJCQgFdffRUdO3ZEdnY2/v77b9y7dw9BQUFYunQpPvroI0ybNg29evUCAHTv3l3lNocOHQobGxv89ttvCAsLU5q3c+dOtG7dGm3atAEAjB49Gjdu3MDMmTPh6+uLrKwsHDlyBKmpqfD19a21XGKxGGvWrMGYMWPw008/IT4+HpmZmThw4AB4PB7+/fdfDB48GCEhIVi8eDH4fD42bdqEfv36ITY2Fl26dAEAxMXF4dSpUxg/fjyaNGmClJQUrF+/Hn369EF8fDysrKyUtvvWW2/BxcUFH330EdXQEO01dkRFyNPyZA1NVlYWMzc3ZwMHDmRSqZRb7ttvv2UA2MaNGxljjEmlUmZnZ8fVvMhkMubk5MTGjBnDBAIBKyoqYowx9tVXX9WoyalLVVUV8/PzYz4+PjXWUfwK1oTiF76XlxcrLCzkpv/2228MAPv666+12t6MGTPqVStTnaKGZsKECUrTU1JSmEAgYJ9++qnS9GvXrjEzM7Ma0+uiqKmoXivDmOafK2OMDR06VKtamep8fHwYAKUamYKCAubh4cE6dOjATfvoo48YAPbHH3/USEOx3+Pi4uqslXnShAkTmKurK6uqquKmpaenMz6fz5YuXcoYk9cKAWCff/55fYrHGGNs2LBhTCwWM4FAwBYuXMjlOTAwkEVERCgdN6WlpczPz48NGDBAadqTTp8+zQCwLVu2cNMU382ePXsqlYkQbVAbGvLMOnr0KCorKzF79mzw+Y+/Cq+//jrs7Oywb98+AACfz0f37t1x/PhxAEBCQgJycnLw/vvvgzGG06dPA5DX2rRp00ajGgZAXqOTnJyM2bNn11iHx+NpXZ5XXnkFtra23PsXXngBHh4e2L9/v162p4np06crvf/jjz8gk8kwduxYZGdncy93d3cEBgbi2LFjDd6mpp+rLnh6euL555/n3tvZ2eGVV17BpUuXkJGRAUDe9iQ4OFhpOYX67vdx48YhKysL0dHR3LTff/8dMpkM48aNAwBYWlrC3Nwc0dHRyMvLq9d21q5di8rKSnh7e2PRokUAgMuXL+PWrVt48cUXkZOTw32GJSUl6N+/P44fPw6ZTMblQUEikSAnJwcBAQGwt7fHxYsXa2zv9ddfh0AgqFdeCaGAhjyz7t69CwBo0aKF0nRzc3M0a9aMmw8AvXr1woULF1BWVobY2Fh4eHigY8eOCA4O5m47nThxgrtdoImkpCQA4G4PNFRgYKDSex6Ph4CAAK4XkK63pwk/Pz+l97du3QJjDIGBgXBxcVF6JSQkICsrq8Hb1OZzbaiAgIAaQUnz5s0BQGm/63qfDxo0CGKxGDt37uSm7dy5E+3bt+e2LxKJsGLFChw4cABubm7o3bs3Vq5cyQVammjatClcXV3RunVrLji5desWAGDSpEk1PsOffvoJFRUVKCgoAACUlZXho48+gre3N0QiEZydneHi4oL8/HxumeqePF4I0Qa1oSFEAz179oREIsHp06cRGxvLBS69evVCbGws/vvvPzx8+FCrgOZZUP0XOgDIZDLweDwcOHBA5S9xbduwPKtEIhFGjhyJP//8E+vWrUNmZiZOnjyJzz77TGm52bNnY/jw4dizZw8OHTqERYsWYdmyZfj333/RoUOHem1bUfvy+eefo3379iqXUXyOM2fOxKZNmzB79myEhoZCLBaDx+Nh/PjxXDrVPXm8EKINCmjIM8vHxwcAkJiYiGbNmnHTKysrkZycjPDwcG5aly5dYG5ujtjYWMTGxmL+/PkA5I1Tf/zxR0RFRXHvNeXv7w8AuH79utK26kvxy1mBMYbbt2+jXbt2Wm1PX7efFHlgjMHPz4+rSaiv2vKpzefa0LLevn0bjDGldG7evAkAXKNbf39/XL9+vc506pOPcePG4eeff0ZUVBQSEhLAGONuN1Xn7++PefPmYd68ebh16xbat2+PL7/8Er/++qvW21SkB8hvr6k7bn///XdMmjQJX375JTetvLwc+fn59do2IXWhW07kmRUeHs4NEsYe9cABgA0bNqCgoABDhw7lpllYWKBz587Yvn07UlNTlWpoysrKsGbNGvj7+2s1PkfHjh3h5+eH1atX1zjBV8+PprZs2YKioiLu/e+//4709HQMHjxYq+1ZW1sDgF4uOqNGjYJAIEBkZGSNMjLGkJOTo3FateVTm8/V2tpa5a0PTT148AB//vkn976wsBBbtmxB+/bt4e7uDkDe0+jKlStKyyko8leffR4eHg5HR0fs3LkTO3fuRJcuXZRu2ZSWlqK8vFxpHX9/f9ja2qKiokLj7TwpJCQE/v7++OKLL1BcXFxj/sOHD7n/CwSCGp/zN998A6lUWu/tE1IbqqEhzywXFxcsXLgQkZGRGDRoEJ577jkkJiZi3bp16Ny5M1566SWl5Xv16oXly5dDLBajbdu2AABXV1e0aNECiYmJmDx5slbb5/P5WL9+PYYPH4727dtjypQp8PDwwH///YcbN27g0KFDWqXn6OiInj17YsqUKcjMzMTq1asREBCA119/XavthYSEAADeeecdREREQCAQYPz48QCAyZMn4+eff0ZycnKd3X5r4+/vj08++QQLFy5ESkoKRo4cCVtbWyQnJ+PPP//EtGnT8O6772qUVvv27SEQCLBixQoUFBRAJBKhX79+cHV11fhzDQkJwc6dOzF37lx07twZNjY2GD58uMblad68OaZOnYq4uDi4ublh48aNyMzMxKZNm7hl5s+fj99//x1jxozBq6++ipCQEOTm5uLvv//Gd999h+DgYPj7+8Pe3h7fffcdbG1tYW1tja5du9bZpkQoFGLUqFHYsWMHSkpK8MUXXyjNv3nzJvr374+xY8eiVatWMDMzw59//onMzEzu86wPPp+Pn376CYMHD0br1q0xZcoUeHl54f79+zh27Bjs7Ozwzz//AACGDRuGX375BWKxGK1atcLp06dx9OhRODk51Xv7hNSqMbpWEdIYahtY79tvv2UtW7ZkQqGQubm5sTfffFNl1+t9+/YxAGzw4MFK01977TUGgG3YsKFe+Tpx4gQbMGAAs7W1ZdbW1qxdu3bsm2++0Xh9Rbft7du3s4ULFzJXV1dmaWnJhg4dyu7evav19qqqqtjMmTOZi4sL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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"# Inspect the trend for Total TWh consumed to see if that's a good target\n",
"df = source_data_df\n",
"entity_df = df[df.entity == \"Canada\"]\n",
"e_r = entity_df.e_r\n",
"e_nu = entity_df.e_nu\n",
"e_ff = entity_df.e_ff\n",
"year = entity_df.year\n",
"\n",
"plt.plot(year, e_r, marker='o', linestyle='-', label='Electricity Renewables (e_r)')\n",
"plt.plot(year, e_nu, marker='o', linestyle='-', label='Electricity Nuclear (e_nu)')\n",
"plt.plot(year, e_ff, marker='o', linestyle='-', label='Electricity Fossil Fuels (e_ff)')\n",
"\n",
"plt.xlabel('Year')\n",
"plt.ylabel('TWh')\n",
"plt.title('e_r, e_ff vs Year')\n",
"\n",
"plt.grid(True)\n",
"plt.legend()\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 472
},
"id": "LQT21xlumf6j",
"outputId": "418558d6-1f28-4cba-dace-2ead02aa38c4"
},
"execution_count": 330,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"low_c_pct looks like a good target candidate variable because it has good coverage (98%), and it represents the % of energy coming from the combination of renewable and nuclear sources. It is a percent which is a well-scaled value for models to use.\n",
"\n",
"Predicting Fossil Fuel energy might be difficult because the tail end of the data is at an inflection point. However, the total energy consumption is steady and the renewable energy production is also increasing relatively steadily. So possibly, Fossil Fuel energy could be modelled from predicted Total-(Renewable+other)"
],
"metadata": {
"id": "72JtCqn17hzk"
}
},
{
"cell_type": "markdown",
"source": [
"******************\n",
"#### Investigate the education data that we want to merge in\n",
"******************"
],
"metadata": {
"id": "t8cuokCnbRde"
}
},
{
"cell_type": "code",
"source": [
"ed_data_df.head(2)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 318
},
"id": "B1EBHqVgeMmz",
"outputId": "5d89ced7-7823-4195-8065-fd5a94080c35"
},
"execution_count": 302,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Country Name Country Code \\\n",
"0 Argentina ARG \n",
"1 Argentina ARG \n",
"\n",
" Series Name Series Code \\\n",
"0 Barro-Lee: Average years of primary schooling,... BAR.PRM.SCHL.15UP.FE \n",
"1 Barro-Lee: Average years of primary schooling,... BAR.PRM.SCHL.15UP \n",
"\n",
" 1994 [YR1994] 1995 [YR1995] 1996 [YR1996] 1997 [YR1997] 1998 [YR1998] \\\n",
"0 .. 6.21 .. .. .. \n",
"1 .. 6.23 .. .. .. \n",
"\n",
" 1999 [YR1999] ... 2013 [YR2013] 2014 [YR2014] 2015 [YR2015] 2016 [YR2016] \\\n",
"0 .. ... .. .. .. .. \n",
"1 .. ... .. .. .. .. \n",
"\n",
" 2017 [YR2017] 2018 [YR2018] 2019 [YR2019] 2020 [YR2020] 2021 [YR2021] \\\n",
"0 .. .. .. .. .. \n",
"1 .. .. .. .. .. \n",
"\n",
" 2022 [YR2022] \n",
"0 .. \n",
"1 .. \n",
"\n",
"[2 rows x 33 columns]"
],
"text/html": [
"\n",
" <div id=\"df-497906fa-6ee9-473d-ab8a-9045020cc112\" 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>Country Name</th>\n",
" <th>Country Code</th>\n",
" <th>Series Name</th>\n",
" <th>Series Code</th>\n",
" <th>1994 [YR1994]</th>\n",
" <th>1995 [YR1995]</th>\n",
" <th>1996 [YR1996]</th>\n",
" <th>1997 [YR1997]</th>\n",
" <th>1998 [YR1998]</th>\n",
" <th>1999 [YR1999]</th>\n",
" <th>...</th>\n",
" <th>2013 [YR2013]</th>\n",
" <th>2014 [YR2014]</th>\n",
" <th>2015 [YR2015]</th>\n",
" <th>2016 [YR2016]</th>\n",
" <th>2017 [YR2017]</th>\n",
" <th>2018 [YR2018]</th>\n",
" <th>2019 [YR2019]</th>\n",
" <th>2020 [YR2020]</th>\n",
" <th>2021 [YR2021]</th>\n",
" <th>2022 [YR2022]</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Argentina</td>\n",
" <td>ARG</td>\n",
" <td>Barro-Lee: Average years of primary schooling,...</td>\n",
" <td>BAR.PRM.SCHL.15UP.FE</td>\n",
" <td>..</td>\n",
" <td>6.21</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>...</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Argentina</td>\n",
" <td>ARG</td>\n",
" <td>Barro-Lee: Average years of primary schooling,...</td>\n",
" <td>BAR.PRM.SCHL.15UP</td>\n",
" <td>..</td>\n",
" <td>6.23</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>...</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" <td>..</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2 rows × 33 columns</p>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-497906fa-6ee9-473d-ab8a-9045020cc112')\"\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-497906fa-6ee9-473d-ab8a-9045020cc112 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-497906fa-6ee9-473d-ab8a-9045020cc112');\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-76ddb600-3945-4c33-9a8f-35b0c04ec09a\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-76ddb600-3945-4c33-9a8f-35b0c04ec09a')\"\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-76ddb600-3945-4c33-9a8f-35b0c04ec09a 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": "ed_data_df"
}
},
"metadata": {},
"execution_count": 302
}
]
},
{
"cell_type": "code",
"source": [
"# It looks like there's a lot of Null formatted as '..'\n",
"# Q: How many of these nulls are there?\n",
"# A: It looks like only 4 years have significant data: 1995, 2000, 2005, 2010\n",
"\n",
"# Replace '..' with NaN\n",
"ed_data_df.replace('..', np.nan, inplace=True)\n",
"\n",
"null_str_count = ed_data_df.isnull().sum().sum()\n",
"print(f'Count of Null : {null_str_count}')\n",
"ed_data_df.info()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "58t5Fnsdd-yS",
"outputId": "1dca5aae-a7fc-487d-936e-5095bb419736"
},
"execution_count": 303,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Count of Null : 44995\n",
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 1735 entries, 0 to 1734\n",
"Data columns (total 33 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Country Name 1732 non-null object \n",
" 1 Country Code 1730 non-null object \n",
" 2 Series Name 1730 non-null object \n",
" 3 Series Code 1730 non-null object \n",
" 4 1994 [YR1994] 9 non-null object \n",
" 5 1995 [YR1995] 1157 non-null object \n",
" 6 1996 [YR1996] 9 non-null object \n",
" 7 1997 [YR1997] 3 non-null object \n",
" 8 1998 [YR1998] 6 non-null object \n",
" 9 1999 [YR1999] 7 non-null object \n",
" 10 2000 [YR2000] 1193 non-null object \n",
" 11 2001 [YR2001] 27 non-null object \n",
" 12 2002 [YR2002] 20 non-null object \n",
" 13 2003 [YR2003] 12 non-null object \n",
" 14 2004 [YR2004] 23 non-null object \n",
" 15 2005 [YR2005] 1174 non-null object \n",
" 16 2006 [YR2006] 29 non-null object \n",
" 17 2007 [YR2007] 36 non-null object \n",
" 18 2008 [YR2008] 31 non-null object \n",
" 19 2009 [YR2009] 34 non-null object \n",
" 20 2010 [YR2010] 1202 non-null object \n",
" 21 2011 [YR2011] 57 non-null object \n",
" 22 2012 [YR2012] 44 non-null object \n",
" 23 2013 [YR2013] 33 non-null object \n",
" 24 2014 [YR2014] 48 non-null object \n",
" 25 2015 [YR2015] 39 non-null object \n",
" 26 2016 [YR2016] 36 non-null object \n",
" 27 2017 [YR2017] 33 non-null object \n",
" 28 2018 [YR2018] 73 non-null object \n",
" 29 2019 [YR2019] 3 non-null object \n",
" 30 2020 [YR2020] 0 non-null float64\n",
" 31 2021 [YR2021] 0 non-null float64\n",
" 32 2022 [YR2022] 0 non-null float64\n",
"dtypes: float64(3), object(30)\n",
"memory usage: 447.4+ KB\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# How are the cols formatted?\n",
"ed_data_df.columns"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "NmHfwq8tUfoC",
"outputId": "bdf1bfa6-83c1-41d2-aff7-4758cd910ac8"
},
"execution_count": 304,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['Country Name', 'Country Code', 'Series Name', 'Series Code',\n",
" '1994 [YR1994]', '1995 [YR1995]', '1996 [YR1996]', '1997 [YR1997]',\n",
" '1998 [YR1998]', '1999 [YR1999]', '2000 [YR2000]', '2001 [YR2001]',\n",
" '2002 [YR2002]', '2003 [YR2003]', '2004 [YR2004]', '2005 [YR2005]',\n",
" '2006 [YR2006]', '2007 [YR2007]', '2008 [YR2008]', '2009 [YR2009]',\n",
" '2010 [YR2010]', '2011 [YR2011]', '2012 [YR2012]', '2013 [YR2013]',\n",
" '2014 [YR2014]', '2015 [YR2015]', '2016 [YR2016]', '2017 [YR2017]',\n",
" '2018 [YR2018]', '2019 [YR2019]', '2020 [YR2020]', '2021 [YR2021]',\n",
" '2022 [YR2022]'],\n",
" dtype='object')"
]
},
"metadata": {},
"execution_count": 304
}
]
},
{
"cell_type": "code",
"source": [
"# Clean Column formats\n",
"def extract_year_from_col_name(col_name):\n",
" return col_name[0:4]\n",
"\n",
"# Format year cols as simple columns\n",
"year_cols = ed_data_df.columns[4:]\n",
"non_year_cols = ed_data_df.columns[:4]\n",
"\n",
"ed_data_df.columns = list(non_year_cols) + [extract_year_from_col_name(col_name) for col_name in year_cols]\n",
"ed_data_df.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 236
},
"id": "pU1q95KnaDSm",
"outputId": "f9750a17-d296-4f44-9c78-8ff578ee75a8"
},
"execution_count": 305,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Country Name Country Code \\\n",
"0 Argentina ARG \n",
"1 Argentina ARG \n",
"2 Argentina ARG \n",
"3 Argentina ARG \n",
"4 Argentina ARG \n",
"\n",
" Series Name Series Code \\\n",
"0 Barro-Lee: Average years of primary schooling,... BAR.PRM.SCHL.15UP.FE \n",
"1 Barro-Lee: Average years of primary schooling,... BAR.PRM.SCHL.15UP \n",
"2 Adult literacy rate, population 15+ years, bot... SE.ADT.LITR.ZS \n",
"3 (De Facto) Average score for infrastructure re... SE.PRM.OPMN.2 \n",
"4 Barro-Lee: Average years of secondary schoolin... BAR.SEC.SCHL.15UP \n",
"\n",
" 1994 1995 1996 1997 1998 1999 ... 2013 2014 2015 2016 \\\n",
"0 NaN 6.21 NaN NaN NaN NaN ... NaN NaN NaN NaN \n",
"1 NaN 6.23 NaN NaN NaN NaN ... NaN NaN NaN NaN \n",
"2 NaN NaN NaN NaN NaN NaN ... 99.12195 98.99389 99.17996 99.12501 \n",
"3 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN \n",
"4 NaN 2.11 NaN NaN NaN NaN ... NaN NaN NaN NaN \n",
"\n",
" 2017 2018 2019 2020 2021 2022 \n",
"0 NaN NaN NaN NaN NaN NaN \n",
"1 NaN NaN NaN NaN NaN NaN \n",
"2 NaN 99.00387 NaN NaN NaN NaN \n",
"3 NaN NaN NaN NaN NaN NaN \n",
"4 NaN NaN NaN NaN NaN NaN \n",
"\n",
"[5 rows x 33 columns]"
],
"text/html": [
"\n",
" <div id=\"df-9d6dda8a-0f39-498e-bc35-1af75c7884df\" 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>Country Name</th>\n",
" <th>Country Code</th>\n",
" <th>Series Name</th>\n",
" <th>Series Code</th>\n",
" <th>1994</th>\n",
" <th>1995</th>\n",
" <th>1996</th>\n",
" <th>1997</th>\n",
" <th>1998</th>\n",
" <th>1999</th>\n",
" <th>...</th>\n",
" <th>2013</th>\n",
" <th>2014</th>\n",
" <th>2015</th>\n",
" <th>2016</th>\n",
" <th>2017</th>\n",
" <th>2018</th>\n",
" <th>2019</th>\n",
" <th>2020</th>\n",
" <th>2021</th>\n",
" <th>2022</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Argentina</td>\n",
" <td>ARG</td>\n",
" <td>Barro-Lee: Average years of primary schooling,...</td>\n",
" <td>BAR.PRM.SCHL.15UP.FE</td>\n",
" <td>NaN</td>\n",
" <td>6.21</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Argentina</td>\n",
" <td>ARG</td>\n",
" <td>Barro-Lee: Average years of primary schooling,...</td>\n",
" <td>BAR.PRM.SCHL.15UP</td>\n",
" <td>NaN</td>\n",
" <td>6.23</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Argentina</td>\n",
" <td>ARG</td>\n",
" <td>Adult literacy rate, population 15+ years, bot...</td>\n",
" <td>SE.ADT.LITR.ZS</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>99.12195</td>\n",
" <td>98.99389</td>\n",
" <td>99.17996</td>\n",
" <td>99.12501</td>\n",
" <td>NaN</td>\n",
" <td>99.00387</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Argentina</td>\n",
" <td>ARG</td>\n",
" <td>(De Facto) Average score for infrastructure re...</td>\n",
" <td>SE.PRM.OPMN.2</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Argentina</td>\n",
" <td>ARG</td>\n",
" <td>Barro-Lee: Average years of secondary schoolin...</td>\n",
" <td>BAR.SEC.SCHL.15UP</td>\n",
" <td>NaN</td>\n",
" <td>2.11</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 33 columns</p>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-9d6dda8a-0f39-498e-bc35-1af75c7884df')\"\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-9d6dda8a-0f39-498e-bc35-1af75c7884df 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-9d6dda8a-0f39-498e-bc35-1af75c7884df');\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-07135019-21f9-402e-b1aa-43919e1357ca\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-07135019-21f9-402e-b1aa-43919e1357ca')\"\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-07135019-21f9-402e-b1aa-43919e1357ca 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": "ed_data_df"
}
},
"metadata": {},
"execution_count": 305
}
]
},
{
"cell_type": "code",
"source": [
"country_names = ed_data_df['Country Name'].unique()\n",
"contry_codes = ed_data_df['Country Code'].unique()\n",
"print(f\"N Country Names: {country_names.shape}\")\n",
"print(f\"N Country Codes: {contry_codes.shape}\")\n",
"#print(f\"Country Names: {country_names}\")\n",
"#print(f\"Country Codes: {contry_codes}\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yMVu48C2bORE",
"outputId": "0e3a6b6f-1668-449c-8adc-4d63327bf2f4"
},
"execution_count": 306,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"N Country Names: (176,)\n",
"N Country Codes: (174,)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Adult Literacy seems to be the only\n",
"year_cols = [str(yr) for yr in range(2000, 2021)]\n",
"adult_literacy_df = ed_data_df[ed_data_df['Series Code'] == 'SE.ADT.LITR.ZS'][year_cols]\n",
"adult_literacy_df.head(2)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 141
},
"id": "dU6t6w5XdMtp",
"outputId": "08c6a45a-8080-4c7d-db3e-11bf50704873"
},
"execution_count": 307,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 ... \\\n",
"2 NaN 97.19331 NaN NaN NaN NaN 98.6108 NaN NaN 98.98342 ... \n",
"12 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... \n",
"\n",
" 2011 2012 2013 2014 2015 2016 2017 2018 \\\n",
"2 99.10833 99.10523 99.12195 98.99389 99.17996 99.12501 NaN 99.00387 \n",
"12 NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
" 2019 2020 \n",
"2 NaN NaN \n",
"12 NaN NaN \n",
"\n",
"[2 rows x 21 columns]"
],
"text/html": [
"\n",
" <div id=\"df-b3c7f5c8-7f98-45c2-8fd0-7d7c3d3f838f\" 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>2000</th>\n",
" <th>2001</th>\n",
" <th>2002</th>\n",
" <th>2003</th>\n",
" <th>2004</th>\n",
" <th>2005</th>\n",
" <th>2006</th>\n",
" <th>2007</th>\n",
" <th>2008</th>\n",
" <th>2009</th>\n",
" <th>...</th>\n",
" <th>2011</th>\n",
" <th>2012</th>\n",
" <th>2013</th>\n",
" <th>2014</th>\n",
" <th>2015</th>\n",
" <th>2016</th>\n",
" <th>2017</th>\n",
" <th>2018</th>\n",
" <th>2019</th>\n",
" <th>2020</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>NaN</td>\n",
" <td>97.19331</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>98.6108</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>98.98342</td>\n",
" <td>...</td>\n",
" <td>99.10833</td>\n",
" <td>99.10523</td>\n",
" <td>99.12195</td>\n",
" <td>98.99389</td>\n",
" <td>99.17996</td>\n",
" <td>99.12501</td>\n",
" <td>NaN</td>\n",
" <td>99.00387</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2 rows × 21 columns</p>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b3c7f5c8-7f98-45c2-8fd0-7d7c3d3f838f')\"\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-b3c7f5c8-7f98-45c2-8fd0-7d7c3d3f838f 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-b3c7f5c8-7f98-45c2-8fd0-7d7c3d3f838f');\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-eb9c4480-4f62-476a-908c-1e9581fb796d\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-eb9c4480-4f62-476a-908c-1e9581fb796d')\"\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-eb9c4480-4f62-476a-908c-1e9581fb796d 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": "adult_literacy_df"
}
},
"metadata": {},
"execution_count": 307
}
]
},
{
"cell_type": "markdown",
"source": [
"#### Explore Education Spending Data"
],
"metadata": {
"id": "07C-AjpehzVB"
}
},
{
"cell_type": "code",
"source": [
"ed_spend_df = pd.read_csv(ED_SPEND_DATA_PATH)"
],
"metadata": {
"id": "LeDfModzh2_A"
},
"execution_count": 308,
"outputs": []
},
{
"cell_type": "code",
"source": [
"ed_spend_df.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "eikfpGFBjvbI",
"outputId": "aa3119ac-5bf6-49c9-8088-e8453e8e9e5c"
},
"execution_count": 309,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Indicator Name Indicator Code \\\n",
"0 Government expenditure on education, total (% ... SE.XPD.TOTL.GD.ZS \n",
"1 Government expenditure on education, total (% ... SE.XPD.TOTL.GD.ZS \n",
"2 Government expenditure on education, total (% ... SE.XPD.TOTL.GD.ZS \n",
"3 Government expenditure on education, total (% ... SE.XPD.TOTL.GD.ZS \n",
"4 Government expenditure on education, total (% ... SE.XPD.TOTL.GD.ZS \n",
"\n",
" Country Name Country Code Year Value Disaggregation \n",
"0 Africa Eastern and Southern AFE 2022 3.906225 NaN \n",
"1 Africa Eastern and Southern AFE 2021 4.632255 NaN \n",
"2 Africa Eastern and Southern AFE 2020 4.352440 NaN \n",
"3 Africa Eastern and Southern AFE 2019 4.541950 NaN \n",
"4 Africa Eastern and Southern AFE 2018 4.739750 NaN "
],
"text/html": [
"\n",
" <div id=\"df-6f7c1ac6-7f90-4088-8ba3-b184dceed2a0\" 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>Indicator Name</th>\n",
" <th>Indicator Code</th>\n",
" <th>Country Name</th>\n",
" <th>Country Code</th>\n",
" <th>Year</th>\n",
" <th>Value</th>\n",
" <th>Disaggregation</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Government expenditure on education, total (% ...</td>\n",
" <td>SE.XPD.TOTL.GD.ZS</td>\n",
" <td>Africa Eastern and Southern</td>\n",
" <td>AFE</td>\n",
" <td>2022</td>\n",
" <td>3.906225</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Government expenditure on education, total (% ...</td>\n",
" <td>SE.XPD.TOTL.GD.ZS</td>\n",
" <td>Africa Eastern and Southern</td>\n",
" <td>AFE</td>\n",
" <td>2021</td>\n",
" <td>4.632255</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Government expenditure on education, total (% ...</td>\n",
" <td>SE.XPD.TOTL.GD.ZS</td>\n",
" <td>Africa Eastern and Southern</td>\n",
" <td>AFE</td>\n",
" <td>2020</td>\n",
" <td>4.352440</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Government expenditure on education, total (% ...</td>\n",
" <td>SE.XPD.TOTL.GD.ZS</td>\n",
" <td>Africa Eastern and Southern</td>\n",
" <td>AFE</td>\n",
" <td>2019</td>\n",
" <td>4.541950</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Government expenditure on education, total (% ...</td>\n",
" <td>SE.XPD.TOTL.GD.ZS</td>\n",
" <td>Africa Eastern and Southern</td>\n",
" <td>AFE</td>\n",
" <td>2018</td>\n",
" <td>4.739750</td>\n",
" <td>NaN</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-6f7c1ac6-7f90-4088-8ba3-b184dceed2a0')\"\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-6f7c1ac6-7f90-4088-8ba3-b184dceed2a0 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-6f7c1ac6-7f90-4088-8ba3-b184dceed2a0');\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-10d58071-3757-409b-b008-a1d82c290eea\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-10d58071-3757-409b-b008-a1d82c290eea')\"\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-10d58071-3757-409b-b008-a1d82c290eea 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": "ed_spend_df",
"summary": "{\n \"name\": \"ed_spend_df\",\n \"rows\": 6115,\n \"fields\": [\n {\n \"column\": \"Indicator Name\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"Government expenditure on education, total (% of GDP)\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Indicator Code\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"SE.XPD.TOTL.GD.ZS\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Country Name\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 248,\n \"samples\": [\n \"MIC\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Country Code\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 248,\n \"samples\": [\n \"MIC\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Year\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 13,\n \"min\": 1970,\n \"max\": 2022,\n \"num_unique_values\": 53,\n \"samples\": [\n 1999\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Value\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.8073728276906982,\n \"min\": 0.0,\n \"max\": 44.3339805603027,\n \"num_unique_values\": 5387,\n \"samples\": [\n 3.8861300945282\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Disaggregation\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": null,\n \"max\": null,\n \"num_unique_values\": 0,\n \"samples\": [],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 309
}
]
},
{
"cell_type": "code",
"source": [
"# Some cols seem to have only one value, let's confirm\n",
"print(ed_spend_df['Indicator Name'].value_counts())\n",
"print(ed_spend_df['Indicator Code'].value_counts())\n",
"print(ed_spend_df['Disaggregation'].value_counts())"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "4uOIV8y4m9Z6",
"outputId": "f74e3c90-0a35-43ca-a0c8-3c505955baf0"
},
"execution_count": 310,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Government expenditure on education, total (% of GDP) 6115\n",
"Name: Indicator Name, dtype: int64\n",
"SE.XPD.TOTL.GD.ZS 6115\n",
"Name: Indicator Code, dtype: int64\n",
"Series([], Name: Disaggregation, dtype: int64)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Let's look only at the key Country Name, year and Value\n",
"ed_spend_core_df = ed_spend_df[['Country Name', 'Year', 'Value']].copy()"
],
"metadata": {
"id": "UILymPe4m1PP"
},
"execution_count": 311,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Does the 'Country Name' col line up with the countries in source_data_df?\n",
"ed_countries = ed_spend_core_df['Country Name'].unique()\n",
"source_countries = source_data_df.entity.unique()\n",
"print(f\"N Ed Countries: {ed_countries.shape}\")\n",
"print(f\"N Source Countries: {source_countries.shape}\")\n",
"#print(f\"Country Names: {ed_countries}\")\n",
"#print(f\"Country Codes: {source_countries}\")\n",
"intersect_countries = np.intersect1d(ed_countries, source_countries)\n",
"print(f\"N Intersect Country Names: {intersect_countries.shape}\")\n",
"print(\"Countries not covered: \" , np.setdiff1d(source_countries, intersect_countries))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Ulb72i3OoO_H",
"outputId": "e6b8fbe7-8567-4dca-e73a-47aae6c3d288"
},
"execution_count": 312,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"N Ed Countries: (248,)\n",
"N Source Countries: (176,)\n",
"N Intersect Country Names: (161,)\n",
"Countries not covered: ['Bahamas' 'Bosnia and Herzegovina' 'Congo' 'Egypt' 'French Guiana'\n",
" 'Gambia' 'Kyrgyzstan' 'Montenegro' 'New Caledonia'\n",
" 'Saint Kitts and Nevis' 'Saint Lucia' 'Saint Vincent and the Grenadines'\n",
" 'Slovakia' 'Turkey' 'Yemen']\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Some of those missed countries are small, possibly there is something lost\n",
"# Investigate larger countries\n",
"# Why not Egypt? for ex\n",
"# check substrs of each country to see if we can map them\n",
"country_substrs = [\"Egy\", \"Turk\", \"Lucia\", \"Slov\", \"Yem\",\"Congo\", \"Caled\", \"Kitt\", \"Bos\",\"Baham\",\"Monte\"]\n",
"for c_substr in country_substrs:\n",
" source_match = [ctr_str for ctr_str in source_countries if c_substr in ctr_str]\n",
" ed_match = [ctr_str for ctr_str in ed_countries if c_substr in ctr_str]\n",
" print(source_match, ed_match)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "olm15eU0p44B",
"outputId": "f5c0f680-8a5e-499b-b5f4-8fbb76513be6"
},
"execution_count": 313,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"['Egypt'] ['Egypt, Arab Rep.']\n",
"['Turkey', 'Turkmenistan'] ['Turkiye', 'Turkmenistan', 'Turks and Caicos Islands']\n",
"['Saint Lucia'] ['St. Lucia']\n",
"['Slovakia', 'Slovenia'] ['Slovak Republic', 'Slovenia']\n",
"['Yemen'] ['Yemen, Rep.']\n",
"['Congo'] ['Congo, Dem. Rep.', 'Congo, Rep.']\n",
"['New Caledonia'] []\n",
"['Saint Kitts and Nevis'] ['St. Kitts and Nevis']\n",
"['Bosnia and Herzegovina'] []\n",
"['Bahamas'] ['Bahamas, The']\n",
"['Montenegro'] []\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Generally the source_countries names are simpler, lets use those as the default\n",
"country_name_map = {\n",
" \"Egypt, Arab Rep.\": \"Egypt\",\n",
" \"Turkiye\": \"Turkey\",\n",
" \"St. Lucia\": \"Saint Lucia\",\n",
" \"Slovak Republic\": \"Slovakia\",\n",
" \"Yemen, Rep.\": \"Yemen\",\n",
" \"Congo, Rep.\": \"Congo\",\n",
" \"St. Kitts and Nevis\": \"Saint Kitts and Nevis\",\n",
" \"Bahamas, The\": \"Bahamas\"\n",
"}\n",
"\n",
"# Rename rows according to map\n",
"ed_spend_core_df.loc[:, 'Country Name'] = ed_spend_core_df['Country Name'].replace(country_name_map)"
],
"metadata": {
"id": "UkMw7MrcrOxj"
},
"execution_count": 314,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Prepare the column to merge into main dataset\n",
"ed_spend_core_df.rename(columns={'Value': 'ed_gdp_pct'}, inplace=True)"
],
"metadata": {
"id": "-82D7kseimmQ"
},
"execution_count": 315,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Merge in Education GDP Data\n",
"merged_df = pd.merge(source_data_df, ed_spend_core_df, left_on=['entity', 'year'], right_on=['Country Name', 'Year'])"
],
"metadata": {
"id": "ca7ssZcmqEWw"
},
"execution_count": 316,
"outputs": []
},
{
"cell_type": "code",
"source": [
"merged_df.info()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "y15bgV2FkLPR",
"outputId": "6f8d51ca-6afb-461e-ae4e-8816f3600c1f"
},
"execution_count": 317,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 2581 entries, 0 to 2580\n",
"Data columns (total 24 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 entity 2581 non-null object \n",
" 1 year 2581 non-null int64 \n",
" 2 access 2581 non-null float64\n",
" 3 access_cf 2512 non-null float64\n",
" 4 re_pp 1737 non-null float64\n",
" 5 flows_us 1143 non-null float64\n",
" 6 re_tot_pct 2425 non-null float64\n",
" 7 e_ff 2581 non-null float64\n",
" 8 e_nu 2493 non-null float64\n",
" 9 e_r 2581 non-null float64\n",
" 10 low_c_pct 2569 non-null float64\n",
" 11 e_con_pp 2581 non-null float64\n",
" 12 e_ppp 2443 non-null float64\n",
" 13 v_co2 2319 non-null float64\n",
" 14 re_prime_pct 1265 non-null float64\n",
" 15 gdp_growth 2435 non-null float64\n",
" 16 gdp_pp 2446 non-null float64\n",
" 17 pop_dens 2581 non-null object \n",
" 18 area 2581 non-null float64\n",
" 19 lat 2581 non-null float64\n",
" 20 lon 2581 non-null float64\n",
" 21 Country Name 2581 non-null object \n",
" 22 Year 2581 non-null int64 \n",
" 23 ed_gdp_pct 2581 non-null float64\n",
"dtypes: float64(19), int64(2), object(3)\n",
"memory usage: 504.1+ KB\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Save the resulting merged dataset\n",
"MERGED_DATA_FID = \"cleaned_sus_energy_data.csv\"\n",
"MERGED_DATA_PATH = DATA_DIR + MERGED_DATA_FID\n",
"merged_df.to_csv(MERGED_DATA_PATH, index=True)"
],
"metadata": {
"id": "xNklAyMHsGzD"
},
"execution_count": 333,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment