Jak odczytać prognozę pogody w R? API do the Dark Sky

Przygotowując materiały do kursu 'Bądź data-smaRt’ (tytuł roboczy), potrzebowałem prognozy pogody. Krótkie poszukiwania w celu automatycznego i publicznie dostępnego API zaowocowały nową funkcją w pakiecie SmarterPoland, która pozwala na pobranie prognoz godzinnych i dniowych dla temperatury, ciśnienia, zachmurzenia i wielu innych ciekawych parametrów.

W dwóch linijkach, można pobrać prognozy i je narysować w R. Zobaczmy jak.

Aby poniższy kod zadziałał, potrzebne jest apiKey, które można pobrać po zarejestrowaniu się w serwisie The Dark Sky (https://developer.forecast.io/).

Mając ten klucz, możemy funkcją getWeatherForecast{SmarterPoland} pobrać prognozę dla punktu o określonych współrzędnych geograficznych (lat/lon) lub podając nazwę miasta (w tym przypadku współrzędne dla miasta odczytywane są z lokalnej bazy).

library(SmarterPoland)
prognoza <- getWeatherForecast(apiKey, city='Warsaw')

Pobrany obiekt zawiera trzy ramki danych. Informacje o aktualnej pogodzie. Prognozę co godzina na najbliższe 48 godzin i prognozę dzienną na 8 dni.
Co z taką prognozą możemy zrobić? Narysować!

library(ggplot2)
library(scales)
library(ggthemes)
 
ggplot(prognoza$by.hour, aes(y=temperatureCelsius, x=time)) + 
  geom_line(size=2) + geom_point(size=4) +
  geom_point(data=prognoza$now, size=10, color='red') +
  theme_tufte() +
  scale_y_continuous(breaks=5:12)+
  theme(title=element_text(size=20),
        axis.text=element_text(size=20),
        panel.grid = element_line(size=2, color="grey")) + 
  scale_x_datetime(breaks = date_breaks("3 hour"),
                   minor_breaks = date_breaks("1 hour"),
                   labels = date_format("%H:00\n %d/%m")) +
  ylab("") + xlab("") + ggtitle("Prognoza temperatury dla Warszawy")

Za dwa dni sprawdzimy, czy ta prognoza się sprawdziła.

3 thoughts on “Jak odczytać prognozę pogody w R? API do the Dark Sky”

  1. Co to może być?

    > prognoza <- getWeatherForecast("0ef74dbd21eefe4439fa9b9cda478d27", city='Warsaw')
    Error in as.POSIXct.default(df$time, origin = "1970-01-01", tz = df$timezone) :
    do not know how to convert 'df$time' to class “POSIXct”
    In addition: Warning message:
    In `$.data.frame`(cityInfo, lon) : Name partially matched in data frame

  2. Okazało się, że w niektórych prognozach dla różnych godzin jest różna liczba cech (np. czasem jest wilgotność czasem nie) i to psuło formatowanie.

    Już naprawione.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *