Datenimport

et_long <- read.csv2("Engagement_Tracker_Plus.csv") # working directory ist der gleiche Ordner

Daten bereinigen

et_long$Block <- as.factor(et_long$Block) # Uhrzeitblock von int zu factor
sapply(et_long, class) # Überprüfen
##             Reel          Weekday Art.des.Contents            Block 
##      "character"      "character"        "integer"         "factor" 
##      Upload.Time      IG.views.1h      IG.views.3h      IG.likes.1h 
##      "character"        "integer"        "integer"        "integer" 
##      IG.likes.3h   IG.comments.1h   IG.comments.3h      TT.views.1h 
##        "integer"        "integer"        "integer"        "integer" 
##      TT.views.3h      TT.likes.1h      TT.likes.3h   TT.comments.1h 
##        "integer"        "integer"        "integer"        "integer" 
##   TT.comments.3h      YT.views.1h      YT.views.3h      YT.likes.1h 
##        "integer"        "integer"        "integer"        "integer" 
##      YT.likes.3h   YT.comments.1h   YT.comments.3h 
##        "integer"        "integer"        "integer"

Analyse zu den VIEWS

Einfaktorielle ANOVA

anova_result <- aov(IG.views.3h ~ Art.des.Contents, data = et_long)
summary(anova_result)
##                  Df  Sum Sq Mean Sq F value Pr(>F)
## Art.des.Contents  1  775553  775553   1.721  0.204
## Residuals        21 9461293  450538

Nicht signifikant (p=.2). Folglich kein signifikanter Zusammenhang zwischen den IG views und der Art des Contents.

Übersicht anzeigen lassen, um die durchschnittliche Anzahl der likes je nach Art des Contents auf IG zu sehen:

aggregate(IG.views.3h ~ Art.des.Contents, data = et_long, mean)
##   Art.des.Contents IG.views.3h
## 1                1    1937.429
## 2                2    1665.889
## 3                3    2074.500
## 4                4    1049.000

Man sieht: Mathematik (3) läuft am besten, gefolgt von Mindset (1), Unterrichtsdidaktik (2) und WissKomm (4) am Schluss

Längerer Datensatz

# Datensatz umbauen für größere Stichprobe -> long format
names(et_long)[names(et_long) == "IG.views.3h"] <- "views_IG"
names(et_long)[names(et_long) == "TT.views.3h"] <- "views_TT"
names(et_long)[names(et_long) == "YT.views.3h"] <- "views_YT"

# Neuen Datensatz mit ausgewählten Spalten erstellen
data_selected <- et_long[, c("Reel", "Weekday", "Art.des.Contents", "Block", "views_IG", "views_TT", "views_YT")]

# Datensatz in long-format umwandeln
data_long <- pivot_longer(data_selected,
                          cols = c("views_IG", "views_TT", "views_YT"),
                          names_to = "plattform",
                          values_to = "views")

# In Faktro umwanden 
data_long$Weekday <- factor(data_long$Weekday)
data_long$Block <- factor(data_long$Block)

head(data_long)
## # A tibble: 6 × 6
##   Reel                        Weekday  Art.des.Contents Block plattform views
##   <chr>                       <fct>               <int> <fct> <chr>     <int>
## 1 Rechnen ohne Taschenrechner Tuesday                 1 1     views_IG   3236
## 2 Rechnen ohne Taschenrechner Tuesday                 1 1     views_TT   1308
## 3 Rechnen ohne Taschenrechner Tuesday                 1 1     views_YT   1249
## 4 Duzen oder Siezen           Thursday                2 2     views_IG   2917
## 5 Duzen oder Siezen           Thursday                2 2     views_TT   4330
## 6 Duzen oder Siezen           Thursday                2 2     views_YT   1231

Zweifaktorielle ANOVA mit längerem Datensatz

anova_long_2way <- aov(views ~ Block * Weekday, data = data_long)
summary(anova_long_2way)
##               Df   Sum Sq Mean Sq F value Pr(>F)  
## Block          3   621883  207294   0.448 0.7198  
## Weekday        6  3436930  572822   1.238 0.3035  
## Block:Weekday 10 11012038 1101204   2.380 0.0218 *
## Residuals     49 22672127  462696                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Man sieht: es gibt eine signifikante Interaktion zwischen dem Wochentag und der Uhrzeit (p=.022)

Gruppenmittelwerte geordnet anzeigen lassen

summary_df <- aggregate(views ~ Weekday + Block, data = data_long, mean)
summary_df[order(-summary_df$views), ]
##      Weekday Block     views
## 8   Thursday     2 2826.0000
## 11    Monday     3 2251.3333
## 14 Wednesday     3 1667.3333
## 3    Tuesday     1 1382.6667
## 19   Tuesday     4 1370.6667
## 18  Thursday     4 1361.3333
## 4     Friday     2 1358.6667
## 5     Monday     2 1208.6667
## 16    Monday     4 1197.6667
## 9  Wednesday     2 1183.6667
## 1     Monday     1 1181.6667
## 20 Wednesday     4 1168.3333
## 17  Saturday     4 1113.3333
## 7     Sunday     2 1031.6667
## 12  Thursday     3  931.0000
## 2   Thursday     1  912.6667
## 10    Friday     3  897.0000
## 13   Tuesday     3  893.6667
## 6   Saturday     2  793.3333
## 15    Friday     4  727.0000

man sieht: Donnerstags um die Mittagszeit (Zeitblock 2) eignet sich am besten, gefolgt von Montag Nachmittag (Zeitblock 3)

Graphische Darstellung

library(ggplot2)

ggplot(summary_df, aes(x = Block, y = Weekday, fill = views)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "lightblue", high = "darkblue") +
  labs(title = "Durchschnittliche Views pro Wochentag und Zeitblock",
       x = "Time Block", y = "Wochentag", fill = "Ø Views") +
  theme_minimal() +
  theme(axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        plot.title = element_text(size = 14, face = "bold"))

Man sieht: Donnerstag Mittag und Montag Nachmittag erzielen die meisten views

Dreifaktorielle ANOVA

Interaktion aus Wochentag, Uhrzeit und der Plattform

data_long$plattform <- factor(data_long$plattform)

anova_3way <- aov(views ~ Block * Weekday * plattform, data = data_long)
summary(anova_3way)
##                         Df   Sum Sq Mean Sq F value Pr(>F)   
## Block                    3   621883  207294   0.550 0.6605   
## Weekday                  6  3436930  572822   1.521 0.2743   
## plattform                2  8522479 4261239  11.312 0.0035 **
## Block:Weekday           10 11012038 1101204   2.923 0.0609 . 
## Block:plattform          6  1069713  178286   0.473 0.8126   
## Weekday:plattform       12  1721021  143418   0.381 0.9392   
## Block:Weekday:plattform 20  7968516  398426   1.058 0.4904   
## Residuals                9  3390397  376711                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Man sieht: Die Plattform hat einen signifikanten Effekt (p=.0035). Die Interaktion aus Zeitblock und Plattform ist knapp nicht signifikant (p=.06).

Übersicht aus Wochentag und Zeitblock

Die Analyse war knapp nicht signifikant, durch aggregate kann man aber einen Überblich bekommen, welcher Wochentag zu welcher Uhrzeit am meisten views eingebracht hat

summary_combo <- aggregate(views ~ Weekday + Block, data = data_long, mean)
summary_combo[order(-summary_combo$views), ]
##      Weekday Block     views
## 8   Thursday     2 2826.0000
## 11    Monday     3 2251.3333
## 14 Wednesday     3 1667.3333
## 3    Tuesday     1 1382.6667
## 19   Tuesday     4 1370.6667
## 18  Thursday     4 1361.3333
## 4     Friday     2 1358.6667
## 5     Monday     2 1208.6667
## 16    Monday     4 1197.6667
## 9  Wednesday     2 1183.6667
## 1     Monday     1 1181.6667
## 20 Wednesday     4 1168.3333
## 17  Saturday     4 1113.3333
## 7     Sunday     2 1031.6667
## 12  Thursday     3  931.0000
## 2   Thursday     1  912.6667
## 10    Friday     3  897.0000
## 13   Tuesday     3  893.6667
## 6   Saturday     2  793.3333
## 15    Friday     4  727.0000

Man sieht: Donnerstag Mittag sowie Montag und Mittwoch Nachmittag eignen sich mit am besten. Freitag Abend sowie Samstag Mittag eignen sich am schlechtesten.

Plattform

aggregate(views ~ plattform, data = data_long, mean)
##   plattform     views
## 1  views_IG 1739.1304
## 2  views_TT  953.7391
## 3  views_YT 1041.1739

Man sieht: Auf Instagram werden die meisten views erzielt, gefolgt von YouTube und TikTok auf dem letzten Platz

Analyse zu den LIKES

Längerer Datensatz

# Datensatz umbauen für größere Stichprobe -> long format
names(et_long)[names(et_long) == "IG.likes.3h"] <- "likes_IG"
names(et_long)[names(et_long) == "TT.likes.3h"] <- "likes_TT"
names(et_long)[names(et_long) == "YT.likes.3h"] <- "likes_YT"

# Neuen Datensatz mit ausgewählten Spalten erstellen
data_selected <- et_long[, c("Reel", "Weekday", "Art.des.Contents", "Block", "likes_IG", "likes_TT", "likes_YT")]

# Datensatz in long-format umwandeln
data_long_likes <- pivot_longer(data_selected,
                          cols = c("likes_IG", "likes_TT", "likes_YT"),
                          names_to = "plattform",
                          values_to = "likes")

# In Faktor umwanden 
data_long_likes$Weekday <- factor(data_long_likes$Weekday)
data_long_likes$Block <- factor(data_long_likes$Block)

head(data_long_likes)
## # A tibble: 6 × 6
##   Reel                        Weekday  Art.des.Contents Block plattform likes
##   <chr>                       <fct>               <int> <fct> <chr>     <int>
## 1 Rechnen ohne Taschenrechner Tuesday                 1 1     likes_IG    106
## 2 Rechnen ohne Taschenrechner Tuesday                 1 1     likes_TT     43
## 3 Rechnen ohne Taschenrechner Tuesday                 1 1     likes_YT     49
## 4 Duzen oder Siezen           Thursday                2 2     likes_IG    125
## 5 Duzen oder Siezen           Thursday                2 2     likes_TT    156
## 6 Duzen oder Siezen           Thursday                2 2     likes_YT     23

Zweifaktorielle ANOVA mit längerem Datensatz

anova_long_2way_likes <- aov(likes ~ Block * Weekday, data = data_long_likes)
summary(anova_long_2way_likes)
##               Df Sum Sq Mean Sq F value  Pr(>F)   
## Block          3   1142   380.8   0.625 0.60229   
## Weekday        6   9349  1558.2   2.558 0.03107 * 
## Block:Weekday 10  20354  2035.4   3.341 0.00223 **
## Residuals     49  29854   609.3                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Man sieht: es gibt signifikante Effekte zwischen den likes und dem Wochentag (p=.03) sowie der Interaktion aus Wochentag und Zeitblock (p=.002).

Gruppenmittelwerte geordnete anzeigen lassen

summary_df_likes <- aggregate(likes ~ Weekday + Block, data = data_long_likes, mean)
summary_df_likes[order(-summary_df_likes$likes), ]
##      Weekday Block     likes
## 8   Thursday     2 101.33333
## 14 Wednesday     3  83.00000
## 18  Thursday     4  62.66667
## 11    Monday     3  49.00000
## 4     Friday     2  47.33333
## 7     Sunday     2  45.00000
## 12  Thursday     3  44.66667
## 16    Monday     4  43.33333
## 19   Tuesday     4  43.33333
## 3    Tuesday     1  39.16667
## 17  Saturday     4  37.33333
## 20 Wednesday     4  34.33333
## 5     Monday     2  31.00000
## 13   Tuesday     3  25.00000
## 1     Monday     1  24.33333
## 9  Wednesday     2  23.33333
## 2   Thursday     1  20.33333
## 10    Friday     3  12.66667
## 15    Friday     4  12.33333
## 6   Saturday     2  11.66667

Visualisierung mit Heatmap

library(ggplot2)

ggplot(summary_df_likes, aes(x = Block, y = Weekday, fill = likes)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "lightgreen", high = "darkgreen") +
  labs(title = "Durchschnittliche Likes pro Wochentag und Zeitblock",
       x = "Time Block", y = "Wochentag", fill = "Ø Likes") +
  theme_minimal() +
  theme(axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        plot.title = element_text(size = 14, face = "bold"))

Man sieht: Donnerstag Mittag sowie Mittwoch Nachmittag ergeben die meisten likes. Donnerstag Mittag kam auch bei den views am besten an.

Dreifaktorielle ANOVA

Interaktion aus Wochentag, Uhrzeit und der Plattform mit LIKES

data_long_likes$plattform <- factor(data_long_likes$plattform)

anova_3way_likes <- aov(likes ~ Block * Weekday * plattform, data = data_long_likes)
summary(anova_3way_likes)
##                         Df Sum Sq Mean Sq F value Pr(>F)  
## Block                    3   1142   380.8   0.560 0.6549  
## Weekday                  6   9349  1558.2   2.290 0.1272  
## plattform                2   5019  2509.6   3.688 0.0676 .
## Block:Weekday           10  20354  2035.4   2.991 0.0571 .
## Block:plattform          6   2593   432.1   0.635 0.7012  
## Weekday:plattform       12   5766   480.5   0.706 0.7183  
## Block:Weekday:plattform 20  10352   517.6   0.761 0.7100  
## Residuals                9   6125   680.5                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Man sieht: Hier gibt es keinerlei signifikante Werte, also kein Zusammenhang zwischen dem Wochentag, der Uhrzeit und den verschiedenen Plattformen.

Plattform

aggregate(likes ~ plattform, data = data_long_likes, mean)
##   plattform    likes
## 1  likes_IG 49.78261
## 2  likes_TT 35.65217
## 3  likes_YT 29.39130

Man sieht: Instagram erzielt die meisten likes, gefolgt von TikTok und schließlich YouTube

Analyse zu den COMMENTS

Längerer Datensatz

# Datensatz umbauen für größere Stichprobe -> long format
names(et_long)[names(et_long) == "IG.comments.3h"] <- "comments_IG"
names(et_long)[names(et_long) == "TT.comments.3h"] <- "comments_TT"
names(et_long)[names(et_long) == "YT.comments.3h"] <- "comments_YT"

# Neuen Datensatz mit ausgewählten Spalten erstellen
data_selected_comments <- et_long[, c("Reel", "Weekday", "Art.des.Contents", "Block", "comments_IG", "comments_TT", "comments_YT")]

# Datensatz in long-format umwandeln
data_long_comments <- pivot_longer(data_selected_comments,
                          cols = c("comments_IG", "comments_TT", "comments_YT"),
                          names_to = "plattform",
                          values_to = "comments")

# In Faktor umwanden 
data_long_comments$Weekday <- factor(data_long_comments$Weekday)
data_long_comments$Block <- factor(data_long_comments$Block)

head(data_long_comments)
## # A tibble: 6 × 6
##   Reel                        Weekday  Art.des.Contents Block plattform comments
##   <chr>                       <fct>               <int> <fct> <chr>        <int>
## 1 Rechnen ohne Taschenrechner Tuesday                 1 1     comments…        8
## 2 Rechnen ohne Taschenrechner Tuesday                 1 1     comments…        2
## 3 Rechnen ohne Taschenrechner Tuesday                 1 1     comments…        0
## 4 Duzen oder Siezen           Thursday                2 2     comments…        9
## 5 Duzen oder Siezen           Thursday                2 2     comments…       19
## 6 Duzen oder Siezen           Thursday                2 2     comments…        5

Zweifaktorielle ANOVA mit längerem Datensatz

anova_long_2way_comments <- aov(comments ~ Block * Weekday, data = data_long_comments)
summary(anova_long_2way_comments)
##               Df Sum Sq Mean Sq F value  Pr(>F)   
## Block          3   12.1   4.047   0.572 0.63634   
## Weekday        6  143.8  23.970   3.386 0.00714 **
## Block:Weekday 10  249.6  24.958   3.525 0.00145 **
## Residuals     49  346.9   7.079                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Man sieht: es gibt signifikante Effekte zwischen den likes und dem Wochentag (p=.007) sowie der Interaktion aus Wochentag und Zeitblock (p=.0015).

Gruppenmittelwerte geordnete anzeigen lassen

summary_df_comments <- aggregate(comments ~ Weekday + Block, data = data_long_comments, mean)
summary_df_comments[order(-summary_df_comments$comments), ]
##      Weekday Block   comments
## 8   Thursday     2 11.0000000
## 14 Wednesday     3  6.6666667
## 12  Thursday     3  5.3333333
## 17  Saturday     4  5.0000000
## 7     Sunday     2  3.6666667
## 16    Monday     4  3.0000000
## 18  Thursday     4  3.0000000
## 5     Monday     2  2.6666667
## 1     Monday     1  2.3333333
## 19   Tuesday     4  2.3333333
## 3    Tuesday     1  2.0000000
## 11    Monday     3  2.0000000
## 20 Wednesday     4  2.0000000
## 13   Tuesday     3  1.2222222
## 2   Thursday     1  1.0000000
## 15    Friday     4  1.0000000
## 6   Saturday     2  0.6666667
## 9  Wednesday     2  0.6666667
## 4     Friday     2  0.0000000
## 10    Friday     3  0.0000000

Visualisierung mit Heatmap

library(ggplot2)

ggplot(summary_df_comments, aes(x = Block, y = Weekday, fill = comments)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "pink", high = "purple") +
  labs(title = "Durchschnittliche Comments pro Wochentag und Zeitblock",
       x = "Time Block", y = "Wochentag", fill = "Ø Comments") +
  theme_minimal() +
  theme(axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        plot.title = element_text(size = 14, face = "bold"))

Man sieht: Die comments weisen ein ähnliches Bild auf, wie die views und die likes.

Analysen mit der ART DES CONTENTS

Vierfaktorielle ANOVA

Interaktion aus Wochentag, Uhrzeit, Art des Contents und der Plattform mit VIEWS

data_long$plattform <- factor(data_long$plattform)

anova_4way <- aov(views ~ Block * Weekday * plattform * Art.des.Contents, data = data_long)
summary(anova_4way)
##                            Df   Sum Sq Mean Sq F value   Pr(>F)    
## Block                       3   621883  207294   1.866 0.236125    
## Weekday                     6  3436930  572822   5.157 0.033080 *  
## plattform                   2  8522479 4261239  38.365 0.000381 ***
## Art.des.Contents            1   109700  109700   0.988 0.358687    
## Block:Weekday              10 12706354 1270635  11.440 0.003722 ** 
## Block:plattform             6  1069713  178286   1.605 0.289932    
## Weekday:plattform          12  1721021  143418   1.291 0.395069    
## plattform:Art.des.Contents  2  1153015  576508   5.190 0.049140 *  
## Block:Weekday:plattform    20  7735461  386773   3.482 0.063843 .  
## Residuals                   6   666420  111070                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Man sieht: Wie bereits gesehen, gibt es signifikante Effekte beim Wochentag (p=.03), der Plattform (p=.0004), der Interaktion aus Wochentag und Zeit (p=.004) (vgl. Abschnitt zu views). Neu ist hier der signifikante Effekt zwischen der Plattform und der Art des Contents in Bezug auf die views (p=.049).

Visualisierung

ggplot(data_long, aes(x = Art.des.Contents, y = views, 
                      color = plattform, group = plattform)) +
  stat_summary(fun = mean, geom = "line", size = 1.2) +
  stat_summary(fun = mean, geom = "point", size = 3) +
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2) +
  labs(title = "Interaktion: Plattform × Art des Contents (Linienplot)",
       x = "Art des Contents", y = "Durchschnittliche Views") +
  theme_light()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Man sieht: Mathematik-Content (3) funktioniert überall am besten, gefolgt von Mindset (1) auf IG und YT und Hochschuldidaktik (2) auf TT. WissKomm wird auf allen Plattformen am wenigsten geschaut.

Fazit

Nachdem die Datensätze verlängert wurden und views, likes und comments über alle Plattformen hinweg vereint wurden, ergaben sich signifikante Zusammenhänge zwischen dem Wochentag, der Zeit des posts sowie dem Engagement (alle drei AVs). Verschiedene Analysen sowie graphische Darstellungen zeigen, dass Donnerstag Mittag (12-14 Uhr) sowie Montag und Mittwoch Nachmittag (14-16 Uhr) gut funktioniert.

Bei allen Erkenntnissen ist jedoch zu beachten, dass der Datensatz sehr klein sowie lückenhaft ist. Um aussagekräftige Ergebnisse zu erhalten, müsste der Datensatz viel umfangreicher sein.