pttry / pttrobo

Automation of PTT data
https://pttry.github.io/pttrobo/
Other
1 stars 0 forks source link

Ennustekuviot #11

Open jhuovari opened 2 years ago

jhuovari commented 2 years ago

Koitin piirtää ennustekuvion ja onnistuin: vignette/Ennustekuviot.Rmd

Huomioita ja ehdotuksia:

jhuovari commented 2 years ago
krasstek commented 2 years ago

Hei, plottauksen nämä huomiot (sekä issue #12), ja yleinen siistiminen on minulla työn alla. Saatan joutua kysymään vähän yksityiskohtia erityisesti tuosta piirtofunktion joustamattomuudesta ja toivotusta toiminnallisuudesta, kunhan pääsen sinne asti.

-Antti

jhuovari commented 2 years ago

Hyvä juttu, voidaa pitää myös palaveria.

Kuvioiden toiminnallisuuteen:

krasstek commented 2 years ago

Moi, voitaisiin vähän katsoa vaikkapa huomenna tai perjantaina tuota kuvionmuodostuksen tilannetta. Ohessa linkki testiluontoiseen kuvioon jossa pitäisi voida napata kuva kolmessa eri koossa ja ladata myös tiedot (asettelu tiedoissa on vähän kyllä heikko, mutta ajatus kumminkin). https://storage.googleapis.com/pttry/dev/testi_latausnapeilla.html

jhuovari commented 2 years ago

Hyvä, juuri noin

Ehdotin Juhalle julkaisualusta palaverista huomenaamulle. Voitaisiin katsoa kuvia samalla, jos sinulle sopii.

krasstek commented 2 years ago

Jes, sopii hyvin!

jhuovari commented 2 years ago

Tein nyt Kuviot-vignetin. Se sisältää vasta yhden viivakuvion, mutta sillä hyvä lähteä liikkeelle.

Ajattelin, että loppupään piirtofunktoit ovat aplot_ -alkuisia. Vähän niinkuin automation, mutta ennen muuta, ettei ennustavaan tekstin syöttöön tule muuta.

Pienenä ongelmana on, että Vignette ei mene läpi checkillä tai document:lla. Kai sen takia, että se ei lue.Rprofilesta robonomist-palvelinta ja tokenia. Olisiko tähän joku parempi tapa?

jhuovari commented 2 years ago

Palvelin ja token ongelma selvisi, kun laittoi ne .Renvironiin.

krasstek commented 2 years ago

Hei, en tällä viikolla saanut puskettua vielä uusittua plottausta, koska eri kokoisten kuvien tuottaminen aiheuttaa vielä hieman päänvaivaa asettelun automaation kanssa.

jhuovari commented 2 years ago

Mitäs kuvoille kuuluu. Saako niistä pian seuraavan version.

krasstek commented 2 years ago

Moi, tulossa tänään devausbranchi jossa plottauksen tämänhetkinen tila. Kaikenlaisia haasteita on edelleen, mutta päästään sitten keskustelemana etenemisestä.

krasstek commented 2 years ago

Eli plot_rework branchiin on nyt puskettu kaksi filua R-kansioon, mutta paketti-integraatiota ei näille vielä ole tehty, koska tarvitsee vähän palautetta ja tarpeiden yksilöintiä. Tiedostoista plot_config.R pitää ajaa ensin, ja sisältää funktiot mitä piirtämiseen tarvitaan, ja ptt_plot_base.R sisältää sen piirtofunktion ja ihan alhaalla esimerkin käytöstä. Kumpikaan r-skripti ei ole lopullisessa muodossaan, mutta toiminnallisuus nyt havainnollistavana.. palautetta ja kysymyksiä kuulisi mielellään nyt.

Iso ongelma oli tosiaan kolmen erikokoisen kuvion napit siten, että layout pysyisi suunnilleen siedettävänä, mutta edelleen siellä on paljon haasteita, joista pitää keskustella. Data-csv latausnappi kuvioissa ei tällä hetkellä toimi.

jhuovari commented 2 years ago

Hyvältä näyttää. Nopeita kommentteja:

jhuovari commented 2 years ago

Tee ensimmäisenä paketti-integraatio, niin tuota voi alkaa koekäyttämään. Siinä ne muutostarpeet vasta tulevat esiin.

krasstek commented 2 years ago

Siellä on nyt branchissa uusi pushi, load_all() vain ja testaamaan. Vähän jäi hähmäiseksi miten se viivan leveys oli tarkoitus tunnistaa, joten nyt on muuttuja lwd (default F) joka ollessa T antaa ensimmäiselle faktorille leveyden neljä ja muille 2, mutta aika fluidi on tuota muuttaa.

Iso ongelma on rangeslider ladattavissa kuvissa, sen menee kyllä pois näkyvistä, mutta plotly on melko hankala sen varsinaisen plottialueen kanssa, ja tällä erää kuviin jää rangesliderin mentävä tyhjä alue. Jos rangeslideria ei käytä niin ongelmaa ei toki ole.

jhuovari commented 2 years ago

Sehän vaikuttaa nyt hyvältä. rangeslider kuvien lataus ei suuri ongelmia.

Nykyinen lwd toiminto on ihan kätevä, jos haluaa korostaa yhtä havaintoa. Ajatuksena oli kuitenkin enemmän se, että samasta sarjasta on kaksi eri variaatioita esim. alkuperäinen ja trendi. Sen voi kuitenkin ehkä toteuttaa samalla tavalla kuin ennusteen lisäyksen.

Pieniä huomioita:

Kokoja täytyy vielä miettiä.

Mun mielestä sen voisi tuoda nyt main branchiin ja alkaa käyttämään.

jhuovari commented 2 years ago

Se on oikein hyvä, että kuvio on nyt rakennettu paloista. Niiden erillistä käyttöä voisi vielä helpottaa, valmilla defaulteilla. Aloin jo leikkimään crosstalkin kanssa ja siihen ptt_plot ei toiminut, mutta lisäämällä plot_ly:n ptt_plot_config ja ptt_plot_set_colour sain hyvin samannäköisen kuvan.

krasstek commented 2 years ago

Jes nuo muutokset ja useampia pieniä on nyt toteutettu ja pushattu. Värien pitäisi nyt mätsätä ennustetraceihin paremmin. Nyt on muuttuja secondary_grouping joka valittaessa määrittää viivan leveyden. Tästä (ei vielä dokumentoitu kun tätä voisi parannella) yhden pitäisi olla nimeltään "alkuperäinen", jolloin toimii oikein legendin kanssa.

Kun halutut output-koot on pohdittu niin katson sitten vielä tarkemmin asettelun ongelmia, niitä on lukuisia pieniä ja vähän isompia (jälkimmäinen lähinnä legendillä jos tulee tosi paljon traceja).

Palastelun käytettävyyttä en myöskään vielä ehtinyt kummemmin katsomaan, lähinnä pitäisi exporttaa kaikki mitä mahdollisesti tarvitaan ja asettaa defaultit niihin järkeviksi. Paljon siitä on kyllä siinä perus plottausfunktiossa jo valmiiksi.

En itse mergannut mainiin vielä, sitä viivan leveyden määrittävää muuttujaa voisi vielä kokeilla että varmasti skulaa odotetusti. Itse testaillessani siis toimii, mutta en osaa sanoa jos tulee jotain kompleksimpaa.

jhuovari commented 2 years ago

Hyvä. Laita vaan mainiin niin voi testata myös vakassa. Ei tässä mikään vielä ole tuotannossa. Kokeilemalle ne vasta huomaa. Tärkeintä on saada ne ennustekuviot toimimaan hyvin ja niissä ei ole tarvetta kuin muutamalle sarjalle, eikä mitään erikoisuuksia, niin ne pitäisi pysyä hyvin kasassaa. Muiden kanssa on sitten aina lisätä korkeutta, jos ei menaa mahtua kaikki kuvioon.

Oletteko te hiihtolomalla ensi viikon, vai pitäisikö pitää palaveri?

jhuovari commented 2 years ago

Nopeita kommentteja:

krasstek commented 2 years ago

Jes merge tehty ja tuo piirtojärjestys muutettu.

Itse olen ensi viikon lomalla noin suunnilleen, mutta tarvittaessa saatavilla. Yritän ehtiä purkaa sen secondary groupingin erikseen huomenna, ja palauttaa sen lwd-parametrin sellaiseen kevyeen käyttöön.

jhuovari commented 2 years ago

Sitä kevyempää viivan tarvin erityisesti aplot_trends-tyyppiseen:

Tämä ei nyt toimi:

aplot_trends <- function(dat, x = time, y = value,
                         colour = tiedot, size = NULL,
                         title = "", subtitle = "",
                         source = NULL,
                         caption = "", ...){

  if ((is.null(caption) || caption == "" ) & !is.null(source)){
    caption <- paste0("Lähde: ", source, ", PTT")
  }

  dat <-
    dat |>
    droplevels() |>
    mutate(alk = {{y}}) |>
    group_by({{colour}}) |>
    mutate(value = statfitools::trend_series({{y}}, time, ...)) |>
    ungroup()

  tiedot_name <- rlang::enquo(colour)

  ptt_plot(dat, grouping = {{colour}},
                 title = title, subtitle = subtitle, caption = caption,
           legendgroup = tiedot_name) |>
    plotly::add_lines(y = dat$alk,
                      size = I(0.5),
                      legendgroup = tiedot_name,
                      showlegend = FALSE
    )
}

Se toimi aiemmi tällä:

piirtaja$lines(dat, grouping_variable = {{colour}},
  title = title, subtitle = subtitle, lahde = caption,
  yksikko = NULL, legendgroup = tiedot_name) |>

tuon ptt_plot tilalla.

Esimerkki Kuviot-vignetissä

krasstek commented 2 years ago

Moi, ihan justiinsa tulee pushi jossa ptt_plot_add_secondary_traces on oma funktionsa kuten toivottu (kirjoitin sen aplot_trendsin uusiksi käyttämään tuota sikäli kuin ymmärsin oikein sen). Kuviot.rmd:ssä on myös esimerkki.

Sitten sellaiseen nopsampaan käyttöön on ptt_plot -funktiossa nyt isolate_primary -parametri, joka ollessaan T laittaa ekan faktorin leveämmäksi ja loput kapeammiksi, ja antaa kaikille saman värin ja ei grouppaa näitä legendiin. Tästäkin on kuviot.rmd:ssä esimerkki.

Olen tosiaan ensi viikolla periaatteessa poissa kuvioista, mutta pystyn kyllä vastaamaan jos on jotain kriittistä.

jhuovari commented 2 years ago

Kommentteja:

krasstek commented 2 years ago

Moi, nämä ovat nyt työn alla. Mitä meinaat powerpointiin viennillä? Manuaalista istututusta vai oliko joku automaatio sovittu? Kuvioiden koot voidaan tietty speksailla miten vain.

Ptt_plot-funktioon fonttikoon voi nytkin syöttää, antaa automaattisesti otsikkoon isomman ja pitäisi sovitella muutkin palikat paikalleen sen mukaan (voi vaatia vielä säätöä, riippuu mihin päädytään kokojen kanssa muuten).

jhuovari commented 2 years ago

Manuaalista istutusta nyt ensi vaiheessa, mutta powerpoint automatisointi voisi jossain vaiheessa miettiä. Nykyisten nappien takaa tulevien kuvien koko pitäisi katsoa, niin että koot ovat oikeat ja fontit tarpeeksi isoja kyseisellä koolla. ggptt paketin ggsave_ppt ja _ppt_half ja _twitter -funktioiden kuvioiden ja fonttien koot ovat mitä on aiemmin käytetty.

krasstek commented 2 years ago

Moi, pushasin juuri tuoreimman version. -paranneltu ladattavien png:eiden kokoja, ja nyt se tuntuu sujuvan ihan okei.. jos koot, fontit tai ihan mitä vain muuta on niissä pielessä, niin korjataan. -rangeslideriin start time, mutta toteutettu siten, että TRUE tai FALSE on kuten ennenkin, mutta jos antaa stringin jonka voi tulkita päiväykseksi, rangeslider ilmestyy mutta käyttää sitä start datena. Start date-muuttuja on nyt siis poistettu erillisenä. Voidaan tietysti tehdä toisinkin, mutta minusta on kätevämpi että on yksi muuttuja. -zeroline samalla tavoin kuin edeltävä, TRUE tai FALSE, tai sitten numero joka on sen "zerolinen" korkeus -logon kokoa vähän säädetty. Haaste edelleen siinä, että kun kuvan leveyttä säätää, logonkin koko muuttuu. Tämä pitää varmaan javascriptillä jotenkin hoitaa.

Eli siis näin vaikkapa toimivat (zeroline 5 nyt on vain esimerkki eikä mikään järjellinen viiva):

d <- ptt_data_robo_l("StatFin/kan/ntp/statfin_ntp_pxt_132h.px") |>
  dplyr::filter(stringr::str_detect(taloustoimi, "B1GMH|P3KS14_S15"), tiedot == "Kausitasoitettu ja työpäiväkorjattu sarja, viitevuosi 2015, miljoonaa euroa", lubridate::year(time) >= 2010) |>
  dplyr::group_by(taloustoimi) |>
  dplyr::mutate(value = ((value/ lag(value, 4)) -1) * 100) |>
  dplyr::ungroup() |>
  dplyr::mutate(tiedot = dplyr::case_when(stringr::str_detect(taloustoimi, "B1GMH") ~ "BKT", TRUE ~ "Yksityinen kulutus") |> forcats::as_factor()) |>
  tidyr::drop_na()
p <- d |>
  ptt_plot(tiedot, "BKT ja kulutus", subtitle = "Vuosimuutos",
           caption =  "Lähde: Tilastokeskus ja PTT",
           rangeslider = "2015-01-01",
           zeroline = 5
           )

p

p |> ptt_plot_create_widget()
krasstek commented 2 years ago

Heti huomaan, että ennustetracet lisättäessä ei zeroline jatku riittävän pitkälle, ja rangesliderin valintakin päättyy ennen ennusteita. Työn alla.

jhuovari commented 2 years ago

Saisiko y-axelin skaalautumaan uudelleen rangeslideria käytettäessä? Eli käytettävän rangen ulkopuolella olevat havainnot vaikuttavat y-akselin skaalaan, jolloin suurin osa kuviotilasta voi olla tyhjään.

jhuovari commented 2 years ago

Kommentteja:

krasstek commented 2 years ago

Jes, alamargin piti olla fiksattu mutta typon johdosta eipä ollutkaan. Nyt on uusi pushi jossa ppt-käytön kuvissa on isommat fontit ja kaikissa kolmessa alhaalta tilaa tiivistetty. Fontteja voidaan tietysti vielä korjata ihan tarpeen mukaan.

Rangesliderin y-akselin skaalaus vielä työn alla.

jhuovari commented 2 years ago

Näyttävät ensivilkaisulla hyviltä. Kuvionapit avaavat nyt ensi ponnahdusikkunan jossa Javascript alert aja {-suluissa numeroita. Itse tallennus kyllä sujuu.

Tietojen laataamisessa tiedostopääte täytyy olla csv, mutta sisältö saisi olla csv2 eli puolipiste-erotin ja pilkut desimaaleina. Saisiko datat myös niin, että kaikilla sarjoilla ei ole omaa time muuttujaa, vaan vain yksi yhteinen.

krasstek commented 2 years ago

Moi, nyt pitäisi olla javascript alertit poissa, csv arvot oikein muotoiltu ja jäsennetty pitkään muotoon, ja rangesliderin y-akselin olla responsiivinen. Viimeinen oli ehdottomasti hankalin, ja en odota sen toimivan kunnolla, mutta testatessa selviää: plotlyssä ei tuota ominaisuutta varsinaisesti ole, mutta tein oman js-häkkyrän joka kevyesti testaillessa ainakin toimi. Poistetaan toistaiseksi jos tulokset odottamattomia - kuten sanoin, tämä ei ole plotlyssä ominaisuutena.

Erityisesti png asettelu saattaa mennä päin honkia jos rangesliderilla on tehty valintoja ja sitten ladataan kuva.

krasstek commented 2 years ago

Latausnappien ikonit on tosiaan pihistetty sieltä täältä internetistä, jos niihin on Viralliset ptt-korvikkeet niin voisi pistää inst/image kansioon niin napsin ne sieltä paikalleen.

jhuovari commented 2 years ago

Ennustekuvioissa tietojen lataus tuottaa vain ennusteet, ei itse sarjoja. Niissä myös äkköset ovat erikoismerkkejä.

krasstek commented 2 years ago

Korjattu ja pushattu ensimmäinen, mutta jälkimmäistä en saa toisinnettua. Ääkköset ovat csv:n ladatessa minulla ääkkösiä.

jhuovari commented 2 years ago

Hyvä kiitos. Äkkös ongelma, johtuu siitä, että windows excel ei ymmärrä, että se on UTF-8. Jos sen tuo UTF-8:na niin tulee oikein, mutta pelkästään avaamalle excel ei tajua. Excelin kai saa tajuamaan lisäämällä BOM:n, mutta en tiedä onko se järkevää/tarpeellista.

jhuovari commented 2 years ago

Tarviiko artefacteja muuhun kuin sivun viemiseen googlen pilveen? Voisiko ne vain kirjoittaa temp-kansioon eikä paketin sisään?

krasstek commented 2 years ago

Selvä, lisäsin sinne scriptiin nyt charset utf siihen csv downloadiin, toimiiko? Koko workflow pitää varmaan erikseen keskustella auki vielä. Nyt se kirjoittaa ne sinne missä kyseinen .Rmd sijaitsee jolloin käyttäjällä on ne sitten omalla koneella tarkasteltavana mitä on tullut tehtyä.. voisi ne minusta olla kaikki tempissäkin jos niitä ei kerran muuhun tarvita. @itkonen ?

krasstek commented 2 years ago

Moi, huomasin rangesliderin start datessa ongelman joka oli vähän hankala paikantaa, mutta nyt pitäisi skulata. Ongelma oli siis x-akselin rangen määrityksessä, joka kadotti rangesliderilta mahdollisuuden asettaa start datea paikalleen.

jhuovari commented 2 years ago

Korjaus rikkoi joitain. Nyt tulee virhe Error in ptt_plot_add_zeroline(ptt_plot_add_rangeslider(p, enable = range.slider$enable, : object 'zero.line' not found

krasstek commented 2 years ago

Selvä, tutkitaan (myös stacked bar työn alla). Hetkinen.

krasstek commented 2 years ago

Zeroline ennusteiden kanssa pitäisi nyt toimia.