library(leaflet)
library(tidyverse)
library(lubridate)
library(htmltools)
library(rtweet)
library(readxl)
library(broom)
library(plotly)
library(DT)
  1. The first step I took was to read in the data about the mass shootings.
shootings <- read_csv("https://docs.google.com/spreadsheets/d/1b9o6uDO18sLxBqPwl_Gh9bnhW-ev_dABH83M5Vb5L8o/export?format=csv")
58/60
[1] 0.9666667
## [1] 0.9666667
2/(60*60)
[1] 0.0005555556
## [1] 0.0005555556
46/60
[1] 0.7666667
## [1] 0.7666667
18/(60*60)
[1] 0.005
## [1] 0.005
  1. After finding the correct coordinate points (above), you are able to view the whole country.
leaflet() %>% 
  addTiles() %>% 
  setView(lat= 44.967, lng = -103.771, zoom = 4)
  1. Ass the addCircleMarkers() line in order to see locations of the US shootings.
shootings %>% 
  leaflet() %>% 
  addTiles() %>%
  addCircleMarkers(stroke = F, 
                   fillOpacity = .6, 
                   radius = ~log(total_victims))
Assuming "longitude" and "latitude" are longitude and latitude, respectively
  1. Next, gather a bit more info about the shootings. I found the median for total number of victims, and the median of fatalities. I also found the mean number of total victims as well as the mean number of fatalities.
shootings %>% 
  summarize(median_total_victims = median(total_victims)) 
shootings %>% 
  summarize(median_fatalities = median(fatalities)) 
shootings %>% 
  summarize(mean_total_victims = mean(total_victims)) 
shootings %>% 
  summarize(mean_fatalities = mean(fatalities)) 
  1. Plot the data by year.
shootings%>% 
  plot_ly(x = ~year) %>% 
  add_histogram(nbinsx = 40)
  1. Next, I created a thermal graph to show gender and race. The second thermal graph is based on age and gender.
shootings %>% 
  plot_ly(x = ~gender, y = ~race) %>% 
  add_histogram2dcontour()
shootings %>% 
  plot_ly(x = ~gender, y = ~age_of_shooter) %>% 
  add_histogram2dcontour()
  1. Next, combine the data.
shootings %>% 
  mutate(gender = as_factor(gender)) %>% 
  mutate(gender = fct_collapse(gender, Male = c("Male", "M"), Female = c("Female", "F"))) %>% 
  count(gender)
  1. Here I created a scatterplot of the number of victims injured, and the number of fatalities in the shooting.
shootings %>% 
  plot_ly(x = ~fatalities, 
          y = ~injured) %>% 
  add_markers()
  1. Here, I input the data in order to calculate how many shootings there have been for each year.
num_per_year <- shootings %>%  
  filter(fatalities > 3) %>% 
  count(year) %>% 
  filter(year < 2019)

num_per_year
  1. Finally, I did a regression model for the data, and added a bit more info below for clarity.
num_per_year_model <- lm( n ~ year , data = num_per_year) 

num_per_year_model

Call:
lm(formula = n ~ year, data = num_per_year)

Coefficients:
(Intercept)         year  
  -218.8464       0.1107  
tidy(num_per_year_model)
glance(num_per_year_model)
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkobGVhZmxldCkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KGh0bWx0b29scykKbGlicmFyeShydHdlZXQpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGJyb29tKQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShEVCkKCmBgYAoKMS4gVGhlIGZpcnN0IHN0ZXAgSSB0b29rIHdhcyB0byByZWFkIGluIHRoZSBkYXRhIGFib3V0IHRoZSBtYXNzIHNob290aW5ncy4KCmBgYHtyfQpzaG9vdGluZ3MgPC0gcmVhZF9jc3YoImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFiOW82dURPMThzTHhCcVB3bF9HaDlibmhXLWV2X2RBQkg4M001VmI1TDhvL2V4cG9ydD9mb3JtYXQ9Y3N2IikKYGBgCgoKYGBgIHtyfQo1OC82MAoyLyg2MCo2MCkKNDYvNjAKMTgvKDYwKjYwKQoKYGBgCgoyLiBBZnRlciBmaW5kaW5nIHRoZSBjb3JyZWN0IGNvb3JkaW5hdGUgcG9pbnRzIChhYm92ZSksIHlvdSBhcmUgYWJsZSB0byB2aWV3IHRoZSB3aG9sZSBjb3VudHJ5LgpgYGB7cn0KbGVhZmxldCgpICU+JSAKICBhZGRUaWxlcygpICU+JSAKICBzZXRWaWV3KGxhdD0gNDQuOTY3LCBsbmcgPSAtMTAzLjc3MSwgem9vbSA9IDQpCmBgYAoKMy4gQXNzIHRoZSBhZGRDaXJjbGVNYXJrZXJzKCkgbGluZSBpbiBvcmRlciB0byBzZWUgbG9jYXRpb25zIG9mIHRoZSBVUyBzaG9vdGluZ3MuCmBgYHtyfQpzaG9vdGluZ3MgJT4lIAogIGxlYWZsZXQoKSAlPiUgCiAgYWRkVGlsZXMoKSAlPiUKICBhZGRDaXJjbGVNYXJrZXJzKHN0cm9rZSA9IEYsIAogICAgICAgICAgICAgICAgICAgZmlsbE9wYWNpdHkgPSAuNiwgCiAgICAgICAgICAgICAgICAgICByYWRpdXMgPSB+bG9nKHRvdGFsX3ZpY3RpbXMpKQpgYGAKCjQuIE5leHQsIGdhdGhlciBhIGJpdCBtb3JlIGluZm8gYWJvdXQgdGhlIHNob290aW5ncy4gSSBmb3VuZCB0aGUgbWVkaWFuIGZvciB0b3RhbCBudW1iZXIgb2YgdmljdGltcywgYW5kIHRoZSBtZWRpYW4gb2YgZmF0YWxpdGllcy4gSSBhbHNvIGZvdW5kIHRoZSBtZWFuIG51bWJlciBvZiB0b3RhbCB2aWN0aW1zIGFzIHdlbGwgYXMgdGhlIG1lYW4gbnVtYmVyIG9mIGZhdGFsaXRpZXMuCmBgYHtyfQpzaG9vdGluZ3MgJT4lIAogIHN1bW1hcml6ZShtZWRpYW5fdG90YWxfdmljdGltcyA9IG1lZGlhbih0b3RhbF92aWN0aW1zKSkgCmBgYAoKYGBge3J9CnNob290aW5ncyAlPiUgCiAgc3VtbWFyaXplKG1lZGlhbl9mYXRhbGl0aWVzID0gbWVkaWFuKGZhdGFsaXRpZXMpKSAKYGBgCgpgYGB7cn0Kc2hvb3RpbmdzICU+JSAKICBzdW1tYXJpemUobWVhbl90b3RhbF92aWN0aW1zID0gbWVhbih0b3RhbF92aWN0aW1zKSkgCmBgYAoKYGBge3J9CnNob290aW5ncyAlPiUgCiAgc3VtbWFyaXplKG1lYW5fZmF0YWxpdGllcyA9IG1lYW4oZmF0YWxpdGllcykpIApgYGAKCjUuIFBsb3QgdGhlIGRhdGEgYnkgeWVhci4KCmBgYHtyfQpzaG9vdGluZ3MlPiUgCiAgcGxvdF9seSh4ID0gfnllYXIpICU+JSAKICBhZGRfaGlzdG9ncmFtKG5iaW5zeCA9IDQwKQpgYGAKCjYuIE5leHQsIEkgY3JlYXRlZCBhIHRoZXJtYWwgZ3JhcGggdG8gc2hvdyBnZW5kZXIgYW5kIHJhY2UuIFRoZSBzZWNvbmQgdGhlcm1hbCBncmFwaCBpcyBiYXNlZCBvbiBhZ2UgYW5kIGdlbmRlci4KCmBgYHtyfQpzaG9vdGluZ3MgJT4lIAogIHBsb3RfbHkoeCA9IH5nZW5kZXIsIHkgPSB+cmFjZSkgJT4lIAogIGFkZF9oaXN0b2dyYW0yZGNvbnRvdXIoKQpgYGAKCgpgYGB7cn0Kc2hvb3RpbmdzICU+JSAKICBwbG90X2x5KHggPSB+Z2VuZGVyLCB5ID0gfmFnZV9vZl9zaG9vdGVyKSAlPiUgCiAgYWRkX2hpc3RvZ3JhbTJkY29udG91cigpCmBgYAoKNy4gTmV4dCwgY29tYmluZSB0aGUgZGF0YS4KYGBge3J9CnNob290aW5ncyAlPiUgCiAgbXV0YXRlKGdlbmRlciA9IGFzX2ZhY3RvcihnZW5kZXIpKSAlPiUgCiAgbXV0YXRlKGdlbmRlciA9IGZjdF9jb2xsYXBzZShnZW5kZXIsIE1hbGUgPSBjKCJNYWxlIiwgIk0iKSwgRmVtYWxlID0gYygiRmVtYWxlIiwgIkYiKSkpICU+JSAKICBjb3VudChnZW5kZXIpCmBgYAoKOC4gSGVyZSBJIGNyZWF0ZWQgYSBzY2F0dGVycGxvdCBvZiB0aGUgbnVtYmVyIG9mIHZpY3RpbXMgaW5qdXJlZCwgYW5kIHRoZSBudW1iZXIgb2YgZmF0YWxpdGllcyBpbiB0aGUgc2hvb3RpbmcuCgpgYGB7cn0Kc2hvb3RpbmdzICU+JSAKICBwbG90X2x5KHggPSB+ZmF0YWxpdGllcywgCiAgICAgICAgICB5ID0gfmluanVyZWQpICU+JSAKICBhZGRfbWFya2VycygpCmBgYAoKCjkuIEhlcmUsIEkgaW5wdXQgdGhlIGRhdGEgaW4gb3JkZXIgdG8gY2FsY3VsYXRlIGhvdyBtYW55IHNob290aW5ncyB0aGVyZSBoYXZlIGJlZW4gZm9yIGVhY2ggeWVhci4KCmBgYHtyfQpudW1fcGVyX3llYXIgPC0gc2hvb3RpbmdzICU+JSAgCiAgZmlsdGVyKGZhdGFsaXRpZXMgPiAzKSAlPiUgCiAgY291bnQoeWVhcikgJT4lIAogIGZpbHRlcih5ZWFyIDwgMjAxOSkKCm51bV9wZXJfeWVhcgpgYGAKCjEwLiBGaW5hbGx5LCBJIGRpZCBhIHJlZ3Jlc3Npb24gbW9kZWwgZm9yIHRoZSBkYXRhLCBhbmQgYWRkZWQgYSBiaXQgbW9yZSBpbmZvIGJlbG93IGZvciBjbGFyaXR5LgpgYGB7cn0KbnVtX3Blcl95ZWFyX21vZGVsIDwtIGxtKCBuIH4geWVhciAsIGRhdGEgPSBudW1fcGVyX3llYXIpIAoKbnVtX3Blcl95ZWFyX21vZGVsCmBgYAoKCmBgYHtyfQp0aWR5KG51bV9wZXJfeWVhcl9tb2RlbCkKYGBgCgpgYGB7cn0KZ2xhbmNlKG51bV9wZXJfeWVhcl9tb2RlbCkKYGBgCgoKCgoKCgoKCgoKCgoKCg==