Ero sivun ”Ympäristöterveysindikaattori” versioiden välillä

Opasnet Suomista
Siirry navigaatioon Siirry hakuun
 
(45 välissä olevaa versiota 2 käyttäjän tekeminä ei näytetä)
Rivi 19: Rivi 19:
Tämä koodi piirtää näkemysverkkoja Shinylla. Koodi lukee alkuperäiset nettisivut ja muodostaa siitä tarvittavan datan. Koodi on ajettava omalla koneella.
Tämä koodi piirtää näkemysverkkoja Shinylla. Koodi lukee alkuperäiset nettisivut ja muodostaa siitä tarvittavan datan. Koodi on ajettava omalla koneella.


Shinyssa aluksi valitaan aihepiiri, sen jälkeen askelien määrä verkossa aiheen mukaisista kiintopisteistä lähtien. Koodi vaatii paketit OpasnetUtils, DiagrammeR ja Shiny. {{argument|relat1=relevant comment|selftruth1=true|id=arg5167|type=|content=Uusi koodi, jossa shinyssa on jo kelvollinen käyttöliittymä.|sign=--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 29. heinäkuuta 2018 kello 20.05 (UTC)}}
Shinyssa aluksi valitaan aihepiiri, sen jälkeen askelien määrä verkossa aiheen mukaisista kiintopisteistä lähtien. Koodi vaatii paketit OpasnetUtils, DiagrammeR ja Shiny. {{argument|relat1=comment|id=arg5167|type=|content=Uusi koodi, jossa shinyssa on jo kelvollinen käyttöliittymä.|sign=--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 29. heinäkuuta 2018 kello 20.05 (UTC)}}


<rcode name="shiny" label="Piirrä graafi Shinylla (ajettava omalla koneella)">
<rcode name="shiny" label="Piirrä graafi Shinylla (ajettava omalla koneella)">
# Tämä on koodi Op_fi5810/shiny sivulla [[Ympäristöterveysindikaattori]]
# Tämä on koodi Op_fi5810/shiny sivulla [[Ympäristöterveysindikaattori]]
library(OpasnetUtils)
library(rvest)


objects.latest("Op_en3861",code_name="discograph") # [[Extended causal diagram]] discograph
############### Create global variables at file global.R
#objects.latest("Op_en3861",code_name="odag") # [[Extended causal diagram]] scrape.assessment # Code must be run on own computer
 
##########################################################
### This is just a temporary copy of scrape.assessment function for technical reasons.
# This is code Op_en3861/odag on page [[Extended causal diagram]]


library(OpasnetUtils)
library(OpasnetUtils)
library(rvest)


#' @title Creates a unique URL based on wiki page id and object name. Used to create hyperlinks to the knowledge crystal pages.
#### Variables for user inteface
#' @param page wiki_page_id: character vector format "Op_en7748"
#' @param name name of the knowledge crystals: character vector


makeurl <- function(
sel <- opbase.data("Op_fi5810", subset="Seed nodes in shiny")[-1] # Alunperin taulukko "Seed nodes in shiny" sivulla [[Ympäristöterveysindikaattori]]
  page,
  name
) {
  if(is.null(page)|is.null(name)) return(NA) else
    out <- paste0(
      c(
        en = "http://en.opasnet.org/w/index.php?curid=",
        fi = "http://fi.opasnet.org/fi/index.php?curid="
      )[substr(page, 4,5)], # is it en or fi?
      substr(page, 6,11), # id
      "#", gsub(" ", "_", name)
    )
  out <- ifelse(is.na(page)|is.na(name), NA, out)
  return(out)
}


#' @title scrape.assessment makes standard data.frame for insight diagram out of all ovariables, odecisions, and data.frames and their dependencies in the global environment.
#' @param assessment ovariable that contains other assessment objects as dependencies
#' @param objectives names of ovariables that are objectives in the model
#' @return a list of two data.frames. The first one is for making insight diagrams, the second for making discussion ovariables for analysis


scrape.assessment <- function(
objtypes <- c("ovariable","index","value judgement","graph","toimija")
  assessment,
  objectives = character()
) {
  #  require(DiagrammeR)
  require(OpasnetUtils)
  nod <- data.frame()
  ova <- character()
  dec <- character()
  dat <- character()
  plo <- character()
  dep <- assessment@dependencies
  URLass <- assessment@meta$wiki_page_id
 
  #### Find all objects (decisions, ovariables, data.frames and graphs)
  for(i in dep$Name) {
    cl <- class(get(i))
    if("ovariable" %in% cl) ova <- c(ova, i)
    if("odecision" %in% cl) dec <- c(dec, i)
    if("data.frame" %in% cl) dat <- c(dat, i)
    if(any(c("ggplot","dgr_graph") %in% cl)) plo <- c(plo, i)
  }
 
  ###### Add all decisions and options
 
  for(i in dec) {
    deci <- get(i)@dectable
    if(nrow(deci)>0) {
      tst <- !duplicated(deci[c("Option","Decision")])
      nod <- rbind(
        nod,
        data.frame(
          Oldid = paste("Opt", match(i, dec), sep=""),
          type = "option",
          Item = as.character(deci$Option[tst]),
          label = as.character(deci$Option[tst]),
          Relation = "is option for",
          Object = as.character(deci$Decision[tst]),
          Description = if(is.null(deci$Description)) NA else
            as.character(deci$Description[tst]),
          URL = makeurl(URLass, deci$Option)[tst],
          stringsAsFactors = FALSE
        )
      )
     
      tst <- !duplicated(deci[c("Decision","Variable")])
      nod <- rbind(
        nod,
        data.frame(
          Oldid = paste("Dec", match(i, dec), sep=""),
          type = "decision",
          Item = as.character(deci$Decision[tst]),
          label = as.character(deci$Decision[tst]),
          Relation = "affects",
          Object = as.character(deci$Variable[tst]),
          Description = if(is.null(deci$Description)) NA else
            as.character(deci$Description[tst]),
          URL = makeurl(URLass, deci$Decision)[tst],
          stringsAsFactors = FALSE
        )
      )
    }
  }
 
  ####### Add all ovariables
 
  for(i in ova) {
    obj <- get(i)
    nod <- rbind( # Add dependencies
      nod,
      data.frame(
        Oldid = paste("Ova",match(i,ova),sep=""),
        type = "ovariable",
        Item = obj@name,
        label = obj@name,
        Relation = "is affected by",
        Object = if(nrow(obj@dependencies)==0) NA else as.character(obj@dependencies$Name),
        Description = if(is.null(obj@meta$Description)) NA else
          obj@meta$Description,
        URL = makeurl(obj@meta$wiki_page_id, obj@name),
        stringsAsFactors = FALSE
      )
    )
    tmp <- colnames(obj@output)[                          # Add indices
      obj@marginal &
        !grepl("Source$", colnames(obj@output)) &
        ! colnames(obj@output) %in% c(deci, "Iter")
      ]
    if(length(tmp)>0) {
      nod <- rbind(
        nod,
        data.frame(
          Oldid = paste0("Ova",match(i,ova),tmp),
          type = "index",
          Item = tmp,
          label = tmp,
          Relation = "is index for",
          Object = obj@name,
          Description = NA,
          URL = makeurl(URLass, tmp),
          stringsAsFactors = FALSE
        )
      )
    }
  }
 
  ### Add graphs
 
  nod <- rbind(
    nod,
    data.frame(
      Oldid = paste0("Plo", 1:length(plo)),
      type = "graph",
      Item = plo,
      label = plo,
      Relation = "describes",
      Object = if(is.null(dep$Child)) NA else dep$Child[match(plo, dep$Name)],
      Description = NA,
      URL = NA,
      stringsAsFactors = FALSE
    )
  )
 
  # V(dag)$Size[V(dag)$name == i] <- nrow(obj@output)    # Size
  # vertex.size = log(V(dag)$Size)+2, # Vertex size is (non-linearly) relative to rows in output.
 
  ### Add data.frames
 
  nod <- rbind(
    nod,
    data.frame(
      Oldid = paste("Dat", 1:length(dat), sep=""),
      type = "data",
      Item = dat,
      label = dat,
      Relation = "is data for",
      Object = assessment@name,
      Description = NA,
      URL = NA,
      stringsAsFactors = FALSE
    )
  )
 
  nod$type[nod$Item %in% objectives] <- "objective"
  nod$type[nod$Item %in% assessment@name] <- "assessment"
  if(!is.null(dep$Page)) {
    tst <- is.na(nod$Description)
    nod$Description[tst] <- as.character(dep$Description[match(nod$Item, dep$Name)][tst])
    tst <- is.na(nod$URL)
    nod$URL[tst] <- makeurl(
      dep$Page[match(nod$Item[tst], dep$Name)],
      dep$Name[match(nod$Item[tst], dep$Name)]
    )
  }
  tst <- is.na(nod$Description)
  nod$Description[tst] <- nod$type[tst]
  return(nod)
}


######################################### End of scrape.assessment
#### Fetch the data for insight diagram


types <- opbase.data("Op_en3861", subset="Table types")
meta <- html_table(read_html("https://yhteistyotilat.fi/wiki08/x/1oGxAg"))[[3]] # Aiemmin kolmostaulu sivulla https://yhteistyotilat.fi/wiki08/x/1oGxAg
meta <- html_table(read_html("https://yhteistyotilat.fi/wiki08/x/1oGxAg"))[[3]]
colnames(meta) <- c("Topic","Id","Type","URL","Table","Firstrow","Description")
savecsv <- FALSE
gr <- data.frame() # This is needed because goherr fetches an old version with gr for some reason.
insightTables <- list()


for(i in 1:nrow(meta)) {
objects.latest("Op_en3861",code_name="makeInsightTables") # [[Extended causal diagram]] makeInsightTables
  cat(i, meta$Ilmio[i],"\n")
  if(grepl("google.com", meta$URL[i])) {
    out <- scrape.gsheet(meta$URL[i], meta$Alkurivi[i])
  } else {
    if(meta$Tyyppi[i]=="keskustelu") {
      if(is.na(meta$Taulu[i])) j <- NULL else j <- as.numeric(meta$Taulu[i])
      out <- scrape.discussion(meta$URL[i], j)[[1]]
    } else {
      if(meta$Tyyppi[i] %in% c("arviointi","assessment")) {
        tmp <- strsplit(meta$URL[i], split="/")[[1]]
        objects.latest(tmp[1],tmp[2])
        dummy <- EvalOutput(get(tmp[3]))
        out <- scrape.assessment(get(tmp[3]))
        rm(dummy)
      } else {
        out <- scrape.webtable(meta$URL[i],meta$Taulu[i])
      }
    }
  }
  coln <- trimws(strsplit(as.character(types$`Column names`[types$Type==meta$Tyyppi[i]]),split=",")[[1]])
  if(colnames(out)[1]=="Obs") coln <- c("Obs",coln)
  colnames(out) <- coln
  meta$Ilmio <- gsub("[Öö]","o",gsub("[ÄÅäå]","a",meta$Ilmio))
  insightTables[[meta$Ilmio[i]]] <- out
 
  if(savecsv) {
    write.csv(
      out,
      paste0(meta$Ilmio[i],".csv"),
      quote=TRUE, row.names=FALSE, fileEncoding="UTF-8"
    )
  }
}


if(savecsv) {
insightTables <- makeInsightTables(meta)
  write.csv(meta, "meta.csv",fileEncoding = "UTF-8")
  # Zippaus ei jostain syystä toimi minun uudella koneella
  zip("~/Näkemysverkkojen tietotauluja.zip", paste0(c("meta",meta$Ilmio),".csv"))
}
insightTables$meta <- meta


############################################
## Use makegraphs to make graafilista from insightTables.
## Use makegraphs to make graafilista from insightTables.


objects.latest("Op_fi5810",code_name="makegraphs") # [[Ympäristöterveysindikaattori]] makegraphs
objects.latest("Op_fi5810",code_name="makegraphs") # Aiemmin [[Ympäristöterveysindikaattori]] makegraphs


graafilista <- makegraphs(verbose=FALSE)
########### This paragraph contains temporary code for updated YmpT so that you don't need to run whole network
# out <- scrape.webtable(meta$URL[3],meta$Table[3])
# coln <- c("Luokka", "Asia", "Lyhenne", "Relaatio", "Kohde", "Kuvaus", "URL")
# if(colnames(out)[1]=="Obs") coln <- c("Obs",coln)
# colnames(out) <- coln
# #meta$Topic <- gsub("[Öö]","o",gsub("[ÄÅäå]","a",meta$Topic))
# insightTables$Ymparistoterveys <- out


############################################
graafilista <- makegraphs(verbose=FALSE) # graphTable aiemmin nimeltään graafilista
### Create shiny server
 
# Tämä on koodi Op_fi5810/shiny sivulla [[Ympäristöterveysindikaattori]]
 
library(OpasnetUtils)


dummy <- EvalOutput(Ovariable( # Fetch graafilista if it does not exist already
dummy <- EvalOutput(Ovariable( # Fetch graafilista if it does not exist already
Rivi 302: Rivi 77:
)
)


sel <- list(
################ Create Shiny user interface at file ui.R
  `Politiikan avoimuus` = c(
    "Avoimuudesta on vakavaa haitta",
    "Ulkoinen uhka mahdollistaa sulkemisen",
    "Avoimuus estää päättämästä huolella",
    "Some pakottaa poliitikot jatkuvaan rooliin",
    "Avoimuuden rajoittaminen vähentäisi haittoja, mutta hyötyjä ehkä liikaakin",
    "Avoimuus haittaa politiikan laatua kytkeytyessään ykköstyypin ajatteluun",
    "Avoimuusjatkumolla länsimaiden"
  ),
  `Ympäristöterveys` = c(
    "melu",
    "radon",
    "tupakointi",
    "ruokamyrkytys",
    "vesiepidemia",
    "hengityselinoire",
    "vatsatauti"
  ),
  `Lasten lihavuus` = c(
    "lasten lihavuus",
    "ravitsemus",
    "aktiivisuus",
    "muu mekanismi"
  ),
  `Aikuisten lihavuus` = c(
    "lihavuus",
    "diabetes"
  ),
  `Helsingin ilmasto-ohjelma` = c( 
    "Kymp",
    "ruokapalveluiden reseptiuudistus",
    "Kanslia",
    "Kaupungin omassa toiminnan ja ",
    "Maka",
    "Ajoneuvoliikenteen hinnoittelu",
    "Sähköautojen julkinen latausinfra",
    "Sähköautoilu"
  ),
  `Benefit-risk assessment of fish` = c(
    "BoD",
    "info",
    "exposure",
    "Disease burden",
    "amount"
  ),
  `Baltic fish governance` = c(
    "EFSA",
    "European Commission",
    "Scientific opinion",
    "Max dioxin lvls"
  ),
  `Ruuhkamaksu` = c(
    "CC improves air quality",               
    "CC may improve health",                 
    "CC may constrain choice",               
    "CC does not increase traffic",         
    "CC does not restrict mobility or growth",
    "Toxicity charge is problematic",       
    "CC prevents tragedy of commons",       
    "CC needs to be dynamic",               
    "CC is innefficient in the future",     
    "Inhabitants must be subsidised",       
    "Congestion charge scheme doesn",
    "Congestion charge scheme will "
  ),
  `Pandemrix flu vaccine discussion` = c(
    "Not accepted. Pandemrix is sti",       
    "Pandemrix should not be used a"
  ),
  `Sitran 100 ilmastotekoa` = c(
    "vegaanihaaste/lihaton lokakuu",                           
    "kaupungin ruokapalveluiden reseptien kehitys",           
    "ruokapalveluiden reseptiuudistus",                       
    "vaihdan maidon ruokajuomana",                             
    "vaihdan pun. lihan kalaan/kanaan",                       
    "yhden lautasen taktiikka",                               
    "merellisen strategian ilmastohuomiot",                   
    "uusi merellinen strategia",                               
    "suppaan, melon, soudan",                                 
    "lomailen viikonlopun kotona",                             
    "lomailen junailemalla",                                   
    "luovun autostani",
    "Hyvä teko -teema",
    "Liikkumisteema",
    "Asumisteema",
    "Palveluteema",
    "Matkailuteema",
    "Ruokateema"
  )
)
 
objtypes <- c("ovariable","index","value judgement","graph","toimija")


ui <- basicPage(
ui <- basicPage(
   sidebarLayout(
   sidebarLayout(
     sidebarPanel(
     sidebarPanel(
       selectInput("topic","Topic",names(sel)),
       selectInput("topic","Topic",unique(sel$Topic)),
      selectizeInput(
        "addnodes",
        "Add seed nodes",
        sort(gr$nodes_df$label),
        selected = NULL,
        multiple = TRUE,
        options = NULL
      ),
       checkboxGroupInput("ignoreobj", "Ignore these object types", objtypes),
       checkboxGroupInput("ignoreobj", "Ignore these object types", objtypes),
      checkboxGroupInput("formatting", "Format graph", "Hide labels"),
       sliderInput("steps", "Number of steps:",   
       sliderInput("steps", "Number of steps:",   
                   min = 0, max = 5, value = 0)
                   min = 0, max = 5, value = 0)
Rivi 409: Rivi 101:
   )
   )
)
)
#### Create shiny server at file server.R


server <- function(input, output) {
server <- function(input, output) {
   output$plot1 <- renderGrViz({
   output$plot1 <- renderGrViz({
    nods <- c(
      match(sel$Node[sel$Topic==input$topic], gr$nodes_df$Oldid),
      match(input$addnodes, gr$nodes_df$label)
    )
    nods <- nods[!is.na(nods)]
     gr <- deselect_nodes(gr, get_selection(gr))
     gr <- deselect_nodes(gr, get_selection(gr))
     gr <- select_nodes_by_id(gr, match(sel[[input$topic]],gr$nodes_df$label))
     gr <- select_nodes_by_id(gr, nods)
     if(input$steps>0) {
     if(input$steps>0) {
       for(i in 1:input$steps) {
       for(i in 1:input$steps) {
Rivi 420: Rivi 119:
     }
     }
     gr <- deselect_nodes(gr, (1:nrow(gr$nodes_df))[gr$nodes_df$type %in% input$ignoreobj])
     gr <- deselect_nodes(gr, (1:nrow(gr$nodes_df))[gr$nodes_df$type %in% input$ignoreobj])
     grViz(generate_dot(transform_to_subgraph_ws(gr)))
    gr2 <- gr
    gr2$nodes_df$label <- gsub("(.{1,18})(\\s|$)", "\\1\n", gr2$nodes_df$label) # Cut labels to max 18 characters long on one line (except if a word is longer)
    # Alternative possibility is to use strwrap function from {base} or stri_wrap from stringi.
    if("Hide labels" %in% input$formatting) gr2$nodes_df$label <- ""
     grViz(generate_dot(transform_to_subgraph_ws(gr2)))
   })
   })
}
}
Rivi 436: Rivi 139:
=== Data ===
=== Data ===


{{#l:Näkemysverkkojen tietotauluja.zip}}
* [https://docs.google.com/spreadsheets/d/1EZBqzTlm3cWOGlplhTUvazm45NJ3wBNuWjlhrRoJajA/edit Ympäristöterveysindikaattorit Google sheetillä]
* {{#l:Näkemysverkkojen tietotauluja.zip}}


Data on muodostettu koodilla:
Data on muodostettu koodilla:
Rivi 497: Rivi 201:
oprint(graafilista$edges_df, show_all=TRUE)
oprint(graafilista$edges_df, show_all=TRUE)
</rcode>
</rcode>
 
=== Työlista ===
=== Työlista ===


'''Ajankohtaisia töitä tärkeysjärjestyksessä
'''Ajankohtaisia töitä tärkeysjärjestyksessä
* [https://ktstrat.dokku.teamy.fi/insight?indicator=142 Näkemysverkko] (jossa metsämittareita)
* Janne Hukkinen: miksi sääntelyä tarvitaan ilmastoasioissa
* Metsäteollisuuden puunkäyttö:
** Kannattaako sellunkeittoa lisätä, kun silloin käytetään nuorta ja ohutta puuta, joka on huono hiilinielu ja hiilivarasto?
** Ilmastohyötyjä, rikkaampi luonto ja metsänomistajille lisää rahaa – Metsäprofessori: avohakkuut voidaan lähes unohtaa menettämättä mitään
#uutisvahti


* Numerointi ja nimeäiminen on ollut epäjohdonmukaista. Korjatkaa tämän ohjeen mukaisesti.
https://yle.fi/uutiset/3-10777521
** Riittääkö puuta kaikkiin teollisuuden tarpeisiin?
** Onko vaarana, että puuta hakataan liikaa ja vanhat metsät häviävät liikaa? Biodiversiteetti riippuu nimenomaan vanhoista metsistä.
** [https://statdb.luke.fi/PXWeb/pxweb/fi/LUKE/LUKE__04%20Metsa__02%20Rakenne%20ja%20tuotanto__08%20Teollisuuspuun%20hakkuut%20alueittain/03_Teollisuuspuun_hakkuut_v_koko_maa.px/table/tableViewLayout1/?rxid=cfbfd295-0d62-4da2-8d8c-8d732d5e1a70 Teollisuuspuun hakkuut]
** https://tietokayttoon.fi/julkaisu?pubid=31402 
**https://stat.luke.fi/puun-kokonaiskaytto
**https://smy.fi/forest-fi/graafit/metsavarat/ 
**http://www.metla.fi/ohjelma/vmi/vmi-moni.htm
** http://www.metla.fi/ohjelma/vmi/vmi-moni.htm 
** https://www.luke.fi/ruokaminimi/tekijat/
* ilmastoystävällinen ruokavalio
** https://tietokayttoon.fi/julkaisu?pubid=31402 
* Kuka päättää ilmastoveroista? Ovatko ne epäreiluja? Onko ihmisillä oikeus kuluttaa vai onko valtiolla oikeus rajoittaa?
** [https://yle.fi/uutiset/3-10697378 Luulitko tekeväsi ilmastovalintasi itse?] 
** [https://www.sitra.fi/tapahtumat/kestavan-kehityksen-verouudistus-selvityksen-julkistustilaisuus/ Kestävän kehityksen verotuksen julkistustilaisuus]
* Kivihiili ja biopolttoaineet: Ovatko biopolttoaineiden ilmastopäästöt jopa suuremmat kuin fossiilisilla? Riittääkö biopolttoaineita edes kaikille halukkaille?
** [https://yle.fi/uutiset/3-10766814 Kivihiilen poltto loppuu Helsingissä. Korvautuuko se biopolttoaineilla?]
 
'''Kesän 2018 töitä
* T2b-taulukot uusitaan sivulle [[:op_en:Open policy ontology]]
* Näkemysverkkojen muotoiluun liittyviä töitä:
** Solmujen reunojen vaalentaminen. Musta otetaan pois käytöstä.
** Sellaisen fontin etsiminen, jossa on joko valkoiset reunat tai valkoinen tekstin mustalla reunuksella.
** Toiminnallisuus, jolla voi zoomailla näkemysverkossa. Kaksi mahdollista ratkaisua:
*** Shinyssa säätö, jolla voi zoomata kuvaa isommaksi kuin käytettävissä oleva alue.
*** DiagrammeRiin dynaamisuus, jolla voidaan valita pois solmuja kaaviosta. Tämä kuitenkin edellyttää jotain ratkaisua, jossa käyttäjän klikkaus välittyy tiedoksi Diagrammerille.
** Näkemysverkkoihin legend. Tämä edellyttää, että perustetaan uusi taulukko, johon tulee jokaista oliotyyppiä yksi solmu, ja sen Kuvaukseen laitetaan tarvittavat selitykset. Voi aloittaa Gsheetiin.
* Numerointi ja nimeäiminen on ollut epäjohdonmukaista. Korjatkaa tämän ohjeen mukaisesti. {{argument|relat1=comment|id=arg5748|type=truth|content=Helsinki kytkennät -taulukko käyty läpi, tosin muutama epäselvyys oli.|sign=--[[Käyttäjä:Mikomiko|Pieta Tuomisto]] ([[Keskustelu käyttäjästä:Mikomiko|keskustelu]]) 21. elokuuta 2018 kello 16.58 (UTC)}}
** Taulujen nimeäminen: Aiemmin joka taululla oli oma muutaman merkin mittainen tunniste eli Id. Sitten luovuttiin taulukohtaisuudesta ja siirryttiin aihekohtaisiin tunnisteisiin. Tämän takia on nyt varmistettava, että esim. lukuisissa Goherr-tauluissa on jokaisessa oma juokseva numerointinsa eikä samoja numeroita käytetä, PAITSI tietenkin jos asia on sama eli:
** Taulujen nimeäminen: Aiemmin joka taululla oli oma muutaman merkin mittainen tunniste eli Id. Sitten luovuttiin taulukohtaisuudesta ja siirryttiin aihekohtaisiin tunnisteisiin. Tämän takia on nyt varmistettava, että esim. lukuisissa Goherr-tauluissa on jokaisessa oma juokseva numerointinsa eikä samoja numeroita käytetä, PAITSI tietenkin jos asia on sama eli:
** Saman solmun numeron pitäisi olla jokaisessa taulussa sama. Myös samassa taulussa toistuva asia saa aina saman vanhan numeron. Esim. Ruuhkamaksu-taulussa tämä on virheellisesti.
** Saman solmun numeron pitäisi olla jokaisessa taulussa sama. Myös samassa taulussa toistuva asia saa aina saman vanhan numeron. Esim. Ruuhkamaksu-taulussa tämä on virheellisesti.
Rivi 515: Rivi 252:
* Ilmasto-ohjelman toimenpiteitä pitää alkaa liittämään niiden valmistelemiin päätöksiin, niistä koituviin kustannuksiin/investointeihin tai muihin yleisempiin ilmiöihin. Näistä päätöksistä, kustannuksista ja ilmiöistä pitää siis tehdä omat olionsa. Oliot listataan Goherr-kaaviot-taulukon [https://docs.google.com/spreadsheets/d/1qX_nUpFhV99joP285xROA6k0E5tzuEySH4DT1RNpYHM/edit#gid=1985478904 Ruuhkamaksu-sheetille].
* Ilmasto-ohjelman toimenpiteitä pitää alkaa liittämään niiden valmistelemiin päätöksiin, niistä koituviin kustannuksiin/investointeihin tai muihin yleisempiin ilmiöihin. Näistä päätöksistä, kustannuksista ja ilmiöistä pitää siis tehdä omat olionsa. Oliot listataan Goherr-kaaviot-taulukon [https://docs.google.com/spreadsheets/d/1qX_nUpFhV99joP285xROA6k0E5tzuEySH4DT1RNpYHM/edit#gid=1985478904 Ruuhkamaksu-sheetille].
** Uudet relaatiot 'valmistelee/prepares' ja 'kustantaa/pays'. Käänteisrelaatiot (inverse) ovat 'valmistelijana/prepared by' ja 'maksajana/paid by'. Nämä ovat toiminnallisia relaatioita (operational link).
** Uudet relaatiot 'valmistelee/prepares' ja 'kustantaa/pays'. Käänteisrelaatiot (inverse) ovat 'valmistelijana/prepared by' ja 'maksajana/paid by'. Nämä ovat toiminnallisia relaatioita (operational link).
** Uusi substanssiolio 'kustannus/expense'. Tavanomainen kustannus substanssityypin olio (tummanvihreän värinen ympyrä) mutta lisäksi on 'kustannustavoite/expense objective' joka on yhdistelmä kaikista kustannuksista ja jota pyritään päätöksenteossa minimoimaan. Kustannustavoite on tyyppiä objective. {{comment|# |Näiden kuvaaminen oikeisiin taulukoihin tuli Pietalle tehtäväksi.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 25. heinäkuuta 2018 kello 07.17 (UTC)}} {{comment|# |Uudet relaatiot liitetty [[:op_en:Structure of shared understanding]] sivulla olevaan taulukkoon.|--[[Käyttäjä:Mikomiko|Pieta Tuomisto]]([[Keskustelu käyttäjästä:Mikomiko|keskustelu]]) 27. heinäkuuta 2018 kello 09.30 (UTC)}}
** Uusi relaatio 'omistaa perustelun/has rationale', käänteisrelaationa 'perustelee/is rationale for'. Nämä ovat toiminnallisia relaatioita (operational link).
* Luo uusia solmuja ja linkkejä, jotka kytkevät yhteen Helsingin ilmasto-ohjelman ja a) ruuhkamaksukeskustelua, b) Sitran 100 ilmastotekoa, tai c) ympäristöterveysindikaattoreita. Myös muita kaavioita voi yhdistellä jos löytyy kytkentöjä. Kaikki aihepiirit ja linkit taulukoihin on [https://yhteistyotilat.fi/wiki08/pages/viewpage.action?pageId=45187542#Ilmi%C3%B6ty%C3%B6nrajauksenpohdintaa-Yhteisettieto-oliot lueteltu Yhteistyötiloissa].  
* Luo uusia solmuja ja linkkejä, jotka kytkevät yhteen Helsingin ilmasto-ohjelman ja a) ruuhkamaksukeskustelua, b) Sitran 100 ilmastotekoa, tai c) ympäristöterveysindikaattoreita. Myös muita kaavioita voi yhdistellä jos löytyy kytkentöjä. Kaikki aihepiirit ja linkit taulukoihin on [https://yhteistyotilat.fi/wiki08/pages/viewpage.action?pageId=45187542#Ilmi%C3%B6ty%C3%B6nrajauksenpohdintaa-Yhteisettieto-oliot lueteltu Yhteistyötiloissa].  
* Katso sivun [[:op_en:Congestion charge]] keskusteluja ja täydennä niihin eri paradigman mukaisia relaatioita.{{argument|relat1=relevant comment|selftruth1=true|id=arg6137|type=|content=Tehty. Kaikki argumentit on myös vaihdettu uuden templaatin mukaisiksi ja korjattu niiden totuuksia ja relevansseja.|sign=--[[Käyttäjä:Mikomiko|Pieta Tuomisto]] ([[Keskustelu käyttäjästä:Mikomiko|keskustelu]]) 29. heinäkuuta 2018 kello 12.09 (UTC)}} Käytettävät paradigmat:
* Katso sivun [[:op_en:Congestion charge]] keskusteluja ja täydennä niihin eri paradigman mukaisia relaatioita.{{argument|relat1=comment|id=arg6137|type=|content=Tehty. Kaikki argumentit on myös vaihdettu uuden templaatin mukaisiksi ja korjattu niiden totuuksia ja relevansseja.|sign=--[[Käyttäjä:Mikomiko|Pieta Tuomisto]] ([[Keskustelu käyttäjästä:Mikomiko|keskustelu]]) 29. heinäkuuta 2018 kello 12.09 (UTC)}} Käytettävät paradigmat:
** science: templaatissa mainittu relaatio on science-paradigman mukainen. Perussääntö: argumentti on epäpätevä, jos siinä ei ole viittausta taustatietoon (havaintoihin) tai jos sitä vastaan hyökätään pätevällä argumentilla.
** science: templaatissa mainittu relaatio on science-paradigman mukainen. Perussääntö: argumentti on epäpätevä, jos siinä ei ole viittausta taustatietoon (havaintoihin) tai jos sitä vastaan hyökätään pätevällä argumentilla.
** unattackedstand: Perussääntö: argumentti on epäpätevä, jos sitä vastaan hyökätään pätevällä argumentilla.
** unattackedstand: Perussääntö: argumentti on epäpätevä, jos sitä vastaan hyökätään pätevällä argumentilla.
** personaltine: Perussääntö: argumentti on epäpätevä, jos sen on esittänyt Tine Bizjak tai Tamara Gajst tai jos sitä vastaan hyökätään pätevällä argumentilla.  
** personaltine: Perussääntö: argumentti on epäpätevä, jos sen on esittänyt Tine Bizjak tai Tamara Gajst tai jos sitä vastaan hyökätään pätevällä argumentilla.  
* Tutustu uuteen kuvaukseen Helsingin ilmastopolitiikasta:
* Tutustu uuteen kuvaukseen Helsingin ilmastopolitiikasta:
** Toimenpideohjelman virallinen dokumentti [https://www.hel.fi/static/liitteet/kaupunkiymparisto/julkaisut/julkaisut/HNH-2035-toimenpideohjelma.pdf] {{comment|# |Uusi linkki.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Toimenpideohjelman virallinen dokumentti [https://www.hel.fi/static/liitteet/kaupunkiymparisto/julkaisut/julkaisut/HNH-2035-toimenpideohjelma.pdf] {{argument|relat1=comment|id=arg6137|type=|content=Uusi linkki.|sign=[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** [[Hiilineutraali Helsinki 2035]] ohjelman sivu Opasnetissä
** [[Hiilineutraali Helsinki 2035]] ohjelman sivu Opasnetissä
** Kuvaus toimenpidetyökalusta] (luonnos) [https://docs.google.com/document/d/1VKXVzs4YmwLKgnrTifV4XnCqX4ceJ-d5KBrb8S2-nxI/edit#heading=h.59an82rd17jh]
** Kuvaus toimenpidetyökalusta] (luonnos) [https://docs.google.com/document/d/1VKXVzs4YmwLKgnrTifV4XnCqX4ceJ-d5KBrb8S2-nxI/edit#heading=h.59an82rd17jh]
Rivi 530: Rivi 265:
* Tutustu sanastoon sivulla [[:op_en:Structure of shared understanding]] ja kommentoi kummallisuuksia ja epäselvyyksiä.
* Tutustu sanastoon sivulla [[:op_en:Structure of shared understanding]] ja kommentoi kummallisuuksia ja epäselvyyksiä.
* Tutustu ympäristöterveyden indikaattoreihin sivulla [https://yhteistyotilat.fi/wiki08/x/w4W7Ag Ympäristöterveys]
* Tutustu ympäristöterveyden indikaattoreihin sivulla [https://yhteistyotilat.fi/wiki08/x/w4W7Ag Ympäristöterveys]
* Käytä uutta argument-templaattia toimintonapeista, kun haluat kommentoida sivun sisältöä Opasnetissä. {{defend|# |Huom! Ohje muuttunut.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
* Käytä uutta argument-templaattia toimintonapeista, kun haluat kommentoida sivun sisältöä Opasnetissä. {{argument|id=arg8375|relat1=defense|content=Huom! Ohje muuttunut.|sign=--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}


'''Jounin työt
'''Jounin työt


* Labeleiden rivittäminen kuntoon: järkevän mittaisia eikä joka sanavälistä poikki. (Jouni)
* Ääkköset eivät toimi. Etsi vika ja korjaa. Johtunee graafin tallennusvaiheesta.
* Ääkköset eivät toimi. Etsi vika ja korjaa. Johtunee graafin tallennusvaiheesta.
* Name ei näy hoveratessa hiirellä, nimenomaan Goherr-taulukoissa. Lisää Item tooltipiin. {{defend|# |Tehty.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 25. heinäkuuta 2018 kello 07.17 (UTC)}}
* Lisää argumenttinapppulat myös suomenkieliseen Opasnettiin. {{defend|# |Tehty.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 25. heinäkuuta 2018 kello 07.17 (UTC)}}


'''Tehdyt työt
'''Tehdyt työt


* Palkat maksettu 23.7.2018 asti.
* Palkat maksettu 12.5.2019 mennessä tehtyjen tuntien perusteella.
** Uusi substanssiolio 'kustannus/expense'. Tavanomainen kustannus substanssityypin olio (tummanvihreän värinen ympyrä) mutta lisäksi on 'kustannustavoite/expense objective' joka on yhdistelmä kaikista kustannuksista ja jota pyritään päätöksenteossa minimoimaan. Kustannustavoite on tyyppiä objective. {{argument|id=arg7263|content=Näiden kuvaaminen oikeisiin taulukoihin tuli Pietalle tehtäväksi.|sign=--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 25. heinäkuuta 2018 kello 07.17 (UTC)}} {{argument|id=arg7263|content=Uudet relaatiot liitetty [[:op_en:Structure of shared understanding]] sivulla olevaan taulukkoon.|sign=--[[Käyttäjä:Mikomiko|Pieta Tuomisto]]([[Keskustelu käyttäjästä:Mikomiko|keskustelu]]) 27. heinäkuuta 2018 kello 09.30 (UTC)}}
** Uusi relaatio 'omistaa perustelun/has rationale', käänteisrelaationa 'perustelee/is rationale for'. Nämä ovat toiminnallisia relaatioita (operational link).
* Lukekaa [[Keskustelu:Jaettu ymmärrys#Holmströmille avoimuuden ongelmista| vastine Homströmille]] ja kommentoikaa a) tekstin selkeyttä ja b) sisältöä. Koetetaan saada juttu lähtemään sunnuntaina.
* Lukekaa [[Keskustelu:Jaettu ymmärrys#Holmströmille avoimuuden ongelmista| vastine Homströmille]] ja kommentoikaa a) tekstin selkeyttä ja b) sisältöä. Koetetaan saada juttu lähtemään sunnuntaina.
** Kirjoittakaa eri keskustelijoiden argumentit päätöksenteon avoimuuteen liittyen saman sivun alkuun.
** Kirjoittakaa eri keskustelijoiden argumentit päätöksenteon avoimuuteen liittyen saman sivun alkuun.
* Indikaattorin ja ilmiön välinen suhde on "kuvaa" (käänteisrelaatio "kuvautuu") Taulukoista löytyy tämmöisessä tilanteessa relaatiota "omistaa osan", ja nämä pitäisi vaihtaa oikeaan relaatioon.
* Indikaattorin ja ilmiön välinen suhde on "kuvaa" (käänteisrelaatio "kuvautuu") Taulukoista löytyy tämmöisessä tilanteessa relaatiota "omistaa osan", ja nämä pitäisi vaihtaa oikeaan relaatioon.
* HNH2035-ohjelman (ks alla) lopussa on listattu organisaatioiden pitkät nimet. Nämä pitäisi täydentää taulukkoon toimijat sivulla [[Hiilineutraali Helsinki 2035#Data]]. Nykyään taulukko sisältää erilaisia nimiversioita samasta organisaatiosta, mutta ne voi poistaa, koska ne korjataan alkuperäiseen googlesheetiin. {{argument|relat1=relevant comment|selftruth1=true|id=arg5114|type=|content=Tehty. Toimijoista jotka olivat yhdistetty kauttaviivalla (esim. Kanslia/Aluerakentaminen) oletin jälkimmäisen kuuluvan ensimmäiseen, ja liitin ne toisiinsa relaatiolla "on osana".|sign=--[[Käyttäjä:Mikomiko|Pieta Tuomisto]] ([[Keskustelu käyttäjästä:Mikomiko|keskustelu]]) 29. heinäkuuta 2018 kello 10.10 (UTC)}}
* HNH2035-ohjelman (ks alla) lopussa on listattu organisaatioiden pitkät nimet. Nämä pitäisi täydentää taulukkoon toimijat sivulla [[Hiilineutraali Helsinki 2035#Data]]. Nykyään taulukko sisältää erilaisia nimiversioita samasta organisaatiosta, mutta ne voi poistaa, koska ne korjataan alkuperäiseen googlesheetiin. {{argument|relat1=comment|id=arg5114|type=|content=Tehty. Toimijoista jotka olivat yhdistetty kauttaviivalla (esim. Kanslia/Aluerakentaminen) oletin jälkimmäisen kuuluvan ensimmäiseen, ja liitin ne toisiinsa relaatiolla "on osana".|sign=--[[Käyttäjä:Mikomiko|Pieta Tuomisto]] ([[Keskustelu käyttäjästä:Mikomiko|keskustelu]]) 29. heinäkuuta 2018 kello 10.10 (UTC)}}
* Asentakaa koneillenne R, Rstudio ja paketit OpasnetUtils, rvest, ggplot2, DiagrammeR ja Shiny. Sen jälkeen kuvien piirtämisen pitäisi onnistua ajamalla omalla koneella koodi kohdassa [[#Vastaus]].
* Asentakaa koneillenne R, Rstudio ja paketit OpasnetUtils, rvest, ggplot2, DiagrammeR ja Shiny. Sen jälkeen kuvien piirtämisen pitäisi onnistua ajamalla omalla koneella koodi kohdassa [[#Vastaus]].
* Goherr
* Goherr
** Täydennä Goherr-projektin [https://drive.google.com/drive/folders/0B5dY4ezoJ5FOXzRoOE81UEh0ckU käsin piirrettyjen kaavioiden] tiedot Google-taulukkoon Goherr-kaaviot [https://drive.google.com/drive/folders/1ZlchbmZm5MeHBCRIqkSRKhpUFNIYhts2 tässä hakemistossa]. {{defend|# |Tehty.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Täydennä Goherr-projektin [https://drive.google.com/drive/folders/0B5dY4ezoJ5FOXzRoOE81UEh0ckU käsin piirrettyjen kaavioiden] tiedot Google-taulukkoon Goherr-kaaviot [https://drive.google.com/drive/folders/1ZlchbmZm5MeHBCRIqkSRKhpUFNIYhts2 tässä hakemistossa]. {{argument|id=arg7263|relat1=defense|content=Tehty.|sign=[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Ohjelma täyttää tyhjiä rivejä edellisillä samasta sarakkeesta, sillä Helsingin taulukossa teemarivi. Muodostuu ongelmaksi Goherreissa kun käsitellään oliota joka ei tee itse yhtään nuolta. {{defend|# |Korjattu.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Ohjelma täyttää tyhjiä rivejä edellisillä samasta sarakkeesta, sillä Helsingin taulukossa teemarivi. Muodostuu ongelmaksi Goherreissa kun käsitellään oliota joka ei tee itse yhtään nuolta. {{argument|id=arg7263|relat1=defense|content=Korjattu.|sign=[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
* Ruuhkamaksu
* Ruuhkamaksu
** Lisää kaikkiin sivun [[:op_en:Talk:Congestion charge]] keskusteluihin argumenttien tunnisteet, jotka ovat muotoa keskustelunnimi.juoksevanumero eli esim. health.4. Keskustelut nimetään ylhäältä alas seuraavasti: airquality, health, choice, economy, mobility, unfair, tragedy, dynamic, inefficient, distribution. {{defend|# |Tehty.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Lisää kaikkiin sivun [[:op_en:Talk:Congestion charge]] keskusteluihin argumenttien tunnisteet, jotka ovat muotoa keskustelunnimi.juoksevanumero eli esim. health.4. Keskustelut nimetään ylhäältä alas seuraavasti: airquality, health, choice, economy, mobility, unfair, tragedy, dynamic, inefficient, distribution. {{argument|id=arg7263|relat1=defense|content=Tehty.|sign=[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
* Ilmastonmuutos
* Ilmastonmuutos
** Tee Google sheet, jonne listataan kaikki [https://www.sitra.fi/hankkeet/100-fiksua-arjen-tekoa/#100-fiksua-tekoa Sitran 100 fiksua tekoa] siten, että sarakkeisiin tulevat. Mieti yhteisesti kattava teemalista ja käytä sitä yhdistämään Helsingin ja Sitran toimepiteitä. {{defend|# |Tehty.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Tee Google sheet, jonne listataan kaikki [https://www.sitra.fi/hankkeet/100-fiksua-arjen-tekoa/#100-fiksua-tekoa Sitran 100 fiksua tekoa] siten, että sarakkeisiin tulevat. Mieti yhteisesti kattava teemalista ja käytä sitä yhdistämään Helsingin ja Sitran toimepiteitä. {{argument|id=arg7263|relat1=defense|content=Tehty.|sign=[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Nimi (arjen teon nimi)
** Nimi (arjen teon nimi)
** Suuruus (onko vaikutus pieni, keskisuuri vai suuri), tämän voisi merkata descriptioniin
** Suuruus (onko vaikutus pieni, keskisuuri vai suuri), tämän voisi merkata descriptioniin
Rivi 559: Rivi 295:
* Menetelmällisiä töitä
* Menetelmällisiä töitä
** Tutustu kaavioiden muotoiluihin sivulla [[:op_en:Extended causal diagram]] ja kommentoi kummallisuuksia ja epäselvyyksiä. Kaavioiden toteutus R-paketilla DiagrammeR [http://rich-iannone.github.io/DiagrammeR/ nettisivu], [https://cran.r-project.org/web/packages/DiagrammeR/DiagrammeR.pdf dokumentaatio].
** Tutustu kaavioiden muotoiluihin sivulla [[:op_en:Extended causal diagram]] ja kommentoi kummallisuuksia ja epäselvyyksiä. Kaavioiden toteutus R-paketilla DiagrammeR [http://rich-iannone.github.io/DiagrammeR/ nettisivu], [https://cran.r-project.org/web/packages/DiagrammeR/DiagrammeR.pdf dokumentaatio].
** Kommentoi ideaa sivulla [[:op_en:Template:Argument]] <span> ja <div> tägien käytöstä parametrien löytymiseksi sivulta. (Koskee Pietaa tai muitakin jos osaatte html:ää). {{defend|# |Valmis.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Kommentoi ideaa sivulla [[:op_en:Template:Argument]] <span> ja <div> tägien käytöstä parametrien löytymiseksi sivulta. (Koskee Pietaa tai muitakin jos osaatte html:ää). {{argument|id=arg7263|relat1=defense|content=Valmis.|sign=[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Kommentoi paradigmaidean käytettävyyttä ja mielekkyyttä yleensä ja sen sovellettavuutta eri paradigmojen osalta erityisesti. {{defend|# |Valmis.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
** Kommentoi paradigmaidean käytettävyyttä ja mielekkyyttä yleensä ja sen sovellettavuutta eri paradigmojen osalta erityisesti. {{argument|id=arg7263|relat1=defense|content=Valmis.|sign=[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 24. heinäkuuta 2018 kello 04.47 (UTC)}}
* Tutustu kuvaukseen ruuhkamaksuista (Decision analysis and risk management 2017 -kurssilla tehty) {{attack|# |Ei kannata tutustua näihin vaan uudempiin sisältöihin.|--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 25. heinäkuuta 2018 kello 07.17 (UTC)}}
* Tutustu kuvaukseen ruuhkamaksuista (Decision analysis and risk management 2017 -kurssilla tehty) {{argument|id=arg7263|relat1=attack|content=Ei kannata tutustua näihin vaan uudempiin sisältöihin.|sign=[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 25. heinäkuuta 2018 kello 07.17 (UTC)}}
** [[:op_en:Congestion charge]] pääsivu Opasnetissä. Kommentit ja kehitysideat tänne.
** [[:op_en:Congestion charge]] pääsivu Opasnetissä. Kommentit ja kehitysideat tänne.
** [https://drive.google.com/drive/folders/0B5dY4ezoJ5FOWFdnT2NoS0tfa28 Google drive], jossa [https://docs.google.com/spreadsheets/d/10EuSt-YonlHQyNELCAftSiZ72jAsPKhw5q5MqQhbY10/edit#gid=0 gsheet olioista ja niiden relaatioista] ja [https://docs.google.com/drawings/d/18PJNYL91_xAgygDKuITptISnUFMWh3K5SUtxqn0w0y0/edit syykaavio aiemman keskustelun pohjalta].
** [https://drive.google.com/drive/folders/0B5dY4ezoJ5FOWFdnT2NoS0tfa28 Google drive], jossa [https://docs.google.com/spreadsheets/d/10EuSt-YonlHQyNELCAftSiZ72jAsPKhw5q5MqQhbY10/edit#gid=0 gsheet olioista ja niiden relaatioista] ja [https://docs.google.com/drawings/d/18PJNYL91_xAgygDKuITptISnUFMWh3K5SUtxqn0w0y0/edit syykaavio aiemman keskustelun pohjalta].
Rivi 597: Rivi 333:
objects.store(graafilista)
objects.store(graafilista)
cat("Graafilista stored.\n")
cat("Graafilista stored.\n")
</rcode>
<rcode name="makegraphs" label="Luo funktio makegraphs joka tekee graafilistan (vain kehittäjille)" embed=1>
# Tämä on koodi Op_fi5810/graphs sivulla [[Ympäristöterveysindikaattori]]
library(OpasnetUtils)
#' @title makegraphs function converts scraped data.frames into a standard data.frames for graphs (nodes and edges separately)
#' @param verbose if TRUE, show intermediate results and explanations
#' @return a list with two data.frames for making a diagram: first for nodes, second for edges
makegraphs <- function(verbose=FALSE) {
  dummy <- EvalOutput(Ovariable(
    "dummy",
    dependencies=data.frame(
      Name = c("ecd_create", "fillprev", "splizzeria"),
      Ident = rep("Op_en3861/ecd_create",3)
    ),
    formula = function(...) {
      return(data.frame(Result=1))
    }
  ))
 
  sotkanet <- "http://www.sotkanet.fi/sotkanet/fi/metadata/indicators/"
 
  if(exists("insightTables")) {
    meta <- insightTables$meta
  } else {
    meta <- opasnet.csv( # Väärä koodaus mutta miksi? Tiedosto on oikein.
      "3/3e/N%C3%A4kemysverkkojen_tietotauluja.zip",
      wiki="opasnet_fi",
      unzip="meta.csv",
      sep=",",row.names=NULL,header=TRUE,stringsAsFactors=FALSE,fileEncoding = "UTF-8"
    )
  }
 
  out <- list()
  for(i in 1:nrow(meta)) {
    if(verbose) print(i)
    if(exists("insightTables")) {
      temp <- insightTables[[i]]
    } else {
      temp  <- opasnet.csv(
        "3/3e/N%C3%A4kemysverkkojen_tietotauluja.zip",
        wiki="opasnet_fi",
        unzip=gsub("[Öö\xf6]","o",gsub("[ÄÅäå\xe4]","a",paste0(meta$Ilmio[i],".csv"))),
        sep=",",row.names=NULL,header=TRUE,stringsAsFactors=FALSE,fileEncoding = "UTF-8"
      )
    }
   
    if(verbose) oprint(head(temp))
   
    # Convert structural names to English
    colnames(temp)[colnames(temp)=="Lyhenne"] <- "label" # Columns defined by DiagrammeR start with small letter
    colnames(temp)[colnames(temp)=="Luokka"] <- "type"
    colnames(temp)[colnames(temp)%in% c("Toimenpide","Nimi","Asia")] <- "Item"
    colnames(temp)[colnames(temp) %in% c("Predikaatti","Relaatio")] <- "Relation"
    colnames(temp)[colnames(temp) %in% c("Objekti","Kohde")] <- "Object"
    colnames(temp)[colnames(temp) %in% c("Kuvaus","Lisatietoa","Kommentteja")] <- "Description"
    colnames(temp)[colnames(temp) %in% c("Aihe1","Tehtavakokonaisuus")] <- "Teema"
    colnames(temp)[colnames(temp) %in% c("Tunnistenumero","Obs", "Nro")] <- "Oldid"
    if(!"label" %in% colnames(temp)) temp$label <- NA
    temp$label <- ifelse(is.na(temp$label), substr(temp$Item,1,50), temp$label)
    temp$Oldid = paste(meta$Id[i],{if("Oldid" %in% colnames(temp)) temp$Oldid else 1:nrow(temp)},sep=".")
    temp[is.na(colnames(temp))] <- NULL
    colnames(temp) <- gsub("[- ]", ".", colnames(temp))
    out[[i]] <- temp
  }
  #  Table-specific adjustments
  out[[5]] <- splizzeria(out[[5]], cols = c("Ulottuvuus","Osiotyyppi","JHS.luokka"), split = "/") # HYTE
  out[[6]] <- splizzeria(out[[6]], cols = c("JHS.luokka"), split = ",") # LAPE
  out[[13]]$Oldid <- paste0(out[[13]]$Oldid, "000")
 
  # HYTE JA LAPE ELI SOTEARV
 
  tmp <- data.frame()
  for(i in (1:nrow(meta))[meta$Tyyppi=="sotearv"]) {
    if(nrow(tmp)==0) tmp <- out[[i]] else tmp <- orbind(tmp, out[[i]])
  }
  tmp <- orbind(orbind(orbind(orbind(
    data.frame(
      Oldid = tmp$Oldid,
      type = paste(tmp$Teema, "indikaattori",sep="-"),
      Item = tmp$Item,
      Relation = "ulottuvuus",
      Object = tmp$Ulottuvuus,
      URL = ifelse(
        is.na(as.numeric(substr(tmp$Sotkanet.id,1,4))),
        NA,
        paste0(sotkanet, substr(tmp$Sotkanet.id,1,4))
      ),
      Description = tmp$Ryhman.perustelut,
      label = ifelse(is.na(tmp$label),substr(tmp$Item,1,30),tmp$label),
      stringsAsFactors = FALSE
    ),
    data.frame(
      Item = tmp$Item,
      Relation = "osiotyyppi",
      Object = tmp$Osiotyyppi,
      stringsAsFactors = FALSE
    )),
    data.frame(
      Item = tmp$Item,
      Relation = "discussed in",
      Object = tmp$Tietolahde,
      stringsAsFactors = FALSE
    )),
    data.frame(
      Item = tmp$Item,
      Relation = "JHS-luokka",
      Object = tmp$JHS.luokka,
      stringsAsFactors = FALSE
    )),
    data.frame(
      type = "index",
      Item = unique(c(tmp$Ulottuvuus, tmp$JHS.luokka, tmp$Osiotyyppi)),
      stringsAsFactors=FALSE
    )
  )
  if(verbose) oprint(head(tmp))
  d <- tmp
 
  #### Hyvinvointikertomukset
 
  tmp <- data.frame()
  for(i in (1:nrow(meta))[meta$Tyyppi=="hvkertomus"]) {
    if(nrow(tmp)==0) tmp <- out[[i]] else tmp <- orbind(tmp, out[[i]])
  }
  tmp <- data.frame(
    Oldid=tmp$Oldid,
    type="indikaattori",
    Item=tmp$Item,
    label=substr(tmp$Item,1,30),
    Relation="on osana",
    Object=tmp$Teema,
    Description = paste(tmp$Item, tmp$Teema, tmp$Vaestoryhma, sep=". "),
    URL = "https://www.hyvinvointikertomus.fi/#/welcome",
    stringsAsFactors=FALSE
  )
  if(verbose) oprint(head(tmp))
  d <- orbind(d, tmp)
 
  ########## KUVA-indikaattorit
 
  tmp <- data.frame()
  for(i in (1:nrow(meta))[meta$Tyyppi=="kuvaind"]) {
    if(nrow(tmp)==0) tmp <- out[[i]] else tmp <- orbind(tmp, out[[i]])
  }
  tmp <- data.frame(
    Oldid=tmp$Oldid,
    type="indikaattori",
    Item=tmp$Item,
    label=substr(tmp$Item,1,30),
    Relation="on osana",
    Object=tmp$Teema,
    Description = paste(tmp$Item, tmp$Teema, sep=". "),
    URL = "https://thl.fi/fi/tutkimus-ja-kehittaminen/tutkimukset-ja-hankkeet/sote-tietopohjan-kehittamishanke/kansallisen-mittariston-valmistelu-kuva-indikaattorit-",
    stringsAsFactors=FALSE
  )
  if(verbose) oprint(head(tmp))
  d <- orbind(d, tmp)
 
  ## Oletusmuotoiset taulut (Ympäristöterveys, Lasten ja aikuisten lihavuus, Yleiset ja erityiset luokittelut)
 
  tmp <- data.frame()
  for(i in (1:nrow(meta))[meta$Tyyppi %in% c("oletus", "keskustelu","arviointi")]) {
    if(nrow(tmp)==0) tmp <- out[[i]] else tmp <- orbind(tmp, out[[i]])
  }
  tmp <- splizzeria(tmp, cols="Object", split=",")
  tmp$URL <- ifelse(
    grepl("http",tmp$URL),
    tmp$URL,
    ifelse(
      is.na(as.numeric(substr(tmp$URL,1,4))),
      NA,
      paste0(sotkanet, substr(tmp$URL,1,4))
    )
  )
  if(verbose) oprint(head(tmp))
  d <- orbind(d, tmp)
 
  ####### HNH2035-toimenpiteet
 
  # Tämä koodi on tilapäinen ja pitäisi korjata alkuperäiseen taulukkoon. Sano Sonjalle.
  repl <- array(c(
    "S&C säätiö","Smart&Clean",
    "yhteistyössä","",
    "yhteistyö","",
    "Yhteistyö:","",
    "ja","",
    "HSY Ilmastoinfo","HSY/Ilmastoinfo",
    "HSY:n Ilmastoinfo","HSY/Ilmastoinfo",
    "Kanslia ELO/Hanki","Kanslia/ELO",
    "GEO","Geo",
    "kasko","Kasko",
    "sote","Sote",
    "palvelukeskus","Palvelukeskus",
    "ympa","Ympa",
    "RYA","Rya",
    "PALU","Palu",
    "YMPA","Ympa",
    "MAKA","Maka",
    "KYMP","Kymp",
    "Smart&Clean -säätiö","Smart&Clean",
    "Smart & Clean -säätiö","Smart&Clean",
    "virium","Virium",
    "nuorisopalvelur","Nuorisopalvelut",
    "kanslia","Kanslia",
    "Kaupunginkanslia","Kanslia",
    "kaupunginkanslia","Kanslia",
    "(HSL), (HSY)",",",
    "ympa","Ympa",
    "Palu/Ympa","Ympa"
  ),
  dim=c(2,28)
  )
 
  tmp <- out[[8]]
  for(i in 1:ncol(repl)) {
    tmp$Vastuu <- gsub(repl[1,i],repl[2,i],tmp$Vastuu)
  }
  tmp <- fillprev(tmp,"Teema")
  tmp <- tmp[!is.na(tmp$Item) , ]
 
  toimet <- opbase.data("Op_fi5767", subset="Toimenpiteiden linkit") # This is done until URL is directly on gsheet.
  toimet$Oldid <- paste(meta$Id[8], toimet$Obs,sep=".")
  tmp <- merge(tmp,toimet, all.x=TRUE)
  tmp$URL <- ifelse(!is.na(tmp$Result), as.character(tmp$Result), "https://www.hel.fi/static/liitteet/kaupunkiymparisto/julkaisut/julkaisut/HNH-2035-toimenpideohjelma.pdf")
 
  # tmp <- splizzeria(tmp, cols="Kustannukset", split="/") # Not used because doubles relations
 
  temp2 <- splizzeria(tmp, cols="Vastuu", split=",")
 
  tmp <- orbind(
    data.frame(
      Oldid=tmp$Oldid,
      type="HNH2035-toimenpide",
      Item=tmp$Item,
      label=substr(tmp$Item,1,30),
      Relation="teema",
      Object=tmp$Teema,
      Description = paste(tmp$Item, tmp$Aikajanne, tmp$Vaativuus, tmp$Kustannukset, sep=". "),
      URL = tmp$URL,
      stringsAsFactors=FALSE
    ),
    data.frame(
      Oldid=temp2$Oldid,
      Item=temp2$Item,
      label=substr(temp2$Item,1,30),
      Relation="vastuullisena",
      Object=temp2$Vastuu,
      stringsAsFactors=FALSE
    )
  )
  if(verbose) oprint(head(tmp))
  d <- orbind(d, tmp)
 
  ########################### Create graph list with everything needed for ecd_graph
 
  d$label <- ifelse(is.na(d$label), substr(d$Item,1,30), d$label)
 
  fix <- matrix(c(
    "Kustannukset ja RR",  "Kustannukset ja rahoituksen riittävyys",
    "Saatavuua",  "saatavuus"
  ),nrow=2)
  tmp <- d$Object[!is.na(d$Relation) & !is.na(d$Object) & d$Relation=="ulottuvuus"]
  for(i in 1:ncol(fix)) {
    tmp <- ifelse(tmp==fix[1,i],fix[2,i],tmp)
  }
  d$Object[!is.na(d$Relation) & !is.na(d$Object) & d$Relation=="ulottuvuus"] <- tmp
 
  for(i in 1:ncol(d)) {
    d[[i]] <- gsub("[\"']", " ", d[[i]])
  }
 
  graafilista <- ecd_create(d)
 
  if(verbose) {
    cat("Datataulukko.\n")
    oprint(head(d))
   
    cat("Graafin solmuja\n")
    oprint(head(graafilista$nodes_df))
    cat("Graafin nuolia\n")
    oprint(head(graafilista$edges_df))
  }
 
  return(graafilista)
}
objects.store(makegraphs)
cat("Function makegraphs stored.\n")
</rcode>
</rcode>


Rivi 950: Rivi 395:
</rcode>
</rcode>


==== Indikaattorien lataus Sotkanettiin ====
==== Aluejaottelun muodostava koodi ====
 
Tämä koodi ottaa Sotkanetin aluejaottelun ja muodostaa siitä data.framen [https://quiltdata.com/package/jtuomsto/thl Quilt-palveluun], josta se on helppo noukkia aluejaottelua vaativaan laskentaan R:ään käyttämällä quiltr-pakettia.
 
<rcode label="Aja omalla koneella">
# This is code Op_fi5810/ on page [[Ympäristöterveysindikaattori]]


Katso yksityiskohtaiset ohjeet lataamisesta [https://terho.thl.fi/wiki01/x/_FcyCQ Terhosta]. {{argument|relat1=relevant attack|selftruth1=true|id=arg7508|type=|content=Nämä pitäisi siirtää yhteistyötiloihin tai muualle avoimeen sijaintiin.|sign=--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 10. elokuuta 2018 kello 06.55 (UTC)}}
library(jsonlite)
library(quiltr)
library(thlVerse)


<rcode label="Ajettava omalla koneella tai Linux-klusterista">
# Get regional classifications from Sotkanet and convert to data.frame
# This is code Op_fi5810/ on page [[Ympäristöterveysindikaattori]].
# Vanha versio käytti suoraan CREATE TABLE ja INSERT INTO. Uusi versio käyttää peaJdbcWrite.


library(pea)
reg <- read_json("https://sotkanet.fi/rest/1.1/regions") # Does not work with Kauko
library(tcltk2)
library(rvest) # For html import


# Fetch data from Yhteistyötilat.
reg <- data.frame(
dat <- html_table(read_html("https://yhteistyotilat.fi/wiki08/x/SLHFAg"))[[3]] # Pienhiukkaspitoisuuden väestöpainotettu vuosikeskiarvo
   id = sapply(reg, function(x) x$id),
dat <- data.frame(
   code = sapply(reg, function(x) x$code),
   Vuosi = 2015,
   category= sapply(reg, function(x) x$category),
   Alue = dat$Alue,
   title = sapply(reg, function(x) x$title$fi),
   Aluekoodi = dat[[2]],
   memberOf = sapply(reg, function(x) paste0(",", paste(unlist(x$memberOf),collapse=","), ",")),
   Sukupuoli = 4,
   Mittari = 678,
  Mittarin_arvo = dat[[7]],
  Paivamaara = "31.5.2018",
   stringsAsFactors = FALSE
   stringsAsFactors = FALSE
)
)


con <- peaJdbcConnect("common") # Tässä kohdassa kysytään käyttäjätunnus ja salasana
# Add columns for each larger regional system to which a region belongs. Note: the code assumes
# that for each category, only one set is applicable; therefore e.g. EU-25 drops out.
 
for(i in unique(reg$category)) {
  reg[[paste0(i,"_id")]] <- NA
  for(j in unique(reg[reg$category==i,"id"])) {
    reg[[paste0(i,"_id")]] <- ifelse(
      grepl(paste0(",",j,","), reg$memberOf),
      j,
      reg[[paste0(i,"_id")]]
    )
  }
  reg[[i]] <- reg$title[match(reg[[paste0(i,"_id")]], reg$id)]
}


# Useful queries that you may need.
reg$KUNTA <- NULL
# View(dbGetQuery(con, "select * from pg_catalog.pg_tables where schemaname = 'sotkanet_lataus';"))
reg$KUNTA_id <- NULL
# View(dbGetQuery(con, "select distinct schemaname from pg_catalog.pg_tables;")) # Listaa skeemat
# View(dbGetQuery(con, "select * from sotkanet_lataus.indikaattori_678")) # Listaa taulun sisällön
# koo <- peaGetKoodisto('d_alue_2_sote')$data # Kuntien ja maakuntien aluekoodit.
# d_alue_2_sote sisältää HE2017-esityksen mukaiset maakunnat, d_alue_2 puolestaan 2018 voimassa olleet.


# Luodaan taulu ja kirjoitetaan datat siihen.
# Get Ympäristöterveyden valvontayksiköt (environmental health districts) from a THL database
# Taulun nimi on muotoa indikaattori_XXXX, jossa XXXX  on indikaattorin Sotkanet_id
# Jos taulu jo on olemassa, se pitää poistaa pgAdminilla. Tai voi käyttää alla olevaa SQL-komentoa, vaikka se antaa virheilmoituksen
# (koska funktio antaa tyhjän). Ehkä pitäisi käyttää dbSendQuery().
# dbGetQuery(con, "DROP TABLE sotkanet_lataus.indikaattori_678")


peaJdbcWrite(
dbi <- thlDbInfo("pubhealth", dbengine="postgresql")
  con,
yteval <- merge(
  dat=dat,
   thlDbQuery(dbi,"SELECT * FROM envhealth.valvontayksikko_kunta;"),
  tablename="indikaattori_678",
   thlDbQuery(dbi,"SELECT * FROM envhealth.valvontayksikot;"),
   schema="sotkanet_lataus",
   by="koodi"
   batch_size=10000,
  role="public_sotkanet_reader",
   grant="select"
)
)
</rcode>
colnames(yteval) <- c("YMPARISTOTERVEYS_id","KUNTA_id","KUNTA","YMPARISTOTERVEYS")
yteval <- yteval[c(2,3,1,4)]
yteval$code <- yteval$KUNTA_id
yteval$KUNTA_id <- as.numeric(yteval$KUNTA_id)
yteval$YMPARISTOTERVEYS_id <- as.numeric(yteval$YMPARISTOTERVEYS_id)


==== Sotearvioinnin koodi liittyen ympäristöterveyteen ====
reg <- merge(reg, yteval, all.x=TRUE)
reg <- reg[order(reg$category, reg$code),]


<rcode>
# Quilt does not like factors
# This is code Op_fi5810/ on page [[Ympäristöterveysindikaattori]]
for(i in 1:ncol(reg)) {
  if("factor" %in% class(reg[[i]])) reg[[i]] <- as.character(reg[[i]])
}


library(rvest) # For html import
# Only Quilt user jtuomsto can do this.
qbuild("jtuomsto/thl/admin_regions", reg)
qpush("jtuomsto/thl", public=TRUE)


tx <- function(x, prec = 2) gsub("\\.", ",", as.character(signif(x, prec))) # Converts numbers to nice Finnish format
# To download (everyone can download the data):
write(
# admin_regions <- qload("jtuomsto/thl", "admin_regions")
  "Sote-arviointi, hyvinvointi ja terveys: ympäristöterveyden osa-alue\n\n",
</rcode>
  file="sotearviointi.txt"
)
# Fetch data from Yhteistyötilat.
dat <- html_table(read_html("https://yhteistyotilat.fi/wiki08/x/SLHFAg"))[[3]] # Pienhiukkaspitoisuuden väestöpainotettu vuosikeskiarvo
colnames(dat) <- c("Alue","Mid","Municipality","Pid","Province","Pop","PM",
                  "Daly","Comment","Genetive","Adessive")


for(i in c(2,4,6,7,8)) dat[[i]] <- as.numeric(gsub(" ", "", dat[[i]]))
==== Indikaattorien lataus Sotkanettiin ====


# Data about disease burden of PM2.5 from Lehtomäki et al 2018 https://doi.org/10.3390/ijerph15040736
Katso yksityiskohtaiset ohjeet lataamisesta [https://terho.thl.fi/wiki01/x/_FcyCQ Terhosta]. {{argument|relat1=attack|id=arg7508|type=|content=Nämä pitäisi siirtää yhteistyötiloihin tai muualle avoimeen sijaintiin.|sign=--[[Käyttäjä:Jouni|Jouni Tuomisto]] ([[Keskustelu käyttäjästä:Jouni|keskustelu]]) 10. elokuuta 2018 kello 06.55 (UTC)}}
mort <- "1600 - 2000"
daly <- 26000


for(i in sort(unique(dat$Pid))) {
Tässä ollut koodi käytti vanhentunutta pea-pakettia. Katso sen sijaan uudempi esimerkki [[Pienhiukkaspitoisuuden väestöpainotettu vuosikeskiarvo#Upload aggregate data to Sotkanet]].
  j <- (1:nrow(dat))[dat$Pid==i & dat$Alue=="HE-maakunta"]
  mk <- dat$Province[j]
  ka <- sum(dat$Pop * dat$PM / sum(dat$Pop))
  kam <- dat$PM[j]
  s1 <- paste("Pienhiukkaset ovat Suomessakin kaikkein merkittävin ympäristötekijä, joka aiheuttaa ",
  "terveyshaittaa. Pienhiukkaset ovat pääasiassa peräisin liikenteestä ja puun pienpoltosta. ",
  "Myös energiantuotanto ja teollisuus ovat suurehkoja lähteitä mutta niiden ominaispäästöt ",
  "ovat pienet (eli tuotantolaitokset puhdistavat jo tehokkaasti päästöjään) ja päästöt ",
  "tyypillisesti leviävät korkeista piipuista laajalle aiheuttamatta asutuskeskuksiin korkeita ",
  "pitoisuuksia. Muita kuin polttoperäisiä päästölähteitä ovat mm. katupöly varsinkin keväisin, ",
  "maatalouden pölyt sekä monista hajalähteistä syntyvät orgaaniset hiilivedyt, jotka ",
  "muuttuvat hiukkasiksi vasta ilmakehässä.\n",
  sep="")
 
  s2 <- paste(
    "Pienhiukkaspitoisuuksien vuosikeskiarvo on arvioitu kunnittain THL:n koordinoimassa ",
    "tutkimushankkeessa vuodelle 2015. Tämä on hyvä haitan mittari, koska tyypilliset ",
    "terveyshaitat kuten sydäntaudit, krooninen bronkiitti ja keuhkosyöpä kehittyvät ",
    "pitkäaikaisen altistuksen seurauksena. Kansainvälisesti verrattuna Suomen ",
    "pienhiukkaspitoisuudet ovat pienet, mutta silti niiden arvioidaan aiheuttavan ",
    tx(daly),
    " terveen elinvuoden menetyksen tai vastaavasti ",
    mort,
    " kuolemantapausta ",
    "(Lehtomäki ym., 2018 https://doi.org/10.3390/ijerph15040736).\n",
    sep=""
  )
 
  s3 <- "Väestöpainotettu pienhiukkaspitoisuus oli "
  s4 <- paste(
    dat$Adessive[j],
    ifelse(
      kam < 0.8*ka ," pieni ",
      ifelse(kam < 1.2*ka,
            " keskimääräinen ",
            " suomalaisittain suurehko "
      )
    ),
    " (", tx(kam), " µg/m3)",
    sep=""
  )
  s5 <- paste(", kun koko maan keskiarvo oli ", tx(ka), " µg/m3 (Sotkanet, id=678)", sep="")
  s6 <- ". Päästölähteet ja asutus keskittyvät tyypillisesti samoille alueille. Koko maan keskiarvo ylittyi "
  s7 <- dat[dat$PM > ka & dat$Alue=="HE-maakunta",]
  s7 <- s7[order(-s7$PM),]#[1:min(4,nrow(s7)),]
  s7 <- paste(s7$Adessive, " (", tx(s7$PM)," µg/m3)",sep="")
  s7 <- paste(s7, c(rep(", ", length(s7)-2), " ja ", ""), sep="", collapse="")
  s7 <- paste(s7, " (Sotkanet, id=678). ", sep="")
 
  s8 <- paste(
    dat$Genetive[j],
    " kunnista korkeimmat pitoisuudet olivat ",
    sep=""
  )
  s9 <- dat[dat$Pid == i & dat$Alue=="Kunta", ]
  s9 <- s9[order(-s9$PM),][1:4,]
  s9 <- paste(s9$Adessive, " (", tx(s9$PM)," µg/m3)",sep="")
  s9 <- paste(s9, c(rep(", ", length(s9)-2), " ja ",""), sep="", collapse="")
  s9 <- paste(s9, " (Sotkanet, id=678). ", sep="")
 
  s10 <- "Valtakunnallisesti suurin pitoisuus oli "
  s11 <- dat[dat$Alue=="Kunta",]
  s11 <- s11[order(-s11$PM)[1],]
  s11 <- paste(s11$Adessive, " (", tx(s11$PM)," µg/m3).",sep="")
 
  s12 <- paste(" ", dat$Comment[j], " ")
 
  expofr <- dat$Pop[j]*dat$PM[j]/sum(dat$Pop[dat$Alue=="HE-maakunta"]*dat$PM[dat$Alue=="HE-maakunta"])
#  s13 <- dat$Daly[j]/sum(dat$Daly[dat$Alue=="HE-maakunta"])
  s13 <- paste(
    "\nSuomessa pienhiukkasten aiheuttamasta tautitaakasta ",
    cut(expofr, breaks=c(0,0.03,0.06,0.09,0.12,0.18,0.23,0.29,0.39,0.54,0.7,1),labels=c(
      "alle kolmaskymmenesosa",
      "kahdeskymmenesosa",
      "alle kymmenesosa",
      "noin kymmenesosa",
      "noin seitsemäsosa",
      "noin viidesosa",
      "noin neljäsosa",
      "noin kolmasosa",
      "noin puolet",
      "yli puolet",
      "suurin osa"
    )), " (", tx(expofr*100), " %) syntyy ", dat$Adessive[j],
    ", eli siellä menetetään noin ",
    tx(expofr*daly),
    " tervettä elinvuotta pienhiukkasten takia. ",
    sep="")
  hel <- (1:nrow(dat))[dat$Municipality=="Helsinki"]
  s14 <- paste(
    "Helsingissä tämä luku on noin ",
    tx(daly*dat$Pop[hel]*dat$PM[hel]/sum(dat$Pop[dat$Alue=="Kunta"]*dat$PM[dat$Alue=="Kunta"])),
    " eli merkittävä osa koko Suomen tautitaakasta (",
    tx(daly),
    " haittapainotettua elinvuotta). ",
    "Tautitaakka on arvioitu syyosuusmenetelmällä (http://en.opasnet.org/w/HIA). ",
    "Epävarmuudet ovat melko suuria ja liittyvät annosvasteen muotoon pienillä pitoisuuksilla, ",
    "kilpailevien syytekijöiden rooliin kokonaisuudessa sekä pienhiukkaspitoisuuden ",
    "arviointiin käytettyjen mallien epävarmuuksiin. Siitä ei kuitenkaan ",
    "ole epävarmuutta, etteivätkö pienhiukkasten haittavaikutukset Suomessa olisi merkittäviä ",
    "ja niiden vähentäminen tarpeellista.",
    sep=""
  )
 
  write(
    paste("\n\n",mk,"\n",s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,sep=""),
    file="sotearviointi.txt",
    append=TRUE
  )
}
</rcode>


== Katso myös ==
== Katso myös ==


* [[Teemasivu:Ympäristöterveys]]
* [[Indikaattorit ja tietovarannot]] (osa [[Laki-IVA opas|Laki-IVA-opasta]])
* [[Indikaattorit ja tietovarannot]] (osa [[Laki-IVA opas|Laki-IVA-opasta]])
* [[Tautitaakka Suomessa]]
* [[Tautitaakka Suomessa]]

Nykyinen versio 6. kesäkuuta 2019 kello 08.31




Ympäristöterveysindikaattori on elinympäristön tiettyä ominaisuutta mittaava asia, joka kertoo ympäristön terveellisyydestä ihmiselle.

Kysymys

Mitkä ovat hyödyllisiä indikaattoreita Suomen ympäristöterveystilanteen seuraamiseksi ja parantamiseksi?

Vastaus

Ympäristötervyden keskeiset tekijät, toimenpiteet ja mittarit.

Nämä indikaattorit ovat olemassa tai suunnitteilla:

  • Pienhiukkaspitoisuuden väestöpainotettu vuosikeskiarvo (Yhteistyötilat)
  • Sisätilaongelmista koulussa raportoivat koululaiset
  • Vesivälitteisten epidemioiden lukumäärät ja sairastuneiden lukumäärät
  • Elintarvikevälitteisten epidemioiden lukumäärät ja sairastuneiden lukumäärät

Näkemysverkot Shinyssa

Tämä koodi piirtää näkemysverkkoja Shinylla. Koodi lukee alkuperäiset nettisivut ja muodostaa siitä tarvittavan datan. Koodi on ajettava omalla koneella.

Shinyssa aluksi valitaan aihepiiri, sen jälkeen askelien määrä verkossa aiheen mukaisista kiintopisteistä lähtien. Koodi vaatii paketit OpasnetUtils, DiagrammeR ja Shiny. ----arg5167: . Uusi koodi, jossa shinyssa on jo kelvollinen käyttöliittymä. --Jouni Tuomisto (keskustelu) 29. heinäkuuta 2018 kello 20.05 (UTC) (type: ; paradigms: science: comment)

+ Näytä koodi

Perustelut

Data

Data on muodostettu koodilla:

+ Näytä koodi

Graafilista 4.8.2018 [1]

+ Näytä koodi

Työlista

Ajankohtaisia töitä tärkeysjärjestyksessä

  • Näkemysverkko (jossa metsämittareita)
  • Janne Hukkinen: miksi sääntelyä tarvitaan ilmastoasioissa
  • Metsäteollisuuden puunkäyttö:
    • Kannattaako sellunkeittoa lisätä, kun silloin käytetään nuorta ja ohutta puuta, joka on huono hiilinielu ja hiilivarasto?
    • Ilmastohyötyjä, rikkaampi luonto ja metsänomistajille lisää rahaa – Metsäprofessori: avohakkuut voidaan lähes unohtaa menettämättä mitään
  1. uutisvahti

https://yle.fi/uutiset/3-10777521

Kesän 2018 töitä

  • T2b-taulukot uusitaan sivulle op_en:Open policy ontology
  • Näkemysverkkojen muotoiluun liittyviä töitä:
    • Solmujen reunojen vaalentaminen. Musta otetaan pois käytöstä.
    • Sellaisen fontin etsiminen, jossa on joko valkoiset reunat tai valkoinen tekstin mustalla reunuksella.
    • Toiminnallisuus, jolla voi zoomailla näkemysverkossa. Kaksi mahdollista ratkaisua:
      • Shinyssa säätö, jolla voi zoomata kuvaa isommaksi kuin käytettävissä oleva alue.
      • DiagrammeRiin dynaamisuus, jolla voidaan valita pois solmuja kaaviosta. Tämä kuitenkin edellyttää jotain ratkaisua, jossa käyttäjän klikkaus välittyy tiedoksi Diagrammerille.
    • Näkemysverkkoihin legend. Tämä edellyttää, että perustetaan uusi taulukko, johon tulee jokaista oliotyyppiä yksi solmu, ja sen Kuvaukseen laitetaan tarvittavat selitykset. Voi aloittaa Gsheetiin.
  • Numerointi ja nimeäiminen on ollut epäjohdonmukaista. Korjatkaa tämän ohjeen mukaisesti. ----arg5748: . Helsinki kytkennät -taulukko käyty läpi, tosin muutama epäselvyys oli. --Pieta Tuomisto (keskustelu) 21. elokuuta 2018 kello 16.58 (UTC) (type: truth; paradigms: science: comment)
    • Taulujen nimeäminen: Aiemmin joka taululla oli oma muutaman merkin mittainen tunniste eli Id. Sitten luovuttiin taulukohtaisuudesta ja siirryttiin aihekohtaisiin tunnisteisiin. Tämän takia on nyt varmistettava, että esim. lukuisissa Goherr-tauluissa on jokaisessa oma juokseva numerointinsa eikä samoja numeroita käytetä, PAITSI tietenkin jos asia on sama eli:
    • Saman solmun numeron pitäisi olla jokaisessa taulussa sama. Myös samassa taulussa toistuva asia saa aina saman vanhan numeron. Esim. Ruuhkamaksu-taulussa tämä on virheellisesti.
    • Google-sheeteillä Ruuhkamaksu ja Helsinki kytkennät 2.0 ei ole taulun Id:tä ollenkaan. Tämä johtuu siitä, että tauluissa yhdistetään eri taulujen ja aiheiden asioita toisiinsa ja siksi eri riveillä voi olla asioita eri tauluista. Niinpä näihin kahteen tauluun on merkittävä myös taulun tunniste Obs-sarakkeeseen. Laitoin jo muutaman esimerkin valmiiksi. Huom1. Jos taulussa ei ole Obs- tai muuta numerosaraketta (kuten Sitra100), juokseva numerointi lisätään automaattisesti ja se alkaa ykkösestä ensimmäiseltä datariviltä. Huom2. Ne ilmiöt, jotka yhdistävät HNH2035- ja Sitra100-toimenpiteitä tai ruuhkamaksukeskustelua mutta eivät esiinny niissä suoraan, saavat tunnisteeksi "Ilmasto".
    • Tähän saakka Sitran toimenpiteet eivät ole linkkautuneet oikein. Syitä on ainakin kaksi: edellä mainitut numeroinnin epäjohdonmukaisuudet ja toisaalta se, etteivät eri esiintymät ole täsmälleen samalla tavalla kirjoitettuja. Esim. isoissa alkukirjaimissa pitää olla tarkkana. Kielioppisääntöjen mukaan mennään eli sanat pienellä elleivät ne ole erisnimiä, mutta kokonaiset lauseet voi kirjoittaa isolla alkukirjaimella. Itemissä, Namessa ja labelissa ei kuitenkaan laiteta pistettä loppuun vaikka olisi lausekin. Sen sijaan Descriptionissa on suositeltavaa käyttää pisteitä lauseen lopussa. Joihinkin kirjoitusasuihin emme voi vaikuttaa, kuten HNH2035-toimenpiteisiin, joten niissä on mukauduttava Helsingin käytäntöihin.
  • Lista kaikista taulukoista, joita käytetään näkemysverkkojen piirtämiseen: [2]
  • Kirjoittakaa google docsiin kuvaus tähän astisesta työstä ja mitä siitä on opittu. Ladataan kokeilun paikkaan, kunhan saadaan ensimäminen versio valmiiksi. Koetetaan saada muokkausoikeudet koko tiimille. [htps://docs.google.com/document/d/1W-AcKL-4sFyiTqNlSy0tF7a3FFI0rItuMgUrlvFZDrA/edit]
  • Katsokaa ja kommentoikaa ilmasto-ohjelman seuranta- ja vaikutusarviointityökalua. Sen avulla on tarkoitus seurata, miten toimenpiteet etenevät ja millaisia vaikutuksia niillä on tärkeisiin asioihin kuten ilmastopäästöihin. Linkkejä tähän arviointityöhön:
    • Hakemisto, jossa olennaiset vaikutusarviointityökalun materiaalit ovat [3]
    • Toimenpiteen seurantataulukko [4]
    • Seurantatyökalun kuvaus (ei aivan ajan tasalla) [5]
  • Ilmasto-ohjelman toimenpiteitä pitää alkaa liittämään niiden valmistelemiin päätöksiin, niistä koituviin kustannuksiin/investointeihin tai muihin yleisempiin ilmiöihin. Näistä päätöksistä, kustannuksista ja ilmiöistä pitää siis tehdä omat olionsa. Oliot listataan Goherr-kaaviot-taulukon Ruuhkamaksu-sheetille.
    • Uudet relaatiot 'valmistelee/prepares' ja 'kustantaa/pays'. Käänteisrelaatiot (inverse) ovat 'valmistelijana/prepared by' ja 'maksajana/paid by'. Nämä ovat toiminnallisia relaatioita (operational link).
  • Luo uusia solmuja ja linkkejä, jotka kytkevät yhteen Helsingin ilmasto-ohjelman ja a) ruuhkamaksukeskustelua, b) Sitran 100 ilmastotekoa, tai c) ympäristöterveysindikaattoreita. Myös muita kaavioita voi yhdistellä jos löytyy kytkentöjä. Kaikki aihepiirit ja linkit taulukoihin on lueteltu Yhteistyötiloissa.
  • Katso sivun op_en:Congestion charge keskusteluja ja täydennä niihin eri paradigman mukaisia relaatioita.----arg6137: . Tehty. Kaikki argumentit on myös vaihdettu uuden templaatin mukaisiksi ja korjattu niiden totuuksia ja relevansseja. --Pieta Tuomisto (keskustelu) 29. heinäkuuta 2018 kello 12.09 (UTC) (type: ; paradigms: science: comment) Käytettävät paradigmat:
    • science: templaatissa mainittu relaatio on science-paradigman mukainen. Perussääntö: argumentti on epäpätevä, jos siinä ei ole viittausta taustatietoon (havaintoihin) tai jos sitä vastaan hyökätään pätevällä argumentilla.
    • unattackedstand: Perussääntö: argumentti on epäpätevä, jos sitä vastaan hyökätään pätevällä argumentilla.
    • personaltine: Perussääntö: argumentti on epäpätevä, jos sen on esittänyt Tine Bizjak tai Tamara Gajst tai jos sitä vastaan hyökätään pätevällä argumentilla.
  • Tutustu uuteen kuvaukseen Helsingin ilmastopolitiikasta:
  • Tutustu sanastoon sivulla op_en:Structure of shared understanding ja kommentoi kummallisuuksia ja epäselvyyksiä.
  • Tutustu ympäristöterveyden indikaattoreihin sivulla Ympäristöterveys
  • Käytä uutta argument-templaattia toimintonapeista, kun haluat kommentoida sivun sisältöä Opasnetissä. ←--arg8375: . Huom! Ohje muuttunut. --Jouni Tuomisto (keskustelu) 24. heinäkuuta 2018 kello 04.47 (UTC) (type: truth; paradigms: science: defense)

Jounin työt

  • Labeleiden rivittäminen kuntoon: järkevän mittaisia eikä joka sanavälistä poikki. (Jouni)
  • Ääkköset eivät toimi. Etsi vika ja korjaa. Johtunee graafin tallennusvaiheesta.

Tehdyt työt

  • Palkat maksettu 12.5.2019 mennessä tehtyjen tuntien perusteella.
    • Uusi substanssiolio 'kustannus/expense'. Tavanomainen kustannus substanssityypin olio (tummanvihreän värinen ympyrä) mutta lisäksi on 'kustannustavoite/expense objective' joka on yhdistelmä kaikista kustannuksista ja jota pyritään päätöksenteossa minimoimaan. Kustannustavoite on tyyppiä objective. ----arg7263: . Näiden kuvaaminen oikeisiin taulukoihin tuli Pietalle tehtäväksi. --Jouni Tuomisto (keskustelu) 25. heinäkuuta 2018 kello 07.17 (UTC) (type: truth; paradigms: science: comment) ----arg7263: . Uudet relaatiot liitetty op_en:Structure of shared understanding sivulla olevaan taulukkoon. --Pieta Tuomisto(keskustelu) 27. heinäkuuta 2018 kello 09.30 (UTC) (type: truth; paradigms: science: comment)
    • Uusi relaatio 'omistaa perustelun/has rationale', käänteisrelaationa 'perustelee/is rationale for'. Nämä ovat toiminnallisia relaatioita (operational link).
  • Lukekaa vastine Homströmille ja kommentoikaa a) tekstin selkeyttä ja b) sisältöä. Koetetaan saada juttu lähtemään sunnuntaina.
    • Kirjoittakaa eri keskustelijoiden argumentit päätöksenteon avoimuuteen liittyen saman sivun alkuun.
  • Indikaattorin ja ilmiön välinen suhde on "kuvaa" (käänteisrelaatio "kuvautuu") Taulukoista löytyy tämmöisessä tilanteessa relaatiota "omistaa osan", ja nämä pitäisi vaihtaa oikeaan relaatioon.
  • HNH2035-ohjelman (ks alla) lopussa on listattu organisaatioiden pitkät nimet. Nämä pitäisi täydentää taulukkoon toimijat sivulla Hiilineutraali Helsinki 2035#Data. Nykyään taulukko sisältää erilaisia nimiversioita samasta organisaatiosta, mutta ne voi poistaa, koska ne korjataan alkuperäiseen googlesheetiin. ----arg5114: . Tehty. Toimijoista jotka olivat yhdistetty kauttaviivalla (esim. Kanslia/Aluerakentaminen) oletin jälkimmäisen kuuluvan ensimmäiseen, ja liitin ne toisiinsa relaatiolla "on osana". --Pieta Tuomisto (keskustelu) 29. heinäkuuta 2018 kello 10.10 (UTC) (type: ; paradigms: science: comment)
  • Asentakaa koneillenne R, Rstudio ja paketit OpasnetUtils, rvest, ggplot2, DiagrammeR ja Shiny. Sen jälkeen kuvien piirtämisen pitäisi onnistua ajamalla omalla koneella koodi kohdassa #Vastaus.
  • Goherr
    • Täydennä Goherr-projektin käsin piirrettyjen kaavioiden tiedot Google-taulukkoon Goherr-kaaviot tässä hakemistossa. ←--arg7263: . Tehty. Jouni Tuomisto (keskustelu) 24. heinäkuuta 2018 kello 04.47 (UTC) (type: truth; paradigms: science: defense)
    • Ohjelma täyttää tyhjiä rivejä edellisillä samasta sarakkeesta, sillä Helsingin taulukossa teemarivi. Muodostuu ongelmaksi Goherreissa kun käsitellään oliota joka ei tee itse yhtään nuolta. ←--arg7263: . Korjattu. Jouni Tuomisto (keskustelu) 24. heinäkuuta 2018 kello 04.47 (UTC) (type: truth; paradigms: science: defense)
  • Ruuhkamaksu
    • Lisää kaikkiin sivun op_en:Talk:Congestion charge keskusteluihin argumenttien tunnisteet, jotka ovat muotoa keskustelunnimi.juoksevanumero eli esim. health.4. Keskustelut nimetään ylhäältä alas seuraavasti: airquality, health, choice, economy, mobility, unfair, tragedy, dynamic, inefficient, distribution. ←--arg7263: . Tehty. Jouni Tuomisto (keskustelu) 24. heinäkuuta 2018 kello 04.47 (UTC) (type: truth; paradigms: science: defense)
  • Ilmastonmuutos
    • Tee Google sheet, jonne listataan kaikki Sitran 100 fiksua tekoa siten, että sarakkeisiin tulevat. Mieti yhteisesti kattava teemalista ja käytä sitä yhdistämään Helsingin ja Sitran toimepiteitä. ←--arg7263: . Tehty. Jouni Tuomisto (keskustelu) 24. heinäkuuta 2018 kello 04.47 (UTC) (type: truth; paradigms: science: defense)
    • Nimi (arjen teon nimi)
    • Suuruus (onko vaikutus pieni, keskisuuri vai suuri), tämän voisi merkata descriptioniin
    • Aihepiiri (liittyykö teko asumiseen, matkustamiseen jne)
    • URL sivulle, jossa teko esitellään
  • Menetelmällisiä töitä
    • Tutustu kaavioiden muotoiluihin sivulla op_en:Extended causal diagram ja kommentoi kummallisuuksia ja epäselvyyksiä. Kaavioiden toteutus R-paketilla DiagrammeR nettisivu, dokumentaatio.
    • Kommentoi ideaa sivulla op_en:Template:Argument ja
      tägien käytöstä parametrien löytymiseksi sivulta. (Koskee Pietaa tai muitakin jos osaatte html:ää). ←--arg7263: . Valmis. Jouni Tuomisto (keskustelu) 24. heinäkuuta 2018 kello 04.47 (UTC) (type: truth; paradigms: science: defense)
    • Kommentoi paradigmaidean käytettävyyttä ja mielekkyyttä yleensä ja sen sovellettavuutta eri paradigmojen osalta erityisesti. ←--arg7263: . Valmis. Jouni Tuomisto (keskustelu) 24. heinäkuuta 2018 kello 04.47 (UTC) (type: truth; paradigms: science: defense)
  • Tutustu kuvaukseen ruuhkamaksuista (Decision analysis and risk management 2017 -kurssilla tehty) ⇤--arg7263: . Ei kannata tutustua näihin vaan uudempiin sisältöihin. Jouni Tuomisto (keskustelu) 25. heinäkuuta 2018 kello 07.17 (UTC) (type: truth; paradigms: science: attack)

Laskenta

Syykaaviot

  • Taulukko näkemysverkoiksi soveltuvista taulukoista Yhteistyötiloissa [8]
  • Ehdotus sosiaali- ja terveyspalveluiden uudeksi kansalliseksi mittaristoksi VN-TEAS 15.3.2017 [9]
  • Alueuudistus: tietojohtaminen [10]
  • KUVA-mittaristo 23.4.2018 [11]
  • Tietoikkuna [12]
  • Sotkanet [13]


+ Näytä koodi

Sisäilma kouluissa

Kouluterveyskysely tuottaa jotakin tietoa myös sisäilmasta, oppimisympäristöstä yleensä ja oppilaiden raportoimista yleisistä oireista. Katso lisätietoa näistä linkeistä:

+ Näytä koodi

Aluejaottelun muodostava koodi

Tämä koodi ottaa Sotkanetin aluejaottelun ja muodostaa siitä data.framen Quilt-palveluun, josta se on helppo noukkia aluejaottelua vaativaan laskentaan R:ään käyttämällä quiltr-pakettia.

+ Näytä koodi

Indikaattorien lataus Sotkanettiin

Katso yksityiskohtaiset ohjeet lataamisesta Terhosta. ⇤--arg7508: . Nämä pitäisi siirtää yhteistyötiloihin tai muualle avoimeen sijaintiin. --Jouni Tuomisto (keskustelu) 10. elokuuta 2018 kello 06.55 (UTC) (type: ; paradigms: science: attack)

Tässä ollut koodi käytti vanhentunutta pea-pakettia. Katso sen sijaan uudempi esimerkki Pienhiukkaspitoisuuden väestöpainotettu vuosikeskiarvo#Upload aggregate data to Sotkanet.

Katso myös