Dies ist eine Analyse der Häufigkeitsverteilung von Themengebieten der Artikel in Bild der Wissenschaft (BdW). Ausgewertet wurden die Jahrgänge 2015, 2016 und 2017.
Ich bin nun schon viele Jahre Leser, und im wesentlichen doch sehr zufrieden mit der Auswahl der Themen. Auch das die Artikel nicht nur die wissenschaftlichen Ergebnisse darstellen, sondern auch ihre gesellschaftliche Auswirkung diskutieren, gefällt mir sehr gut. Allerdings hat sich bei mir ein Bauchgefühl eingestellt, dass bestimmte Themengebiete (v.a. astronomische Themen) überdurchschnittlich häufig vorgestellt werden.
Um diesen Eindruck zu überprüfen habe ich für die Jahrgänge 2015-17 von BdW die Artikel einezelnen Themengebieten zugeordnet. Themengebiete waren Technik, Biologie, Medizin, Physik, Astronomie, Psychologie, Soziologie etc. Die Zuordnung erfolgte manuell in eine OpenOffice Tabelle. Sie war manchmal nicht ganz eindeutig und wurde von mir nach besten Wissen und Gewissen durchgeführt. BdW führt einige Artikel als 'Titelthemen' oder 'Schwerpunktthemen' auf. Diese wurden mit einem boolschen Flag "Titelthema=TRUE" für eine zusätzlichen Auswertung gekennzeichnet. Die Themen-Einteilungen der BdW Redaktion habe ich hier ignoriert.
Nicht einbezogen wurden die Neuigkeiten, Artikel zu den Leserreisen und andere ständige Rubriken. Die Auswertungen erfolgten mit der Programmiersprache 'R', genauer mit Bibliotheken aus dem Tidyverse-Umfeld. An dieser Stelle vielen Dank an Hadley Wickham und den vielen Kontributoren zum Tidyverse. https://www.tidyverse.org Die multiplot Methode die hier verwendet wurde habe ich kopiert von folgender URL: http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/ Sie wurde freundlicherweise von Winston Chang der Allgemeinheit zur Verfügung gestellt.
## ── Attaching packages ──────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 2.2.1 ✔ purrr 0.2.4
## ✔ tibble 1.3.4 ✔ dplyr 0.7.4
## ✔ tidyr 0.7.2 ✔ stringr 1.2.0
## ✔ readr 1.1.1 ✔ forcats 0.2.0
## ── Conflicts ─────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## Ausgabe = col_character(),
## Bereich = col_character(),
## Titel = col_character(),
## Titelthema = col_logical()
## )
head(artikel_list)
## # A tibble: 6 x 4
## Ausgabe Bereich Titel Titelthema
## <chr> <chr> <chr> <lgl>
## 1 2017-01 Umwelt Aluminium wie gefährlich ist es FALSE
## 2 2017-01 Umwelt Aluminium ist kein wegwerfprodukt FALSE
## 3 2017-01 Biologie Die Wirkstofffahnder FALSE
## 4 2017-01 Medizin HIV unter Kontrolle FALSE
## 5 2017-01 Astronomie Kosmos im Kopf TRUE
## 6 2017-01 Astronomie Zündende Ideen TRUE
themen_list <- group_by(artikel_list,Bereich, Titelthema)
alle_themen <- summarise(themen_list, count = n()) %>% arrange(desc(count))
titelthemen <- summarise(themen_list, count = n()) %>% filter(Titelthema == TRUE) %>% arrange(desc(count))
alle_themen
## # A tibble: 35 x 3
## # Groups: Bereich [20]
## Bereich Titelthema count
## <chr> <lgl> <int>
## 1 Technik FALSE 66
## 2 Astronomie FALSE 54
## 3 Medizin FALSE 41
## 4 Biologie FALSE 40
## 5 Archälogie FALSE 26
## 6 Allgemein FALSE 25
## 7 Soziologie FALSE 24
## 8 Astronomie TRUE 21
## 9 Psychologie FALSE 20
## 10 Technik TRUE 20
## # ... with 25 more rows
titelthemen
## # A tibble: 16 x 3
## # Groups: Bereich [16]
## Bereich Titelthema count
## <chr> <lgl> <int>
## 1 Astronomie TRUE 21
## 2 Technik TRUE 20
## 3 Soziologie TRUE 18
## 4 Physik TRUE 16
## 5 Medizin TRUE 14
## 6 Anthropologie TRUE 11
## 7 Archälogie TRUE 9
## 8 Biologie TRUE 7
## 9 Psychologie TRUE 6
## 10 Allgemein TRUE 5
## 11 Klima TRUE 4
## 12 Informatik TRUE 2
## 13 Umwelt TRUE 2
## 14 Chemie TRUE 1
## 15 Geologie TRUE 1
## 16 Philosophie TRUE 1
#for all
p1 <- artikel_list %>%
count(Bereich) %>%
mutate(Bereich = fct_reorder(Bereich, n, .desc = TRUE)) %>%
ggplot(aes(x = Bereich, y = n)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_y_continuous(labels = function (x) floor(x)) + ggtitle('Themen BdW') + theme(plot.title = element_text(hjust = 0.5))
p2 <- artikel_list %>%
filter(Titelthema == TRUE) %>%
count(Bereich) %>%
mutate(Bereich = fct_reorder(Bereich, n, .desc = TRUE)) %>%
ggplot(aes(x = Bereich, y = n)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_y_continuous(labels = function (x) floor(x)) + ggtitle('Titel Themen BdW') + theme(plot.title = element_text(hjust = 0.5))
multiplot(p1,p2, cols=1)
jahrgang <- "2015"
plottitel = paste('Themen BdW ',jahrgang, sep = " ")
plottitelthemen = paste('Titel-Themen BdW ',jahrgang, sep = " ")
p3 <- artikel_list %>%
filter(str_detect(Ausgabe, jahrgang)) %>%
count(Bereich) %>%
mutate(Bereich = fct_reorder(Bereich, n, .desc = TRUE)) %>%
ggplot(aes(x = Bereich, y = n)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_y_continuous(labels = function (x) floor(x)) + ggtitle(plottitel) + theme(plot.title = element_text(hjust = 0.5))
p4 <- artikel_list %>%
filter(str_detect(Ausgabe, jahrgang)) %>%
filter(Titelthema == TRUE) %>%
count(Bereich) %>%
mutate(Bereich = fct_reorder(Bereich, n, .desc = TRUE)) %>%
ggplot(aes(x = Bereich, y = n)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_y_continuous(labels = function (x) floor(x)) + ggtitle(plottitelthemen) + theme(plot.title = element_text(hjust = 0.5))
multiplot(p3,p4, cols=1)
jahrgang <- "2016"
plottitel = paste('Themen BdW ',jahrgang, sep = " ")
p5 <- artikel_list %>%
filter(str_detect(Ausgabe, jahrgang)) %>%
count(Bereich) %>%
mutate(Bereich = fct_reorder(Bereich, n, .desc = TRUE)) %>%
ggplot(aes(x = Bereich, y = n)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_y_continuous(labels = function (x) floor(x)) + ggtitle(plottitel) + theme(plot.title = element_text(hjust = 0.5))
plottitelthemen = paste('Titel-Themen BdW ',jahrgang, sep = " ")
p6 <- artikel_list %>%
filter(str_detect(Ausgabe, jahrgang)) %>%
filter(Titelthema == TRUE) %>%
count(Bereich) %>%
mutate(Bereich = fct_reorder(Bereich, n, .desc = TRUE)) %>%
ggplot(aes(x = Bereich, y = n)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_y_continuous(labels = function (x) floor(x)) + ggtitle(plottitelthemen ) + theme(plot.title = element_text(hjust = 0.5))
multiplot(p5,p6, cols=1)
jahrgang <- "2017"
plottitel = paste('Themen BdW ',jahrgang, sep = " ")
p7 <- artikel_list %>%
filter(str_detect(Ausgabe, jahrgang)) %>%
count(Bereich) %>%
mutate(Bereich = fct_reorder(Bereich, n, .desc = TRUE)) %>%
ggplot(aes(x = Bereich, y = n)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_y_continuous(labels = function (x) floor(x)) + ggtitle(plottitel) + theme(plot.title = element_text(hjust = 0.5))
plottitelthemen = paste('Titel-Themen BdW ',jahrgang, sep = " ")
p8 <- artikel_list %>%
filter(str_detect(Ausgabe, jahrgang)) %>%
filter(Titelthema == TRUE) %>%
count(Bereich) %>%
mutate(Bereich = fct_reorder(Bereich, n, .desc = TRUE)) %>%
ggplot(aes(x = Bereich, y = n)) + geom_bar(stat = 'identity') + theme(axis.text.x = element_text(angle = 60, hjust = 1), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_y_continuous(labels = function (x) floor(x)) + ggtitle(plottitelthemen ) + theme(plot.title = element_text(hjust = 0.5))
multiplot(p7,p8, cols=1)
- Das Bauchgefühl war nur teilweise richtig. Astronomie war insgesamt betrachtet das häufigste vertretene Themengebiet, aber 2015 war es Physik. Bei den Titelthemen waren in 2017 soziologische Themen die am häufigsten vorkamen und bei Artikeln insgesamt waren es technische Themen. Astronomie immer vorne dabei.
- Eine Erklärung für überdurchschnittliche Anzahl von Artikeln zu astronomischen Themen mögen auch Raumsonden wie Rosetta, Cassini und das Einsteinjahr 2015/16 sein.
- Themen wie Informatik scheinen unterrepräsentiert zu sein, doch habe ich Themn wie autonomes Fahren oder Robotik eher unter 'Technik' subsummiert.
Zum Abschluss noch eine kleine Darstellung der Worthäufigkeiten in den Titeln der BdW Artikel, enjoy
library(tm)
library(ggplot2)
library(SnowballC)
library(wordcloud)
library(RColorBrewer)
df_title <- data.frame(doc_id=row.names(artikel_list),
text=artikel_list$Titel)
mycorpus <- Corpus(DataframeSource(df_title))
mycorpus <- tm_map(mycorpus, removePunctuation)
mycorpus <- tm_map(mycorpus, content_transformer(tolower))
mycorpus <- tm_map(mycorpus, stripWhitespace)
mycorpus <- tm_map(mycorpus, removeWords, c(stopwords("german")))
tdm <- DocumentTermMatrix(mycorpus)
m <- as.matrix(tdm)
v <- sort(colSums(m),decreasing=TRUE)
words <- names(v)
d <- data.frame(word=words, freq=v)
#display.brewer.all()
pal2 <- brewer.pal(3,"Dark2")
wordcloud(d$word,d$freq, scale=c(3,.2), max.words=150, random.color=TRUE,colors = pal2)