Data Programming Course  Piano delle lezioni

  1. controllo di versione e fossil
    • Installazione python e matlab, ambiente di sviluppo spyder e matlab
    • Altri linguaggi ad alto livello: R, Mathematica/Sage, Scala, Julia
    • Version control, Git and Fossil
    • Documentazione, help, metadati, bug tracking
    • Code correctness, replicability and reproducibility (fixing the random seed)
  2. introduzione a python
    • Introduzione a python
    • Interfacce di esecuzione: script, MATLAB-like, notebook
    • Strutture dati dai base: liste, set, dizionari, queue, deque
  3. testing e hypothesys
    • test: classical test, property test, regression testing
    • (https://en.wikipedia.org/wiki/Therac-25)
    • (https://www.fastcompany.com/28121/they-write-right-stuff)
    • The pain of testing random processes
    • debugging?
  4. vettorizzazione e numpy
    • programmazione vettoriale (numpy e matlab)
    • Problemi del calcolo numerico? Overflow, underflow, precision loss, testing per uguaglianza/similitudine
  5. Scipy
    • Librerie pre-esistenti (scipy, etc...), non reinventare la ruota
    • Visualizzazione grafica
  6. Dataframe e Pandas
    • IO di dati, caricare CSV, excel, scaricare da internet e simili
    • dataframes, tidy data, split-apply-combine (grouping), join, pivot e melt
  7. data pipeline e snakemake
    • life cycle of data (raw, source, usage, temporary)
    • file formats: hdf5, csv, json, xml, yaml, ini, etc..
    • Data testing: hashing functions, sanity controls
    • DRY KISS (Don’t Repeat Yourself, Keep It Simple Stupid), remove redundancy from code and data
    • pipeline e make, idempotenza, DAG (directed acyclic graphs)
  8. profiling
    • line_profile
    • memory_profile
  9. intro ai big data
    • intro to big data: out-of-core algorithm (chunking), sparse matrices, memmapping
    • Semafori, Resource locks (lock files), operazioni atomiche, concurrency and parallel execution

Argomenti da inserire?

  • regex
  • comandi di bash
  • debugging
  • iteratori e generatori
  • programmazione funzionale (iteratori, map-filter-reduce)

Argomenti che non tratteremo

  • Interfacciamento con database (SQL)
  • Interfaccia con linguaggi di basso livello (Cython)
  • Interfaccia con altri linguaggi di alto livello ( R )
  • Algebra simbolica (sympy)
  • Pacchetti statistici/machine learning
  • Design GUI interface
  • Esplorazione dati, glueviz
  • Generazione automatica di report (docutils, reportlab) e literate programming
  • Bash e librerie per interfacciarcisi
  • Micro web framework per il reporting (flask, bottle, etc...)