Uploaded avatar of iHiD

È l'Analytical April!

@iHiD
Oltre 3 anni fa
Video

Ciao a tutti! Abbiamo avuto il Functional February e il Mechanical March. Ora è il momento dell'Analytical April, in cui ci concentreremo sui linguaggi più adatti alla data science.

Come vi aspettate ormai dagli ultimi mesi, in questo video io ed Erik vi daremo una rapida panoramica di cosa tratta il mese e dei diversi linguaggi che esploreremo.

Come al solito, tra poco Erik ci guiderà attraverso i linguaggi, ma io inizierò con alcuni dettagli pratici del mese.

Per prima cosa, i linguaggi in primo piano di questo mese. Questo mese ne abbiamo solo tre: Julia, Python e R. Ciascuno di questi linguaggi è piuttosto diverso dagli altri, e ovviamente Python è un linguaggio molto versatile, ma questo mese vi incoraggeremo a provare ad usare questi linguaggi con una mentalità da data science.

Per ottenere il badge dell'Analytical April devi completare cinque esercizi in uno di questi linguaggi. Tra poco vedremo le differenze tra loro, ma in termini Exercism la nostra traccia Python ha un syllabus fantastico, quindi ti consiglio davvero di provarla. Speriamo anche di lanciare un syllabus di Julia durante il mese: molto del lavoro è già fatto e serve solo una rifinitura. R non ha un syllabus, ma ha molti esercizi interessanti con cui divertirti.

Abbiamo cinque esercizi in primo piano da provare:

  • etl: in cui puoi esplorare come rimodellare i dati in un formato diverso
  • largest-series-product: in cui puoi esercitarti con modi efficienti di cercare schemi in una stringa di cifre
  • saddle-points: per esplorare come lavorare con array multidimensionali/matrici
  • sum-of-multiples: per esercitarti a filtrare e sommare una sequenza di numeri
  • word-count: converti una stringa in parole e contale

Un promemoria: oltre al badge dell'Analytical April, c'è un badge #12in23 che dura tutto l'anno e che puoi ottenere risolvendo i vari esercizi in primo piano in qualsiasi momento dell'anno. Quindi dovrai risolvere quei 5 esercizi in Python, R o Julia entro quest'anno per ottenere quel badge! Per l'elenco completo degli esercizi, c'è un post sul forum linkato dalla pagina dell'Analytical April.

Infine, prima di addentrarci nei linguaggi, un promemoria: a marzo abbiamo lanciato il nostro nuovo server Discord. C'è stata un sacco di attività divertente, quindi dai un'occhiata. Il link è nella descrizione qui sotto!

Bene, esploriamo i linguaggi. Vediamo una rapida panoramica di ciascun linguaggio e poi ci addentreremo nelle loro caratteristiche e nei casi d'uso. Iniziamo con Python.

Python

  • Ideato e sviluppato da Guido van Rossum alla fine degli anni '80 come successore del linguaggio di programmazione ABC. Rilasciato per la prima volta nel 1991.
  • Sviluppato nei Paesi Bassi al Centrum Wiskunde & Informatica (CWI) (famoso per essere il luogo dove Edsger Dijkstra fece la maggior parte del suo lavoro), un laboratorio di ricerca finanziato dal governo.
  • Guido programmava usando C e script di shell, ma entrambi avevano degli svantaggi. Python mira a ottenere il meglio da entrambi i mondi, senza gli svantaggi.
  • Gestito dalla Python Software Foundation e le modifiche al linguaggio avvengono tramite le Python Enhancement Proposals (PEP) (simili alle RFC)

R

  • Creato da Ross Ihaka e Robert Gentleman all'Università di Auckland. R può essere considerato una diversa implementazione del linguaggio S (con differenze relativamente piccole), a cui è succeduto S-plus, un'implementazione commerciale (non aperta) di S. Mentre R condivide gran parte della sintassi con S, la sua semantica è ispirata a Scheme
  • Obiettivo: creare un linguaggio più adatto al calcolo statistico e alla grafica e più facile da usare rispetto ai software comparabili progettati dagli informatici

Julia

  • Sviluppato da Jeff Bezanson, Stefan Karpinski, Viral B. Shah ed Alan Edelman in modo aperto; attualmente ha più di mille contributori
  • Obiettivo: creare un linguaggio libero e ad alto livello che abbia la velocità di C, il dinamismo di Ruby, la metaprogrammazione di LISP, le capacità generali di Python, il supporto statistico di R, il supporto all'algebra lineare di MatLab e la potenza di elaborazione delle stringhe di Perl, il tutto essendo in grado di supportare l'esecuzione massivamente parallela
  • Eccellente per il calcolo scientifico, ma anche un linguaggio general purpose (il framework Genie per le app web)

Come per molti linguaggi, tutti e tre sono nati dall'insoddisfazione :)

Ok, bene. Quindi, in termini di casi d'uso, quando useresti ciascuno di questi linguaggi rispetto agli altri?

Python

  • Un vero linguaggio general purpose (siti web, script, calcolo scientifico)
  • Può essere usato per molti scopi diversi: IA (TensorFlow), calcolo scientifico (NumPy), script, siti web (Django), sistemi embedded (micro python), interfacciamento con l'hardware (ad esempio il raspberry pi), giochi (EVE online) e Python è persino andato su Marte
  • Ottimo per imparare a programmare: moltissime risorse ed una comunità enorme. Tantissime indicazioni su come scrivere codice pythonico (cioè come scrivere codice Python idiomatico, esempi) come «Esplicito è meglio che implicito» e «La leggibilità conta». Molti sistemi operativi ce l'hanno installato di default
  • Uno dei linguaggi più usati al momento, quindi molta documentazione, molte librerie e una grande comunità

R

  • R è usato in una grande varietà di ambiti, tra cui i ricercatori per analizzare i dati degli esperimenti, le università per insegnare statistica e analisi dei dati, il settore finanziario dove le statistiche sono fondamentali (ad esempio per le assicurazioni), lo stesso vale per la vendita al dettaglio (Amazon usa R per l'analisi dei dati) e la produzione (John Deere stima quante parti di ricambio produrre), il National Weather Service aiuta a prevedere il meteo e le catastrofi, il giornalismo dei dati (analizzare dati del mondo reale e darne un senso, spesso con la visualizzazione), molto usato in ambito sanitario, ad esempio per determinare la sicurezza di un farmaco sulla base degli studi preclinici

Julia:

  • Ottimo per il calcolo scientifico, il data mining, l'apprendimento automatico, l'algebra lineare e il calcolo distribuito. La notazione risulterà simile a quella matematica, quindi passare dall'equazione al codice è relativamente facile
  • Calcolo distribuito: i task (=coroutine) ed i channel permettono di eseguire codice in parallelo che comunica tra loro, con supporto multi-processo tramite il passaggio di messaggi (ottimo per il calcolo ad alte prestazioni)
  • Usato nel progetto Celeste (un supercomputer che esegue codice Julia per analizzare 178 terabyte di dati astronomici) (il che rende Julia parte del petaflop club, a cui all'epoca appartenevano solo C, C++ e Fortran; Julia è il primo linguaggio dinamico, un quadrilione di calcoli in virgola mobile al secondo. 1 con 15 zeri), Clima (Climate modeling alliance) ha persone del Caltech, del MIT e del Jet Propulsion Laboratory della NASA che sviluppano un modello di previsione del clima, CERN, ASML

E dal punto di vista della programmazione, in cosa differiscono? Sono funzionali, a oggetti, ecc.?

Python:

  • Dinamico e fortemente tipizzato
  • Multi-paradigma: imperativo, funzionale, ma in realtà un linguaggio orientato agli oggetti (tutto è un oggetto)
  • L'interprete predefinito, CPython, compila in bytecode che poi viene interpretato in una macchina virtuale. PyPy è un'alternativa a CPython che compila just-in-time in codice macchina

R:

  • Dinamico e fortemente tipizzato
  • Multi-paradigma, con un nucleo funzionale ma che supporta anche stili procedurali o orientati agli oggetti

Julia:

  • Dinamico e fortemente tipizzato, compilato just-in-time
  • Multi-paradigma: imperativo, orientato agli oggetti (overloading tramite multiple dispatch), funzionale (funzioni di ordine superiore, applicazione parziale, operatore pipe)
  • Il codice viene compilato just-in-time ahead-of-time a runtime

E continuando a guardarli dal punto di vista della programmazione, qualcuno di questi linguaggi ha caratteristiche particolarmente distintive?

Python:

  • Sintassi piacevole: la sensibilità agli spazi bianchi rende facile vedere lo scope. Il codice di solito è facile da leggere, ad esempio condizioni booleane leggibili (and/or)
  • Espressivo: fai molto con pochissimo codice (list comprehension, generator, decorator)
  • Una vastissima quantità di librerie disponibili per gli scopi più diversi
  • Come accennato prima, è davvero un linguaggio general purpose, perché può essere usato in molti scenari diversi

Julia

  • Multiple dispatch. Decide quale funzione chiamare in base ai tipi di tutti gli argomenti (come l'overloading delle funzioni)
  • Dinamico ma con ottime prestazioni. Le prestazioni di Julia possono rivaleggiare con quelle di Fortran e avvicinarsi a quelle di C. Il codice «normale» è spesso performante (non servono trucchi assurdi, le funzioni più piccole sono anzi incoraggiate). Librerie per supportare l'esecuzione del codice sulla GPU
  • Calcolo distribuito: i task (=coroutine) ed i channel permettono di eseguire codice in parallelo che comunica tra loro, con supporto multi-processo tramite il passaggio di messaggi (ottimo per il calcolo ad alte prestazioni)
  • Ottimo per il calcolo scientifico, il data mining, l'apprendimento automatico, l'algebra lineare e il calcolo distribuito. La notazione risulterà simile a quella matematica, quindi passare dall'equazione al codice è relativamente facile

R:

  • Tipi di dati flessibili: il vettore è il tipo centrale, persino gli scalari sono vettori. I vettori possono avere metadati associati (ad esempio i nomi dei loro elementi). Le liste sono eterogenee (possono avere elementi di tipi diversi). Un tipo speciale, il dataframe, per raccolte di vettori (tutti della stessa lunghezza).
  • Le operazioni vettorializzate permettono di aggiornare i vettori in modo conciso, efficiente e leggibile
  • R è una suite integrata di strumenti software per la manipolazione dei dati, il calcolo e la visualizzazione grafica. Esplorazione, visualizzazione e manipolazione dei dati facili tramite R Studio. Ottimo per il data mining
  • Una grande comunità, amichevole e diversificata. La R for Data Science Online Learning Community è una comunità di studenti di R di tutti i livelli che lavorano insieme per migliorare le proprie competenze. C'è un gruppo Slack aperto dove i membri possono restare in contatto e aiutarsi a vicenda con i problemi.

Se qualcuno non è sicuro di quale provare ad aprile, come consiglieresti di decidere?

Come tutto nell'informatica: dipende! In questo caso direi che dipende soprattutto dai tuoi obiettivi e dalla tua esperienza personale.

Se sei alle prime armi con la programmazione, ti interessano l'IA o l'apprendimento automatico, oppure vuoi imparare un linguaggio che puoi usare per molte cose diverse, probabilmente ti consiglierei di iniziare con Python: Il numero di risorse disponibili per Python è gigantesco, e comprende molti corsi online gratuiti Python è usato ovunque con l'IA e l'apprendimento automatico Python può essere usato per moltissimi scopi La traccia Python ha attiva la modalità di apprendimento, che può aiutarti ad imparare i concetti fondamentali del linguaggio in modo divertente

Se ti interessa fare lavoro statistico, vuoi esplorare e visualizzare i dati o vuoi scoprire un modo diverso di lavorare con i dati, il linguaggio R è un'ottima scelta: I tipi di dati di R si basano su collezioni di dati (vettori/liste) e le operazioni si applicano alle collezioni con facilità (senza bisogno di cicli) L'IDE RStudio è ottimo per esplorare e visualizzare i dati R ha un eccellente supporto per l'analisi statistica R permette di tracciare grafici dei dati con facilità

Se ti interessa il calcolo scientifico, vuoi eseguire codice in modo concorrente, tieni davvero alle prestazioni o vuoi imparare un linguaggio moderno ed elegante che offre qualcosa di diverso dalla maggior parte degli altri linguaggi, ti consiglierei Julia:

  • Multiple dispatch sarà una novità per molti ed è incredibilmente potente
  • Julia è ottimo per il calcolo scientifico
  • Il sistema di tipi di Julia è flessibile ed espressivo
  • Julia ha prestazioni eccellenti
  • Julia è ottimo per l'esecuzione concorrente

Naturalmente, se hai tempo ti consiglierei di provarli tutti e tre! Non sai mai davvero quale linguaggio ti piacerà finché non l'hai provato.

01 aprile 2023 · Ti è stato utile?