1  Introduktion: Hvorfor skal en historiker programmere?

Historikere kan allerede en masse forskellige ting, når det kommer til at tænke med data. Historievidenskaben er bygget af refleksioner over, hvor oplysninger kommer fra, hvordan de afspejler specifikke tider, steder og relationer, og hvornår vi kan stole på dem. På den måde har historie altid været en datavidenskab. Samtidig har vores interesse for tid ægtet os til fortællingen som formidlingsform. Fortællingen kan kommunikere kompleksitet til et bredt publikum. Måske derfor har vi alt for ofte undgået de tekniske diskussioner.

Efterhånden er der dog sket et mindre skred. Det er kommet i takt med, at vores computere er blevet hurtigere, verden omkring os er blevet stadig mere datafikseret, og vores eget fag er blevet tvunget til at analysere og kommunikere i en verden, der er blevet digital. Det er ikke længere nok at kunne analysere det specifikke forløb og fortælle indlevende om dets spændinger. Vi har brug for en større værktøjskasse.

Men heldigvis starter vi ikke fra scratch. Der ligger allerede i vores fag en grundlæggende forståelse for dataproveniens, en skepsis overfor det postuleret universelle, og lyst til at engagere sig i dialog med en bred vifte af interessenter. Og lysten er gensidig, for historien påkræver sig opmærksom som aldrig før.

Denne bog forsøger, ydmygt og med tilstræbt langsomhed, at overbevise dig - historikeren - om, at det er fedt at programmere sig til indsigter om fortid og nutid. Det er ikke alle, der mener, at man skal programmere for at lave digital historie.1 Men jeg har nu aldrig hørt, at det skulle skade, tværtimod. At programmere er lettere, end de flest går og forestiller sig. Programmering handler om at bruge sprog med regler og muligheder som alle andre. Men kode har en ekstra fordel: Det er som oftest reproducerbart - forstået på den måde, at den kode du skriver kan køres af andre og vil give de samme resultater (hvis ikke er der som regel noget galt). Samtidig giver det os en grundlæggende forståelse for, hvad der er muligt med de historiske data, der bliver stadigt flere og mere mere tilgængelige qua digitalisering. Måske er der brug for netop os i den forbindelse. Når data flyder rundt, er det en åbenlys risiko, at det dekontekstualiseres og berøves dets historiske tekstur. Vi er vant til at tænke om data som knudrede, flertydige og modstridende. Andre videnskaber foretrækker at tænke om data som “store” og værdisætter omfang mere end situationsbundet kompleksitet. Der er brug for, at vi blander os i debatterne om data med en klassisk historiefaglig grundpointe: data er ikke skabt som data, men som levn af processer, hvis slutmål ikke var kendt for de mennesker, der levede i dem. Vores kildebegreb er dybest set et mere reflekteret - men desværre mindre udbredt - databegreb.2 Denne bog prøver derfor at præsentere teknikker, der som oftest bruges i videnskaber, der gør sig uholdbare antagelser om de data, historien tilbyder os.

Samtidig er programmeringsværktøjer lidt som universalværktøjer, forstået på den måde, at de kan det hele. Du kan sagtens lave beskrivende statistik i Microsoft Excel, men hvad så, når dine data er tekst? Så kan du bruge Voyant Tools, men hvis du så vil lave et kort, skal du bruge QGIS, der til gengæld ikke kan håndtere netværksdata, du så må lære Gephi for at producere… og så videre og videre. R kan til gengæld det hele. Så selvom læringskurven føles som Alpe d’Huez, så skal vi kun krydse tinden en gang. Separate værktøjer, derimod, betyder en lind strøm af stigninger.

Fordelen ved et universalværktøj er, at det også kan bruges til ting, vi ikke havde regnet med, at vi skulle kunne. Den her bog og den webside du læser den på er f.eks. også lavet i R. Jeg lærte i sin tid ikke at programmere for at kunne kode en lærebog, men overførbare færdigheder er, ja, overførbare.

1.1 Hvordan bruger du bogen?

Bogen er skrevet som en lærebog. Hvert kapitel introducerer til teknikker og giver eksempler på, hvordan de kan bruges. Og hvert kapitel indeholder kode, der med få modifikationer vil kunne benyttes på dine egne data.

Bogens kapitler introducerer til programmeringssproget R. Når andre værktøjer inddrages, vil det ofte forudsætte, at vores data allerede er bearbejdet i R. For at komme igang skal du installere R og programmet R-Studio. Sidstnævnte gør arbejdet med programmeringen i R meget lettere. Får at komme igang skal du efter installationen bare åbne R-Studio og igennem fil-menuen starte et nyt projekt - så er du faktisk klar til at gå igang. Både R og R-Studio downloades her.

R er et programmeringssprog skabt til dataanalyse og visualisering. Det har mange ligheder med andre programmeringssprog, især med det populære sprog Python. Det vil i langt de fleste tilfælde være muligt at lave tilsvarende analyser i Python. R er ikke bedre end Python, men det er i nogle henseender lidt lettere at komme igang med. Hvis du gerne vil kopiere et workflow til Python vil der ofte være hjælp at hente ved at google navnet på en funktion i R og noget i retning “how to Python”. Internettet er fuld af trolde, men også af hjælpsomme nørder - ligesom os selv. ChatGPT kan også være anvendelig hvis du vil prøve at oversætte kode fra et programmeringssprog til et andet.

De benyttede funktioner opdateres løbende, og det er bestæbelsen at holde bogen up to date, men de kan ske, at du støder på noget, der ikke virker.

1.2 Installation af pakker

I sit rå udgangspunkt (ofte omtalt som “Base R”) indeholder R en masse funktionalitet til statistisk analyse. Imidlertid kommer sproget først til sin fulde ret i lyset af det væld af ekstra funktionalitet, der er skabt af udviklere og brugere igennem årtier. Denne funktionalitet kan downloades som “pakker” eller “libraries” og igennem bogen her, demonstreres funktionalitet, der trækker på mange sådanne pakker. Hver gang du ser kodestykket library(navn_på_pakke) antages det, at du allerede har pakken installeret. Så hvordan gør man det? Jo det gøres ved at skrive install.packages("navn_på_pakke") i R-studios konsolpanel. Skal du installere pakken Tidyverse, skal du f.eks. skrive install.packages("tidyverse") og køre dette stykke kode. For at bruge pakken vil du derefter skulle køre koden library(tidyverse) - bemærk forskellen på brug af anførselstegn. Hvis installationen lykkes, er det i udgangspunktet kun nødvendigt at gøre dette en gang. Libraries er det til gengæld nødvendigt at køre, hver gang du starter en ny R-session. Når du åbner R-Studio vil du opleve, at programmet loader det projekt, du havde åbent, da du lukkede det. Men pakker loader ikke automatisk ind. Linjerne med funktionen library() skal du derfor køre, hver gang du starter op.

1.3 Flere ressourcer

Denne bog er et sted at starte, men når du har arbejdet dig igennem, vil du være sulten efter mere.

Programming Historian er en genial ressource. Den indeholder små guides skrevet af historikere til en lang række værktøjer, herunder også (som navnet antyder) programmeringsværktøjer.

R for Data Science (2. udgave) er en grundbog i data science skrevet af Hadley Wickham, der er en af udviklerne bag en række af de funktioner, der bruges i denne bog - og bag R Studio selv. Værket er en meget grundig og gennemtænkt guide til at bruge R til data science og især til eksplorativ dataanalyse. Dens eneste svaghed er, at den retter sig imod et ikke-humanistisk publikum, og som en del af data science bølgen promoverer en forståelse af videnskab, hvor domæneviden er mindre vigtigt end talmagi. Som historiker er jeg uenig. Men nyttig er den alligevel. Mange af denne bogs kapitler vil kunne komplementeres ganske direkte her.

Text Mining with R er en anden grundbog skrevet af holdet bag R Studio. Den er en praktisk guide til at arbejde med store mængder tekst. Den ene af forfatterne, Julia Silge, har desuden forfattet en mere avanceret guide til modellering i R.


  1. Dette argument findes f.eks. i den udmærkede introduktionsbog Doing Digital History: A beginner’s guide to working with text as data af Jonathan Blaney, Jane Winters, Sarah Milligan og Martin Steer (Manchester: Manchester University Press, 2021).↩︎

  2. Jeg har diskuteret dette mere udførligt i Johan Heinsen, “Kilde og data: Overvejelser om historiefaget og de digitale metoder”, TEMP 2023.↩︎