mirror of
https://github.com/DOI-DO/j40-cejst-2.git
synced 2025-02-23 10:04:18 -08:00
added indoor plumbing to score housing burden
This commit is contained in:
parent
8c7519063a
commit
15450cf91f
3 changed files with 41 additions and 18 deletions
|
@ -366,6 +366,7 @@ class ScoreETL(ExtractTransformLoad):
|
||||||
|
|
||||||
numeric_columns = [
|
numeric_columns = [
|
||||||
field_names.HOUSING_BURDEN_FIELD,
|
field_names.HOUSING_BURDEN_FIELD,
|
||||||
|
field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD,
|
||||||
field_names.TOTAL_POP_FIELD,
|
field_names.TOTAL_POP_FIELD,
|
||||||
field_names.MEDIAN_INCOME_AS_PERCENT_OF_STATE_FIELD,
|
field_names.MEDIAN_INCOME_AS_PERCENT_OF_STATE_FIELD,
|
||||||
field_names.ASTHMA_FIELD,
|
field_names.ASTHMA_FIELD,
|
||||||
|
@ -416,7 +417,6 @@ class ScoreETL(ExtractTransformLoad):
|
||||||
field_names.HEALTHY_FOOD_FIELD,
|
field_names.HEALTHY_FOOD_FIELD,
|
||||||
field_names.IMPENETRABLE_SURFACES_FIELD,
|
field_names.IMPENETRABLE_SURFACES_FIELD,
|
||||||
field_names.UST_FIELD,
|
field_names.UST_FIELD,
|
||||||
# We have to pass this boolean here in order to include it in ag value loss percentiles.
|
|
||||||
field_names.AGRICULTURAL_VALUE_BOOL_FIELD,
|
field_names.AGRICULTURAL_VALUE_BOOL_FIELD,
|
||||||
field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD,
|
field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD,
|
||||||
]
|
]
|
||||||
|
@ -473,9 +473,7 @@ class ScoreETL(ExtractTransformLoad):
|
||||||
set(numeric_columns)
|
set(numeric_columns)
|
||||||
), "You have a double-entered column in the numeric columns list"
|
), "You have a double-entered column in the numeric columns list"
|
||||||
|
|
||||||
df_copy[numeric_columns] = df_copy[numeric_columns].apply(
|
df_copy[numeric_columns] = df_copy[numeric_columns].apply(pd.to_numeric)
|
||||||
pd.to_numeric
|
|
||||||
)
|
|
||||||
|
|
||||||
# Convert all columns to numeric and do math
|
# Convert all columns to numeric and do math
|
||||||
# Note that we have a few special conditions here, that we handle explicitly.
|
# Note that we have a few special conditions here, that we handle explicitly.
|
||||||
|
|
|
@ -176,6 +176,10 @@ LOW_INCOME_THRESHOLD = "Exceeds FPL200 threshold"
|
||||||
|
|
||||||
# Housing
|
# Housing
|
||||||
HOUSING_BURDEN_FIELD = "Housing burden (percent)"
|
HOUSING_BURDEN_FIELD = "Housing burden (percent)"
|
||||||
|
NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD = (
|
||||||
|
"Share of homes with no kitchen or indoor plumbing (percent)"
|
||||||
|
)
|
||||||
|
|
||||||
HT_INDEX_FIELD = (
|
HT_INDEX_FIELD = (
|
||||||
"Housing + Transportation Costs % Income for the Regional Typical Household"
|
"Housing + Transportation Costs % Income for the Regional Typical Household"
|
||||||
)
|
)
|
||||||
|
@ -419,6 +423,10 @@ LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD = (
|
||||||
f"percentile and is low income?"
|
f"percentile and is low income?"
|
||||||
)
|
)
|
||||||
HOUSING_BURDEN_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for housing burden and is low income?"
|
HOUSING_BURDEN_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for housing burden and is low income?"
|
||||||
|
NO_KITCHEN_OR_INDOOR_PLUMBING_LOW_INCOME_FIELD = (
|
||||||
|
f"Greater than or equal to the {PERCENTILE}th percentile for "
|
||||||
|
+ "share of homes with no kitchen or indoor plumbing and is low income?"
|
||||||
|
)
|
||||||
|
|
||||||
# Remediation and Reduction of Legacy Pollution
|
# Remediation and Reduction of Legacy Pollution
|
||||||
RMP_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for proximity to RMP sites and is low income?"
|
RMP_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for proximity to RMP sites and is low income?"
|
||||||
|
@ -624,6 +632,11 @@ LEAD_PAINT_PROXY_PCTILE_THRESHOLD = (
|
||||||
HOUSING_BURDEN_PCTILE_THRESHOLD = (
|
HOUSING_BURDEN_PCTILE_THRESHOLD = (
|
||||||
f"Greater than or equal to the {PERCENTILE}th percentile for housing burden"
|
f"Greater than or equal to the {PERCENTILE}th percentile for housing burden"
|
||||||
)
|
)
|
||||||
|
NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD = (
|
||||||
|
f"Greater than or equal to the {PERCENTILE}th percentile for share "
|
||||||
|
"of homes without indoor plumbing or a kitchen"
|
||||||
|
)
|
||||||
|
|
||||||
RMP_PCTILE_THRESHOLD = (
|
RMP_PCTILE_THRESHOLD = (
|
||||||
f"Greater than or equal to the {PERCENTILE}th percentile for RMP proximity"
|
f"Greater than or equal to the {PERCENTILE}th percentile for RMP proximity"
|
||||||
)
|
)
|
||||||
|
|
|
@ -315,9 +315,10 @@ class ScoreNarwhal(Score):
|
||||||
field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD,
|
field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD,
|
||||||
field_names.HOUSING_BURDEN_LOW_INCOME_FIELD,
|
field_names.HOUSING_BURDEN_LOW_INCOME_FIELD,
|
||||||
field_names.HISTORIC_REDLINING_SCORE_EXCEEDED_LOW_INCOME_FIELD,
|
field_names.HISTORIC_REDLINING_SCORE_EXCEEDED_LOW_INCOME_FIELD,
|
||||||
|
field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_LOW_INCOME_FIELD,
|
||||||
]
|
]
|
||||||
|
|
||||||
# # design question -- should read in scalar with threshold here instead?
|
# Historic disinvestment
|
||||||
self.df[
|
self.df[
|
||||||
field_names.HISTORIC_REDLINING_SCORE_EXCEEDED_LOW_INCOME_FIELD
|
field_names.HISTORIC_REDLINING_SCORE_EXCEEDED_LOW_INCOME_FIELD
|
||||||
] = (
|
] = (
|
||||||
|
@ -325,6 +326,18 @@ class ScoreNarwhal(Score):
|
||||||
& self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED]
|
& self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Kitchen / plumbing
|
||||||
|
self.df[field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD] = (
|
||||||
|
self.df[field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD]
|
||||||
|
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD
|
||||||
|
)
|
||||||
|
|
||||||
|
self.df[field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_LOW_INCOME_FIELD] = (
|
||||||
|
self.df[field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD]
|
||||||
|
& self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Lead paint
|
||||||
self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD] = (
|
self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD] = (
|
||||||
self.df[
|
self.df[
|
||||||
field_names.LEAD_PAINT_FIELD
|
field_names.LEAD_PAINT_FIELD
|
||||||
|
@ -339,6 +352,12 @@ class ScoreNarwhal(Score):
|
||||||
<= self.MEDIAN_HOUSE_VALUE_THRESHOLD
|
<= self.MEDIAN_HOUSE_VALUE_THRESHOLD
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.df[field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD] = (
|
||||||
|
self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD]
|
||||||
|
& self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Housing burden
|
||||||
self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD] = (
|
self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD] = (
|
||||||
self.df[
|
self.df[
|
||||||
field_names.HOUSING_BURDEN_FIELD
|
field_names.HOUSING_BURDEN_FIELD
|
||||||
|
@ -346,29 +365,22 @@ class ScoreNarwhal(Score):
|
||||||
]
|
]
|
||||||
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD
|
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD
|
||||||
)
|
)
|
||||||
|
|
||||||
self.df[field_names.HOUSING_THREHSOLD_EXCEEDED] = (
|
|
||||||
self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD]
|
|
||||||
| self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD]
|
|
||||||
)
|
|
||||||
|
|
||||||
# series by series indicators
|
|
||||||
self.df[field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD] = (
|
|
||||||
self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD]
|
|
||||||
& self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED]
|
|
||||||
)
|
|
||||||
|
|
||||||
self.df[field_names.HOUSING_BURDEN_LOW_INCOME_FIELD] = (
|
self.df[field_names.HOUSING_BURDEN_LOW_INCOME_FIELD] = (
|
||||||
self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD]
|
self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD]
|
||||||
& self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED]
|
& self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# any of the burdens
|
||||||
|
self.df[field_names.HOUSING_THREHSOLD_EXCEEDED] = self.df[
|
||||||
|
housing_eligibility_columns
|
||||||
|
].any(axis="columns")
|
||||||
|
|
||||||
self._increment_total_eligibility_exceeded(
|
self._increment_total_eligibility_exceeded(
|
||||||
housing_eligibility_columns,
|
housing_eligibility_columns,
|
||||||
skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS,
|
skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS,
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.df[housing_eligibility_columns].any(axis="columns")
|
return self.df[field_names.HOUSING_THREHSOLD_EXCEEDED]
|
||||||
|
|
||||||
def _pollution_factor(self) -> bool:
|
def _pollution_factor(self) -> bool:
|
||||||
# Proximity to Risk Management Plan sites is > X
|
# Proximity to Risk Management Plan sites is > X
|
||||||
|
|
Loading…
Add table
Reference in a new issue