2020-08-14 13:36:36 +02:00

855 lines
34 KiB
R

# Created by Miha 2015. Updated by Miha 22.7.2019 in parts in progress!!!! #
# PREVERI!!!!!!!!!!!
#-------------------- SET WORKING DIREKTORY -----------------------#
# Check which PC we are working from: WORk OR HOME
fpath <- file.path("C:/MIHA DELO/FDV PROJEKT EVALVACIJE UL/EVLAVACIJE 2018_2019 UPDATED")
if (!dir.exists(fpath)){
output_dir <- "E:/Work/Vasja Vehovar/EVLAVACIJE 2018_2019 UPDATED"
setwd(output_dir)
} else {
setwd(fpath)
}
#------------------ //SET WORKING DIREKTORY// ---------------------#
#########################################
# KRATEK OPIS STRUKTURE POROÈIL IN KODE #
#########################################
# Poroèilo je sestavljeno na podlagi R kode (izraèuni) in latex kode (.tex, struktura poroèil)
# Vhodne datoteke se nahajajo v mapi "temp", kjer sta dve loèeni datoteki s podatki za +
# ANKETO PRED IZPITOM in ANKETO PO IZPITU
# V mapi se nahajajo tudi šifranti (ki služijo opredelitvi izvajalcev fakultete, predmetov, +
# naèina študija, študijskih programov), itd: +
# Podrobno preberi: http://ul.1ka.si/index.php?fl=2&lact=1&bid=40&parent=3
# V poroèilu so ocenjene, obarvane in v tabelah predstavljene vrednosti komponent za izvajalca, +
# vrednosti komponent predmetov PRED izpitom in vrednosti komponent PO izpitu.
#' @param Komponente za izvajalca so: Kakovost, Pripravljenost, Razumljivost, Zanimivost, Kritiènost, Korektnost
#' @param Komponente predmeta (ANKETA PRED): Zadovoljstvo, Usklajenost, Samostojnost, Literatura, Obvešèenost, Info. na spletu, Preverjanje
#' @param Komponente predmeta (ANKETA PO):Vsebine, naloge, Ocenjevanje, Kompetence, Ustreznost Kreditnih toèk
########
# OSNOVNA SKIPTA #
#================#
#' skripta: @name 00_dataanalysis.R je osnova (ki jo vedno najprej poženemo) in je namenjena opredelitvi +
# spremenljivk, vektorjev, podatkovnih okvirjev in izraèunu povpreèij, kvantilnih rangov, +
# obarvanju, itd.
# Obarvanja povpreèij komponent in kvantilnih rangov opredelimo v skkripti funkcije.R
# Skripto tabelaBy.r pa uporabimo samo pri izpisu PDF za izvajalca. Pri izpisu za programe, fakulteto tega ne uporabljamo.
# Ko smo pognali skrpto kodo.r, lahko generiramo poroèilo za izvajalce, tako da poženemo +
# skirpto koda-izvajalec_predmet.r.
# Skripta koda-fakulteta.r služi generiranju poroèila za fakulteto.
# Skripta koda-programi pa generira poroèila za študijske programe.
########
# Glavo dokumenta, obarvanje vrednosti, širino tabel, rotiranje stolpcev, +
# nove strani, poglavja, kazalo itd. generiramo s pomoèjo latex kode, ki je +
# prenesena v R.
# V mapi latexkosi so denifirane tex. datoteke, ki so namenjene generiranju +
# glave (prva stran, kazalo) in noge (zakljuèek) poroèila
### Poroèilo za izvajalca: glavno dokumenta definira tex datoteka a-glava.tex, +
#' ki jo preberemo v skripti @nam07_PDF_izvajalec.r
### Poroèilo za fakulteto: glavo dokumenta definira tex datoteka
# a-glava-program.tex (glej skripto koda-fakulteta.r)
### Excel datoteka "navodila" je narejena s strani programerja in +
# služi opredelitvi anketnih vprašanj za izvajalca, ter predmete (ANKETA PRED IN PO IZPITU) +
# oz. komponent, po katerih raèunamo povpreèja, kvantilne range, itd.
#----------------------- //KRATEK OPIS STRUKTURE POROÈIL// -----------------------------------#
#---------------------- 1KA strežnik -------------------------#
# Del, ki ga potrebuje Peter, da generira ustrezno poroèilo
# za posamezno fakulteto na strežniku
# Tega trenutno ne rabimo
#params <- commandArgs(trailingOnly = TRUE)
#ID <- params[1]
#---------------------- //1KA strežnik// ---------------------#
#------------- List packages we need -----------------#
# List packages we want
# install packages from CRAN
p_needed <-
c("tools",
"psych",
"Hmisc",
"reports",
"fmsb",
"car",
"Cairo",
"openxlsx",
"qpcR",
"rio",
"dplyr") # import data (trendi fakulteta)
## Install new packages
packages <- rownames(installed.packages())
p_to_install <- p_needed[!(p_needed %in% packages)]
if (length(p_to_install) > 0) {
install.packages(p_to_install)
}
# Load the packages
lapply(p_needed, require, character.only = TRUE)
#------------ //List packages we need// --------------#
#---------------------------- DEFINE FACULTY ID -------------------------------#
# Opredelimo ID fakultete, ki skrbi za to da se v poroèilu (kjer je dogovorjeno)
# izpiše kratice fakultete, ime fakultete ter izriše logo fakultete.
# (glej poroèilo za izvajalca, ki ga generira R. skripta koda-izvajalec_predmet)
# ID skrbi tudi, da preberemo ustrezne CSV datoteke za ustrezno Fakulteto.
# Ko se koda prenese na strežnik ID zakomentiramo, saj ga Peter ne Potrebuje
ID <- 3000025
fakulteta <- ""
ime.fakultete <- ""
source("Evalvacija/R/02_IDfaculty.R", encoding = "UTF-8")
#-------------------------- //DEFINE FACULTY ID// -----------------------------#
# ----------------------------- CUSTOM DEFINED FUNCTIONS ------------------------------#
# Naložimo dodatne funkcije (obarvanje povpreèja + generiranje tabel v
# poglavju Analiza predmeta po programih in letnikih:
# glej poroèilo za izvajalca )
#' Èe želimo spremeniti barvo, moramo novo barvo defnirati v:
#' skripti @name funkcije.r in v @name tex. datotekah (npr za izvajalca: @a-glava.tex )
#' @POMEMBNO!!! v 01_funkcije.r opredelimo minimalno število enot na podlagi katerega
#' prikažemo vrednosti povpreèij.
source('Evalvacija/R/funkcije/01_funkcije.r', encoding = "UTF-8")
#' Funkcije, ki vodo skrbele za @Agregate in Trende
source('Evalvacija/R/funkcije/agregati_funkcije.r', encoding = "UTF-8")
# --------------------------- //CUSTOM DEFINED FUNCTIONS// ----------------------------#
#--------- WARNINGS ----------#
options(nwarnings = 10000)
# ignore these warnings:
# "[DATA NOT ENOUGH] at 3 NA" <- fmsb::radarchart ne more naredit radar grafa predmeta ker ni vsaj 3 vrednosti za ocene komponent predmeta
# "In FUN(newX[, i], ...) : no non-missing arguments to min; returning Inf/-Inf" <- ne more izraèunat min in max ker je n=0
#------- //WARNINGS// --------#
# --------------------------------- FOLDERS FOR OUTPUT ---------------------------------------#
# Ustvarimo mapo, kjer se bodo shranjevale slike (grafi, histogrami, barploti)
# PDF Slike grafov izvajalca
dir.create(paste0("Evalvacija/results/",fakulteta), showWarnings = FALSE)
dir.create(paste0("Evalvacija/results/",fakulteta,"/part-izvajalec-slike"), showWarnings = FALSE)
# PDF Slike grafov za predmet
dir.create(paste0("Evalvacija/results/",fakulteta,"/part-predmet-slike"), showWarnings = FALSE)
# Mapa, kamor se bodo shranjevali PDF-ji Študijskih praks (praksa, trendi prakse za èlanico)
dir.create(paste0("Evalvacija/results/",fakulteta,"/praksa"), showWarnings = FALSE)
# Folder kamor bomo shranjevlai podatke za agregate, ki pridejo v upoštev pri poroèilu
# za fakulteto in program
dir.create(paste0("Evalvacija/results/",fakulteta,"/Agregati"), showWarnings = FALSE)
# Folder, kjer se bodo generirali Trendi za izvajalca
dir.create(paste0("Evalvacija/results/",fakulteta,"/Trendi"), showWarnings = FALSE)
# Trendi za habilitacijsko komisijo na nivoju izvaajalca
# Gre za enako poroèilo kot v primeru Trendov z aizvajalca, le, da so v tem poroèilu
# Še tabele IPP (ocene izvajalca pri predmetih) in odprti odgovori študentov za IPP
dir.create(paste0("Evalvacija/results/",fakulteta,"/Habilitacijska"), showWarnings = FALSE)
# Folder, kjer se bodo generirala poroèila za študijske programe
dir.create(paste0("Evalvacija/results/",fakulteta,"/Programi"), showWarnings = FALSE)
# ------------------------------- //FOLDERS FOR OUTPUT// -------------------------------------#
#---------------------------------------- IMPORT AND PREPARE DATA -----------------------------------------#
#!!!!!! OLD (vèasih somo to delali iz SPSS baze (2014) zato smo) ohranili datoteko "navodila.xlsx"
# V navodilih so opredeljene komponente in definirana imena vprašanj +
# ankete 1KA za izvajalca (npr. IZPOUC1) in za predmet (npr. IZPREDa)
# Vrstice predstavljajo komponente za izvajalca in za predmete.
# Definirana so tudi imena komponent, ki jih zapišemo v latex tabelah +
# (stolpec: ime.kratko) ter celotna imena komponent oz. anketnih vprašanj
# (glej stolpec: ime.dolgo)
# V navodilih so opredeljene spremenljivke, ki se nanašajo na spremenljivke v bazi
# (anketa pred in anketa po izpitu) ter dodana nova imena teh spremenljivk,
# ki smo jih generirali sami zaradi lažjega in hitrejšega pisanja nadalnje kode
# (klicanje teh spremenljivk, ki se raèunajo)
# Glej excel navodila!!!
navodila <-
openxlsx::read.xlsx(xlsxFile = "Evalvacija/temp/navodila.xlsx",
colNames = TRUE,
rowNames = TRUE)
# Preberemo vhodne datoteke Fakultete glede na ID, ki smo ga opredelili #
# Vse vhodne podatke pripravi Peter oziroma dobim na naslovu:
# https://anketa.uni-lj.si/student//index.php
# V študijskem letu 2016/2017 je prišlo do spremembe v šifrantih,
# in sicer v obeh bazah odgovorov študentov 1KA (anketa pred izpitom in anketa PO izpitu)
# ne sem biti veè ŠIFER ŠTUDENTOV, ki pa je v prejšnjih leti bila.
# Ker smo dve loèeni bazi (anketa pred in po izpitu)
# združevali na podlagi šifre študentov to veè ni mogoèe. Zato
# 1) Celotno kodo preuredimo tako, da bomo podatke "vlekli" iz dveh razliènih baz
# (data_pred_izpitom, data_po_izpitu)
#' Podatki za: @name Anketa PRED izpitom----------------------
data_pred_izpitom <-
read.csv2(
paste0("Evalvacija/temp/anketa_pred_izp_", fakulteta, ".csv"),
header = TRUE,
fill = TRUE,
stringsAsFactors = FALSE
)
# Read from second row (first rows are labels)
if (data_pred_izpitom[1, 1] == "Ustreznost") {
data_pred_izpitom <- data_pred_izpitom[2:nrow(data_pred_izpitom), ]
}
#' Podatki za: @name Anketa PO izpitu-----------------------
data_po_izpitu <-
read.csv2(
paste0("Evalvacija/temp/anketa_po_izpitu_", fakulteta, ".csv"),
header = TRUE,
fill = TRUE,
stringsAsFactors = FALSE
)
# Read from second row
if (data_po_izpitu[1, 1]=="Ustreznost") {
data_po_izpitu <- data_po_izpitu[2:nrow(data_po_izpitu),]
}
#' @name sifrantX1 -------------------------------------#
# Je edini obvezni šifrant, kjer se nahajajo vsi pomembni
# podatki za generiranje poroèil.
sifrant <-
read.csv2(
paste0("Evalvacija/temp/sifrant_", fakulteta, ".csv"),
header = TRUE,
fill = TRUE,
stringsAsFactors = FALSE
)
# TIDY DATA --------------------------#
# remove extra spaces # trim funkcija je definirana v funkcije.r
sifrant$PREDMET <- trim(sifrant$PREDMET)
# remove dots in front of course names (FDV!)
sifrant$PREDMET <- sub("^\\.", "", sifrant$PREDMET)
# remove extra spaces
sifrant$NAZIV.PEDAGOGA <- trim(sifrant$NAZIV.PEDAGOGA)
# Novi šifranti, ki smo jih prodobili s strani UL in ne Petra
# if (ID == 3000018) {
# sifrant$IDP <-
# ifelse(sifrant$NACIN_STUDIJA == "1",
# paste0(sifrant$IDP, "_1"),
# paste0(sifrant$IDP, "_2"))
# }
#------------------------ //TIDY DATA// ------------------------#
# Šifrant X3: STUDENT PROGRAM NAMES------------------------------
programi.imena <-
read.csv2(
paste0("Evalvacija/temp/programi_", fakulteta, ".csv"),
fill = TRUE,
header = TRUE,
stringsAsFactors = FALSE
)
# UPDATED 29.10.2019 #
# ZA POTREBE FDV DODAMO IMENA PRENOVLJENIH IN STARIH PROGRMOV---------
# Trenutno je namreè tako, da imamo za dva razlièna programa isto
# ime a razlièni šifri. Z imena programa pa izvajalec ne ve
# ali gre z anov ali star program.
# FDV je zato izrazil željo, da bi prenovljene in predhodne programe
# loèili tako, da bi k imenu dodali (prendovljeni) ali (predhodni)
# Torej to naredio le v primeru FDV, za druge fakultete pa po
# NAROÈILU
if (ID == 3000021) {
# Programe bomo poimenovali v vseh bazah in šifrantu programov
# Družboslovna informatika UNI stari program ima ID = 1000229
# Družboslovna informatika UNI prenovljeni program ima ID = 1001021
source("Evalvacija/R/funkcije/nova_imena_programov.R", encoding = "UTF-8")
# ANKETA PRED IZPITOM
data_pred_izpitom <- prenPredh(data_pred_izpitom, "program", "idprog")
# ANKETA PO IZPITU
data_po_izpitu <- prenPredh(data_po_izpitu, "program", "idprog")
# Šifrant vse programov:
programi.imena <- prenPredh(programi.imena, program = "Naziv", idprog = "ID")
}
# Dodatno pa še:
# Loèimo univerzitetne in visokošolske programe z vrsto študija,
# ker so drugaèe podvojena imena (npr. Družboslovna informatika (uni))
# Imenu programa prilepimo vrsto študija (npr. uni ali vs)
programi.imena$Naziv <-
paste0(programi.imena$Naziv, " (", programi.imena$Vrsta, ")")
# Èe so pokvarjeni ÈŽŠ-ji zaradi napaènega encodinga v šifrantih to ustrezno popravimo
#Encoding(programi.imena$Naziv) <- "UTF-8"
#------------------------------------ //IMPORT AND PREPARE DATA// --------------------------------------#
#------------------------- ERROR CHECK -------------------------#
# MOREBITNE NESKLADNOSTI Z 1KA BAZO podatkov IN
# ŠIFRANTOM X1, KI BI LAHKO VPLIVALE NA PRAVILNOST
# IZDELAVE PDF POROÈIL
source('Evalvacija/R/funkcije/errorCheck.r', encoding = "UTF-8")
#---------------------- //ERROR CHECK// ------------------------#
#--------------------------------------- AGREGAT SUMARNIH PREDMETOV -----------------------------------------#
# UPDATE 23.12.2019
# Zaèasno zakomenentiramo tale del, saj so bile neke napake v poroèilih. Se vrnemo kasneje k temu
# Èe je ID == Fakulteta za Glasbo združimo doloèene predmete iz šifranta x7 v meta predmet
# if (ID == 3000043){
# source('Evalvacija/R/zdruzevanje_predmetov_AG.R')
# source('Evalvacija/R/funkcije/errorCheck.r', encoding = "UTF-8")
# }
#------------------------------------ //AGREGAT SUMARNIH PREDMETOV// ----------------------------------------#
#------------------- DEFINE VARIABLES FOR CALUCLATIONS -------------------#
# We create list of variables which will be called for descriptive
# statistics and Latex tables purposes
source("Evalvacija/R/03_variables.R")
#------------------- DEFINE VARIABLES FOR CALUCLATIONS -------------------#
#------------------------------- MAIN PART -----------------------------------#
# V tem delu pripravimo vse potrebne izraèune, in sicer:
#' opisne statistike, kvantilne range in frekvence glede
#' na \predmet, \izvajalca, \program in \letnik študentov za:
#' sedem @komponent v anketi PRED
#' šest @komponent za izvajalca pri predemtih v anketi PRED
#' tri @komponente za predmet v anketi PO
#' @kompetence v anketi PO
#' @Utreznost KT v anketi PO
#' komponente @prakse v anketi PO
# PODATKI ZA PREDMETE (ANKETA PRED) ----------------------#
source("Evalvacija/R/04_Anketa_PRED.R", encoding = "UTF-8")
#---------------------------------------------------------#
# PODATKI ZA IZVAJALCE (ANKETA PRED) ---------------------#
source("Evalvacija/R/05_Izvajalci_PRED.R", encoding = "UTF-8")
#---------------------------------------------------------#
# PODATKI ZA PREDMETE (ANKETA PRED) ----------------------#
source("Evalvacija/R/06_Anketa_PO.R", encoding = "UTF-8")
#---------------------------------------------------------#
###################
# UPDATE 3.9.2018 #
###################
# TRENUTNO, bomo kasneje preuredili.
# Za potrebe Agregatov zapišemo vse ocene tudi za tiste predmete z manj kot
# štirimi odgovori.
# IZVAJALCI PRI PREDMETIH (ANKETA PRED)-------------
# Dodamo še študijsko leto
year <- strsplit(semester.leto, " ")[[1]]
year <- grep("/", year, value = TRUE) # dates
povprecja.izvajalci.programi.brez.cenzure$leto <- year
povprecja.predmeti.programi.PO.brez.cenzure.PO$leto <- year
povprecja.predmeti.programi.brez.cenzure$leto <- year
write.csv2(
povprecja.izvajalci.programi.brez.cenzure,
paste0(
"Evalvacija/results/",
fakulteta,
"/Agregati/izv_agregat_18_19.csv"
)
)
# PREDMETI (ANKETA PO)-----------------
write.csv2(
povprecja.predmeti.programi.PO.brez.cenzure.PO,
paste0(
"Evalvacija/results/",
fakulteta,
"/Agregati/po_agregat_18_19.csv"
)
)
# PREDMETI (ANKETA PRED) ---------------
write.csv2(
povprecja.predmeti.programi.brez.cenzure,
paste0(
"Evalvacija/results/",
fakulteta,
"/Agregati/pred_agregat_18_19.csv"
)
)
#----------------------------- //MAIN PART// ---------------------------------#
#--------------------------- FACULTY DESCRIPTIVE STATISTICS --------------------------------#
# Za potrebe Latex tabel, kjer primerjamo povpreèje posameznega izvajalca ali programa
# s povpreèjem celotne fakultete, za posamezne komponente izraèunamo še to.
# Povpreèje izvajalcev celotne fakultete-----------------------------------
F.avg.izv <-
colMeans(povprecja.izvajalci[c(paste0(vars.izvajalec$cont$vars, "_mean"),
"izvajalec.ocena.SKUPAJ")], na.rm = TRUE)
# For Latex table purposes
F.avg.izv <- round(F.avg.izv, 1)
#------------------------------------------------------------------------#
# Povpreèja izvajalcev pri vseh predmetih------------------------------------
# Povpreèje vsek izvajalcev fakultete in insert v tabelo 1.3 (zadnja vrstica)
# Predmeti, ki imajo dovolj ocen
predmeti.izbor <- povprecja.predmeti$predmet.sifra
# Preverimo kateri izvajalci vse sodelujejo pri doloèenem predmetu (IPP)
izvajalci.izbor <- unique(povprecja.izvajalci$izvajalec.sifra)
# Naredimo Podmnožico
izbor.izvajalci <-
subset(
povprecja.izvajalci,
predmet.sifra %in% predmeti.izbor &
izvajalec.sifra %in% izvajalci.izbor
)
# Izraèunamo povpreèje IPP
izbor.izvajalci.skupaj <-
aggregate(izbor.izvajalci[c(paste0(vars.izvajalec$cont$vars, "_mean"),
"izvajalec.ocena.SKUPAJ")],
by = izbor.izvajalci[c("izvajalec.sifra", "predmet.sifra")],
FUN = mean,
na.rm = TRUE)
# TOTAL Mean of all IPP (izvajalci pri predmetih)
F.avg.ipp <-
colMeans(izbor.izvajalci.skupaj[3:ncol(izbor.izvajalci.skupaj)], na.rm =
TRUE)
#---------------------------------------------------------------------------#
# Povpreèje predmetov (anketa PRED izpitom, anketa PO izpitu, študijska praksa) --------------------
F.avg.pred <-
colMeans(povprecja.predmeti[c(paste0(vars.cours, "_mean"), "predmet.ocena.SKUPAJ")], na.rm = TRUE)
F.avg.po <-
colMeans(povprecja.predmeti.po[c(paste0(vars.cours.po, "_mean"), "predmet.ocena.SKUPAJ")], na.rm = TRUE)
# For latex tabel purposes we wil change the order of components in F.avg.po
F.avg.po.tab <- F.avg.po[c(2:4,length(F.avg.po), 1, 5)]
# Povpreèje študijskih praks
F.avg.prak <-
colMeans(povprecja.predmeti.po[c(paste0(vars.predmet$cont$praksa, "_mean"),
"predmet.ocena.SKUPAJ.praksa")], na.rm = TRUE)
# Povpreèje Ustreznost KT
F.avg.KT <-
colMeans(povprecja.predmeti.po["predmet.ocena.krediti_mean"], na.rm = TRUE)
# Povpreèni Standardni odklon za ustreznost KT
F.avg.sd.KT <-
colMeans(povprecja.predmeti.po["predmet.ocena.krediti_sd"], na.rm = TRUE)
# Povpreèni odstotek odgovorov na lestvici od 1 do 5
F.avg.KT.likert <-
colMeans(povprecja.predmeti.po[paste0("krediti_razporejanje_pct_", 1:5)], na.rm = TRUE)
# Povpreèje kompetence
F.avg.kom <-
colMeans(povprecja.predmeti.po["predmet.ocena.kompetence_mean"], na.rm = TRUE)
# Povpreèni Standardni odklon za kompetence
F.avg.sd.kom <-
colMeans(povprecja.predmeti.po["predmet.ocena.kompetence_sd"], na.rm = TRUE)
F.avg.kom.likert <-
colMeans(povprecja.predmeti.po[paste0("kompetence1_razporejanje_pct_", 1:5)], na.rm = TRUE)
#--------------------------------------------------------------------------------------------#
# Skupna Povpreèja IZVAJLCEV fakultete glede na STOPNJO ------------------------#
Fizv <-
rbind(skupaj = colMeans(povprecja.izvajalci[c(
"ST_STUD",
"N_anket",
"N_anketTotal",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct",
"nipouceval.pct"
)], na.rm = T),
"1" = colMeans(povprecja.izvajalci[povprecja.izvajalci$STOPNJA == 1, c(
"ST_STUD",
"N_anket",
"N_anketTotal",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct",
"nipouceval.pct"
)], na.rm = T),
"2" = colMeans(povprecja.izvajalci[povprecja.izvajalci$STOPNJA == 2, c(
"ST_STUD",
"N_anket",
"N_anketTotal",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct",
"nipouceval.pct"
)], na.rm = T))
#-------------------------------------------------------------------------------------#
# Skupna Povpreèja PREDMETOV fakultete glede na STOPNJO in glede na SEMESTER IZVAJANJA---------
# Anketa PRED
Fpred <-
rbind(
skupaj = colMeans(povprecja.predmeti[c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")], na.rm = T),
"1" = colMeans(povprecja.predmeti[povprecja.predmeti$STOPNJA == 1,
c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")], na.rm = T),
"2" = colMeans(povprecja.predmeti[povprecja.predmeti$STOPNJA == 2,
c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")], na.rm = T),
"prvi_semester" = colMeans(
subset(povprecja.predmeti, SEMESTER_IZV %in% prvi_semester)
[c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")],
na.rm = T
),
"drugi_semester" = colMeans(
subset(povprecja.predmeti, SEMESTER_IZV %in% drugi_semester)
[c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")],
na.rm = T
)
)
# ANKETA PO
Fpo <-
rbind(
skupaj = colMeans(povprecja.predmeti.po[c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")], na.rm = T),
"1" = colMeans(povprecja.predmeti.po[povprecja.predmeti.po$STOPNJA == 1,
c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")], na.rm = T),
"2" = colMeans(povprecja.predmeti.po[povprecja.predmeti.po$STOPNJA == 2,
c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")], na.rm = T),
"prvi_semester" = colMeans(
subset(povprecja.predmeti.po, SEMESTER_IZV %in% prvi_semester)
[c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")],
na.rm = T
),
"drugi_semester" = colMeans(
subset(povprecja.predmeti.po, SEMESTER_IZV %in% drugi_semester)
[c("ST_STUD",
"N_anket",
"sodelujocih.pct",
"zavrnjenih.pct",
"neodzivnih.pct")],
na.rm = T
)
)
#---------------------------------------------------------------------------------#
##################
# 1.8.2019 Se vrnemo k temu delu ####################################
##################
#------------------------------- Poglavje SPLOŠNA METODOLOGIJA -------------------------------------#
#Podatki, ki generirajo vrednosti v latex datoteki metodolosko.pojasnilo. Glej mapo latexkosi
# S funkcijo scan preberemo tex. datoteko metodolosko.pojasnilo.tex
# Gre za poglavje, ki se nahajaa na koncu (skoraj) vsakega PDF poroèila
tex.okvir <-
scan(
"Evalvacija/latexkosi/metodolosko.pojasnilo.tex",
character(0),
sep = "\n",
quiet = TRUE,
encoding = 'UTF-8'
)
tex.okvir.izv <-
scan(
"Evalvacija/latexkosi/metodolosko.pojasnilo.izv.tex",
character(0),
sep = "\n",
quiet = TRUE,
encoding = 'UTF-8'
)
#Številka oz povpreèji za dodiplomski in podpilomski študij za anketo PRED izpitom
## ZIMSKI SEMESTER ##
# število predmetov
metod_XXX <- length(unique(subset(sifrant, SEMESTER_IZV %in% prvi_semester)$IDP))
# število pedagogov
metod_YYY <- length(unique(subset(sifrant, SEMESTER_IZV %in% prvi_semester)$IDPEDAGOGA))
# število izvedb..
metod_UUU <- nrow(subset(sifrant, SEMESTER_IZV %in% prvi_semester))
# number of prepared evaluations for courses
metod_VVV <- metod_XXX
# number of prepared evaluations for lecturers
metod_RRR <- metod_UUU
tex.okvir <- gsub(pattern=":IME:", replacement=fakulteta, x=tex.okvir)
# Tekst v poglavju Metodološko pojasnilo
# da npr. v I. semestru vsak predmet izvaja 2.2 (:RRR:/:XXX:) pedagogov 266/123
method_IZR <- round(metod_RRR/metod_XXX, digits = 1)
#vsak pedagog pa v povpreèju izvaja 2.5 (266/105) predmetov.
method_IZR1 <- round(metod_RRR/metod_YYY, digits = 1)
#Trenutni datum oz stanje izvoza, ki se izpiše pod tabelo v poglavju: Metodološko pojasnilo
date <- format(Sys.time(), "%d.%m.%Y")
# Vprašanje komponente Kompetence
Kompetence.note <- "{\\footnotesize \\textit{* \\guillemotright Tekst vprašanja: V kolikšni meri
ste pri predmetu pridobili prièakovane \\textbf{kompetence}? \\guillemotleft }}"
# Kvantilni rangi
kvan.pojas <- "{\\footnotesize \\textit{* Vrednost za \\guillemotright št.odgovorov\\guillemotleft\\ je kvantilni rang
za odgovarjajoèe vrednosti, vendar ni obarvan, saj gre za administrativni podatek.}}"
kvan.pojas1 <- "{\\footnotesize \\textit{* Gre za vse predmete z vsaj 4 odgovori (tudi predmete drugih programov,
èe so bili izbirni), ki so jih vpisali študenti doloèenega programa. \\newline ** Vrednost za \\guillemotright št.odgovorov\\guillemotleft\\
je kvantilni rang za odgovarjajoèe vrednosti v tabeli 1.1 (položaj predmeta med vsemi predmeti doloèenega programa),
vendar ni obarvan, saj gre za administrativni podatek.}}"
kvan.pojas3 <- c(paste0("{\\footnotesize \\textit{* Vrednost za \\guillemotright št.odgovorov\\guillemotleft\\ je kvantilni rang
za odgovarjajoèe vrednosti v tabeli 1.3 (položaj IPP med vsemi IPP doloèenega programa v pogledu števila vpisanih študentov).
\\newline ** Gre za vse predmete z vsaj 4 odgovori
(vkljuèno s predmeti drugih programov, èe so bili izbirni), ki so jih vpisali študenti doloèenega programa.
\\newline *** \\guillemotright št. IPP\\guillemotleft \\ - število vseh izvajalcev pri predmetih na doloèenem programu
(v povpreèju ima vsak predmet ", method_IZR ," izvajalca).}}"))
##############################################################
# KOMENTARJI PRI POVPREÈJIH IZVAJALCEV HABILITACIJSKA KOMISIJA
# K povpreèni ocenam izvajalcev dodamo še komentarje študentov
# # Uporabimo le v pimeru, da delamo poroèila za habilitacijsko komisijo
# Habilitacijska <- TRUE
# if (Habilitacijska == TRUE) {
# povprecja.izvajalci.habili <-
# merge(
# povprecja.izvajalci,
# data.izvajalci[c(
# "izvajalec.sifra",
# "predmet.sifra",
# "izvajalec.komentar.dobro",
# "izvajalec.komentar.slabo"
# )],
# by = c("izvajalec.sifra", "predmet.sifra"),
# all = T,
# sort = F
# )
# # Ustvarimo csv datoteki, ki ju nato uporabimo za generiranje poroèil TRENDOV in HABILITACIJSKE KOMISIJE
# write.csv2(povprecja.izvajalci.habili,
# paste0("povprecja.izvajalci_",format(Sys.Date(), "%Y"),".csv"))
# write.csv2(povprecja.predmeti, paste0("povprecja.predmeti_",format(Sys.Date(), "%Y"),".csv"))
# }
#############################################################
povprecja.predmeti <- merge(povprecja.predmeti, poNLurkerji, by = "predmet.sifra", all = TRUE, sort = FALSE)
#----------------------------------- TRENDI ZA ŠTUDIJSKE PROGRAME PO PREMDETIH ------------------------------#
# Tredni študijskih programov èlanice po predmetih
# Za vsako leto želimo imeti podatke posebej, da jih zapišemo v skupno mapo
trendi.prog.predmeti <- TRUE
if (trendi.prog.predmeti == TRUE) {
# Dodamo še stolpec let po katerem bomo filtrirali trende
year <- strsplit(semester.leto, " ")[[1]]
year <- grep("/", year, value = TRUE) # dates
povprecja.predmeti.programi$leto <- year
povprecja.predmeti.programi.PO$leto <- year
# Anketa PRED------------------------------
#(dodamo letnico da bo razvidno
# za katero leto imamo podatke)
write.csv2(
povprecja.predmeti.programi,
paste0(
"povprecja.predmeti.programi.pred.",
as.numeric(format(Sys.Date(), "%Y")) - 1,
"_",
format(Sys.Date(), "%Y"),
".csv"
))
# Anketa PO-----------------------
write.csv2(
povprecja.predmeti.programi.PO,
paste0(
"povprecja.predmeti.programi.po.",
as.numeric(format(Sys.Date(), "%Y")) - 1,
"_",
format(Sys.Date(), "%Y"),
".csv"
))
# FAKULTETA-------------------------
# Zapisemo se povprecja za fakulteto,
# ki jjh bomo zapisali v latex tabelo
# Najprej pripravimo podatke
F.tr.df <- c(F.avg.pred, F.avg.po, F.avg.prak["predmet.ocena.SKUPAJ.praksa"])
names(F.tr.df)[8] <- "predmet.ocena.SKUPAJ.pred"
names(F.tr.df)[23] <- "predmet.ocena.SKUPAJ.po"
colnames(F.tr.df) <-
# Write
write.csv2(
F.tr.df,
row.names = names(F.tr.df),
paste0(
"povprecja.fakultete.",
as.numeric(format(Sys.Date(), "%Y")) - 1,
"_",
format(Sys.Date(), "%Y"),
".csv"
)
)
}
#--------------------------------- //TRENDI ZA ŠTUDIJSKE PROGRAME PO PREMDETIH// ----------------------------#
###############################################################################
# 19.1.2019
# trenutno bomo tu ustvarili funkcijo, ki bo služila za izrisovanje latex tabel pri
# IZDELAVI PDF POROÈIL ZA ŠTUDIJSKE PROGRAME in FAKULTETO
# Sicer je že tako ali tako preveè kode, ampak bomo naknadno vse preuredili
# ANKETA PRED
tb.lat <-
function(data,
tabname,
row.just,
namen = "PRED",
Agregati = FALSE,
agregatNote = FALSE) {
# Funkcija sprejme podatkovni okvir, ime tabele,
# velikost tabele in število stolpcev
# First check if we are doing latex table
# for the coruse or for the lecturer
# due to different columns in latex table
if (namen == "PRED") { # PRED
n.col = c("c|", rep_len("c", 7), "|c")
note <- paste("{\\footnotesize \\textit{}}")
} else if (namen == "PO") { # PO
n.col = c("c|", rep_len("c", 3), "|c", "|c", "c")
note <- paste(
"{\\footnotesize \\textit{* {\\color{Orange}Oranžno}
so oznaèena {\\color{Orange}opozorilna} odstopanja
({\\color{Orange}2.4-2.6}) in
({\\color{Orange}3.4-3.6}),
{\\color{BrickRed}rdeèe} pa
{\\color{BrickRed}kritièna}
odstopanja (pod {\\color{BrickRed}2.4})
in (nad {\\color{BrickRed}3.6}). }}"
)
} else if (namen == "IPP") { # Izvajalci pri predmetih
n.col = c("c|", rep_len("c", 6), "|c")
note <- paste(
"{\\footnotesize \\textit{*
št. IPP - število vseh
izvajalcev pri predmetih na
doloèenem programu.}}"
)
} else {
# If we are doing tables for Trends
n.col = c(rep_len("c", ncol(data)))
note <- NULL
}
# Preverimo ali delamo Latex tabelo za potrebe Agregatov
if (Agregati == TRUE) {
if ("Povp. a" %in% colnames(data) & "Povp. b" %in% colnames(data)) {
n.col = c(rep_len("c", ncol(data) - 2), "|c", "c")
} else if ("Povp. a" %in% colnames(data) & !"Povp. b" %in% colnames(data)) {
n.col = c(rep_len("c", ncol(data) - 1), "|c")
} else {
n.col = c(rep_len("c", ncol(data)))
}
note <- NULL
}
# Update 2.11.2019
# Pri agregatih PROGRAMOV bomo v tabeli
# kjer predstavljamo kreditne toèke
# Dodali še opombo pod tabelo glede
# barvanja
if (agregatNote == TRUE) {
note <- paste(
"{\\footnotesize \\textit{* {\\color{Orange}Oranžno}
so oznaèena {\\color{Orange}opozorilna} odstopanja
({\\color{Orange}2.4-2.6}) in
({\\color{Orange}3.4-3.6}),
{\\color{BrickRed}rdeèe} pa
{\\color{BrickRed}kritièna}
odstopanja (pod {\\color{BrickRed}2.4})
in (nad {\\color{BrickRed}3.6}). }}"
)
}
# Latex table
table <- capture.output(
Hmisc::latex(
data,
caption = tabname,
rowlabel = "",
file = "",
where = "H",
rowlabel.just = row.just,
multicol = FALSE,
longtable = TRUE,
lines.page = 1000, # table will be 1000 line long per page
insert.bottom = note,
col.just = n.col
)
)
return(table)
}
#----------------------#
# Update 22.12.2019
# Za potrebe poroèil habilitacijske komisije
# moramo k povpreèjem izvajalcev dodati še
# komentarje izvajalcev pri posameznem predmetu
# vse skupaj pa zapisati v bazo iz katere
# bomo nato v habilitacijskem poroèilu
# za posamezen predemt zapisali komentarje
izvajalci.komentarji <-
merge(
povprecja.izvajalci,
data.izvajalci[c(
"izvajalec.sifra",
"predmet.sifra",
"izvajalec.komentar.dobro",
"izvajalec.komentar.slabo"
)],
by = c("izvajalec.sifra", "predmet.sifra"),
all = T,
sort = F
)
year <- strsplit(semester.leto, " ")[[1]]
year <- grep("/", year, value = TRUE) # dates
year <- gsub("/", "-", year) # dates
izvajalci.komentarji$leto <- year
# Ustvarimo csv datoteki, ki ju nato uporabimo za generiranje poroèil TRENDOV in HABILITACIJSKE KOMISIJE
write.csv2(izvajalci.komentarji, paste0("Evalvacija/results/",fakulteta,"/Trendi/izvajalci.komentarji.csv"))