From 62ba6984b190c43c38a2e7eb5f36f748c1aa5690 Mon Sep 17 00:00:00 2001 From: Ludee Date: Thu, 9 Aug 2018 17:25:59 +0200 Subject: [PATCH] add jupyter notebook vis #14 --- .../reeem_jupyter/reeem_db_plot_Plexos.ipynb | 1043 +++++++++++++++++ 1 file changed, 1043 insertions(+) create mode 100644 database_views/reeem_jupyter/reeem_db_plot_Plexos.ipynb diff --git a/database_views/reeem_jupyter/reeem_db_plot_Plexos.ipynb b/database_views/reeem_jupyter/reeem_db_plot_Plexos.ipynb new file mode 100644 index 0000000..2fe69a1 --- /dev/null +++ b/database_views/reeem_jupyter/reeem_db_plot_Plexos.ipynb @@ -0,0 +1,1043 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Header\n", + "\n", + "\n", + "\n", + "__copyright__ \t= \"© Reiner Lemoine Institut\"
\n", + "__license__ \t= \"GNU Affero General Public License Version 3 (AGPL-3.0)\"
\n", + "__url__ \t\t= \"https://www.gnu.org/licenses/agpl-3.0.en.html\"
\n", + "__author__ \t\t= \"Ludwig Hülk\"
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Import" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import sys\n", + "import os\n", + "import getpass\n", + "import pandas as pd\n", + "import numpy as np\n", + "from sqlalchemy import *\n", + "# plot\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.ticker as mticker\n", + "import plotly.graph_objs as go\n", + "import plotly.offline as pltly\n", + "import colorlover as cl\n", + "import seaborn as sns\n", + "# notebook\n", + "from IPython.display import Image\n", + "from IPython.core.display import HTML \n", + "\n", + "pltly.init_notebook_mode(connected=True)\n", + "%matplotlib inline\n", + "\n", + "version = 'v0.1.3 (jupyther)'\n", + "project = 'REEEM'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Database Connection\n", + "\n", + "This function creates a database connection to the **reeem_db**.
\n", + "The default user is **reeem_vis**, a user that has only read rights." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def reeem_session():\n", + " \"\"\"SQLAlchemy session object with valid connection to reeem database\"\"\"\n", + " \n", + " print('Please provide connection parameters to database:\\n' +\n", + " 'Hit [Enter] to take defaults')\n", + " host = '130.226.55.43' # input('host (default 130.226.55.43): ')\n", + " port = '5432' # input('port (default 5432): ')\n", + " database = 'reeem' # input(\"database name (default 'reeem'): \")\n", + " user = 'reeem_vis' # input('user (default postgres): ')\n", + " # password = input('password: ')\n", + " password = getpass.getpass(prompt='password: ',\n", + " stream=sys.stderr)\n", + " con = create_engine(\n", + " 'postgresql://' + '%s:%s@%s:%s/%s' % (user,\n", + " password,\n", + " host,\n", + " port,\n", + " database)).connect()\n", + " print('Password correct! Database connection established.')\n", + " return con" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Access Data\n", + "\n", + "This section establishes the database connection and asks for the **password**.
\n", + "The username can be changed in the corresponding function in the section **Database Connection** above.
\n", + "If you don't have a username or forgot your password please contact your database admins." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Anaconda3\\envs\\reeem-vis\\lib\\site-packages\\ipykernel_launcher.py:12: UserWarning:\n", + "\n", + "The `stream` parameter of `getpass.getpass` will have no effect when using ipykernel\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Please provide connection parameters to database:\n", + "Hit [Enter] to take defaults\n", + "password: ········\n", + "Password correct! Database connection established.\n" + ] + } + ], + "source": [ + "con = reeem_session()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# View 0.1: Existing entries in one column" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Database Query\n", + "\n", + "This section can be used to query one specific database **column** from one database table (**FROM**).
\n", + "The result is saved to a pandas.DataFrame (**df_0**) and printed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Database select (SQL)\n", + "column = 'nid,category,indicator' # id, pathway, version, region, year, indicator, category, value, unit\n", + "sql = text(\"\"\"\n", + " SELECT {0}, count(*) AS count\n", + " FROM model_draft.reeem_plexos_input\n", + " GROUP BY {0} \n", + " ORDER BY {0}; \"\"\".format(column))\n", + "df = pd.read_sql_query(sql, con)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Database select (SQL)\n", + "column = 'year' # id, pathway, version, region, year, indicator, category, value, unit\n", + "sql = text(\"\"\"\n", + " SELECT {0}\n", + " FROM model_draft.reeem_plexos_input\n", + " GROUP BY {0} \n", + " ORDER BY {0}; \"\"\".format(column))\n", + "df = pd.read_sql_query(sql, con)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# View 0.3: Table metadata\n", + "## Database Query\n", + "\n", + "This section can be used to get the metadata from one database table.
\n", + "The result is printed.
" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 {\"title\": \"REEEM Plexos Input\",\\n \"descript...\n", + "Name: obj_description, dtype: object" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Database select (SQL)\n", + "sql = text(\"\"\"SELECT obj_description('model_draft.reeem_plexos_input'::regclass);\"\"\")\n", + "df_meta = pd.read_sql_query(sql, con).loc[:,'obj_description']\n", + "df_meta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# View 3: One indicator for all regions in one pathway over time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Database Query\n", + "\n", + "This section can be used to query one specific **indicator** for all regions from one database table (_table_).
\n", + "Indicators are identified by the **nid** (_filter 1_).
\n", + "Only **region** _EU28_ is excluded (_filter 2_).
\n", + "It is possible to select one specific **pathway** (_filter 3_) and one specific data **version** (_filter 4_).
\n", + "To querry additional coulmns from the database table add the names to the **SELECT** statement (_column_).
\n", + "The sortation is done by the **ORDER BY** (_sorting_).
\n", + "The result from the database is saved to a pandas.DataFrame (**df_3**) and can be printed." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# Database select (SQL)\n", + "sql = text(\"\"\"\n", + " SELECT pathway, version, region, year, nid, schema, category, indicator, value, unit -- column\n", + " FROM model_draft.reeem_plexos_input -- table\n", + " WHERE nid = 1 -- filter 1\n", + " AND pathway = 'Base' -- filter 2\n", + " AND version = 'DataV1' -- filter 3\n", + " ORDER BY pathway, version, region, year; -- sorting \"\"\")\n", + "df_3 = pd.read_sql_query(sql, con)\n", + "#df_3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Metadata\n", + "\n", + "The important information from the above select (**df_3**) is collected in a Dictionary (**info_dict_3**)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Filename : ['2018-08-09_reeem_Plexos_allregions_Electricity Demand']\n", + "Category : ['demand extraction ']\n", + "Indicator : ['Electricity Demand']\n", + "Unit : ['TWh']\n", + "Pathway : ['Base']\n", + "Year : [2030]\n", + "Region : ['BG' 'HR' 'HU' 'RO' 'SI']\n", + "Y-Axis : ['Electricity Demand in TWh']\n", + "Title : ['demand extraction in all regions']\n", + "Metadata : 0 {\"title\": \"REEEM Plexos Input\",\\n \"descript...\n", + "Name: obj_description, dtype: object\n" + ] + } + ], + "source": [ + "# Facts dict\n", + "info_dict_3 = {}\n", + "info_dict_3['Filename'] = ['{0}_reeem_Plexos_allregions_{1}' .format(\n", + " pd.to_datetime('today').strftime(\"%Y-%m-%d\"),\n", + " df_3.loc[:,'indicator'].unique()[0])]\n", + "info_dict_3['Category'] = df_3.loc[:,'category'].unique()\n", + "info_dict_3['Indicator'] = df_3.loc[:,'indicator'].unique()\n", + "info_dict_3['Unit'] = df_3.loc[:,'unit'].unique()\n", + "info_dict_3['Pathway'] = df_3.loc[:,'pathway'].unique()\n", + "info_dict_3['Year'] = df_3.loc[:,'year'].unique().tolist()\n", + "info_dict_3['Region'] = df_3.loc[:,'region'].unique()\n", + "info_dict_3['Y-Axis'] = ['{} in {}'.format(*info_dict_3['Indicator'], *info_dict_3['Unit'])]\n", + "info_dict_3['Title'] = ['{} in all regions'.format(*info_dict_3['Category'])]\n", + "info_dict_3['Metadata'] = df_meta\n", + "\n", + "# Print facts\n", + "for x in info_dict_3:\n", + " print(x,':',info_dict_3[x])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stack data\n", + "\n", + "This pivot function reorganises the data and makes each pathway a column. The year is used as the index.
\n", + "The result is saved to a new dataframe (**df_3p**) and can be printed." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "# Reshape dataframe\n", + "df_3p = df_3.pivot(index='region', columns='indicator', values='value')\n", + "#df_3p" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot\n", + "\n", + "This is a basic plot with [matplotlib](https://matplotlib.org/).
\n", + "The title and y-axis labels are taken from the **info_dict_3**. They can be exchanged with manual text." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, 53.59574977950043)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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Kk8++SR33HEHgwYN4qabbmLOnDlcdtllABw7doyRI0fSpUsXunbtyscffwxA8+bN2b9/Pw8//DCbNm0iKSmJP/3pT9x44418/vnnJ3PdcMMNfPHFF6Vmb9myJWPGjOGll14C4Pjx49x6660kJydzzjnnnNzfhAkTGDJkCJdffjktWrTglVdeYcyYMZxzzjmcf/75HDx4EIC33nqL5ORkzj77bK655hqysrIAZ4T53nvvpWfPnrRs2fLkaLO1lnvuuYeOHTsyePBgMjIyKupl+QWNRIuIiEiV9NT/rWFt+pFTfv9Q1gk2ZhzDWzNnnSjgh80H+M2L86gTU63E+3RsUosnLu9U6nGzs7NJSko6ef2RRx5h2LBhJ6/v37+fZ555hpkzZ1KjRg2ee+45xowZw8MPP8ywYcOYOnUqycnJHDlyhJiYGP7617+ydOlSXnnlFQCefPJJli1bxoIFC4iOjmbOnDkn9/30008TFxfHqlWrnMd46NAvsj377LOsXr365Ej53LlzGTt2LFdeeSWHDx/mu+++82mqxrnnnsv69esB+Nvf/ka/fv0YP348mZmZpKSkMGDAAABWr17N8uXLycnJoXXr1jz33HMsX76cBx54gHfffZf777+fq6++mttvvx2Axx57jHfeeYdRo0YBsHv3bhYsWMD69eu54oorGDp0KJ9++ikbNmxg1apV7N27l44dO3LrrbeeNnNZqYgWERERKUFWbgHFB50LrXN7nZjy7/d00zl++OEH1q5dywUXXADAiRMn6NGjBxs2bKBx48YkJycDUKtWrVPu44orriA6OvpXt8+cOZMpU6acvF6nTp1Ss/bu3Zu7776bjIwMPvnkE6655hoiIk5fPlr78xM3ffp0vvjiC/79738DzjKD27dvB6Bv377ExsYSGxtLXFwcl19+OQBdunRh5cqVgFNoP/bYY2RmZnLs2DEuvvjik/seMmQIYWFhdOzYkb179wIwb948hg8fTnh4OE2aNKFfv36nzVseKqJFRESkSjrdiPGsdXsZNXk5WScKTt4WUy2cp67sRP8OjfyWy1rLwIEDmTx58i9uX7lypc9Ls9WoUeOU+y7r8m433ngj77//PlOmTGH8+PE+3Wf58uV06NDh5DE//vhj2rVr94ttFi1aRPXq1U9eDwsLO3k9LCyM/Px8wJm28dlnn3H22WczYcKEX4ys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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot for one indicator and one pathway\n", + "fig = plt.figure(figsize=(12, 10))\n", + "ax = plt.subplot()\n", + "# plt.title(r'CO2-Emissions in all regions', fontsize=16) # Manual title\n", + "plt.title(*info_dict_3['Title'], fontsize=16) # Title from info\n", + "# plt.ylabel(r'CO2-Emissions in Mt') # Manual label\n", + "plt.ylabel(*info_dict_3['Y-Axis']) # Label from info\n", + "plt.plot(df_3p, \n", + " marker=\"o\", markersize=5)\n", + "plt.legend(df_3p)\n", + "ax.set_ylim(ymin=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interactive Plot\n", + "\n", + "This is a basic interactive plot with [Plotly](https://plot.ly/python/).
\n", + "You can hover over the elements of the plot and observe the data.
\n", + "The different pathways can be switched on and off." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "name": "BG", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 29.0430005399997 + ] + }, + { + "name": "HR", + "type": "scatter", + "x": [ + "HR" + ], + "y": [ + 12.9029999999999 + ] + }, + { + "name": "HU", + "type": "scatter", + "x": [ + "HU" + ], + "y": [ + 42.1950009999792 + ] + }, + { + "name": "RO", + "type": "scatter", + "x": [ + "RO" + ], + "y": [ + 51.6579997900004 + ] + }, + { + "name": "SI", + "type": "scatter", + "x": [ + "SI" + ], + "y": [ + 14.1769999999944 + ] + } + ], + "layout": { + "height": 800, + "title": "demand extraction in all regions", + "width": 800, + "yaxis": { + "title": "Electricity Demand in TWh" + } + } + }, + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Iterate over pathways and add to data\n", + "regions = df_3.loc[:,'region'].unique()\n", + "data = []\n", + "for region in regions:\n", + " data.append(go.Scatter(\n", + " x = df_3.loc[df_3['region'] == region].loc[:,'region'],\n", + " y = df_3.loc[df_3['region'] == region].loc[:,'value'],\n", + " name = region))\n", + "\n", + "# Set layout\n", + "layout = go.Layout(\n", + " height=800, width = 800,\n", + " #title='CO2-Emissions in EU28',\n", + " title=''.join(info_dict_3['Title']),\n", + " # yaxis=dict(title='CO2-Emissions in Mt') )\n", + " yaxis=dict(title=''.join(info_dict_3['Y-Axis'])) )\n", + "ifig = go.Figure(data=data, layout=layout)\n", + "pltly.iplot(ifig)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save results to files\n", + "\n", + "The results are saved to cooresponding files in a folder named **data**.
\n", + "The **info_dict** is saved to a text file (txt).
\n", + "The **data** is saved to a table (csv).
\n", + "The **plot** is saved as an image (png).
\n", + "The **interactive plot** is saved as a webpage (html). It will also open in a new tab of your browser.
" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Facts saved to file: data/2018-08-09_reeem_Plexos_allregions_Electricity Demand.txt\n", + "Data saved to file: data/2018-08-09_reeem_Plexos_allregions_Electricity Demand.csv\n", + "Data saved to file: data/2018-08-09_reeem_Plexos_allregions_Electricity Demand_pivot.csv\n", + "Plot saved to file: data/2018-08-09_reeem_Plexos_allregions_Electricity Demand.png\n", + "Interactive plot saved to file: data/2018-08-09_reeem_Plexos_allregions_Electricity Demand.html\n" + ] + } + ], + "source": [ + "# Write facts to textfile\n", + "filename = ('data/{}.txt').format(*info_dict_3['Filename'])\n", + "with open(filename,'w') as tfile:\n", + " for i in info_dict_3.keys():\n", + " tfile.write(i + \": \" + ', '.join([str(x) for x in info_dict_3[i]]) + \"\\n\")\n", + "tfile.close()\n", + "print(\"Facts saved to file:\", filename)\n", + "\n", + "# Save data to CSV\n", + "csvname = 'data/{}.csv' .format(*info_dict_3['Filename'])\n", + "df_3.to_csv(csvname, sep=';')\n", + "print(\"Data saved to file:\", csvname)\n", + "\n", + "# Save pivot data to CSV\n", + "csvname = 'data/{}_pivot.csv' .format(*info_dict_3['Filename'])\n", + "df_3p.to_csv(csvname, sep=';')\n", + "print(\"Data saved to file:\", csvname)\n", + "\n", + "# Save plot as file\n", + "plotname = 'data/{}.png' .format(*info_dict_3['Filename'])\n", + "fig.savefig(plotname, bbox_inches='tight')\n", + "print(\"Plot saved to file:\", plotname)\n", + "\n", + "# Save interactive plot\n", + "htmlname = 'data/{}.html' .format(*info_dict_3['Filename'])\n", + "pltly.plot(ifig, filename=htmlname)\n", + "print(\"Interactive plot saved to file:\", htmlname)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# View 4: All indicators for one region in one pathway over time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Database Query\n", + "\n", + "This section can be used to query all **indicators** for one **region** (_filter 2_) from one database table (_table_).
\n", + "Indicators are identified by the **nid**.
\n", + "It is possible to select one specific **pathway** (_filter 3_) and one specific data **version** (_filter 4_).
\n", + "To querry additional coulmns from the database table add the names to the **SELECT** statement (_column_).
\n", + "The sortation is done by the **ORDER BY** (_sorting_).
\n", + "The result from the database is saved to a pandas.DataFrame (**df_4**) and can be printed." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "# Database select (SQL)\n", + "sql = text(\"\"\"\n", + " SELECT pathway, version, region, year, nid, indicator, category, value, unit -- column\n", + " FROM model_draft.reeem_plexos_input\n", + " WHERE category = 'Installed Generation Capacities'\n", + " AND region = 'BG'\n", + " AND pathway = 'Base'\n", + " AND version = 'DataV1'\n", + " ORDER BY pathway, version, year, region, nid; \"\"\")\n", + "df_4 = pd.read_sql_query(sql, con)\n", + "#print(df_4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Metadata\n", + "\n", + "The important information from the above select (**df_4**) is collected in a Dictionary (**info_dict_4**)." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Filename : ['2018-08-09_reeem_Plexos_allindicators_BG']\n", + "Category : ['Installed Generation Capacities']\n", + "Indicator : ['Coal' 'Lignite' 'Oil' 'Natural Gas / non renew.' 'Nuclear'\n", + " 'Waste non renewable + Industrial Waste Heat'\n", + " 'Biomass solid / Waste ren.' 'Biogas / Biofuel' 'Hydro' 'Wind' 'Solar'\n", + " 'Geothermal' 'Ocean' 'Hydrogen' 'Electricity Storage']\n", + "Unit : ['MW']\n", + "Pathway : ['Base']\n", + "Year : [2030]\n", + "Region : ['BG']\n", + "Y-Axis : ['Installed Generation Capacities in MW']\n", + "Title : ['Installed Generation Capacities in region BG']\n", + "Metadata : 0 {\"title\": \"REEEM Plexos Input\",\\n \"descript...\n", + "Name: obj_description, dtype: object\n" + ] + } + ], + "source": [ + "# Facts dict\n", + "info_dict_4 = {}\n", + "info_dict_4['Filename'] = ['{0}_reeem_Plexos_allindicators_{1}' .format(\n", + " pd.to_datetime('today').strftime(\"%Y-%m-%d\"),\n", + " df_4.loc[:,'region'].unique()[0])]\n", + "info_dict_4['Category'] = df_4.loc[:,'category'].unique()\n", + "info_dict_4['Indicator'] = df_4.loc[:,'indicator'].unique()\n", + "info_dict_4['Unit'] = df_4.loc[:,'unit'].unique()\n", + "info_dict_4['Pathway'] = df_4.loc[:,'pathway'].unique()\n", + "info_dict_4['Year'] = df_4.loc[:,'year'].unique().tolist()\n", + "info_dict_4['Region'] = df_4.loc[:,'region'].unique()\n", + "info_dict_4['Y-Axis'] = ['{} in {}'.format(*info_dict_4['Category'],*info_dict_4['Unit'])]\n", + "info_dict_4['Title'] = ['{} in region {}'.format(*info_dict_4['Category'],*info_dict_4['Region'])]\n", + "info_dict_4['Metadata'] = df_meta\n", + "\n", + "# Print facts\n", + "for x in info_dict_4:\n", + " print(x,':',info_dict_4[x])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stack data\n", + "\n", + "This pivot function reorganises the data and makes each year a column. The indicator is used as the index.
\n", + "The result is saved to a new dataframe (**df_4p**) and can be printed." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "# Reshape dataframe\n", + "df_4p = df_4.pivot(index='indicator', columns='region', values='value')\n", + "#df_4p" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot\n", + "\n", + "This is a basic plot with [matplotlib](https://matplotlib.org/).
\n", + "The title and y-axis labels are taken from the **info_dict_4**. They can be exchanged with manual text." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, 4833.276)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot for one indicator and one pathway\n", + "fig = plt.figure(figsize=(12, 10))\n", + "ax = plt.subplot()\n", + "# plt.title(r'All indicators in region {}', fontsize=16) # Manual title\n", + "plt.title(*info_dict_4['Title'], fontsize=16) # Title from info\n", + "# plt.ylabel(r'CO2-Emissions in Mt') # Manual label\n", + "plt.ylabel(*info_dict_4['Y-Axis']) # Label from info\n", + "plt.plot(df_4p, \n", + " marker=\"o\", markersize=5)\n", + "plt.legend(df_4p)\n", + "ax.set_ylim(ymin=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interactive Plot\n", + "\n", + "This is a basic interactive plot with [Plotly](https://plot.ly/python/).
\n", + "You can hover over the elements of the plot and observe the data.
\n", + "The different pathways can be switched on and off." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "name": "Coal", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 1304.3 + ] + }, + { + "name": "Lignite", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 1633.22 + ] + }, + { + "name": "Oil", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 82.22 + ] + }, + { + "name": "Natural Gas / non renew.", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 1053.1 + ] + }, + { + "name": "Nuclear", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 953 + ] + }, + { + "name": "Waste non renewable + Industrial Waste Heat", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 102.675 + ] + }, + { + "name": "Biomass solid / Waste ren.", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 178.83 + ] + }, + { + "name": "Biogas / Biofuel", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 1588.495 + ] + }, + { + "name": "Hydro", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 4603.12 + ] + }, + { + "name": "Wind", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 3034.49 + ] + }, + { + "name": "Solar", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 1255.6 + ] + }, + { + "name": "Geothermal", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 0.108 + ] + }, + { + "name": "Ocean", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 0 + ] + }, + { + "name": "Hydrogen", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 82.92 + ] + }, + { + "name": "Electricity Storage", + "type": "scatter", + "x": [ + "BG" + ], + "y": [ + 1.79 + ] + } + ], + "layout": { + "height": 800, + "title": "Installed Generation Capacities in region BG", + "width": 800, + "yaxis": { + "title": "Installed Generation Capacities in MW" + } + } + }, + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Iterate over pathways and add to data\n", + "indicators = df_4.loc[:,'indicator'].unique()\n", + "data = []\n", + "for indicator in indicators:\n", + " data.append(go.Scatter(\n", + " x = df_4.loc[df_4['indicator'] == indicator].loc[:,'region'],\n", + " y = df_4.loc[df_4['indicator'] == indicator].loc[:,'value'],\n", + " name = indicator))\n", + "\n", + "# Set layout\n", + "layout = go.Layout(\n", + " height=800, width = 800,\n", + " #title='CO2-Emissions in EU28',\n", + " title=''.join(info_dict_4['Title']),\n", + " # yaxis=dict(title='CO2-Emissions in Mt') )\n", + " yaxis=dict(title=''.join(info_dict_4['Y-Axis'])) )\n", + "ifig = go.Figure(data=data, layout=layout)\n", + "pltly.iplot(ifig)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save results to files\n", + "\n", + "The results are saved to cooresponding files in a folder named **data**.
\n", + "The **info_dict** is saved to a text file (txt).
\n", + "The **data** is saved to a table (csv).
\n", + "The **plot** is saved as an image (png).
\n", + "The **interactive plot** is saved as a webpage (html). It will also open in a new tab of your browser.
" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Facts saved to file: data/2018-08-09_reeem_Plexos_allindicators_BG.txt\n", + "Data saved to file: data/2018-08-09_reeem_Plexos_allindicators_BG.csv\n", + "Data saved to file: data/2018-08-09_reeem_Plexos_allindicators_BG_pivot.csv\n", + "Plot saved to file: data/2018-08-09_reeem_Plexos_allindicators_BG.png\n", + "Interactive plot saved to file: data/2018-08-09_reeem_Plexos_allindicators_BG.html\n" + ] + } + ], + "source": [ + "# Write facts to textfile\n", + "filename = ('data/{}.txt').format(*info_dict_4['Filename'])\n", + "with open(filename,'w') as tfile:\n", + " for i in info_dict_4.keys():\n", + " tfile.write(i + \": \" + ', '.join([str(x) for x in info_dict_4[i]]) + \"\\n\")\n", + "tfile.close()\n", + "print(\"Facts saved to file:\", filename)\n", + "\n", + "# Save data to CSV\n", + "csvname = 'data/{}.csv' .format(*info_dict_4['Filename'])\n", + "df_4.to_csv(csvname, sep=';')\n", + "print(\"Data saved to file:\", csvname)\n", + "\n", + "# Save pivot data to CSV\n", + "csvname = 'data/{}_pivot.csv' .format(*info_dict_4['Filename'])\n", + "df_4p.to_csv(csvname, sep=';')\n", + "print(\"Data saved to file:\", csvname)\n", + "\n", + "# Save plot as file\n", + "plotname = 'data/{}.png' .format(*info_dict_4['Filename'])\n", + "fig.savefig(plotname, bbox_inches='tight')\n", + "print(\"Plot saved to file:\", plotname)\n", + "\n", + "# Save interactive plot\n", + "htmlname = 'data/{}.html' .format(*info_dict_4['Filename'])\n", + "pltly.plot(ifig, filename=htmlname)\n", + "print(\"Interactive plot saved to file:\", htmlname)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}