Mojih top 5 data science preporuka – Srđan Šantić

Data Science je interesantna oblast, i sa dobrim razlozima mnogi žele da uđu u nju. Ima jako mnogo resursa – skoro je jedna moja prijateljica postovala link za listu preko 400 AI kurseva, od univerzitetskih, do MOOC-ova, od besplatnih, do jako skupih. Ako Vas ne plaši paradoks izbora, svakako je pogledajte.

Ovaj post se ne bavi tim. Ovaj post se bavim onim što je neophodno znati, a što ovi kursevi ne pokrivaju. Bilo koji tip Data Scientist-a da želite da budete, morate ove stvari naučiti.

Značajan deo skillseta jednog Data Scientist-a je programiranje. I ono je jako bitno. Što ste bolji programer, to ćete ili lakše raditi posao koji Vam je zadat, ili ćete biti produktivniji i moći više rezultata da isporučite.

Ovde ću navesti stvari koje su bitne, i izvore koje smatram bitnim.

1.Linux i komandna linija

Full disclosure: ja sam Data Science i programiranje učio na Windows kompjuteru. I verujem da sam ih dobro naučio. I dalje koristim Windows na svom ličnom računaru, i volim ga.

Ali Linux se more znati. Mora. Ne kažem da treba da znate da postavljate Linux servere i administrirate ih, naravno da ne. Ali morate znati da koristite neku Linux distribuciju, i znati da koristite komandnu liniju. Ima više razloga. Gde god da odete da radite, imaćete Linux mašinu. Zatim, komandna linija ima jako mnogo korisnih alata, koji će Vam olakšati život.

Takođe, bilo radili na productu ili u konsultantskoj firmi, imaćete klijente. Klijenti će Vam davati remote pristup svojim mašinama. Verujte, na mašinama će biti Linux. I to ćete ga koristiti kroz komandnu liniju. Takođe, nećete znati šta je na njemu instalirano, i šta će Vam biti dozvoljeno da dodatno instalirate.

Evo jedne priče. Napisao sam Pajton skriptu koja je nešto radila. U pitanju je bio mali in-house alat koji se koristi kroz komandnu liniju. Naravno, primao je neke argumente. Koristio je argparse modul, kao što i treba, jer je uveden još u (pokojnom) Pajtonu 2.7. I ne lezi vraže – mašina na kojoj je trebalo da je koristim je imala Pajton 2.6. Apgrejd nije dolazio u obzir. Eto problema.

(Inače, ako pišete nekad u Pajtonu alate za komandnu liniju, pogledajte i colorama paket.)

Preporučujem Ubuntu distribuciju. Lako se instalira, ima lep vizuelni interfejs, i puuuno podrške onlajn. Mada ako preferirate neku drugu, svejedno je – većina alata su isti i dolaze sa distribucijom, ili se mogu lako instalirati. 

Za učenje Linuxa kao takvog, ima odličnih izvora – knjiga, na primer. Ali ima i odličnih kurseva.

Ovaj kurs pokriva mnoge, vrlo bitne, stvari vezane za komandnu liniju. Jeste time investment – ima 11 predavanja od po sat vremena. Ali kad razmislite, to je 11 dana po sat vremena dnevno. Takođe pokriva i, za Linux okruženje, neke stvari o kojima ćemo dalje pričati u ovom postu.

I naravno, nećete koristiti običan terminal za komandnu liniju, već moderan.

2.Git

Za Git i GitHub ste, verujem, čuli. Jedno je softver za kontrolisanje verzije koda koji ste napisali, drugi je repozitorijum za kod. Ovaj workflow je, u najjednostavnijem, dobar bekap za kod koji ste napisali. U naprednijem slučaju, daje Vam mogućnost uvida u prethodne iteracije koda – poređenje sa onim što ste već pisali, tako da piši-briši pristup kodiranju postaje robustniji. U praksi, koristi se za kolaborativno programiranje, i daje mogućnost rađenja revizije koda, što je u najmanju ruku odličan način za učenje na poslu.

Preporučujem jedan odličan kurs sa Coursere, koji Vas uči od početaka, do kolaborativnog rada. Ono što je kod njega jako zgodno je što ima duplirana predavanja, u smislu da ima predavanja koja pokrivaju i korišćenje Gita kroz komandnu liniju, a i korišćenje kroz Sourcetree. Sourcetree je odličan vizuelni korisnički interfejs za učenje i korišćenje Git-a. Ali Vi ga, naravno, nećete koristiti, jer ste već naučili komandnu liniju.

3.Data Science jeste softver

Priznajem, ukrao sam naslov ove sekcije iz tutorijala koji ću ovde linkovati, i kroz koji treba da prođete. Prikazuje nekw dobre programerske prakse koje treba ispoštovati, ili makar njima težiti.

Jedna od njih je dobra projektna struktura. Naime, u kursevima koje pohađate najčešće nemate mnogo fajlova. Ali kada zaista radite neki projekat, ima ih, i to bogami poprilično. Možda ste dobro organizovani, pa ćete smisliti neku lepu strukturu. But why reinvent the wheel? Mnogo pametniji i iskusniji ljudi od nas su osmislili projektne strukture koje su dobre. Za Dejta Sajens, tu je fenomenalni Cookiecutter Data Science.

Anaconda distribucija za Pajton je odličan način da se počne. Ali 95% paketa koje sa njom dolaze Vam nikada neće trebati. Možete instalirati Pajton od nule, i instalirati pakete po potrebi. Tako svakako rade R korisnici. Ali opet će se desiti da imate puno paketa na svojoj lokalnoj mašini. Kada pokrećete novi projekat, to je problem. Želite da, kada budete distribuirali svoj projekat, njegovi krajnji korisnici moraju da instaliraju samo pakete koji su neophodni. Tu Vam u pomoć dolaze Pajton virtuelna okruženja, koja svakako trebate koristiti.

Analize i modeliranje koje radite treba da budu što reproducibilniji. Kod koji se ponavlja treba izvući u funkcije. Skupovi funkcija treba da budu izvučeni u module. Kad imate skup modula – eto Vam sopstvenog paketa. E sad, analize i modeliranje imaju neku logičnu strukturu, i treba da se izvrše nekim redosledom. To je dobro automatizovati, i za to ima lepih alata.

Da ponovim, ovo je sve pokriveno u gore navedenom tutorijalu, kao i još ponešto.

4.Radno okruženje

Radno okruženje, ili što bi se reklo Integrated Development Environment, je jako bitno. Ima ih raznih. Najjednostavnija varijanta je da koristit neki lep tekstualni editor za početak. Kada budete baš napredni, ili Dejta Sajentist tipa B, možete koristiti nešto ozbiljnije.

U poslednje vreme, Visual Studio Code je postao jako popularan. Zgodno je što već dolazi sa dobrim Pajton plaginovima, tako da ga možete koristiti skoro out-of-the-box.

Ja sam se lično navikao na Sublime Text. Sa adekvatnim plaginovima, on postaje odličan IDE.

Naravno, ako ste R korisnik, koristićete Rstudio, i nećete nikada razmišljati ni o čemu drugom. 

5.Testiranje, debagovanje, logovanje i tehnički dug

Poduži naslov, priznajem. Ali ne zna se koja je stvar bitnija.

Što više budete pratili dobre programerske prakse, to ćete više apstrahovati svoj kod u funkcije. Funkcije imaju efekte. I nekad ne rade kako treba isprva. Zato za kod moraju da se pišu testovi. To je programerima odavno poznati i široko prihvaćeno, ali kod Dejta Sajentista nije.

Za početak, da Vas uvede u testiranje, imamo fenomenalnog Neda Batcheldera. On je tu da Vas nauči osnove testiranja, a kada ih naučite, koristićete PyTest paket u praksi. Posle ovoga, pogledajte još jedno predavanje sa PajKona. Ovde ćete naučiti o fenomenalnom hypothesis paketu za automatsko generisanje primera za testiranje. 

Kad pišete kod, naravno da on neće raditi uvek dobro. Onda morate da ga debagujete. Najjednostavnije je uneti print stejtmente, pa onda besomučno menjati kod i testirati. Ali ima boljih načina. O njima detaljno u ovom tutorijalu, kao i u ovom predavanju.

Logovanje je malo dosadnija, ali neophodna tema. Potrebno je imati način za praćenje šta je vaš kod sve uradio, i za to se koristi logovanje. Za analizu logova (a radićete je poprilično), koristite fenomenalni lnav.

Poslednja tema, tehnički dug, mi ne bi pala napamet da mi skoro jedna koleginica nije spomenula da će, u pauzi između Nove godine i Božića, raditi na otplaćivanju tehničkog duga. To me podsetilo intervjua koji sam imao za jednu, vrlo standarnu, Dejta Sajens poziciju, kada me menadžer pitao kako bih otplatio tehnički dug. Iznenađen pitanjem, nekako sam formulisao odgovor baziran na onome što sam naučio u ovom predavanju.

Honorable mention: SQL

Neki kažu da SQL nije pravo programiranje jer je deklarativan jezik – Vi kažete šta Vam treba, a on sam osmisli kako će do rezultata doći. Drugi kažu da je SQL lak. Ovo drugo me posebno nervira, jer je u pitanju najčešće Daning-Krugerov efekat – ljudi koji daju takve izjave nisu svesni koliko malo znaju. SQL ima mnogo mogućnosti, i mnogo naprednih funkcionalnosti.

SQL treba da naučite, dobro. On je lingua franca rada sa podacima. Bilo da ste Dejta Analitičar, Dejta Sajentist, ili Dejta Inženjer, on je neophodan. On je ono što multidisciplinarnim, i multijezičnim timovima daje najmanji zajednički sadržalac za rad. Drugo, podaci danas, po pravilu, žive u bazama podataka, pogotovo kod većih klijenata.

Ima mnogo resursa za njegovo učenje, a meni se njaviše sviđa ova knjiga, kao i prateći GitHub repozitorijum, sa podacima iz nje sa kojima možete vežbati. Jako je interesantno napisana, kao roman. Prati priču jedne Dejta Sajentistkinje, kojoj je data baza podataka, i neki zadaci, i kako ona radeći uči SQL, od početnih stvari, do naprednih. Sjajna je, i vredi kupovine.

Kada naučite SQL dobro, proverite svoje znanje ovde.

Srđan Šantić je ekonomista, koji se već 14 godina bavi podacima. U duši je edukator. Sve što je naučio o Dejta Sajensu, kao i o životu, naučio je, nažalost, na teži način.