5 Andra paket
Här är en kort introduktion till ett par andra paket som är lätta och roliga att använda.
5.1 leaflet
med leaflet skapar vi enkelt kartor baserade på Google Maps. Observera här att i paketet leaflet finns också en funktion, leaflet()
. Vi använder också paketet ggmap för att få hitta koordinater för platser, om vi inte vill gå till Google maps och hitta dem. Observera att du kommer behöva installera vissa paket, använd install.packages("paketets namn")
library(ggmap)
ggmap::geocode("ekonomikum")
## Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=ekonomikum&sensor=false
## lon lat
## 1 17.6212 59.8591
library(leaflet)
m <- leaflet() # Funktionen leaflet
m <- addTiles(m)
m <- addMarkers(m,
lng=17.61982,
lat=59.85945,
popup="Ekonomikum")
m
5.2 quantmod
Paket-författarna själva beskriver quantmod som ett “Quantitative Financial Modelling and Trading Framework for R”. Det finns en mängd funktioner, med här demonstrerar jag hur du kan ladda ner data från enskilda aktier eller börsindex. Du behöver registrera dig på tiingo.com för att få en API-nyckel. Efter registrering, logga in och gå till
API>Documentation>2.2.1 Daily Prices
En bit ner på sidan hittar du din API-nyckel
Skriv följande rad i R så att du sparar ett objekt key
med din API-nyckel
key <- "..............." # Byt ut .... mot din nyckel
Vi kan exempelvis ladda ner data Facebooks aktie, använd funktionen getSymbols()
, argumentet src
är varifrån vi hämtar data, api.key
är helt enkelt din API-nyckel. Data kommer sparas som ett objekt FB
.
library(quantmod)
getSymbols("FB", src = "tiingo",api.key = key)
## [1] "FB"
?getSymbols
Vi kan inspektera de fem senaste dagarna med tail()
…
tail(FB, 5)
## FB.Open FB.High FB.Low FB.Close FB.Volume
## 2018-09-10 163.510 165.01 162.16 164.18 20197680
## 2018-09-11 163.940 167.19 163.72 165.94 20457088
## 2018-09-12 163.250 164.49 161.80 162.00 24078118
## 2018-09-13 162.000 163.32 160.86 161.36 25453775
## 2018-09-14 161.715 162.84 160.34 162.32 21770405
…och skapa en tidsserieplot med plot()
plot(FB$FB.Close,col="black")
Det är mycket som pågår under the hood här. Till exempel: hur vet funktionen plot()
vad för sorts graf den ska rita, och var den ska leta efter tiden (som visas på x-axeln)? Går man in på djupet blir det snabbt väldigt komplicerat, och vi lämnar såldes denna diskussion tills vidare.
5.3 dplyr
Här kommer jag introducera paketet dplyr som är ett fantastiskt intuitivt sätt att manipulera data. Först måste du i vanlig ordning installera paketet med install.packages()
. Glöm inte citationstecken. Sedan
library(dplyr)
I dplyr finns %>%
. Med %>%
(som kallas the pipe operator) behöver vi inte skriva det första argumentet i en funktion inuti själva funktionen. Det är mycket enklare att förstå med ett exempel. Notera hur dessa två funktioner (som avrundar x
till en decimal) producerar samma resultat
x <- c(0.109, 0.359, 0.63, 0.996, 0.515, 0.142, 0.017, 0.829, 0.907)
round(x,1)
## [1] 0.1 0.4 0.6 1.0 0.5 0.1 0.0 0.8 0.9
x %>% round(1)
## [1] 0.1 0.4 0.6 1.0 0.5 0.1 0.0 0.8 0.9
I detta fallet går det så klart snabbare att bara skriva round(x,1)
, men när du applicerar många funktioner på x
så skall du snart se att du kan skriva mycket mer intuitiv kod med %>%
round(exp(diff(log(x))), 1)
## [1] 3.3 1.8 1.6 0.5 0.3 0.1 48.8 1.1
x %>% log() %>% diff() %>% exp() %>% round(1)
## [1] 3.3 1.8 1.6 0.5 0.3 0.1 48.8 1.1
Framför allt är som sagt dplyr bra för datamanipulering. Den innehåller en rad bra funkltioner som jag demonstrerar nedan med hjälp av ett data set vi redan är bekanta med, gapminder
.
library(gapminder)
gapminder
## # A tibble: 1,704 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
## 7 Afghanistan Asia 1982 39.9 12881816 978.
## 8 Afghanistan Asia 1987 40.8 13867957 852.
## 9 Afghanistan Asia 1992 41.7 16317921 649.
## 10 Afghanistan Asia 1997 41.8 22227415 635.
## # ... with 1,694 more rows
5.3.1 filter()
Som du ser så har gapminder
6 kolumner och 1704 rader. Vi börjar med funktionen filter()
som väljer observationer baserat på deras värden. Säg att vi är intresserade av data där landet är Sverige.
gapminder %>% filter(country=="Sweden")
## # A tibble: 12 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Sweden Europe 1952 71.9 7124673 8528.
## 2 Sweden Europe 1957 72.5 7363802 9912.
## 3 Sweden Europe 1962 73.4 7561588 12329.
## 4 Sweden Europe 1967 74.2 7867931 15258.
## 5 Sweden Europe 1972 74.7 8122293 17832.
## 6 Sweden Europe 1977 75.4 8251648 18856.
## 7 Sweden Europe 1982 76.4 8325260 20667.
## 8 Sweden Europe 1987 77.2 8421403 23587.
## 9 Sweden Europe 1992 78.2 8718867 23880.
## 10 Sweden Europe 1997 79.4 8897619 25267.
## 11 Sweden Europe 2002 80.0 8954175 29342.
## 12 Sweden Europe 2007 80.9 9031088 33860.
I stället för 1704 rader har vi nu bara 12, det vill säga alla värden där kolumnen country
är lika med Sverige ("Sverige"
).
5.3.2 select()
Med select väljer vi helt enkelt kolumner baserat på deras namn. Vi har i vårt data set som sagt 6 kolumner, säg att vi är intresserade av endast en kolumn, nämligen den kolumn som heter country
gapminder %>% select(country)
## # A tibble: 1,704 x 1
## country
## <fct>
## 1 Afghanistan
## 2 Afghanistan
## 3 Afghanistan
## 4 Afghanistan
## 5 Afghanistan
## 6 Afghanistan
## 7 Afghanistan
## 8 Afghanistan
## 9 Afghanistan
## 10 Afghanistan
## # ... with 1,694 more rows
I sann %>%
-anda kan vi självklart kombinera funktionerna. Säg att vi är intresserade av data på Sverige, och vi bara vill ha två kolumner: år och förväntad livslängd
gapminder %>%
filter(country=="Sweden") %>%
select(year, lifeExp)
## # A tibble: 12 x 2
## year lifeExp
## <int> <dbl>
## 1 1952 71.9
## 2 1957 72.5
## 3 1962 73.4
## 4 1967 74.2
## 5 1972 74.7
## 6 1977 75.4
## 7 1982 76.4
## 8 1987 77.2
## 9 1992 78.2
## 10 1997 79.4
## 11 2002 80.0
## 12 2007 80.9
I första steget väljer vi alla rader där country
är lika med "Sverige"
och i andra steget väljer vi kolumnerna som heter year
och lifeExp
.
5.3.3 mutate()
med mutate()
skapar vi nya kolumner baserat på befintliga kolumner. Det vill säga, vi applicerar en funktion på en eller flera befintliga kolumner och skapar en ny. Vi har BNP per capita och vi har population, så vi skulle kunna skapa en ny kolumn, gdp
, genom att multiplicera gdp per capita med population, i.e. gdpPercap*pop
gapminder %>%
mutate(gdp = gdpPercap*pop)
## # A tibble: 1,704 x 7
## country continent year lifeExp pop gdpPercap gdp
## <fct> <fct> <int> <dbl> <int> <dbl> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779. 6567086330.
## 2 Afghanistan Asia 1957 30.3 9240934 821. 7585448670.
## 3 Afghanistan Asia 1962 32.0 10267083 853. 8758855797.
## 4 Afghanistan Asia 1967 34.0 11537966 836. 9648014150.
## 5 Afghanistan Asia 1972 36.1 13079460 740. 9678553274.
## 6 Afghanistan Asia 1977 38.4 14880372 786. 11697659231.
## 7 Afghanistan Asia 1982 39.9 12881816 978. 12598563401.
## 8 Afghanistan Asia 1987 40.8 13867957 852. 11820990309.
## 9 Afghanistan Asia 1992 41.7 16317921 649. 10595901589.
## 10 Afghanistan Asia 1997 41.8 22227415 635. 14121995875.
## # ... with 1,694 more rows