We wtorek przedstawiałem graficznie dane z Eurostatu dotyczące transportu.
Przygotowując się do tych analiz, szukałem pakietu, który umożliwi łatwe wczytanie danych z Eurostatu.
Ale nie znalazłem.
Więc napisałem własny!
Od kilku dni z CRANu można ściągnąć pakiet 'SmarterPoland’ dla programu R. Można w nim znaleźć kilka użytecznych funkcji do pobierania danych bezpośrednio z Eurostatu.
Poniżej pokażę jak użyć tego pakietu do pobrania spisu tabel z Eurostatu, pobrania danych o transporcie i narysowania wykresu trójkątnego. Wszystkie w czterech prostych krokach.
Zacznijmy od funkcji grepEurostatTOC(wzorzec), która pobiera ze stron Eurostatu listę dostępnych tabel z danymi i wybiera z nich tylko te, które w opisie mają podciąg znaków 'wzorzec’. Poniżej wypisane są wszystkie tabele dostępne w bazach Eurostatu, które w opisie zawierają napis 'split of passenger transport’.
1 2 3 4 5 6 7 8 | library(SmarterPoland) library(plotrix) # gdzie są dane o udziale pasażerów grepEurostatTOC("split of passenger transport") ## title code type ## 4652 Modal split of passenger transport tsdtr210 dataset ## last.update.of.data last.table.structure.change data.start data.end ## 4652 17.08.2012 14.09.2012 1990 2010 |
Dane z których chcę korzystać są w tabeli 'tsdtr210′. Użyjemy funkcji getEurostatRCV() do pobrania tej tabeli bezpośrednio z internetowych baz Eurostatu do R, do danych w formacie RCV. W poniższym przypadku format RCV oznacza tyle, że typ transportu jest opisany przez pierwszą kolumnę, kod państwa przez drugą kolumnę, rok przez trzecią kolumnę, a procent używalności danego typu transportu w danym roku i kraju przedstawiony jest w czwartej kolumnie.
9 10 11 12 13 14 15 16 17 18 | # ściągamy tabelę 'tsdtr210' z eurostatu. Dane są w formacie RCV summary(tmp <- getEurostatRCV("tsdtr210")) ## vehicle geo time value ## BUS_TOT:756 AT : 63 1990 : 108 Min. : 0.0 ## CAR :756 BE : 63 1991 : 108 1st Qu.: 6.9 ## TRN :756 BG : 63 1992 : 108 Median :12.9 ## CH : 63 1993 : 108 Mean :33.6 ## CY : 63 1994 : 108 3rd Qu.:77.4 ## CZ : 63 1995 : 108 Max. :93.4 ## (Other):1890 (Other):1620 NA's :397 |
Dane z postaci RCV (nazywaną również tzw. ang. molten) na postać tabelaryczną można przekształcić funkcją 'cast’ z pakietu 'reshape’. Poniżej przykład uzycia tej funkcji, zamieniamy dane 'tmp’ na postać tabelaryczną, która w kolumnach będzie miała wartości dla kolejnych lat a w wierszach dla krajów (formuła geo ~ time). Ponieważ w 'tmp’ znajdują się dane dla trzech środków transportu, to poniżej tworzone są tak naprawdę trzy tabele, w każdej przedstawiane są dane dla określonego środka transportu (argument subset).
19 20 21 22 23 24 25 26 27 28 29 30 31 | autobus <- cast(tmp, geo ~ time, mean, subset = vehicle == "BUS_TOT") head(autobus[, c(1, 13:22)], 3) ## geo 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 ## 1 AT 10.9 10.9 10.9 11.0 10.5 10.4 10.8 10.2 10.5 10.6 ## 2 BE 10.7 11.4 12.5 12.7 13.0 13.2 14.3 14.4 13.3 13.6 ## 3 BG 32.6 34.7 30.2 25.0 24.3 22.7 21.8 20.8 16.8 17.0 samochod <- cast(tmp, geo ~ time, mean, subset = vehicle == "CAR") pociag <- cast(tmp, geo ~ time, mean, subset = vehicle == "TRN") # wybierz dane z roku 2010 dla każdego z typów transportu razem <- cbind(autobus[, "2010 "], samochod[, "2010 "], pociag[, "2010 "]) # dodajemy nazwy państw rownames(razem) <- levels(autobus[, 1]) razem <- na.omit(razem) |
Pozostaje już tylko narysować przygotowane dane. Wykorzystam funkcję 'triax.plot’ z pakietu 'plotrix’. Na poniższym wykresie punkty są skupione w prawym dolnym rogu (w większości krajów dominuje transport z użyciem samochodu), więc dla większej czytelności najlepiej usunąć lewy i górny róg, tak jak we wtorkowym wpisie.
32 33 | # narysuj wykres trójkątny triax.plot(razem, show.grid = T, label.points = T, point.labels = rownames(razem), pch = 19) |
I tak pakiet 'SmarterPoland’ trafił na CRAN.
Na razie potrafi tylko wczytywać dane z Eurostatu, ale w przyszłości będzie się rozrastał (mam nadzieję).
Chętnych do rozwoju tego pakietu zapraszam do współpracy.
Dopiero poznaję R i bardzo dziękuję za te techniczne wpisy!
Świetny wpis. Nie wiem, w jaki sposób mógłbym się przyczynić do rozwoju tego pakietu, ale jeśli miałby objąć swoim zasięgiem dane z bazy OECD albo GUS (Bank Danych Lokalnych) to byłbym zachwycony. Jestem początkującym użytkownikiem 'R’
To może zacznijmy od Banku Danych Lokalnych. Czy jest API i opis tego API dla tych danych?
Jeżeli jest to łatwo będzie je ,,zanurzyć” w R.
Jakieś API być powinno, widziałem że Sejmometr coś opakowuje.
Postaram się dowiedzieć czegoś od znajomych, którzy pracują w US. Ciekawe czy to łączy się bezpośrednio z BDL czy oni ściągnęli dane i je udostępniają?
Napisz jak się czegoś dowiesz. Można zrobić dump danych jakimiś brutalnymi pająkami (modulo tokeny) ale źle byłoby powtórzyć historię Aarona Swartza i Jstora.
Może nawet jeżeli API dzisiaj jeszcze nie ma, to jest planowane?