In [1]:
import sys
import os
sys.path.append(os.path.abspath(os.path.join('..','..','..','..')))
from pudl import pudl, ferc1, eia923, settings, constants
from pudl import models, models_ferc1, models_eia923
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
%matplotlib inline

In [2]:
pudl_engine = pudl.connect_db()
frc_contracts = pd.read_sql('''SELECT report_date, contract_expiration_date, fuel_group
                               FROM fuel_receipts_costs_eia923;''', pudl_engine)
frc_contracts['report_date'] = pd.to_datetime(frc_contracts['report_date'])
frc_contracts['contract_expiration_date'] = pd.to_datetime(frc_contracts['contract_expiration_date'])
frc_contracts['remaining_contract_time'] = frc_contracts.contract_expiration_date - frc_contracts.report_date
frc_contracts['remaining_contract_time'] = frc_contracts['remaining_contract_time'].apply(lambda x: np.nan if x is None else x)
frc_contracts.dropna(subset=['remaining_contract_time'], inplace=True)
frc_contracts = frc_contracts[frc_contracts['remaining_contract_time']>pd.to_timedelta('0 days')]
frc_contracts['tot_months'] = frc_contracts.remaining_contract_time.dt.total_seconds()/(30*60*60*24)

coal_by_year = {}
gas_by_year = {}
for yr in range(2009,2017):
    start = pd.to_datetime('{}-01-01'.format(yr))
    end = pd.to_datetime('{}-12-31'.format(yr))
    mask = (frc_contracts['report_date'] >= start) & (frc_contracts['report_date'] <= end)
    contracts_by_year = frc_contracts.loc[mask]
    coal_by_year[yr] = contracts_by_year[contracts_by_year['fuel_group']=='Coal']
    gas_by_year[yr] = contracts_by_year[contracts_by_year['fuel_group']=='Natural Gas']

In [51]:
font = 'Libre Franklin'
font_weight = 'heavy'
font_color = 'black'
title_size = 16
label_size = 14
label_color = 'black'

from scipy import stats
fig, axarr = plt.subplots(8,2)
fig.set_figwidth(16)
fig.set_figheight(24)

years = range(2009,2017)
for (yr,coal_ax) in zip(years, axarr[:,0]):
    if yr == min(years):
        coal_ax.set_title("Months remaining on coal contracts",size= title_size, fontname = font, weight = font_weight)
    coal_ax.grid(b=True)
    coal_ax.hist(coal_by_year[yr]['tot_months'], bins=108, range=(0,108), label='Coal', color='#2C2C2C')
    coal_ax.set_xticks(np.arange(0,120,12))
    coal_ax.tick_params(axis='both',labelsize=label_size, labelcolor = label_color)
    coal_ax.set_ylim(0,850)
    for n in range(0,9):
        pct = '{:.0%}'.format(stats.percentileofscore(coal_by_year[yr]['tot_months'],(n+1)*12)/100)
        coal_ax.text(n*12+6, 780, pct, fontsize=13, ha='center', fontname = font)
    coal_ax.set_ylabel("Number of Deliveries", fontname = font, fontsize=label_size, color = label_color)
    coal_ax.text(76, 700, 'of all coal contracts',fontsize=13)
coal_ax.set_xlabel("Months Remaining on Contract at Time of Delivery", fontname = font, fontsize=label_size, color = label_color)

for (yr,gas_ax) in zip(years,axarr[:,1]):
    if yr == min(years):
        gas_ax.set_title("Months remaining on natural gas contracts", size= title_size, fontname = font, weight = font_weight)
    gas_ax.grid(b=True)
    gas_ax.hist(gas_by_year[yr]['tot_months'], bins=108, range=(0,108), label='Natural Gas', color='#0083CC')
    gas_ax.set_xticks(np.arange(0,120,12))
    gas_ax.tick_params(axis='both',labelsize=label_size, labelcolor = label_color)
    gas_ax.set_ylim(0,250)
    for n in range(0,9):
        pct = '{:.0%}'.format(stats.percentileofscore(gas_by_year[yr]['tot_months'],(n+1)*12)/100)
        gas_ax.text(n*12+6, 230, pct, fontsize=13, ha='center', fontname = font)
    gas_ax.text(96, 110, str(yr), fontsize=30, ha='center')
    gas_ax.text(65, 205, 'of all natural gas contracts',fontsize=13)
gas_ax.set_xlabel("Months Remaining on Contract at Time of Delivery", fontname = font, fontsize=label_size, color = label_color)

plt.tight_layout()
plt.show()



In [ ]: