Overview

The data from the Census Application Programming Interface (API) show the percentage of individuals, aged 25 and older, in Tennessee’s 95 counties who have attained a bachelor’s degree or higher. Williamson County ranked first with 62.7%, while Rutherford County, home to Middle Tennessee State University, ranked sixth at 35.8%. Lake County, on the other hand, ranked last with an estimate of only 9.4%.

The findings reveal a significant educational divide across Tennessee. Williamson County’s attainment rate is significantly higher than Lake County’s. It appears that counties surrounding the Nashville Metropolitan Statistical Area generally have the highest educational attainment rates in the state. This suggests that access to higher education, professional development opportunities, and economic growth may be associated with higher levels of educational achievement.

County Variable Estimate Margin of Error
Williamson County, Tennessee DP02_0068P 62.7 1.0
Davidson County, Tennessee DP02_0068P 48.4 0.6
Knox County, Tennessee DP02_0068P 41.0 0.8
Wilson County, Tennessee DP02_0068P 37.8 1.7
Hamilton County, Tennessee DP02_0068P 37.5 0.9
Rutherford County, Tennessee DP02_0068P 35.8 1.0
Shelby County, Tennessee DP02_0068P 34.3 0.6
Washington County, Tennessee DP02_0068P 34.3 1.7
Sumner County, Tennessee DP02_0068P 33.6 1.3
Montgomery County, Tennessee DP02_0068P 31.1 1.3
Putnam County, Tennessee DP02_0068P 29.8 1.9
Loudon County, Tennessee DP02_0068P 29.4 2.2
Blount County, Tennessee DP02_0068P 28.6 1.4
Maury County, Tennessee DP02_0068P 28.0 1.6
Anderson County, Tennessee DP02_0068P 27.5 1.8
Fayette County, Tennessee DP02_0068P 27.3 1.7
Sullivan County, Tennessee DP02_0068P 26.8 1.1
Cheatham County, Tennessee DP02_0068P 26.6 2.1
Madison County, Tennessee DP02_0068P 26.6 1.5
Bradley County, Tennessee DP02_0068P 24.4 1.7
Moore County, Tennessee DP02_0068P 24.1 5.1
Franklin County, Tennessee DP02_0068P 23.9 2.0
Marshall County, Tennessee DP02_0068P 23.1 2.7
Weakley County, Tennessee DP02_0068P 22.7 2.4
Robertson County, Tennessee DP02_0068P 22.4 1.7
Roane County, Tennessee DP02_0068P 22.1 1.5
Chester County, Tennessee DP02_0068P 22.0 3.3
Dickson County, Tennessee DP02_0068P 22.0 1.9
Sevier County, Tennessee DP02_0068P 21.8 1.6
Coffee County, Tennessee DP02_0068P 21.4 1.6
Unicoi County, Tennessee DP02_0068P 21.3 3.2
Dyer County, Tennessee DP02_0068P 21.1 2.8
DeKalb County, Tennessee DP02_0068P 20.8 3.4
Jefferson County, Tennessee DP02_0068P 20.8 2.0
Tipton County, Tennessee DP02_0068P 20.7 1.9
Carter County, Tennessee DP02_0068P 20.6 1.6
Lincoln County, Tennessee DP02_0068P 20.6 2.1
Sequatchie County, Tennessee DP02_0068P 20.6 3.0
Gibson County, Tennessee DP02_0068P 20.5 1.7
Giles County, Tennessee DP02_0068P 20.1 2.0
Hamblen County, Tennessee DP02_0068P 20.0 1.9
Cumberland County, Tennessee DP02_0068P 19.1 1.4
Henry County, Tennessee DP02_0068P 19.1 2.0
Pickett County, Tennessee DP02_0068P 18.9 3.8
Greene County, Tennessee DP02_0068P 18.7 1.5
McMinn County, Tennessee DP02_0068P 18.6 1.8
Rhea County, Tennessee DP02_0068P 18.6 2.6
Smith County, Tennessee DP02_0068P 18.5 2.3
Obion County, Tennessee DP02_0068P 18.3 2.0
Claiborne County, Tennessee DP02_0068P 18.2 2.3
Carroll County, Tennessee DP02_0068P 18.1 1.9
Stewart County, Tennessee DP02_0068P 17.6 2.9
Johnson County, Tennessee DP02_0068P 17.5 2.8
Bedford County, Tennessee DP02_0068P 17.2 2.2
Marion County, Tennessee DP02_0068P 17.1 2.2
Monroe County, Tennessee DP02_0068P 17.1 1.9
Cannon County, Tennessee DP02_0068P 16.8 3.5
Crockett County, Tennessee DP02_0068P 16.6 2.5
Polk County, Tennessee DP02_0068P 16.6 2.5
Hawkins County, Tennessee DP02_0068P 16.2 1.6
Henderson County, Tennessee DP02_0068P 16.1 2.8
Grainger County, Tennessee DP02_0068P 15.9 2.6
Humphreys County, Tennessee DP02_0068P 15.7 2.3
Lawrence County, Tennessee DP02_0068P 15.2 1.6
Hardin County, Tennessee DP02_0068P 15.1 2.2
White County, Tennessee DP02_0068P 15.1 2.0
Jackson County, Tennessee DP02_0068P 15.0 2.9
Overton County, Tennessee DP02_0068P 15.0 2.3
Fentress County, Tennessee DP02_0068P 14.6 2.5
Haywood County, Tennessee DP02_0068P 14.5 2.3
Grundy County, Tennessee DP02_0068P 14.3 2.3
Trousdale County, Tennessee DP02_0068P 14.3 3.4
Perry County, Tennessee DP02_0068P 14.2 3.5
Union County, Tennessee DP02_0068P 14.2 2.4
Warren County, Tennessee DP02_0068P 14.1 1.8
Decatur County, Tennessee DP02_0068P 14.0 2.6
Hickman County, Tennessee DP02_0068P 13.9 2.0
Wayne County, Tennessee DP02_0068P 13.8 2.2
Van Buren County, Tennessee DP02_0068P 13.7 3.5
Houston County, Tennessee DP02_0068P 13.6 3.0
Morgan County, Tennessee DP02_0068P 13.6 2.4
Meigs County, Tennessee DP02_0068P 13.5 2.5
McNairy County, Tennessee DP02_0068P 13.0 1.9
Scott County, Tennessee DP02_0068P 12.9 2.0
Benton County, Tennessee DP02_0068P 12.8 2.4
Campbell County, Tennessee DP02_0068P 12.7 2.2
Macon County, Tennessee DP02_0068P 12.5 2.5
Bledsoe County, Tennessee DP02_0068P 12.4 2.5
Hardeman County, Tennessee DP02_0068P 12.2 2.2
Lauderdale County, Tennessee DP02_0068P 12.0 1.7
Clay County, Tennessee DP02_0068P 11.5 2.9
Cocke County, Tennessee DP02_0068P 11.0 1.8
Hancock County, Tennessee DP02_0068P 10.8 2.4
Lewis County, Tennessee DP02_0068P 10.3 2.9
Lake County, Tennessee DP02_0068P 9.4 2.7

Code:

Here is the code that produced the analysis, which relied on information from the U.S. Census Bureau’s American Community Survey.

############################################################
# STEP 1: Load Packages
############################################################

if (!require("tidycensus")) install.packages("tidycensus")
if (!require("tidyverse")) install.packages("tidyverse")
if (!require("kableExtra")) install.packages("kableExtra")

library(tidycensus)
library(tidyverse)
library(kableExtra)

############################################################
# STEP 2: Verify Census API Key
############################################################

if (!nzchar(Sys.getenv("CENSUS_API_KEY"))) {
  
  stop(
    paste(
      "\nNo Census API key was found.",
      "\n\nTo obtain a free Census API key, visit:",
      "\nhttps://api.census.gov/data/key_signup.html",
      "\n\nThen run the one-time setup code at the",
      "\ntop of this script to store your key.",
      "\n"
    )
  )
  
}

############################################################
# STEP 3: Explore 2024 Codebooks and Choose an ACS Variable
############################################################

ProfileTables  <- load_variables(2024, "acs5/profile")
# DetailedTables <- load_variables(2024, "acs5")
# SubjectTables  <- load_variables(2024, "acs5/subject")


# Replace the variable code below with the ACS variable
# you want to download.

my_variable <- "DP02_0068P" # <<< CAN CHANGE THE VARIABLE CODE

# Example variables:
#
# DP05_0001  = Total population
# DP03_0062  = Median Household Income
# DP03_0128P = Poverty Rate
# DP02_0068P = Bachelor's Degree or Higher Rate
# DP05_0018  = Median Age
# DP04_0046P = Homeownership Rate
# DP04_0134  = Median Gross Rent
# DP04_0142P = Pct. renters paying 35%+ HH income in rent (GRAPI)
# DP05_0090P = Hispanic or Latino Population Percentage
# DP02_0094P = Foreign-Born Percentage
# DP03_0009P = Unemployment Rate
# DP03_0025  = Average Commute Time

############################################################
# STEP 4: Download Tennessee County Data
############################################################

mydata <- get_acs(
  geography = "county",
  state = "TN",  # <<< CAN CHANGE THE STATE
  year = 2024,
  survey = "acs5",
  variables = my_variable
)

############################################################
# STEP 5: Keep Needed Variables
############################################################

mydata <- mydata |>
  select(
    County = NAME,
    Variable = variable,
    Estimate = estimate,
    Margin_of_Error = moe
  )

############################################################
# STEP 6: Sort Results from Highest to Lowest
############################################################

mydata <- mydata |>
  arrange(desc(Estimate))

############################################################
# STEP 7: Display Results as a Table
############################################################

ResultsTable <- mydata |>
  kbl(
    col.names = c(
      "County",
      "Variable",
      "Estimate",
      "Margin of Error"
    ),
    format.args = list(big.mark = ",")
  ) |>
  kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = FALSE
  )
ResultsTable