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
Ostatnia wersja Both sides next revision
ewdprocedury_pobieranie_bazy_szkol [2014/07/31 21:38]
t.zoltak
ewdprocedury_pobieranie_bazy_szkol [2015/07/10 14:15]
t.zoltak
Linia 1: Linia 1:
-====== Eksport z bazy danych o szkołach ======+====== Eksport z bazy danych ​informacji ​o szkołach ======
  
 Skrypt pobiera informacje o szkołach z bazy (przez ODBC). Nazwy kolumn w zwracanych plikach są nieco "​oldschoolowe"​ - odtwarzają konwencję z bazy szkół prowadzonej jeszcze w pliku SPSSa, zanim baza SQLowa powstała i pochłonęła wszystko. Skrypt pobiera informacje o szkołach z bazy (przez ODBC). Nazwy kolumn w zwracanych plikach są nieco "​oldschoolowe"​ - odtwarzają konwencję z bazy szkół prowadzonej jeszcze w pliku SPSSa, zanim baza SQLowa powstała i pochłonęła wszystko.
Linia 8: Linia 8:
  
 <​code>​ <​code>​
 +typSzkoly ​    = "​typ" ​             # dozwolone wartości: "​gimn.",​ "​LO",​ "​LP",​ "​T"​
 +zapiszDlugi ​  = "​nazwa_pliku.csv" ​ # lub NULL jeśli plik w formacie szerokim ma nie być zapisywany
 +zapiszSzeroki = "​nazwa_pliku.csv" ​ # lub NULL jeśli plik w formacie szerokim ma nie być zapisywany
 +zrodloODBC ​   = "​EWD" ​             # ew. dostosować
  
 library(RODBCext) library(RODBCext)
-setwd("​D:/")+setwd("​~/Desktop/")
  
 dozwoloneTypy = c("​gimn.",​ "​LO",​ "​LP",​ "​T"​) dozwoloneTypy = c("​gimn.",​ "​LO",​ "​LP",​ "​T"​)
Linia 20: Linia 24:
   szkoly = sqlExecute(   szkoly = sqlExecute(
     p,     p,
-    "​SELECT rok, id_szkoly AS id_szkoly_strona, id_szkoly_ewd, id_szkoly_oke,​+    "​SELECT rok, id_szkoly AS id_szkoly_strona,​ id_szkoly_oke,​
       typ_szkoly, publiczna, dla_doroslych,​ specjalna, przyszpitalna,​       typ_szkoly, publiczna, dla_doroslych,​ specjalna, przyszpitalna,​
       nazwa, adres, miejscowosc,​ pna, poczta, wielkosc_miejscowosci AS l_mieszk,       nazwa, adres, miejscowosc,​ pna, poczta, wielkosc_miejscowosci AS l_mieszk,
Linia 28: Linia 32:
       JOIN szkoly_dane USING (id_szkoly)       JOIN szkoly_dane USING (id_szkoly)
     WHERE id_szkoly > 0 AND rok > 2005     WHERE id_szkoly > 0 AND rok > 2005
-    ORDER BY id_szkoly_ewd, rok;",+    ORDER BY id_szkoly_strona, rok;",
     typSzkoly,     typSzkoly,
-    fetch=T, stringsAsFactors=F+    fetch = TRUE, stringsAsFactors = FALSE
   )   )
   odbcClose(p)   odbcClose(p)
Linia 51: Linia 55:
  
   # ew. zapis formy długiej   # ew. zapis formy długiej
-  if (!is.null(zapiszDlugi)) write.csv2(zapiszDlugi,​ row.names=FALSE,​ na="",​ fileEncoding="​UTF-8"​)+  if (!is.null(zapiszDlugi)) write.csv2(szkoly, ​zapiszDlugi,​ row.names = FALSE, na = "",​ fileEncoding = "​UTF-8"​)
   ​   ​
   # ew. przekształcenie do postaci szerokiej   # ew. przekształcenie do postaci szerokiej
   if (!is.null(zapiszSzeroki)) {   if (!is.null(zapiszSzeroki)) {
     # reshape() działa dużo szybciej, jeśli nie przepuszczać przez nią tego, co możemy dołączyć w inny sposób     # reshape() działa dużo szybciej, jeśli nie przepuszczać przez nią tego, co możemy dołączyć w inny sposób
-    ​dro+    ​drop = names(szkoly)[!(names(szkoly) %in% c("​id_szkoly_strona",​ "​rok",​ 
 +                                                "​kod_g",​ "​kod_lo",​ "​kod_t",​ "​l_mieszk",​ "​ib"​))] 
 +    kody = reshape(szkoly,​ timevar="​rok",​ idvar=c("​id_szkoly_strona"​),​ direction="​wide",​ drop=drop, sep="​_"​) 
 +    kody = kody[, c(names(kody)[1],​ sort(names(kody)[-1],​ decreasing= ​ TRUE))] 
 +    # jeśli chodzi o inne informacje, to zostawiamy sobie tylko najświeższe (z najpóźniejszego roku) 
 +    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])} 
 +    ) 
 +    # i łączymy w jedno 
 +    polaczone = merge(kody, inneInfo) 
 +    # definicja kolejności kolumn 
 +    nazwyKolumn = c( 
 +      names(polaczone)[grepl("​^id_[^s]",​ names(polaczone))],​ 
 +      "​wojewodztwo",​ "​oke",​ "​nazwa",​ "​adres",​ "​miejscowosc",​ "​pna",​ "​poczta",​ 
 +      "​typ_szkoly",​ "​publiczna",​ "​dla_doroslych",​ "​specjalna",​ "​przyszpitalna",​ 
 +      names(polaczone)[grepl("​^kod_",​ names(polaczone))],​ 
 +      names(polaczone)[grepl("​^ib_",​ names(polaczone))],​ 
 +      "​teryt",​ 
 +      names(polaczone)[grepl("​^l_mieszk_",​ names(polaczone))],​ 
 +      "​id_szkoly_strona"​ 
 +    ) 
 +    # sortujemy obserwacje i kolumny 
 +    polaczone = polaczone[order(polaczone[,​ grepl("​^id_[^s]",​ names(polaczone))]),​ nazwyKolumn] 
 + 
 +    # zapis 
 +    write.csv2(polaczone,​ zapiszSzeroki,​ row.names = FALSE, na = "",​ fileEncoding = "​UTF-8"​) 
 +  } 
 +} else { 
 +  stop("​Niedozwolony typ szkoły!"​) 
 +
 +</​code>​ 
ewdprocedury_pobieranie_bazy_szkol.txt · ostatnio zmienione: 2015/07/10 17:03 przez t.zoltak