Internettet er fyldt med spændende data, der uden de store vanskeligheder kan hentes ned og anvendes systematisk. På Wikipedia er der eksempelvis en side med meningsmålingerne fra seneste folketingsvalg til i dag. I dette indlæg viser jeg, hvordan man simpelt kan hente disse meningsmålinger ind i R. Den nemmeste måde at gøre dette (som jeg er bekendt med), er ved at anvende XML pakken.
Det kræver ikke mange sekunders arbejde at hente informationerne ud. Først tager vi XML pakken i brug og angiver hvilken side, vi ønsker at hente data fra:
library(XML)
url <- "http://en.wikipedia.org/wiki/Opinion_polling_for_the_next_Danish_general_election"
Til at hente meningsmålingerne ud, bruger vi readHTMLTable funktionen i pakken XML. Som det fremgår af navnet på funktionen, er readHTMLTable ideel til at hente information fra tabeller ud fra hjemmesider. Vi gemmer vores data i polls:
polls <- readHTMLTable(url)
Nu er tabellen hentet ind i R, og det eneste det kræver herfra, er at lave en dataframe, der passer til vores ønsker. Nedenstående fjerner nogle kolonner (Kristeligt Folkeparti og blokinformationer), fjerner rækken med resultatet fra seneste folketingsvalg, laver en id variabel (1 er første måling lavet efter valget), erstatter DR med Epinion m.v.:
polls <- polls[[1]]
polls <- polls[-1,1:10]
colnames(polls) <- c("Institut", "id","Venstre","Socialdemokraterne","DF","Radikale","SF","Enhedslisten","LA","Konservative")
polls <- na.omit(polls)
polls = polls[-1,]
polls <- polls[polls[,1]!="Election Results",]
polls$Institut <- gsub("\\[|1|2|3|\\]", "", polls$Institut)
polls$Institut <- gsub("DR", "Epinion", polls$Institut)
polls$id <- nrow(polls) - as.numeric(rownames(polls)) + 4
Nu har vi en tabel, der ser ud som følger:
tail(polls)
Institut id Venstre Socialdemokraterne DF Radikale SF Enhedslisten LA Konservative
118 Epinion 6 32.5 22.1 11.4 9.0 8.1 7.8 4.8 3.5
119 Megafon 5 32.9 22.8 10.4 10.5 7.4 7.3 4.6 3.9
120 Megafon 4 32.2 23.0 11.4 10.5 7.0 7.5 4.7 3.3
121 Epinion 3 31.9 20.9 11.8 9.6 8.7 7.4 4.8 4.4
122 Megafon 2 33.1 22.9 10.5 9.7 7.9 7.1 4.1 4.0
123 Megafon 1 28.2 24.1 12.4 10.5 7.8 6.9 5.4 4.0
head(polls)
Institut id Venstre Socialdemokraterne DF Radikale SF Enhedslisten LA Konservative
2 Voxmeter 122 27.5 23.3 14.9 7.9 5.0 10.9 5.2 4.7
3 Gallup 121 27.5 22.7 15.6 7.7 4.6 10.8 5.0 4.7
4 Voxmeter 120 25.8 24.1 15.8 8.1 5.1 10.2 5.9 4.4
5 Voxmeter 119 24.9 24.7 15.3 7.5 6.0 11.5 5.7 3.9
6 Megafon 118 29.3 22.2 15.9 7.6 5.5 10.2 4.6 3.9
7 Rambøll 117 25.2 22.4 16.4 7.5 6.1 10.9 6.1 4.7
Efter at have lavet partivariablene numeriske, kan man bruge dem efter forgodtbefindende. For eksempel plotte hvordan de enkelte partier har rykket sig i meningsmålingerne siden Folketingsvalget. I disse to plot (lavet vha. ggplot2) er det vist for hhv. Venstre og Dansk Folkeparti:
Venstre havde en stigning i meningsmålingerne efter valget, men er nu begyndt at falde. Dansk Folkeparti kan kun håbe at deres udviklingen i meningsmålingerne fortsætter som hidtil. Der er selvfølgelig også mulighed for at plotte udviklingen for flere partier i samme plot (foruden ggplot2 har jeg anvendt reshape2):
Som bemærket ovenfor har jeg blot lavet en simpel id variabel, der giver hver meningsmåling et unikt id. Alternativt kunne man bruge informationen om hvilken dato meningsmålingen var publiceret, og plotte dem efter eksakt dato for offentliggørelse. Dette ville give et mere retvisende billede af distancen mellem de enkelte meningsmålingers offentliggørelse (og dermed også hvornår de er foretaget).
Mere arbejde krævede det ikke at hente en tabel ned fra nettet. XML pakken kan bruges til at hente al slags information ud, og hvis der blot er tale om en tabel fra en hjemmeside, som i ovenstående tilfælde, kræver det ikke mere end et lille script og lidt databearbejdning, alt efter hvad man ønsker at lave. God fornøjelse.