Load in trash data, play around with it:

trash <- read.csv("trash-schedules-by-address.csv",stringsAsFactors = F)
head(trash)
table(trash$Trash)

            773428.4924           F           M         MTH         MWF           T          TF          TH           W 
       3461           1       35775       36610       33071       29105       48745       45667       49871       56778 
table(trash$Recycling)

            2950378.065           F           M           T          TH           W 
       3461           1       64880       69681       94412       49871       56778 
trash <- mutate(trash, freq_trash = ifelse(nchar(Trash)==1,1,
                                           ifelse(Trash=="MTH",2,
                                                  ifelse(Trash=="MWF",3,
                                                         ifelse(Trash=="TF",2,
                                                                ifelse(Trash=="TH",1,NA))))),
                freq_recycling = ifelse(nchar(Recycling)==1,1,
                                           ifelse(Recycling=="MTH",2,
                                                  ifelse(Recycling=="MWF",3,
                                                         ifelse(Recycling=="TF",2,
                                                                ifelse(Recycling=="TH",1,NA))))))

In order to do any spatial things with these data, we need to turn into a spatial points dataframe:

trash$lat <- as.numeric(gsub("\\((\\d+\\.\\d+), (-\\d+\\.\\d+)\\)","\\1",trash$Location))
trash$long <- as.numeric(gsub("\\((\\d+\\.\\d+), (-\\d+\\.\\d+)\\)","\\2",trash$Location))
trash <- trash[!is.na(trash$long),]
trash.spdf <- SpatialPointsDataFrame(coords = cbind(trash$long,trash$lat),
                                               data = trash,
                                               proj4string=CRS("+proj=longlat +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0") # these data are just Long/Lat coords
                                               )

Bring in census geo shapefiles and subset them to Boston area:

Map the Census geographies:

b0 <- ggmap(boston_base, extent="device",legend="none",maprange=T)
Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.
`panel.margin` is deprecated. Please use `panel.spacing` property instead
(b1 <- b0 + 
      geom_polygon(aes(x=long,y=lat,group=group),data=boston_bg,color = "black",alpha=0.4))
Regions defined for each Polygons

(b1 <- b0 + 
      geom_polygon(aes(x=long,y=lat,group=group),data=boston_tracts,color = "black",alpha=0.4))
Regions defined for each Polygons

Look at trash frequency within tracts:

Output tract-level summary for use elsewhere:

Now can map this tabular data in WorldMap via Dataverse, if needed.

LS0tCnRpdGxlOiAiQm9zdG9uIFRyYXNoIFBpY2t1cCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkobWFwdG9vbHMpIApsaWJyYXJ5KHJnZGFsKSAKbGlicmFyeShSZ29vZ2xlTWFwcykgIyBnb29nbGVtYXBzIEFQSSB0b29sCmxpYnJhcnkoY2xhc3NJbnQpIApsaWJyYXJ5KFJDb2xvckJyZXdlcikgCmxpYnJhcnkoZ2dwbG90Mik7IGxpYnJhcnkoZ2dtYXApIApsaWJyYXJ5KG1hcHMpO2xpYnJhcnkobWFwZGF0YSkKbGlicmFyeShyZ2VvcykKbGlicmFyeSh0aWR5Y2Vuc3VzKQpjZW5zdXNfYXBpX2tleShTeXMuZ2V0ZW52KCJDRU5TVVNfQVBJX0tFWSIpKQpsaWJyYXJ5KHRpZ3JpcykgIyB0byBwdWxsIGNlbnN1cyBzaGFwZWZpbGVzIGZyb20gdGhlIHdlYiBBUEkKbGlicmFyeShzZikKbGlicmFyeSh0aWR5dmVyc2UpCmBgYAoKTG9hZCBpbiB0cmFzaCBkYXRhLCBwbGF5IGFyb3VuZCB3aXRoIGl0OgoKYGBge3IsIGVjaG89VFJVRX0KdHJhc2ggPC0gcmVhZC5jc3YoInRyYXNoLXNjaGVkdWxlcy1ieS1hZGRyZXNzLmNzdiIsc3RyaW5nc0FzRmFjdG9ycyA9IEYpCmhlYWQodHJhc2gpCmBgYAoKYGBge3J9CnRhYmxlKHRyYXNoJFRyYXNoKQp0YWJsZSh0cmFzaCRSZWN5Y2xpbmcpCnRyYXNoIDwtIG11dGF0ZSh0cmFzaCwgZnJlcV90cmFzaCA9IGlmZWxzZShuY2hhcihUcmFzaCk9PTEsMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShUcmFzaD09Ik1USCIsMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoVHJhc2g9PSJNV0YiLDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShUcmFzaD09IlRGIiwyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFRyYXNoPT0iVEgiLDEsTkEpKSkpKSwKICAgICAgICAgICAgICAgIGZyZXFfcmVjeWNsaW5nID0gaWZlbHNlKG5jaGFyKFJlY3ljbGluZyk9PTEsMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShSZWN5Y2xpbmc9PSJNVEgiLDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFJlY3ljbGluZz09Ik1XRiIsMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFJlY3ljbGluZz09IlRGIiwyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKFJlY3ljbGluZz09IlRIIiwxLE5BKSkpKSkpCmBgYAoKSW4gb3JkZXIgdG8gZG8gYW55IHNwYXRpYWwgdGhpbmdzIHdpdGggdGhlc2UgZGF0YSwgd2UgbmVlZCB0byB0dXJuIGludG8gYSBzcGF0aWFsIHBvaW50cyBkYXRhZnJhbWU6CmBgYHtyfQp0cmFzaCRsYXQgPC0gYXMubnVtZXJpYyhnc3ViKCJcXCgoXFxkK1xcLlxcZCspLCAoLVxcZCtcXC5cXGQrKVxcKSIsIlxcMSIsdHJhc2gkTG9jYXRpb24pKQp0cmFzaCRsb25nIDwtIGFzLm51bWVyaWMoZ3N1YigiXFwoKFxcZCtcXC5cXGQrKSwgKC1cXGQrXFwuXFxkKylcXCkiLCJcXDIiLHRyYXNoJExvY2F0aW9uKSkKdHJhc2ggPC0gdHJhc2hbIWlzLm5hKHRyYXNoJGxvbmcpLF0KdHJhc2guc3BkZiA8LSBTcGF0aWFsUG9pbnRzRGF0YUZyYW1lKGNvb3JkcyA9IGNiaW5kKHRyYXNoJGxvbmcsdHJhc2gkbGF0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdHJhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvajRzdHJpbmc9Q1JTKCIrcHJvaj1sb25nbGF0ICtkYXR1bT1OQUQ4MyArbm9fZGVmcyArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAiKSAjIHRoZXNlIGRhdGEgYXJlIGp1c3QgTG9uZy9MYXQgY29vcmRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQpgYGAKCkJyaW5nIGluIGNlbnN1cyBnZW8gc2hhcGVmaWxlcyBhbmQgc3Vic2V0IHRoZW0gdG8gQm9zdG9uIGFyZWE6CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0Kb3B0aW9ucyh0aWdyaXNfY2xhc3MgPSAic3AiLHRpZ3Jpc191c2VfY2FjaGUgPSBULGNiPVQpCmJnIDwtIHRpZ3Jpczo6YmxvY2tfZ3JvdXBzKCJNQSIsIlN1ZmZvbGsiLHllYXIgPSAiMjAxNSIpCnRyYWN0cyA8LSB0aWdyaXM6OnRyYWN0cygiTUEiLCJTdWZmb2xrIix5ZWFyID0gIjIwMTUiKQp0b3ducyA8LSB0aWdyaXM6OmNvdW50eV9zdWJkaXZpc2lvbnMoIk1BIiwiU3VmZm9sayIseWVhciA9ICIyMDE1IikKYm9zdG9uIDwtIHRvd25zW3doaWNoKHRvd25zQGRhdGEkTkFNRSA9PSAiQm9zdG9uIiksXQpib3N0b25fYmcgPC0gYmdbYm9zdG9uLF0KYm9zdG9uX3RyYWN0cyA8LSB0cmFjdHNbYm9zdG9uLF0gIyB3b3VsZCBiZSBncmVhdCB0byBnZXQgdHJhY3RzIGZ1bGx5IHdpdGhpbiBCb3N0b24uLi4gc2F2aW5nIHRoYXQgZm9yIGFub3RoZXIgdGltZQoKYGBgCgpNYXAgdGhlIENlbnN1cyBnZW9ncmFwaGllczoKCmBgYHtyfQpib3N0b25fYmFzZSA8LSBnZXRfbWFwKGxvY2F0aW9uPSJCb3N0b24sIE1BIix6b29tPTEyLCBjb2xvcj0iY29sb3IiLG1hcHR5cGU9InRlcnJhaW4iLGNyb3A9VCkKCmIwIDwtIGdnbWFwKGJvc3Rvbl9iYXNlLCBleHRlbnQ9ImRldmljZSIsbGVnZW5kPSJub25lIixtYXByYW5nZT1UKQoKKGIxIDwtIGIwICsgCiAgICAgIGdlb21fcG9seWdvbihhZXMoeD1sb25nLHk9bGF0LGdyb3VwPWdyb3VwKSxkYXRhPWJvc3Rvbl9iZyxjb2xvciA9ICJibGFjayIsYWxwaGE9MC40KSkKCmBgYAoKYGBge3J9CihiMSA8LSBiMCArIAogICAgICBnZW9tX3BvbHlnb24oYWVzKHg9bG9uZyx5PWxhdCxncm91cD1ncm91cCksZGF0YT1ib3N0b25fdHJhY3RzLGNvbG9yID0gImJsYWNrIixhbHBoYT0wLjQpKQpgYGAKCgpMb29rIGF0IHRyYXNoIGZyZXF1ZW5jeSB3aXRoaW4gdHJhY3RzOgoKYGBge3J9CnRyYWN0c19vdmVybGF5IDwtIG92ZXIodHJhc2guc3BkZixib3N0b25fdHJhY3RzKQoKdHJhc2guc3BkZjIgPC0gY2JpbmQoZGF0YS5mcmFtZSh0cmFzaC5zcGRmKSwgdHJhY3RzX292ZXJsYXkpICMgYXR0YWNoIHRoaXMgZGF0YSBhYm91dCB0cmFjdHMgKHBvbHlnb25zKSBiYWNrIHRvIGVhY2ggcm93IG9mIHBvaW50IGRhdGEKCiMgdGhlbiBzdW1tYXJpemUgcG9pbnQgZGF0YSB3aXRoaW4gZWFjaCB0cmFjdDoKdHJhY3Rfc3VtbWFyeSA8LSBncm91cF9ieSh0cmFzaC5zcGRmMixHRU9JRCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyaXplKAogICAgICAgICAgICAgICAgICAgIGF2Z19mcmVxID0gbWVhbihmcmVxX3RyYXNoLG5hLnJtPVQpLAogICAgICAgICAgICAgICAgICAgIG5fYWRkciA9IGxlbmd0aCghaXMubmEoZnJlcV90cmFzaCkpKQpib3N0b25fdHJhY3RzQGRhdGEkYXZnX2ZyZXEgPC0gdHJhY3Rfc3VtbWFyeSRhdmdfZnJlcVttYXRjaChib3N0b25fdHJhY3RzQGRhdGEkR0VPSUQsdHJhY3Rfc3VtbWFyeSRHRU9JRCldCmJvc3Rvbl90cmFjdHNAZGF0YSRuX2FkZHIgPC0gdHJhY3Rfc3VtbWFyeSRuX2FkZHJbbWF0Y2goYm9zdG9uX3RyYWN0c0BkYXRhJEdFT0lELCB0cmFjdF9zdW1tYXJ5JEdFT0lEKV0KCmJvc3Rvbl90cmFjdHNAZGF0YSRpZCA8LSByb3duYW1lcyhib3N0b25fdHJhY3RzQGRhdGEpCmJvc3Rvbl90cmFjdHMyIDwtIGZvcnRpZnkoYm9zdG9uX3RyYWN0cyxyZWdpb249ImlkIikgIyBzZXBhcmF0ZXMgcG9seWdvbnMgaW50byBpbmRpdmlkdWFsIHZlcnRpY2VzCmJvc3Rvbl90cmFjdHMyIDwtIHBseXI6OmpvaW4oYm9zdG9uX3RyYWN0czIsYm9zdG9uX3RyYWN0c0BkYXRhLGJ5PSJpZCIpCihiMiA8LSBiMCArIAogICAgICBnZW9tX3BvbHlnb24oYWVzKHg9bG9uZyx5PWxhdCxncm91cD1ncm91cCxmaWxsID0gYXZnX2ZyZXEpLGRhdGE9Ym9zdG9uX3RyYWN0czIsYWxwaGE9MC44KSArCiAgICAgICAgICAgIGxhYnMoZmlsbD0iQXZnLiBGcmVxLiBUcmFzaCBQaWNrdXAiKSkKYGBgCgpPdXRwdXQgdHJhY3QtbGV2ZWwgc3VtbWFyeSBmb3IgdXNlIGVsc2V3aGVyZToKCmBgYHtyfQpib3N0b25fdHJhY3RzQGRhdGEkZmlwc19jb2RlIDwtIHBhc3RlMChib3N0b25fdHJhY3RzQGRhdGEkU1RBVEVGUCxib3N0b25fdHJhY3RzQGRhdGEkQ09VTlRZRlAsYm9zdG9uX3RyYWN0c0BkYXRhJFRSQUNUQ0UpCndyaXRlLmNzdihib3N0b25fdHJhY3RzQGRhdGEsImJvc3Rvbl90cmFzaF9ieXRyYWN0LmNzdiIscm93Lm5hbWVzPUYpCmBgYAoKTm93IGNhbiBtYXAgdGhpcyB0YWJ1bGFyIGRhdGEgaW4gV29ybGRNYXAgdmlhIERhdGF2ZXJzZSwgaWYgbmVlZGVkLgoK