Sei sulla pagina 1di 101

WEB DATA SCIENCE

28/02
Introduzione alla Data Science → disciplina che si occupa dell’estrazione di significato da grandi
quantità di dati. Siamo completamente immersi dai dati e siamo generatori di essi.
Data scientist -> prende questa enorme quantità di dati e fa il data mining. Cercare di estrarre
informazioni che sono nascoste all’interno dei dati. Processa i dati e una volta capito cosa c’è li
visualizza. Il tune gli permette di identificare l’informazione contenuta del dato.
- Data base → dati raccolti in esso.
- Data processing → processamento dati e fare in modo che tutto sia sulla stessa scala di
lettura.
- Pattern recognition → riconoscimento di percorsi.
- Statistic → fare conteggi, quanto di più quanto di meno, quanto in media, quanto molto
lontano dalla media rispetto ai dati che si sta osservando.
- Machine learning → idea che tutti i processi, i modelli di machine learning alla loro base sono
i dati, se non ci sono abbastanza dati puliti il machine learning non funziona.
Hacker: persone che si divertono nel superare e/o aggirare i limiti imposti dall’ambiente.
o Figura del Data Scientist nasce nel 2008 opera di Patill e Hammerbacher. Idea di nuova figura
professionale. Era il periodo di sviluppo delle telecomunicazioni, smartphone…
Cercare di capire che, se capita un certo evento allora bisogna lavorare così, basato sulle relazioni ed
elementi estratti da Internet.
Raccogliere – organizzare – controllare le fonti dei dati. Organizzare perché i dati possono essere
incompleti, sporchi, disordinati. In più controllare la fonte di quel dato, è possibile qualcuno stia
mettendo danni malevoli nella mia raccolta dati. Si uniscono tutte queste fonti di dati tramite dei
flussi di funzione che servono a costruire informazioni utili alle diverse aree di business.
Figura Data Scientist -> ponte tra mondo IT e le LOB.
Step di una Data Scientist:
1- Definizione dell’obiettivo, research goal
2- Raccolta dati, vedere se ci sono banche dati o se devo pagare qualcuno che faccia questo tipo
di analisi…
3- Preparazione dei dati perché ho bisogno dimetterli bene tra loro
4- Esplorazione dei dati usando magari statistiche e medie
5- Modellazione, provo a creare modelli predittivi sulla base dei dati che ho avuto
6- Presentazione ed automazione, devo far vedere i dati che ho ottenuto a qualcuno che poi li
sfrutterà per farci del business sopra.
Ex: L’Internal Revenue Service (IRS) e l’evasione delle tasse. Prima ipotesi: pago tanti ispettori che
vanno a vedere tutte le dichiarazioni dei redditi degli americani. Altra ipotesi: matchare i dati
pagando un po' di data scientists.

1
L’analista dei dati dovrebbe già avere i dati pronti il Data Scientist studia anche la parte di raccolta
dati.
6 step
✓ Definizione degli obiettivi
✓ Elenco dei benefici per l’organizzazione
✓ Dati e risorse richieste
✓ Programma (timetable) e lista dei deliverable
Poi RACCOLGO I DATI

• Generalmente si inizia da raccolta da dati interni all’azienda per poi estendere a sorgenti e
fornitori esterni
• Setup dell’infrastruttura di memorizzazione
• Deve essere verificato principalmente che dati raccolti siano coerenti con i dati contenuti
nelle fonti originali
• I dati in questa fase possono essere molto eterogenei -> potrei avere tantissimi documenti
ad es. formati (PDF, documenti Word, pagine web, immagini…), lingua, organizzazione delle
informazioni (come? Tabella, testo libero…)
• Stili
Poi data preparation e data processing → CONTROLLO QUALITA’ DEI DATI

• Data cleasing (rimozione typos, valori mancanti, errori di codifica, duplicati, outliers: dato
completamente sbagliato)
• Data transformation (aggregazione, riduzione del numero delle variabili: non mi interessano
più tutti i valori dei dati ma solo alcuni)
• Data combination
80% elaborazione dati passato nella preparazione. “Garbage in equals garbage out”
ESPLORAZIONE DEI DATI → capire cosa ci stanno dicendo i dati. Interazione fra le variabili.
Tecniche di clustering: raggruppamento grazie al quale posso ottenere già buoni risultati dei modelli
predittivi. Quando vengono fatte queste cose probabilmente appaiono altri outliers.
MODELLAZIONE, data modelling

• Obiettivo → costruire modelli che facciano delle proiezioni, ad esempio, classifichino gli
oggetti o comprendo aspetti del sistema che prima non avevo visto
• Uso machine learning
• Costruzione di modelli: processo iterativo tipicamente in tre fasi: scelta della tecnica di
modellazione e le variabili che voglio utilizzare, esecuzione del modello, diagnosi e confronto
dei modelli per poi confrontarlo con un altro modello.
PRESENTAZIONE ED AUTOMAZIONE

2
Obiettivo → presentare e comunicare i risultati con dashboards, reports, grafici, presentazioni… e
poi opzionale: realizzazione di un modulo software indipendente riutilizzabile per analisi futuro o
all’interno di un prodotto o applicazione.
Il corso è WEB DATA SCIENCE
Come funziona il web? Analizziamo le tecnologie alla base di Internet, il WWW
Il web è un universo ricco di informazioni che vanno elaborate opportunamente:
- Documenti multilingua possono servire per sviluppare traduttori automatici
- Uso dati dei siti di rivenditori online
- Informazioni di profili pubblici (Facebook, LinkedIn) usati nel capo delle risorse umaneù

➔ Web data science perché il Web è una delle principali sorgenti che possiamo andare ad
utilizzare.
Cosa succede se si clicca un collegamento ipertestuale, o link, in una pagina Web?
Che cos’è la telecomunicazione? Tele in greco è lontano, dal latino communicare che significa
rendere comune o condividere.
Ogni procedimento che permette di far pervenire a uno o più corrispondenti delle informazioni di
varia natura utilizzando un qualsiasi sistema di trasmissione (Treccani)
Rete di telecomunicazioni → insieme di dispositivi e dei loro collegamenti che consentono di
trasmettere o ricevere informazioni di qualsiasi tipo tra due o più utenti che sono situati in posizioni
geograficamente distinte usando cavi, radio o altri sistemi elettromagnetici o ottici. Ad es. come
facciamo a parlare con uno che sta in America? Esiste un cavo grosso, un insieme di fibre ottiche che
sono posate sul fondo dell’Oceano e che lo attraversano e arrivano da una parte in Spagna e da una
parte negli Stati Uniti. Abbiamo anche le comunicazioni satellitari… reti di telecomunicazioni →
insieme di dispositivi collegati alla cella del luogo in cui siamo.
Reti di calcolatori → insieme di calcolatori autonomi (computer) che sono collegati mediante una
rete di (tele)comunicazione. Gli utenti di questi dispositivi sono in grado di interagire in modo
esplicito con la rete. I calcolatori connessi a questa rete possono mantenere un certo grado di
indipendenza.
IL WEB NON È INTERNET
Internet è la rete, il Web è l’infrastruttura che sta sopra e permette di comunicare.
Il Web è uno dei servizi di Internet si basa tutto sulle tecnologie messe a disposizione da Internet.
Internet: insieme di reti interconnesse ovvero rete composta da altre reti più piccole di dispositivi:
laptop, cellulari… interconnessi tra loro. Ognuno di noi se prova a guardare una mail o un sito che è
in Giappone riesce ma passa attraverso tante reti o sotto-reti diverse. Inoltre, vengono usati poi
specifici protocolli di comunicazione. Tipo FTP (file transfer protocoll) oppure per streaming video
RTSP (real time streaming protocol). Internet è la rete.
Quali sono i servizi di Internet?

3
- Il WWW
- E-mail (per scambio messaggi)
- Servizi di messaggistica istantanea (Whatsapp, Telegram)
- Servizi di streaming audio (Spotify) o video (Netflix)

Tutti servizi che si appoggiano alla rete Internet.


Internet è nato durante la Guerra Fredda USA vs Russia. Se viene bombardata una zona come si
sarebbe fatto per comunicare? Serviva una rete di comunicazione abbastanza robusta.
ARPA – 1958
ARPANET -> precursore di Internet. 29 Ottobre 1969 primo messaggio inviato da un computer del
laboratorio dell’UCLA ad un computer dello SRI: “LO”, volevano scrivere login il problema è che dopo
crashò tutto.
Nel luglio del 1977 → ARPANET aveva 61 nodi ed era ancora privata usata da militari o agenti di
ricerca. Una delle prime applicazioni è electronic mail o e-mail. Avevano Internet ma non avevano il
WWW.
Sviluppo della tecnica a commutazione di pacchetto per trasportare dati su reti.
Mappa di ARPANET (1977)

Tutti i collegamenti delle università


nelle varie città, c’è anche Londra
quindi erano iniziati i collegamenti
anche con l’Inghilterra.

Cosa si intende con rete commutata? Ovvero che cambia, la commutazione è la capacità che ha la
rete di costruire, mantenere e abbattere un collegamento (canale) tra i dispositivi che la
compongono (detti nodi della rete).
Le linee telefoniche dell’epoca non erano a commutazione, il commutatore dell’epoca era una
persona che attaccava il cavo da una parte all’altra e il numero di cavi era limitato, il mezzo di
comunicazione, il mezzo telefonico veniva usato da una coppia di persone alla volta. Creavo una rete
ma una sola: punto a punto.
È una caratteristica delle reti di calcolatori (e non solo). Come funziona?

4
- Una serie di nodi intermedi coinvolti in una trasmissione per connettere una sorgente ad una
destinazione
- Ogni nodo intermedio è parte di una commutazione e commuta (switch) i dati ricevendoli e
ritrasmettendoli al nodo successivo del percorso.

Se salta il collegamento da 2 a 4 la rete funziona ugualmente. Il


problema è se salta il collegamento da 2 a 4 e da 2 a 3 e quello
da 2 a 1. A questo punto A rimarrebbe da solo. Se cadesse
completamente il nodo 3 tutto funzionerebbe lo stesso.

Vantaggio reti commutate → ci permettono di avere scambiare ed essere robusti in caso di fallimenti.
Esistono due tipi di commutazione:

• A commutazione di circuito
• A commutazione di pacchetto
Commutazione a circuito → viene creato un canale temporaneo dedicato: è composto da una serie
di connessioni che sono dedicate solo a quella comunicazione e ogni nodo instrada quei dati e non
ha nessun ritardo visto che quella linea la dedico sollo a quella comunicazione, il dato parte e arriva
a destinazione.
➔ È una reale connessione fisica tra due stazioni comunicanti realizzata attraverso la connessone
di nodi intermedi sulla rete. Canale di comunicazione che viene creato è temporaneo e ogni
comunicazione necessita di 3 fasi:
- Apertura della connessione
- Trasferimento dati
- Chiusura della connessione
Scenario:

Reti a commutazione di circuito: prima che il dato possa essere effettivamente trasferito deve essere
stabilito un canale/percorso che collega mittente e destinatario per tutto il tempo necessario a
5
trasmettere i dati. L’uso del cammino è esclusivo e continuo, nessun altro può intromettersi in quella
comunicazione o usare quella parte di rete. Ciò può essere vantaggioso perché l’utente può usare
quel canale al massimo. Problema: mittente 2 finché il mittente 1 non ha finito deve aspettare, non
può comunicare esattamente come quando si chiama qualcuno ed è occupato.

Cosa succede invece nella commutazione di pacchetto?


L’idea è che la rete di comunicazione è sempre quella ma invece di inserire un unico messaggio
grosso, suddivido il messaggio in pacchetti. Questi pacchetti contengono sia il dato che devo
trasmettere ma anche delle informazioni di controllo (indirizzo del destinatario, numero di
sequenza). Questi pacchetti vengono spediti uno alla volta ma non è lungo un solo canale di
comunicazione che avviene questa spedizione -> i nodi che stanno nel mezzo ricevono il pacchetto
e scelgono loro a chi spedirlo al passo successivo. Questa scelta è fatta in base ai dei meccanismi di
auto apprendimento che hanno i nodi intermedi o a specifiche tabelle.

Potrebbe anche essere che uno dei canili è completamente pieno, intasato e allora lo mando da
un’altra parte.
➔ Potenzialmente qualunque pacchetto, anche se fa parte dello stesso messaggio non è detto
che faccia la stessa strada, anzi, può seguire un percorso diverso, indipendente dagli altri e
potrebbe non arrivare in ordine al destinatario.
È stato mandato il pacco sulla rete di consegna, quando arriva e che strada fa non si sa.
Es. messaggio mittente 1 suddiviso in tre parti così come messaggio mittente 2.
I pacchetti vengono spediti sulla rete, arrivano al nodo 1 e il nodo 1 dice pacchetto 1 e 3 arancioni e
pacchetto 3 blu li mando al nodo 3 e per bilanciare gli altri tre pacchetti li mando al nodo 2. Nel
6
frattempo, un altro mittente con un altro messaggio (giallo) si è collegato ad un altro nodo della rete
e anche lui deve mandare un messaggio al destinatario e anche lui manda al nodo 2:

Il nodo 3 rimanda P1-P2-P3 perché sa chi è il destinatario mentre il nodo 2 che si è visto arrivare 6
pacchetti li suddivide tanto il destinatario si sa e a prescindere dal nodo in cui andrà il pacchetto
arriva in fondo.

Il destinatario nota che sono pacchetti diversi, quindi, comincia a raggruppare i pacchetti per colore,
che sarebbe il mittente.

7
Alla fine, pian piano raccogliendo,
messaggio arancione ho tutti e tre i
pacchetti, lo posso ricostruire.

Quali sono i vantaggi delle reti a commutazione di pacchetto? Intanto posso usare in modo molto
più efficiente le linee perché non devo aspettare che qualcun altro abbia finito di utilizzarle, a
prescindere ho dei dati da spedire, li metto sulla mia rete.
- Meno tempi morti di attesa
- Il mezzo ha un livello di comunicazione più elevato che da un certo punto di vista è meglio.
Posso usare il mezzo di comunicazione in modo completo
- Se c’è un traffico più alto al mittente non interessa lui continua a spedire sulla rete poi prima
o poi questi pacchetti verranno istradati
- Maggior resistenza ai guasti: un problema di comunicazione viene gestito inviando
nuovamente i soli pacchetti danneggiati/mancanti
Se dovesse rompersi un nodo mentre A ha ancora dei pacchetti ci sono dei sistemi che dicono ok i
pacchetti danneggiati sono questi e viene detto al mittente “occhio paco due perso” e lo rimanda.
Svantaggio → non sappiamo che strada prende ogni pacchetto e non abbiamo un tempo garantito
di fornitura del dato.
Internet nasce quando la Computer Science Network, la National Science Foundation Network e la
NASA Science Network incominciano a fondersi, fine anni ’80. Internet → insieme di reti
interconnesse.
La spinta al processo di espansione della rete come la conosciamo adesso fu data dal Governo degli
Stati Uniti d’America, senatore Al Gore introdusse HPCA → crearono una rete ultraveloce che era la
National Research and Education Network. Stati Uniti pionieri nell’avere collegate fra di loro reti
8
universitarie e di aziende. Obiettivo → connettere contemporaneamente milioni di computer e non
solo quelli delle aziende ed università ma anche comuni cittadini.
Una rete di reti: Internet

LAN -> local area network, rete locale


(es. Università)
WAN -> wide area network, rete larga (es.
Rete commune Regio Emilia)

IP: il protocollo di comunicazione di Internet


➔ Protocollo di comunicazione lo usiamo sempre. Cosa serve per il protocollo?
1- Sintassi da seguire per costruire messaggi
2- Regole interpretative che definiscono la semantica dei messaggi
3- Meccanismi di sincronizzazione
4- Meccanismi di gestione o correzione degli errori
Quando comunichiamo con qualcuno usiamo le regole della lingua italiana: sintassi. La semantica è
l’interpretazione del significato del messaggio, se io dico “pesca” intendo il frutto o l’azione di
pescare un pesce? Questa è una doppia semantica.
Sincronizzazione: quando parla uno alla volta. Se qualcuno non ha sentito o ha sbagliato, si ripete:
gestione errori.
Il protocollo Internet → IP → è un protocollo di comunicazione Internet che regola l’instradamento
attraverso i vari nodi della rete dei pacchetti IP che compongono il messaggio originale. I pacchetti
colorati visti prima sono i pacchetti IP piccoli che compongono il messaggio originale. Esistono due
versioni di pacchetti, versione 4 (IPv4) e versione 6 (IPv6).
IP → indirizzo che identifica ognuno dei dispositivi connessi ad Internet. Numero composto da
quattro numeri compresi fra 0 e 255, separati da un punto. Dentro a uno dei pacchetti IP deve esserci
sia il mittente che il destinatario, sia di chi ha spedito sia di chi lo deve ricevere. Tutti i nodi di Internet
hanno un indirizzo IP. Si è dovuti passare alla versione 4 perché stavano finendo i numeri.
Indirizzo IP può essere
- Dinamico, cambia ogni qual volta noi ci colleghiamo ad Internet
- Statico, non cambia, ad es. i server web di certi siti hanno sempre lo stesso indirizzo

9
Il World Wide Web (WWW)
1989 -> gruppo di informatici del CERN, ricevono l’incarico da parte della direzione di realizzare un
meccanismo per la diffusione rapida di articoli, appunti e opinioni tra i fisici che ruotano intorno al
centro. Le persone che volevano avere accesso ai dati o alle informazioni erano sparse per l’Europa,
quindi, serviva qualcosa che facesse girare i dati.
Come facciamo? Tim Berners-Lee, fisico, propone un progetto: World Wide Web → rete a grandezza
globale. Inizialmente respinto dai suoi superiori.
WWW → composto da ipertesti. Un corpus di materiale scritto interconnesso in modo così tanto
complesso che non è conveniente presentare su carta. Un articolo scientifico solitamente contiene
link ad altri documenti, a tabelle di dati che sono in altri volumi o altro articolo pubblicato in un altro
anno.
Può anche essere visto come un enorme ipertesto, le cui pagine web, con i link sono gli elementi
principali.
I link ipertestuali formano loro stessi una rete di connessioni non più fra nodi ma fra concetti: le
pagine Web.
Nell’idea di Tim Berners-Lee un ipertesto doveva descrivere una varietà di risorse eterogenee, non
solo testi ma anche documenti, persone, concetti astratti… uso quel link per spostarmi da qualsiasi
altra parte e il come spostarsi faceva parte del link di collegamento. Schemino che aveva preparato
per questa idea di ipertesto:

Il concetto di risorsa Web è indipendente da dove viene memorizzato dal tipo di contenuto. Una
risorsa web poteva essere qualsiasi cosa.
➔ Una risorsa è qualunque struttura che sia oggetto di scambio tra applicazioni o di riferimento
all’interno del World Wide Web. Es. pagine Web, documenti, immagini, video…
Al giorno d’oggi più o meno tutto ciò che è concetto può essere definito come risorsa.

10
Altre due ulteriori semplificazioni rispetto all’idea originale:
- Soltanto una tipologia di risorse (la pagina Web)
- Una sola tipologia di collegamento ipertestuale, ovvero il semplice riferimento (es. il
documento A fa riferimento al documento B)
Tim Berners-Lee sviluppò una serie di tecnologie che permettessero agli utenti:
- Creazione di documenti ipertestuali
- Mettere a disposizione i suddetti documenti ipertestuali sul Web
- Identificarli mediante l’utilizzo di un opportuno identificativo
- Richiederli mediante l’utilizzo di uno specifico protocollo di comunicazione
- Visualizzarli su un computer
➔ Tutto ciò fu per la creazione di documenti ipertestuale il linguaggio html, linguaggio che
permetteva di includere i link; web server per mettere a disposizione questi documenti sul
web. Per identificarli nacquero gli indirizzi delle pagine web come li conosciamo noi oggi. Per
richiederli usando protocolli, il protocollo di comunicazione o altri per acquisire pagine e per
la visualizzazione su computer i Browser server.
HTTP: il protocollo di comunicazione del WWW
Se il protocollo IP era il protocollo delle reti il protocollo di comunicazione del WWW è il protocollo
http -> hypertext Transfer Protol.
Questo fu il protocollo di comunicazione sviluppato inizialmente da Tim Berners-Lee per facilitare
l’implementazione del web, basato su metodi di comunicazione del tipo richiesta – risposta: post e
get.
Negli anni successivi fu esteso infatti tutti i sti web usati ora iniziano con https, quella “s” sta per
secure → prima implementazione del protocollo era senza controllo sulla sicurezza e permise
disastri. Questo invece è un protocollo di comunicazione più sicuro sul web ed è utile quando voglio
trasmettere dati di autenticazione.
https → se tu vuoi mandare dei dati qui, quei dati devono essere criptati in un qualche modo.
Entità coinvolte in questo protocollo:
- Client: chi fa la richiesta, in questo caso potrebbe essere il browser Chrome o Firefox.
- Server: computer, entità che dovrebbe avere le informazioni su una certa risorsa. Es. server
web.
Il client manda un messaggio di richiesta al server e vengono mandate informazioni a quella che è
una specifica risorsa indicata da un URL.
Messaggio invece di risposta → è il messaggio che il server restituisce al client, può essere negativo
ma anche positivo.

11
URL - Uniform Resource Locator è l’esatto indirizzo associato a una risorsa, il computer non mostrerà
tutto sui link ipertestuali, se apriamo la pagina per es. di Wikipedia ci saranno tante parole blu.
Questo indirizzo inizia o con http o https ed è il nome o ancor più l’indirizzo della pagina web a cui
questo indirizzo punta e permette di accedere facendoci click. Ognuno degli hyperlink è riferito ad
una URL cioè un indirizzo.
Se prima l’indirizzo era blu ora è diventato violetto, per convenzione diventa viola l’indirizzo già
visitato.
Una URL ha tre parti:

Quella tra parentesi quadre è opzionale.

Ogni volta che da un dispositivo, cellulare, smart tv, computer, clicchiamo un link il dispositivo
recupera una copia di quella risorsa dalla URL a cui si fa riferimento. Poi in base a ciò che si sta
scaricando applica la procedura più opportuna, dipende se è audio, video e così via.

12
7/03
Recap
Protocollo di comunicazione più utilizzato sul Word Wide Web è l’http. Era nato come modo per
condividere articoli scientifici, risorse, cerchia ristrette di persone poi però si è pensato di metterci
un dispositivo di sicurezza -> https.
Schematicamente accade questo per la richiesta di una pagina web:

- Browser → richiede una risorsa


- Web → rete Internet con i protocolli e servizi web che ci girano sopra e manda questa risorsa
esattamente dove c’è il server
- Server → ha nella sua memoria questo suo documento (doc 1), lo copia e lo invia attraverso
di nuovo la rete, verso il browser che l’ha richiesto quindi il client
C’è sempre nei pacchetti indirizzo del mittente e indirizzo del server. In questo modo se qualcosa
non è andata a buon fine si può rimandare indietro il pacco.
Come iniziare una comunicazione?
Usando l’http possono esserci diverse tipologie di richieste che possono essere effettuate dal client.
In particolare, queste vengono definite con l’uso di un metodo ovvero relative alla URL coinvolta
nella comunicazione. Questa operazione -> metodo applicato, può essere di diversa natura.
Ovviamente non tutte le operazioni sono permesse a chiunque, dipendono sia dalle capacità del
server sia dai permessi che sono stati dati al client.
I metodi http sono:
- GET -> quello largamente più usato, ogni volta che facciamo un click c’è un get. È la richiesta
delle informazioni, sto richiedendo una copia della URL specificata.
- PUT -> permette di creare sul server web contattato la risorsa specificata dall’URL utilizzato
nella richiesta e associarci informazioni. Put quando carichiamo file su drive, stiamo
chiedendo di caricare una risorsa, un file sulla nostra cartella remota. Upload di una nuova
risorsa online.
- DELETE -> rimuovere dal server web contattato tutte le informazioni relative alla risorsa
specificata nella richiesta tramite l’URL.

13
- POST -> permette di specificare informazioni aggiuntive, incluse nella richiesta, ad una
risorsa esistente che già risiede sul server. Post quando stiamo per inserire nome utente e
password, non stiamo solo chiedendo una pagina web ma stiamo anche dicendo per
autenticarmi alla pagina web utilizza le mie credenziali.
Messaggio http, com’è fatto? Come una busta

- Header (intestazione) -> c’è sempre. Sono metadati relativi alla comunicazione: nome di
client utilizzato ad es. c’è sempre all’interno dell’header il nome del browser che si sta
utilizzando (Chrome, Firefox…). Quando mandiamo un messaggio di una get, se stiamo
utilizzando un cellulare la pagina non la vediamo uguale a se la aprissimo sul computer.
Perché? Perché in questi metadati ci viene detto sono Chrome ma vengo utilizzato da un
dispositivo mobile. Se uso mobile allora il server dice non ti mando la pagina completa ma ti
mando solamente la pagina della visualizzazione semplificata su smartphone. È tutto ciò che
viene indicato su questa busta.
- Payload -> è il contenuto da accompagnare al messaggio.
Se io ho un browser e richiede informazioni su una specifica pagina web usando una URL es.

GET perché sto richiedendo una pagina, percorso poi chiedo il protocollo da utilizzare (http/1.1,
vuole sapere anche la versione, poi c’è l’HOST ovvero server web che verrà contattato per avere
quella risorsa.

14
Lo schemino di prima si è arricchito perché il messaggio è diventato un messaggio http con il suo
header e payload.

Tutte le volte che un server web ci risponde si aggiunge un codice all’interno dei metadati e questo
codice ci dice se è andato tutto bene o qualcosa non va. Se va tutto bene tipicamente è uhn codice
che comincia con 2…
Esempio:

Se si va a vedere dentro il browser, i puntini in alto a destra si possono aggiungere le informazioni da


sviluppatore dentro la parte della network.
I server web danno un messaggio di risposta tutte le volte che fanno una richiesta danno una risposta
e specificano un codice di stato che è sempre nell’header.

15
303 è una redirezione, dice che quel dato sito web non ha trovato la pagina ma sa che ce l’ha un
altro sito quindi mi ha ridirezionato ad un’altra pagina web.
403 forbidden -> non posso accedervi, non ho i diritti.
Quelli che cominciano con 5 sono errori del server ed è il server ad essere rotto e a non riuscire a
rispondere alla richiesta.
BROWSER → tutte quelle applicazioni software, programmi, che permettono di accedere e ottenere
informazioni presenti nel web così da poterlo navigare.
Browser “moderni”: Firefox, Microsoft Edge, Google Chrome, Safari
Di fatti il primo browser sviluppato da Tim Berners-Lee lo chiamò WorldWideWeb creando
abbastanza caos. Prima pagina del web:
https://www.w3.org/History/19921103-hypertext /hypertext/WWW/TheProject.html

prima pagina del web utilizzata che descriveva cos’è il World Wide Web, serve per ottenere
informazioni Hyper Media, tutto ciò che è un media che può essere collegato attraverso questo link.
Ma come funziona il browser?
- Ha una barra degli indirizzi in alto, dove inseriamo l’URL della risorsa a cui siamo interessati.
A seconda della risorsa la riusciamo a visualizzare o dentro la finestra del browser (es. risorsa
chiesta è una pagina web…) cosa succede se apriamo un file pdf? Dipende, a volte lo scarica
in una cartella oppure lo apre in un visualizzatore all’interno del browser.

- Quando siamo nel primo caso, cioè, rimane dentro al browser la risorsa è un documento
ipertestuale -> ci sono dei link che, se vengono cliccati dicono al browser dove andare a
prendere la risorsa, la scaricano e la visualizzano sempre dentro il browser. In realtà però noi
stiamo navigando nel web senza mai muoverci. Non è che il nostro client si sposta da server
a server, sono i dati che arrivano al nostro client. È il server web che prende una copia della
risorsa e ce la spedisce via pacchetti http.
Il client di solito è un browser e che cos’è il server?
Server web → computer “speciale”, sempre acceso con attivi certi tipi di servizi, software. In
particolare, esegue un software specifico. Permette di ricevere, gestire e soddisfare le richieste http
che provengono dai client, il nome specifico di questo software è WEB SERVER (ne esistono diverse
tipologie).
Senza web server non si può creare un sito web, possiamo fare pagine web ma non possiamo provare
se funzionano.
Il nome del server web è incluso nella URL, è l’host che ha la risorsa. La richiesta http è strutturata
con i metadati che gli dobbiamo inviare.
Quando un pacchetto http arriva al server che cosa succede? Arriva una richiesta, GET, ad esempio,
al server web apaci al sito del dipartimento DCE. Cosa fa il server web? Cerca localmente se ci sono
le informazioni del documento che sono indicate nel percorso della richiesta. Se c’è, viene presa e

16
copiata poi messa dentro un pacchetto http, “200 OK”, tutto bene, rinvio sulla rete il pacchetto al
client che mi ha chiesto quella pagina.
Se non la trovo invece, a seconda, associo l’errore relativo, ad es. prima errore pagina web: error
404, questa non ce l’ho, no trovata oppure 403 se provavo ad accedere a un file a cui non potevo
accedere.
Il codice di errore relativo è messo all’interno dell’header ed eventualmente nel payload può
aggiungere dei massaggi per specificare l’errore o la situazione che è successa.
Indirizzi IP da una parte e nomi di server web dall’altra. Solitamente noi come utilizzatori dei client
usiamo sempre i nomi dei server web: www.google.com, www.amazon.com. In realtà ora stiamo
chiedendo a qualcuno qual è l’indirizzo IP di Google. Tutti i server web su internet sono identificati
in modo univoco da una sequenza di 4 numeri, il loro indirizzo IP.
Ogni volta che voglio accedere a un servizio web ho bisogno di sapere l’indirizzo IP della macchina
su cui quel servizio sta girando. Come si fa a recuperare l’indirizzo IP del server se so solo il suo
nome?
Inoltre, abbiamo visto che i pacchetti IP devono sempre essere instradati attraverso i nodi di Internet,
perché è una rete a commutazione di pacchetto.
Cosa sono questi nodi?
DNS → Domain Name System
Noi umani non siamo fatti per ricordarci dei numeri di solito, più facile ricordare nomi o frasi. Indirizzi
IP -> machine oriented, i nomi sono human oriented.
Il domain name system è quel sistema usato per passare dagli indirizzi numerici ai nomi dei server
web e viceversa.
Se dico a un DNS che cos’è quel
determinato numero lui dirà è
il server web del DCE. È una
specie di elenco del telefono di
Internet.
Si chiama risoluzione di un
nome o indirizzo web.

Possibilità -> tengo un unico enorme elenco del telefono centralizzato che mi sa dire tutti gli indirizzi
di tutto il mondo? Poco vantaggioso, si crea quello che in informatica viene chiamato single point of
failure = si rompe quello, si rompe tutto. Altro problema sarebbe la distanza geografica, la luce è
veloce così come i segnali elettrici, quando andiamo via cavo è troppo lento. Nonostante ci siano
possibilità le richieste devono essere fatte da servizi che non sono centralizzati ma che sono multipli.
17
Deve esserci la possibilità in diverse zone per avere risposte a DNS. Esistono in realtà tanti computer
specializzati a fare le reti del telefono.
Ogni volta in cui interrogo un server DNS questo a sua volta può andare a chiedere ad altri server
DNS. Può esserci una rete di server DNS per poter fornire le informazioni necessarie a chiunque
client arrivi.
Ora non avremo più la nuvola in mezzo ma dei server DNS e altri nodi:
la richiesta http è qual è l’IP di
es.it, abbiamo chiesto l’HOST:
es.it.
Nel pacchetto IP è diventato
130.136.130.1, questo
pacchetto è stato poi scisso in
più pacchetti (a
commutazione di pacchetti
con IP mittente e
destinatario).

Vengono inviati sulla rete, rimbalzano in questi diversi nodi e arrivano al server web il quale
ricostruisce il messaggio e ha il documento che poi copia e poi crea la risposta. Qui non c’è da fare
una richiesta DNS perché ho già il numero di casa del mittente perché era scritto nella busta.

Quali sono gli effettivi nodi che stanno all’interno di internet? Ogni nodo è uno dei dispositivi che
potrebbe avere però uno o più ruoli. I nostri pc, i server web, i server DNS sono tutti computer, parti
della rete identificati da uno specifico indirizzo IP. Però esiste anche il router per il corretto
funzionamento della rete, un modem.
ROUTER→ instradatore, dispositivo di rete che è dedicato a svolgere il compito preciso di instradare
i pacchetti IP dal mittente fino al destinatario.

I router agiscono a livello di rete, dirigono il movimento dei pacchetti verso il percorso più
appropriato da mittente a destinatario. Quando un router riceve un pacchetto IP controlla tra quelli

18
che lui conosce come possibili nodi a cui spedirlo qual è quel collegamento che lo instrada in un
punto più vicino al destinatario. Non è sempre obbligatoriamente così.
Ogni volta che un pacchetto passa da un router ad un altro viene incapsulata l’informazione del
percorso che ha fatto all’interno di questi pacchetti. Come se venissero messi i timbri delle dogane.
Per sapere dove è passato ma non viene mai aperto il payload, non è mai ispezionato all’interno,
viene solo visto cosa riporta l’etichetta fuori.
Data-Driven Decision-making (DDD)
Il processo della Data Science

Esempio 1, l’uragano Frances

Stati Uniti -> danno i nomi agli uragani in ordine alfabetico. Qualche settimana prima c’era l’uragano
Charlie, e dice che avevano trilioni di dati riguardanti gli scontrini di una delle più grosse catene di
supermercati degli USA.
Se sto che sta per arrivare un uragano che cosa non devo far mancare sugli scaffali dei negozi, di cosa
avrò una richiesta maggiore? Un conto è un’analista predittivo che ci pensa e valuta, un altro conto
è avere i dati, osservarli ed estrarre qualcosa. Imparo dai dati.
Esamino i dati del supermercato in situazioni analoghe per vedere le variazioni insolite dei clienti per
specifici prodotti, predico vuol dire anticipo quello che sarà il cambiamento nelle abitudini di
acquisto dei miei clienti. Rifornisco così i negozi prima che arrivi l’uragano e prendo decisioni non
basate su ipotesi umane ma su dati di ciò che è già accaduto precedentemente. Massimizzare
vendite e raggiungere gli obiettivi dell’impresa. Che prodotti saranno più richiesti?

19
I dati hanno fatto vedere che
l’incremento non era nelle torce
e carta igienica ma nelle pop-
tarts: merendine da scaldare
dolci, alla fragola, con
incremento del 700%. Altro top
selling article era la birra.

Quindi la Data-Driven Decision making (DDD) è una tecnica che consiste nel basare le proprie
decisioni non sulla pura intuizione ma sull’analisi dei dati che mi permette poi di prevedere il
comportamento dei consumatori.
Da un certo punto di vista abbiamo un Data Enginner che
processa i dati e che sa fare le analisi su essi e anche sui Big
Data.
A basso livello posso dire uso i dati che ho per avere una
gestione più efficiente del magazzino, degli ordini…
Dall’altra parte abbiamo la vera e propria Data Science, cioè
l’automatizzazione del Data-Driven Decision making.

Vantaggi del DDD


- Sviluppo di un indicatore del DDD che valuta le imprese in base a quanto usino i dati per
prendere decisioni.
- Studio fatto sul calcolo dell’indicatore mostra che statisticamente le aziende che hanno l’uso
della tripla D hanno una produzione e produttività superiore del 4%-6% rispetto la media
delle altre aziende del settore.
Questo indicatore è un indicatore di correlazione positivo tra gli indicatori di performance aziendali
e questo indice. Sembra essere una correlazione di tipo causale -> se l’indice è alto gli introiti sono
alti, c’è una correlazione.

Altro esempio: Target ed i neogenitori


20
Anche Target si preoccupa delle
abitudini di acquisto dei suoi
consumatori. Si nota che i
consumatori tendono avere una
certa inerzia. Arrivo di un bambino
in famiglia cambia drasticamente le
abitudini di shopping.

Passi del Data Scientist:


1- Definire l’obiettivo: neogenitori importanti per il Target perché acquistano prodotti costosi
in grande quantità. Fidelizzare il prima possibile una possibile coppia di neogenitori come
clienti significa fidelizzare un’intera famiglia. Per abitudine prenderò sempre quei prodotti
poi.
Come fidelizzare? Anticipare la concorrenza e mandare offerte personalizzate per
“conquistare” nuovi clienti di questa categoria.
2- Raccolta dati (data collection)
Realizzare una base di dati che permetta di raggiungere l’obiettivo prefissato.
Idea: consultare il registro delle nascite (pubblico) e trovare i contatti dei neogenitori.
3- Preparazione dei dati (processing) che potrebbe portare via 90% del mio tempo.
Arricchisco i dati aziendali con fonti esterne (web, registri nascite…), devo fare quello che è
data pre-processing. Raccolgo i dati esistenti ed esterni all’azienda, li processo -> pulirli
(rimozione typos, valori mancanti, duplicati…). Modi diversi di processare i dati in base ai
Paesi:

Poi, facciamo finta di esser riusciti in qualche modo a pulire i dati. Adesso devo incrociarli -> data
combination. Prendo le righe raccolte dai registri nascite e li aggancio ai miei database di clienti.
Magari dentro ai miei database di clienti c’è già nome e cognome che ‘è nei registri di nascita.

21
Problema: competere col tempo, anticipare la concorrenza per arrivare per primi ai neogenitori.
Obiettivo nuovo → previsione delle future nascite identificando quelle che sono le possibili coppie
che aspettano un bambino prima che lo vadano a registrare.
Analizzo lo storico delle donne incinta → informazioni in grado di prevedere quali di loro fossero
incinta. Es. spesso cambiano la loro vita, guardaroba, regimi vitaminici…
Passo 4 -> per comprendere i dati e le
interazioni fra le loro variabili devo
esplorarli.
Modello predittivo astrae la maggiore
complessità del nostro mondo e si
concentra solo su un particolare
insieme di indicatori che sono
correlati da un motore di interesse a
quello che è il nostro obiettivo.

22
- Storico dei dati
- Correlazione a mano tra
dati storici e registro nascite
- Ogni riga di questo
insieme di dati, training set è un
individuo con i valori delle variabili
specificati compreso quello che
vogliamo predire.
- Passo l’insieme dei dati ad
una tecnica di machine learning.
Idea di un albero decisionale e
addestro questo albero per cui ad
un certo punto dice: ha acquistato
vitamine? Se sì, ha anche
acquistato vestiti di taglia più
grande? Se si…. Altre
domande… probabilmente allora è incinta.
È automaticamente la tecnica di machine learning che da sola capisce che queste sono le variabili
che indicano quando qualcuno è incinta o no.
Dati che ho è training set, a monte POI quando sono sicuro del modello ovvero che preveda bene se
il cliente è o non del mio target faccio uso del modello → prendo il modello e ogni vota che qualcuno
alla cassa fa un acquisto su quello scontrino farò girare il mio modello.
Modello predittivo gira o sul computer della cassa o su server centrale e ogni volta che c’è un nuovo
evento, un nuovo acquisto lo faccio analizzare al modello predittivo ed esso mi dice mandagli
l’advertisement, la pubblicità perché quello è uno dei tuoi target.
Valutare parte etica e privacy -> esempio appena visto, Target ha utilizzato dati che erano pubblici e
suoi dati per scoprire qualcosa di utile che non conosceva prima: se suoi clienti erano o meno in
dolce attesa.
Questo caso è veramente accaduto e ha avuto diffusione mediatica abbastanza ampia e ha sollevato
etiche sull’utilizzo di queste tecniche -> basandomi su tue scelte di acquisto posso bersagliare
preventivamente con dell’advertisement, cose un po' più specifiche.
- Il modello viene creato dalla tecnica di Machine learning.

9/3
Esamineremo:
- Metodi per recuperare dati dal web
- Differenza web scraping vs web crawling
- Elementi base per utilizzare un proprio web scraper
23
Web → enorme miniera di possibili dati. Se si pensa ad un social (es. LinkedIn) ci sono profili pubblici
che possono essere sfruttati per avere informazioni.
I dati sono di interesse del Data Scientist (DS), come li prendiamo? 3 metodologie:
- Li scarico direttamente,
- Interrogo un servizio web,
- Faccio web scraping

1- DOWNLOAD DIRETTO
Esistono alcuni siti che, per fortuna, rendono disponibili subito o per richiesta il download già i dati
in formato tabellare.
Sito che svolge il ruolo di un data provider -> fornisce dati. Due opzioni di fornitura:
- Gratuita es. ISTAT
- A pagamento es. Camere di Commercio

2- INTERROGAZIONE DI UN SERVIZIO WEB


Il gestore del sito non offre un web server che funziona con un browser ma offre un web server con
quella che viene chiamata IPA per servizio machine-to-machine -> computer che risponde a richieste
di un altro computer, applicazione che parla con questo server e chiede dati.
Questa è una tipologia di opzione per utenti come tecnici perché occorre scrivere un vero e proprio
programma che esegua questa cosa. Vantaggio? Se si fa così lo farà da solo.

Confronto richiesta pagina Web e richiesta dati a un servizio Web:


sopra c’è un browser che fa la
risorsa; nella nuvola ci sono i
server DNS, router…
arriva al server web che
prepara il documento e dopo
averlo messo nel pacchetto lo
rimanda indietro.
Richiesta di dati ad un servizio
web invece: es. a ISTAT, chiedo

24
direttamente alla risorsa “voglio tutti gli abitanti del comune di Bologna” -> richiesta che andrà in un
pacchetto simile a quello http, avrà un metodo tipo GET ma la risorsa non è più pagina web, è una
tabella. Arrivati sul server hanno già i dati pronti che verranno copiati nel pacchetto della richiesta e
sempre con l’uso della rete internet fa ritornare a questo programma o applicazione la copia dei dati.
Da una parte ho una pagina web e dall’altra ho i dati per es. la tabella. Nel browser -> click e ho la
richiesta dell’URL, nel programma si mette quali sono i parametri da inserire nella mia richiesta.

GET – POST per avere informazioni

3- WEB SCRAPING
Recuperare i dati automaticamente estraendoli dalle pagine Web. Che cos’è il web scraping?
Si può anche chiamare Web Harvesting, Web Data Extraction e Web Data Mining.
Sto recuperando dati dal web con un agente (-> piccolo software che fa cose per conto
nostro) che scarica, processa e organizza i dati del Web tramite processi automatizzati.
Web scraping e web crawling:
WEB SCRAPING → estrazione di dati da una pagina web (o un insieme ristretto di pagine)
WEB CRAWLING → analizzare i contenuti di un’intera rete cioè Google fa web crawling, i motori di
ricerca hanno dei bot che navigano in maniera sistematica tutta la rete. Com’è fatta? Pagina con tanti
link. Tanti più link arrivano a questa pagina tanto più essa è importante.

Web scraper → è un agente software, un’applicazione, programma che fa questo compito di


analizzare la pagina web, prendere le parti di nostro interesse e farlo ance in modo più veloce e
corretto rispetto ad un essere umano.
Apriamo Web scraper, estensione su Chrome

25
SITEMAP → progetto di web scraper, ogni volta che facciamo un nuovo progetto per recuperare dei
dati è una nuova sitemap. È identificata da un nome e l’URL di partenza: sito da cui vogliamo partire
per recuperare i dati.
Per iniziare creeremo una sitemap per raccogliere dati del sito: https://webscraper.io/test-sites/e-
commerce/allinone -> è un sito di esempio di e-commerce e sotto vediamo 3 portatili.
Creare la sitemap -> nome + URL
La URL sempre in alto nella bara dell’indirizzo.
SELETTORI → guidano il processo di raccolta dei dati e specificano due cose:
- Qual è il processo di scraping che si sta facendo (quali pagine vorremmo visitare e in che
ordine)
- Quali dati vorremmo raccogliere all’interno delle pagine

Selettori:
- Link selector: identificano i link da
seguire, regolando il processo di
scraping (quali pagine visitare?)
- Text selector: identificano gli
elementi delle pagine che ci
interessano, e dai quali intendiamo
scaricare i dati (quali dati estrarre?)

26
Esercizio:
1- Già fatto, abbiamo già messo la
URL.
2- Mettere link prodotto per il
primo, secondo e terzo. Selezione link
si fa usando link selector poi quando
sono nella pagina vado a trovare con
il text selector i testi che mi
interessano.
Più link da selezionare -> schiaccia
Multiple. Poi vado a schiacciare i nomi dei tre prodotti da prendere. Poi una volta selezionati -> done
selection.
Poi, altri due tasti vicino a “select”:

Data preview -> va a prendere i link dei tre prodotti.


➔ Poi si salva la selezione, tasto blu sotto. E si ritorna nella sitemap

Se poi clicchiamo il nome:

oltre root si è aggiunto prodotti e posso aggiungerne un altro nuovo.


Entriamo poi in uno dei tre link riguardanti il prodotto.

27
Text selector: vogliamo selezionare il
testo che sta in quella pagina di
prodotto.
Clicco sul link selector appena creato e
facciamo add new selector. In type non
selezioniamo Link come prima ma Text.

Abbiamo estratto nome prodotto, prezzo e descrizione:

Data preview mi dice che sto preparando una riga di tabella che ha dentro: nome, prezzo e
descrizione. Ciò lo sto facendo per una sola pagina e dovevo farlo però per 3 pagine quindi torno
alla pagina di prima e clicchiamo il secondo prodotto diverso.
Ora vorremmo scaricare i dati -> schiacciare sitemaps:

28
Dalla sitemaps creata, faccio “scrape” ed esce questo:

Schiaccio qui poi scendo e seleziono “export data”.


Dopo aver eseguito il download (scelgo tra le due opzioni) i dati estratti
si aprono in Excel, tramutati in tabella.

Abbiamo scaricato i nostri dati e il selector graph ci permette di verificare che la struttura del nostro
scraper sia corretta:

Ecco come appare fatto su web scraper:

Cosa facciamo con questo lavoro? Se voglio salvare la sitemap?


È possibile salvare il progetto importando ed esportando sitemap:
dopo aver fatto “export sitemap” mi
viene creato un testo che copio e vado
ad aprire blocco note o un file di testo
semplice, (no su Word) e poi incollo.
Ciò che ho copiato è in formato testuale
che si chiama json, interscambio dati
usato sul web.

29
Poi schiaccio sitemaps e schiaccerò poi import sitemap:
e incolliamo la sitemap lì prendendola dal file blocco note salvato nel
desktop. Poi la importo e se vado nell’elenco delle sitemap c’è e-
commerce e anche e-commerce2 (quella appena copiata).

14/3
Esercizio
Vorremmo scaricare tutti i computer
che sono nelle sottocategorie e tutti i
telefoni che sono nelle sottocategorie
-> facciamo quindi un link selector.
Add new selector -> type: link. Poi
selezione multipla perché sia
computer sia telefoni.
Ora per ognuno di questi link selector
dovremmo fare un altro link. Dentro
la categoria: categorie link vado ad
aggiungere un link. Prendiamo per esempio dalla pagina i computer divisi in tablet e laptop.
Ora che sono nella sottocategoria posso prendere gli oggetti che sono nella pagina e avrò di nuovo
un link selector.

Dopo di che entriamo nel primo prodotto che appare dei 21 e dobbiamo prendere nome, prezzo e
descrizione:

30
Ora vediamo il percorso fatto con selector graph:

Occorre verificare che funzioni -> scrape e vediamo poi facendo refresh che sono stati estratti i dati.
A noi interessano nome, prezzo e descrizione del prodotto; ci sono anche tante altre cose:
collegamento pagina web che contiene quel prodotto, la sottocategoria, la categoria…

Terzo tipo di selettore → table selector


Dopo aver selezionato la tabella questo selettore, da solo, prova ad indovinare la riga
dell’intestazione della tabella (prima riga contiene di solito i dati) e quelle dopo sono le righe con i
dati che ci servono.

31
Esercizio 2
I comuni sono 330 quindi la tabella
dovrebbe avere 331 righe (una per
l’intestazione e le 330 per i paesi).
Creiamo una nuova sitemap → la
sitemap si crea per ogni sito di cui
vogliamo scaricare dati.
Non abbiamo bisogno né di link selector
né text selector (sarebbero troppi da
prendere) -> uso table selector.
Proviamo solo il select -> e schiaccio sulla tabella. Da solo vediamo che è andato a compilare header
row e data rows.
Ha selezionato esattamente 330 righe.

Qua possiamo decidere di rinominare se vogliamo comune, provincia e popolazione… salviamo.


Se schiacciamo poi data preview vediamo tutti i comuni. Se chiedo di fare web scraping ci metterà
poco perché apre una pagina e ci sono tutti i dati, nomi dei paesi lì. Ora scarichiamoli facendo Export
data. Le prime due tabelle le posso eliminare e nelle altre due posso mettere un filtro e per es.
riordinare ed elaborare i dati.

Esaminiamo in breve:
- Estrazione di dati da testo
Espressioni regolari
- Gestione dei meccanismi di navigazione
Basati su link o Ajax
- Gestione di gruppi di elementi

32
ESTRARRE DATI DAL TESTO
Vado a prendere i dati dell’esercizio: progetto-comuni-er.json (sul moodle cartella esercizi lezione 5)
-> copio -> apro Web Scraper e poi schiaccio “import sitemap”:

Elenco dei comuni per regione. Faccio “edit” e seleziono le due colonne di comuni, infatti, mi dirà
“selected element count: 20”

Poi vado dentro ad uno di questi, esempio clicco Abruzzo, ho il selettore “prima-riga” infatti:

33
Vorremmo estrare in maniera automatica il dato 305, ci servirebbe qualcosa che ci permetta di
stabilire delle regole per cercare questo nostro testo di interesse:
ESPRESSIONI REGOLARI -> per fare
ricerche dettagliate in testi grossi.
Sono regole che specificano come è fatto
il testo che stiamo cercando, se la ricerca
ha esito positivo → “fa match”.

Esempio:

Se la ricerca ha esisto negativo → “non fa match”:

in questa stringa non ci sono


numeri quindi la nostra ricerca di
numero a una o più cifre non
produce match.

STRINGA → sequenza di caratteri con un ordine prestabilito. Ogni testo, per definizione, su cui noi
facciamo ricerca, è una stringa.
Un’espressione regolare (ER) è a sua volta una stringa costituita da caratteri (lettere, numeri, simboli
di punteggiatura…) e da metacaratteri (caratteri speciali “non letterali”, tipo !, * -> non è asterisco o
punto esclamativo ma danno una regola).

34
METACARATTERI
Andiamo su https://regexr.com/
per provare

Vediamoli:

quelli evidenziati in azzurro sono i match corretti

se cerco poi .33. -> sto cercando qualsiasi stringa con qualsiasi
carattere prima e dopo basta con due 3 centrali.

35
Se so esattamente quanti caratteri sto cercando, per es. voglio cercare tutte le parole di 5 lettere
posso aggiungere parantesi graffe dopo le parantesi quadrate:

Se vogliamo siano parole complete dovranno essere seguite dai segni:

36
Le parentesi non le possiamo
cercare, sono metacaratteri
quindi si può utilizzare quello
che in informatica si chiama
backslash -> \ e poi scrivo il
metacarattere che voglio
cercare nel testo

Esempio:

FAI ESERCIZI su queste slide dei metacaratteri


Codici ISSN: 0030-9435 di 4 cifre – 4 cifre
Codici ISBN: 9783615003895 di 13 cifre consecutive (cartella desktop esercizi web data -> esercizio
espressioni regolari).

37
Espressioni regolari → aiutano ad estrarre un numero da una stringa di testo, proviamo a modificare
il text selector su web scrape.
Regex che sta per regular expression. Sto cercando la
cifra quindi metto: [0-9]. Se poi faccio data preview mi
viene fuori:

Se metto * dopo la quadra -> non si può perché non matcha caratteri (ne matcha 0 e non va bene).
Se proviamo col + ne trova 306. Ora salviamo e facciamo scrape. E torna, sono state prese tutte e 20
le righe. Si possono poi eventualmente esportarli.

Web scraper da ogni stringa estrarrà solo il primo


match (non tutti!).

38
Andiamo ora a prendere:
Codici ISBN composti esattamente da 13 cifre numeriche
Vogliamo prendere una qualsiasi cifra numerica -> mettiamo tra parentesi [] le possibili cifre da 0-
9. E vediamo selezionati sotto i numeri.
Qual è il modo per trovare il numero di ripetizioni? Usando le parentesi graffe
e ora selezionerà nel testo le cifre numeriche con 13 numeri anche quelli che
non hanno scritto davanti ISBN.

Codici ISSN → 4 cifre – 4 cifre


Ora cambiamo e dentro la parentesi graffa mettiamo il numero 4. Formula per trovare codici ISSN:

Per raggruppare espressioni regolari -> le metto


fra parentesi tonde, proviamo.
Ora o matcha con il codice ISSN o ISBN

Cancello il testo e passo all’esercizio 2 -> Trovare i numeri validi di carta di credito nella seguente
stringa:

C’è però un piccolo problema → nel secondo, lui ha preso solo la prima di carta di credito, anche la
seconda la è. C’è un metacarattere che dice che il trattino può non esserci? → è il punto di domanda,
ci può essere o non ci può essere una ripetizione.

39
Vado a fare così:
Marco Azzurri quella non è la carta di credito e
infatti non l’ha selezionato.

Però posso anche dire, cerca un blocco di 4 numeri e forse un trattino, 4 volte

([0-9]){4} → cerca un blocchetto di 4 cifre decimali


-? → dopo un blocco di 4 cifre può esserci e può non esserci un trattino o 01
Raggruppando tuto tra tonde e poi mettendo nelle graffe 4 significa che stiamo dicendo che questa
cosa che stiamo cercando la vogliamo 4 volte.

Esercizio 3: qua bisogna trovare i numeri di cellulare, solitamente hanno un blocco di 3 cifre e un
altro con 8 cifre. Possono essere separati o da niente o da uno spazio o da un trattino.
Vogliamo delle cifre e primo blocchetto potrebbe averne 3 quindi metto tra graffe. Poi seguito da o
uno spazio o un trattino oppure niente. Niente si indica con → ? spazio o trattino possono anche
non esserci e lo colloco fuori dalla quadra. Poi ho gli altri numeri quindi:

(il pallino nella seconda parentesi


quadra è uno spazio, è importante
segnalare anche gli spazi!)

40
Esercizio 4: trovare le date nella stringa. Le date però sono separate tutte in modo diverso: - /.
Cercheremo blocco di 4 cifre, un trattino o una barra, blocco di due cifre, un trattino o una barra e
un altro blocco di due cifre. Ma potrebbe non essere sufficiente, proviamo:
notiamo però che, se io inserisco
una data sbagliata la trova
comunque:

Esercizio 5: e-mail, nome o non nome con punteggiatura, sono accettati tutti i caratteri alfa numerici
e il punto.

La seconda non è stata presa perché la persona, ha messo “at”, per far si che gli scraper più stupidi
cerchino la mail su un sito web e la recuperino. Noi però lo vediamo quindi per andarla a prendere
aggiungiamo:

Esercizio web scraping comuni-italia (min 40 in poi)

ELEMENT SELECTOR -> tipico se apriamo siti di e-commerce, pagine con una serie di elementi e
vogliamo scaricare direttamente le info di ognuno di questi elementi senza andare a d aprire la
pagina web.
Mi permette di selezionare quel contenitore che è nella pagina web e che raccoglie le info associate
ad un singolo elemento, prodotto e associo dei singoli selettori a quello che sono al solito text
selector.

41
Vedi esercizio con i laptop -> element selector ci riduce lo sforzo per acquisire i dati che ci servono.
Alcuni siti non ci caricano tutti i dati subito -> es. Sephora coi rossetti li carica piano piano facendo
uno scroll. Ogni rossetto è un element quindi anche su questo sito si può fare una data extration.
SCROLL DOWN SELECTOR

Pagine con LINK DI NAVIGAZIONE

e così via… va avanti a


scaricare i dati di tutte le
pagine successive

42
16/3
PAGINAZIONE AJAX -> paginazione che ai giorni nostri è sulla maggior parte dei siti. Usa lo script
che aggiorna dinamicamente la pagina web senza che si facciano click specifici.
Apriamo il link dell’esercizio con Ajax: https://webscraper.io/test-sites/e-
commerce/ajax/computers/laptops se cambio pagina in fondo e schiaccio il numerino 2, 3, 4… la
URL in alto non è cambiata. Invece che prendere la mia pagina e ricaricarne una nuova cancello
alcune cose che sono nella pagina e le sostituisco con altre che vado a chiedere al server. Come se
facessimo una richiesta di GET al server, una volta mandati i pacchetti, questi pacchetti hanno solo
gli elementi html che voglio ridisegnare.
➔ Non ho bisogno di ricaricare tutta la pagina ma solo i campi che sono al suo interno.
➔ Paginazione → ogni pagina ha una sua URL diversa e vengono usati i link ipertestuali. In Ajax
questi non ci sono, ci sono programmi che modificano lo stato attuale della pagina web.
Il nostro scraper deve far finta di fare click sulla pagina, lo fa con ELEMENT CLICK -> selettore che
interagisce con la pagina web e simula i click dell’utente, carica nuovi elementi e aggiornando la
pagina. Diverse tipologie di opzioni:

Proviamo a farlo: (cartella 5 esercizi moodle)

Nel “Selector” -> metto gli elementi sopra. E nel click selector -> numerini pagina sotto e poi scegliere
i click (click once o more…)
43
Ajax ha un po' di limiti come quello di non scaricare dati se non sono nella pagina. Ci sono modi
diversi per poter fare web scraping? Tool automatizzati anche a pagamento che sono più potenti,
evoluti e complicati rispetto a web scraper. Altrimenti ci sono framework librerie -> vengono inclusi
di solito all’interno di un linguaggio di programmazione che va conosciuto e capito per poterle usare.
Per approfondire:

● documentazione: https://webscraper.io/documentation

● video tutorial: https://webscraper.io/tutorials

● siti di prova: https://webscraper.io/test-sites

Scaricare Open Refine -> per fare pulizia dati

Introduzione alla programmazione


Cos’è un algoritmo?
Area di una campana -> non c’è formula diretta
quindi parto dall’alto, c’è un mezzo cerchio, sotto
un rettangolo, sotto un trapezio… risultato
complessivo è una composizione di sotto
problemi.

Area della figura: area della campana è data dalle tre aree insieme
Abbiamo fatto coì un algoritmo → sequenza finita di istruzioni. Ogni qual volta ci sono sequenze da
seguire abbiamo un algoritmo…

44
Proprietà fondamentali che, se mancano, non è un algoritmo:

Proprietà non fondamentali:


- Correttezza -> l’algoritmo risolve il problema a cui è preposto, per qualsiasi valore dei dati e
senza errori
- Efficienza -> l’algoritmo risolve il problema usando la minima quantità di risorse (tempo di
esecuzione, memoria…)
esecuzione -> quando lanciamo un
programma.

Sequenza di step per partire da un problema e arrivare a un risultato dato da un programma:

45
Il computer però ha bisogno di un linguaggio comprensibile, si è partiti dal linguaggio di basso livello:
che il calcolatore capisce, come il linguaggio macchina.
Poi si è passati un giorno al linguaggio di alto livello → usati dall’utente per scrivere programmi.
- Istruzioni complesse e flessibili
- Comprensibile e più facile da usare per un programmatore
- Non è comprensibile direttamente dal calcolatore → come faccio?
Due soluzioni, devo trovare qualcosa che lo traduca dal mio linguaggio al linguaggio macchina

1- Interprete -> lento


2- Compilatori, linguaggi compilati -> prendono il nostro codice, lo leggono e lo traducono in
un codice oggetto che è già tutto linguaggio macchina che può essere passato al calcolatore.
Abbiamo il vantaggio che c’è un elenco di frasi fatte e lui mi da tutte le frasi fatte che io potrei
avere come risposte. Molto più efficiente ma problema -> se devo cambiare qualcosa del mio
codice devo ripassare dal compilatore.
LINGUAGGIO PYTHON versione 3, linguaggio interpretato. Semplice da usare ed estremamente
potente. Facilmente estendibile con nuove funzionalità.
Useremo quindi Google Colab -> piattaforma gratuita online per data scientist.
Ogni progetto in esso viene chiamato notebook
Andiamo su drive e apriamo il nostro primo foglio su Google Colaboratory. Si dovrebbe essere creata
la cartella.

46
Introduzione alla programmazione Python
Programma in Python è una sequenza di istruzioni che specifica come svolgere una computazione.
Solitamente si scrivono una per riga e la computazione può riguardare un problema matematico,
grafico, simbolico…
Prima cosa che fa un collaboratore è cercare di capire come interagire con quel linguaggio.

proviamo a farlo:
stampa ciò che noi mettiamo tra parentesi

Cos’è un programma? I linguaggi di programmazione hanno molte differenze, ma alcuni tipi di


istruzione di base sono presenti in tutti i linguaggi:

47
21/3
Programma → sequenza di istruzioni scritte in un linguaggio che specifica i passi da seguire per
risolvere un problema. Un programma è una codifica di un algoritmo in Python
I programmi sono parametrici → se scrivo un algoritmo lo scrivo per risolvere una somma di
problemi, somma due variabili.

VARIABILE → nome (identificatore) che si riferisce ad un valore (numero, testo…). Se tu dici che una
variabile è un numero, sarà sempre un numero. In Python invece se una variabile è un numero in un
altro momento potrebbe diventare una stringa.
Il valore a cui la variabile fa riferimento può essere di diverso tipo.
➔ Una variabile è una scatola in cui noi mettiamo sopra un’etichetta che è il suo nome. Dentro
ci mettiamo i valori che vogliamo. Quando creo una nuova variabile è come se volessi dire che
mi devo tenere a mente qualcosa e dove lo metto? Nella scatola con un nome. Il nome è il
nome della scatola e il suo contenuto è il valore di quella variabile.
Se non sappiamo cosa sta contenendo la scatola Python ci dà un comando type che stampa che cosa
c’è dentro, non il valore.
Andiamo ora su colab 06. Introduzione alla programmazione

48
str -> stringa
L’operazione base che riguarda le variabili è l’assegnamento
Nome = valore → si fa con un uguale solo!!! –> nome “prende” (=) valore

si dice: nome prende età (prima scatola)


età che è 32 (seconda scatola)
Questi valori esisteranno per tutto il
tempo del programma dopo di che
verranno distrutti, la memoria sarà
pulita.

Cosa sta alla destra dell’uguale? Un’espressione -> combinazione di valori, variabili ed
eventualmente anche operatori (+,x,-, diviso) il diviso però può funzionare diversamente:
il % si intende il resto della divisione intera. Un valore alla seconda invece è tradotto con doppio
asterisco **. Questo se facciamo operazioni fra numeri:

Possiamo fare operazioni anche tra stringhe: si chiama concatenazione, col + aggiungo una stringa
con l’altra. Anche la moltiplicazione fra una stringa e un numero esiste, per es. 3 x ciao.

49
Infine, più il programma cresce più diventa complesso, per questo è buono aggiungere delle note
con # -> ciò che sta dietro l’hashtag Python non lo considera. Ne vano inseriti pochi.
il commento è una cosa utile quando va a chiarire
punti del mio programma non banali da chiarire.

In Python:
le righe vuote vengono ignorate, così posso
separare parte del programma da essere più
ordinato senza che Python le consideri.

La concatenazione di stringhe col + non mette gli spazi, ricorda! È importante metterlo:

oppure ha replicato
esattemente anche gli spazi.

50
- Provare a calcolare l’area della campana ll’inizio delle slide.
Cambiando eventualemente i dati iniziali
avremo un altro risultato ma il
ragionamento logico rimane lo stesso.
Ultima riga con scritto print è l’output. Si sta
stampando due cose: c’è la virgola di mezzo.
Se faccio il tracing per ogni riga posso capire
dove sto sbagliando (basta fare print dopo
ogni riga)
Lettura dell’input (esercizi 07 Python su
drive)
Per legere l’input uso la funzione input → nome di variabile prende input (testo)

Valore inserito SEMPRE interpreatto


come stringa ed è assegnato alla
variabile -> varibaile.

Se vogliamo che gli input ci diano dei numeri dobbiamo dire a Python di prendere ciò che ha dato
l’utente e convertirlo:

51
Conversione di tipi

stringa del numero


Questi comandi sono utili quando dobiamo gestire l’input. Input → intrpreta ciò che viene passato
dall’utente ed essendo testo è una stringa e dovremmo sempre convertirlo.

Espressione booleane
Abbiamo visto le espressioni aritmetiche su stringhe, che possiamo fare +,-,%,x…
I linguaggi di programmazione avanzati includono quelle che sono le espressioni booleane → che
quando vengono calcolate assumono il valore risultante o vero o falso.
il doppio == compara le due
variabii x e y e sta dicendo -> vero
se il valore dell’espressione x è
uguale al valore dell’espressione
y.

Questi operatori possono essere combinati con operatori logici: ND, OR, NOT e le parentesi:

or -> se almeno una delle


due è vera.

Esercizi

52
Prima si valuta l’espressione poi si assegna a sinistra quella cella di memoria, di variabile.
Somma numeri in input:
seconda riga -> convertito la variabile a in un
numero intero e l’ha rimesso in a. ora sta
aspettando b …

Ha concatenato le stringhe, non fato la somma

Risultato di un’espressione booleana è SEMPRE o VERO o FALSO.


operatore con doppio uguale compara le espressioni da una parte e dall’altra.

5 è uguale a 5

Esecuzioni condizionali → un algoritmo è un algoritmo vero e utile se fa cose diverse a volte a


seconda dell’input.
Es. Se sto implementando una calcolatrice e voglio fare una divisione per 0, dovrò conrollare che i
denominatore sia diverso da 0. Se è diverso da 0 posso far l’operazine, se è uguale a 0 dico all’utente
che c’è stato un errore.

53
Istruzioni di esecuzione condizionale:
if -> spazio -> condizione -> spazio -> :
poi si va a capo ma ci si sposta di un po' di pszio, una
tabulazione o un certo numero prefissato di spazi.
L’espressione booleana dopo la parola riservata if è chiamata condizione.
- Se è vera, allora le istruzioni seguenti indentate (spostate di una tabulazione) vengono
eseguite.
- Se è falsa non succede niente.
Python obbliga ad inventare → se non mettiamo quegli spazi bianchi davanti lui non esegue perché
non ha capito quello che deve fare.
L'indentazione (o rientro) è l'inserimento di una certa quantità di spazi all'inizio di una riga del
codice sorgente. L’indentazione nei linguaggi di programmazione viene usata per aiutare a
comprendere meglio la struttura logica delle istruzioni.
In Python l’indentazione è obbligatoria e deve essere coerente
● esempio: non posso usare quattro spazi di rientro in un punto del codice e tre in un altro punto
In pratica Python “costringe” a scrivere programmi (in teoria) chiari e leggibili.

Se si mette if ci si aspetta lo spazio dopo!! Se non lo metto Python dà errore e non stampa.

Posso fare anche due stampe:


Se volessimo far qualcosa nel ramo falso?
Se la condizione è vera, allora le istruzioni del ramo if vengono eseguite. Se è falsa si eseguono le
istruzioni del ramo else.

54
C’è anche la possibilità di avere tre casistiche multiple:
- Viene eseguito uno, ed uno solo dei rami.
- Elif è l’abbreviazione di else if.
- Il ramo else non è obbligatorio, ma se si vuole usare, va messo alla fine.

Non è obbligatorio nel caso che è zero mettere l’ultimo else, si può anche solo mettere if ed elif e
basta.

55
Un altro modo di vedere questa condizione multipla sono le condizioni annidate -> una dentro l’altra.
fa la stessa cosa dei comandi di prima, con
la differenza che abbiamo due if, uno
dentro l’altro. Si scinde in due e da una
delle due si rescinde in due possibilità.
(le spaziature devono essere uguali
all’inizio e poi varia per il livello di
indentazione del secondo condizionale)

Python costringe ad essere


logicamente ordinati nella logica di
esecuzione del programma.

Fanno esattamente la stessa cosa delle righe di testo appena sopra.


Esercizio (07 Python, su Drive)

56
Cicli (o interazioni)
- Il più semplice, ciclo FOR
Stampa i numeri da 1 a 10 perché la variabile
n è una variabile, esiste lì. Le si sta dicendo:
variabile n prendi i valori che stanno tra A e
B, i valori sono 1 e 11. Sarà 1-2-3-4-5-6-7-8-
9-10.
Print n eseguita tutte le volte, ad ogni
iterazione ciclo quindi per 10 volte.

ha stampato il valore di n tutte le volte che volevamo, se mettiamo:

fa le operazioni tante volte quanto è la


differenza dei due estremi di range (7-
2=5, ha fatto cinque stampe infatti)

non deve per forza stampare n:


tabellina del 3

Mi permette di ripetere l’istruzione che è al suo interno tot volte -> che
decido io. Poi posso effettivamente cambiare quante volte, a seconda
del range e degli elementi estremi es (2,5).

57
23/3
Ciclo WHILE -> permette iterazioni che potenzialmente non eseguono un numero predefinito di
volte:
È fondamentale che nel corpo
del while ci sia un cambio del
valore di una o più variabili
controllate dalla condizione ad
ogni iterazione.

Contatori
La variabile n usata nei cicli per contare da 1 a 10 è un esempio quello che in programmazione si
chiama contatore:
- viene inizializzato prima del ciclo
- ad ogni iterazione il suo valore aumenta o diminuisce di un valore fisso

Accumulatori -> somme


Un altro compito assegnato ad una variabile è quello di accumulatore:
- utilizzata ad esempio per calcolare totali e somme
- viene inizializzata a ZERO prima dell’esecuzione del ciclo
- ad ogni iterazione il nuovo valore si accumula a quelli già presenti in precedenza
Si può inoltre uscire in modo anticipato da un ciclo → con istruzione BREAK
Con while True espressione booleana, non uscirà mai da questo ciclo perché è sempre vera. Come si
fa ad uscire?

58
È inoltre possibile fare dei cicli annidati → dato un ciclo per la variabile i da 1 a 90, un secondo ciclo
interno j che va da 1 a 90, questo codice stampa tutte le coppie i-j che si possono ottenere quando i
e j assumono valore da 1 a 90 che sono gli ambi a tombola.

esercizio con break -> per uscire da un ciclo e interrompere


esecuzione.
la condizione del while in
realtà diventa la stessa che si
è messa con break quando
vogliamo uscire dal ciclo.

Esempi cicli annidati:

59
Quando si scrive un codice la maggior parte delle volte si commettono errori, cosa succede in questi
casi? Python solleva un eccezione durante l’esecuzione -> eccezione = errore.

Sintassi -> insieme delle regole che definiscono le sequenze valide do simboli in un linguaggio.
- In linguistica: insieme delle relazioni grammaticali tra le parole che costituiscono una frase
- In informatica: la sintassi di un linguaggio di programmazione è l’insieme delle regole che
una porzione di codice deve eseguire per essere considerata conforme a quel linguaggio, e
quindi corretta.
Quando premiamo il tasto Play in Colab, l’interprete Python analizza tutto il programma e verifica
che non ci siano errori di sintassi:
1- se ci sono: solleva un’eccezione senza eseguire nessuna istruzione e termina
2- se NON ci sono: traduce il programma un’istruzione alla volta e la esegue
- se un’istruzione contiene un altro tipo di errore: solleva l’eccezione associata e termina senza
continuare l’esecuzione del restante programma
- se nessuna istruzione contiene errori: esegue tutto il programma e termina
Python non esegue programmi sintatticamente scorretti e ci costringe a scrivere, per quanto possa,
programmi corretti. Quando non è un errore di sintassi questo viene categorizzato come runtime
errors -> errori che avvengono a tempo di esecuzione. Se c’è un errore così come si fa a non far
crashare il programma? Python ci mette a disposizione parole, comandi specifici che sci permettono
di intercettare e gestire errori di esecuzione. Con comando try:
esercizi gestione degli errori

60
È possibile non solo intercettare gli errori ma se so che ho inserito non un numero ma una stringa:
ValueErrror -> da try al ramo except ValueError.
Al try deve almeno corrispondere un ramo di except altrimenti generiamo noi un errore sintatico del
nostro codice.

28/3
esercizio albero di Natale drive

61
FUNZIONI in informatica → sequenza di istruzioni che svolgono una computazione, che fanno
qualcosa, a cui noi per comodità assegniamo un nome. In Python viene detta definizione e consiste
nel dare un nome ed una sequenza di istruzioni associate a quel nome.
Una volta definita, una funzione, può essere richiamata. Perché? È utile per fare operazioni ripetute,
non ciclicamente ma per es. se faccio “calcola area cerchio” in output mi darà area del cerchio.
Utile per operazioni ripetute più volte nel corso di un programma (diverso da cicli…)
● esempio: dobbiamo stampare più volte gli elementi di un dizionario (vedremo dopo cosa è un
dizionario) potremmo definire una funzione stampa_dizionario che mostra a schermo tutte le coppie
chiave: valore contenute nel dizionario.

Si dice così che una funzione “prende” o “accetta” un argomento e “restituisce” un risultato. Il
risultato viene definito valore di ritorno.
tutti questi comandi visti in Python in
realtà sono vere e proprie funzioni. Per
rifare tante volte determinate funzioni.
Le funzioni sono comode perché ci permettono di essere composte: concetto di ‘divide et impera’,
preso un problema lo scompongo in più sotto problemi. Faccio la parte di soluzione del problema
semplice e metto insieme per risolvere il problema complicato. Composizione → argomento di una
funzione può essere qualunque espressione inclusa una funzione stessa.

62
Ogni volta in cui possiamo andare a mettere un valore, possiamo sempre scrivere un’espressione
arbitraria, esempio:
quando abbiamo un’operazione di
assegnamento che in Python si fa con il
simbolo = a sinistra mettiamo un nome
di variabile. Possiamo mettere più cose
perché, se no il programma si chiede
quali zone di memoria deve riempire
con il risultato. Se faccio un’espressione
di assegnamento nella parte sinistra
sono obbligato a mettere una singola
variabile se invece sto facendo un doppio = ovvero comparando due cose, sia sinistra che a destra
possono mettere intere espressioni.
È possibile, inoltre, definire noi delle nuove funzioni, una definizione di funzione specifica quello che
sarà il nome della funzione e sotto ci mettiamo la sequenza di istruzioni da eseguire ogni qual volta
la vogliamo utilizzare. Esempio, funzione che stampa i piatti del menu del ristorante così poi si sceglie
col pulsante ciò che si vuole ordinare:
def -> parola chiave che definisce la nuova
funzione
nome -> della funzione che è qui menu, le ()
che potrebbero contenere i parametri della
funzione e infine i :
tutte le righe sotto sono inventate e sono
tutte quelle operazioni che andiamo a fare
quando richiamiamo questa funzione -> body
o corpo della funzione. Bisogna ricordarsi di
lasciare una riga vuota alla fine.
Per il principio detto prima è possibile
utilizzare funzioni all’interno di altre funzioni,
voglio ripetere la stampa della funzione due
volte? Ok, ripeto la definizione menu, per es.
e poi farò due stampe consecutive con scritto
menu:

63
La funzione ora non ha parametri ma per migliorare possiamo aggiungere argomenti alla funzione.
Queste funzioni vengono associate a delle variabili dette parametri.
nome -> è il nome della variabile
e sotto stamperò “ciao” e poi
contenuto variabile nome.

Invoca la funzione di saluta passandogli un parametro, il nome passato va dentro la variabile


argomento nome che abbiamo definito sopra.
Questa variabile nome, ogni volta che viene invocata, saluta, prende l’argomento che è fra parentesi.
(dopo saluta Caio posso fare altre righe sotto con scritto saluta Tizio, Sempronio…)
Saluta mio_nome -> variabile. In memoria c’è un contenuto Lara, lo vado a mettere dentro la
variabile nome.
- Le zone di memoria della funzione sono diverse dalle zone di memoria del mio programma
principale. Quindi le variabili possono morire in un momento diverso.
Valgono anche regole di composizione:

Quando creiamo una variabile all’interno di una funzione, la variabile è locale → esiste e viene vista
solo all’interno della funzione.
quando ho finito quella variabile non c’è più.
Nome è una variabile locale alla funzione.

64
Sia le variabili che definisco dentro a una funzione sia le variabili che passo come parametro sono
sempre LOCALI alla funzione. Posso metterne 1 come 30 di argomenti alla funzione… tutti quelli che
mi servono -> basta separare con le virgole i parametri della funzione:

In questo caso abbiamo fatto una funzione che stampa qualcosa a scherzo ma non ci restituisce nulla,
ci restituiscono il valore convertito di quello che è tra parentesi. Ciò che vogliamo è il valore di ritorno
di una funzione.
La maggior parte delle funzioni di bsae in Python restituiscono un valore di ritorno.
Le funzioni che abbiamo scritto fino ad ora invece non restituiscono valori: fanno qualcosa, come
stampare un messaggio, ma non restituiscono nulla.
Per essere precisi, il valore restituito è None: un valore speciale che indica, appunto, ‘nessun valore'.
Se invece vogliamo che la nostra funzione ci ritorni un valore -> comando return:

oppure:
Il risultato, a destra di return va a essere il valore di ritorno dell’intera funzione.
quella dopo area_totale è un’espressione che
viene calcolata

Dopo aver creato la funzione di return possiamo crearla come più ci piace. Ad esempio:

65
Non sono obbligato ad avere una sola volta return, ad esempio, se devo fare diverse cose a seconda
delle istruzioni condizionali nel codice posso usare diversi return:

4/4
RECAP lezioni scorse
Concetto di funzione -> mettere insieme un blocco di codice che devo o posso riutilizzare in diversi
punti del programma. Così non ripeto il codice più volte. Se copio un mio codice in diverse zone della
pagina, se trovo un errore lo devo andare a correggere da tutte le parti quindi rischio più spesso di
commettere errori -> con le funzioni no.
Funzione -> piccolo mondo a sé che ha le sue variabili, i diversi cassetti.
Possiamo anche mettere delle condizioni nelle funzioni:
else -> altrimenti

I programmatori ci permettono di svolgere in modo automatizzato ed efficace compiti ripetitivi e


risolvere problemi. Affinché i programmi siano davvero utili → ci serve un modo efficace di gestire i
dati:

Strutture dati → modi in cui possiamo organizzare l’informazione e i dati che saranno processati
(input) e restituiti (output) da un computer, in modo da potervi accedere in modo efficiente ed
efficace a livello computazionale.

66
- È un contenitore dove possiamo posizionare alcune informazioni, e che fornisce dei metodi
specifici per aggiungere e richiedere pezzi di questa informazione.
STRUTTURE DATI
➔ Liste
➔ Dizionari
LISTE -> sequenze di elementi ordinati e potenzialmente ripetuti che si possono contare, in quanto
è possibile sapere quanti elementi essa contiene in un dato momento. esempi di liste:
anche la lista della spesa è una lista

PILA → lista con uno specifico insieme di operazioni che si possono effettuare sui suoi elementi.
Le operazioni di aggiunta (push) e rimozione (pop) seguono una strategia last in first out (LIFO).
Ovvero l’ultimo è il primo che viene preso. Una pila è sempre nell’ordine -> l’ultimo che viene messo
è il primo che viene preso.
CODA → specie particolare di lista con uno specifico insieme di operazioni che si possono effetuare
sui suoi elementi. Le operazioni di aggiunta (enqueue) e rimozione (dequeue) seguono una strategia
first in first out (FIFO). Prendo sempre quello che è arrivato per primo.
INSIEME → collezione di elementi non ordinati e non ripetibili che però si possono contare. Esempi:
● una classe di studenti ● una collezione di colori in un bicchiere di plastica.
DIZIONARIO → collezione non ordinata di elementi definiti da coppie chiave-valore che si possono
contare, dove la chiave non è ripetibile. Esempi: ● una collezione di definizioni nel dizionario ● Una
tabella di conversione da euro ad altre valute.

Come realizzare due delle principali strutture dati in Python?


Liste -> sono sequenze di valori (come le stringhe), qua i valori possono essere di qualunque tipo e
vengono chiamati elementi della lista.
Ci sono vari modi per creare liste in Python. Il più semplice è scrivere gli elementi fra parentesi
quadre e separarli con virgole:
[10, 20, 30, 40]
["Luca","Elisa","Enrico"]

67
La prima è una lista di interi, la seconda è una lista di stringhe. Gli elementi di una lista non devono
obbligatoriamente essere dello stesso tipo.
La seguente lista contiene un intero, una stringa, ed un’altra lista:
["Marco Rossi",2021,[27,30]]
Una lista contenuta in un’altra viene detta lista annidata.

Possiamo quindi assegnare ad un variabile un valore di tipo lista e poi usarlo, ad esempio per
stamparlo:
studenti = ["Luca","Elisa","Enrico"]
print (studenti)
Una lista che non contiene elementi viene detta lista vuota. È possibile creare una lista vuota in due
modi:

Gli elementi della lista vengono identificati dalla loro posizione. Le posizioni degli elementi iniziano
da 0 e vengono detti indici degli elementi.
usando gli indici posso accedere a ogni
elemento della lista.

Gli indici si usano per accedere agli elementi di una lista. È possibile usarli per accedere in lettura,
ad esempio:

68
La mia lista la posso anche modificare, posso dire sostituisci questo elemento con un altro valore:

Liste
Come possiamo usare gli indici:
- qualsiasi espressione intera può essere usata come indice di una lista
- se si prova a leggere o scrivere un elemento che non esiste si ottiene un IndexError (errore fuori
dagli indici)
- se un indice ha valore negativo si conta all’indietro dalla fine della lista:

e così via se metto -2 stampa Marty e se metto -3 Paolo


Esiste un operatore → in per verificare che un elemento sia presente nella lista:

se avessi messo il numero 8 non stampa nulla perché non c’è.

69
Il modo più comune per “attraversare” una lista (o scorrere, ossia accedere a tutti i suoi elementi) è
usare il ciclo for:

fai prendere a b ognuno degli elementi della lista a:


Cosa si può fare con una lista? Ci si possono aggiungere elementi in coda e posso usare il metodo
append:

E se voglio togliere un elemento? Lo posso togliere da dove voglio usando metodo pop:

posto 2 -> quindi cancella il 30 perché inizia


a contare da 0.
È anche possibile effettuare la rimozione usando l’operatore del (o remove) e specificando
l’elemento da rimuovere:

Un DIZIONARIO è una collezione di elementi:


- Una coppia chiave : valore
- In esso possiamo aggiungere e togliere elementi
- Le chiavi ci consentono di accedere ai valori associati
Un dizionario senza elementi viene detto dizionario vuoto, è possibile crearlo in due modi:

70
Per aggiungere un nuovo elemento (ossia una nuova coppia chiave : valore) si usa la seguente sintassi:

Cerco una chiave, mi dice se c’è o meno e mi dice il valore associato a quella chiave. Se c’è già verrà
aggiornata l’associazione, ciò che vado a mettere sostituisce ciò che c’era prima:
chiave nome viene sovrascritta dall’ultimo
valore utilizzato

L’accesso ai valori contenuti nei dizionari si fa con le chiavi:

Le chiavi dei dizionari devono essere stringhe. I valori possono essere di qualsiasi tipo.
(gli indici sono numeri interi)

71
Modo più sintetico per creare dizionario:

L’operatore in qui si può usare per avere le chiavi:


Anche i dizionari, come le liste, si possono
scorrere con il for.

Come fare a risolvere problemi con il linguaggio di programmazione. Esercizi 08 python

es. 1 es. 2
Il processo risolutivo è lo stesso, mi sta chiedendo di scorrere gli elementi e fare una sommatoria.

es. 3 es. 4
72
Es. 5
Return lo mettiamo quando siamo sicuri del risultato.
Es. 6 -> restituire un messaggio non stampare. Le chiavi sono i nomi dei campi. Con il simbolo + si
concatenano loe stringhe.

6/4
Es. 7
Metodo split -> restituisce la lista di tutte le parole nella stringa. Separa e dopo posso scorrere la
lista con il ciclo for.

Dizionario → serie di coppie chiave : valore. Le chiavi sono sempre delle stringhe e il valore va
incrementato ogni volta che vediamo nella nostra stringa la stessa parola.
Nello spazio dove è stato messo “Ciao ciao
mare£ si può mettere testo lungo quanto si
vuole, lui però guarderà minuscole e maiuscole.

73
Esercizi 09 Python

Comandi per fare controllo sull’input (lez7).


Try ed except per controllare i
dati in input.
Se devo richiedere nuovamente
all’utente di inserire qualcosa
devo mettere un ciclo while di
controllo. Questo while deve
modificare o me no la variabile, la
quale in un modo o nell’altro
viene modificata all’interno di un
ciclo.

Minimo fra tre numeri: scrivere un programma che prenda in input tre numeri interi e stampi il più
piccolo:

74
Stare attenti a ciò che viene richiesto nella consegna, se dice la funzione restituisce la somma ->
return se invece la consegna dice stampa la somma -> print.
Somma numeri: scrivere un programma che prenda in input dall'utente quanti numeri vuole
sommare, poi chieda all'utente di inserirli (un numero intero alla volta), e alla fine stampi la somma
dei numeri inseriti:

Inversione degli elementi di una lista: scrivere la funzione inverti che prende come argomento una
lista di valori di qualsiasi tipo (es. numeri, stringhe, ecc.) e li stampa in ordine invertito:

Gli elementi della lista posso anche


accedergli sempre usando gli indici
particolari.
-1 → significa ultimo della lista quindi la
stampa al contrario la lista

Poi esercizio dizionario -> ita_fra. Il dizionario si può anche scorrere ma è meno utile, è più utile
usare le chiavi per scorrerlo, sarà Python a dirci se c’è o meno.

75
18/04 NON CHIEDE ALL’ESAME OPEN REFINE
OpenRefine → tul che è stato sviluppato da Google. Si chiamava Google Refine.
Refine -> raffinare. Idea di poter prendere i dati e unirli, manipolarli.

2/05
PANDAS
Pandas è una popolare libreria di analisi dei dati in Python, che offre una vasta gamma di funzionalità
per la manipolazione, l'elaborazione e l'analisi di grandi moli di dati. Grazie alla sua velocità,
flessibilità ed espressività, Pandas consente agli utenti di lavorare facilmente con dati strutturati e
non strutturati, inclusi dati tabulari, serie temporali, dati di testo e altro ancora.
Tecnicamente è una libreria, ossia un insieme di funzioni e strutture dati predefinite pronte per l'uso
che forniscono funzionalità specifiche che estendono quelle fornite da Python.
Oltre a Pandas, esistono molte altre librerie in Python che estendono le funzionalità di base del
linguaggio, fornendo funzionalità specializzate per specifici compiti. Ad esempio:
Matplotlib è una libreria popolare per la creazione di grafici e visualizzazione dei dati
Scikit-learn è una libreria per l'apprendimento automatico e la modellizzazione dei dati
PyAudio e MoviePy sono librerie per la manipolazione di file audio e video
PyQt è una libreria per la creazione di interfacce grafiche a finestre. ecc.
In sintesi, le librerie specializzate come Pandas e quelle menzionate sopra sono strumenti essenziali
per l'analisi di dati in Python e consentono agli utenti di svolgere compiti specifici in modo più
efficiente ed efficace rispetto alle funzionalità di base del linguaggio.

Attivare l’estensione di Pandas


Prima di utilizzare le funzionalità di Pandas, è necessario attivare l'estensione di Pandas e un'altra
libreria collegata chiamata NumPy.
Questa operazione di attivazione in informatica è conosciuta come "importazione" delle librerie.
L'importazione delle librerie consiste nell'importare le funzionalità fornite dalle estensioni che
desideriamo utilizzare nei nostri programmi.
Per importare le librerie di Pandas e NumPy, è necessario scrivere le seguenti due righe di codice
all'inizio di una cella di codice del nostro notebook di Colab e premere il pulsante "Play" per
eseguirle.
pd -> pandas

76
Le due strutture dati principali della libreria Pandas sono:
le Series: sono liste di dati(1-dimensionali) -> come le liste già viste in Python. Colonne di dati
i Dataframe: sono tabelle di dati (2-dimensionali)

A sinistra c’è 0, 1, 2 → lo 0 è un indice. Pandas


aggiunge alla serie anche gli indici
In fondo ci dice il tipo di dato -> mi avete fatto
leggere dei numeri interi (int).
Abbiamo creato una variabile (serie_numeri) e
assegnato come valore una serie di Pandas che
contiene gli elementi della lista che sono scritte
nelle parentesi tonde.

È uguale fare così:

Le liste si fanno con le [] e possono essere di qualunque tipo.

Data type qui sono


oggetti (object)

Pandas assegna ad ogni elemento della serie un indice (index) - detto anche asse (axis) che inizia da
zero (come le liste, ricordate?). Quando stampiamo una serie gli indici vengono riportati come prima
colonna, seguita dagli elementi della serie.
È possibile anche impostare indici personalizzati, ad esempio testuali.
Numero di indici
deve essere
coerente coi dati!

77
Gli indici posizionali assegnati automaticamente da Pandas sono comunque sempre disponibili e
utilizzabili (ad esempio per filtrare le righe data la posizione).
Quando vogliamo ridurre tantissimo la quantità di codici che andiamo a scrivere. (funzioni per es. di
Python che facevano calcolare la media delle funzioni oppure trova il massimo dei valori di questa
lista). In pandas per fare la media si fa così:
la serie numeri era definita sopra (1, 3, 5, 6, 8)

se voglio il massimo: minimo:

La sintassi inglese di queste istruzioni ci suggerisce quello che stiamo per fare. Ad esempio, data la
serie di numeri memorizzata nella variabile serie_numeri, quando scriviamo:

→ andiamo a richiamare l'operazione mean() che calcola la media


degli elementi memorizzati nella variabile che precede il punto.
Applico un metodo, una funzione a un oggetto.

Dataframe → è una collezione di serie, ovvero è equivalente concettualmente ad una tabella di


dati.
Il modo più semplice per creare un Dataframe è partire da un dizionario Python.
prima colonna: 0, 1, 2, 3 -> sono gli indici
seconda colonna -> dati della serie pere
terza colonna -> dati della serie mele

78
Abbiamo gli indici anche per i Dataframe:
Come abbiamo visto per le serie, anche nei Dataframe le righe sono identificate dagli indici (o assi),
che vengono creati automaticamente da Pandas e stampati come prima colonna.
È possibile impostare indici personalizzati, ad esempio testuali. Il modo più semplice è creare una
serie che contiente gli indici e impostarli per il dataframe usando il metodo set_index().

È l’idea di quanti frutti ho raccolto ogni giorno,


raccolta dati in modo più logico.

La sintassi segue lo schema descritto in precedenza: applichiamo un'operazione (che imposta gli
indici in questo caso) ad una struttura Pandas, una Serie negli esempi precedenti ed un Dataframe
in questo ultimo esempio.
Notiamo anche che alcune operazioni (o metodi) richiedono di scrivere fra parentesi dei valori
direttamente o contenuti in variabili (es. set_index()), mentre altre operazioni non lo richiedono
(es. mean() e max()).

Lettura di dati da file


L'utilizzo più tipico di Pandas è quello di poter analizzare dati che sono memorizzati su file e caricarli
all'interno di un Dataframe.
Tipicamente i dati vengono salvati in file di testo. I formati più comuni sono:
- file di tipo CSV (Comma-Separated Values): ogni riga della tabella in una riga del file, le celle
delle diverse colonne sono separate da, o; (i casi più comuni)
- file di tipo TSV (Tab-Separated Values): come i CSV, ma il separatore di cella è un carattere di
tabulazione (tab)
Dal 44 min → esercizio tabella Titanic
Per ottenere le prime o le ultime 10 righe di un Dataframe (posso mettere un numero a mia scelta
al posto di 10, ma se non scrivo un numero ne ottengo 5):
head per le prime e tail per le ultime

79
Con Pandas è possibile realizzare analisi di dati interessanti con poche righe di codice. Queste analisi
ci permettono comprendere meglio fenomeni (anche complessi) facendoli "emergere" dai dati.
Facciamo un semplice esempio per capire cosa è possibile fare con Pandas. Proviamo a capire se età
e sesso sono fattori importanti per determinare se una persona si è salvata dal disastro.

Principali filtri sui dati Pandas


Per effettuare analisi basate sui dati, un'operazione fondamentale è la selezione di porzioni di dati
specifiche per concentrarsi su alcuni aspetti particolari.
Questa operazione è nota come filtro sui dati e Pandas offre molte funzionalità per filtrare i dati in
modo facile e veloce. Principali funzionalità di filtraggio su Dataframe.
Filtrare le colonne che hanno un’etichetta → [nome di una colonna] es. variabile colonna età, è una
serie:

Se voglio invece filtrare una serie di colonne specifico la lista di etichette ovvero una lista di nomi di
colonne. Titanic è data frame grande poi metto una parentesi quadra che mi serve per il filtro e poi
una seconda parentesi quadra che mi serve per la lista dei nomi delle colonne:

il risultato è una data frame, un sottoinsieme del data


frame iniziale.

80
Per filtrare le righe
Il modo più semplice per filtrare le righe di un Dataframe è usare gli indici del Dataframe che
identificano le righe che ci interessano.
Per fare questo si usa il metodo iloc specificando fra parentesi quadre l'indice della riga che ci
interessa. (Iloc sta per index; gli indici partono da 0, non dimenticarlo!)

Se invece vado a prendere più righe o più colonne è di nuovo un data frame (c’è scritto nell’ultima
riga):

Per filtrare righe e colonne contemporaneamente -> concateno le prime operazioni di filtro appena
viste:
ho tre righe e tre colonne, funziona anche al
contrario:

81
A noi interessa però filtrare in base a qualcosa → in base a una o più condizioni.
I principali operatori di base per esprimere le condizioni sono:
== (uguale?)
!= (diverso?)
> (strettamente maggiore?)
>= (magggiore uguale?)
< (strettamente minore?)
<= (minore uguale?)

Esempi:
Filtro con condizione, prendo un data frame o
lo filtro sulla base della colonna che mi
interessa, quella dell’età.

In molte situazioni le condizioni che ci servono non sono esprimibili con una semplice condizione.
Per farlo abbiamo bisogno di esprimere condizioni complesse, ad esempio per filtrare le persone che
hanno meno di 18 anni e contemporaneamente sono di sesso maschile.
Per fare questo usiamo i due principali operatori logici (anche questi già visti in precedenza):
and logico: la forma è condizione1 & condizione2 - vera se sono vere sia condizione1 che codizione2
or logico: la forma è condizione1 | condizione2 - vera se è vera condizione1 oppure codizione2
(basta che sia vera una delle due per soddisfare la condizione)

Il risultato è un Dataframe.
Nota 1: per evitare problemi di precedenza fra gli operatori relazionali (==, !=, <, ecc.) e gli operatori
logici (& e |) è meglio scrivere le condizioni sempre fra parentesi tonde.

82
Nota 2: gli operatori logici possono essere usati per esprimere condizioni più lunghe e complesse,
ad esempio per combinare non solo due condizioni, ma anche tre, quattro o più.

In molte situazioni è utile filtrare esplicitamente i valori nulli (ossia mancanti) o viceversa quelli non
nulli.
Per fare questo Pandas fornisce i metodi isnull() e notnull().
Vediamo ad esempio come fare per filtrare i passeggeri per cui non è memorizzata l'età (valore
nullo):

età non memorizzata

età è presente

Esercizio: filtrare le righe del Dataframe aventi valori nulli/non nulli relativamente alla porta di
imbarco, e salvarle nelle variabili imbarco_nullo ed imbarco_non_nullo:

Di queste due persone si è


perso da dove si sono
imbracate.

83
Aggregazione di dati e operazioni su gruppi
Il raggruppamento di un insieme di dati e l'applicazione di una funzione a ciascun gruppo, sia che si
tratti di un'operazione statistica che di una trasformazione, è una componente fondamentale del
workflow di un data analist.
Dopo il caricamento, l'esplorazione ed il filtro di un insieme di dati, potrebbe essere
necessario calcolare statistiche di gruppo a per presentarle in un report o visualizzarle graficamente.
Pandas fornisce una funzionalità chiamata groupby che è flessibile e che consente di suddividere,
raggruppare e riepilogare i dati in modo naturale.
Il meccanismo per fare questo è detto split-apply-combine, ed è diviso in tre passi:
split: i dati contenuti in una struttura Pandas (una Serie o un Dataframe) viene suddiviso (split) in
gruppi sulla base del valore di un campo (es. di una colonna di un Dataframe)
apply: dopo aver raggruppato i dati, viene applicata una funzione ad ogni gruppo (qui ad esempio la
somma), producendo un nuovo valore
combine: alla fine i risultati dell'applicazione di queste funzioni vengono combinati in un oggetto
(una struttura dati - es. un Dataframe) di risultato
Nella seguente immagine, una spiegazione grafica del procedimento:

Ho una series che mi dà l’età media dei


passeggeri di ogni classe.
Abbiamo la 1, 2, 3

84
4/05

➔ È possibile combinare tutti questi filtri, raggruppamenti, calcoli, tutte le volte che vogliamo e
come vogliamo.
A questo punto combinando filtri, raggruppamenti e calcolo di statistiche sui dati possiamo svolgere
in pochissime righe analisi sofisticate con Pandas.
Se l'obiettivo fosse ad esempio individuare quali sono i fattori più rilevanti per determinare chi si è
salvato e chi invece non è sopravvissuto, conosciamo tutti gli elementi per esplorare i dati, formulare
ipotesi e verificarle usando filtri e statistiche.
Proviamo a verificare alcune ipotesi e a formularne di nuove, ad esempio:
sono state fatte "preferenze" in base al sesso, all'età e alla classe del biglietto - o comunque questi
fattori hanno influito?
esistono altri fattori importanti? Ad esempio, la porta di imbarco, o il fatto di avere una cabina?
Oppure ancora il fatto di avere parenti a bordo?
basta un singolo fattore a spiegare la maggior parte dei casi, o forse bisogna valutare una serie di
fattori - ad es. l'età ed il sesso, oppure l'età e la classe del biglietto, ecc.?
Tutte queste idee applicabili più avanti nella fase di modellizzazione.

85
Pandas come libreria metta e adisposizione alcune funzionalità per visualizzare i dati, solo alcune.
7 tipi di diagrammi:
bar: sono i barchart plot, ossia i diagrammi a barre
hist: sono gli istogrammi
box: sono i boxplot
kde: sono i density plot
area: sono gli area plot
scatter: sono gli scatter plot
hexbin: sono gli hexagonal bin plot
pie: sono i pie plot, ossia i diagrammi a torta
1- ISTOGRAMMA
Visualizza la distribuzione dei nostri dati rispetto ad una variabile, ossia rispetto ad una colonna
specifica.
Per farlo dobbiamo filtrare la colonna che vogliamo visualizzare, e richiamare il
comando plot scrivendo fra parentesi tonde type="hist".

Non abbiamo però metodi semplici per


visualizzare l’istogramma

86
(File 12.seaborn -> importa dati Titanic)
Visualizzare i dati è meglio che mettere puri dati numerici in una tabella perché si rende chiaro
all’ascoltatore cosa stiamo facendo vedere.
Le funzionalità di visualizzazione fornite da Pandas presentano però numerosi limiti:
- solo un numero ristretto di diagrammi
- non è facile configurare i diagrammi: apportare modifiche anche piccole ai diagrammi è
molto complicato, a volte addirittura impossibile
- il funzionamento dei diagrammi è spesso complesso e poco intuitivo ecc.
Esistono invece librerie specializzate che estendono le funzionalità di Python per la creazione di
grafici e diagrammi.
Esistono invece librerie specializzate che estendono le funzionalità di Python per la creazione di
grafici e diagrammi.
Noi useremo Seaborn (https://seaborn.pydata.org/), una libreria integrata molto bene con Pandas.
In pratica noi useremo:
Pandas per lavorare sui dati: caricarli, filtrarli, estrarre valori, calcolare statistiche, ecc.
Seaborn per realizzare diagrammi basati su dati caricati ed elaborati con Pandas

Preparazione dell’ambiente
Prima di iniziare la lezione di oggi dobbiamo preparare l'ambiente Colab svolgende tre passi:
1- importare le librerie Pandas (come visto nelle lezioni precedenti) e Seaborn

2- caricare in questo notebook Colab i file con i dati da usare per le analisi. Anche oggi useremo
i dati del disastro del Titanic (file 11.train.csv dal materiale della lezione precedente)
3- caricare i dati del file (nel nostro caso 11.train.csv) in un Dataframe:

87
Seaborn è una libreria realizzata per semplificare la creazione di diagrammi/grafici (es. scatterplot, a
barre, boxplot, ecc.) basati su dati.
Gli elementi principali della libreria sono mostrati nella seguente figura.

I tre colori identificano i tre gruppi principali di grafici:


Relazionali (in blu): ideali per capire come le variabili in un dataset sono in relazione le une con le
altre, e come queste relazioni dipendano da altre variabili
- https://seaborn.pydata.org/tutorial/relational.html
Distribuzioni (in rosso): permettono di evidenziare come sono distribuiti i dati, e quindi di
rispondere a domande come: in che range di valori si trovano i dati? Sono equamente distribuiti
oppure maggiormente concentrati verso un estremo (es. il massimo) o l'altro (es. il minimo)? Ci sono
degli outlier? - https://seaborn.pydata.org/tutorial/distributions.html
Categorici (in verde): adatti per dati che sono suddivisi in gruppi (o categorie) - un esempio di dato
di tipo categorico sono le taglie di un abito ("S", "M", "L", "XL")
- https://seaborn.pydata.org/tutorial/categorical.html

Sotto il nome dei gruppi ci sono i grafici messa a disposizione da Seaborn per ogni gruppo: due grafici
relazionali (scatterplot e lineplot), quattro grafici per distribuzioni (histplot, kdeplot, ecc.) e sei grafici
categorici (stripplot, swarmplot, ecc.).
Per ovvi motivi noi vedremo solo un sottoinsieme dei diagrammi forniti da Seaborn: lo studio di tutti
i diagrammi e di tutte le funzionalità richiederebbe infatti un corso completo dedicato a questo
argomento.
Con gli elementi che tratteremo saremo comunque già in grado di svolgere analisi interessanti.

88
Diagrammi relazionali (blu) → per capire le relazioni fra le variabili.
Sono adatti per rappresentare per ogni elemento del nostro dataset (detto anche individuo, ossia
una riga di un Dataframe) due variabili (ossia i valori delle celle in due colonne) di tipo numerico.
Facciamo un esempio: creiamo uno Scatterplot che mostri l'età dei passeggeri (valore numerico) in
relazione al costo del biglietto (altro valore numerico).

Sns -> valore dato a seaborn quando è stato


importato
Ogni puntino è un passeggero, prezzi molto
bassi e due persone di 35 anni che hanno
pagato più di 500 sterline.
C’è anche sotto chi ha pagato 0 magari
invitato per l’inaugurazione del Titanic.

La prima istruzione scritta sopra prepara il grafico. La seconda lo mostra a schermo. Nella prima
istruzione possiamo specificare al posto di "Age" e Fare i nomi delle colonne che vogliamo mostrare
sugli assi X e Y.
Gli Scatterplot permettono quindi di rappresentare due dimensioni numeriche dei dati,
corrispondenti a due variabili del nostro Dataset (nell'esempio le colonne Age e Fare appunto).
È possibile rappresentare un'ulteriore dimensione dei dati di tipo categorica (ad esempio il sesso dei
passeggeri) specificando il parametro hue:

azzurro uomini - arancione donne


mediamente il costo è indifferente che sia
maschio o femmine anche se sembra le
donne abbiano pagato un pochino di più.

Al posto di Sex si può mettere anche


Survived per vedere se il costo del biglietto
a centrato con il fatto che sono
sopravvissuti:

89
Al posto di "Sex" possiamo specificare il nome di una qualsiasi colonna di tipo categorico, e Seaborn
si occuperà di scegliere la paletta di colori più corretta.
Osservazioni:
- l'ordine dei parametri è ininfluente: possiamo invertirli come segue

ottenendo lo stesso risultato


- I parametri seguono la forma nomeParametro=valore, e sono separati da virgole
- il parametro hue può essere utilizzato per tutti i diagrammi, salvo qualche eccezione

l’ordine è indifferente

Esercizio: realizzare uno scatterplot per rappresentare l'età sull'asse Y, il prezzo del biglietto sull'asse
X, ed un'altra variabile categorica (diversa dal sesso che abbiamo già visto) a piacere:

90
Diagrammi per distribuzioni
HISTPLOT (istogrammi) → ideali per rappresentare la distribuzione dei dati -
vedi https://seaborn.pydata.org/generated/seaborn.histplot.html.
Sono adatti per rappresentare il numero di elementi raggruppati per categorie (o altre informazioni
generali degli elementi di una categoria).
Il caso più semplice è quello di raggruppamenti costruiti in base a valori categorici.
Facciamo un esempio: creiamo un Istogramma che mostri il numero di passeggeri per ogni classe di
biglietto (valore categorico).
Non c’è asse y perché è contare gli elementi, non lo
devo dire io, lo fa lui.

Con il parametro x abbiamo specificato una


colonna contenente dati di tipo categorico da
mostrare sull'asse X e da usare per fare i
raggruppamenti. Sull'asse Y Seaborn mostra
automaticamente il numero di elementi, ossia di
passeggeri, per ogni gruppo.

È possibile impostare sull'asse X valori numerici: in questo caso Seaborn crea in automatico le
categorie raggruppando i dati per intervalli.
Esempio: creiamo un istogramma con le età dei passeggeri.
È possibile specificare il numero di gruppi con il
parametro bins:

91
Anche negli Histplot possiamo usare il parametro hue per rappresentare un'altra variabile (ossia
un'altra colonna del Dataframe) di tipo categorico. Esempio:

Quando usiamo il parametro hue può essere


utile impostare il parametro multiple="stack".
Esempio:

Il parametro stat permette inoltre di calcolare,


invece che il conteggio del numero di
elementi, altri valori statistici per ogni
gruppo.
I valori possibili sono: "count" (valore di
default, se non specifichiamo il parametro
Seaborn calcola questo), "frequency",
"density", "probability".

92
11/05
Diagrammi categorici
Boxplot → sono diagrammi categorici ideali per analizzare dati organizzati in gruppi -
vedi https://seaborn.pydata.org/generated/seaborn.boxplot.html.
Sono adatti per rappresentare gruppi di dati numerici attraverso quartili.
Facciamo un esempio: creiamo uno Boxplot che mostri per ogni classe di biglietto (valore categorico)
l'età dei passeggeri (valore numerico).

Violinplot e Swarmplot
Come i box plot i Violinplot e gli Swarmplot mostrano la suddivisione in quartili rispetto, ma inoltre
rappresentano in maniera evidente la distribuzione dei dati - in modo simile agli histplot -
questo grafico e quello sopra sono equivalenti

93
Nota: è possibile usare il parametro size per modificare la dimensione dei punti nello swarmplot. Il
valore di default se il parametro non viene specificato è 5.
Altre opzioni visualizzazione Seaborn → Seaborn fornisce un alto livello di personalizzazione e
permette di specificare gli aspetti grafici dei diagrammi nei minimi dettagli.
Vediamo come impostare alcune opzioni generali, ossia che verranno utilizzate per tutti i diagrammi
Seaborn una volta impostate:
- il comando sns.set_style("whitegrid") imposta lo sfondo dei diagrammi a griglia su sfondo
bianco. Esempio:

I principali valori possibili (oltre che "white") sono:"darkgrid", "whitegrid", "dark", "ticks"

- il comando sns.despine elimina il bordo superiore e quello destro. Esempio:

94
- il comando sns.set() permette di impostare una serie di opzioni per il diagramma che vanno
specificate fra parentesi.
Non specificando alcun parametro fra parentesi risulta molto utile per fare un reset di tutte
le opzioni.
- il comando sns.set_context("poster") permette di impostare uno stile di diagramma (incluse
le posizioni delle didascalie, delle scritte sugli assi, delle griglie, ecc.) adatto a presentazioni
su poster.
Ci sono quattro valori possibili: "paper"e "notebook", "talk", "poster".

INTRODUZIONE AL MACHINE LEARNING


Siamo nel boom del machine learning , perché?
● crescente disponibilità di dati
● aumento della potenza computazionale
● investimenti crescenti nel campo
Parole chiave:
machine learning, deep learning, pattern recognition, artificial intelligence

Definizione di Intelligenza Artificiale (IA) dall’Enciclopedia Treccani:


“Disciplina che studia se e in che modo si possano riprodurre i processi mentali più complessi
mediante l'uso di un computer. Tale ricerca si sviluppa secondo due percorsi complementari: 1. da
un lato l’IA cerca di avvicinare il funzionamento dei computer alle capacità dell'intelligenza umana
2. dall'altro usa le simulazioni informatiche per fare ipotesi sui meccanismi utilizzati dalla mente
umana”
Il machine learning (ML), o apprendimento automatico, è una branca dell'intelligenza artificiale che
si occupa di sviluppare algoritmi e modelli matematici che permettono a una macchina di
apprendere e migliorare la propria performance in modo autonomo, partendo dai dati.

95
I principali elementi di qualsiasi attività di machine learning sono:
- il dataset D
- un compito T (task)
- una misura di prestazione M
Dataset D
I dati raccolti e pre-processati, o dataset, sono l'elemento fondamentale per il nostro procedimento,
in quanto sono l’unica risorsa su cui andiamo ad operare. Possiamo pensare ad un dataset come ad
una tabella (o un Dataframe di Pandas) in cui ogni riga è un’osservazione, cioè il risultato di
un’operazione di campionamento o di misura. Il dataset viene diviso in due parti:

Es. nella tabella fatta del titanic ogni passeggero è un campione.


1- Training set → PREPARA IL MODELLO
Costituito da un insieme di elementi (in statistica individui) usati durante il processo di
apprendimento. Quindi il training set è un sottoinsieme delle righe della tabella con i dati del
nostro dataset D. Le tecniche di machine learning apprendono sulla base delle informazioni
contenute nel training set. Il risultato dell’apprendimento è un modello che può essere utilizzato
su altri dati non utilizzati o nuovi.

2- Test set → VALIDA IL MODELLO


Costituito da un insieme di elementi usati per valutare le prestazioni (es. la capacità predittiva)
di un modello. Anche il training dataset è un sottoinsieme delle righe della tabella dei dati del
nostro dataset D, e solitamente contiene le righe che non fanno parte del training dataset. Il
modello ha quindi appreso usando i dati del training dataset, e viene misurato sui dati del test
dataset.

96
Il compito (task) T
Tecniche di ML si applicano per svolgere un compito che è strettamente collegato alla soluzione di
un problema. Vanno considerati due tipi di task:

Classificazione
Quando vogliamo assegnare una categoria (detta classe) ad ogni elemento, cioè, vogliamo
classificare un elemento. Riprendendo l’esempio del Titanic visto nelle lezioni precedenti: ●
assegnare una classe (categoria: sopravvissuto o no) ● ad un elemento (ogni riga della tabella,
corrispondente ad un passeggero del Titanic) Dal punto di vista matematico, quello che cerchiamo
è una funzione che va dallo spazio dei dati allo spazio delle classi.
Due tipi principali di classificazioni:

Regressione
Ora il problema consiste nell’assegnare un valore continuo (cioè, un numero) ad un elemento.
Stavolta cerchiamo una funzione matematica dallo spazio dei dati a quello dei reali R, cioè i numeri
rappresentabili con la virgola. Esempi:
● dati dei clienti ⇒ stima del rischio per compagnie assicurative
● dati di persone ⇒ età, peso, …
● dati di pazienti⇒ probabilità di avere una patologia
● dati di titoli azionari⇒ valore futuro

97
Clustering
Far emergere dai dati dei gruppi (detti cluster) accomunati da una medesima caratteristica. Il
numero di cluster non è sempre noto a priori. Esempi:
● dati di utenti ⇒ raggruppo gli utenti in base all’età, al reddito, agli interessi, ecc. (es. per marketing)
● notizie e articoli ⇒ raggruppo sul contenuto (es. per identificare fake news)
● dati di utenti (es. GPS) ⇒ raggruppo in base al comportamento (es. per identificare frodi o crimini)

Apprendimento supervisionato → dato un problema, l’apprendimento avviene sulla base di esempi


per i quali si conosce la soluzione, cioè la risposta corretta.
Esempio:
- problema: classificazione binaria dei passeggeri del Titanic (sopravvissuto o no)
- apprendimento: usiamo un training dataset in cui, per ogni elemento (ossia passeggero)
conosciamo lo stato del passeggero (se sia morto o sopravvissuto)
La risposta corretta viene detta etichetta (label)
- nell’esempio del Titanic la colonna “Survived” contiene le etichette. Si dice quindi che i dati
sono etichettati perché abbiamo a disposizione anche i risultati.
Esempi:
● classificazione binaria: le etichette sono {0,1} oppure {1,-1}
● classificazione multiclasse: le etichette tipicamente sono un insieme continuo {0,1,2,3,4}
● regressione: le etichette appartengono ai reali R

Spesso etichettare (preparando i dati) è un processo lungo e soggetto ad errori


● può essere necessario farlo a mano
● può essere la fusione di due dataset.
L’apprendimento supervisionato è molto intuitivo:
1. apprendo su dati etichettati, per i quali conosco la soluzione del problema
2. valuto quanto bene ho appreso misurando le performance -> posso farlo visto che conosco la
soluzione (training set), su una parte dei dati tenuti separati (test set)
3. applico quanto ho imparato a dati reali per i quali non conosco la soluzione

98
Apprendimento non supervisionato → abbiamo a disposizione solo i dati ma non sono note le
etichette. L’apprendimento non supervisionato è complesso e poco intuitivo, non avendo a
disposizione informazioni su gruppi o categorie.
Esempi:
● clustering: i gruppi di elementi vengono creati sulla base di una caratteristica (o un insieme ristretto
di caratteristiche) - non conosco a priori la soluzione, ossia in che gruppo finiranno, ad esempio, gli
elementi A e B.
La misura di prestazione M
È fondamentale avere una metrica per misurare quanto “lavora bene” la tecnica di machine learning
che abbiamo usato, cioè, valutare quanto bene risolve il mio problema. Nella classificazione una
delle metriche più utilizzate è l’accuratezza:

Il risultato è un valore fra 0 e 1: ● solitamente si considerano tre cifre decimali ● può anche essere
espressa come un valore percentuale es. accuratezza = 0,873 = 87,3%.
Accuratezza esempio:

Fasi positivi e falsi negativi:

99
Matrice di confusione → per ottenere una valutazione più completa della tecnica di machine
learning:

L’accuratezza è una misura significativa solo in caso di dataset bilanciati, quindi se consideriamo la
classificazione, se gli elementi sono distribuiti abbastanza bene nelle classi.
Nel dataset del Titanic le classi sono sufficientemente bilanciate:
● 342 sopravvissuti (38,4% del totale)
● 549 non sopravvissuti (61,6% del totale) In questo caso quindi l’accuratezza è una misura
significativa

Se prendiamo dataset non bilanciati → i pazienti di un medico affetti da una patologia rara:
● 100 pazienti in totale
● 2 sono affetti dalla patologia
● 98 non lo sono

100
Abbiamo quindi due classi (malato o non malato). Applichiamo due tecniche di classificazione binaria
al nostro problema e misuriamo i seguenti risultati:
● tecnica 1: accuratezza 98%
● tecnica 2: accuratezza 96%
Sembra migliore la tecnica 2, ma in realtà, guardando le matrici di confusione…

Visto il tipo di problema (identificare i pazienti che potrebbero essere affetti da una patologia grave
- ad esempio per fare analisi e proporre una cura) è meglio la tecnica 2:
● è in grado di riconoscere tutti i pazienti affetti dalla malattia
● identifica erroneamente come affetti da patologia alcuni pazienti sani – ma in questi casi si può
fare un ulteriore esame di controllo
È meglio valutare sia accuratezza come anche altre metriche → precision e recall:

101

Potrebbero piacerti anche