The Financial Stability of Private Colleges

The Chronicle of Higher Education released a list of the financial composite scores for each private university in the United States. I wanted to try and work with the leaflet package to create an interactive map. Here’s what I came up with.

library(readr)
library(rgdal)
library(rgeos)
library(sp)
library(leaflet)
library(magrittr)

I had to get the dataframes into the right format for the leaflet package to work properly. That required some cleaning and some merging. The most important thing I did was use the geocode function in the ggmap package to acquire the longitude and latitude of every college on the list. Unfortunately it wasn’t 100% accurate, but it got it right most of the time.

college <- read_csv("D:/mapping_colleges/chronicle.csv")
college$name <- college$`"College"`
geocodes <- read_csv("D:/mapping_colleges/geocodes.csv")

merge <- cbind(college, geocodes)
geocodes$X1 <- NULL
merge <- na.omit(merge)

wgs84<-CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0")
ourCoords <- data.frame(lon = merge$lon, lat = merge$lat)
ourSpatialPoints <- SpatialPointsDataFrame(ourCoords, data = data.frame(ID = merge$name), proj4string = wgs84)

I also wanted to create a helpful pop up whenever the user clicked on one of the dots. Here I created a pop up that did two things. First, it the name of the college. Second, it gives the composite score which indicates overall financial health.

pop<-paste0("<b>Name</b>: ",ourSpatialPoints$ID, "<br>",
            "<b>Composite Score</b>: ",merge$`Composite Score`)

I wanted to create a green, yellow, red legend so that people could easily see which schools were in the worse trouble. In order to do that I had to write a simple function to break the scores down into three categories. Then I wanted to use some nice icons.

getColor <- function(merge) {
  sapply(merge$score, function(score) {
    if(score >= 2.5) {
      "green"
    } else if(score >= 1.5) {
      "orange"
    } else {
      "red"
    } })
}


icons <- awesomeIcons(
  icon = 'ios-close',
  iconColor = 'black',
  library = 'ion',
  markerColor = getColor(merge)
)

I really liked the look of a darker map, so I wanted to use that as my base. In addition I wanted the map to be zoomed to the center of the United States to give the user a nice starting point.

leaflet(merge) %>% addTiles('http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', attribution='Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>') %>%
  addAwesomeMarkers(~lon, ~lat, icon=icons, popup =pop)  %>% 
  addLegend("bottomright", colors= c("Green", "Yellow", "Red"), labels= c("> 2.5", "1.5-2.5", "< 1.5"),  title="Composite Score")%>% 
  setView(-98.690940, 39.651426, zoom = 4)

The Finished Product

Every college in the database is mapped here. The scores range from -1 to 3. Any school that scores 1.5 or lower is considered to be in financial distress.