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// -------------------------------#