Source code for policy_modules.fpl
#!/usr/bin/env python
from utility_modules.get_parameters import get_params
from policy_modules.calculate_regression import FplRegression
import pandas as pd
import numpy as np
[docs]class Fpl:
# Borg singleton config object
__shared_state = {}
def __init__(self, policy_params = None, sys_params = None):
# implement the borg pattern
self.__dict__ = self.__shared_state
if policy_params != None:
#read in data
gid_mcaid = policy_params['mcaid_elig']
gid_fpl = policy_params['fpl']
max_year = int(sys_params['max_year'])
#read in fpl data
self.fpl = get_params(gid_fpl)
self.regression_model= FplRegression(policy_params)
#make a dataframe for prediction
if (max(self.fpl.year) < max_year):
future = pd.DataFrame(range(max(self.fpl.year)+1, max_year+1))
future.columns = ['year']
#predict new years and return data
future['base'] = self.regression_model.calculate_regression_line(self.fpl.year, self.fpl.base, future[['year']])
future['inc'] = self.regression_model.calculate_regression_line(self.fpl.year, self.fpl.inc, future[['year']])
self.fpl = self.fpl.append(future)
[docs] def set_year(self, curr_year):
"""
return slice of pertinant year
allows this to be reset at begining of each simulation year
"""
if curr_year not in self.fpl.year.values:
return
else:
self.base = self.fpl[self.fpl.year == curr_year][['base']].values
self.inc = self.fpl[self.fpl.year == curr_year][['inc']].values
[docs] def calculate_fpl(self, df):
"""
calculate fpl based off of income
note: data specified from set_year method
curr_data pd.DataFrame of current year fpl data
income: pd.series of income
family_size: pd.series of family_size
"""
income = df['fam_income']
family_size = df['family_size']
base = np.repeat(self.base, df.shape[0])
inc = np.repeat(self.inc, df.shape[0])
fpl = income/(base + (family_size-1)*inc) * 100
return(fpl)
[docs] def calculate_ind_fpl(self, df):
"""
calculate individual_fpl based on individual_Income
note: data specified from set_year method
curr_data pd.DataFrame of current year fpl data
ind_income: pd.series of ind_income
family_size: always 1
"""
income = df['ind_income']
family_size = 1
base = np.repeat(self.base, df.shape[0])
inc = np.repeat(self.inc, df.shape[0])
ind_fpl = income / (base + (family_size - 1) * inc) * 100
return (ind_fpl)
# from Ben -- calculating the income threshold for a FPL value
[docs] def calculate_income(self, fpl, family_size, df):
"""
calculate income based off of fpl
note: data specified from set_year method
curr_data pd.DataFrame of current year fpl data
fpl: pd.series of fpl
family_size: pd.series of family_size
"""
base = np.repeat(self.base, df.shape[0])
inc = np.repeat(self.inc, df.shape[0])
income = fpl*((base + (family_size-1)*inc) / 100)
return(income)