480 lines
16 KiB
R
480 lines
16 KiB
R
# Created by Miha 16.3.2020
|
|
|
|
#----------------- ENCODING 1KA STREŽNNIK ----------------#
|
|
# Nastavimo encoding za potrebe strežnika
|
|
# Za izpis danskih znakov potrebujemo danski encoding
|
|
#' @NUJNO @POTREBNO!!! Drugače latex ne bo izpisal danskih
|
|
# znakov v poročilu
|
|
Sys.setlocale(category = "LC_ALL", locale = "norwegian")
|
|
#--------------- //ENCODING 1KA STREŽNNIK// --------------#
|
|
|
|
|
|
#------------- List packages we need -----------------#
|
|
# List packages we want
|
|
# install packages from CRAN
|
|
p_needed <-
|
|
c('tools',
|
|
'Cairo',
|
|
'gridExtra',
|
|
'ggplot2',
|
|
'grid',
|
|
'scales',
|
|
'memisc')
|
|
|
|
# Load the packages
|
|
lapply(p_needed, require, character.only = TRUE)
|
|
#------------ //List packages we need// --------------#
|
|
|
|
|
|
#--------------- FOLDERS WHERE PDF WILL BE SAVED ---------------------#
|
|
# Tukaj bomo shranili končni PDF
|
|
dir.create('modules/mod_EVOLI/results', showWarnings = FALSE)
|
|
# Slike Grafa, ki jo bomo shranili s pomočjo funkcije pdf
|
|
# Ti sliko bomo nato s pomočjo latex funkcije "includegraphics"
|
|
# vstavili v PDF poročilo narejeno s pomočjo tools::texi2pdf
|
|
dir.create('modules/mod_EVOLI/results/slike', showWarnings = FALSE)
|
|
#--------------- FOLDERS WHERE PDF WILL BE SAVED ---------------------#
|
|
|
|
#----------------------------- IMPORT DATA ----------------------------#
|
|
podatki <-
|
|
read.csv2(
|
|
"modules/mod_EVOLI/temp/pem.csv",
|
|
sep = ";",
|
|
header = T,
|
|
fill = T,
|
|
stringsAsFactors = FALSE,
|
|
encoding = 'UTF-8'
|
|
)
|
|
# Ker so baze iz 1KA, bomo prvo vrstico odstranili
|
|
if (podatki[1, 1]==("Ustreznost") |
|
|
podatki[1, 1]==("Relevance")) {
|
|
podatki <- podatki[2:nrow(podatki), ]
|
|
}
|
|
|
|
|
|
# # ker delamo za posameznika v datoteki pa imamo dva,
|
|
# # najprej izberemo prvo vrstico.
|
|
# Drugače javi error
|
|
podatki <- podatki[1, ]
|
|
# ####
|
|
#--------------------------- //IMPORT DATA// --------------------------#
|
|
|
|
# POMEMBNO!!!
|
|
#---------------------------- RECODE DATA -----------------------------#
|
|
# Na podatkih, ki jih pripravimo s spodnjo skripto potem delamo naprej
|
|
# Sintaksa je narejena po Sintaksa Personal Energy Meter - FDV.xlsx
|
|
source("modules/mod_EVOLI/R/PEM_sintaks.R")
|
|
#---------------------------- RECODE DATA -----------------------------#
|
|
|
|
|
|
|
|
#--------------------- GRAFIKON Moj Employeeship odnos in vedenje -----------------------#
|
|
# Večino kode za izdelaov grafikona smo vzeli iz kode, ki generira poročilo
|
|
# za PEQM-SL (Evoli_slo.R) na 1KA strežniku
|
|
|
|
# Za potrebe izrisa grafikona (ggplot) podatke oblikujemo v
|
|
# podatkovni okvir
|
|
value <- c(COM, RES, LOY, INI,
|
|
PRO, REL, QLT, CPT,
|
|
FLX, IMP, ENE)
|
|
names <-
|
|
c("Engagement",
|
|
"Ansvar",
|
|
"Loyalitet",
|
|
"Initiativ",
|
|
"Produktivitet",
|
|
"Relationer",
|
|
"Kvalitet",
|
|
"Faglig kompetence",
|
|
"Fleksibilitet",
|
|
"Implementering",
|
|
"Energi")
|
|
# Podatkovni okvir
|
|
df <- data.frame(value, names, stringsAsFactors = FALSE)
|
|
|
|
# Ker želiimo, da se labele oz imena v grafikonu prikažejo
|
|
# v enakem vrstnem redu, kot smo to zapisali v vektroju
|
|
# names, moramo spremeniti lastnosti vektorja names
|
|
# in sicer uporabimo factor in uredimo levels
|
|
df$names <- factor(df$names, levels = rev(unique(df$names)))
|
|
df$names = factor(
|
|
df$names,
|
|
levels = c(
|
|
"Energi",
|
|
"Implementering",
|
|
"Fleksibilitet",
|
|
"Faglig kompetence",
|
|
"Kvalitet",
|
|
"Relationer",
|
|
"Produktivitet",
|
|
"Initiativ",
|
|
"Loyalitet",
|
|
"Ansvar",
|
|
"Engagement"
|
|
),
|
|
ordered = TRUE
|
|
)
|
|
|
|
# Manjkajočih vrednosti ne sme biti
|
|
# Drugače Grafikona ne izrišemo
|
|
if (any(!is.na(df$value))) {
|
|
|
|
# Izris PDF
|
|
cairo_pdf(
|
|
paste('modules/mod_EVOLI/results/slike/EQ_lineplot.pdf', sep = ''),
|
|
family = 'sans',
|
|
pointsize = 15,
|
|
width = 7.5,
|
|
height = 8.5
|
|
)
|
|
|
|
# Začnemo s sestavljenjem/izdelavo grafikona
|
|
p <-
|
|
ggplot(data = df, aes(y = value, x = names, group = 1)) +
|
|
# Najprej naredimo Točkovni diagram, kjer bomo v nadaljevanju
|
|
# posamezne točke med seboj povezali
|
|
# Točke po želji tudi obarvammo z modro barvo oz.Navy Blue
|
|
# Doličimo tudi velikost točk in obliko (krog)
|
|
geom_point(
|
|
color = I("blue"),
|
|
shape = 21,
|
|
lwd = 3,
|
|
fill = "blue") +
|
|
# Točke povežemo
|
|
geom_line(group = I(1), color = I("blue")) +
|
|
# Vertikalna postavitev grrafa in brez label, saj bomo
|
|
# labele dodali svoje
|
|
theme_bw() + # white background and gray grid lines
|
|
coord_flip() +
|
|
xlab("") +
|
|
ylab("") +
|
|
# gray background color and white grid lines
|
|
theme_gray() +
|
|
# Dodatmo velikost teksta po želji naročnika
|
|
theme(axis.text = element_text(size = 11, face = "bold")) +
|
|
# Prav tako pa uredimo vrednosti (labele) na y ossi po
|
|
# željo naričnika.
|
|
scale_y_continuous(
|
|
expand = c(0, 0),
|
|
minor_breaks = seq(0, 10, 0.5),
|
|
breaks = seq(min(0, 5), max(10), by = 2.5),
|
|
limits = c(0, 10),
|
|
oob = rescale_none,
|
|
# Dvojna x os
|
|
sec.axis = dup_axis(),
|
|
# Na željo naročnika decimalno piko nadomestimo z decimalno vejico
|
|
labels = gsub("\\.", ",", formatC(seq(min(0, 5), max(10), by = 2.5), format = 'f', digits = 1))
|
|
) +
|
|
# Dodatno dodamo vertikalne črte
|
|
theme(
|
|
panel.border = element_blank(),
|
|
plot.background = element_rect(fill = "white"),
|
|
panel.grid.minor = element_line(colour = "gray", size = 0.1)
|
|
) +
|
|
geom_hline(yintercept = 0.0,
|
|
col = "black",
|
|
alpha = 0.6) +
|
|
geom_hline(yintercept = 2.5,
|
|
col = "black",
|
|
alpha = 0.6) +
|
|
geom_hline(yintercept = 7.5,
|
|
col = "black",
|
|
alpha = 0.6) +
|
|
geom_hline(yintercept = 10.0,
|
|
col = "black",
|
|
alpha = 0.6) +
|
|
# NA željo naročnika uredimo velikost grafikona
|
|
theme(plot.margin = unit(c(2, 2, 0, 3.3), "cm"))
|
|
|
|
# Naročnik želi imeti celoten grafikon v okvirju ( tako tekst kot graf) zato te okvirje
|
|
# ročno uredimo s funkcijo annotation_custom
|
|
# Poleg tega dodamo še sivo ozadje pri novem okvirju (sivo ozadje za labele an y osi:
|
|
# Uresničevanje, Produktivnost, itd.)
|
|
pp = p +
|
|
# Dodamo še sivo ozadje za levo stran (labele)
|
|
annotate(
|
|
"rect",
|
|
xmin = 0.4,
|
|
xmax = 11.6,
|
|
# ymin Pravokotnik na desno stran grafa (- y os)
|
|
# Regulira dolžino širino
|
|
ymin = -6.17,
|
|
ymax = 10,
|
|
alpha = 0.5,
|
|
fill = "gray"
|
|
) +
|
|
# Nato pa začnemo z novimi črtami: dodelan grafikon
|
|
# Vertikalna črta v level v kotu
|
|
annotation_custom(
|
|
grob = linesGrob(gp = gpar(col = "gray")),
|
|
xmin = 0.4,
|
|
xmax = 11.6,
|
|
# ymin Pravokotnik na desno stran grafa (- y os)
|
|
# Regulira dolžino širino
|
|
ymin = -6.17,
|
|
ymax = -6.17
|
|
) +
|
|
# Horizontalna črta na vrhu
|
|
annotation_custom(
|
|
grob = linesGrob(gp = gpar(col = "gray")),
|
|
xmin = 11.6,
|
|
xmax = 11.6,
|
|
# ymin Pravokotnik na desno stran grafa (- y os)
|
|
# Regulira dolžino širino
|
|
ymin = -6.17,
|
|
ymax = 10
|
|
) +
|
|
# Horizontalna črta na dnu
|
|
annotation_custom(
|
|
grob = linesGrob(gp = gpar(col = "gray")),
|
|
xmin = 0.4,
|
|
xmax = 0.4,
|
|
# ymin Pravokotnik na desno stran grafa (- y os)
|
|
# Regulira dolžino širino
|
|
ymin = -6.17,
|
|
ymax = 0
|
|
) +
|
|
# Dodamo markerje pri drugi x osi oziroma pri osi nad grafom.
|
|
# Markerji naj bodo na vrednostih 0, 2.5, 5.0, 7.5, 10.0.
|
|
# Gre za vertikalne črte/črtice kot pomoč za labele, ki jih bomo
|
|
# ročno vstavili na vrhu grafa
|
|
annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 0, ymax = 0) +
|
|
annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 2.5, ymax = 2.5) +
|
|
annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 5.0, ymax = 5.0) +
|
|
annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 7.5, ymax = 7.5) +
|
|
annotation_custom(grob = linesGrob(), xmin = 11.6, xmax = 11.66, ymin = 10.0, ymax = 10.0) +
|
|
# Dodatne vertikalne črte za potrebe naročnika
|
|
geom_hline(yintercept = 5, size = 0.6) +
|
|
geom_hline(yintercept = 0.5, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 1.0, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 1.5, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 2.0, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 3.0, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 3.5, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 4.0, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 4.5, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 5.5, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 6.0, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 6.5, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 7.0, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 8.0, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 8.5, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 9.0, size = 0.1, col="gray") +
|
|
geom_hline(yintercept = 9.5, size = 0.1, col="gray") +
|
|
# Da sivo ozadnje ne prekrije modre barve, ?e nekrat naredimo modro ?rto in to?ke
|
|
geom_point(
|
|
color = I("blue"),
|
|
shape = 21,
|
|
lwd = 3,
|
|
fill = "blue"
|
|
) +
|
|
geom_line(group = I(1),
|
|
color = I("blue"),
|
|
size = 1)
|
|
|
|
# Na koncu izrišemo željen graf (torej vertiklane črte zunaj
|
|
# margin grafa)
|
|
gt <- ggplot_gtable(ggplot_build(pp))
|
|
gt$layout$clip[gt$layout$name=="panel"] <- "off"
|
|
grid.draw(gt)
|
|
|
|
# Zaključimo in shranimo pdf
|
|
dev.off()
|
|
|
|
# S pomočno uporabe latex kode shranimo predhodno generiran
|
|
# PDF grafikon v vektor, ki ga bomo kasneje uporabili
|
|
# pri sestavljanju PDF poročila
|
|
tex.EQ_lineplot <- c(
|
|
paste(
|
|
"\\chapter[\\Large \\textbf Min Employeeship holdning og adf{\\ae}rd]{MIN EMPLOYEESHIP \\\\ \\large{Min Employeeship holdning og adf{\\ae}rd}}",
|
|
"\\begin{figure}[H]",
|
|
paste0(
|
|
"\\centerline{\\includegraphics[width=1\\textwidth]{slike/EQ_lineplot.pdf}}"
|
|
),
|
|
"\\end{figure}"
|
|
)
|
|
)
|
|
# V primeru manjkajolih vrednosti grafikone ne izrišemo
|
|
} else {
|
|
tex.EQ_lineplot <- NULL
|
|
}
|
|
#-------------------- //GRAFIKON Moj Employeeship odnos in vedenje// --------------------#
|
|
|
|
|
|
#----------------------------------- PODATKI NA NASLOVNICI ----------------------------------------#
|
|
# Zapišemo še ime respondenta, organizacije in datum testiranja
|
|
# Vektor vrednosti, ki nas ne zaimajo
|
|
# in s elahko pojavljajo v 1KA bazi
|
|
junk <- c("-1", "-2", "-3", "-4", "-5")
|
|
|
|
# Izpis imena in priimka respondenta na naslovnici
|
|
# Ime in priimek v angleški različici služi tudi kot nagovor.
|
|
# A le če podatki obstajajo
|
|
# Ker če ni podatkov za ime respondenta, tudi ostalih podatkov ni
|
|
if (!is.null(podatki$Q1)) {
|
|
if (length(podatki$Q1) > 0 & !(podatki$Q1 %in% junk)) {
|
|
# Ime (Q1) in priimek (Q2)
|
|
respondent <- paste(podatki[["Q1"]], podatki[["Q2"]], sep = " ")
|
|
# V kolikor nastopajo šumniki moramo zaradi encodinga strežnika, ki
|
|
# je angleški le te ustrezno nadomestiti z encoding znaki,
|
|
# drugače se ne izpišejo pravilno
|
|
# Mali č
|
|
respondent <- gsub("\u010D", "č", respondent, fixed = TRUE)
|
|
# Velik Č
|
|
respondent <- gsub("\u010C", "Č", respondent, fixed = TRUE)
|
|
# Mali ž
|
|
respondent <- gsub("\u017E", "ž", respondent, fixed = TRUE)
|
|
# Velik Ž
|
|
respondent <- gsub("\u017D", "Ž", respondent, fixed = TRUE)
|
|
# Mali š
|
|
respondent <- gsub("\u0161", "š", respondent, fixed = TRUE)
|
|
# Velik Š
|
|
respondent <- gsub("\u0160", "š", respondent, fixed = TRUE)
|
|
# Mali đ
|
|
respondent <- gsub("\u0111", "đ", respondent, fixed = TRUE)
|
|
# Velik đ
|
|
respondent <- gsub("\u0110", "Đ", respondent, fixed = TRUE)
|
|
} else {
|
|
respondent <- " "
|
|
}
|
|
|
|
# Organisation
|
|
if (length(podatki$Q3) > 0 & !(podatki$Q3 %in% junk)) {
|
|
# izpis osebe, ki je pripravila poročilo
|
|
Organisation <-
|
|
podatki[["Q3"]]
|
|
# V kolikor nastopajo šumniki moramo zaradi encodinga strežnika, ki
|
|
# je angleški le te ustrezno nadomestiti z encoding znaki,
|
|
# drugače se ne izpišejo pravilno
|
|
# Mali č
|
|
Organisation <- gsub("\u010D", "č", Organisation, fixed = TRUE)
|
|
# Velik Č
|
|
Organisation <- gsub("\u010C", "Č", Organisation, fixed = TRUE)
|
|
# Mali ž
|
|
Organisation <- gsub("\u017E", "ž", Organisation, fixed = TRUE)
|
|
# Velik Ž
|
|
Organisation <- gsub("\u017D", "Ž", Organisation, fixed = TRUE)
|
|
# Mali š
|
|
Organisation <- gsub("\u0161", "š", Organisation, fixed = TRUE)
|
|
# Velik Š
|
|
Organisation <- gsub("\u0160", "š", Organisation, fixed = TRUE)
|
|
# Mali đ
|
|
Organisation <- gsub("\u0111", "đ", Organisation, fixed = TRUE)
|
|
# Velik đ
|
|
Organisation <- gsub("\u0110", "Đ", Organisation, fixed = TRUE)
|
|
} else {
|
|
Organisation <- " "
|
|
}
|
|
|
|
# Date of testing
|
|
if (length(podatki$itime) > 0 & !(podatki$itime %in% junk)) {
|
|
date <- podatki[["itime"]] # izpis osebe, ki je pripravila poročilo
|
|
} else {
|
|
date <- " "
|
|
}
|
|
|
|
# V primeru da ni podatkov
|
|
} else {
|
|
respondent <- " "
|
|
Organisation <- " "
|
|
date <- " "
|
|
}
|
|
|
|
|
|
#----------------------------------- PODATKI NA NASLOVNICI ----------------------------------------#
|
|
|
|
|
|
#-------------------------------- ZAČNEMO S PRIPRAVO IN SESTAVO PDF DOKUMENTA ---------------------------------#
|
|
# Sledi del, kjer bomo vse dele sestavili v celoto, torej latex in R kodo ter s pomočjo
|
|
# tools::texi2pdf generirali PDF poročilo
|
|
|
|
# LATEX KOSI ------------------------------------------------------
|
|
#=================================================================#
|
|
# Najprej s funkcijo scan preberemo latex datoteke
|
|
# Glava dokumenta, kjer definiram celotno strukturo latex dokumenta
|
|
tex.glava <-
|
|
scan(
|
|
"modules/mod_EVOLI/latexkosi/Pem_meter/glava-PEM_dan.tex",
|
|
character(0),
|
|
sep = "\n",
|
|
quiet = TRUE,
|
|
encoding = 'UTF-8'
|
|
)
|
|
|
|
# Gre kodo ki vsebuje dodatno vsebino in TABELE z vnosnimi formami!
|
|
podatkovni.okvir <-
|
|
scan(
|
|
"modules/mod_EVOLI/latexkosi/Pem_meter/pem_vseb_tabele_dan.tex",
|
|
character(0),
|
|
sep = "\n",
|
|
quiet = TRUE,
|
|
encoding = 'UTF-8'
|
|
)
|
|
|
|
# Ime in priimek respondenta na naslovni strani
|
|
tex.glava <-
|
|
gsub(
|
|
pattern = '!name!',
|
|
replacement = Hmisc::latexTranslate(respondent),
|
|
x = tex.glava
|
|
)
|
|
|
|
# Organizacija v kateri je zaposlen
|
|
tex.glava <-
|
|
gsub(
|
|
pattern = '!organisation!',
|
|
replacement = Hmisc::latexTranslate(Organisation),
|
|
x = tex.glava
|
|
)
|
|
# Ter datum, ko je bil anketiranje izvedeno
|
|
tex.glava <-
|
|
gsub(
|
|
pattern = '!date!',
|
|
replacement = Hmisc::latexTranslate(date),
|
|
x = tex.glava
|
|
)
|
|
|
|
# Zaključimo dokument: \end{document}
|
|
tex.noga <-
|
|
scan(
|
|
"modules/mod_EVOLI/latexkosi/Pem_meter/pem-noga.tex",
|
|
character(0),
|
|
sep = "\n",
|
|
quiet = TRUE
|
|
)
|
|
|
|
#---------------------- //LATEX KOSI// --------------------#
|
|
|
|
#---------- SESTAVA VSEH DELOV V CELOTO ----------#
|
|
# Posamezne
|
|
tex.izbor <- c(tex.glava,
|
|
tex.EQ_lineplot,
|
|
"\\newpage",
|
|
podatkovni.okvir,
|
|
tex.noga)
|
|
#-------- //SESTAVA VSEH DELOV V CELOTO// --------#
|
|
|
|
|
|
#--------- USTREZNO UREDIMO ŠE POTI IN IME KONČNEGA POROČILA ----------#
|
|
# Nastavimo pot, kamor bomo shranili latex datoteko
|
|
Rdirektorij <- getwd()
|
|
setwd(paste(Rdirektorij, "modules/mod_EVOLI/results", sep = "/"))
|
|
# Zapišemo Tex file s funkcijo cat, saj želimo izpisati
|
|
# celotno latex codo
|
|
cat(tex.izbor,
|
|
file = paste0('PEM-DK.tex'),
|
|
sep = '\n')
|
|
# Tex oziroma file generiran v prejšnjem primeru
|
|
# Pa nato pretvorimo v PDF
|
|
tools::texi2pdf(file = paste0("PEM-DK.tex"),
|
|
quiet = TRUE,
|
|
clean = TRUE)
|
|
# V primeru, da poročilo generiramo večkrat (popravki terstiranje)
|
|
# Še enkrat nastavimo pot v prvotni direktorij, drugače
|
|
# bo pot napačna, saj smo jo za potrebe geneiranja latex oz tex.
|
|
# fila spremenili
|
|
setwd(Rdirektorij)
|
|
#------- //USTREZNO UREDIMO ŠE POTI IN IME KONČNEGA POROČILA// --------#
|
|
|
|
#------------------------------ //ZAČNEMO S PRIPRAVO IN SESTAVO PDF DOKUMENTA// -------------------------------#
|