This Lab 5 assignment uses the Radiohead Bluesky posts collected in my previous assignment. The purpose of this lab is to perform a word co-occurrence analysis to see which words appear together in the same posts. This helps show themes and relationships in the text instead of only looking at single-word counts.
library(tidyverse)
library(tidytext)
library(widyr)
library(igraph)
library(ggraph)
library(knitr)
library(kableExtra)
library(wordcloud)
library(RColorBrewer)
bluesky_posts_clean <- read_csv("Lab4_Radiohead_Bluesky_Posts.csv")
head(bluesky_posts_clean)
## # A tibble: 6 × 5
## author post_text likes reposts replies
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 burningambulance.bsky.social "Are you 100% sure it's th… 9 0 0
## 2 eddieap76.bsky.social "04: Fall Out Boy - Fame <… 0 0 0
## 3 motormouthdice.bsky.social "OOC : // For those who do… 2 0 1
## 4 caseyann.bsky.social "one time several years ag… 1 0 0
## 5 lostgirlfindher.bsky.social "// one time several years… 2 0 0
## 6 beancurling.bsky.social "*Radiohead song happens w… 2 1 0
post_words <- bluesky_posts_clean |>
select(post_id, post_text) |>
unnest_tokens(
output = word,
input = post_text
)
head(post_words)
## # A tibble: 6 × 2
## post_id word
## <int> <chr>
## 1 1 are
## 2 1 you
## 3 1 100
## 4 1 sure
## 5 1 it's
## 6 1 the
word_pairs_filtered <- word_pairs |>
filter(n > 2)
word_pairs_filtered |>
slice_head(n = 20) |>
kable(
col.names = c("Word 1", "Word 2", "Co-occurrence Count"),
caption = "Top Word Co-occurrence Pairs"
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
full_width = FALSE,
position = "left"
)
| Word 1 | Word 2 | Co-occurrence Count |
|---|---|---|
| radio | listen | 12 |
| playing | tune | 8 |
| playing | radio | 8 |
| tune | radio | 8 |
| playing | listen | 7 |
| listen | indie | 7 |
| pop | rock | 7 |
| tune | listen | 6 |
| radio | live | 6 |
| listen | live | 6 |
| radio | vortex | 6 |
| listen | vortex | 6 |
| live | vortex | 6 |
| radio | indie | 6 |
| live | indie | 6 |
| vortex | indie | 6 |
| radio | pop | 6 |
| listen | pop | 6 |
| live | pop | 6 |
| vortex | pop | 6 |
The filter value n > 2 keeps word pairs that appeared
together more than two times.
Radiohead - OK Computer artwork
The network graph shows which words are connected based on how often they appear together in the same Radiohead Bluesky posts.
Question 1
There were several words I added to my stopword list. Words such as “abbeycwmhir” or “ayclt” felt too obscure to give insight on the band Radiohead. But I also removed “youtu” because it appeared from YouTube-related links and “just” because it was a common filler which did not tell me much about the actual discussion. The final network graph changed because some less useful connections were removed. This provided a more meaningful music-related words and themes to analyze.
Question 2
I figured it was best to have my final value
filter(n > 2). I chose this because with n > 1 the
graph became harder to read because there were too many connections
between words. Using n>2 made for a cleaner graph. My
findings helped to put more emphasis on the repeated word relationships
rather than one-time relationships. I would increase the value even more
if the dataset was much larger.
Question 3
I liked the cleaner co-occurrence network graph. With fewer nodes it made it was easier to read. When the graph has too many words, it can feel can overcrowded and cluttered therefore, making it confusing (Ehlers et al., 2023).
Question 4 The word pairs, ‘time’ and ‘life’, surprised me because it had a deeper insight. It was more than the usual music conversation. A lot of the graph is made up of words related to Radiohead’s music such as rock, indie, or radio, but time and life are outside the main cluster. Which makes me think some were talking about Radiohead not only as a band, but how their music connects on a personal level.
Question 5 If $SPCX and
$paceX are referring to the same stock, company or topic
then I think they should be treated as the same token. If they are
divided by capitalization or spelling differences, the analysis will
break the counts and reduce the significance of the topic. If you
combined them, the word count and the network graph would be more
precise.
Question 6 The risk with a small sample is that a few comments can have too much weight on the results. A small sample may not be representative of the entire audience and larger conversation. Pew Research Center explains that random sampling is important because it helps researchers use a smaller group to better understand a larger population. How many comments you need will depend on the topic, but I’d aim for at least a few hundred comments if possible.
Question 7
Yes, comments can be analyzed around a significant event by looking at posts before and after the event. So for my Radiohead topic a big event could be a new song release, album anniversary, concert announcement, band interview or trending music video. I would try to figure out the event by looking for a date where the number of posts went up or the words being used changed. This event is important because it can greatly influence what is discussed, and the mood of the comments, whether they are positive, negative or nostalgic. That would go some way to explaining the higher incidence of certain words or pairs of words in that period.
By including word co-occurrence analysis , I can project more than just common words . The network graph made it possible for me to show relationships between words and provide more context to conversations. Manual stopword removal helped a lot in the clarity of the graph. This lab showed how text analysis can be used to find patterns in social media conversations.
Ehlers, H., Villedieu, A., Raidou, R. G., & Wu, H.-Y. (2023). Improving readability of static, straight-line graph drawings: A first look at edge crossing resolution through iterative vertex splitting. Computers & Graphics, 116, 448–463. https://doi.org/10.1016/j.cag.2023.09.010
Pew Research Center. (2017, May 12). Methods 101: Random sampling. https://www.pewresearch.org/short-reads/2017/05/12/methods-101-random-sampling/