Narzędzia użytkownika

Narzędzia witryny


ewdprocedury_pobieranie_bazy_szkol

To jest stara wersja strony!


Eksport z bazy danych 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 .sav, zanim baza SQLowa powstała i pochłonęła wszystko. 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). Obecnie na raz można pobrać informacje tylko o szkołach jednego typu.

<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) setwd(„D:/”)

dozwoloneTypy = c(„gimn.”, „LO”, „LP”, „T”) przyrostki = c(„g” , „lo”, „lo”, „t”) if (typSzkoly %in% dozwoloneTypy) {

przyr = przyrostki[dozwoloneTypy == typSzkoly]
# samo pobieranie
p = odbcConnect(zrodloODBC)
szkoly = sqlExecute(
  p,
  "SELECT rok, id_szkoly AS id_szkoly_strona, id_szkoly_ewd, id_szkoly_oke,
    typ_szkoly, publiczna, dla_doroslych, specjalna, przyszpitalna,
    nazwa, adres, miejscowosc, pna, poczta, wielkosc_miejscowosci AS l_mieszk,
    id_wojewodztwa AS wojewodztwo, id_powiatu AS powiat, id_gminy AS gmina,
    matura_miedzynarodowa AS ib
  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_ewd, rok;",
  typSzkoly,
  fetch=T, stringsAsFactors=F
)
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 technika, typ 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(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.1406835419.txt.gz · ostatnio zmienione: 2014/07/31 21:36 przez t.zoltak