Tax-Brain Utilities#
utils
taxbrain.utils#
Helper functions for the various taxbrain modules
- taxbrain.utils.differences_plot(tb, tax_type: str, figsize: Tuple[int | float, int | float] = (6, 4), title: str = 'default')[source]#
Create a bar chart that shows the change in total liability for a given tax
- Parameters:
tb (TaxBrain object) – TaxBrain object for analysis
tax_type (str) – tax for which to show the change in liability options: ‘income’, ‘payroll’, ‘combined’
figsize (tuple) – representing the size of the figure (width, height) in inches
title (str) – title for plot
- Returns:
fig – differences plot
- Return type:
Matplotlib.pyplot figure object
- taxbrain.utils.distribution_plot(tb, year: int, figsize: Tuple[int | float, int | float] = (6, 4), title: str = 'default', include_text: bool = False)[source]#
Create a horizontal bar chart to display the distributional change in after tax income
- Parameters:
tb (TaxBrain object) – TaxBrain object for analysis
year (int) – year to report distribution for
figsize (tuple) – representing the size of the figure (width, height) in inches
title (str) – title for plot
include_text (bool) – whether to include text for labels
- Returns:
fig – distribution plot
- Return type:
Matplotlib.pyplot figure object
- taxbrain.utils.is_paramtools_format(reform: str | Mapping[int, Any] | List[ValueObject])[source]#
Check first item in reform to determine if it is using the ParamTools adjustment or the Tax-Calculator reform format.
- If first item is a dict, then it is likely be a Tax-Calculator reform:
- {
param: {2020: 1000}
}
Otherwise, it is likely to be a ParamTools format.
- Parameters:
reform (str or dict) – parameters for tax policy
- Returns:
bool – True if reform is likely to be in ParamTools format
- Return type:
bool
- taxbrain.utils.lorenz_curve(tb, year: int, var: str = 'aftertax_income', figsize: Tuple[int | float, int | float] = (6, 4), xlabel: str = 'Cummulative Percentage of Tax Units', ylabel: str = 'Cummulative Percentage of Income', base_color: str | Tuple[float, float, float] = 'blue', base_linestyle: str = '-', reform_color: str | Tuple[float, float, float] = 'red', reform_linestyle: str = '--', dpi: int | float = 100)[source]#
Generate a Lorenz Curve
- Parameters:
tb (TaxBrain class object) – TaxBrain object for analysis
year (int) – year of data you want to use for the lorenz curve
var (str) – name of the variable to use
figsize (tuple) – representing the size of the figure (width, height) in inches
xlabel (str) – x axis label
ylabel (str) – y axis label
base_color (str) – color used for the base line
base_linestyle (str) – linestyle for the base line
reform_color (str) – color used for the reform line
reform_linestyle (str) – linestyle for the reform line
dpi (int) – dots per inch in the figure image
- Return type:
None
- taxbrain.utils.lorenz_data(tb, year: int, var: str = 'aftertax_income')[source]#
Pull data used for the lorenz curve plot
- Parameters:
tb (TaxBrain class object) – TaxBrain object for analysis
year (int) – year of data to use
var (str) – name of the variable to use
- Returns:
final_data – DataFrame with Lorenz curve for baseline and reform
- Return type:
Pandas DataFrame
- taxbrain.utils.update_policy(policy_obj: Policy, reform: str | Mapping[int, Any] | List[ValueObject], **kwargs)[source]#
Convenience method that updates the Policy object with the reform dict using the appropriate method, given the reform format.
- Parameters:
policy_obj (Tax-Calculator Policy class object) – Policy object for tax parameterization used for analysis
reform (str or dict) – parameters for tax policy
- Returns:
modifies the Policy object
- Return type:
None
- taxbrain.utils.volcano_plot(tb, year: int, y_var: str = 'expanded_income', x_var: str = 'combined', min_y: int | float = 0.01, max_y: int | float = 9e+99, log_scale: bool = True, increase_color: str | Tuple[float, float, float] = '#F15FE4', decrease_color: str | Tuple[float, float, float] = '#41D6C2', dotsize: int | float = 0.75, alpha: float = 0.5, figsize: Tuple[int | float, int | float] = (6, 4), dpi: int | float = 100, xlabel: str = 'Change in Tax Liability', ylabel: str = 'Expanded Income')[source]#
Create a volcano plot to show change in tax tax liability
- Parameters:
tb (TaxBrain class object) – TaxBrain object for analysis
year (int) – year for the plot
min_y (float) – minimum amount for the y variable to be included in the plot
max_y (float) – maximum amount for the y variable to be included in the plot
y_var (str) – variable on the y axis
x_var (str) – variable on the x axis
log_scale (bool) – whether the y-axis should use a log scale. If this is true, min_inc must be >= 0
increase_color (str) – color to use for dots when x increases
decrease_color (str) – color to use for dots when x decrease
dotsize (int) – size of the dots in the scatter plot
alpha (float) – attribute for transparency of the dots
figsize (tuple) – the figure size of the plot (width, height) in inches
dpi (int) – dots per inch in the figure
xlabel (str) – label on the x axis
ylabel (str) – label on the y axis
- Returns:
fig – volcano plot figure
- Return type:
Matplotlib.pyplot figure object
- taxbrain.utils.weighted_sum(df, var, wt='s006')[source]#
Return the weighted sum of specified variable
- Parameters:
df (Pandas DataFrame) – data overwhich to compute weighted sum
var (str) – variable name from df for which to computer weighted sum
wt (str) – name of weight variable in df
- Returns:
weighted sum
- Return type:
float