Julia vs Python: qual è il migliore per la scienza dei dati?

Tra i tanti casi d'uso coperti da Python, l'analisi dei dati è diventata forse la più grande e significativa. L'ecosistema Python è ricco di librerie, strumenti e applicazioni che rendono il lavoro di elaborazione scientifica e analisi dei dati veloce e conveniente.

Ma per gli sviluppatori del linguaggio Julia, mirato specificamente a "elaborazione scientifica, apprendimento automatico, data mining, algebra lineare su larga scala, calcolo distribuito e parallelo", Python non è abbastanza veloce o conveniente . Julia mira a fornire agli scienziati e agli analisti di dati non solo uno sviluppo rapido e conveniente, ma anche un'incredibile velocità di esecuzione. 

Qual è la lingua Julia?

Creata nel 2009 da un team di quattro persone e svelata al pubblico nel 2012, Julia ha lo scopo di affrontare le carenze di Python e di altri linguaggi e applicazioni utilizzati per il calcolo scientifico e l'elaborazione dei dati. "Siamo avidi", hanno scritto. Volevano di più: 

Vogliamo un linguaggio open source, con una licenza liberale. Vogliamo la velocità di C con il dinamismo di Ruby. Vogliamo un linguaggio omoiconico, con macro reali come Lisp, ma con notazioni matematiche ovvie e familiari come Matlab. Vogliamo qualcosa di utilizzabile per la programmazione generale come Python, facile per la statistica come R, naturale per l'elaborazione di stringhe come Perl, potente per l'algebra lineare come Matlab, bravo a incollare i programmi insieme come la shell. Qualcosa di semplice da imparare, ma che rende felici gli hacker più seri. Lo vogliamo interattivo e lo vogliamo compilato.

(Abbiamo detto che dovrebbe essere veloce come C?)

Ecco alcuni dei modi in cui Julia implementa queste aspirazioni:

  • Julia è compilata, non interpretata.  Per prestazioni di runtime più rapide, Julia viene compilata just-in-time (JIT) utilizzando il framework del compilatore LLVM. Nella migliore delle ipotesi, Julia può avvicinarsi o eguagliare la velocità di C.
  • Julia è interattiva. Julia include un REPL (ciclo di lettura-valutazione-stampa) o riga di comando interattiva, simile a ciò che offre Python. Script e comandi una tantum rapidi possono essere inseriti direttamente.
  • Julia ha una sintassi semplice. La sintassi di Julia è simile a quella di Python: concisa, ma anche espressiva e potente.
  • Julia combina i vantaggi della digitazione dinamica e della digitazione statica. Puoi specificare i tipi di variabili, come "intero senza segno a 32 bit". Ma è anche possibile creare gerarchie di tipi per consentire casi generali per la gestione di variabili di tipi specifici, ad esempio per scrivere una funzione che accetta numeri interi senza specificare la lunghezza o il segno dell'intero. Puoi anche fare a meno di digitare completamente se non è necessario in un contesto particolare.
  • Julia può chiamare le librerie Python, C e Fortran. Julia può interfacciarsi direttamente con le librerie esterne scritte in C e Fortran. È anche possibile interfacciarsi con il codice Python tramite la libreria PyCall e persino condividere i dati tra Python e Julia.
  • Julia supporta la metaprogrammazione. I programmi Julia possono generare altri programmi Julia e persino modificare il proprio codice, in un modo che ricorda linguaggi come il Lisp.
  • Julia ha un debugger completo.  Julia 1.1 ha introdotto una suite di debug, che esegue il codice in un REPL locale e consente di scorrere i risultati, ispezionare le variabili e aggiungere punti di interruzione nel codice. Puoi persino eseguire attività a grana fine come passare attraverso una funzione generata dal codice.

Video correlato: come Python semplifica la programmazione

Perfetto per l'IT, Python semplifica molti tipi di lavoro, dall'automazione del sistema al lavoro in campi all'avanguardia come l'apprendimento automatico.

Julia vs Python: vantaggi del linguaggio Julia

Julia è stata progettata fin dall'inizio per il calcolo scientifico e numerico. Non sorprende quindi che Julia abbia molte funzionalità vantaggiose per tali casi d'uso:

  • Julia è veloce. La compilazione JIT di Julia e le dichiarazioni di tipo significano che può regolarmente battere Python "puro" e non ottimizzato per ordini di grandezza. Python può essere reso più veloce tramite librerie esterne, compilatori JIT di terze parti (PyPy) e ottimizzazioni con strumenti come Cython, ma Julia è progettata per essere più veloce fin dall'inizio.
  • Julia ha una sintassi adatta alla matematica. Uno dei principali destinatari di Julia sono gli utenti di linguaggi e ambienti di elaborazione scientifica come Matlab, R, Mathematica e Octave. La sintassi di Julia per le operazioni matematiche assomiglia più al modo in cui le formule matematiche vengono scritte al di fuori del mondo informatico, rendendo più facile la comprensione per i non programmatori.
  • Julia ha la gestione automatica della memoria. Come Python, Julia non appesantisce l'utente con i dettagli di allocare e liberare memoria e fornisce alcune misure di controllo manuale sulla raccolta dei rifiuti. L'idea è che se passi a Julia, non perdi una delle comodità comuni di Python.
  • Julia offre un parallelismo superiore. La matematica e il calcolo scientifico prosperano quando puoi utilizzare tutte le risorse disponibili su una determinata macchina, in particolare più core. Sia Python che Julia possono eseguire operazioni in parallelo. Tuttavia, i metodi di Python per le operazioni di parallelizzazione spesso richiedono che i dati vengano serializzati e deserializzati tra thread o nodi, mentre la parallelizzazione di Julia è più raffinata. Inoltre, la sintassi di parallelizzazione di Julia è meno pesante di quella di Python, abbassando la soglia per il suo utilizzo.
  • Julia sta sviluppando le proprie librerie native di machine learning. Flux è una libreria di machine learning per Julia che ha molti modelli di modelli esistenti per casi d'uso comuni. Poiché è scritto interamente in Julia, può essere modificato in base alle esigenze dell'utente e utilizza la compilazione just-in-time nativa di Julia per ottimizzare i progetti dall'interno. 

Julia vs Python: vantaggi di Python

Sebbene Julia sia creata appositamente per la scienza dei dati, mentre Python si è più o meno evoluto nel ruolo, Python offre alcuni vantaggi convincenti al data scientist. Alcuni dei motivi per cui Python "generico" può essere la scelta migliore per il lavoro di data science:

  • Python utilizza l'indicizzazione degli array a base zero. Nella maggior parte dei linguaggi, inclusi Python e C, si accede al primo elemento di un array con uno zero, ad esempio string[0]in Python per il primo carattere di una stringa. Julia usa 1 per il primo elemento in un array. Questa non è una decisione arbitraria; molte altre applicazioni matematiche e scientifiche, come Mathematica, utilizzano l'indicizzazione 1 e Julia ha lo scopo di attirare quel pubblico. È possibile supportare l'indicizzazione zero in Julia con una funzionalità sperimentale, ma l'indicizzazione 1 per impostazione predefinita può ostacolare l'adozione da parte di un pubblico più generico con abitudini di programmazione radicate.
  • Python ha meno sovraccarico di avvio.  I programmi Python possono essere più lenti dei programmi Julia, ma il runtime Python stesso è più leggero e generalmente richiede meno tempo affinché i programmi Python si avviino e forniscano i primi risultati. Inoltre, sebbene la compilazione JIT acceleri i tempi di esecuzione dei programmi Julia, ha il costo di un avvio più lento. È stato fatto molto lavoro per far iniziare Julia più velocemente, ma Python ha ancora un vantaggio qui.
  • Python è maturo. La lingua Julia è giovane. Julia è in fase di sviluppo solo dal 2009 e nel corso del tempo ha subito una discreta quantità di funzionalità. Al contrario, Python esiste da quasi 30 anni.
  • Python ha molti più pacchetti di terze parti. L'ampiezza e l'utilità della cultura di Python dei pacchetti di terze parti rimane una delle maggiori attrazioni del linguaggio. Ancora una volta, la relativa novità di Julia significa che la cultura del software attorno ad essa è ancora piccola. Alcuni di questi sono compensati dalla capacità di utilizzare le librerie C e Python esistenti, ma Julia ha bisogno di proprie librerie per prosperare. Librerie come Flux e Knet rendono Julia utile per il machine learning e il deep learning, ma la stragrande maggioranza di questo lavoro viene ancora svolto con TensorFlow o PyTorch.
  • Python ha milioni di utenti. Una lingua non è nulla senza una comunità ampia, devota e attiva intorno ad essa. La comunità intorno a Julia è entusiasta e in crescita, ma è ancora solo una frazione delle dimensioni della comunità Python. L'enorme comunità di Python è un enorme vantaggio. 
  • Python sta diventando più veloce. Oltre a ottenere miglioramenti all'interprete Python (inclusi miglioramenti all'elaborazione multi-core e parallela), Python è diventato più facile da accelerare. Il progetto mypyc traduce Python con annotazioni di tipo in C nativo, molto meno rumorosamente di Cython. Tipicamente produce miglioramenti delle prestazioni quadruplicati e spesso molto di più per operazioni matematiche pure.