library(leaflet)
library(tidyverse)
library(lubridate)
library(htmltools)
library(rtweet)
library(readxl)
library(broom)
library(plotly)
library(DT)
library(dplyr)
shootings %>%
  leaflet() %>%
  addTiles() %>%
  setView(lng = -98.5795, lat = 39.8283, zoom = 4) %>%
  addCircleMarkers(radius = ~log(total_victims))
Assuming "longitude" and "latitude" are longitude and latitude, respectively

This is a general overview map of shootings in the U.S.

shootings %>% 
  summarize(median_total_victims = median(total_victims))

This is the mean of total victims.

shootings %>% 
  summarize(median_fatalities = median(fatalities))

This is the mean of fatalaties.

shootings %>% 
  mutate(case = as_factor(case)) %>% 
  mutate(case = fct_collapse(case)) %>% 
  count(case)

This collapses variables and shows a table of how many shootings each place had.

shootings %>% 
  plot_ly(x = ~year) %>% 
  add_histogram(nbinsx = 40)

This histogram shows the number of shootings over the years.

shootings %>% 
  mutate(race = as_factor(race)) %>% 
  mutate(race = fct_collapse(race,
             Unknown = c("-", "Other", "unclear"))) %>%
  count(race)

Another collapse of variables and table showing shootings per race.

shootings %>%
  mutate(gender = as_factor(gender)) %>% 
  mutate(gender = fct_collapse(gender,
             Unknown = c("-", "Male & Female"))) %>%
  count(gender)

Another collapse of variables and table showing shooters as per thier gender.

shootings %>%
  plot_ly(x = ~gender, y = ~race) %>%
  add_histogram2dcontour()

This is a heat map showing the race and gender of the shooters.

shootings %>% 
  mutate(gender = as_factor(gender)) %>% 
  mutate(gender = fct_collapse(gender)) %>%
  count(gender)
shootings %>%
  mutate(age_of_shooter = as_factor(age_of_shooter)) %>% 
  mutate(age_of_shooter = fct_collapse(age_of_shooter)) %>%
  count(age_of_shooter)
shootings %>%
  plot_ly(x = ~gender, y = ~age_of_shooter) %>%
  add_histogram2dcontour()

This is a heat map that shows the gender and age.

shootings %>% 
  plot_ly(x = ~injured, 
          y = ~fatalities,
           hoverinfo = "text",
          text = ~paste("Fatalities per shooting:")) %>%
  add_markers(showlegend = F) %>%
layout(title = "Number of fatalities per shooting by year",
   xaxis = list(title = "Number injured"),
   yaxis = list(title = "Number of fatalities per shooting"))

This scatterplot shows the number of fatalities by number injured.

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

num_per_year

This is setting up a regression.

fatalities_per_incident_model2 <- lm(fatalities ~ year, data = shootings)
fatalities_per_incident_model2

Call:
lm(formula = fatalities ~ year, data = shootings)

Coefficients:
(Intercept)         year  
 10.0315821   -0.0009737  

This is a print out of the model.

tidy(fatalities_per_incident_model2)
glance(fatalities_per_incident_model2)

These are the stats for the regression.

shootings %>% 
  plot_ly(x = ~year, 
          y = ~fatalities) %>% 
  add_markers() %>%
  add_lines(y = ~fitted(fatalities_per_incident_model2))

This scatterplot shows the fatalities over the years due to the shootings.

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkobGVhZmxldCkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KGh0bWx0b29scykKbGlicmFyeShydHdlZXQpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGJyb29tKQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShEVCkKbGlicmFyeShkcGx5cikKCmBgYAoKCgpgYGB7cn0Kc2hvb3RpbmdzICU+JQogIGxlYWZsZXQoKSAlPiUKICBhZGRUaWxlcygpICU+JQogIHNldFZpZXcobG5nID0gLTk4LjU3OTUsIGxhdCA9IDM5LjgyODMsIHpvb20gPSA0KSAlPiUKICBhZGRDaXJjbGVNYXJrZXJzKHJhZGl1cyA9IH5sb2codG90YWxfdmljdGltcykpCmBgYApUaGlzIGlzIGEgZ2VuZXJhbCBvdmVydmlldyBtYXAgb2Ygc2hvb3RpbmdzIGluIHRoZSBVLlMuCgpgYGB7cn0Kc2hvb3RpbmdzICU+JSAKICBzdW1tYXJpemUobWVkaWFuX3RvdGFsX3ZpY3RpbXMgPSBtZWRpYW4odG90YWxfdmljdGltcykpCmBgYApUaGlzIGlzIHRoZSBtZWFuIG9mIHRvdGFsIHZpY3RpbXMuCgpgYGB7cn0Kc2hvb3RpbmdzICU+JSAKICBzdW1tYXJpemUobWVkaWFuX2ZhdGFsaXRpZXMgPSBtZWRpYW4oZmF0YWxpdGllcykpCmBgYApUaGlzIGlzIHRoZSBtZWFuIG9mIGZhdGFsYXRpZXMuCgpgYGB7cn0Kc2hvb3RpbmdzICU+JSAKICBtdXRhdGUoY2FzZSA9IGFzX2ZhY3RvcihjYXNlKSkgJT4lIAogIG11dGF0ZShjYXNlID0gZmN0X2NvbGxhcHNlKGNhc2UpKSAlPiUgCiAgY291bnQoY2FzZSkKYGBgClRoaXMgY29sbGFwc2VzIHZhcmlhYmxlcyBhbmQgc2hvd3MgYSB0YWJsZSBvZiBob3cgbWFueSBzaG9vdGluZ3MgZWFjaCBwbGFjZSBoYWQuCgpgYGB7ciBlY2hvPVRSVUV9CnNob290aW5ncyAlPiUgCiAgcGxvdF9seSh4ID0gfnllYXIpICU+JSAKICBhZGRfaGlzdG9ncmFtKG5iaW5zeCA9IDQwKQpgYGAKVGhpcyBoaXN0b2dyYW0gc2hvd3MgdGhlIG51bWJlciBvZiBzaG9vdGluZ3Mgb3ZlciB0aGUgeWVhcnMuCgpgYGB7ciBlY2hvPVRSVUV9CnNob290aW5ncyAlPiUgCiAgbXV0YXRlKHJhY2UgPSBhc19mYWN0b3IocmFjZSkpICU+JSAKICBtdXRhdGUocmFjZSA9IGZjdF9jb2xsYXBzZShyYWNlLAogICAgICAgICAgICAgVW5rbm93biA9IGMoIi0iLCAiT3RoZXIiLCAidW5jbGVhciIpKSkgJT4lCiAgY291bnQocmFjZSkKYGBgCkFub3RoZXIgY29sbGFwc2Ugb2YgdmFyaWFibGVzIGFuZCB0YWJsZSBzaG93aW5nIHNob290aW5ncyBwZXIgcmFjZS4KYGBge3J9CnNob290aW5ncyAlPiUKICBtdXRhdGUoZ2VuZGVyID0gYXNfZmFjdG9yKGdlbmRlcikpICU+JSAKICBtdXRhdGUoZ2VuZGVyID0gZmN0X2NvbGxhcHNlKGdlbmRlciwKICAgICAgICAgICAgIFVua25vd24gPSBjKCItIiwgIk1hbGUgJiBGZW1hbGUiKSkpICU+JQogIGNvdW50KGdlbmRlcikKYGBgCkFub3RoZXIgY29sbGFwc2Ugb2YgdmFyaWFibGVzIGFuZCB0YWJsZSBzaG93aW5nIHNob290ZXJzIGFzIHBlciB0aGllciBnZW5kZXIuCmBgYHtyfQpzaG9vdGluZ3MgJT4lCiAgcGxvdF9seSh4ID0gfmdlbmRlciwgeSA9IH5yYWNlKSAlPiUKICBhZGRfaGlzdG9ncmFtMmRjb250b3VyKCkKYGBgClRoaXMgaXMgYSBoZWF0IG1hcCBzaG93aW5nIHRoZSByYWNlIGFuZCBnZW5kZXIgb2YgdGhlIHNob290ZXJzLgoKYGBge3J9CnNob290aW5ncyAlPiUgCiAgbXV0YXRlKGdlbmRlciA9IGFzX2ZhY3RvcihnZW5kZXIpKSAlPiUgCiAgbXV0YXRlKGdlbmRlciA9IGZjdF9jb2xsYXBzZShnZW5kZXIpKSAlPiUKICBjb3VudChnZW5kZXIpCnNob290aW5ncyAlPiUKICBtdXRhdGUoYWdlX29mX3Nob290ZXIgPSBhc19mYWN0b3IoYWdlX29mX3Nob290ZXIpKSAlPiUgCiAgbXV0YXRlKGFnZV9vZl9zaG9vdGVyID0gZmN0X2NvbGxhcHNlKGFnZV9vZl9zaG9vdGVyKSkgJT4lCiAgY291bnQoYWdlX29mX3Nob290ZXIpCnNob290aW5ncyAlPiUKICBwbG90X2x5KHggPSB+Z2VuZGVyLCB5ID0gfmFnZV9vZl9zaG9vdGVyKSAlPiUKICBhZGRfaGlzdG9ncmFtMmRjb250b3VyKCkKYGBgClRoaXMgaXMgYSBoZWF0IG1hcCB0aGF0IHNob3dzIHRoZSBnZW5kZXIgYW5kIGFnZS4KCmBgYHtyfQpzaG9vdGluZ3MgJT4lIAogIHBsb3RfbHkoeCA9IH5pbmp1cmVkLCAKICAgICAgICAgIHkgPSB+ZmF0YWxpdGllcywKICAgICAgICAgICBob3ZlcmluZm8gPSAidGV4dCIsCiAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCJGYXRhbGl0aWVzIHBlciBzaG9vdGluZzoiKSkgJT4lCiAgYWRkX21hcmtlcnMoc2hvd2xlZ2VuZCA9IEYpICU+JQpsYXlvdXQodGl0bGUgPSAiTnVtYmVyIG9mIGZhdGFsaXRpZXMgcGVyIHNob290aW5nIGJ5IHllYXIiLAogICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtYmVyIGluanVyZWQiKSwKICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk51bWJlciBvZiBmYXRhbGl0aWVzIHBlciBzaG9vdGluZyIpKQpgYGAKVGhpcyBzY2F0dGVycGxvdCBzaG93cyB0aGUgbnVtYmVyIG9mIGZhdGFsaXRpZXMgYnkgbnVtYmVyIGluanVyZWQuCgpgYGB7cn0KbnVtX3Blcl95ZWFyIDwtIHNob290aW5ncyAlPiUgCiAgZmlsdGVyKGZhdGFsaXRpZXMgPiAzKSAlPiUgCiAgY291bnQoeWVhcikgJT4lIAogIGZpbHRlcih5ZWFyIDwgMjAxOSkKCm51bV9wZXJfeWVhcgpgYGAKVGhpcyBpcyBzZXR0aW5nIHVwIGEgcmVncmVzc2lvbi4KCmBgYHtyfQpmYXRhbGl0aWVzX3Blcl9pbmNpZGVudF9tb2RlbDIgPC0gbG0oZmF0YWxpdGllcyB+IHllYXIsIGRhdGEgPSBzaG9vdGluZ3MpCgpgYGAKCmBgYHtyfQpmYXRhbGl0aWVzX3Blcl9pbmNpZGVudF9tb2RlbDIKYGBgClRoaXMgaXMgYSBwcmludCBvdXQgb2YgdGhlIG1vZGVsLgoKYGBge3J9CnRpZHkoZmF0YWxpdGllc19wZXJfaW5jaWRlbnRfbW9kZWwyKQpnbGFuY2UoZmF0YWxpdGllc19wZXJfaW5jaWRlbnRfbW9kZWwyKQpgYGAKVGhlc2UgYXJlIHRoZSBzdGF0cyBmb3IgdGhlIHJlZ3Jlc3Npb24uCmBgYHtyfQpzaG9vdGluZ3MgJT4lIAogIHBsb3RfbHkoeCA9IH55ZWFyLCAKICAgICAgICAgIHkgPSB+ZmF0YWxpdGllcykgJT4lIAogIGFkZF9tYXJrZXJzKCkgJT4lCiAgYWRkX2xpbmVzKHkgPSB+Zml0dGVkKGZhdGFsaXRpZXNfcGVyX2luY2lkZW50X21vZGVsMikpCmBgYApUaGlzIHNjYXR0ZXJwbG90IHNob3dzIHRoZSBmYXRhbGl0aWVzIG92ZXIgdGhlIHllYXJzIGR1ZSB0byB0aGUgc2hvb3RpbmdzLgoKCgoKCgoKCgoKCgoKCgoKCgoK