####################################################################################### ################ Statistická laboratoř - 4. workshop ################################## ############### Adéla Vrtková, Martina Litschmannová ################################## ####################################################################################### ## Máme data, a co dál? # 1. Spustíme potřebné balíčky, které obsahují další statistické funkce # 2. Nastavíme pracovní adresář, odkud importujeme data, popř. kam chceme ukládat výstupy # 3. Importujeme data (z pracovního adresáře, z internetu) # 4. Pre-processing -> a) Podíváme se na data # b) uložíme si data ve více formátech (každá funkce má "radši" jiný formát) # 5. Analýza kvalitativních proměnných # Náplň příštího workshopu: # 6. Analýza kvantitativních proměnných # 7. Identifikace a rozhodnutí o vyloučení/ponechání odlehlých pozorování ####################################################################################### ## 1. Jak nainstalovat a spustit rozšiřující balíček funkcí? ########################## # Instalování balíčku install.packages("XLConnect") # Načtení balíčku (nutno opakovat při každém novém spuštění Rka, vhodné mít na začátku skriptu) library(XLConnect) ####################################################################################### ## 2. Kde se ukládají generované výstupy, nastavení pracovního adresáře ############### # Výpis pracovního adresáře getwd() # Nastavení pracovního adresáře -> do uvozovek, celou cestu setwd("C:/Users/lit40/.rkward") ####################################################################################### ## 3. Načtení datového souboru ######################################################## # základní funkce - read.table, read.csv, read.csv2, ... # záleží hlavně na formátu souboru (.txt, .csv), na tzv. oddělovači jednotlivých hodnot, desetinné čárce/tečce # Načtení a uložení datového souboru ve formátu csv2 z lokálního disku do datového rámce data data=read.csv2(file="C:/Martina/STA1/DATA/aku.csv") # Načtení a uložení datového souboru ve formátu csv2 z internetu do datového rámce data data=read.csv2(file="http://am-nas.vsb.cz/lit40/DATA/aku.csv") # Načtení a uložení datového souboru ve formátu xlsx z lokálního disku do datového rámce data - používáme funkci z balíčku XLConnect, který jsme v úvodu rozbalili wb=loadWorkbook("C:/Martina/STA1/DATA/aku.xlsx") data=readWorksheet(wb, sheet="Data", header=TRUE, startRow = 4, startCol=2) colnames(data)=c("A5","B5","C5","D5","A100","B100","C100","D100") # Načtení a uložení datového souboru ve formátu xlsx z internetu do datového rámce data (komplikovanější, doporučujeme raději si stáhnout xlsx soubor na lokální disk) tmp = tempfile(fileext = ".xlsx") download.file(url = "http://am-nas.vsb.cz/lit40/DATA/aku.xlsx", destfile = tmp, mode="wb") wb=loadWorkbook(tmp) data=readWorksheet(wb,sheet="Data",header=TRUE,startRow = 4,startCol=2) colnames(data)=c("A5","B5","C5","D5","A100","B100","C100","D100") ####################################################################################### ## 4. Pre-processing dat ############################################################## # Výpis datového souboru data # Zobrazení prvních šesti řádků head(data) # Zobrazení posledních šesti řádků tail(data) # Zobrazení 10. řádku data[10,] # Zobrazení 3. sloupce data[,3] # nebo (víme-li, jak se jmenuje proměnná zapsána ve 3. sloupci) data[["C5"]] # nebo data$C5 # Uložení prvního a pátého sloupce dat. rámce data do dat. rámce pokus pokus=data[,c(1,5)] # Uložení prvních 4 sloupců dat. rámce data do dat. rámce data5 data5=data[,c(1:4)] #nebo data5=data[,-c(5:8)] ## Pozn. při ukládání dat mysleme na přehlednost v názvech, data5 obsahují kapacity akumulátorů všech výrobců po 5ti cyklech ## Převod dat do standardního datového formátu data5S=reshape(data[,1:4], # část datového rámce, která bude převáděna do std. datového formátu direction="long", # parametr určující tzv. "long" nebo "wide" formát varying=c("A5","B5","C5","D5"), # názvy proměnných, které mají být zařazeny do sloupce hodnot v.names="kap5", # pojmenování sloupce hodnot times=c("A","B","C","D"), # varianty proměnné, která přiřazuje identifikátory jednotlivým hodnotám proměnné kap5 timevar="vyrobce") # pojmenování proměnné obsahující identifikátory proměnné kap5 # převedení proměnné data5S$vyrobce na typ factor data5S$vyrobce=as.factor(data5S$vyrobce) # odstranění nadbytečné proměnné id z datového rámce data5S data5S=data5S[,-3] # odstranění NA z datového rámce data5S data5S=na.omit(data5S) ## Převod párových dat do standardního datového formátu dataS=reshape(data, direction="long", varying=list(c("A5","B5","C5","D5"), c("A100","B100","C100","D100")), v.names=c("kap5","kap100"), times=c("A","B","C","D"), timevar="vyrobce") # převedení proměnné dataS$vyrobce na typ factor dataS$vyrobce=as.factor(dataS$vyrobce) # odstranění nadbytečné proměnné id z datového rámce dataS dataS=dataS[,-4] # odstranění NA z datového rámce dataS dataS=na.omit(dataS) # Definování nové proměnné v stávajícím datovém rámci dataS$pokles=dataS$kap5-dataS$kap100 ## Vytvoření samostatných proměnných a5=dataS$kap5[dataS$vyrobce=="A"] b5=dataS$kap5[dataS$vyrobce=="B"] c5=dataS$kap5[dataS$vyrobce=="C"] d5=dataS$kap5[dataS$vyrobce=="D"] a100=dataS$kap100[dataS$vyrobce=="A"] b100=dataS$kap100[dataS$vyrobce=="B"] c100=dataS$kap100[dataS$vyrobce=="C"] d100=dataS$kap100[dataS$vyrobce=="D"] pokles.a=dataS$pokles[dataS$vyrobce=="A"] pokles.b=dataS$pokles[dataS$vyrobce=="B"] pokles.c=dataS$pokles[dataS$vyrobce=="C"] pokles.d=dataS$pokles[dataS$vyrobce=="D"] ### Poznámky pro zopakování principu grafiky v R ###################################### # základem jsou tzv. high-level funkce, které vytvoří graf (tj. otevřou grafické oknou a vykreslí dle zadaných parametrů) # na ně navazují tzv. low-level funkce, které něco do aktviního grafického okna přidají, samy o sobě neotevřou nové # př. low-level funkcí - např. abline, points, lines, legend, title, axis ... které přidají přímku, body, legendu... # tzn. před použitím "low-level" funkce je potřeba, volat "high-level" funkci (např. plot, boxplot, hist, barplot, pie,...) # další grafické parametry naleznete v nápovědě # nebo např. zde http://www.statmethods.net/advgraphs/parameters.html # nebo zde https://flowingdata.com/2015/03/17/r-cheat-sheet-for-graphical-parameters/ # nebo http://bcb.dfci.harvard.edu/~aedin/courses/BiocDec2011/2.Plotting.pdf ## Barvy v R # http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf # https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/colorPaletteCheatsheet.pdf ####################################################################################### ## 5. Explorační analýza a vizualizace kategoriální proměnné ########################## ## Výpočet četostí #################################################################### cetnosti=table(dataS$vyrobce) cetnosti # výpis # Výpočet relativních četností - 2 ekvivalentní způsoby rel.cetnosti=100*cetnosti/sum(cetnosti) rel.cetnosti # výpis rel.cetnosti2=prop.table(cetnosti)*100 # Zaokrouhlení relativních četností (%) na 1 desetinné místo rel.cetnosti=round(rel.cetnosti,digits=1) rel.cetnosti # výpis # Pozor na zaokrouhlovací chybu!! rel.cetnosti[4]=100-sum(rel.cetnosti[1:3]) rel.cetnosti # výpis # Sloučení četností a relativních četností do tabulky četností tabulka=cbind(cetnosti,rel.cetnosti) # cbind() ... sloučení sloupců tabulka # výpis # Přejmenování názvů sloupců v tabulce četností colnames(tabulka)=c("četnost","rel.četnost (%)") tabulka # Uložení tabulky do csv souboru pro export do MS Excel write.csv2(tabulka,file="tabulka.csv") # Kde je tabulka uložena? getwd() ## Výsečový (koláčový) graf - angl. piechart ########################################## cetnosti=table(dataS$vyrobce) # v tuto chvíli není nutno používat, četnosti jsme již spočetli a uložili do proměnné cetnosti výše pie(cetnosti) # Zabarvení grafu pie(cetnosti, col=c("red","green","yellow","blue")) pie(cetnosti, col=heat.colors(4)) # Přidání názvu grafu a popisků pie(cetnosti, col=heat.colors(4), main="Zastoupení výrobců ve výběru", labels=c("Výrobce A","Výrobce B","Výrobce C","Výrobce D")) pie(cetnosti, col=heat.colors(4), main="Zastoupení výrobců ve výběru", labels=paste("Výrobce",names(cetnosti),"\n",cetnosti)) # funkce paste() umožňuje sloučit textové řetězce a hodnoty proměnných, symbol "\n" tvoří nový řádek v textu # rel. četnosti byly spočteny a uloženy do proměnné rel.cetnosti výše pie(cetnosti, col=heat.colors(4), main="Zastoupení výrobců ve výběru", labels=paste("Výrobce",names(cetnosti),"\n",cetnosti,";",rel.cetnosti,"%")) # Pro zájemce - balíček plotrix a funkce pie3D vytvoří 3D koláčový graf ## Sloupcový graf - angl. barplot ##################################################### cetnosti=table(data5S$vyrobce) # v tuto chvíli není nutno používat, četnosti jsme již spočetli a uložili do proměnné cetnosti výše barplot(cetnosti) # Změna barev, přidání názvu barplot(cetnosti, col=heat.colors(4), main="Zastoupení výrobců ve výběru", space=0.6) # parametr space vytvoří mezeru mezi sloupci # Přidání dalších popisků a legendy barplot(cetnosti, col=heat.colors(4), horiz=TRUE, # horizontální orientace grafu border=FALSE, # nevykresluje čáru kolem sloupečků main="Zastoupení výrobců ve výběru", names.arg=paste("Výrobce",names(cetnosti))) legend("topright", paste("Výrobce",names(cetnosti)), col=heat.colors(4), fill=heat.colors(4), border=FALSE, bty="n") # Přidání absolutních a relativních četností k odpovídajícím sloupcům bp = barplot(cetnosti, col=heat.colors(4), main="Zastoupení výrobců ve výběru", names.arg=paste("Výrobce",names(cetnosti))) text(bp,cetnosti,cetnosti) bp = barplot(cetnosti, col=heat.colors(4), main="Zastoupení výrobců ve výběru", names.arg=paste("Výrobce",names(cetnosti))) text(bp, cetnosti,paste(cetnosti,";",rel.cetnosti,"%"), pos=1) # parametr pos udává, kde bude text uveden vzhledem k dané pozici (1 = pod, 2 = vlevo, 3 = nad, 4 = vpravo) ## Jak graf uložit? ################################################################## # Zjištění aktivního okna, nastavení aktivního okna - tj. který graf chceme uložit? dev.cur() dev.set(2) # Uložení obrázku ve formátu pdf (výška a šířka jsou uvedeny v palcích (inch), 1inch=2,54cm) dev.print(device=pdf,file="barplot.pdf",width=6.5,height=5) # Zavření grafického okna dev.off() # Kam se obrázek uložil? getwd() ####################################################################################### #####Pie charts are a very bad way of displaying information.########################## ##The eye is good at judging linear measures and bad at judging relative areas.######## ##A bar chart or dot chart is a preferable way of displaying this type of data. ####### #######################################################################################