Julia vs. Python: Što je najbolje za znanost o podacima?

Među mnogim slučajevima korištenja koje Python pokriva, analitika podataka postala je možda najveća i najznačajnija. Python ekosustav je prepun biblioteka, alata i aplikacija koji čine posao znanstvenog računanja i analize podataka brzim i prikladnim.

Ali za programere koji stoje iza jezika Julia - usmjerenog posebno na „znanstveno računanje, strojno učenje, rudarenje podacima, linearnu algebru velikih razmjera, distribuirano i paralelno računanje“ - Python nije dovoljno brz ili prikladan . Julia želi znanstvenicima i analitičarima podataka pružiti ne samo brz i prikladan razvoj, već i nevjerojatnu brzinu izvršavanja. 

Što je jezik Julia?

Julia je stvorena 2009. godine od strane četveročlanog tima, a javnosti je predstavljena 2012. godine. Namijenjena je rješavanju nedostataka u Pythonu i drugim jezicima te aplikacijama koje se koriste za znanstveno računanje i obradu podataka. "Pohlepni smo", napisali su. Željeli su još: 

Želimo jezik s otvorenim kodom s liberalnom licencom. Želimo brzinu C s dinamičnošću Ruby. Želimo jezik koji je homoikonski, s istinskim makronaredbama poput Lispa, ali s očitim, poznatim matematičkim zapisima poput Matlaba. Želimo nešto što je korisno za opće programiranje kao što je Python, tako lako za statistiku kao R, toliko prirodno za obradu nizova kao Perl, tako moćno za linearnu algebru kao Matlab, jednako dobro lijepiti programe poput ljuske. Nešto što je jednostavno naučiti, a najozbiljnije hakere čini sretnima. Želimo interaktivnu i želimo sastavljenu.

(Jesmo li spomenuli da bi trebao biti brz kao C?)

Evo nekoliko načina na koje Julia provodi te težnje:

  • Julia je sastavljena, a ne interpretirana.  Za brže performanse izvođenja, Julia se kompajlira upravo u vrijeme (JIT) pomoću okvira LLVM kompajlera. U najboljem slučaju, Julia se može približiti brzini C.
  • Julia je interaktivna. Julia uključuje REPL (read-eval-print loop) ili interaktivnu naredbenu liniju, slično onome što nudi Python. Brze jednokratne skripte i naredbe mogu se ubaciti izravno.
  • Julia ima izravnu sintaksu. Julijina sintaksa slična je Pythonovoj - kratka, ali također izražajna i snažna.
  • Julia kombinira blagodati dinamičnog i statičnog tipkanja. Možete odrediti vrste za varijable, poput "nepotpisani 32-bitni cijeli broj". Ali također možete stvoriti hijerarhiju tipova kako biste omogućili opće slučajeve za rukovanje varijablama određenih tipova - na primjer, za pisanje funkcije koja prihvaća cijele brojeve bez navođenja duljine ili potpisivanja cijelog broja. Možete čak i bez potpunog tipkanja ako to nije potrebno u određenom kontekstu.
  • Julia može nazvati Python, C i Fortran knjižnice. Julia se može izravno povezati s vanjskim knjižnicama napisanim na C i Fortran. Također je moguće povezati se s Python kodom putem biblioteke PyCall, pa čak i dijeliti podatke između Pythona i Julije.
  • Julia podržava metaprogramiranje. Programi Julia mogu generirati druge programe Julia, pa čak i modificirati vlastiti kôd, na način koji podsjeća na jezike poput Lispa.
  • Julia ima program za ispravljanje pogrešaka s punim značajkama.  Julia 1.1 predstavila je paket za otklanjanje pogrešaka koji izvršava kôd u lokalnom REPL-u i omogućuje vam prolaženje kroz rezultate, pregled varijabli i dodavanje točaka prekida u kod. Možete čak izvoditi i sitnozrnate zadatke poput prolaska kroz funkciju generiranu kodom.

Povezani video: Kako Python olakšava programiranje

Savršen za IT, Python pojednostavljuje mnoge vrste poslova, od automatizacije sustava do rada u najmodernijim poljima poput strojnog učenja.

Julia vs. Python: Prednosti jezika Julia

Julia je od početka dizajnirana za znanstvena i numerička izračunavanja. Stoga ne čudi da Julia ima mnoge značajke korisne za takve slučajeve upotrebe:

  • Julia je brza. Julijina JIT kompilacija i deklaracije tipa znače da rutinski može pobijediti "čisti", neoptimizirani Python po redoslijedu veličine. Python može se brže putem vanjskih knjižnica, treće strane JIT kompajler (PyPy) i optimizacije s alatima kao što su Cython, ali Julia je osmišljen kako bi se brže pravo iz vrata.
  • Julia ima matematičku sintaksu. Glavna ciljna publika Julije su korisnici znanstvenih računalnih jezika i okruženja poput Matlaba, R, Mathematice i Octave. Julijina sintaksa za matematičke operacije više liči na način na koji se matematičke formule pišu izvan računarskog svijeta, što olakšava razumijevanje ne-programera.
  • Julia ima automatsko upravljanje memorijom. Poput Pythona, Julia ne opterećuje korisnika detaljima raspodjele i oslobađanja memorije, a pruža i određenu mjeru ručne kontrole odvoza smeća. Ideja je da ako se prebacite na Juliju, nećete izgubiti jednu od Pythonovih uobičajenih pogodnosti.
  • Julia nudi vrhunski paralelizam. Matematika i znanstveno računanje uspijevaju kada možete iskoristiti sve resurse dostupne na određenom stroju, posebno više jezgri. I Python i Julia mogu paralelno izvoditi operacije. Međutim, Pythonove metode za paraleliziranje operacija često zahtijevaju serializaciju i deserializaciju podataka između niti ili čvorova, dok je Julijina paralelizacija preciznija. Nadalje, Julijina sintaksa paralelizacije manje je teška od Pythonove, spuštajući prag za njezinu upotrebu.
  • Julia razvija vlastite biblioteke strojnog učenja. Flux je knjižnica strojnog učenja za Juliju koja ima mnoge postojeće obrasce modela za uobičajene slučajeve upotrebe. Budući da je u cijelosti napisan na Juliji, može ga modificirati prema potrebi korisnika, a koristi Julijinu nativnu pravodobnu kompilaciju za optimizaciju projekata iznutra. 

Julia vs. Python: Python prednosti

Iako je Julia namijenjena znanosti o podacima, dok je Python više ili manje evoluirao u tu ulogu, Python pruža neke uvjerljive prednosti znanstveniku podataka. Neki od razloga "opće namjene" Pythona mogu biti bolji izbor za rad na znanosti o podacima:

  • Python koristi indeksiranje niza temeljeno na nuli. U većini jezika, uključujući Python i C, prvom se elementu niza pristupa s nulom - npr. string[0]U Pythonu za prvi znak u nizu. Julia koristi 1 za prvi element u nizu. Ovo nije proizvoljna odluka; mnoge druge matematičke i prirodoslovne aplikacije, poput Mathematice, koriste 1-indeksiranje, a Julia želi privući tu publiku. Moguće je podržati indeksiranje nula u Juliji eksperimentalnom značajkom, ali 1-indeksiranje prema zadanim postavkama može stati na put usvajanju od strane općenitije publike s uvriježenim programskim navikama.
  • Python ima manje početnih troškova.  Python programi mogu biti sporiji od Julia programa, ali samo je vrijeme izvođenja Pythona laganije i obično treba manje vremena da se Python programi pokrenu i donesu prve rezultate. Također, dok JIT kompilacija ubrzava vrijeme izvršavanja programa Julia, dolazi po cijenu sporijeg pokretanja. Puno se radilo na tome da Julia započne brže, ali Python ovdje još uvijek ima prednost.
  • Python je zreo. Jezik Julia je mlad. Julia se razvija tek od 2009. godine, a usput je pretrpjela i priličnu količinu značajki. Suprotno tome, Python postoji gotovo 30 godina.
  • Python ima daleko više nezavisnih paketa. Širina i korisnost Pythonove kulture nezavisnih paketa i dalje je jedna od najvećih atrakcija jezika. Opet, Julijina relativna novost znači da je kultura softvera oko nje još uvijek mala. Nešto od toga nadoknađuje mogućnost upotrebe postojećih C i Python knjižnica, ali Juliji su potrebne vlastite knjižnice da bi napredovala. Knjižnice poput Flux i Knet čine Juliju korisnom za strojno učenje i duboko učenje, ali velika većina tog posla i dalje se obavlja s TensorFlowom ili PyTorchom.
  • Python ima milijune korisnika. Jezik nije ništa bez velike, predane i aktivne zajednice oko sebe. Zajednica oko Julije oduševljena je i raste, ali to je još uvijek samo djelić veličine Pythonove zajednice. Pythonova ogromna zajednica velika je prednost. 
  • Python je sve brži. Osim poboljšanja u tumaču Python (uključujući poboljšanja višejezgrene i paralelne obrade), Python je postalo lakše ubrzati. Projekt mypyc prevodi Python s oznakom tipa u izvorni C, daleko manje nezgrapan od Cythona. To obično donosi četverostruka poboljšanja performansi, a često i puno više za čisto matematičke operacije.