library(leaflet)
library(tidyverse)
library(lubridate)
library(htmltools)
library(rtweet)
library(readxl)
library(broom)
library(plotly)
library(DT)
- 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
- 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)
- 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
- 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))
- Plot the data by year.
shootings%>%
plot_ly(x = ~year) %>%
add_histogram(nbinsx = 40)
- 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()
- 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)
- 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()
- 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
- 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==