Netwerk en sociale media analyse
Begrippen
Verschillende vormen van een bestand met tekstuele data:
1. corpus = verzameling teksten
2. document feature matrix
3. tidy bestand (one-token-per-row)
1. Corpus = verzameling teksten, met variabelen
>> in een corpus wordt vaak meta-informatie toegevoegd (bijvoorbeeld naam/
locatie van het Twitter-account, datum, het aantal likes of retweets)
2. Document feature matrix ( = breed: alle woorden naast elkaar in
de kolommen)
- Documents = posts
- features/terms = woorden
- docvars = kenmerken van posts
>> Het databestand wordt heel breed (wide)
3. Tidy-text dataset ( = lang: alle woorden onder elkaar in de rijen)
, - Table with one-token-per-row.
- Token = ‘betekenisvolle teksteenheid’ of ‘zinselement’ (meestal een
woord).
- Tokenization = het opknippen van teksten in kleine eenheden, in tokens
(meestal woorden)
- Het databestand wordt heel lang (long)
- Voorverwerking (pre-processing) en opschonen van tekstuele
data: stopwoorden, normalisatie (interpunctie en hoofdletters
verwijderen)
- Woordfrequentie: welke woorden komen vaak voor?
- Onderscheidende vormen: welke komen vaak voor en in de andere juist
niet?
Module 1: tekst als data
regel <- c(1,2,3,4)
regel
tekst <- c("Het regent en het is november:",
"Weer keert het najaar en belaagt",
"Het hart, dat droef, maar steeds gewender,",
"Zijn heimelijke pijnen draagt.")
Tekst = naam van de variabele
De 4 dichtregels = de bijhorende waarden (of scores) van deze variabele
1 dichtregel = één string (elke string moet tussen
aanhalingstekens zodat R dit als 4 losse stukjes tekst herkent)
- Leestekens horen ook bij de tekst, niet bij het commando
- Formele R-taal: character vector (R heeft van ‘tekst’ een tekstuele
variabele (character) gemaakt, ipv een nummerieke variabele (numeric))
- Je kunt geen gemiddelde uitrekenen van een character vector
Type variabele opvragen:
Class(regel)
,Class(tekst)
Aard van de variabele veranderen:
Regel <- as.character(regel)
Regel <- as.numeric(regel)
Variabelen samenvoegen in databestand:
>> = een corpus
gedicht_df <- data.frame (regel, tekst)
View (gedicht_df)
str (gedicht_df)
library(tidyverse)
gedicht_tib <- tibble (regel, tekst)
View (gedicht_tib)
str (gedicht_tib)
>> tibble is nagenoeg hetzelfde als een dataframe, maar iets simpeler van aard.
Packages quanteda & tidytext:
>> Bij beide wordt de corpus wordt omgezet in een databestand met een ander
soort structuur
Quanteda:
- Hierbij wordt vaak een document feature matrix (of document term
matrix) gebruikt
- Eerst aangeven dat het bestand een corpus is (dat weet R nog niet)
- Tekst_field geeft aan welke kolom de kern is van de corpus (= de kolom
met tekst)
install.packages ("quanteda")
library(quanteda)
corp_gedicht <- corpus(gedicht_tib, text_field = "tekst")
print(corp_gedicht)
- De dichtregels worden aangeduid als documents en hebben automatisch
namen gekregen (text1, text2, etc.)
- De eigenschappen van deze 4 documenten heten docvars (document-
variabelen)
- Elke regel wordt gezien als een apart document
Opsplitsen van de tokens (woorden):
Verwijderen van leestekens:
toks_gedicht <- tokens(corp_gedicht, remove_punct = TRUE
print (toks_gedicht)
Bestand omzetten in dfm:
dfm_gedicht <- dfm(toks_gedicht)
print(dfm_gedicht)
Wat houdt het in dat er hier 19 features zijn?
19 afzonderlijke termen/ tokens
En wat betekent de aanduiding dat de matrix 71.05% sparse is?
, ???
Dfm duidelijker kunnen zien:
df <- convert(dfm_gedicht, to="data.frame")
View(df)
Tidytext:
gedicht_tidy <- gedicht_tib %>%
unnest_tokens(woord, tekst)
gedicht_tidy
- Unnest_tokens: transformeer een dataframe (of tibble) met een tekst-
kolom naar een databestand met one-token-per-row structuur. (op de rijen
komen alle afzonderlijke woorden te staan
- Standaardinstellingen van unnest_tokens: leestekens (punctuatie)
verwijderd en alle hoofdletters zijn omgezet in kleine letters.
Databestand maken met telling van de woorden:
freq_woorden <- gedicht_tidy %>%
count (woord, sort = TRUE)
Weergeven in een figuur:
library (ggplot2)
freq_woorden %>%
mutate(woord = reorder(woord, n)) %>%
ggplot(aes(n, woord)) +
geom_col()
- Mutate: om de variabele ‘woord’ aan te passen (variabele ordenen op
basis van de tweede genoemde variabele ‘n’)
- n is een numerieke variabele zodat een ordening van hoog naar laag
mogelijk is.
Nieuwe figuur met proportie op de x-as
>> want we willen liever niet het absolute aantal woorden weergeven, maar de
relatieve frequentie
Freq <- gedicht_tidy %>%
Count(woord, sort = TRUE) %>%
Mutate(totaal= sum (n)) %>%
Mutate(prop = n / totaal)
Freq %>%
Mutate(woord = reorder(woord, prop)) %>%