Let’s have some fun in visualizing Facebook reactions to prime minister Abiy Ahmed’s Facebook posts (June 24 to August 09). This post is an updated version. The previous analysis was only until August 5.
This blog post is simply about visualizing the data. I have no political affiliation.
Haccalu Hundessa, the popular Ethiopian singer, was killed in June 29, 2020. His death sparked a widespread violence in Oromia region. Several innocent civilians were murdered and public and private properties worth of millions were vandalized. The government has immediately taken measures to restore law and order. I am sincerely hoping prime minister Abiy’s government will take significant steps in letting an independent and international investigation. As a concerned Ethiopian, I have tried to follow some of the news. To this date, the news is giving me nightmares!
In this short blog posts, I will dive into prime minister Abiy’s Facebook activity and his followers reactions using emojis. I will then compare positive (like, care, love, wow) and negative reactions(angry, sad, haha) towards his posts on Facebook. More specificically, I will show you the trend of love, anger and sad reactions.
NB: classifying the reactions into positve/negative may not reflect the actual reaction of the individual to the news. It doesn’t also reflect the contents of the prime minister’s Facebbook post. In addition, internet was locked from the first of july until 23rd of July. That is clearly visible from the plots with a simple horizontal line.
I have manually collected Prime Minister Abiy Ahmed’s one month Facebook posts (From June 24 until August 09). I collected few variables: date Abiy Ahmed posted on Facebook, type of Facebook reaction (eg: Like, Love, angry, sad, etc…) and total number of reactions.
abiy_ahmed <- read_xlsx("F:/github/githubwebsite/_posts/2020-08-04-2020-08-04-abiyahmed/abiy_ahmed.xlsx")
# As usual
dim(abiy_ahmed)
[1] 154 4
glimpse(abiy_ahmed)
Rows: 154
Columns: 4
$ Date_posted <dttm> 2020-06-24, 2020-06-24, 2020-06-24, 2020-06-2~
$ Reaction <chr> "Like", "Love", "Care", "Angry", "Haha", "Wow"~
$ Count <dbl> 21000, 876, 272, 50, 64, 22, 3, 92000, 5500, 1~
$ Death_Haccalu <chr> "Before", "Before", "Before", "Before", "Befor~
#abiy_ahmed <- abiy_ahmed %>%
# rename(Date_postedX.U.FEFF.Date_posted)
In total, about a million (932453 ) people showed some kind of reaction. On average, more than 35206(sd=20293) peple liked his posts, an average of 840 people hit the angry buttons.
# A tibble: 1 x 1
sum
<dbl>
1 932453
mean <- abiy_ahmed %>%
group_by(Reaction) %>%
summarize(mean=mean(Count, na.rm=T)) %>%
mutate(mean=round(mean,2)) %>%
ungroup()
sd <- abiy_ahmed %>%
group_by(Reaction) %>%
summarize(sd=sd(Count, na.rm=T)) %>%
mutate(sd=round(sd,2)) %>%
ungroup()
merge(mean, sd)
Reaction mean sd
1 Angry 840.10 656.16
2 Care 670.50 441.66
3 Haha 296.55 141.33
4 Like 35206.52 20293.70
5 Love 3014.17 2179.53
6 Sad 633.43 2066.60
7 Wow 90.09 94.38
plot <- ggplot(abiy_ahmed, aes(x=Date_posted,
y=Count, col=Reaction)) +
geom_point(size=2) +
geom_line(size=1)
plot1 <- direct.label(plot, "first.qp", )
plot1
plot <- ggplot(abiy_ahmed, aes(x=Date_posted,
y=Count, col=Reaction)) +
geom_point(size=2) + geom_line(size=1.5) + theme_void() +
xlab("Date of Facebook post") +
ylab("Number of reactions")
plot1 <- direct.label(plot, "first.qp")
plot2 <- ggbackground(plot1, "abiy.png")
plot2
For easier manipulation, let’s reshape our data using reshape2
.
library(reshape2)
library(ggplot2)
abiy_data <- melt(abiy_ahmed, id=c("Date_posted", "Reaction", "Death_Haccalu"))
abiy_data$Date_posted <- as.Date(abiy_data$Date_posted)
ggplot(abiy_data, aes(x=Date_posted, y=value, col=Reaction)) + geom_point() + xlab("Date of Facebook post") + ylab("Number of reactions") +
geom_line() + scale_x_date(date_breaks = "7 day") + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0))
The graph above shows the prime minister has much more likes than the other reactions. Since there are a lot more likes than the other reactions, we will filter out the Likes to have a good picture of the other reactions. Then, we will dive more into the data to see the trends of love and angry reactions.
othethan_like <- abiy_data %>%
group_by(Date_posted) %>%
filter(Reaction !="Like")
direct.label(
ggplot(othethan_like, aes(x=Date_posted, y=value, col=Reaction)) + geom_point(size=2) +
geom_line(size=1) +
xlab("Date of Facebook post") + ylab("Number of lovely reaction") +
ylab("Number of lovely reactions") +
scale_x_date(date_breaks = "7 day", labels = date_format("%B %d") ) + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0)),
"first.qp",
)
Positive reactions: “Like”, “Love”, “Wow”, “Care” Negative reactions: “Angry”, “Sad”, “Haha”
abiy_pos <- abiy_data %>%
group_by(Date_posted) %>%
filter(Reaction == c("Like", "Love", "Wow", "Care")) %>%
mutate(number_reaction=sum(value),
reaction="positive reaction")
abiy_neg <- abiy_data %>%
group_by(Date_posted) %>%
filter(Reaction == c("Angry", "Sad", "Haha")) %>%
mutate(number_reaction=sum(value),
reaction="negative reaction")
abiy_pos_neg <- rbind(abiy_pos, abiy_neg)
ggplot(abiy_pos_neg, aes(x=Date_posted, y=number_reaction, col=reaction)) + geom_point(size=2) +
geom_line(size=1) + scale_x_date(date_breaks = "5 day") + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0)) +
xlab("Date of Facebook post") + ylab("Reaction") +
scale_x_date(date_breaks = "7 day", labels = date_format("%B %d") ) + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0))
Since there is a lot of positive reaction, we can’t see the negative reaction very much in the above plot. Let’s just focus on the negative reactions. See, it declinined after its maximum on the 30th of June. I assume, this anger is more to the news not to his opinions.
ggplot(abiy_neg, aes(x=Date_posted, y=number_reaction)) + geom_point(size=2.5) +
geom_line(size=1.5, col="darkred") + xlab("Date of Facebook post") +
ylab("Number of negative reaction") +
scale_x_date(date_breaks = "7 day", labels = date_format("%B %d") ) + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0))
It is some how declining. Are people loosing interest? I don’t know. I hope not.
abiy_reaction_sum <- abiy_data %>%
group_by(Date_posted) %>%
mutate(number_reaction=sum(value),
reaction="total reaction")
ggplot(abiy_reaction_sum, aes(x=Date_posted, y=number_reaction)) + geom_point(size=2) +
geom_line(size=1, col="darkgreen") + scale_x_date(date_breaks = "5 day") + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0)) + xlab("Date of Facebook post") +
ylab("Total reactions") +
scale_x_date(date_breaks = "5 day", labels = date_format("%B %d") ) + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0))
See how the anger tops the 30th of July and then it fell down like an avalanche
library(dplyr)
library(ggplot2)
library(lubridate)
library(scales)
angry <- abiy_data %>%
group_by(Date_posted) %>%
filter(Reaction == "Angry")
abiy_data %>%
group_by(Death_Haccalu) %>%
filter(Reaction == "Angry") %>%
summarize(mean(value))
# A tibble: 2 x 2
Death_Haccalu `mean(value)`
<chr> <dbl>
1 After 930.
2 Before 333.
ggplot(angry, aes(x=Date_posted, y=value)) + geom_point(size=2) +
geom_line(size=1.5, col="red") +
xlab("Date of Facebook post") + ylab("Number of angry reaction") +
scale_x_date(date_breaks = "7 day", labels = date_format("%B %d") ) + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0))
It looks like people are getting less angry at his posts. But, are they loving his posts? I don’t think so. But, let’s see.
love <- abiy_data %>%
group_by(Date_posted) %>%
filter(Reaction == c("Care", "Love")) %>%
mutate(love_reaction=sum(value),
reaction="love reaction")
ggplot(love, aes(x=Date_posted, y=love_reaction)) + geom_point(size=2.5) +
geom_line(size=1.5, col="darkgreen") +
xlab("Date of Facebook post") + ylab("Number of lovely reaction") +
ylab("Number of lovely reactions") +
scale_x_date(date_breaks = "5 day", labels = date_format("%B %d") ) + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0))
We will see the same pattern for Sad reactions on August 4. But, what happened on August 4. It is the Lebanon’s explosion. People shared their sadness about the Lebanon explosion news and shared condolences with the prime minister.
sad <- abiy_data %>%
group_by(Date_posted) %>%
filter(Reaction=="Sad")
ggplot(sad, aes(x=Date_posted, y=value)) + geom_point(size=3) +
geom_line(size=1.5, col="red") +
xlab("Date of Facebook post") + ylab("Number of sad reaction") +
ylab("Number of sad reaction") +
scale_x_date(date_breaks = "5 day", labels = date_format("%B %d") ) + theme(axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0))
The anger and sadness sharply increased until it reached its peak on the 30th of June. Then, after three weeks of internet black out, his Facebook page became active and continued posting and I continued collecting my data. The plots above show how negative reactions have sharply declined. It seems the measures have worked very well to alleviate digital anger from the people or at least it is possible to hypothesize people were positive about the measures taken by his government. With this, I can say Abiy Ahmed has likely regained his control and his government started to properly use its teeth.
Peace and love for my beautiful country and her people!
I conclude my blog with a quote by Lois McMaster Bujold “The dead cannot cry out for justice. It is a duty of the living to do so for them.”
For attribution, please cite this work as
Kebede(PhD) (2020, Aug. 6). Aspire Data Solutions: Digital Reactions Towards Prime Minister Abiy Ahmed's Facebook Activities. Retrieved from http://www.mihiretukebede.com/posts/2020-08-04-2020-08-04-abiyahmed/
BibTeX citation
@misc{kebede(phd)2020digital, author = {Kebede(PhD), Mihiretu}, title = {Aspire Data Solutions: Digital Reactions Towards Prime Minister Abiy Ahmed's Facebook Activities}, url = {http://www.mihiretukebede.com/posts/2020-08-04-2020-08-04-abiyahmed/}, year = {2020} }