Narzędzia użytkownika

Narzędzia witryny


ewdprocedury_weryfikacja_bazy_szkol

Weryfikacja spójności bazy szkół

library(EWDogolny)

setwd("~/Desktop/")
# dane po aktualizacji
danePopr  = read.csv2("nazwa_pliku.csv", encoding="UTF-8", stringsAsFactors=FALSE)
# zrzut bazy, na który została później naniesiona powyższa aktualizacja
daneZrodl = read.csv2("nazwa_pliku.csv", encoding="UTF-8", stringsAsFactors=FALSE)

# szukanie duplikatów
{
  cat("Liczba duplikatów kod_(g|lo|t)_rrrr dla lat:\n")
  for (i in names(danePopr)[grepl("^kod_(g|lo|t)_", names(danePopr))]) {
    cat("   ", gsub("[^[:digit:]]", "", i), ": ",
        sum(duplicated(danePopr[danePopr[, i] != "", i])),
        " z ", sum(danePopr[, i] != ""), "\n",
        sep=""
    )
  }
  wszystkieKody = unlist(apply(danePopr[, grepl("^kod_(g|lo|t)_", names(danePopr))], 1,
    function(x) {return(unique(x[x!=""]))}
  ))
  powtKody = table(wszystkieKody)[table(wszystkieKody) > 1]
  cat("\nLiczba powtórzeń wykorzystania kod_(g|lo|t) między latami: ", length(powtKody), "\n", sep="")
  print(names(powtKody))
  powtKody = danePopr[unlist(apply(
      danePopr[, grepl("^kod_(g|lo|t)_", names(danePopr))], 1,
      function(x, kody) {return(any(x %in% kody))},
      kody=names(powtKody)
    )), grepl("^id_|^nazwa$|^kod_(g|lo|t)_", names(danePopr))]
  print(powtKody)
  do_schowka(powtKody)
}

# trochę sprawdzania nazw i adresów
{
  cat("Szkoły z adresami w nazwie (szukam kodów pocztowych):\n")
  danePopr[grepl("[[:digit:]]{2}[-][[:digit:]]{3}", danePopr$nazwa),
    grepl("^id_(g|lo|t)|^nazwa$", names(danePopr))]
}
{
  cat("Szkoły z nazwą miejscowości jako ulicą:\n")
  danePopr[!grepl("^[[:digit:]]+[[:lower:][:upper:]]?$", danePopr$adres)
      & grepl("^[ [:digit:]]+$", mapply(
        function(x, y) {
          return(sub(y, "", x))
        },
        danePopr$adres, danePopr$miejscowosc
      )),
    grepl("^id_(g|lo|t)|^adres$|^miejscowosc$", names(danePopr))]
}
{
  cat("Szkoły z niepoprawnymi PNA (nie przystają do wzorca dd-ddd):\n")
  danePopr[!grepl("^[[:digit:]]{2}[-][[:digit:]]{3}$|^$", danePopr$pna),
    grepl("^id_(g|lo|t)|^pna$|^poczta$", names(danePopr))]
}

# sprawdzamy, co się zmieniło w stosunku do zrzutu
temp     = danePopr[!is.na(danePopr$id_szkoly_strona), ]
usuniete = daneZrodl$id_szkoly_strona[!(daneZrodl$id_szkoly_strona %in% temp$id_szkoly_strona)]
zmiany   = as.data.frame(matrix(0, ncol=3, nrow=0, dimnames=list(NULL, c("id_szkoly było", "id_szkoly ma być", "rok"))))
for (i in usuniete) {
  for (j in names(daneZrodl)[grepl("^kod_(g|lo|t)_", names(daneZrodl))]) {
    if (daneZrodl[daneZrodl$id_szkoly_strona == i, j] != "") {
      if (daneZrodl[daneZrodl$id_szkoly_strona == i, j] %in% danePopr[, j]) {
        zmiany[nrow(zmiany) + 1, ] = c(
	  i,
          danePopr$id_szkoly_strona[daneZrodl[daneZrodl$id_szkoly_strona == i, j] == danePopr[, j]],
	  as.numeric(gsub("[^[:digit:]]", "", j))
	)
      } else {
        zmiany = rbind(zmiany, c(i, NA, as.numeric(gsub("[^[:digit:]]", "", j))))
      }
    }
  }
}
{
  cat("Do bazy dodano nowych szkół: ", sum(is.na(danePopr$id_szkoly_strona)),
      "\nZ bazy usunięto szkół: ", length(usuniete),
      "\n\nZmiany w bazie szkół:\n", sep="")
  print(zmiany)
}
do_schowka(zmiany)
# i jeszcze śledzenie ew. zmian kodów OKE w stosunku do zrzutu
maskaZmienne = intersect(names(daneZrodl), names(danePopr))
maskaZmienne = maskaZmienne[grep("^id_szkoly_strona$|^kod_(g|lo|t)_", maskaZmienne)]
polaczone = merge(
	daneZrodl[, maskaZmienne],
	danePopr[, maskaZmienne],
	by = "id_szkoly_strona",
	suffixes = c("", "_popr")
)
maskaZmienne = maskaZmienne[grep("kod_(g|lo|t)_", maskaZmienne)]
maska = apply(polaczone[, maskaZmienne] != polaczone[, paste0(maskaZmienne, "_popr")], 1, any)
polaczone = polaczone[maska %in% TRUE, ]
maska = polaczone[, maskaZmienne] == polaczone[, paste0(maskaZmienne, "_popr")]
polaczone[, maskaZmienne][maska] = ""
polaczone[, paste0(maskaZmienne, "_popr")][maska] = ""
maska = apply(polaczone[, maskaZmienne] != polaczone[, paste0(maskaZmienne, "_popr")], 2, any)
polaczone = polaczone[, c("id_szkoly_strona", maskaZmienne[maska], paste0(maskaZmienne, "_popr")[maska])]
{
	cat("Zmiany id OKE szkół w latach wcześniejszych:\n")
	print(polaczone)
}
do_schowka(polaczone)
ewdprocedury_weryfikacja_bazy_szkol.txt · ostatnio zmienione: 2014/12/03 23:53 przez t.zoltak