Julia vs. Python: wat is het beste voor data science?

Van de vele use-cases die Python behandelt, is data-analyse misschien wel de grootste en meest significante geworden. Het Python-ecosysteem zit boordevol bibliotheken, tools en applicaties die het werk van wetenschappelijke berekeningen en gegevensanalyse snel en gemakkelijk maken.

Maar voor de ontwikkelaars achter de Julia-taal - specifiek gericht op "wetenschappelijk computergebruik, machine learning, datamining, grootschalige lineaire algebra, gedistribueerd en parallel computergebruik" - is Python niet snel of handig genoeg . Julia wil wetenschappers en data-analisten niet alleen een snelle en gemakkelijke ontwikkeling bieden, maar ook een razendsnelle uitvoering. 

Wat is de Julia-taal?

Julia werd in 2009 opgericht door een team van vier personen en werd in 2012 aan het publiek onthuld. Julia is bedoeld om de tekortkomingen in Python en andere talen en applicaties die worden gebruikt voor wetenschappelijk computergebruik en gegevensverwerking aan te pakken. "We zijn hebzuchtig", schreven ze. Ze wilden meer: 

We willen een taal die open source is, met een liberale licentie. We willen de snelheid van C met de dynamiek van Ruby. We willen een taal die homoiconisch is, met echte macro's zoals Lisp, maar met voor de hand liggende, vertrouwde wiskundige notatie zoals Matlab. We willen zoiets bruikbaars voor algemeen programmeren als Python, zo gemakkelijk voor statistieken als R, zo natuurlijk voor stringverwerking als Perl, zo krachtig voor lineaire algebra als Matlab, en zo goed in het aan elkaar lijmen van programma's als de shell. Iets dat eenvoudig te leren is, maar toch de meest serieuze hackers tevreden houdt. We willen het interactief en we willen dat het wordt samengesteld.

(Hebben we al gezegd dat het zo snel moet zijn als C?)

Hier zijn enkele manieren waarop Julia die ambities implementeert:

  • Julia is samengesteld, niet geïnterpreteerd.  Voor snellere runtime-prestaties is Julia just-in-time (JIT) gecompileerd met behulp van het LLVM-compilerkader. Op zijn best kan Julia de snelheid van C.
  • Julia is interactief. Julia bevat een REPL (read-eval-print loop) of interactieve opdrachtregel, vergelijkbaar met wat Python biedt. Snelle eenmalige scripts en opdrachten kunnen direct worden ingevoerd.
  • Julia heeft een duidelijke syntaxis. Julia's syntaxis is vergelijkbaar met die van Python: beknopt, maar ook expressief en krachtig.
  • Julia combineert de voordelen van dynamisch typen en statisch typen. U kunt typen voor variabelen opgeven, zoals 'niet-ondertekend 32-bits geheel getal'. Maar u kunt ook hiërarchieën van typen maken om algemene gevallen toe te staan ​​om variabelen van specifieke typen af ​​te handelen, bijvoorbeeld om een ​​functie te schrijven die gehele getallen accepteert zonder de lengte of ondertekening van het gehele getal op te geven. U kunt zelfs helemaal niet typen als dit in een bepaalde context niet nodig is.
  • Julia kan Python-, C- en Fortran-bibliotheken aanroepen. Julia kan rechtstreeks communiceren met externe bibliotheken die zijn geschreven in C en Fortran. Het is ook mogelijk om te communiceren met Python-code via de PyCall-bibliotheek en zelfs gegevens te delen tussen Python en Julia.
  • Julia ondersteunt metaprogrammering. Julia-programma's kunnen andere Julia-programma's genereren en zelfs hun eigen code aanpassen, op een manier die doet denken aan talen als Lisp.
  • Julia heeft een complete debugger.  Julia 1.1 introduceerde een foutopsporingssuite, die code uitvoert in een lokale REPL en waarmee je de resultaten kunt doorlopen, variabelen kunt inspecteren en breakpoints in code kunt toevoegen. U kunt zelfs fijnmazige taken uitvoeren, zoals het doorlopen van een functie die door code is gegenereerd.

Gerelateerde video: hoe Python programmeren eenvoudiger maakt

Python is perfect voor IT en vereenvoudigt vele soorten werk, van systeemautomatisering tot het werken op geavanceerde gebieden zoals machine learning.

Julia vs. Python: Julia taalvoordelen

Julia is vanaf het begin ontworpen voor wetenschappelijke en numerieke berekeningen. Het is dus geen verrassing dat Julia veel functies heeft die voordelig zijn voor dergelijke gevallen:

  • Julia is snel. Julia's JIT-compilatie en typeverklaringen betekenen dat het routinematig 'pure', niet-geoptimaliseerde Python met ordes van grootte kan verslaan. Python kan sneller worden gemaakt door middel van externe bibliotheken, JIT-compilers van derden (PyPy) en optimalisaties met tools zoals Cython, maar Julia is ontworpen om direct sneller te zijn.
  • Julia heeft een wiskundige syntaxis. Een belangrijke doelgroep voor Julia zijn gebruikers van wetenschappelijke computertalen en omgevingen zoals Matlab, R, Mathematica en Octave. Julia's syntaxis voor wiskundige bewerkingen lijkt meer op de manier waarop wiskundige formules buiten de computerwereld worden geschreven, waardoor het gemakkelijker wordt voor niet-programmeurs om het op te pikken.
  • Julia heeft automatisch geheugenbeheer. Net als Python belast Julia de gebruiker niet met de details van het toewijzen en vrijmaken van geheugen, en biedt het enige mate van handmatige controle over garbage collection. Het idee is dat als je overstapt op Julia, je niet een van de gebruikelijke gemakken van Python verliest.
  • Julia biedt superieur parallellisme. Wiskundig en wetenschappelijk computergebruik doet het goed als u gebruik kunt maken van alle bronnen die op een bepaalde machine beschikbaar zijn, met name meerdere kernen. Zowel Python als Julia kunnen bewerkingen parallel uitvoeren. De methoden van Python voor het parallelliseren van bewerkingen vereisen echter vaak dat gegevens worden geserialiseerd en gedeserialiseerd tussen threads of knooppunten, terwijl Julia's parallellisatie meer verfijnd is. Verder is Julia's parallellisatie-syntaxis minder topzwaar dan die van Python, waardoor de drempel voor het gebruik ervan wordt verlaagd.
  • Julia ontwikkelt zijn eigen native machine learning-bibliotheken. Flux is een machine learning-bibliotheek voor Julia met veel bestaande modelpatronen voor veelvoorkomende gebruiksscenario's. Omdat het volledig in Julia is geschreven, kan het naar behoefte door de gebruiker worden aangepast en gebruikt het Julia's eigen just-in-time-compilatie om projecten van binnenuit te optimaliseren. 

Julia vs. Python: Voordelen van Python

Hoewel Julia speciaal is gebouwd voor datawetenschap, terwijl Python min of meer in de rol is geëvolueerd, biedt Python enkele dwingende voordelen voor de datawetenschapper. Enkele van de redenen waarom Python voor algemene doeleinden de betere keuze is voor data science-werk:

  • Python maakt gebruik van op nul gebaseerde array-indexering. In de meeste talen, inclusief Python en C, wordt het eerste element van een array benaderd met een nul, bijvoorbeeld string[0]in Python voor het eerste teken in een string. Julia gebruikt 1 voor het eerste element in een array. Dit is geen willekeurige beslissing; veel andere wiskundige en wetenschappelijke toepassingen, zoals Mathematica, gebruiken 1-indexering en Julia is bedoeld om dat publiek aan te spreken. Het is mogelijk om nulindexering in Julia te ondersteunen met een experimentele functie, maar standaard 1-indexering kan acceptatie door een algemener publiek met ingebakken programmeergewoonten in de weg staan.
  • Python heeft minder opstartoverhead.  Python-programma's zijn misschien langzamer dan Julia-programma's, maar de Python-runtime zelf is lichter en het kost over het algemeen minder tijd voordat Python-programma's starten en de eerste resultaten opleveren. Hoewel de JIT-compilatie de uitvoeringstijd voor Julia-programma's versnelt, gaat het ten koste van een langzamer opstarten. Er is veel werk verzet om Julia sneller te laten starten, maar Python heeft hier nog steeds een voorsprong.
  • Python is volwassen. De Julia-taal is jong. Julia is pas sinds 2009 in ontwikkeling en heeft gaandeweg een behoorlijke hoeveelheid feature-churn ondergaan. Python bestaat daarentegen al bijna 30 jaar.
  • Python heeft veel meer pakketten van derden. De breedte en het nut van Pythons cultuur van pakketten van derden blijft een van de grootste attracties van de taal. Nogmaals, Julia's relatieve nieuwheid betekent dat de cultuur van software eromheen nog klein is. Een deel daarvan wordt gecompenseerd door de mogelijkheid om bestaande C- en Python-bibliotheken te gebruiken, maar Julia heeft eigen bibliotheken nodig om te gedijen. Bibliotheken zoals Flux en Knet maken Julia nuttig voor machine learning en deep learning, maar het overgrote deel van dat werk wordt nog steeds gedaan met TensorFlow of PyTorch.
  • Python heeft miljoenen gebruikers. Een taal is niets zonder een grote, toegewijde en actieve gemeenschap eromheen. De gemeenschap rond Julia is enthousiast en groeit, maar is nog maar een fractie van de grootte van de Python-gemeenschap. De enorme community van Python is een enorm voordeel. 
  • Python wordt sneller. Afgezien van het verkrijgen van verbeteringen aan de Python-interpreter (inclusief verbeteringen aan multi-core en parallelle verwerking), is Python gemakkelijker te versnellen. Het mypyc-project vertaalt type-geannoteerde Python in native C, veel minder onhandig dan Cython. Het levert doorgaans viervoudige prestatieverbeteringen op, en vaak veel meer voor pure wiskundige bewerkingen.