Kolejny wpis z serii jak to zrobić w R. Dzisiaj krótkie wprowadzenie do tego jak ściągać bezpośrednio do R tabele zawarte na stronach internetowych, jak kierować zapytania do API, jak przetwarzać otrzymane od serwera odpowiedzi i jak to wszystko połączyć w niebanalną analizę.

Ściąganie tabel do R

Wykorzystamy w tym celu pakiet XML. Ściągniemy listę najbardziej kasowych filmów wszechczasów.

[github file = “/psobczyk/szychtawdanych/blob/master/filmy/analiza_actors_directors.R” start_line = “2” end_line = “10”]

Bardziej ogólne rozwiązania opiera się na wczytaniu całego pliku i ręcznego wybrania interesującego nas fragmentu korzystając z XML-owych tagów.

doc.html = htmlTreeParse('http://www.boxofficemojo.com/alltime/', useInternal = TRUE)
doc.text = unlist(xpathApply(doc.html, "//*/table", xmlValue))

Podłączenie do API

W poprzednim wpisie Szychty interesowało mnie nie tyle jakie filmy są najbardziej kasowe, takich zestawień jest tak dużo, że nie sposób z nimi konkurować, ale bardziej jacy aktorzy i reżyserzy stoją za ich sukcesami. Jak jednak zebrać informację o 630 filmach? Trzeba mieć albo bardzo dużo czasu, albo posłużyć się odpowiednim API (Application Programming Interface). Ja posłużyłem się bazą The Open Movie Database.

Jak się podłączyć do API? Trzeba najpierw skonstruować odpowiednie zapytanie czyli URL. Składnia, która nas interesuje jest opisana na stronie OMDb. Następnie po prostu wczytujemy tę stronę. Dla filmu Rocky wygląda to następująco

queryURL <- 'http://www.omdbapi.com/?t=Rocky&y;=1976&plot;=short&r;=json'
rd <- readLines(queryURL, warn="F")

Dane dla wszystkich filmów wczytujemy w prostej pętli

[github file = “/psobczyk/szychtawdanych/blob/master/filmy/analiza_actors_directors.R” start_line = “42” end_line = “64”]

Et voilà! Wystarczy teraz nasze dane lekko przetworzyć, pogrupować i umieścić na wykresie.

Przetworzenie danych

[github file = “/psobczyk/szychtawdanych/blob/master/filmy/analiza_actors_directors.R” start_line = “65” end_line = “66”]

[github file = “/psobczyk/szychtawdanych/blob/master/filmy/analiza_actors_directors.R” start_line = “68” end_line = “73”]

[github file = “/psobczyk/szychtawdanych/blob/master/filmy/analiza_actors_directors.R” start_line = “74” end_line = “79”]

Korzystanie z API nie jest w rzeczywistości aż tak przyjemne. Nazwy filmów mogą się nieco różnić i każdym takim przypadkiem trzeba się zająć ręcznie. Poniżej zamieszczam konieczne modyfikacje data.frame dane

[github file = “/psobczyk/szychtawdanych/blob/master/filmy/analiza_actors_directors.R” start_line = “20” end_line = “37”]