This project analyzes the intersection between 2024 wildfire perimeters in California and the Social Vulnerability Index (SVI) at the census tract level. The goal is to identify how much of the state’s high-vulnerability population was directly affected by wildfires, measured through burned area overlap and estimated exposed population.
# Import libraries
import geopandas as gpd
import matplotlib.pyplot as plt
# Check layers of GDB files
print("California GDB layers:", gpd.io.file.fiona.listlayers("california.gdb"))
print("Fire241 GDB layers:", gpd.io.file.fiona.listlayers("fire241.gdb"))
# Load SVI tracts
svi = gpd.read_file("california.gdb", layer="SVI2022_CALIFORNIA_tract")
# Load wildfire perimeters (2024)
fires = gpd.read_file("fire241.gdb", layer="firep24_1")
# Reproject both to California Albers (EPSG:3310)
svi = svi.to_crs(3310)
fires = fires.to_crs(3310)
# Quick visual check (red polygons are fires, grey outlines are tracts)
fig, ax = plt.subplots(figsize=(8,8))
svi.boundary.plot(ax=ax, color="lightgrey")
fires.plot(ax=ax, color="red", alpha=0.4)
ax.set_title("California 2024 Wildfire Perimeters over Census Tracts")
plt.show()
# Compute each tract’s area before overlay
svi["tract_area_m2"] = svi.geometry.area
# Keep only necessary columns from SVI before overlay
svi_sub = svi[["FIPS", "E_TOTPOP", "RPL_THEMES", "tract_area_m2", "geometry"]]
# Perform intersection
impacted = gpd.overlay(svi_sub, fires[["YEAR_", "FIRE_NAME", "GIS_ACRES", "geometry"]], how="intersection")
# Compute the intersection (burned) area
impacted["burned_area_m2"] = impacted.geometry.area
# Fraction of tract burned
impacted["frac_burned"] = impacted["burned_area_m2"] / impacted["tract_area_m2"]
# Estimate exposed population
impacted["pop_exposed"] = impacted["E_TOTPOP"] * impacted["frac_burned"]
impacted.head(3)
# Define high vulnerability (top 25%)
impacted['is_high_vuln'] = impacted['RPL_THEMES'] > 0.75
# Aggregate totals
exposure_summary = impacted.groupby('YEAR_').agg(
total_pop_exposed=('pop_exposed', 'sum'),
total_area_burned=('burned_area_m2', 'sum'),
high_vuln_pop_exposed=('pop_exposed', lambda x: impacted.loc[x.index, 'pop_exposed'][impacted['is_high_vuln']].sum())
).reset_index()
# Convert to km²
exposure_summary['total_area_burned_km2'] = exposure_summary['total_area_burned'] / 1e6
exposure_summary['pct_high_vuln_pop'] = (
100 * exposure_summary['high_vuln_pop_exposed'] / exposure_summary['total_pop_exposed']
)
exposure_summary[['YEAR_', 'total_pop_exposed', 'total_area_burned_km2', 'pct_high_vuln_pop']]
# Map of fires for 2024 and their impact on high-vulnerability communities in California.
fires_2024 = fires[fires['YEAR_'] == 2024]
impact_2024 = gpd.overlay(impacted, fires_2024, how='intersection')
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
svi.plot(ax=ax, color='lightgrey', linewidth=0.1)
impact_2024[impact_2024['is_high_vuln']].plot(ax=ax, color='red', alpha=0.6)
fires_2024.boundary.plot(ax=ax, color='black', linewidth=0.5)
ax.set_title("2024 Wildfires Affecting High-Vulnerability Communities in California", fontsize=14)
ax.set_axis_off()
plt.show()
# Chart for comparing wildfire population exposures of total and high-vulnerability over the years
plt.figure(figsize=(8,5))
plt.plot(exposure_summary['YEAR_'], exposure_summary['total_pop_exposed'], label='Total Population Exposed')
plt.plot(exposure_summary['YEAR_'], exposure_summary['high_vuln_pop_exposed'], label='High-Vulnerability Population Exposed')
plt.xlabel('Year')
plt.ylabel('Estimated Exposed Population')
plt.title('California Wildfire Population Exposure by Year')
plt.legend()
plt.grid(True)
plt.show()
# Chart for wildfire population exposures of high-vulnerability areas over the years
plt.figure(figsize=(8,5))
plt.plot(exposure_summary['YEAR_'], exposure_summary['high_vuln_pop_exposed'], label='High-Vulnerability Population Exposed', color='orange')
plt.xlabel('Year')
plt.ylabel('Estimated Exposed Population')
plt.title('California Wildfire Vulnerable Population Exposure by Year')
plt.legend()
plt.grid(True)
plt.show()
The 2024 wildfire perimeters are overlapped with several socially vulnerable tracts across California. These high-risk tracts, represented in red on the map, highlight regions where populations may face greater challenges recovering from wildfire impacts due to socioeconomic and demographic factors. The analysis demonstrates how integrating CAL FIRE perimeter data with SVI can identify priority zones for disaster preparedness and recovery planning.