Twitter reactions to the right-wing terrorist shootings in Hanau

This is a quick exploration of twitter reactions to the right-wing terrorist shootings in Hanau, Germany on 19th february 2020. I played around with this data as an excercise to get in first touch with Twitter analysis with R for sociological research. Most of the code is copied & adapted from this tutorial by Dr. Juan Camilo Orduz.

Load Packages

# Data Import
library(jsonlite)
# Data Wrangling and Visualization
library(magrittr) # for piped function calls with %>%
library(plotly)
library(tidyverse)
# Date & Time Manipulation.
library(hms)
library(lubridate)
# Text Mining
library(tidytext)
library(wordcloud)
#Set notebook directory.
MAIN.DIR <- here::here()

Read the data

Load the data dump from the JSON-file.

all_tweets <- jsonlite::stream_in(file("../../../r-playground/data/hashtag_hanau_2020-02-19_2020_02_29_dump.json"), verbose = FALSE)

We have a total of 80.5k tweets with the hashtag #Hanau in our dataframe.

nrow(all_tweets)
## [1] 80549

Grab a subset of the data.

tweets_raw <- all_tweets %>%
  select(datetime, text) %>%
  filter(!str_detect(string = text, pattern = '@')) %>% # Remove account names
  as_tibble()

Let’s parse the date string into a datetime in order to do a timeline analysis.

tweets_raw %<>% 
  mutate(
    datetime = datetime %>% 
    parse_date_time(orders = ' %Y-%m-%d %H%M%S') # Parse date.
  )

Timeline Analysis

Let’s first have a look at when the reactions have been posted.

# Set the time from UTC to CET (+1h).
tweets_raw %<>% 
  mutate(datetime = datetime + 1*60*60)

# Remove the seconds, so we can get a meaninful plot.
tweets_raw %<>% 
  mutate(created = datetime %>% round(units = 'mins') %>% as.POSIXct())

# Let's plot it.
plot <- tweets_raw %>% 
  count(created) %>% 
  ggplot(mapping = aes(x = created, y = n)) +
    theme_light() +
    geom_line() +
    xlab(label = 'Date') +
    ylab(label = NULL) +
    ggtitle(label = 'Number of Tweets per Minute')

plot %>% ggplotly()

The shooting happened at 22:00 CET. There is a first peak of 27 tweets/minute a few hours after the shooting at 01:08 CET. The biggest peak in the data with 80 tweets/minute is at 20-02.20 14:04 CET, the day after the shooting. On the 2020-02-21 the number of tweets per minute is more than halved and continually decreases the next few days.

Hashtag Count

Which other hashtags have been combined with the hashtag #Hanau can shed some light on how the reactions are evaluated and framed by the public. So let’s inspect that.

# Function that gets hashtags of a tweet.
getHashtags <- function(tweet) {
  hashtag.vector <- str_extract_all(string = tweet, pattern = '#\\S+', simplify = TRUE) %>%
    as.character()

  hashtag.string <- NA
  if (length(hashtag.vector) > 0) {
    hashtag.string <- hashtag.vector %>% str_c(collapse = ', ')
  }
  return(hashtag.string)
}

# Get the hashtags from our raw data.
hashtags <- tibble(
  Hashtags = tweets_raw$text %>% map_chr(.f = ~ getHashtags(tweet = .x))
)

# Bind the hashtags to our normalized tweets.
tweets_raw %<>% bind_cols(hashtags)

# Unnest the hashtags.
hashtags.unnested.df <- tweets_raw %>%
  select(created, Hashtags) %>%
  unnest_tokens(input = Hashtags, output = hashtag)
 
# Count the usage of specific hashtags. 
hashtags.unnested.count <- hashtags.unnested.df %>%
  filter(hashtag != "hanau") %>% # Filter out #hanau, because that's the hashtag we used to scrape our data.
  count(hashtag) %>%
  drop_na()

# Plot the wordcloud.
wordcloud(
  words = str_c('#',hashtags.unnested.count$hashtag),
  freq = hashtags.unnested.count$n,
  min.freq = 200,
  colors=brewer.pal(8, 'Dark2')
)

The tag cloud sheds light on the most used hashtags within the reactions to hanau. Alot of the reactions use either hashtags calling the shooting by the name, as right-wing terrorism/extremism and racism. On the two top ranks are hashtags linking the extreme right AfD-party with the event, as visible in this table of top hashtags.

hashtags.unnested.count %>%
  arrange(desc(n)) %>%
  head(20)
## # A tibble: 20 x 2
##    hashtag               n
##    <chr>             <int>
##  1 afd                4304
##  2 noafd              2509
##  3 hanaushooting      2500
##  4 rassismus          2117
##  5 rechterterror      1882
##  6 halle              1688
##  7 germany            1229
##  8 rechtsterrorismus  1121
##  9 nazisraus          1092
## 10 fckafd             1019
## 11 terror              839
## 12 fcknzs              835
## 13 nsu                 749
## 14 hanauattack         695
## 15 deutschland         678
## 16 cdu                 673
## 17 merkel              590
## 18 volkmarsen          588
## 19 hamburg             559
## 20 hamburgwahl         544
Matthias Zaugg

I’m a MA-student in sociology & political science (also former software developer & social worker).