In [1]:
import glob

import colorlover as cl
import cufflinks as cf
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
%matplotlib inline

cf.set_config_file(offline=True)
In [2]:
beccs = [
    'Secondary Energy|Electricity|Biomass|w/ CCS',
    'Capacity|Electricity|Biomass|w/ CCS',  
]

fuel = [
    'Secondary Energy|Liquids|Biomass|w/ CCS',
    'Secondary Energy|Liquids|Biomass|w/o CCS',
    'Capacity|Liquids|Biomass',
]

hydrogen = [
    'Secondary Energy|Hydrogen|Biomass',
    'Capacity|Hydrogen|Biomass',
]

supply = [
    'Primary Energy|Biomass',
]

capvars = lambda x: x[-1:]
capacity = capvars(beccs) + capvars(fuel) + capvars(hydrogen)
actvars = lambda x: x[:-1]
activity = actvars(beccs) + actvars(fuel) + actvars(hydrogen)
allvars = beccs + fuel + hydrogen + supply

def read(f):
    df = pd.read_excel(f)
    df = df[df.Region == 'World']
    df = df[df.Variable.isin(allvars)]
    info = df.Scenario.iloc[0].split('-')
    df['policy'] = info[1]
    df['case'] = info[2]
    df['tech'] = info[3]
    return df

def numcols(df):
    """Returns all columns in df that have data types of floats or ints"""
    dtypes = df.dtypes
    return [i for i in dtypes.index if dtypes.loc[i].name.startswith(('float', 'int'))]
In [3]:
## this takes a while, only do this if needed
# files = glob.glob('/mnt/h/work/iiasa/message/emf33/runs/upload_EMF33_V3_R3*')
# pd.concat([read(f) for f in files]).to_csv('analysis.csv', index=False)
In [4]:
df = pd.read_csv('analysis.csv')
df.columns = df.columns.str.lower()
value_vars = numcols(df)
id_vars = list(set(df.columns) - set(value_vars))
df = pd.melt(df, id_vars=id_vars, value_vars=value_vars, var_name='year')
df.head()
Out[4]:
case scenario region variable tech policy model unit year value
0 lo R3-B-lo-ready2050 World Primary Energy|Biomass ready2050 B EMF33_V3 EJ/yr 1990 38.861821
1 lo R3-B-lo-ready2050 World Secondary Energy|Electricity|Biomass|w/ CCS ready2050 B EMF33_V3 EJ/yr 1990 0.000000
2 lo R3-B-lo-ready2050 World Secondary Energy|Hydrogen|Biomass ready2050 B EMF33_V3 EJ/yr 1990 0.000000
3 lo R3-B-lo-ready2050 World Secondary Energy|Liquids|Biomass|w/ CCS ready2050 B EMF33_V3 EJ/yr 1990 0.000000
4 lo R3-B-lo-ready2050 World Secondary Energy|Liquids|Biomass|w/o CCS ready2050 B EMF33_V3 EJ/yr 1990 0.183657

Analysis Cases¶

  1. none: no capacity variables, small or no activity variables
  2. nofuel: no liquids biomass capacity, small or no activity
  3. nobeccs: no elec biomass capacity, small or no activity
  4. ready2050: no capacity before 2050, small or no activity before 2050
  5. limbio: supply under criteria
In [5]:
var = 'Secondary Energy|Liquids|Biomass|w/ CCS'
_df = df[df.variable.isin([var])]
traces = _df.set_index(id_vars + ['year'])['value'].unstack('year').T
In [6]:
# policy
dash = {
    'B': 'solid',
    'P': 'dashdot',
    'BASE': 'dash',
}


# case
symbol = {
    'lo': 'square', 
    'vlo': 'diamond', 
    'hi': 'triangle-up', 
    '0': 'dot',
}

# tech
scale = cl.scales['7']['qual']['ggplot']
colors = {t: c for t, c in zip(df.tech.unique(), scale)}
In [7]:
_symbol = list(traces.columns.get_level_values('case').map(lambda x: symbol[x]))
_dash = list(traces.columns.get_level_values('policy').map(lambda x: dash[x]))
_colors = list(traces.columns.get_level_values('tech').map(lambda x: colors[x]))
_label = list(traces.columns.get_level_values('scenario'))
_unit = traces.columns.get_level_values('unit')[0]

_traces = traces.copy()
_traces.columns = _label
In [8]:
_traces.iplot(
    kind='scatter', mode='lines+markers',
    dash=_dash, colors=_colors, 
    symbol=_symbol, size=7,
    xTitle='Year', yTitle=_unit, title=var,
)
In [ ]: