Mit XML-Daten rechnen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
eds
Beiträge: 1
Registriert: So Sep 29, 2019 11:28 am

Mit XML-Daten rechnen

Beitrag von eds »

Hallo Community,

ich versuche mich gerade ein bisschen mit Fußballdaten zu beschäftigen. Insbesondere geht es darum, ob man ein "Momentum" in irgendeiner Form nachweisen kann. Meine Daten habe ich als XML. In diesem Beispiel alle Spiele der Bundesliga Saison 2018/2019.

Fragestellung:
Ich möchte nun einfach die Tore (Heimmannschaft + Auswärtsmannschaft) addieren. Leider bekomme ich das auf der XML Struktur nicht hin. Aufgrund der "Einfachheit" dieses Problems finde ich auch im Netz aktuell keine Hilfe.

Im Code seht ihr, dass das Heimteam 3 Tore und das Auswärtsteam 1 Tor geschossen hat.

Anscheinend muss ich die Werte noch irgendwie aus der XML-Struktur extrahieren bevor ich damit rechnen kann?

Code: Alles auswählen

> # Load the packages required to read XML files.
> library("XML")
> library("methods")
> 
> # Give the input file name to the function.
> result <- xmlParse(file = "2018.xml")
> 
> # Exract the root node form the xml file.
> rootnode <- xmlRoot(result)
> 
> # Get the first element of the first node.
> print(rootnode[[1]][[11]][[1]][[1]])
<PointsTeam1>3</PointsTeam1> 
> print(rootnode[[1]][[11]][[2]][[1]])
<PointsTeam1>1</PointsTeam1> 
> goals <- rootnode[[1]][[11]][[1]][[1]] + rootnode[[1]][[11]][[2]][[1]]
Error in rootnode[[1]][[11]][[1]][[1]] + r
Grüße und danke
EDS
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Mit XML-Daten rechnen

Beitrag von EDi »

Das es an eine reproduzierbaren Beispiel fehlt und mich das aber interessiert hat, hier ein reproduzierbares Beispiel samt Problemlösung:

Code: Alles auswählen

library("xml2")
library("httr")
library("purrr")
path <- "https://www.openligadb.de/api/getmatchdata/bl1/2016/8"

# download xml
#! without accept header we would get a JSON
doc <- GET(path, add_headers(Accept = "application/xml"))
# read in xml
matches <- as_list(read_xml(content(doc, "text")))[[1]]

length(matches)
# 9 matches
names(matches[[1]])
# with this data, we want only match results

# a extractor & sum function
sum_match_results <- function(match) {
  as.numeric(match$MatchResults$MatchResult$PointsTeam1[[1]]) + 
    as.numeric(match$MatchResults$MatchResult$PointsTeam2[[1]])  
}


# apply sum function to each match
map_dbl(matches, sum_match_results)
Ich hätte ja json anstatt xml genommen, wenn man schon die Wahl hat.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten