Introduction

In 2007, NYC Parks launched MillionTreesNYC, an initiative to plant and care for one million trees to New York City’s parks, streets, and backyards. This project wasn’t just about adding the sheer quantity of trees, but was also designed to build up ecologically healthy urban forests, increase natural biodiversity, and increase environmental health benefits for all New Yorkers. The millionth tree was planted in NYC in 2015, and I want to see some of the effects of the program. Are trees more equally dispersed across the 5 boroughs after the project? Did species biodiversity increase, i.e. is there a wider variety of trees distributed across the city? Are there more native species and fewer introduced/invasive species of tree after the project? A comparison of street tree data from 1995 and 2015 should be able to provide the answers to these questions.

Data

NYC Open Data provides a huge number of datasets, including census data on street trees planted within the city. I am using the 1995 Street Tree Census (downloaded from https://data.cityofnewyork.us/Environment/1995-Street-Tree-Census/kyad-zm4j) and the 2015 Street Tree Census (downloaded from https://data.cityofnewyork.us/Environment/2015-Street-Tree-Census-Tree-Data/uvpi-gqnh). My key variables are the longtitude/latitude coordinates of each tree, the species and Latin name of each tree, and the borough where each tree is located.

1995 NYC Street Tree Census

library(dplyr) library(ggplot2) library(ggrepel) library(readr) trees1995 <- read_csv(“/Users/meredithpowers/Desktop/tree1995.csv”)

2015 NYC Street Tree Census

trees2015 <- read_csv(“/Users/meredithpowers/Desktop/tree2015.csv”)

1995 Street Tree Map

ggplot(trees1995, aes(x = Longitude, y = Latitude)) + 
  geom_point(na.rm = TRUE, show.legend = FALSE, shape = ".", color="seagreen4") +
  ylim(c(40.5, 40.92)) + 
  xlim(c(-74.22, -73.69)) +
  theme(axis.title.x=element_blank(), axis.title.y=element_blank(), axis.text.x=element_blank(), axis.text.y=element_blank()) +
   labs(title="Street Trees NYC Density Map 1995")

2015 Street Tree Map

ggplot(trees2015, aes(x = longitude, y = latitude)) + 
  geom_point(na.rm = TRUE, show.legend = FALSE, shape = ".", color="seagreen4") +
  theme(axis.title.x=element_blank(), axis.title.y=element_blank(), axis.text.x=element_blank(), axis.text.y=element_blank()) +
   labs(title="Street Trees NYC Density Map 2015")

Tree species diversity, 1995

library(plyr)
div95 = count(trees1995, "Spc_Common")
div95
g <- ggplot(div95, aes(Spc_Common, freq, color = Spc_Common))
g + geom_count(na.rm = TRUE, show.legend = FALSE) +
  theme(axis.text.x=element_blank()) +
  labs(subtitle="Tree Types", 
       x="different species of tree",
       y="frequency", 
       title="Tree Diversity 1995")

Tree species diversity, 2015

div15 = count(trees2015, "spc_common")
div15
g2 <- ggplot(div15, aes(spc_common, freq, color = spc_common))
g2 + geom_count(na.rm = TRUE, show.legend = FALSE) +
  theme(axis.text.x=element_blank()) +
  labs(subtitle="Tree Types", 
       x="different species of tree",
       y="frequency", 
       title="Tree Diversity 2015")

Frequency of street trees by type, 1995

theme_set(theme_bw())
ggplot(div95, aes(x=Spc_Common, y=freq)) + 
  geom_bar(stat="identity", width=.5, fill="seagreen4") + 
  theme(axis.text.x=element_blank()) +
  labs(subtitle="number of trees by type", 
       x="different tree species",
       y="frequency",
       title="Tree Diversity 1995")

Frequency of street trees by type, 2015

theme_set(theme_bw())
ggplot(div15, aes(x=spc_common, y=freq)) + 
  geom_bar(stat="identity", width=.5, fill="seagreen4") + 
  theme(axis.text.x=element_blank()) +
  labs(subtitle="number of trees by type", 
       x="different tree species",
       y="frequency", 
       title="Tree Diversity 2015")

Frequency and Diversity of Street Trees by Borough, 1995

theme_set(theme_bw())
b <- ggplot(trees1995, aes(Borough, fill = Spc_Latin))
b + geom_bar(show.legend = FALSE) +
  theme(axis.title.x=element_blank()) +
  labs(subtitle="number of trees by borough", 
       y="count", 
       title="Distribution of Different Species of Street Trees, 1995")

Frequency and Diversity of Street Trees by Borough, 2015

theme_set(theme_bw())
b2 <- ggplot(trees2015, aes(borough, fill = spc_latin))
b2 + geom_bar(show.legend = FALSE) +
  theme(axis.title.x=element_blank()) +
  labs(subtitle="number of trees by borough", 
       y="count", 
       title="Distribution of Different Species of Street Trees, 2015")

LS0tCnRpdGxlOiAnSG9tZXdvcmsgOTogVHdvIERlY2FkZXMgb2YgTllDIFN0cmVldCBUcmVlcycKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogbHVtZW4KICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCi0tLQoKIyBJbnRyb2R1Y3Rpb24KCkluIDIwMDcsIE5ZQyBQYXJrcyBsYXVuY2hlZCAqTWlsbGlvblRyZWVzTllDKiwgYW4gaW5pdGlhdGl2ZSB0byBwbGFudCBhbmQgY2FyZSBmb3Igb25lIG1pbGxpb24gdHJlZXMgdG8gTmV3IFlvcmsgQ2l0eSdzIHBhcmtzLCBzdHJlZXRzLCBhbmQgYmFja3lhcmRzLiBUaGlzIHByb2plY3Qgd2Fzbid0IGp1c3QgYWJvdXQgYWRkaW5nIHRoZSBzaGVlciBxdWFudGl0eSBvZiB0cmVlcywgYnV0IHdhcyBhbHNvIGRlc2lnbmVkIHRvIGJ1aWxkIHVwIGVjb2xvZ2ljYWxseSBoZWFsdGh5IHVyYmFuIGZvcmVzdHMsIGluY3JlYXNlIG5hdHVyYWwgYmlvZGl2ZXJzaXR5LCBhbmQgaW5jcmVhc2UgZW52aXJvbm1lbnRhbCBoZWFsdGggYmVuZWZpdHMgZm9yIGFsbCBOZXcgWW9ya2Vycy4gVGhlIG1pbGxpb250aCB0cmVlIHdhcyBwbGFudGVkIGluIE5ZQyBpbiAyMDE1LCBhbmQgSSB3YW50IHRvIHNlZSBzb21lIG9mIHRoZSBlZmZlY3RzIG9mIHRoZSBwcm9ncmFtLiBBcmUgdHJlZXMgbW9yZSBlcXVhbGx5IGRpc3BlcnNlZCBhY3Jvc3MgdGhlIDUgYm9yb3VnaHMgYWZ0ZXIgdGhlIHByb2plY3Q/IERpZCBzcGVjaWVzIGJpb2RpdmVyc2l0eSBpbmNyZWFzZSwgaS5lLiBpcyB0aGVyZSBhIHdpZGVyIHZhcmlldHkgb2YgdHJlZXMgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBjaXR5PyBBcmUgdGhlcmUgbW9yZSBuYXRpdmUgc3BlY2llcyBhbmQgZmV3ZXIgaW50cm9kdWNlZC9pbnZhc2l2ZSBzcGVjaWVzIG9mIHRyZWUgYWZ0ZXIgdGhlIHByb2plY3Q/IEEgY29tcGFyaXNvbiBvZiBzdHJlZXQgdHJlZSBkYXRhIGZyb20gMTk5NSBhbmQgMjAxNSBzaG91bGQgYmUgYWJsZSB0byBwcm92aWRlIHRoZSBhbnN3ZXJzIHRvIHRoZXNlIHF1ZXN0aW9ucy4KCiMgRGF0YQoKTllDIE9wZW4gRGF0YSBwcm92aWRlcyBhIGh1Z2UgbnVtYmVyIG9mIGRhdGFzZXRzLCBpbmNsdWRpbmcgY2Vuc3VzIGRhdGEgb24gc3RyZWV0IHRyZWVzIHBsYW50ZWQgd2l0aGluIHRoZSBjaXR5LiBJIGFtIHVzaW5nIHRoZSAxOTk1IFN0cmVldCBUcmVlIENlbnN1cyAoZG93bmxvYWRlZCBmcm9tIGh0dHBzOi8vZGF0YS5jaXR5b2ZuZXd5b3JrLnVzL0Vudmlyb25tZW50LzE5OTUtU3RyZWV0LVRyZWUtQ2Vuc3VzL2t5YWQtem00aikgYW5kIHRoZSAyMDE1IFN0cmVldCBUcmVlIENlbnN1cyAoZG93bmxvYWRlZCBmcm9tIGh0dHBzOi8vZGF0YS5jaXR5b2ZuZXd5b3JrLnVzL0Vudmlyb25tZW50LzIwMTUtU3RyZWV0LVRyZWUtQ2Vuc3VzLVRyZWUtRGF0YS91dnBpLWdxbmgpLiBNeSBrZXkgdmFyaWFibGVzIGFyZSB0aGUgbG9uZ3RpdHVkZS9sYXRpdHVkZSBjb29yZGluYXRlcyBvZiBlYWNoIHRyZWUsIHRoZSBzcGVjaWVzIGFuZCBMYXRpbiBuYW1lIG9mIGVhY2ggdHJlZSwgYW5kIHRoZSBib3JvdWdoIHdoZXJlIGVhY2ggdHJlZSBpcyBsb2NhdGVkLiAKCiMgMTk5NSBOWUMgU3RyZWV0IFRyZWUgQ2Vuc3VzCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KHJlYWRyKQp0cmVlczE5OTUgPC0gcmVhZF9jc3YoIi9Vc2Vycy9tZXJlZGl0aHBvd2Vycy9EZXNrdG9wL3RyZWUxOTk1LmNzdiIpCmBgYApsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShyZWFkcikKdHJlZXMxOTk1IDwtIHJlYWRfY3N2KCIvVXNlcnMvbWVyZWRpdGhwb3dlcnMvRGVza3RvcC90cmVlMTk5NS5jc3YiKQoKIzIwMTUgTllDIFN0cmVldCBUcmVlIENlbnN1cwpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQp0cmVlczIwMTUgPC0gcmVhZF9jc3YoIi9Vc2Vycy9tZXJlZGl0aHBvd2Vycy9EZXNrdG9wL3RyZWUyMDE1LmNzdiIpCmBgYAp0cmVlczIwMTUgPC0gcmVhZF9jc3YoIi9Vc2Vycy9tZXJlZGl0aHBvd2Vycy9EZXNrdG9wL3RyZWUyMDE1LmNzdiIpCgojIDE5OTUgU3RyZWV0IFRyZWUgTWFwCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmdncGxvdCh0cmVlczE5OTUsIGFlcyh4ID0gTG9uZ2l0dWRlLCB5ID0gTGF0aXR1ZGUpKSArIAogIGdlb21fcG9pbnQobmEucm0gPSBUUlVFLCBzaG93LmxlZ2VuZCA9IEZBTFNFLCBzaGFwZSA9ICIuIiwgY29sb3I9InNlYWdyZWVuNCIpICsKICB5bGltKGMoNDAuNSwgNDAuOTIpKSArIAogIHhsaW0oYygtNzQuMjIsIC03My42OSkpICsKICB0aGVtZShheGlzLnRpdGxlLng9ZWxlbWVudF9ibGFuaygpLCBheGlzLnRpdGxlLnk9ZWxlbWVudF9ibGFuaygpLCBheGlzLnRleHQueD1lbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dC55PWVsZW1lbnRfYmxhbmsoKSkgKwogICBsYWJzKHRpdGxlPSJTdHJlZXQgVHJlZXMgTllDIERlbnNpdHkgTWFwIDE5OTUiKQpgYGAKCiMyMDE1IFN0cmVldCBUcmVlIE1hcApgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpnZ3Bsb3QodHJlZXMyMDE1LCBhZXMoeCA9IGxvbmdpdHVkZSwgeSA9IGxhdGl0dWRlKSkgKyAKICBnZW9tX3BvaW50KG5hLnJtID0gVFJVRSwgc2hvdy5sZWdlbmQgPSBGQUxTRSwgc2hhcGUgPSAiLiIsIGNvbG9yPSJzZWFncmVlbjQiKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aXRsZS55PWVsZW1lbnRfYmxhbmsoKSwgYXhpcy50ZXh0Lng9ZWxlbWVudF9ibGFuaygpLCBheGlzLnRleHQueT1lbGVtZW50X2JsYW5rKCkpICsKICAgbGFicyh0aXRsZT0iU3RyZWV0IFRyZWVzIE5ZQyBEZW5zaXR5IE1hcCAyMDE1IikKYGBgCgojVHJlZSBzcGVjaWVzIGRpdmVyc2l0eSwgMTk5NQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHBseXIpCmRpdjk1ID0gY291bnQodHJlZXMxOTk1LCAiU3BjX0NvbW1vbiIpCmRpdjk1CmBgYAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0nYXNpcycsIHdhcm4uY29uZmxpY3RzID0gRkFMU0V9CmcgPC0gZ2dwbG90KGRpdjk1LCBhZXMoU3BjX0NvbW1vbiwgZnJlcSwgY29sb3IgPSBTcGNfQ29tbW9uKSkKZyArIGdlb21fY291bnQobmEucm0gPSBUUlVFLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiAgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF9ibGFuaygpKSArCiAgbGFicyhzdWJ0aXRsZT0iVHJlZSBUeXBlcyIsIAogICAgICAgeD0iZGlmZmVyZW50IHNwZWNpZXMgb2YgdHJlZSIsCiAgICAgICB5PSJmcmVxdWVuY3kiLCAKICAgICAgIHRpdGxlPSJUcmVlIERpdmVyc2l0eSAxOTk1IikKYGBgCgojVHJlZSBzcGVjaWVzIGRpdmVyc2l0eSwgMjAxNSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgd2Fybi5jb25mbGljdHMgPSBGQUxTRX0KZGl2MTUgPSBjb3VudCh0cmVlczIwMTUsICJzcGNfY29tbW9uIikKZGl2MTUKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSJhc2lzIiwgd2Fybi5jb25mbGljdHMgPSBGQUxTRX0KZzIgPC0gZ2dwbG90KGRpdjE1LCBhZXMoc3BjX2NvbW1vbiwgZnJlcSwgY29sb3IgPSBzcGNfY29tbW9uKSkKZzIgKyBnZW9tX2NvdW50KG5hLnJtID0gVFJVRSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKwogIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfYmxhbmsoKSkgKwogIGxhYnMoc3VidGl0bGU9IlRyZWUgVHlwZXMiLCAKICAgICAgIHg9ImRpZmZlcmVudCBzcGVjaWVzIG9mIHRyZWUiLAogICAgICAgeT0iZnJlcXVlbmN5IiwgCiAgICAgICB0aXRsZT0iVHJlZSBEaXZlcnNpdHkgMjAxNSIpCmBgYAoKIyBGcmVxdWVuY3kgb2Ygc3RyZWV0IHRyZWVzIGJ5IHR5cGUsIDE5OTUKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgd2Fybi5jb25mbGljdHMgPSBGQUxTRX0KdGhlbWVfc2V0KHRoZW1lX2J3KCkpCmdncGxvdChkaXY5NSwgYWVzKHg9U3BjX0NvbW1vbiwgeT1mcmVxKSkgKyAKICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHdpZHRoPS41LCBmaWxsPSJzZWFncmVlbjQiKSArIAogIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfYmxhbmsoKSkgKwogIGxhYnMoc3VidGl0bGU9Im51bWJlciBvZiB0cmVlcyBieSB0eXBlIiwgCiAgICAgICB4PSJkaWZmZXJlbnQgdHJlZSBzcGVjaWVzIiwKICAgICAgIHk9ImZyZXF1ZW5jeSIsCiAgICAgICB0aXRsZT0iVHJlZSBEaXZlcnNpdHkgMTk5NSIpCmBgYAoKIyBGcmVxdWVuY3kgb2Ygc3RyZWV0IHRyZWVzIGJ5IHR5cGUsIDIwMTUKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgd2Fybi5jb25mbGljdHMgPSBGQUxTRX0KdGhlbWVfc2V0KHRoZW1lX2J3KCkpCmdncGxvdChkaXYxNSwgYWVzKHg9c3BjX2NvbW1vbiwgeT1mcmVxKSkgKyAKICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHdpZHRoPS41LCBmaWxsPSJzZWFncmVlbjQiKSArIAogIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfYmxhbmsoKSkgKwogIGxhYnMoc3VidGl0bGU9Im51bWJlciBvZiB0cmVlcyBieSB0eXBlIiwgCiAgICAgICB4PSJkaWZmZXJlbnQgdHJlZSBzcGVjaWVzIiwKICAgICAgIHk9ImZyZXF1ZW5jeSIsIAogICAgICAgdGl0bGU9IlRyZWUgRGl2ZXJzaXR5IDIwMTUiKQpgYGAKCgojIEZyZXF1ZW5jeSBhbmQgRGl2ZXJzaXR5IG9mIFN0cmVldCBUcmVlcyBieSBCb3JvdWdoLCAxOTk1CmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnRoZW1lX3NldCh0aGVtZV9idygpKQpiIDwtIGdncGxvdCh0cmVlczE5OTUsIGFlcyhCb3JvdWdoLCBmaWxsID0gU3BjX0xhdGluKSkKYiArIGdlb21fYmFyKHNob3cubGVnZW5kID0gRkFMU0UpICsKICB0aGVtZShheGlzLnRpdGxlLng9ZWxlbWVudF9ibGFuaygpKSArCiAgbGFicyhzdWJ0aXRsZT0ibnVtYmVyIG9mIHRyZWVzIGJ5IGJvcm91Z2giLCAKICAgICAgIHk9ImNvdW50IiwgCiAgICAgICB0aXRsZT0iRGlzdHJpYnV0aW9uIG9mIERpZmZlcmVudCBTcGVjaWVzIG9mIFN0cmVldCBUcmVlcywgMTk5NSIpCmBgYAoKCiMgRnJlcXVlbmN5IGFuZCBEaXZlcnNpdHkgb2YgU3RyZWV0IFRyZWVzIGJ5IEJvcm91Z2gsIDIwMTUKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdGhlbWVfc2V0KHRoZW1lX2J3KCkpCmIyIDwtIGdncGxvdCh0cmVlczIwMTUsIGFlcyhib3JvdWdoLCBmaWxsID0gc3BjX2xhdGluKSkKYjIgKyBnZW9tX2JhcihzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSkgKwogIGxhYnMoc3VidGl0bGU9Im51bWJlciBvZiB0cmVlcyBieSBib3JvdWdoIiwgCiAgICAgICB5PSJjb3VudCIsIAogICAgICAgdGl0bGU9IkRpc3RyaWJ1dGlvbiBvZiBEaWZmZXJlbnQgU3BlY2llcyBvZiBTdHJlZXQgVHJlZXMsIDIwMTUiKQpgYGAKCgoKCgoKCgoKCgoKCgoKCgo=