RAD SA PODATCIMA: GRAFIKONI I VIZUALIZACIJA

Hrvatski studiji

dr.sc. Luka Šikić

28 listopad, 2019

CILJEVI PREDAVANJA

VIZUALIZACIJA PODATAKA

Prilagodba karte izbijanja kolere Johna Snow-a. Male točke označavaju incidenciju kolere, a velike lokaciju bundara. Najveći broj incidencija se dogodio na Broad St bunaru.  Prikaz koristi podatke iz paketa `HistData`.

Prilagodba karte izbijanja kolere Johna Snow-a. Male točke označavaju incidenciju kolere, a velike lokaciju bundara. Najveći broj incidencija se dogodio na Broad St bunaru. Prikaz koristi podatke iz paketa HistData.

  1. Tradicionalni pristup (paket graphics)
  2. Rasterski pristup (paketi: grid, lattice, ggplot_2)
  1. Tableau
  2. TopDown2018
  3. Vizualizacija u novinarstvu
  4. ggplot2
  5. CroEcon

IZRADA JEDNOSTAVNOG GRAFIKONA

Fibonacci <- c( 1,1,2,3,5,8,13 ) # Stvori fibonacijev niz
plot( Fibonacci ) # Prikaži niz grafički

# Prilagodi grafikon
plot( x = Fibonacci,
               main = "Naslov grafikona",
               sub = "Titlovi grafikona",
               xlab = "Naziv x-osi",
             ylab = "Naziv y-osi" 
            )

plot( x = Fibonacci,                              # Podatkovni skup
          main = "Prvih sedam Fibonacci brojeva", # Naslov
          xlab = "Pozicija u sekvenci",           # x-os
          ylab = "Fibonacci broj",                # y-os 
          font.main = 1,
          cex.main = 1,
          font.axis = 2,
          col.lab = "gray50" )

# Vektor argumenata ( `type()`) za izradu različitih vrsta grafikona
tp <- c("p","o","h","l","b","s")

Fibonacci <- c( 1,1,2,3,5,8,13 ) # Stvori Fibonacci niz
# Definiraj "platno"za prikaz grafikona
par(mfrow=c(2,3), mar=c(1,1,2,1), mai=c(0.2,0.1,0.3,0.1))
# Funkcija za izradu više grafikona
for(i in tp){
plot(Fibonacci, # Podatci
     type = i,  # Vrsta
     col=4, lwd=2, # Estetika
     main = paste0("type = '",i,"'"), # Naslov
     axes = FALSE, # Osi
     frame.plot = TRUE, # Okvir
     xlab = "", # x-os naziv
     ylab="")   # y-os naziv
}

# Dodatne prilagodbe na grafikonu
plot( x = Fibonacci, # Podatci
        type = "b",    # Vrsta grafikona
      col = "blue",   # Boja
      pch = 19,      # Veličina  
        cex = 5,       # Estetika
        lty = 2,       # Vrsta linije
        lwd = 4  )      # Estetika

    plot( x = Fibonacci, # Podatci
         xaxt = "n",       # Bez x-osi  
         bty = "]",        # Estetika
         las = 1 )         # Okreni tekst

Histogrami

# Učitaj podatke
load( "aflsmall.Rdata")
hist(afl.margins) # Napravi histogram

# Histogram sa dodatnim argumentima
hist( x = afl.margins, breaks = 3 )

# Histogram sa dodatnim argumentima
hist( x = afl.margins, breaks = 0:116 )

hist( x = afl.margins, 
      main = "2010 AFL bodovi", # Naslov
      xlab = "Margin",           # Naziv x-osi
      density = 10,              # Zatamni 
      angle = 40,                # Kut zatamljenja
      border = "gray20",         # Boja okvira
      col = "gray80",            # Boja zatamnjenja
      labels = TRUE,             # Dodaj frekvencije na nazive
      ylim = c(0,40)             # Raspon y-osi
)

BOXPLOT

# Deskriptivna statistika za AFL pobjedničke bodove
summary( afl.margins )
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   12.75   30.50   35.30   50.50  116.00
load( "aflsmall.Rdata") #U čitaj podatke
# Napravi boxplot
boxplot( x = afl.margins )

load( "aflsmall.Rdata") # Učitaj podatke
boxplot( x = afl.margins,           # Podatci
         xlab = "AFL utakmice, 2010",  # Naziv x-osi
         ylab = "Pobjednički bodovi",  # Naziv y-osi
         border = "grey50",         # Ublaži granice
         frame.plot = FALSE,        # Bez okvira
         staplewex = 0,             # Estetika
         whisklty = 1               # Prilagodba za whisker 
)

library(lsr) # Učitaj paket
rm(list = ls()) # Očisti radni prostor
load(file.path("./aflsmall2.Rdata")) # Učitaj podatke
who( TRUE ) # Prvi pregled učitanih objekata
##    -- Name --   -- Class --   -- Size --
##    afl2         data.frame    4296 x 2  
##     $margin     numeric       4296      
##     $year       numeric       4296
head( afl2 ) # Pogledaj podatke
##   margin year
## 1     33 1987
## 2     59 1987
## 3     45 1987
## 4     91 1987
## 5     39 1987
## 6      1 1987
# Napravi Box Plot za svaku godinu
boxplot( formula = margin ~ year,
         data = afl2)

boxplot( formula =  margin ~ year,   # the formula
           data = afl2,                # the data set
           xlab = "AFL season",        # x axis label
           ylab = "Winning Margin",    # y axis label
           frame.plot = FALSE,         # don't draw a frame
           staplewex = 0,              # don't draw staples
           staplecol = "white",        # (fixes a tiny display issue)
           boxwex = .75,               # narrow the boxes slightly
           boxfill = "grey80",         # lightly shade the boxes
           whisklty = 1,               # solid line for whiskers 
           whiskcol = "grey70",        # dim the whiskers
           boxcol = "grey70",          # dim the box borders
           outcol = "grey70",          # dim the outliers
           outpch = 20,                # outliers as solid dots
           outcex = .5,                # shrink the outliers
           medlty = "blank",           # no line for the medians
           medpch = 20,                # instead, draw solid dots
           medlwd = 1.5                # make them larger
 )

DIJAGRAM RASIPANJA

load(file.path("parenthood.Rdata")) # Učitaj podatke
plot( x = parenthood$dan.sleep,     # Podatci za x-os
      y = parenthood$dan.grump      # Podatci za y-os
 )  

plot( x = parenthood$dan.sleep,         # Podatci za x-os
       y = parenthood$dan.grump,        # Podatci za y-os
       xlab = "Sati spavanja/roditelj",        # Naziv x-osi
       ylab = "Raspoloženje (0-100)",   # Naziv y-osi
       xlim = c(0,12),                   # Razmjer x-osi
       ylim = c(0,100),                  # Razmjer y-osi
       pch = 20,                         # Prilagodi veličinu točki
       col = "gray50",                   # Prilagodi boju
       frame.plot = FALSE                # Makni okvir
)
# Dodaj liniju 
 lines( x = c(4,9.5),   # Horizontalne točke
        y = c(93,37),   # Vertikalne točke
        lwd = 2         # Širina linije
)

# Koristi drugu funkciju za izradu dijagrama rasipanja.
library(car) # Učitaj paket
## Loading required package: carData
# Koristi funkciju `scatterplot()`
scatterplot( dan.grump ~ dan.sleep, # Definiraj varijable
              data = parenthood,    # Podatci
              smooth = FALSE        # Bez (fitted) linije
)

# Napravi dijagram rasipanja za više od dvije varijable
cor( x = parenthood ) # Korelacijska matrica
##              dan.sleep  baby.sleep   dan.grump         day
## dan.sleep   1.00000000  0.62794934 -0.90338404 -0.09840768
## baby.sleep  0.62794934  1.00000000 -0.56596373 -0.01043394
## dan.grump  -0.90338404 -0.56596373  1.00000000  0.07647926
## day        -0.09840768 -0.01043394  0.07647926  1.00000000
# Drugi način izrade dijagrama rasipanja
# Napravi dijagram rasipanja za više od dvije varijable
pairs( formula = ~ dan.sleep + baby.sleep + dan.grump, # Definiraj varijable
        data = parenthood                              # Podatci
)

STUPČASTI GRAFIKONI

load(file.path("./aflsmall.Rdata")) # Učitaj podatke
freq <- tabulate( afl.finalists )   # Tabuliraj podatke
print( freq )                       # Pregled podataka
##  [1] 26 25 26 28 32  0  6 39 27 28 28 17  6 24 26 38 24
# Dodavanje naziva stupcima
teams <- levels( afl.finalists )    # Stvori razine(nazive)
print( teams )                      # Pregled podataka
##  [1] "Adelaide"         "Brisbane"         "Carlton"         
##  [4] "Collingwood"      "Essendon"         "Fitzroy"         
##  [7] "Fremantle"        "Geelong"          "Hawthorn"        
## [10] "Melbourne"        "North Melbourne"  "Port Adelaide"   
## [13] "Richmond"         "St Kilda"         "Sydney"          
## [16] "West Coast"       "Western Bulldogs"
barplot( height = freq )  # Alternativno samo `barplot( freq )` 

# Dodaj nazive
barplot( height = freq, names.arg = teams ) # Dodatni argument

# Prilagodbe na grafikonu
barplot(height = freq,    # Izaberi podatke
            names.arg = teams,  # Dodaj nazive
            las = 2)            # Zakreni nazive

# Još prilagodbi
old <- par( no.readonly=TRUE )       # Prilagodba
par( mar = c( 10.1, 4.1, 4.1, 2.1) ) # Prilagodba
# Dodatne prilagodbe      
barplot( height = freq,      # Izaberi podatke
        names.arg = teams,       # Dodaj nazive
        las=2,                   # Zakreni nazive
        ylab = "Broj finalnih utakmica", # Naziv y-osi
        main = "Finlne utakmice, 1987-2010",  # Naslov grafikona
        density = 10,                    # Gustoća zasjenjenja
        angle = 20)                      # Kut