Oh Where, Oh Where Have the Tax Credits Gone; Oh Where, Oh Where Could They Be?

Nick Kunz
Data Mining the City
4 min readOct 20, 2017

This project turned out to be a bit of a departure from my original idea of measures of housing affordability in my previous post “It Hurts to Pay for Housing”. After familiarizing myself with SlippyMapper, I felt compelled to use it again.

I created this interactive map of affordable housing projects within the context of New York, NY from 2013 to 2016 utilizing LIHTC financing. I went through several late night attempts to use a csv database to create an interactive map where I did not have to input the data directly into the code. However, the csv reader would call every value under the field, leaving a mashing of text, numbers, and et cetera. Alternatively, I utilized Python’s dictionaries to get only the information I needed (and the information I didn’t) into the map.

The map itself is pretty straight forward, nothing fancy; just their locations, the project names and their allocation amounts on mouse over. The locations themselves and a little bit of info was all I needed to begin to suggest the premise of my argument. A standard briefing is offered subscripted in the title. Above is the output, below is the info source and code.

import spatialpixel.mapping.slippymapper as slippymapperdef setup():
size(1000, 1000)
global map
map = slippymapper.SlippyMapper(40.7702467, -73.9491463, 12, 'carto-dark', width, height)
one = {'latitude':40.8301159, 'longitude':-73.905367, 'projectname':"1193 Fulton Street", 'amount':'$626,200'}
two = {'latitude':40.829022, 'longitude':-73.888386, 'projectname':"1017 Home St", 'amount':'$1,764,000'}
three = {'latitude':40.828975, 'longitude':-73.9425009, 'projectname':"DTH", 'amount':'$1,375,163'}
four = {'latitude':40.6650755, 'longitude':-73.900194, 'projectname':"Beverly's Place", 'amount':'$2,491,851'}
five = {'latitude':40.6640609, 'longitude':-73.9002828, 'projectname':"HELP Livonia II", 'amount':'$1,323,000'}
six = {'latitude':40.675169, 'longitude':-73.9439213, 'projectname':"St. Marks Apartments", 'amount':'$1,553,167'}
seven = {'latitude':40.8312909, 'longitude':-73.8916894, 'projectname':"1319 Southern Blvd", 'amount':'$551,027'}
eight = {'latitude':40.6831424, 'longitude':-73.9462384, 'projectname':"PH Halsey Hancock", 'amount':'$615,180'}
nine = {'latitude':40.8060061, 'longitude':-73.9466707, 'projectname':"MLG 904 Development", 'amount':'$1,938,000'}
ten = {'latitude':40.720178, 'longitude':-73.987109, 'projectname':"Essex Crossing (Site 8)", 'amount':'$2,638,033'}

eleven = {'latitude':40.805337, 'longitude':-73.987109, 'projectname':"3365 Third Ave", 'amount':'$1,165,516'}
twelve = {'latitude':40.836542, 'longitude':-73.882289, 'projectname':"1815 West Farms", 'amount':'$1,196,575'}
thirteen = {'latitude':40.735646, 'longitude':-73.993898, 'projectname':"FAC Renassance", 'amount':'$1,125,265'}
fourteen = {'latitude':40.857078, 'longitude':-73.897211, 'projectname':"Tiebout Green", 'amount':'$77,847'}
fifteen = {'latitude':40.672777, 'longitude':-73.962802, 'projectname':"FSG Cluster", 'amount':'$1,364,000'}
sixteen = {'latitude':40.787291, 'longitude':-73.944341, 'projectname':"Corona Senior Residence", 'amount':'$1,113,604'}
seventeen = {'latitude':40.681657, 'longitude':-73.926027, 'projectname':"Bridge Community", 'amount':'$394,986'}
eighteen = {'latitude':40.844192, 'longitude':-73.888948, 'projectname':"Lee Goodwin", 'amount':'$1,061,993'}
nineteen = {'latitude':40.686536, 'longitude':-73.945798, 'projectname':"Gates Avenue Residence", 'amount':'$1,278,771'}
twenty = {'latitude':40.843993, 'longitude':-73.925273, 'projectname':"1434 Undercliff Avenue", 'amount':'$1,250,000'}
twentyone = {'latitude':40.855675, 'longitude':-73.895202, 'projectname':"4529 Park Avenue", 'amount':'$1,293,127'}
twentyoneone = {'latitude':40.827819, 'longitude':-73.907327, 'projectname':"545 East 166th Street", 'amount':'$916,000'}

twentytwo = {'latitude':40.847485, 'longitude':-73.894045, 'projectname':"Arthur Clinton Apartments", 'amount':'$1,572,500'}
twentythree = {'latitude':40.847646, 'longitude':-73.918952, 'projectname':"G&M Properties", 'amount':'$1,925,000'}
twentyfour = {'latitude':40.67421, 'longitude':-73.880013, 'projectname':"Pitkin-Berriman Housing", 'amount':'$1,362,600'}
twentyfive = {'latitude':40.679273, 'longitude':-73.895202, 'projectname':"Cypress Hills Senior Housing", 'amount':'$827,708'}
twentysix = {'latitude':40.832098, 'longitude':-73.928026, 'projectname':"Woodcrest Veterans Housing", 'amount':'$631,011'}
twentyseven = {'latitude':40.853945, 'longitude':-73.906375, 'projectname':"Jericho Walton Apartments", 'amount':'$1,201,164'}
twentyeight = {'latitude':40.816153, 'longitude':-73.927956, 'projectname':"Grand and Rogers", 'amount':'$975,939'}
twentynine = {'latitude':40.717061, 'longitude':-73.985739, 'projectname':"Essex Crossing (Site 6)", 'amount':'$1,939,980'}
thirty = {'latitude':40.853468, 'longitude':-73.913629, 'projectname':"1890 Andrews Avenue", 'amount':'$737,126'}
thirtyone = {'latitude':40.860941, 'longitude':-73.9087, 'projectname':"Loring Place North Apartments", 'amount':'$1,023,486'}
thirtytwo = {'latitude':40.72251, 'longitude':-73.947127, 'projectname':"North Brooklyn Opportunities", 'amount':'$779,407'}
thirtythree = {'latitude':40.825248, 'longitude':-73.898537, 'projectname':"Lynn's Place", 'amount':'$1,041,899'}
thirtyfour = {'latitude':40.82747, 'longitude':-73.939189, 'projectname':"WHGA Dorie Miller Apts", 'amount':'$716,000'}
thirtyfive = {'latitude':40.681595, 'longitude':-73.823132, 'projectname':"118th Street Residence", 'amount':'$620,606'}

thirtysix = {'latitude':40.826151, 'longitude':-73.948686, 'projectname':"525 West 145th Street", 'amount':'$1,800,000'}
thirtyseven = {'latitude':40.820161, 'longitude':-73.893245, 'projectname':"914 Simpson Street", 'amount':'$523,080'}
thirtyeight = {'latitude':40.827057, 'longitude':-73.946681, 'projectname':"1772 Amsterdam Avenue ", 'amount':'$921,300'}
thirtynine = {'latitude':40.827864, 'longitude':-73.941128, 'projectname':"369 Edgecombe Avenue ", 'amount':'$792,470'}
forty = {'latitude':40.827695, 'longitude':-73.943017, 'projectname':" 801 St. Nicholas Avenue ", 'amount':'$1,314,765'}
fortyone = {'latitude':40.679273, 'longitude':-73.895202, 'projectname':"137 Jamaica Avenue ", 'amount':'$575,000'}
fortytwo = {'latitude':40.834593, 'longitude': -73.89611, 'projectname':"1420 Crotona Park East ", 'amount':'$1,650,000'}
fortythree = {'latitude':40.835502, 'longitude':-73.894693, 'projectname':"1490 Crotona Park East", 'amount':'$874,000'}
fortyfour = {'latitude':40.667225, 'longitude':-73.923888, 'projectname':"1920 Union Street ", 'amount':'$568,685'}
fortyfive = {'latitude':40.706122, 'longitude':-73.920635, 'projectname':"1344 Willoughby Avenue", 'amount':'$1,742,610'}
fortysix = {'latitude':40.700667, 'longitude':-73.943945, 'projectname':" 717 Flushing Avenue ", 'amount':'$670,996'}
fortyseven = {'latitude':40.825824, 'longitude':-73.916349, 'projectname':"316 East 162nd Street ", 'amount':'$1,556,280'}
lihtc_projects_2016 = [one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twentyone, twentyoneone, twentytwo, twentythree, twentyfour, twentyfive, twentysix, twentyseven, twentyeight, twentynine, thirty, thirtyone, thirtytwo, thirtythree, thirtyfour, thirtyfive, thirtysix, thirtyseven, thirtyeight, thirtynine, forty, fortyone, fortytwo, fortythree, fortyfour, fortyfive, fortysix, fortyseven]

for project in lihtc_projects_2016:
map.addMarker(project['latitude'], project['longitude'], ProjectMarker(project))

map.render()
def draw():
background(255)
map.draw()


# static text
fill(0, 255, 255)
textSize(18)
text("Oh Where, Oh Where Have the Tax Credits Gone?", 20, 30)

fill(255)
textSize(10)
text("The majority of affordable housing developed in US today is financed with Low Income Housing Tax Credits (LIHTC).\n For this reason, LIHTC warrants perspicacity. Although the LIHTC allocations themselves receive much attention, \n less is given to their geography. This map hopes to begin to answering the question, where are these dollars going? \n Perhaps even more importantly, it begins to answer the question, where are these dollars not going? \n This map exhibits LIHTC alloctions in New York, NY from 2013 to 2016.", 20, 50)
fill(255)
textSize(10)
text("Source: NYC Housing Preservation & Development 2017", 20, 980)

class ProjectMarker(slippymapper.DataMarker):
def drawMarker(self, latitude, longitude, marker):

diameter = 7

if dist(latitude, longitude, mouseX, mouseY) < diameter / 2:
marker.fill(0, 255, 255)
marker.stroke(0)
marker.ellipse(latitude, longitude, diameter, diameter)
marker.textSize(10)
marker.text(self.data['projectname'], latitude + 15, longitude + 5)
marker.text(self.data['amount'], latitude + 15, longitude + 20)
else:
marker.noFill()
marker.stroke(0, 255, 255)
marker.ellipse(latitude, longitude, diameter, diameter)

--

--