Adding booleans for FE to display (#1393)

PR adds booleans for each individual threshold category for the front end to display.
This commit is contained in:
Emma Nechamkin 2022-03-29 20:17:10 -04:00 committed by GitHub
commit dc981919f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 190 additions and 74 deletions

View file

@ -1,5 +1,6 @@
from pathlib import Path from pathlib import Path
import datetime import datetime
from data_pipeline.config import settings from data_pipeline.config import settings
from data_pipeline.score import field_names from data_pipeline.score import field_names
@ -186,12 +187,37 @@ TILES_SCORE_COLUMNS = {
field_names.POVERTY_LOW_HS_LOW_HIGHER_ED_FIELD: "PLHSE", field_names.POVERTY_LOW_HS_LOW_HIGHER_ED_FIELD: "PLHSE",
field_names.LOW_MEDIAN_INCOME_LOW_HS_LOW_HIGHER_ED_FIELD: "LMILHSE", field_names.LOW_MEDIAN_INCOME_LOW_HS_LOW_HIGHER_ED_FIELD: "LMILHSE",
field_names.UNEMPLOYMENT_LOW_HS_LOW_HIGHER_ED_FIELD: "ULHSE", field_names.UNEMPLOYMENT_LOW_HS_LOW_HIGHER_ED_FIELD: "ULHSE",
# new booleans only for the environmental factors
field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD: "EPL_ET",
field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD: "EAL_ET",
field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD: "EBL_ET",
field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD: "EB_ET",
field_names.PM25_EXCEEDS_PCTILE_THRESHOLD: "PM25_ET",
field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD: "DS_ET",
field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD: "TP_ET",
field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD: "LPP_ET",
field_names.HOUSING_BURDEN_PCTILE_THRESHOLD: "HB_ET",
field_names.RMP_PCTILE_THRESHOLD: "RMP_ET",
field_names.NPL_PCTILE_THRESHOLD: "NPL_ET",
field_names.TSDF_PCTILE_THRESHOLD: "TSDF_ET",
field_names.WASTEWATER_PCTILE_THRESHOLD: "WD_ET",
field_names.DIABETES_PCTILE_THRESHOLD: "DB_ET",
field_names.ASTHMA_PCTILE_THRESHOLD: "A_ET",
field_names.HEART_DISEASE_PCTILE_THRESHOLD: "HD_ET",
field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD: "LLE_ET",
field_names.UNEMPLOYMENT_PCTILE_THRESHOLD: "UN_ET",
field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD: "LISO_ET",
field_names.POVERTY_PCTILE_THRESHOLD: "POV_ET",
field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD: "LMI_ET",
field_names.ISLAND_LOW_MEDIAN_INCOME_PCTILE_THRESHOLD: "IA_LMI_ET",
field_names.ISLAND_UNEMPLOYMENT_PCTILE_THRESHOLD: "IA_UN_ET",
field_names.ISLAND_POVERTY_PCTILE_THRESHOLD: "IA_POV_ET",
field_names.FPL_200_SERIES: "FPL200S",
field_names.THRESHOLD_COUNT: "TC", field_names.THRESHOLD_COUNT: "TC",
field_names.CATEGORY_COUNT: "CC", field_names.CATEGORY_COUNT: "CC",
field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD: "IAULHSE", field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD: "IAULHSE",
field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD: "IAPLHSE", field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD: "IAPLHSE",
field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD: "IALMILHSE", field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD: "IALMILHSE",
field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD: "IALHE",
# Percentiles for Island areas' workforce columns # Percentiles for Island areas' workforce columns
field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009
+ field_names.PERCENTILE_FIELD_SUFFIX: "IALMILHSE_PFS", + field_names.PERCENTILE_FIELD_SUFFIX: "IALMILHSE_PFS",
@ -202,6 +228,7 @@ TILES_SCORE_COLUMNS = {
+ field_names.ISLAND_AREAS_PERCENTILE_ADJUSTMENT_FIELD + field_names.ISLAND_AREAS_PERCENTILE_ADJUSTMENT_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX: "IAULHSE_PFS", + field_names.PERCENTILE_FIELD_SUFFIX: "IAULHSE_PFS",
field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD: "LHE", field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD: "LHE",
field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD: "IALHE",
# Percentage of HS Degree completion for Islands # Percentage of HS Degree completion for Islands
field_names.CENSUS_DECENNIAL_HIGH_SCHOOL_ED_FIELD_2009: "IAHSEF", field_names.CENSUS_DECENNIAL_HIGH_SCHOOL_ED_FIELD_2009: "IAHSEF",
field_names.COLLEGE_ATTENDANCE_FIELD: "CA", field_names.COLLEGE_ATTENDANCE_FIELD: "CA",

File diff suppressed because one or more lines are too long

View file

@ -567,6 +567,63 @@ ISLAND_AREAS_LOW_HS_EDUCATION_FIELD = (
f"Low high school education{ISLAND_AREAS_SUFFIX}" f"Low high school education{ISLAND_AREAS_SUFFIX}"
) )
# Booleans for percentile exceeded thresholds
# TODO -- we should streamline how we make field name strings, pushed to big refactor
EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for expected population loss"
EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for expected agricultural loss"
EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for expected building loss"
ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for energy burden"
)
PM25_EXCEEDS_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for pm2.5 exposure"
)
DIESEL_EXCEEDS_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for diesel particulate matter"
TRAFFIC_PROXIMITY_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for traffic proximity"
LEAD_PAINT_PROXY_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for lead paint and"
f" the median house value is less than {MEDIAN_HOUSE_VALUE_PERCENTILE}th "
f"percentile"
)
HOUSING_BURDEN_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for housing burden"
)
RMP_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for RMP proximity"
)
NPL_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for NPL (superfund sites) proximity"
TSDF_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for proximity to hazardous waste sites"
WASTEWATER_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for wastewater discharge"
DIABETES_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for diabetes"
)
ASTHMA_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for asthma"
)
HEART_DISEASE_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for heart disease"
)
LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile "
f"for low life expectancy"
)
UNEMPLOYMENT_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for unemployment"
)
LINGUISTIC_ISOLATION_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for households in linguistic isolation"
POVERTY_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for households at or below 100% federal poverty level"
LOW_MEDIAN_INCOME_PCTILE_THRESHOLD = (
f"Greater than or equal to the {PERCENTILE}th percentile for low median household income as a "
f"percent of area median income"
)
ISLAND_LOW_MEDIAN_INCOME_PCTILE_THRESHOLD = (
f"{LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009} exceeds "
f"{PERCENTILE}th percentile"
)
ISLAND_UNEMPLOYMENT_PCTILE_THRESHOLD = f"{CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009} exceeds {PERCENTILE}th percentile"
ISLAND_POVERTY_PCTILE_THRESHOLD = f"{CENSUS_DECENNIAL_POVERTY_LESS_THAN_100_FPL_FIELD_2009} exceeds {PERCENTILE}th percentile"
# Not currently used in a factor # Not currently used in a factor
EXTREME_HEAT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD = ( EXTREME_HEAT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD = (
f"Greater than or equal to the {PERCENTILE}th percentile for summer days above 90F and " f"Greater than or equal to the {PERCENTILE}th percentile for summer days above 90F and "

View file

@ -142,7 +142,9 @@ class ScoreM(Score):
field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD, field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD,
] ]
expected_population_loss_threshold = ( self.df[
field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD
] = (
self.df[ self.df[
field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -150,7 +152,9 @@ class ScoreM(Score):
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
expected_agriculture_loss_threshold = ( self.df[
field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD
] = (
self.df[ self.df[
field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -158,7 +162,7 @@ class ScoreM(Score):
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
expected_building_loss_threshold = ( self.df[field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -167,29 +171,39 @@ class ScoreM(Score):
) )
self.df[field_names.CLIMATE_THRESHOLD_EXCEEDED] = ( self.df[field_names.CLIMATE_THRESHOLD_EXCEEDED] = (
expected_population_loss_threshold self.df[
| expected_agriculture_loss_threshold field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD
| expected_building_loss_threshold ]
| self.df[
field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD
]
| self.df[
field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD
]
) )
self.df[ self.df[
field_names.EXPECTED_POPULATION_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD field_names.EXPECTED_POPULATION_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD
] = ( ] = (
expected_population_loss_threshold self.df[
field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD
]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[ self.df[
field_names.EXPECTED_AGRICULTURE_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD field_names.EXPECTED_AGRICULTURE_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD
] = ( ] = (
expected_agriculture_loss_threshold self.df[
field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD
]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[ self.df[
field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD
] = ( ] = (
expected_building_loss_threshold self.df[field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
@ -213,7 +227,7 @@ class ScoreM(Score):
field_names.ENERGY_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD, field_names.ENERGY_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD,
] ]
energy_burden_threshold = ( self.df[field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.ENERGY_BURDEN_FIELD field_names.ENERGY_BURDEN_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -221,7 +235,7 @@ class ScoreM(Score):
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
pm25_threshold = ( self.df[field_names.PM25_EXCEEDS_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX
] ]
@ -229,16 +243,17 @@ class ScoreM(Score):
) )
self.df[field_names.ENERGY_THRESHOLD_EXCEEDED] = ( self.df[field_names.ENERGY_THRESHOLD_EXCEEDED] = (
energy_burden_threshold | pm25_threshold self.df[field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD]
| self.df[field_names.PM25_EXCEEDS_PCTILE_THRESHOLD]
) )
self.df[field_names.PM25_EXPOSURE_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.PM25_EXPOSURE_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
pm25_threshold self.df[field_names.PM25_EXCEEDS_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[field_names.ENERGY_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.ENERGY_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
energy_burden_threshold self.df[field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
@ -266,14 +281,14 @@ class ScoreM(Score):
field_names.TRAFFIC_PROXIMITY_LOW_INCOME_LOW_HIGHER_ED_FIELD, field_names.TRAFFIC_PROXIMITY_LOW_INCOME_LOW_HIGHER_ED_FIELD,
] ]
diesel_threshold = ( self.df[field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX
] ]
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
traffic_threshold = ( self.df[field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX
] ]
@ -281,20 +296,21 @@ class ScoreM(Score):
) )
self.df[field_names.TRAFFIC_THRESHOLD_EXCEEDED] = ( self.df[field_names.TRAFFIC_THRESHOLD_EXCEEDED] = (
traffic_threshold | diesel_threshold self.df[field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD]
| self.df[field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD]
) )
self.df[ self.df[
field_names.DIESEL_PARTICULATE_MATTER_LOW_INCOME_LOW_HIGHER_ED_FIELD field_names.DIESEL_PARTICULATE_MATTER_LOW_INCOME_LOW_HIGHER_ED_FIELD
] = ( ] = (
diesel_threshold self.df[field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[ self.df[
field_names.TRAFFIC_PROXIMITY_LOW_INCOME_LOW_HIGHER_ED_FIELD field_names.TRAFFIC_PROXIMITY_LOW_INCOME_LOW_HIGHER_ED_FIELD
] = ( ] = (
traffic_threshold self.df[field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
@ -325,7 +341,7 @@ class ScoreM(Score):
field_names.HOUSING_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD, field_names.HOUSING_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD,
] ]
lead_paint_median_home_value_threshold = ( self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.LEAD_PAINT_FIELD field_names.LEAD_PAINT_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -339,7 +355,7 @@ class ScoreM(Score):
<= self.MEDIAN_HOUSE_VALUE_THRESHOLD <= self.MEDIAN_HOUSE_VALUE_THRESHOLD
) )
housing_burden_threshold = ( self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.HOUSING_BURDEN_FIELD field_names.HOUSING_BURDEN_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -348,19 +364,20 @@ class ScoreM(Score):
) )
self.df[field_names.HOUSING_THREHSOLD_EXCEEDED] = ( self.df[field_names.HOUSING_THREHSOLD_EXCEEDED] = (
lead_paint_median_home_value_threshold | housing_burden_threshold self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD]
| self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD]
) )
# series by series indicators # series by series indicators
self.df[ self.df[
field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_LOW_HIGHER_ED_FIELD field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_LOW_HIGHER_ED_FIELD
] = ( ] = (
lead_paint_median_home_value_threshold self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[field_names.HOUSING_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.HOUSING_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
housing_burden_threshold self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
@ -385,17 +402,17 @@ class ScoreM(Score):
field_names.HAZARDOUS_WASTE_LOW_INCOME_LOW_HIGHER_ED_FIELD, field_names.HAZARDOUS_WASTE_LOW_INCOME_LOW_HIGHER_ED_FIELD,
] ]
rmp_sites_threshold = ( self.df[field_names.RMP_PCTILE_THRESHOLD] = (
self.df[field_names.RMP_FIELD + field_names.PERCENTILE_FIELD_SUFFIX] self.df[field_names.RMP_FIELD + field_names.PERCENTILE_FIELD_SUFFIX]
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
npl_sites_threshold = ( self.df[field_names.NPL_PCTILE_THRESHOLD] = (
self.df[field_names.NPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX] self.df[field_names.NPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX]
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
tsdf_sites_threshold = ( self.df[field_names.TSDF_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX
] ]
@ -403,20 +420,21 @@ class ScoreM(Score):
) )
self.df[field_names.POLLUTION_THRESHOLD_EXCEEDED] = ( self.df[field_names.POLLUTION_THRESHOLD_EXCEEDED] = (
rmp_sites_threshold | npl_sites_threshold self.df[field_names.RMP_PCTILE_THRESHOLD]
) | tsdf_sites_threshold | self.df[field_names.NPL_PCTILE_THRESHOLD]
) | self.df[field_names.TSDF_PCTILE_THRESHOLD]
# individual series-by-series # individual series-by-series
self.df[field_names.RMP_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.RMP_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
rmp_sites_threshold self.df[field_names.RMP_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[field_names.SUPERFUND_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.SUPERFUND_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
npl_sites_threshold self.df[field_names.NPL_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[field_names.HAZARDOUS_WASTE_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.HAZARDOUS_WASTE_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
tsdf_sites_threshold self.df[field_names.TSDF_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
@ -435,7 +453,7 @@ class ScoreM(Score):
# poverty level and has a low percent of higher ed students # poverty level and has a low percent of higher ed students
# Source: Census's American Community Survey # Source: Census's American Community Survey
self.df[field_names.WATER_THRESHOLD_EXCEEDED] = ( self.df[field_names.WASTEWATER_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.WASTEWATER_FIELD field_names.WASTEWATER_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -443,10 +461,15 @@ class ScoreM(Score):
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
# Straight copy here in case we add additional water fields.
self.df[field_names.WATER_THRESHOLD_EXCEEDED] = self.df[
field_names.WASTEWATER_PCTILE_THRESHOLD
].copy()
self.df[ self.df[
field_names.WASTEWATER_DISCHARGE_LOW_INCOME_LOW_HIGHER_ED_FIELD field_names.WASTEWATER_DISCHARGE_LOW_INCOME_LOW_HIGHER_ED_FIELD
] = ( ] = (
self.df[field_names.WATER_THRESHOLD_EXCEEDED] self.df[field_names.WASTEWATER_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
@ -480,21 +503,21 @@ class ScoreM(Score):
field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_LOW_HIGHER_ED_FIELD, field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_LOW_HIGHER_ED_FIELD,
] ]
diabetes_threshold = ( self.df[field_names.DIABETES_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX
] ]
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
asthma_threshold = ( self.df[field_names.ASTHMA_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX
] ]
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
heart_disease_threshold = ( self.df[field_names.HEART_DISEASE_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.HEART_DISEASE_FIELD field_names.HEART_DISEASE_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -502,7 +525,7 @@ class ScoreM(Score):
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
low_life_expectancy_threshold = ( self.df[field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.LOW_LIFE_EXPECTANCY_FIELD field_names.LOW_LIFE_EXPECTANCY_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -511,25 +534,29 @@ class ScoreM(Score):
) )
self.df[field_names.HEALTH_THRESHOLD_EXCEEDED] = ( self.df[field_names.HEALTH_THRESHOLD_EXCEEDED] = (
(diabetes_threshold | asthma_threshold) | heart_disease_threshold (
) | low_life_expectancy_threshold self.df[field_names.DIABETES_PCTILE_THRESHOLD]
| self.df[field_names.ASTHMA_PCTILE_THRESHOLD]
)
| self.df[field_names.HEART_DISEASE_PCTILE_THRESHOLD]
) | self.df[field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD]
self.df[field_names.DIABETES_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.DIABETES_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
diabetes_threshold self.df[field_names.DIABETES_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[field_names.ASTHMA_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.ASTHMA_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
asthma_threshold self.df[field_names.ASTHMA_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[field_names.HEART_DISEASE_LOW_INCOME_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.HEART_DISEASE_LOW_INCOME_LOW_HIGHER_ED_FIELD] = (
heart_disease_threshold self.df[field_names.HEART_DISEASE_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
self.df[ self.df[
field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_LOW_HIGHER_ED_FIELD field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_LOW_HIGHER_ED_FIELD
] = ( ] = (
low_life_expectancy_threshold self.df[field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD]
& self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES] & self.df[field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES]
) )
@ -578,7 +605,7 @@ class ScoreM(Score):
) )
) )
unemployment_threshold = ( self.df[field_names.UNEMPLOYMENT_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.UNEMPLOYMENT_FIELD field_names.UNEMPLOYMENT_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -586,7 +613,7 @@ class ScoreM(Score):
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
low_median_income_threshold = ( self.df[field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -594,7 +621,7 @@ class ScoreM(Score):
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
linguistic_isolation_threshold = ( self.df[field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.LINGUISTIC_ISO_FIELD field_names.LINGUISTIC_ISO_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -602,7 +629,7 @@ class ScoreM(Score):
>= self.ENVIRONMENTAL_BURDEN_THRESHOLD >= self.ENVIRONMENTAL_BURDEN_THRESHOLD
) )
poverty_threshold = ( self.df[field_names.POVERTY_PCTILE_THRESHOLD] = (
self.df[ self.df[
field_names.POVERTY_LESS_THAN_100_FPL_FIELD field_names.POVERTY_LESS_THAN_100_FPL_FIELD
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -611,22 +638,22 @@ class ScoreM(Score):
) )
self.df[field_names.LINGUISTIC_ISOLATION_LOW_HS_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.LINGUISTIC_ISOLATION_LOW_HS_LOW_HIGHER_ED_FIELD] = (
linguistic_isolation_threshold self.df[field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD]
& self.df[field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD] & self.df[field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD]
) )
self.df[field_names.POVERTY_LOW_HS_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.POVERTY_LOW_HS_LOW_HIGHER_ED_FIELD] = (
poverty_threshold self.df[field_names.POVERTY_PCTILE_THRESHOLD]
& self.df[field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD] & self.df[field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD]
) )
self.df[field_names.LOW_MEDIAN_INCOME_LOW_HS_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.LOW_MEDIAN_INCOME_LOW_HS_LOW_HIGHER_ED_FIELD] = (
low_median_income_threshold self.df[field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD]
& self.df[field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD] & self.df[field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD]
) )
self.df[field_names.UNEMPLOYMENT_LOW_HS_LOW_HIGHER_ED_FIELD] = ( self.df[field_names.UNEMPLOYMENT_LOW_HS_LOW_HIGHER_ED_FIELD] = (
unemployment_threshold self.df[field_names.UNEMPLOYMENT_PCTILE_THRESHOLD]
& self.df[field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD] & self.df[field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD]
) )
@ -659,6 +686,12 @@ class ScoreM(Score):
threshold_cutoff_for_island_areas=self.ENVIRONMENTAL_BURDEN_THRESHOLD, threshold_cutoff_for_island_areas=self.ENVIRONMENTAL_BURDEN_THRESHOLD,
) )
# TODO: Remove this, it's for checking only
assert (
island_areas_unemployment_criteria_field_name
== field_names.ISLAND_UNEMPLOYMENT_PCTILE_THRESHOLD
), "Error combining island columns"
# Next, combine poverty. # Next, combine poverty.
# This will include an adjusted percentile column for the island areas # This will include an adjusted percentile column for the island areas
# to be used by the front end. # to be used by the front end.
@ -673,6 +706,12 @@ class ScoreM(Score):
threshold_cutoff_for_island_areas=self.ENVIRONMENTAL_BURDEN_THRESHOLD, threshold_cutoff_for_island_areas=self.ENVIRONMENTAL_BURDEN_THRESHOLD,
) )
# TODO: Remove this, it's for checking only
assert (
island_areas_poverty_criteria_field_name
== field_names.ISLAND_POVERTY_PCTILE_THRESHOLD
), "Error combining island columns"
# Also check whether low area median income is 90th percentile or higher # Also check whether low area median income is 90th percentile or higher
# within the islands. # within the islands.
@ -680,13 +719,7 @@ class ScoreM(Score):
# unlike the other fields, we do not need to create a new percentile # unlike the other fields, we do not need to create a new percentile
# column. This code should probably be refactored when (TODO) we do the big # column. This code should probably be refactored when (TODO) we do the big
# refactor. # refactor.
island_areas_low_median_income_as_a_percent_of_ami_criteria_field_name = ( self.df[field_names.ISLAND_LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] = (
f"{field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009} exceeds "
f"{field_names.PERCENTILE}th percentile"
)
self.df[
island_areas_low_median_income_as_a_percent_of_ami_criteria_field_name
] = (
self.df[ self.df[
field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009
+ field_names.PERCENTILE_FIELD_SUFFIX + field_names.PERCENTILE_FIELD_SUFFIX
@ -714,9 +747,7 @@ class ScoreM(Score):
self.df[ self.df[
field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD
] = ( ] = (
self.df[ self.df[field_names.ISLAND_LOW_MEDIAN_INCOME_PCTILE_THRESHOLD]
island_areas_low_median_income_as_a_percent_of_ami_criteria_field_name
]
& self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] & self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD]
) )
@ -750,19 +781,20 @@ class ScoreM(Score):
self.df[field_names.WORKFORCE_THRESHOLD_EXCEEDED] = ( self.df[field_names.WORKFORCE_THRESHOLD_EXCEEDED] = (
## First we calculate for the non-island areas ## First we calculate for the non-island areas
( (
(poverty_threshold | linguistic_isolation_threshold) (
| low_median_income_threshold self.df[field_names.POVERTY_PCTILE_THRESHOLD]
| self.df[field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD]
)
| self.df[field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD]
) )
| unemployment_threshold | self.df[field_names.UNEMPLOYMENT_PCTILE_THRESHOLD]
) | ( ) | (
## then we calculate just for the island areas ## then we calculate just for the island areas
( (
self.df[island_areas_unemployment_criteria_field_name] self.df[field_names.ISLAND_UNEMPLOYMENT_PCTILE_THRESHOLD]
| self.df[island_areas_poverty_criteria_field_name] | self.df[field_names.ISLAND_POVERTY_PCTILE_THRESHOLD]
) )
| self.df[ | self.df[field_names.ISLAND_LOW_MEDIAN_INCOME_PCTILE_THRESHOLD]
island_areas_low_median_income_as_a_percent_of_ami_criteria_field_name
]
) )
# Because of the island complications, we also have to separately calculate the threshold for # Because of the island complications, we also have to separately calculate the threshold for