Un nuovo linguaggio per la data science

Rispettando la realtà dei fatti, ogniqualvolta ho parlato di data science in questo blog il linguaggio di riferimento è sempre stato Python, con l’unica eccezione di quando ho parlato di Knime, uno strumento programmato in linguaggio Java, che consente di fare analisi di dati senza scrivere codice.
Da qualche anno è tuttavia insistente la presenza di un altro linguaggio open source, arricchitosi in poco tempo di funzionalità sempre più sofisticate, considerato ormai da molti come un forte concorrente di Python nel campo dell’analisi dei dati.
Si tratta del linguaggio Julia, nato alcuni anni fa al Massachusetts Institute of Technology (MIT).
Visto che la documentazione in lingua italiana su questo linguaggio è praticamente inesistente, e che quella esistente, oltre che essere in lingua inglese, molto spesso non è alla portata di dilettante, penso di fare cosa utile proponendo l’allegato manualetto per una conoscenza di base del linguaggio.
Al solito, il documento è liberamente scaricabile, stampabile e distribuibile.

julia

4 commenti su “Un nuovo linguaggio per la data science”

  1. Per i principianti di Julia segnalo il mio libro “Julia Quick Syntax Reference (Apress, 2019)” che, ha dispetto del titolo (voluto dall’editore), è alla fine un grande tutorial al linguaggio ed ai suoi principali packages.
    Non dovrei dirlo, ma visto che sono l’autore… trovate il PDF nei principali siti pirata.

    PS: ci sono alcune imprecisioni nel mini tutorial di questo articolo.. ad es la tipicizzazione eterogenea non è limitata agli array unidimensionali, ma è possibile con qualsiasi dimensione (gli array mono – vettori – e bidimensionali – matrici – sono casi specifici di `Array{T,N}`)

    1. Visto che ti chiami Antonello Lobianco, perché non hai scritto il tuo libro in lingua italiana?
      Uno dei motivi che mi ha spinto a produrre il mio tutorial è proprio l’assenza di documentazione in lingua italiana su Julia.
      Ti ringrazio per la precisazione: ma chissà quante sono le altre imprecisioni al livello dove sei arrivato tu.
      La mia finalità era quella di produrre una guida per iniziare a conoscere il linguaggio.

      1. Ciao, un paio di osservazioni.

        **Sulla lingua Inglese**

        Ovviamente avrei preferito scrivere il libro in Italiano, dove riesco tutt’oggi ad esprimermi meglio.
        Ma a parte che credo ci siano meno utilizzatori Julia in Italia che in un qualsiasi quartiere di una megalopoli indiana, il fatto è che ormai piaccia o non piaccia la lingua “di lavoro” in informatica e in molti (tutti??) gli altri settori è l’inglese. Magari non sarà cosi’ per sempre (a mio figlio di cinque anni la prossima settimana incomincio un corso di cinese, non si sa mai..), ma per il momento è cosi’..

        **Sul tutorial**

        In realtà, credo che il tuo tutorial sia molto ben fatto ed utile a chi volesse “incominciare” (ma costui dovrebbe sapere che comunque prima o poi dovrà leggere libri in inglese ed interfacciarsi con una comunità dove si parla inglese, anche tra italiani).
        Mi era balzata solo agli occhi il discorso degli Array, in quanto ne dai una visione un po’ particolare che potrebbe poi rimanere impressa ostacolando una comprensione più generale degli stessi (a me era successo ad es con i vettori in fisica.. visti inizialmente come concetti fisici non riuscivo a generalizzarli al concetto matematico).
        Gli Array in Julia sono “contenitori” n dimensionali. Possono avere 1,2 o n dimensioni (tensori).. poco importa. Infatti il “tipo” array” è parametrato dal tipo contenuto del contenitore e dal numero di dimensioni, ad es. `Array{Float64,2}` è una matrice (2 dimensioni) di decimali.
        In realtà non importa neanche che sia omogeneo od eterogeneo. Quello che importa è se il compilatore JIT riesca a determinare in fase di compilazione il tipo di contenuto (che puo’ essere anche un `Union{Float64,Int64,String}`, va benissimo…). Se ci riesce bene, compila le istruzioni richieste e queste in fase di esecuzione saranno eseguite efficientemente. Se non ci riesce, lo memorizza come `Any` e rimanda il tutto in fase di esecuzione, ed allora ci troveremo con delle prestazioni alla Python (ma il codice continuerà a funzionare, a differenza di Numba & C.).

        Un altro aspetto importante di Julia che viene visto nel tuo tutorial un po’ troppo come caso particolare è il multiple-dispatch, il polimorfismo in fase di esecuzione.
        Non è tanto che Julia “utilizza una sintassi tutta sua”, è che `metodo(oggetto1ClasseA,oggetto2ClasseB,…)` permette di differenziare `metodo` in funzione di qualsiasi degli argomenti con cui è chiamato. Questo avviene da sempre nei linguaggi ad oggetti in fase di compilazione, ma in run time è limitato al solo oggetto che “possiede” il metodo, ad es `oggetto1ClasseA.metodo()` puo’ essere implementato in maniera diversa da `oggetto2ClasseB.metodo()`, ma la scelta del metodo da chiamare dipende da quest’unico oggetto, mentre nel multiple-dispatch, dipende dal tipo di qualsiasi degli argomenti del metodo.
        In questo senso è una generalizzazione del tradizionale approccio agli oggetti, e risulta molto utile nel “far lavorare” insieme librerie scritte per scopi diversi (e spesso da persone diverse) che non “sanno” niente l’una dell’altra.

        In sintesi, personalmente ho passato quasi tutto il mio “workflow” (mi occupo di modellizzazione bio-economica del settore forestale) in Julia, quando prima utilizzavo C++ per il “lavoro duro” e Python per lo più per l’analisi dei dati, ora posso convergere su di un solo strumento (e come i pacchetti Julia sono scritti in Julia stesso, posso partecipare al loro sviluppo).

        Ciao!

        1. Sulla lingua inglese e sulla sua indispensabilità sono d’accordo. Sono tuttavia convinto che i primi passi, per chi non ci capisce nulla di una certa cosa, sia sempre meglio farli nella propria lingua.
          Per il resto, apprezzo le tue precisazioni che mi auguro invoglino i neofiti ad approfondire.
          Anche perché ritengo sia ingiusto che un gioiello come Julia sia così poco conosciuto ed utilizzato.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *