Narzędzia użytkownika

Narzędzia witryny


ewdprocedury_pobieranie_bazy_szkol

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
ewdprocedury_pobieranie_bazy_szkol [2014/07/31 20:24]
t.zoltak
ewdprocedury_pobieranie_bazy_szkol [2015/07/10 17:03] (aktualna)
t.zoltak
Linia 1: Linia 1:
 +====== Eksport z bazy danych informacji o szkołach ======
  
 +Skrypt pobiera informacje o szkołach z bazy korzystając z funkcji pakietu EWDdane.
 +Na raz można pobrać informacje tylko o szkołach jednego typu.
  
-====== Eksport ​z bazy danych o szkołach ======+Starsze rozwiązania,​ wykorzystujące ODBC i odtwarzają konwencję nazywania kolumn ​z bazy szkół prowadzonej kiedyś jeszcze w pliku SPSSa, można odszukać w poprzednich wersjach strony (nie ma gwarancji, że będą działać na obecnej wersji bazy).
  
 <​code>​ <​code>​
-typSzkoly ​    ​= "​typ" ​             # dozwolone wartości: "​gimn.",​ "​LO",​ "​LP",​ "​T"​ +typSzkoly = "​typ" ​ # dozwolone wartości: "​gimn.",​ "​LO",​ "​LP",​ "​T"​ 
-zapiszDlugi ​  = "nazwa_pliku_csv" ​ # wpisać, lub NULL jeśli plik w formacie szerokim ma nie być zapisywany +zapis     = "nazwa_pliku.csv"
-zapiszSzeroki = "​nazwa_pliku_csv" ​ # wpisać, lub NULL jeśli plik w formacie szerokim ma nie być zapisywany +
-zrodloODBC ​   = "​EWD" ​             # dostosować+
  
-library(RODBCext) +setwd("​~/​Desktop/"​
-setwd("​setwd("​~/​Desktop/"​)+library(EWDdane)
  
 dozwoloneTypy = c("​gimn.",​ "​LO",​ "​LP",​ "​T"​) dozwoloneTypy = c("​gimn.",​ "​LO",​ "​LP",​ "​T"​)
-przyrostki ​   = c("​g" ​   , "​lo",​ "​lo",​ "​t"​) 
 if (typSzkoly %in% dozwoloneTypy) { if (typSzkoly %in% dozwoloneTypy) {
-  ​przyr przyrostki[dozwoloneTypy == typSzkoly] +  ​daneSzkol ​pobierz_dane_szkol(2006:​as.numeric(format(Sys.time(), "%Y"))
-  # samo pobieranie +                                 typSzkolyidOke = FALSEdaneAdresowe ​TRUE%>% 
-  p = odbcConnect(zrodloODBC) +    ​filter(id_szkoly ​> 0
-  szkoly = sqlExecute( +  lata = sort(unique(daneSzkol$rok), decreasing = TRUE) 
-    p, +  ​daneSzkol = select(daneSzkol-rok, -wielkosc_miejscowosci-rodzaj_gminy
-    ​"SELECT rok, id_szkoly AS id_szkoly_strona,​ id_szkoly_ewd,​ id_szkoly_oke+                     -matura_miedzynarodowa
-      ​typ_szkolypublicznadla_doroslych,​ specjalna, przyszpitalna,​ +  ​daneSzkol = within(daneSzkol{ 
-      nazwa, adres, miejscowosc,​ pna, poczta, wielkosc_miejscowosci AS l_mieszk, +    ​oke ​c("Wrocław", "Gdańsk", ​"​Kraków"​, "Poznań", "Łódź", ​"​Kraków"​
-      id_wojewodztwa AS wojewodztwo,​ id_powiatu AS powiat, id_gminy AS gmina, +            "Warszawa", "Wrocław", ​"​Kraków"​, "Łomża", "Gdańsk",​ "​Jaworzno", 
-      matura_miedzynarodowa AS ib +            "Łódź", ​"​Łomża"​, "Poznań", "Poznań")[floor(teryt_szkoly / 10^4) / 2] 
-    FROM (SELECT * FROM szkoly WHERE typ_szkoly ​?AS szkoly +  ​}) 
-      JOIN szkoly_dane USING (id_szkoly) +  ​for (i in lata) { 
-    WHERE id_szkoly > 0 AND rok > 2005 +    ​kody pobierz_dane_szkol(i, typSzkoly, idOke = TRUE, daneAdresowe = FALSE
-    ORDER BY id_szkoly_ewd, rok;", +    ​kody select(kody, id_szkoly, id_szkoly_oke,​ matura_miedzynarodowa) 
-    typSzkoly, +    if (!(typSzkoly ​%in% c("LO", "LP", "T"))) { 
-    fetch=TstringsAsFactors=F +      kody = select(kody-matura_miedzynarodowa) 
-  +    } 
-  ​odbcClose(p) +    maska names(kody!= "id_szkoly
-   +    names(kody)[maska= paste0(names(kody)[maska], "_", ​i
-  # trochę ręcznego tuningu z nazwami zmiennych (do stylu "dawno temuprzed bazą SQL") +    ​daneSzkol ​suppressMessages(left_join(daneSzkol, kody))
-  ​names(szkoly) ​sub("id_szkoly_ewd", ​paste0("id_" , przyr)names(szkoly)) +
-  names(szkoly) = sub("id_szkoly_oke", ​paste0("kod_", ​przyr)names(szkoly)) +
-  # matura międzynarodowa nie ma nic wspólnego z gimnazjami +
-  if (typSzkoly=="gimn.") szkoly = szkoly[names(szkoly) != "ib"+
-  # TERYT w jedną zmienną +
-  szkoly = within(szkoly{teryt = 10000 * wojewodztwo + 100 * powiat + gmina}) +
-  szkoly = szkoly[!(names(szkoly) %in% c("powiat", "gmina"))] +
-  # jeśli pobieramy technikatyp szkoły może być uznany za zmienną logiczną +
-  if (is.logical(szkoly$typ_szkoly)) szkoly$typ_szkoly = "T" +
- +
-  # ew. zapis formy długiej +
-  if (!is.null(zapiszDlugi)) write.csv2(zapiszDlugirow.names=FALSEna="", ​fileEncoding="UTF-8") +
-   +
-  ​# przekształcenie do postaci szerokiej +
-  if (!is.null(zapiszSzeroki)) { +
-    ​ostatniRok ​max(szkoly$rok)+
-    ​drop names(szkoly)[!(names(szkoly) ​%in% c("id_szkoly_strona", "rok", +
-                                                ​"kod_g",​ "​kod_lo",​ "​kod_t",​ "​l_mieszk",​ "ib"))] +
-    kody = reshape(szkolytimevar="​rok",​ idvar=c("​id_szkoly_strona"​), direction="wide", drop=drop, sep="​_"​) +
-    ​kody = kody[, c(names(kody)[1], sort(names(kody)[-1], decreasing=TRUE))] +
-    szkoly = szkoly[order(szkoly$rok,​ decreasing=TRUE),​ ] +
-    inneInfo = aggregate( +
- szkoly[, !grepl("^id_|^kod_|^rok$|^l_mieszk$|^ib$", ​names(szkoly))], +
- by=as.list(szkoly[, grepl("​^id_"​names(szkoly))]),​ +
- function(x) return(x[!is.na(x)][1]) +
-+
- str(inne.info) +
- polaczone=merge(kody, inne.info) +
- str(polaczone) +
   }   }
 +  rm(kody)
 +  maska = unlist(lapply(daneSzkol,​ class)) == "​logical"​
 +  daneSzkol[, maska] = lapply(daneSzkol[,​ maska], as.numeric)
 +  write.csv2(daneSzkol,​ zapis, row.names = FALSE, na = "",​ fileEncoding = "​UTF-8"​)
 } else { } else {
   stop("​Niedozwolony typ szkoły!"​)   stop("​Niedozwolony typ szkoły!"​)
 } }
- 
- 
- 
 </​code>​ </​code>​
  
ewdprocedury_pobieranie_bazy_szkol.1406831051.txt.gz · ostatnio zmienione: 2014/07/31 20:24 przez t.zoltak