This is an R Markdown Notebook.

shootings %>% 
  leaflet() %>% 
  addTiles() %>% 
  setView(lat = 40, lng = -98.5, zoom = 4) %>% 
  addCircleMarkers(stroke = F, 
                   fillOpacity = .6, 
                   radius = ~total_victims/10,
                   label = ~case)
Assuming "longitude" and "latitude" are longitude and latitude, respectively

Middle of the US is at the Kansas-Nebraska border. I heavily rounded. The biggest dot is the Las Vegas Shooting.

median_total_victims <- median(shootings$total_victims)

median_total_victims
[1] 10.5

Median number of victims since the 80’s.

median_fatalities <- median(shootings$fatalities)

median_fatalities
[1] 6

Median number of fatalities.

shootings %>% 
  plot_ly(x = ~year) %>% 
  add_histogram(nbinsx = 40) %>% 
  layout(title = "Shootings per Year",
         xaxis = list(title = "Year"),
         yaxis = list(title = "Number of Shootings"))

Wow, it’s almost like we have unprecedented gun crime in the last three years. Crazy.

shootings %>% 
  mutate(gender = as_factor(gender)) %>% 
  mutate(gender = fct_collapse(gender, 
                               Female = c("Female", "F"), 
                               Male = c("Male", "M"),
                               Unknown = c("unclear", "-"))) %>% 
  mutate(race = as_factor(race)) %>% 
  mutate(race = fct_collapse(race, 
                             White = c("White", "White"), 
                             Black = c("Black", "Black"),
                             Other = c("-", "unclear"))) %>%
  plot_ly(x = ~gender, y = ~race) %>% 
  add_histogram2dcontour() %>% 
  layout(title = "Shootings by Gender and Race",
         xaxis = list(title = "Gender"),
         yaxis = list(title = "Race"))
Unknown levels in `f`: unclear

Can we collectively agree to keep guns away from white dudes, though?

shootings %>% 
  plot_ly(x = ~fatalities, y = ~injured,
          hoverinfo = "text",
          text = ~paste("Injuries:", injured , "<br>", "Fatalities:", fatalities)) %>% 
  add_markers() %>% 
  layout(title = "Shootings Injuries vs Fatalities",
         xaxis = list(title = "Fatalities"),
         yaxis = list(title = "Injuries"))

Scatterplot of injuries vs fatalities. The major outlier (again) is the Vegas shooting.

num_per_year <- shootings %>% 
  filter(fatalities > 3) %>% 
  count(year) %>% 
  filter(year < 2019)

num_per_year
NA

Mass shootings since ’82.

num_per_year_model <- lm(n ~ year, data = num_per_year)
tidy(num_per_year_model)
NA
glance(num_per_year_model)
NA
num_per_year %>% 
  plot_ly(x = ~year,
          y = ~n,
          hoverinfo = "text",
          text = ~paste("Shootings by Year:", n, "<br>", "Year:", year)) %>% 
  add_markers(showlegend = F) %>% 
  add_lines(y = ~fitted(num_per_year_model)) %>% 
  layout(title = "Shootings by Year",
         xaxis = list(title = "Year"),
         yaxis = list(title = "Shootings"))

1982 to current with a regression line. 2018 was a bad year.

LS0tCnRpdGxlOiAiQVByYXR0IGRvdF9tYXBzIEFzc2lnbm1lbnQiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KClRoaXMgaXMgYW4gW1IgTWFya2Rvd25dKGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20pIE5vdGVib29rLiAKCgpgYGB7cn0Kc2hvb3RpbmdzICU+JSAKICBsZWFmbGV0KCkgJT4lIAogIGFkZFRpbGVzKCkgJT4lIAogIHNldFZpZXcobGF0ID0gNDAsIGxuZyA9IC05OC41LCB6b29tID0gNCkgJT4lIAogIGFkZENpcmNsZU1hcmtlcnMoc3Ryb2tlID0gRiwgCiAgICAgICAgICAgICAgICAgICBmaWxsT3BhY2l0eSA9IC42LCAKICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IH50b3RhbF92aWN0aW1zLzEwLAogICAgICAgICAgICAgICAgICAgbGFiZWwgPSB+Y2FzZSkKYGBgCk1pZGRsZSBvZiB0aGUgVVMgaXMgYXQgdGhlIEthbnNhcy1OZWJyYXNrYSBib3JkZXIuIEkgaGVhdmlseSByb3VuZGVkLiBUaGUgYmlnZ2VzdCBkb3QgaXMgdGhlIExhcyBWZWdhcyBTaG9vdGluZy4gCgpgYGB7cn0KbWVkaWFuX3RvdGFsX3ZpY3RpbXMgPC0gbWVkaWFuKHNob290aW5ncyR0b3RhbF92aWN0aW1zKQoKbWVkaWFuX3RvdGFsX3ZpY3RpbXMKYGBgCk1lZGlhbiBudW1iZXIgb2YgdmljdGltcyBzaW5jZSB0aGUgODAncy4KCmBgYHtyfQptZWRpYW5fZmF0YWxpdGllcyA8LSBtZWRpYW4oc2hvb3RpbmdzJGZhdGFsaXRpZXMpCgptZWRpYW5fZmF0YWxpdGllcwpgYGAKTWVkaWFuIG51bWJlciBvZiBmYXRhbGl0aWVzLiAKCmBgYHtyfQpzaG9vdGluZ3MgJT4lIAogIHBsb3RfbHkoeCA9IH55ZWFyKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbShuYmluc3ggPSA0MCkgJT4lIAogIGxheW91dCh0aXRsZSA9ICJTaG9vdGluZ3MgcGVyIFllYXIiLAogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiWWVhciIpLAogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtYmVyIG9mIFNob290aW5ncyIpKQpgYGAKV293LCBpdCdzIGFsbW9zdCBsaWtlIHdlIGhhdmUgdW5wcmVjZWRlbnRlZCBndW4gY3JpbWUgaW4gdGhlIGxhc3QgdGhyZWUgeWVhcnMuIENyYXp5LgoKYGBge3J9CnNob290aW5ncyAlPiUgCiAgbXV0YXRlKGdlbmRlciA9IGFzX2ZhY3RvcihnZW5kZXIpKSAlPiUgCiAgbXV0YXRlKGdlbmRlciA9IGZjdF9jb2xsYXBzZShnZW5kZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmVtYWxlID0gYygiRmVtYWxlIiwgIkYiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWxlID0gYygiTWFsZSIsICJNIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmtub3duID0gYygidW5jbGVhciIsICItIikpKSAlPiUgCiAgbXV0YXRlKHJhY2UgPSBhc19mYWN0b3IocmFjZSkpICU+JSAKICBtdXRhdGUocmFjZSA9IGZjdF9jb2xsYXBzZShyYWNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGl0ZSA9IGMoIldoaXRlIiwgIldoaXRlIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsYWNrID0gYygiQmxhY2siLCAiQmxhY2siKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciA9IGMoIi0iLCAidW5jbGVhciIpKSkgJT4lCiAgcGxvdF9seSh4ID0gfmdlbmRlciwgeSA9IH5yYWNlKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbTJkY29udG91cigpICU+JSAKICBsYXlvdXQodGl0bGUgPSAiU2hvb3RpbmdzIGJ5IEdlbmRlciBhbmQgUmFjZSIsCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJHZW5kZXIiKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlJhY2UiKSkKYGBgCkNhbiB3ZSBjb2xsZWN0aXZlbHkgYWdyZWUgdG8ga2VlcCBndW5zIGF3YXkgZnJvbSB3aGl0ZSBkdWRlcywgdGhvdWdoPwoKYGBge3J9CnNob290aW5ncyAlPiUgCiAgcGxvdF9seSh4ID0gfmZhdGFsaXRpZXMsIHkgPSB+aW5qdXJlZCwKICAgICAgICAgIGhvdmVyaW5mbyA9ICJ0ZXh0IiwKICAgICAgICAgIHRleHQgPSB+cGFzdGUoIkluanVyaWVzOiIsIGluanVyZWQgLCAiPGJyPiIsICJGYXRhbGl0aWVzOiIsIGZhdGFsaXRpZXMpKSAlPiUgCiAgYWRkX21hcmtlcnMoKSAlPiUgCiAgbGF5b3V0KHRpdGxlID0gIlNob290aW5ncyBJbmp1cmllcyB2cyBGYXRhbGl0aWVzIiwKICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkZhdGFsaXRpZXMiKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkluanVyaWVzIikpCmBgYApTY2F0dGVycGxvdCBvZiBpbmp1cmllcyB2cyBmYXRhbGl0aWVzLiBUaGUgbWFqb3Igb3V0bGllciAoYWdhaW4pIGlzIHRoZSBWZWdhcyBzaG9vdGluZy4gCmBgYHtyfQpudW1fcGVyX3llYXIgPC0gc2hvb3RpbmdzICU+JSAKICBmaWx0ZXIoZmF0YWxpdGllcyA+IDMpICU+JSAKICBjb3VudCh5ZWFyKSAlPiUgCiAgZmlsdGVyKHllYXIgPCAyMDE5KQoKbnVtX3Blcl95ZWFyCgpgYGAKTWFzcyBzaG9vdGluZ3Mgc2luY2UgJzgyLgoKYGBge3J9Cm51bV9wZXJfeWVhcl9tb2RlbCA8LSBsbShuIH4geWVhciwgZGF0YSA9IG51bV9wZXJfeWVhcikKCmBgYApgYGB7cn0KdGlkeShudW1fcGVyX3llYXJfbW9kZWwpCgpgYGAKCmBgYHtyfQpnbGFuY2UobnVtX3Blcl95ZWFyX21vZGVsKQoKYGBgCmBgYHtyfQpudW1fcGVyX3llYXIgJT4lIAogIHBsb3RfbHkoeCA9IH55ZWFyLAogICAgICAgICAgeSA9IH5uLAogICAgICAgICAgaG92ZXJpbmZvID0gInRleHQiLAogICAgICAgICAgdGV4dCA9IH5wYXN0ZSgiU2hvb3RpbmdzIGJ5IFllYXI6IiwgbiwgIjxicj4iLCAiWWVhcjoiLCB5ZWFyKSkgJT4lIAogIGFkZF9tYXJrZXJzKHNob3dsZWdlbmQgPSBGKSAlPiUgCiAgYWRkX2xpbmVzKHkgPSB+Zml0dGVkKG51bV9wZXJfeWVhcl9tb2RlbCkpICU+JSAKICBsYXlvdXQodGl0bGUgPSAiU2hvb3RpbmdzIGJ5IFllYXIiLAogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiWWVhciIpLAogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiU2hvb3RpbmdzIikpCmBgYAoxOTgyIHRvIGN1cnJlbnQgd2l0aCBhIHJlZ3Jlc3Npb24gbGluZS4gMjAxOCB3YXMgYSBiYWQgeWVhci4gCg==