##################################################
## Zaciname s R #################################
##################################################

# Vhodny zejmena ve dvou situacich
     # Opakovane provadeni podobnych postupu
     # Zachyceni kompletniho postupu
            #  zejmena pri manipulaci s datovym souborem
# Spojovani datasetu
# Filtrovani
# Souhrny
# Rekodovani promennych
# Temer neomezene moznosti - „packages“
# Analyza
# Silna komunita (stackoverflow, R bloggers,…)
#vyuziti AI pro upravu kodu


#Nevyhody +-
# Ovladani textem („programovani“) - objektovy jazyk
     # Ne úplne intuitivni jazyk
     # Bez opakovaneho pouzivani rychla ztrata schopnosti!!!
# Nepracuje s nim kazdy
# Kompatibilita ruznych packages s ruznymi verzemi
# Omezene moznosti nahlizeni do dat
# Snadne vyrobit/prehlednout chybu
# Rychlost slozitejšich operaci (+ chybi indikator „hotovosti“)
# Vystupy (moznost integrace s LaTex)


#OBJEKT JAKO ZAKLADNI PRVEK
#objekt nejprve musi byt vytvoren, pokud napisu pouze vlak, tak R si mysli ze je to objekt, ale nema k nemu zadny obsah, 
#tak provedeni takoveho kodu k nicemu nevede
vlak

#abych vytvoril objekt, musim ho necim naplnit napsanim kodu, v tomto pripade ho jednoduchym kodem naplnim slovem vlak, 
#pokud v R pisu nejaky text, musi byt v uvozovkach, co neni v uvozovkach, o tom r predpoklada, ze ma nejakou funkci
#kod se spousti oznacenim tazenim mysi nebo 3xklikem na radek a nasledne stisknutim ctrl+enter
##radky s kodem maji ve skriptu cernou barvu, komentare zelenou. Napsani komentere se docili napsanim # (pravy alt+x)
#### jmeno objektu vzdy bez diakritiky, mezer a specialnich znaku, namisto mezery pouzivejte _ (shift + pomlcka)
## objekt vznika nejakou operaci (prikazem) nebo "definici"
## objekt a operace jsou oddeleny pomoci znaku <- (jde o 2 znaky, prvni lze napsat pomoci praveho Altu a otazniku obvykle umisteneho hned nad pravym altem, pomlcka je normalni pomlcka nebo minus z numericke klavesnice)
                                              #nebo lze pouzit =
#objekt  operator  definice
  vlak     <-       "vlak"
  vlak     =        "vlak"

# vytvoreny objekt se objevi v pravo nahore v okne environment

# uplne stejne to funguje pri nacitani dat
library(foreign) # pro nektere prikazy potrebujeme nejprve zapnout knihovnu (nektere knihovny bude treba nejprve nainstalovat)
  #objekt  operator  definice
                    #funkce       #cesta k souboru - k nalezeni v pruzkumnikovi                              #upresneni funkce
  data_ess  =       read.spss("C:\\Users\\182527\\Downloads\\PopulistAttitutes_CZ_2ndwave_originalfile.sav", use.value.labels = TRUE, to.data.frame = FALSE, variable.labels=T)

  
#ackoli dudeme pracovat s objekty, ktere jsou tvoreny cisly a pismeny, tak objektem muze byt i obrazek, mapa, video atd.

#objekt muze byt tvoren vice prvky, v tom pripade mluvime o tzv. vektoru
#zde je objekt vytvaren pomoci oparace c (Concatenate function), ktera shlukne vice prvku do jednoho objektu
#objekt  operator  prikaz
vlak      <-          c("lokomotiva", "vagon", "vagon", "vagon")
# neni mozne aby se v R dva objekty jmenovaly stejne, pokud nechame vytvorit novy objekt se jmenem jiz existujiciho objektu, tak ten puvodni objekt je prepsan a ztracen
#R je citlive na male a velke pismena, takze muzeme novy objekt vytvorit treba pod jmenem Vlak
Vlak <- c("lokomotiva", "vagon", "vagon", "vagon")
# takovy postup nedoporucuju, protoze ve fontu R je u rady pismen tezko rozlisitelne, zda je velke nebo male
#puvodnimu objektu prejmenovani nove vznikleho zivot nevrati, pro jeho obnoveni musime spustit kod znovu

#vytvorte objekt-vektor trida pro nas vlak, lokomotove dejte jako oznaceni tridy 0, vagonum pak 1 nebo 2


#pokud je jeden z prvku vektoru text, tak je za text povazovan kazdy prvek vektoru
pocet_cestujicich <- c("nikdo", 55, 32,100)

pocet_cestujicich + 1

platici <- c(0, 53, 27, 96)
nacerno <- c(0, 2, 5, 4)

platici + nacerno

#pri vytvareni objektu je potreba dodrzovat poradi, vznikajici objekt je vlevo a zpusob vytvoreni je za operatorem
platici + nacerno = celkem #spatne
celkem = platici + nacerno #spravne


#kombinaci vektoru muze vzniknout data.frame (v podstate to co zname pod pojmem tabulka)
data.frame(  vlak = c("lokomotiva", "vagon", "vagon", "vagon"), platici =c(0, 53, 27, 96), nacerno = c(0, 2, 5, 4))
vlak_komplet <- data.frame(  vlak = c("lokomotiva", "vagon", "vagon", "vagon"), platici =c(0, 53, 27, 96), nacerno = c(0, 2, 5, 4))

#pri praci s data.frame je potreba pri identifikaci objektu pouzit jmeno objektu, znak $ (napise se pravym altem + ?) a jmeno sloupce
vlak_komplet$platici
vlak_komplet$platici + vlak_komplet$nacerno
vlak_komplet$cestujici = vlak_komplet$platici + vlak_komplet$nacerno
vlak_komplet



#nacteni dat z SPSS, pozor na prikaz use.value.label=F, urcuje, jestli se nahraji popisky dat, nebo jejich ceslne zaznamenani


duben  <- read.spss("C:\\Users\\182527\\vyuka\\kvanti_kurz\\dataverse_files\\nase_spolenost_duben_2025_uryvek.sav", use.value.label=FALSE, to.data.frame=TRUE) #, reencode = "windows-1250"
duben_l  <- read.spss("C:\\Users\\182527\\vyuka\\kvanti_kurz\\dataverse_files\\nase_spolenost_duben_2025_uryvek.sav", use.value.label=T, to.data.frame=TRUE) #, reencode = "windows-1250"
str(duben)
head(duben)
attr(duben$w5_pol_trust_9, "value.labels")


names(duben) 


#rekodovani
# když potřebujeme upravit puvodni promennou - zmensit pocet kategorii, sloucit promenne, apod.

#sduvera
#nejprve je potreba se podivat na puvodni hodnoty (a v dotazniku na to, co puvodni hodnoty znamenaji)
table(duben$w5_pol_trust_9)

#rekodovani do ciselne promenne
duben$duvera <- NA #nejprve vyrobime promennou a vsechny jeji hodnoty nastavime na NA - missing values
duben$duvera[duben$w5_pol_trust_9 == 1  ] <- 1
duben$duvera[duben$w5_pol_trust_9 == 2 ] <- 1 # potom postupne zaplnime pripady platnymi hodnotami na zaklade hodnot puvodni promenne
duben$duvera[duben$w5_pol_trust_9 == 3  ] <- 2                ##|duben$w5_pol_trust_9 == 98
duben$duvera[duben$w5_pol_trust_9 == 4 |duben$w5_pol_trust_9 == 5 ] <- 3

#kontrola vystupu
table(duben$duvera) #tabulka nam ukaze, jestli odovidaji pocty v zamyslenych kategoriich
summary(duben$duvera)  #summary nám ukaze pocet chybejicich hodnot




## rekodovani do  dummy promenne (napr. pro ucely regresni analyzy)
attr(duben$w5_t_VEK_6, "value.labels")
duben$vek_do19 <- 0
duben$vek_do19[duben$w5_t_VEK_6 == 1  ] <- 1 #vybrana kategorie je 1, zbytek 0
duben$vek_19_39 <- 0
duben$vek_19_39[duben$w5_t_VEK_6 == 2 |duben$w5_t_VEK_6 == 3 ] <- 1 #vybrana kategorie je 1, zbytek 0
duben$vek_40_64 <- 0
duben$vek_40_64[duben$w5_t_VEK_6 == 4 |duben$w5_t_VEK_6 == 5 ] <- 1 #vybrana kategorie je 1, zbytek 0
table(duben$vek_40_64)


###factor - kategoricka promenna
duben$duveraf <- NA
duben$duveraf[duben$w5_pol_trust_9 == 1 |duben$w5_pol_trust_9 == 2 ] <- "duvera"  
duben$duveraf[duben$w5_pol_trust_9 == 3 |duben$w5_pol_trust_9 == 98 ] <- "ani ano, ani ne"
duben$duveraf[duben$w5_pol_trust_9 == 4 ] <- "neduvera"
table(duben$duveraf) #kategorie jsou serazeny abecedne, pro smysluplne razeni je potreba pouzit nasledujici prikaz
duben$duveraf <- factor(duben$duveraf, levels =c("duvera","ani ano, ani ne", "neduvera" ), ordered = TRUE)
table(duben$duveraf)


#dalsi priklad
#vztek
table(duben$w5_anger_2)
attr(duben$w5_anger_2, "value.labels")
duben$vztek <- NA
duben$vztek[duben$w5_anger_2 <= 2] <- "nizky" #nemusime vypisovat kazdou hodnotu, staci nastavit intervaly
duben$vztek[duben$w5_anger_2 >= 3 & duben$w5_anger_2 <= 5] <- "stredni"  #pozor na prekryvani intervalu
duben$vztek[duben$po2 >= 6] <- "vysoky"
table(duben$vztek)




#symboly v R - tyto znaky nikdy nepouzivejte ve jmenech sloupcu, je take vhodne, aby se nobjeovovaly v datech
# # pro komentare
# ? zisk napovedy
# $ oddeleni datasetu a promenne
# % procenta, v nekterých knihovnách slouzi k oddelování casti operace (to se nas bude tykat u stahovani)
# ^ umocneni
# &  ma funkci AND ve formulaci dubenu
# *  nasobeni, interakce v regresi,...
# () obvykle zahrnuje detaily operace (viz napr. otevirani souboru)
# [] urceni nejake casti dat
# {} smycky
# -  odecitani, potreba do kombinace  <-
# + scitani, v tvorbe grafu oddeluje kroky tvorby grafu
# ,  oddeluje jednotlive prvky operaci
# <> vetsi, mensi, obvykle v kombinaci s =
# \ oddelovace v ceste k souborum, umoznuji zapsat nejaky specialni znak, tak aby nemel svou funkci
# / deleno, oddelovace v ceste k souborum
# | funkce OR, potreba pro nektere dalsi formulace
# "" obvykle definuji nejaky znak nebo text
# pro pouziti v nazvech tedy zbyva _ a .


