Uvod
Danas jedan kratki tutorial-ić nakon kojeg ćete svi moći analizirati koliko slikate mobitelom, ovisno o godišnjem dobu (npr.), ili stadiju veze s partnerom, ili kojem god već kriteriju želite. Kako biste to mogli uspješno napraviti, trebat će vam nekoliko stvari.
- trebat će vam popis slika. Dakle, u analizu neće ulaziti slika kao takva već samo njen naziv stoga bi bilo dobro odabrati slike koje želite da uđu u analizu i samo njih spremiti u jedan folder. Ako vas npr. zanima količina slika s partnerom od početka veze, tada ćete u folder staviti samo slike s vašim dragim.
- trebat će Vam RStudio (link: https://www.rstudio.com/products/rstudio/download/). Instalirajte ga i otvorite.
- Znanje o načinu na koji je slika spremljena. Slike koje snimim svojim mobitelom imaju nazive YYYYMMDD_HHMMSS.jpg YYYY se odnosi na godinu, MM na mjesec, DD na dan, HH - sat, MM - minute i SS za sekunde. Pa recimo da sam sad slikao sliku svojim mobitelom (radi se o Samsungovom mobitelu, nisam siguran kako iphone naziva slike) slika bi nosila naziv 20211101_173034.jpg
- za kraj, trebat će vam ovaj kod koji se nalazi u prilogu ovog posta.
[Tri…] Odmah u glavu - popis slika
Slike koje želite analizirati prebacite u folder na svom kompjuteru. Kako bismo si čim više olakšali cijeli proces, predlažem da napravite novi folder na Desktopu (radnoj površini) i nazovete ga Analiza slika. Pazite pritom da u folder ubacite samo slike koje su slikane istim mobitelom (ili ako se radi o više mobitela, da sve slike budu nazvane jednakim načinom). Vodite računa da slike preuzete s Vibera i/ili Whatsup-a nemaju tako skladne nazive već kao naziv imaju random kombinaciju slova i brojeva te kao takve neće ući u analizu.
[Četiri…] RStudio
Program u kojem ćete analize raditi zove se RStudio. To je zapravo nadogradnja na programski jezik R koji najčešće koriste statističari. Nemojte se preplašiti kad vidite da vas čeka prazno polje u koje treba tipkati naredbe, umjesto klikati mišem po ekranu. Na kraju krajeva, vi ćete jednostavno copy-paste-ati ono što ću ja u daljnjem tekstu pisati! RStudio je besplatan program, pratite link i skinite verziju za svoj operativni sustav (najvjerojatnije se radi o Windowsima). Jednom kad ste ušli u RStudio idete na File - New file - R Script. U R Scriptu ćete paste-ati dijelove kode, zatim ih označiti te pritisnuti kombinaciju Ctrl+Enter kako bi se kod proveo u analizu. Više o tome ubrzo.
[…Sad!] Pa krenimo
U tekstu će se nalaziti tzv. chunk-ovi koda koje ćete vi copy-paste-ati u RStudio. Za kratko zagrijavanje, možete pokušati kopirati sljedeći kod u svoju R Scriptu, označiti ga i pritisnuti Ctrl+Enter:
a=2+2
a
Ako ste to ispravno napravili, u prozorčiću (unutar RStudia) Console trebao bi se pojaviti broj 4.
E sad, nakon što smo se uvjerili da programski jezik ne mora biti strašan, krenimo odmah na naše analize. Iako R u sebi ima kodirane osnovne računske operacije (npr. nismo morali instalirati paket da bi R znao da znakom + želimo zbrojiti brojeve s lijeve i desne strane znaka) R je premoćan da odjednom “pamti” sve ono što je sposoban izvesti (npr. izvući datum kad je slika nastala iz imena slike). Za to će nam trebati neki paketići, pa hajmo ih onda instalirati:
install.packages("dplyr")
install.packages("lubridate")
install.packages("ggplot2")
install.packages("stringr")
Kako su vaše verzije RStudija “friške”, te pakete prvo treba instalirti, a zatim narediti R-u da ih izvoli znati kad ga budete pitali. Ako nekad kasnije opet budete htjeli raditi ove analize, ne morate instalirati više pakete, već ih samo pozvati:
library("dplyr")
library("lubridate")
library("ggplot2")
library("stringr")
Iako nije previše bitno, u ovoj fazi vašeg upoznavanja R-a, pogotovo ako samo želite analizirati vražje slike, ja ću svejedno napisati čemu služi koji paket.
- dplyr služi manipulaciji podataka. U sebi sadrži naredbe pomoću kojih može filtrirati, izabirati, dodavati, oduzimati, itd. Dakle, možemo vrlo jednostavno raditi s velikim brojem varijabli odjednom.
- lubridate kao što i samo ime govori koristi nam kako bismo manipulirali posebnom kategorijom podataka - datumima. Ako razmislite, kako možemo zbrojiti 16.01.2020. i 23.04.1999.? E, pa uz lubridate - vrlo jednostavno.
- ggplot2 je paket koji osobno najčešće i s najvećim guštom upotrebljavam. GG se odnosi na Grammar of graphics a služi vizualizaciji podataka. Ono za što ćemo ga mi u ovoj analizi koristiti je neopisivo mali dio onoga što paket može s podacima.
- stringr služi za manipulaciju druge posebne vrste podataka - nizom (string). Niz je niz, odnosno program ga tretira kao riječ čak i ako se radi o nizu 2345. Drugim riječima, ne možemo zbrojiti niz od 2345 i broj 123 zbog toga što R na 2345 (kad ga definiramo kao niz) gleda kao riječ. Eto, sad znamo čemu služe ti paketići, pa možemo prijeći na ono zašto smo svi tu.
Kao što sam rekao, ne trebaju vam slike, već vam trebaju samo nazivi slika. Naravno da ih nećete ručno unositi, već ćete zamoliti R da to napravi umjesto vas:
slike = list.files("D:/Users/Admin/Desktop/Analiza slike")
slike = as.data.frame(slike)
U ove dvije naredbe ste rekli R-u: “Vidi, u tom i tom folderu mi se nalaze neki file-ovi, molim te napravi listu naziva svih file-ova u tom folderu”. R je program, nije čovjek stoga mu nedostaje zdravog razuma. On će vam dati popis svih file-ova u tom folderu i svim sub-folderima unutar tog foldera. Iz tog razloga se nadam da ste prihvatili moju sugestiju i napravili novi folder na Desktopu koji ste nazvali Analiza slike i u njega copy-paste-ali slike koje želite analizirati. Ako niste, onda ćete prije nego kliknete Ctrl+Enter izmijeniti put koji vodi do slika koje želite analizirati (desna tipka na folder - Properties i tamo će vam pisati “adresa” tog foldera u kompjuteru).
Druga naredba nam služi da R-u definiramo što je taj popis koji je napravio. Kao što varijable mogu biti nizovi ili brojevi ili svakakve druge vrste, tako i elementi u R-u mogu biti raznih vrsta. Ne provedemo li drugu naredbu, “slike” će R tretirati kao vektor, što je u redu za neke stvari, ali nama je potrebno da kažemo R-u “Vidi, ovo mi je tablica”. Kad kažem tablica, mislim da to da se varijable nalaze u stupcima, a jedinice mjerenja u redovima. Ova konkretna varijabla će nam imati 1 stupac (1 variable) i onoliko jedinica mjerenja (obs.) koliko imate slika u svom folderu. Treći važan prozor u RStudiu je prozor Environment gdje će vam biti dostupni svi objekti koje napravite u R-u. Ako ste sve radili kako treba za sad biste ih trebali imati 2 (“a” i “slike”).
Dobro, sve je spremno za analizu.
slike %>%
mutate(nazivi = str_sub(slike,1,8)) %>%
filter(str_starts(nazivi,"20")) %>%
mutate(nazivi2=ymd(nazivi)) %>%
ggplot(aes(x=nazivi2))+
geom_histogram()+
labs(x="Vrijeme",
y="Broj slika")
Ako ste copy-paste-ali gornji kod, označili ga i kliknuli Ctrl+Enter dobili ste ovakvu nekakvu sliku. Za potrebe ove vježbe ja sam uzeo nasumice neke slike sa starih mobitela (iz 2016 i 2017). Ono što se s mojih slika vidi je da volim slikati na godišnjem odmoru! Isto tako, pretpostavljam da sam na jesen 2016. promijenio mobitel jer najednom nema slika tamo, a možda je da su u nekom drugom folderu ostale :/
I eto, to vam je to. E sad, ako želite znati detaljnije što se nalazi u kodu, ostanite još malo. Za nagradu ćete naučiti kako modificirati graf koji ste nacrtali.
Kod break-down
Vidite da kod počinje imenom objekta gdje nam se nalaze informacije (slike) nakon kojeg slijed čudan znak “%>%”. Taj znak možete tumačiti kao “i onda”. Sljedeći redovi su malo uvučeni, to vam daje do znanja da sve se te naredbe odnose na objekt slike. Naredbu mutate koristimo kad želimo napraviti nešto novo s varijablama u svojoj tablici (a sjetite se, “slike” su tablica jer smo rekli R-u: “Ej, slike su tablica, a ne vektor”). Novo što želimo napraviti je skratiti imena slika tako da nam ostane samo datum a ne i sati. Prije nego smo koristili mutate tablica “slike” se sastojala od jedne varijable naziva “slike”. Obzirom da smo nakon mutate-a definirali da nam se nova varijabla zove “nazivi”, tablica “slike” sad će imati dvije varijable, “slike” i “nazivi”.
Varijablu nazivi smo definirali pomoću naredbe str_sub (iz “stringr” paketa), a samo ime joj govori da mijenjamo (sub-stitutamo) niz (str-ing). Koji string? Pa string “slike” odnosno prvu varijablu iz naše tablice “slike”. Brojevi 1 i 8 označavaju početnu i završnu poziciju unutar niza koje želimo zadržati. Kako se datum sastoji od četiri broja godine, dva broja mjeseca i dva broja dana dolazimo do broja 8.
%>% iliti “i onda” želimo filtrirati nazive naših slika tako da se osiguramo da nam slučajno nije zalutala neka slika s Vibera ili neka slika koja je nazvana po nekom drugom pravilu. Ako ste baš skoncentrirano i pažljivo stavljali slike u folder, ovaj cijeli redak s naredbom filter možete izbrisati. Ali, ako niste baš najpažljivije probrali slike, dopustite R-u da provjeri je li to u redu. Ovaj dio koda možete prepraviti da proširite ovaj broj 20 na 2021 npr. Tada će R dalje raditi samo s onim slikama slikanim u 2021-oj godini. Ako vam se ne da probirati slike iz 2015 a baš za njih želite napraviti analizu, tada ćete umjesto “20”, napisati “2015”.
Opet je s nama dobri stari mutate. Ovaj put ga koristimo da promijenimo vrstu varijable iz niza u datum. “ymd” je naredba iz paketa lubridate kojom govorimo R-u da varijablu “nazivi” gleda kao datum sa svime što takav pogled na varijablu nosi. Na kraju, imamo sve potrebno za crtanje.
“ggplot” iz paketa “ggplot2” najavljuje R-u da slijedi slika koja će se sastojati od prikazivanja varijable “nazivi2”. Nećemo preduboko u detalje, pa neću objašnjavati što ovo “aes” predstavlja, iskreno jer ni sam još nisam na čisto što je s tim :) Pazite dalje, nije greška, sad više nemamo “%>%” nego “+” jer ggplot se sastoji od slojeva. Prvi sloj je bio reći koje varijable imamo (u našem slučaju samo jednu, drugu - broj slika on će automatski izračunati jer ćemo mu mi reći da to napravi). Drugi sloj je da definiramo oblik u kojem želimo da nam prikaže rezultate, a to može biti histogram, boxplot, točkice, crtice, brijegovi, nema šta nema. Kako nas zanima distribucija broja slika kroz vrijeme, histogram će nam poslužiti. Histogram se sastoji od broja jedinica varijable od interesa. Naša varijabla od interesa su slike. geom_histogram je stoga izračunao broj slika slikanih na dane i onda ih pospajao (prema nekom svom pravilu, ali radi se o tome da je spojio sve slike slikane unutar 5 dana u jedan stupac). Recimo da smo slikali 3 slike u ponedjeljak, 2 u utorak i 3 u srijedu, histogram može spojiti ta tri dana u jedan stupac visine 3+2+3=8 umjesto da ima tri stupca visina 3, 2 i 3.
Na kraju, nepotrebno, ali ako želimo pokazati nekom naš graf bez da mu objašnjavamo što je na x, što na y osi, tada možemo pomoću naredbe labs definirati što treba pisati ispod x-osi, a što ispod y-osi.
I to vam je to. Čestitam, em ste naučili programirati, em ste naučili nešto o svojim fotografskim navikama.
Pozdrav svima, do idućeg tutoriala! Matia
PS za kraj, cijeli kod koji možete označiti i copy-paste-ati bez da čitate cijeli post. Naravno, pretpostavljam da su vam potrebni paketi instalirani, i da ćete si prilagoditi put do svog foldera na Desktopu (možda nije Admin, nego Pero):
library("dplyr")
library("lubridate")
library("ggplot2")
library("stringr")
slike = list.files("D:/Users/Admin/Desktop/Analiza slike")
slike = as.data.frame(slike)
slike %>%
mutate(nazivi = str_sub(slike,1,8)) %>%
filter(str_starts(nazivi,"20")) %>%
mutate(nazivi2=ymd(nazivi)) %>%
ggplot(aes(x=nazivi2))+
geom_histogram()+
labs(x="Vrijeme",
y="Broj slika")