Julia - Vizuelizacija podataka - osnovne funkcionalnosti

In [1]:
# U uvodnim poglavljima dotakli smo se grafickog prikaza numerickih podataka u programskom jeziku Julia. 
# Funkcionalnosti kojih smo se tamo dotakli bili su samo osnovni deo vezan za vizuelizaciju podataka koji 
# postoji u skoro svim programskim jezicima koji su numeričkog tipa. Međutim, ono šta je specifično za programski jezik
# Julia jeste njena izuzetno bogata podrška za grafičko prikazivanje podataka.
In [2]:
#Pre svega, potrebno je izvršiti instaliranje odgovarajućeg paketa za grafički prikaz podataka
import Pkg;
Pkg.add("Plots");
   Updating registry at `~/.julia/registries/General`
    
   Updating git-repo `https://github.com/JuliaRegistries/General.git`

  Resolving package versions...
   Updating `~/.julia/environments/v1.4/Project.toml`
 [no changes]
   Updating `~/.julia/environments/v1.4/Manifest.toml`
 [no changes]
In [3]:
using Plots
In [4]:
#Za početak, nadogradićemo osnovne funkcionalnosti date u početnim lekcijama
#Obično crtanje jednog grafika funkcija mogle bi se realizovati na sledeći način:
t = 1 : 20;
y = t.*t;
plot(t,y, title = "function y = x^2")
Out[4]:
In [5]:
#Međutim, šta ako bismo hteli da dodamo još nekakav grafik, npr y = x^4, ali tako da on ima širi domen ili drugačije
#vrednosti domena za koju bi se vršio prikaz podataka?

#U okviru programskog jezika Julia postoji operator ! kojim se na sledeći način može već iscrtanom grafiku dodati
#novi grafik za nekim novim svojstvima:
t2 = 1 : 30;
z = t2.^4;
plot!(t2,z, title = "functions y = x^4 and y = x^2")
Out[5]:
In [6]:
#Na ovaj način bismo mogli da dodajemo grafik po grafik na isti plot ako to želimo, međutim ovo je veoma
#nepraktično i veoma često pogrešno. 

#Ovu operaciju moguće je raditi i na sledeći način: Počećemo od nekog početnog plota koji želimo da iscrtamo i 
#sačuvaćemo ga pod nekim imenom, a onda ćemo potom sa plot! (sa znakom izvika vršiti sukcesivno dodavanje novih grafika)

fig_iscrtaj = plot(t, y );
plot!(fig_iscrtaj, t2, z, title = "functions y = x^4 and y = x^2" );
fig_iscrtaj
Out[6]:
In [7]:
# Ukoliko želimo da iscrtamo i više nekakvih funkcija koje imamo predefinisane ili samo ih sami definisali,
# možemo ih prvo upakovati u jedan niz koji se direktno prosleđuje plot() funkciji, a potom kasnije navesti argumente
# za koje ih iscrtavamo na grafiku

plot([sin,cos], 0, 4*π)
Out[7]:
In [8]:
#Najjednostavniji način za crtanje jeste taj da funkciji plot() pošaljemo samo vrednosti funkcije. Ona će je
#iscrtati u pravom obliku, međutim neće voditi računa o horizontalnoj osi tj. daće iscrtavanje u celobrojnoj podeli te ose
#te se na taj način gubi informacija o argumentu, što može dovesti šfo pogrešnih zaključaka ukoliko nam apriorno
#nisu dostupne još neke informacije
t = 0 : 0.01 : 2;
m = t.*t;
plot(m)
Out[8]:
In [9]:
#On nema informaciju da je crtanje izvršeno na intervalu od 0 do 2, pa će ovde izvršiti pogrešan prikaz podataka
In [10]:
#Izvršimo sada instalaciju još dva paketa koji su pogodni kako za vizuelizaciju podataka, tako i za njihovu 
#statističku obradu kasnije

Pkg.add("StatsPlots");
  Resolving package versions...
   Updating `~/.julia/environments/v1.4/Project.toml`
 [no changes]
   Updating `~/.julia/environments/v1.4/Manifest.toml`
 [no changes]
In [11]:
Pkg.add("Distributions");
  Resolving package versions...
   Updating `~/.julia/environments/v1.4/Project.toml`
 [no changes]
   Updating `~/.julia/environments/v1.4/Manifest.toml`
 [no changes]
In [12]:
Pkg.add("RDatasets");
  Resolving package versions...
   Updating `~/.julia/environments/v1.4/Project.toml`
 [no changes]
   Updating `~/.julia/environments/v1.4/Manifest.toml`
 [no changes]
In [13]:
# Važno je upamtiti da Julia tretira prosleđene vektore kao serije. Dakle, ukoliko želimo da prosledimo nekakav 
# vektor ili matricu, on će, ako je prosleđen vektor, taj vektor tretirati kao vremensku seriju, a ako je prosleđena
# matrica, onda će on izvršiti njeno particionisanje i posmatraće svaku njenu KOLONU kao vremensku seriju:

mat_15by10 = rand(15,10);
plot(mat_15by10)
Out[13]:
In [14]:
#Takođe možemo izvršiti iscrtavanje poligona:
#To se vrši poyivom funkcije plot(), koja kao argument prima  niz sa koordinatama poligona u obliku uredjenih parova.
#Važno je ponoviti u prosleđenom nizu početnu tačku i staviti je na kraj kako bi iscrtavanje bilo pravilno
x = [1 2 2 1 1]; y = [3 3 10 10 1];
plot([(1,3), (2,3), (2,10), (1, 10), (1,3)], title = "Pravougaonik")
Out[14]:
In [15]:
#Julia ima kao jedan od svojih tipova podataka i tip podataka DataFrame -  niz koji služi za smeštanje
#i rad sa tabelarnim podacima, a koji ima mnoge primene 

#Njegova instalacija
Pkg.add("DataFrames");
  Resolving package versions...
   Updating `~/.julia/environments/v1.4/Project.toml`
 [no changes]
   Updating `~/.julia/environments/v1.4/Manifest.toml`
 [no changes]
In [ ]:
using DataFrames, StatsPlots, RDatasets
In [ ]:
#Moguće je, koristeći i gotove skupove podataka iz RDatasets (već gotove DataFrame-ove) i plotovati ih, sa različitim
#opcijama

iris = dataset("datasets", "iris")
@df  iris scatter(
    :SepalLength,     #Ovde označavamo sa :Obeležje koja obeležja želimo da uzmemo za iscrtavanje
    :SepalWidth,      #To će ovde biti dužina i širina žaštitnog dela lista
    group = :Species, #Ovo je opciona linija koja nam omogućava da izvučemo podatke za više različitih vrsta
    bg = RGB(0.3, 0.1, 0.5) # bg - od background; prosleđivanje RGB intenziteta pozadine, skaliranih na interval od 0 do 1
) #Opciono, moguće je i definisanje oblika za iscrtavanje ovih promenljivih, uzimanje pojedinih vrsta itd...
In [ ]:
# Za kraj, demonstriraćemo još da je moguće vršiti i iscrtavanje slika, kao jednu od funkcionalnosti:
using TestImages
sl1 = testimage("toucan.png");
plot(sl1)
In [ ]: