Tree Equity Output: Change output from Geojson to CSV format for easier analysis (#1089)

Added Tree Equity

* draft wip

* revised documentation

* revised documentation

* revised documentation and defer to super

* change word in logger

* fix flake 8

* address nit

Co-authored-by: Saran Ahluwalia <ahlusar.ahluwalia@gmail.com>
This commit is contained in:
Saran Ahluwalia 2021-12-30 17:17:28 -05:00 committed by GitHub
parent 356e16950f
commit 24f8eb93c4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -7,6 +7,18 @@ logger = get_module_logger(__name__)
class TreeEquityScoreETL(ExtractTransformLoad): class TreeEquityScoreETL(ExtractTransformLoad):
"""Tree equity score methodology: https://www.treeequityscore.org/methodology/
A lower Tree Equity Score indicates a greater priority for closing the tree canopy gap
In order to estimate a general number of trees associated with an increase in tree
canopy, the authors utilize a basic multiplier of 600 sq-ft (55.74 sq-m) of canopy area
per urban tree assuming a medium-size urban tree crown width of 25-30 ft.
Sources:
1. Tree canopy cover. High resolution tree canopy where available.
In the event tree canopy is not defer to National Land Cover Database.
2. Census American Community Survey (ACS) 2018 5-year Block Group population estimates.
3. Census ACS 2018 5-year city and block group Median Income estimates.
"""
def __init__(self): def __init__(self):
self.TES_URL = "https://national-tes-data-share.s3.amazonaws.com/national_tes_share/" self.TES_URL = "https://national-tes-data-share.s3.amazonaws.com/national_tes_share/"
self.TES_CSV = self.TMP_PATH / "tes_2021_data.csv" self.TES_CSV = self.TMP_PATH / "tes_2021_data.csv"
@ -83,8 +95,42 @@ class TreeEquityScoreETL(ExtractTransformLoad):
pd.concat(tes_state_dfs), crs=tes_state_dfs[0].crs pd.concat(tes_state_dfs), crs=tes_state_dfs[0].crs
) )
# rename ID to Tract ID
self.df.rename(
# Block group ID delegated to attribute in superclass
columns={"geoid": ExtractTransformLoad.GEOID_FIELD_NAME},
inplace=True,
)
def load(self) -> None: def load(self) -> None:
logger.info("Saving Tree Equity Score GeoJSON") logger.info("Saving Tree Equity Score CSV")
# write nationwide csv # write nationwide csv
self.CSV_PATH.mkdir(parents=True, exist_ok=True) self.CSV_PATH.mkdir(parents=True, exist_ok=True)
self.df.to_file(self.CSV_PATH / "tes_conus.geojson", driver="GeoJSON") self.df = self.df[
[
ExtractTransformLoad.GEOID_FIELD_NAME,
"total_pop", # Total Population according to ACS Estimates
"state",
"county",
"dep_ratio", # Dependent ratio
"child_perc", # Children (Age 0 -17) (ACS 2014 - 2018)
"seniorperc", # Seniors (Age 65+) (ACS 2014 - 2018)
"treecanopy", # Tree canopy cover
"area", # Source: https://www.fs.fed.us/nrs/pubs/gtr/gtr_nrs200.pdf
"source",
"avg_temp", # Average Temperature from USGS Earth Explorer
"ua_name",
"incorpname", # Incorporated place name
"congressio", # Congressional District
"biome",
"bgpopdense",
"popadjust", # Adjusted population estimate
"tc_gap", # Tree canopy gap
"tc_goal", # Tree canopy goal
"priority", # Priority community according to the index
"tes", # Tree equity score
"tesctyscor", # Tree equity score for the county
"geometry", # Block group geometry coordinates
]
]
self.df.to_csv(self.CSV_PATH / "usa.csv", index=False)