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 21:38]
t.zoltak
ewdprocedury_pobieranie_bazy_szkol [2015/07/10 17:03] (aktualna)
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ę ​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 korzystająfunkcji pakietu EWDdane. 
 +Na raz można pobrać informacje tylko o szkołach jednego typu.
  
-Typowo interesujący jest plik wyjściowy w postaci długiej (jeśli chodzi o nazwę szkoły i dane adresowe zawiera on tylko najbardziej aktualne informacje). +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).
- +
-Obecnie na raz można ​pobrać informacje tylko o szkołach jednego typu.+
  
 <​code>​ <​code>​
 +typSzkoly = "​typ" ​ # dozwolone wartości: "​gimn.",​ "​LO",​ "​LP",​ "​T"​
 +zapis     = "​nazwa_pliku.csv"​
  
-library(RODBCext) +setwd("​~/Desktop/"
-setwd("​D:/")+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 +                                 ​typSzkoly, ​idOke 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_szkoly, publiczna, dla_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) +
-    WHERE id_szkoly > 0 AND rok > 2005 +
-    ORDER BY id_szkoly_ewdrok;", +
-    typSzkoly, +
-    fetch=TstringsAsFactors=+
-  ​+
-  ​odbcClose(p+
-  ​ +
-  # trochę ręcznego tuningu z nazwami zmiennych (do stylu "dawno temu, przed bazą SQL"​) +
-  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"​))] +
-  # OKE na podstawie województwa +
-  szkoly ​= within(szkoly, { +
-    oke = c("​Wrocław",​ "​Gdańsk",​ "​Kraków",​ "​Poznań",​ "​Łódź",​ "​Kraków",​ "​Warszawa",​ "​Wrocław",​ +
-            ​"​Kraków",​ "​Łomża",​ "​Gdańsk",​ "​Jaworzno",​ "​Łódź",​ "​Łomża",​ "​Poznań",​ "​Poznań"​)[wojewodztwo/2]+
   })   })
-  ​# jeśli pobieramy technikatyp szkoły może być uznany za zmienną logiczną +  ​for (i in lata) { 
-  if (is.logical(szkoly$typ_szkoly)) szkoly$typ_szkoly ​= "T"+    kody = pobierz_dane_szkol(itypSzkoly, idOke = TRUE, daneAdresowe = FALSE) 
 +    kody = select(kody,​ id_szkoly, id_szkoly_oke,​ matura_miedzynarodowa) 
 +    ​if (!(typSzkoly %in% c("​LO",​ "​LP",​ "​T"​))) { 
 +      kody = select(kody,​ -matura_miedzynarodowa) 
 +    } 
 +    maska = names(kody) != "id_szkoly" 
 +    names(kody)[maska] = paste0(names(kody)[maska],​ "​_",​ i) 
 +    daneSzkol = suppressMessages(left_join(daneSzkol,​ kody)) 
 +  } 
 +  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 { 
 +  stop("​Niedozwolony typ szkoły!"​) 
 +
 +</​code>​
  
-  # ew. zapis formy długiej 
-  if (!is.null(zapiszDlugi)) write.csv2(zapiszDlugi,​ row.names=FALSE,​ na="",​ fileEncoding="​UTF-8"​) 
-  ​ 
-  # ew. przekształcenie do postaci szerokiej 
-  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 
-    dro 
ewdprocedury_pobieranie_bazy_szkol.1406835524.txt.gz · ostatnio zmienione: 2014/07/31 21:38 przez t.zoltak