Web Data Science
Web Data Science
science
Data science = disciplina che si occupa dell'estrazione di significato da grandi
quantità di dati ed è il punto di intersezione di diverse discipline:
Estrarre info
contenute nei dati
Riconoscimento
dei percorsi
La figura del Data scientist nasce nel 2008 per opera di Patill e Hammerbacher, e nel
2012 viene riconosciuto da un articolo di Harvard come il lavoro del futuro. Nel 2015
Obama riconosce ufficialmente il ruolo del data scientist.
Il data scientist è una figura professionale che deve avere forte capacità di analisi e
solide competenze informatiche. Usa i dati per individuare i pattern e sfrutta
competenze statistiche e matematiche.
Deve perciò raccogliere i dati, organizzarli e controllarne le fonti. Successivamente deve
unire i dati in maniera funzionale, tali da fornire informazioni utili alle diverse aree di
business. É una figura ponte tra il mondo IT e LOB (line of business), ma può essere
fondamentale anche nell’area R&S.
Processo di un data scientist
Fase 5 - modellazione
Costruire modelli per fare predizioni, classificare oggetti o comprendere
aspetti del sistema usando machine learning, data mining e statistica
3 fasi: scelta tecnica di moderazione e variabili, esecuzione modello e diagnosi.
Il web non è internet - è la killer application di internet (ciò che l'ha reso famoso)
Internet (interconnected network) = rete di telecomunicazione
Web = servizio di internet come www, email, servizi di messaggistica e quelli di streaming
Origini di Internet
Nasce negli USA durante la guerra fredda per garantire le comunicazioni anche in
seguito ad un attacco missilistico russo.
1958 nasce l'ARPA (advanced research projects agency) per la ricerca e sviluppo di
tecnologie emergenti. Nasce poi l’ARPANET (precursore di internet).
Rete ufficializzata nel 1972 durante la prima international computer communication
conference a Washington. Una delle prime applicazione è l'e-mail e viene sviluppata
la tecnica a commutazione di pacchetto per trasportare dati di reti.
Reti a commutazione
Commutazione = capacità di una rete di costruire, mantenere e abbattere un
collegamento tra i dispositivi che la compongono (nodi)
Commutazione di pacchetto
Suddividere le informazioni da trasmettere in piccole entità - pacchetti
Pacchetti contengono i dati da trasmetterà e le informazioni di controllo
Pacchetti spediti uno alla volta e i nodi li divido e li spediscono
Una volta arrivati i pacchetti si riassembla il messaggio e si può leggere
Ogni pacchetto può seguire un percorso diverso e indipendente e arrivare al destinatario
(anche non in ordine)
Non si sanno i tempi di ricezione perché non è detto che il primo pacchetto faccia
la strada più corta e che arrivi in ordine
Nascita di internet
Fine anni 80 quando vengono unite ARPANET e NSFNET
LAN = loca area network
WAN = wide area network
IP = protocollo di comunicazione internet (insieme di regole)
Internet protocol (IP)
Regola l'instradamento (routing) attraverso i vari nodi della rete dei pacchetti IP
che compongono il messaggio
<schema>://<host>[/<percorso>]
Metodi HTTP
Get = richiedere informazioni sulla risorsa definita dall'URL
Put = creare sul server web la risorsa specificata dall'URL (upload risorsa online)
Delete = rimuovere dal server le info relative alla risorsa
Post = info aggiuntive ad una risorsa esistente (nome utente e pssw)
Tutte le risposte oltre che a contenere i metadati nell'header e a volte dati nel payload
specificano anche un codice di stato dell' header 3 cifre, la prima (0-5) definisce la
classe di risposta: informativa, successo, redirezione, errore del client o errore del server
Browser
Applicazione software che permette di accedere e ottenere info presenti sul web
Microsoft edge, safari e google chrome sono esempi
Server web
È un "computer speciale" che esegue un software specifico
Permette di ricevere, gestire e soddisfare richieste HTTP provenienti da un client
Quando il server riceve la richiesta cerca localmente informazioni del doc indicate nel
percorso di richiesta, se le trova fai una copia altrimenti associa il codice di errore
(404 error)
Nodi di internet
Ogni nodo è un dispositivo specifico
+ un computer speciale fondamentale per il funzionamento della rete: router
Router
Dispositivo per l'instradamento dei pacchetti IP
Router di casa = permette al nostro computer di connettersi ad internet
Router di collegamento tra sottoreti
Agiscono al livello di rete veicolando il traffico dei pacchetti IP
Quando il router riceve un pacchetto IP controlla qual é il nodo successivo
Un router non entra mai nel merito del payload del pacchetto ip perché per svolgere
la sua funzione sono sufficienti le informazioni nell'header
Data-driver decision-making (DDD)
Esempio - uragano Frances
HURRICANE FRANCES was on its way, barreling across the Caribbean, threatening a
direct hit on Florida's Atlantic coast. Residents made for higher ground, but far away, in
Bentonville, Ark., executives at Wal-Mart Stores decided that the situation offered a
great opportunity for one of their newest data-driven weapons, something that the
company calls predictive technology. A week ahead of the storm's landfall, Linda M.
Dillman, Wal- Mart's chief information officer, pressed her staff to come up with
forecasts based on what had happened when Hurricane Charley struck several
weeks earlier. Backed by the trillions of bytes' worth of shopper history that is
stored in Wal-Mart's computer network, she felt that the company could "start
predicting what's going to happen, instead of waiting for it to happen",
as she put it.
La DDD è una pratica che consiste nel basare le decisioni sull'analisi di dati e non
sull'intuizione
Analisi predittive dei dati - azienda prevede quanto produrre
Data science - automatizzazione del DDD
Indicatore del DDD - valuta le imprese in base a quanto vengano usati i dati per decidere
Lo studio dimostra che l'uso dei dati aumenta la produzione e la produttività del 4-6%
Indicatore DDD correla positivamente con i principali indicatori di performance aziendali
Esempio - target e neogenitori
I neogenitori sono importanti per Target in quanto acquistano prodotti costosi in
grande quantità e fidelizzarli significa acquisire come cliente un’intera famiglia
1 - definizione obiettivo
Individuare i neogenitori il prima possibile - anticipare la concorrenza
Inviare offerte personalizzate
2 - raccolta dati
Consultare registro nascite per trovare i contatti
3 - preparazione dati
Data cleansing - valori mancanti
Data combination - fondere righe estratte dai registri con i dati nel database
4 - esplorazione dati
Predire chi è incinta guardando dati storici perché si cambia le abitudini, vestiti, ecc.
I
Web scraping
Costruzione di un agente software per scaricare processare e organizzare i dati di
pagine web tramite processi automatizzati
l
Web crawling - analisi contenuti di rete da parte di un bot
Composizione dei 3
=
AR 61 41 Rettangolo
2
= :
= risultato
AT (b1 b2) h2 Trapezio
= + ·
AC ASC + ARtAT
=
Google Colab
Piattaforma di programmazione gratuita che permette di eseguire codice Python
direttamente sul cloud sfruttando delle macchine virtuali fornite da Google
Gli spazi bianchi non sono significativi (non vengono considerati), eccetto
quelli all'inizio delle righe che sono invece rilevanti
Le righe vuote vengono ignorate dall'interprete
Python
Funzione input
1. scrive testo sullo schermo (come print)
2. rimane in attesa di un input dall’utente
3. dopo che l’utente ha scritto l’input e premuto invio (o enter):
il valore inserito viene interpretato come una stringa
tale valore viene assegnato alla variabile variabile
Conversione
un valore in un numero intero si usa la funzione int (es. da stringa o numero con la virgola)
un valore di tipo numerico in stringa si usa la funzione str (es. interi o numeri reali)
una stringa o un numero intero in un numero con la virgola si usa la funzione float
Espressioni booleane
Possono assumere valori true e false
Gli operatori relazionali restituiscono valori booleani:
x == y vero se il valore di x è uguale al valore di y
x ! = yvero se il valore di x è diverso dal valore di y
x < y vero se il valore di x è strettamente minore del valore di y
x < = y vero se il valore di x è minore o uguale al valore di y
x > y vero se il valore di x è strettamente maggiore del valore di y
x > = y vero se il valore di x è maggiore o uguale al valore di y
Gli operatori relazionali possono essere combinati con gli operatori logici
AND, OR e NOT e le parentesi:
e1 and e2 - vera se sia e1 che e2 sono vere
e1 or e2 - vera se e1 è vera oppure e2 è vera
not e3 - vera se e3 è falsa, e falsa se e3 è vera
Esecuzione condizionale
Per implementare algoritmi che svolgono diverse operazioni a seconda dei dati di
ingresso o di operazioni intermedie, abbiamo bisogno di:
Controllare delle condizioni
Cambiare il comportamento del programma
Istruzioni di esecuzione condizionale - if (condizione)
Indentazione
Inserimento di spazi all'inizio di una riga del codice sorgente
Usata per aiutare a comprendere meglio la struttura logica delle istruzioni
In Python è obbligatoria e deve essere coerente
Condizionali annidati
Cicli (o iterazioni)
Operazioni di ripetizione
Ciclo "for"
Ciclo "while"
Controlla la condizione (n < 11) se vera o falsa
Se è falsa, esce dal ciclo e prosegue con
l’istruzione successiva
Se è vera si eseguono le istruzioni del corpo
del ciclo e poi si ritorna al punto 1
Cicli a terminazione
il corpo del while deve cambiare il valore di una o più variabili controllate dalla
condizione ad ogni iterazione per fare in modo che la condizione prima o poi diventi
falsa, altrimenti il ciclo diventa infinito e la computazione andrà interrotta manualmente
Contatori Accumulatori
Come la variabile n nei cicli Usati per calcolare totali e somme
Analizzati prima del ciclo Inizializzati a 0 prima del ciclo
Ad ogni iterazione il valore aumenta Ad ogni iterazione il nuovo valore
o diminuisce di un valore fisso si accumula a quelli precedenti
Uscita anticipata dal ciclo
Istruzione "break"
Cicli annidati
Ciclo come istruzione di un altro ciclo
Errori
NameError: name 'pint' is not defined
TypeError: unsupported operand type(s) for +: 'int' and 'str'
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("prova")?
Tutti gli errori che non vengono riconosciuti prima di eseguire il programma vengono
detti runtime errors, cioè errori che avvengono a tempo di esecuzione.
Se non vogliamo che il nostro programma termini quando c’è un errore di runtime,
possiamo intercettare e gestire gli errori di esecuzione con “except” o
“except ValueError” per eccezioni di tipo specifico
Composizione
Applicare il principio "divide et impera" - suddividere il problema in piccoli elementi
e combinarli per avere la soluzione
Eccezione!
La parte sinistra dell'assegnamento deve essere un nome variabile
Per richiamarla:
"Menu ()"
Richiamarle all'interno
di altre funzioni:
“def ripeti_menu():
menu()
menu()”
Parametri e argomenti
All'interno delle funzioni gli argomenti vengono assegnati a variabili dette parametri
Quando viene creata una variabile all'interno di una funzione - variabile è locale
Lo stesso vale per i parametri - al di fuori della funzione non esistono
Una funzione può avere più di un argomento - separarli con delle virgole
def media(scritto,orale):
print ((scritto + orale) / 2)
Valori di ritorno
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 - ‘nessun valore'
Per far ritornare un valore ad una funzione - "return"
raggio = 5.78
print ("Area semicerchio", area_cerchio(r) / 2)
def valore_assoluto(x):
if x >= 0:
return x
else:
return -x
print (valore_assoluto(54))
print (valore_assoluto(-9))
Strutture dati - Pandas
Modi in cui possiamo organizzare informazioni e dati (input/output) in modo da
poter accederci in modo efficiente ed efficace
É quindi un contenitore che fornisce metodi specifici per aggiungere e richiedere
pezzi di informazione
Le principali sono:
Liste = sequenza di elementi ordinati e ripetibili che si possono contare
Pile = lista con operazioni da effettuare sugli elementi (aggiunta push e rimozione pop)
Code = lista con operazioni (aggiunta enqueue e rimozione dequeue)
Insiemi = collezione di elementi non ordinati e non ripetibili
Dizionari = collezione non ordinata di elementi definiti da coppie chiave-valore
Liste
Sequenze di valori detti elementi
I valori possono essere di qualsiasi tipo a differenza delle stringhe dove sono solo caratteri
Gli elementi vengono identificati dalla loro posizione ed iniziano da O e vengono detti indici
studenti = ["Paolo","Marty","Claudio"]
studenti = ["Paolo","Marty","Claudio"]
studenti[1] = "Patty"
print (studenti)
vuoto1 = {}
Dizionario vuoto = senza elementi
vuoto2 = dict()
ita2eng = {}
studente = {}
Se la chiave é già presente
studente["nome"] = "Luca"
l'associazione viene aggiornata
studente["cognome"] = "Rossi"
studente["nome"] = "Enrico" Accedere ai valori contenuti nel dizionario
print (studente) print (studente["nome"])
studente = {}
Le chiavi devono essere stringhe studente["nome"] = "Lucia"
I valori possono essere di s tudente["eta"] = 25
qualsiasi tipo studente["voti"] = [28,24]
print (studente)
Operatore "in" per verificare se una chiave è in lista
Condizionali
Determinare se un numero é positivo, negativo o zero
Tabellina moltiplicativa
try:
n1 = int(input("Inserisci il primo numero: "))
n2 = int(input("Inserisci il secondo numero: "))
print("La somma è:", n1 + n2)
except ValueError:
print("Errore: Inserisci solo numeri interi!")
somma = 0
while True:
n = int(input("Inserisci un numero (0 per terminare): "))
if n == 0:
break
somma += n
print("La somma totale è:", somma)
Liste o dizionari
numeri = [1, 2, 3, 4, 5]
n = int(input("Inserisci un numero: "))
if n in numeri:
print("Il numero è nella lista")
else:
print("Il numero non è nella lista")
def somma_lista(lista):
return sum(lista)
print(somma_lista([1, 2, 3, 4]))
def massimo(lista):
return max(lista)
print(massimo([1, 2, 3, 4]))
Altri esempi
n=4
a=5
for i in range (1,n):
-
print (a- 1)
a=a-1
k = “*”
a=3
while a >= 1:
print (k)
k = k + “*”
a=a-1
print (a)
try:
n1 = input ("Inserisci il primo numero: ")
n2 = input ("Inserisci il secondo numero: ")
print (int (n1) + int (n2) )
except:
print ("Errore nell'input, controlla.")