Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Introduzione
2. Le basi di dati
3. Le analisi di dati
4. Le presentazioni delle analisi
Perché studiare informatica? Perché l’economia, la nanza d’impresa, la statistica e la nanza dei
mercati richiedono l’utilizzo di sistemi informatici.
Economia e nanza d’impresa → elaborazione di bilanci e scelta tra progetti nanziari
Economia dei mercati → previsioni di variabili economico- nanziarie e prezzaggio di opzioni
Statistica → sintesi dei dati e campionamento
UNITÀ DI MISURA
PREFISSI UTILI
Capacità: Bit (b) → può assumere solo gli stati di 0 e 1 Kilo (K): 1’000
Byte (B) → sequenza composta da 8 bit (es: 10001011) Mega (M): 1’000’000
Giga (G): 1’000’000’000
Velocità di elaborazione: Hertz (Hz) → numero di operazioni al secondo
Tera (T): 1’000’000’000’000
Velocità di trasmissione: Baud (b/s) → numero di bit al secondo
Risoluzione gra ca: Pixel (px) → numero di puntini da cui è composta
l’immagine
1
fi
fi
fi
fi
fi
fi
→ notebook
→ desktop
Calcolatore moderno
Un calcolatore moderno è uno strumento elettronico in cui i dati sono in formato digitale in
formato binario* e che risolve problemi tramite l’esecuzione di una serie di determinate istruzioni.
Si può scomporre in hardware e software.
*Formato binario: sequenza di 0 e 1, noti come BIT. Fa parte del formato digitale in quanto questo
codi ca tutti gli stati che può assumere un’entità (es: oggetto, immagine, suono, …) utilizzando
numeri a base binaria. Tutti i le sono salvati in questa maniera, soprattutto quelli testuali.
Digitale: “le informazioni sono convertite in un insieme nito e numerabile di casi”
Hardware
Componente sica, contiene tutte le componenti interne (CPU, memoria, scheda madre, …)
connesse tramite BUS e le componenti esterne (mouse, tastiera, ..).
Le principali porte che ha sono: Jack per l’audio, HDMI e VGA per il video, USB per i dati,
Ethernet per la rete e Obsolete per il mouse, la tastiera e la stampante.
2
fi
fi
fi
fi
fi
fi
fi
fi
fi
Tutto ciò è basato sul principio di “quantum computing”, che poggia sull’idea di sovrapposizione
di stati, che consente l’esecuzione di operazioni in parallelo che riducono il tempo di calcolo.
Software
Insieme di procedure nalizzate al funzionamento dell’hardware, ed è composto da sistema
operativo, Firmware e programmi applicativi.
Le fasi fondamentali del suo sviluppo sono: ideazione algoritmo per la risoluzione di un
problema, rappresentazione con diagramma di usso e implementazione tramite linguaggio di
programmazione.
Ricorda che il costruttore di computer si occupa di componenti siche, rmware e driver, mentre il
sistema operativo e gli applicativi sono compito di altre imprese (tranne Apple che produce tutto).
• Firmware: programmi inclusi direttamente nei componenti dell’hardware, che periodicamente
vengono aggiornati dalla casa madre. Un esempio di rmware è bios, il programma di
funzionamento della scheda madre.
• Programmi applicativi: programmi che utilizzano quanto messo a disposizione dal sistema
operativo per risolvere un determinato problema. Molti programmi applicativi vengono creati per
un apposito sistema operativo, e perciò bisogna installare dei “driver” (come per esempio la
Java virtual machine) che permettono un dialogo tra una periferica e il sistema operativo.
• Sistema operativo: consente di eseguire le operazioni di base del calcolatore, come la lettura e
la scrittura periferica. I suoi compiti sono dunque quello di: gestire l’hardware, allocare le risorse
per programmi in esecuzione tramite processi e archiviare tutto sulla memoria secondaria
tramite il lesystem.
Processo attivo: programma (visibile o in background) in esecuzione sulla CPU, caricato sulla
memoria RAM all’avvio del computer (in caso non ci sia più spazio questo tramite uno swap su
disco si sposta sull’hard disk).
Filesystem: insieme di programmi (di molte tipologie) volti alla gestione della memoria di massa di
le e directory.
Un sistema operativo può essere:
1) Multi utente → accesso contemporaneo da parte di diversi utenti alla stessa macchina
2) Multi tasking → utilizzo contemporaneo da parte di diversi programmi della CPU
3
fi
ff
fi
fi
fi
fl
fi
fi
fi
fi
fi
Memorizzazione dati
Ogni conformazione viene sempre registrata dal computer come termini binari: una sequenza di n
bit permette di mappare un insieme di 2n combinazioni possibili (elementi), leggibili tramite le varie
convenzioni mappatura (es: ASCII*, ASCII esteso, ..).
*il codice ASCII non é ovviamente l’unico metodo per mappare i termini binari, in quanto esistono
anche altre convenzioni, come gli Unicode.
Bisogna ricordare che questo avviene solo per i le di testo, e non per esempio per i pdf, che può
essere letto solo tramite l’utilizzo di un software in grado di estrarre dalla sequenza di bit delle
informazioni.
→ scrittura del testo → salvataggio tramite convenzione (encoding) → memorizzazione sul disco
(ogni carattere equivale ad una sequenza binaria di 8 bit) → ispezione esadecimale (le sequenze
vengono compattate).
Convenzioni di mappatura: tabelle che associano le sequenze di bit a un carattere speci co.
Questo non avviene però per i numeri da calcolo perché non è ottimale.
Rappresentazione di informazioni numeriche: dato che non esiste una mappatura per questo,
una quantità è rappresentabile tramite un sistema di numerazione, suddiviso in metodi non
posizionali (la posizione del simbolo non indica un diverso valore, come i numeri romani) e metodi
posizionali (la posizione del simbolo implica un diverso valore, come i numeri decimali arabi
oppure la rappresentazione binaria).
NB: è possibile che spesso i numeri nella codi cazione vengano scritti in base binaria → 219 in
base 10, n=3 (2 x 102 + 1 x 101 + 9 x 100)
I decimali vengono rappresentati con una virgola mobile, ovvero con il oating point, che serve
per rappresentare con pochi bit un alto numero di cifre negative e positive (S=1 segno negativo,
S=0 segno positivo).
Valore decimale = -1S x Mantissa x Baseesponente (forma normalizzata con primo numero decimale
diverso da zero)
Il salvataggio su disco richiede quindi la memorizzazione di Segno, Mantissa ed esponente (la
base invece è sempre 2).
In base alla precisone che si sceglie, i calcoli hanno una sensibilità maggiore: la precisione oat (7
cifre decimali) richiede 32 bit, la precisone double (15 cifre decimali) richiede 64 bit.
L’ALGEBRA DI BOOLE
L’algebra di Boole aveva come scopo la matematizzazione della logica umana, ed è alla base
della rappresentazione binaria in quanto codi cava tutto secondo la condizione di vero (1) e falso
(0). Da qui nasce la funzione booleana dei computer.
Un processore è dotato di un “instruction set” che costituisce l’insieme di operazioni che può
eseguire, codi cate dal produttore nel linguaggio macchina (sequenze binarie) programmato
secondo l’architettura del processore. Esistono tanti linguaggi quante le architetture del
processore.
Questi linguaggi sono spesso associati ad un linguaggio assembly* del processore (più intuitivo),
convertiti in codice binario da un programma assembler. Se si tratta di linguaggi ad alto livello
(come il C, il Fortran e il Java, più simili al linguaggio umano), il programma che li converte si
chiama compilatore o interprete. Questi linguaggi producono quindi dei codici binari eseguibili
solo sul, tipo di piattaforma su cui é stato compilato.
4
fi
fi
fi
fi
fl
fi
fl
*Linguaggio assembly: insieme di istituzioni fornite dal costruttore del processore per operarne il
controllo.
L’utente scrive un testo (codice sorgente*) assembly, C, … e lo trasforma in codice binario tramite
un programma apposito assembler, compilatore, … (dato che il computer accetta solo il
linguaggio macchina binario), creando un nuovo le binario “eseguibile”.
*il codice sorgente è un algoritmo risolutivo tradotto in linguaggio macchina da un compilatore. È
quindi un insieme di istruzioni.
*un compilatore é un software che trasforma uno o più codici sorgenti in codice binario
Linguaggi di programmazione
Un linguaggio di programmazione è uno strumento che consente all’utente di far eseguire una
serie di compiti al calcolatore, ed è composto da un insieme di parole chiave e delle regole di
sintassi, che determinano come devono essere concatenate le parole chiave nelle istruzioni.
L’implementazione costituisce la codi ca di un certo linguaggio di programmazione in algoritmo.
Problema → identi cazione/realizzazione dell’algoritmo → formalizzazione tramite diagramma di
usso → implementazione dell’algoritmo tramite uno speci co linguaggio di programmazione.
Strumenti di analisi
Le analisi dei dati sono condotte utilizzando uno o più strumenti in maniera strategica. Ci sono
quindi i linguaggi compilati, i linguaggi interpretati e i fogli di calcolo che comunicano tra loro
informazioni ricevute dal database.
CATEGORIE
Linguaggi compilati (es: Fortran)
Il codice sorgente viene compilato (tradotto in codice binario) per poter essere seguito ogni volta
senza l’ausilio di altri strumenti. È molto e ciente e veloce, anche se necessita di essere
ricompilato per essere eseguito su altre piattaforme. Non è troppo comodo in quanto ha una lenta
curva di apprendimento, ha una sintassi complessa e manca di interazione.
↳ codi ca → compilazione → esecuzione → correzione → ricompilazione → esecuzione → ..
Linguaggi interpretati
Il codice sorgente viene tradotto (interpretato) ogni volta che deve essere eseguito, tramite un
interprete (elemento che se presente permette di eseguire il codice sorgente su tutte le
piattaforme). Questo tipo di linguaggio non è quindi autosu ciente, ed è più lento rispetto a
quello compilato, malgrado abbia una curva di apprendimento più rapida e la possibilità di
interazione. Il suo vantaggio é che ha un utilizzo interattivo dell’interprete.
↳ l’utente che riceve il sorgente deve possedere anche l’interprete.
↳ scrittura di parte del codice e suo test interattivo → correzione → aggiunta di nuovo codice →
test → …
↳ R É UN LINGUAGGIO INTERPRETATO
5
fl
fi
fl
fi
fi
fi
ffi
fi
fi
fi
ffi
fl
Linguaggi pseudo-compilati
Questa tipologia di linguaggio presenta un compromesso tra linguaggio compilato e
linguaggio interpretato.
Il codice sorgente viene compilato in un bytecode* intermedio tra l’utente e il codice binario ogni
volta che il programma viene lanciato. Il suo obiettivo è quello di renderlo compatibile con il
maggior numero possibile di piattaforme (che devono possedere tutte una virtual machine) e di
rendere veloce il passaggio bytecode-codice macchina.
↳ codice compilato intermedio bytecode → viene eseguito da una virtual machine → questa
compila ogni volta il bytecode
Molto spesso questa tecnica è in realtà utilizzata anche dagli altri linguaggi: i compilati possono
anche compilare un bytecode intermedio (es: Java), e gli interpretati possono produrre bytecode
intermedi (es: R, Phyton).
*bytecode: un le che contiene un codice sorgente trasformato in un formato intermedio
Linguaggi di scripting
I linguaggi di scripting comprendono quelli puramente interpretati e quelli che consentono un’alta
interazione (e che eventualmente possono produrre bytecode). Sono molto rapidi, motivo per il
quale vengono spesso preferiti ai linguaggi compilati in quanto rapidamente si portano a termine
progetti utilizzando poche risorse.
Ognuno di questi ha una nalità di erente, che spazia dallo sviluppo web (javascript) al calcolo
scienti co (gauss, S).
CLASSI
Linguaggi imperativi procedurali
Il codice è suddiviso in blocchi di codice, che si suddividono in procedure e funzioni, richiamabili
più volte. Le procedure agiscono modi cando dei dati che risiedono nella memoria, inserendoli
nell’unità di memoria soggetta a sovrascrittura (variabile). Permettono la riutilizzabilità del codice.
Linguaggi imperativi a oggetti
In aggiunta a procedure e funzioni, l’utente può creare anche delle classi, chiamate “oggetti”,
ovvero un nuovo tipo di dato che racchiude all’interno molti “dati membro della classe” e molte
funzioni “metodi” che gli elaborano. Si tratta quindi di una serie di oggetti tra loro interrelati.
Linguaggi funzionali
Questi sono i più sicuri in quanto non modi cano il contenuto della memoria, dato che operano in
cloud. Le funzioni possono essere in questo caso trattate come dati, quindi accettano input e
restituiscono output modi cati (dati e funzioni).
Linguaggi per calcolo scienti co
Nell’ambito delle scienze i linguaggi più importanti sono:
Il Fortran, nato appositamente per i calcoli, con sintassi grezza, compilatore
Il C (e C++), più generico, compilatore
Il Gauss, per l’econometria, non comunicativo, di scripting
Il Matlab, l’evoluzione del Gauss, per l’ingegneria, di scripting
l’R, per la statistica, di scripting
Il Make, che esegue le azioni elencate dall’utente in un make le che contiene una rete di target e
dipendenze, eseguendo una ricompilazione selettiva dei sorgenti modi cati.
Nel calcolo scienti co è importante sapere implementare linguaggi di scripting e compilatori, e
saper applicare il paradigma a oggetti diversi attraverso un linguaggio object-oriented. Di base
però quello che si utilizza di più è il linguaggio di scripting, perché:
• È più immediato
• Ha una copertura ampia nell’ambito scienti co
• Integra codici compilati
• Interagisce
• Integra fogli di calcolo
6
fi
fi
fi
fi
fi
fi
ff
fi
fi
fi
fi
fi
Il linguaggio “R”
Storia
Nasce attorno al 1975-1976 con il nome di “linguaggio S” (nasce da linguaggio S e linguaggio
Scheme), con l’idea che fosse più interattivo rispetto al Fortran. Nel tempo di evolve, diventando
un linguaggio di scripting per le applicazioni statistiche, facile da usare per via della sua linea di
comando e dell’eseguibilità di le di testo con comandi.
Caratteristiche
Si struttura in core (funzionalità di base preinstallate) e pacchetti (estensioni di funzionalità a
svariati campi). Può essere utilizzato da un terminale, tramite Rstudio (un editor integrato) o nella
propria interfaccia gra ca.
È open-source (non protetto da copyright e facilmente modi cabile) e freeware (gratuito), ed è
disponibile per svariate piattaforme.
I suoi principali utilizzi sono: la statistica, l’econometria, le scienze sociali, le scienze, l’economia e
la nanza, tutti gestiti dalla sua capacità di dialogare con strumenti esterni come excel e codici
nativi.
7
fi
fi
fi
fi
Gestione di Rstudio
-Console di R (dove scrivi) -Environment (dove vengono elencati gli oggetti)
-Console di R (risultati) -Files presenti nel disco (es: per aprirli)
Il le di lavoro si chiama “codice sorgente”, e ne puoi aprire diversi nello stesso momento.
Informazioni importanti
• In R le maiuscole e le minuscole hanno valori di erenti (non mischiarle!) → R É CASE SENSITIVE
• Le singole istruzioni vengono separate dall’andare a capo oppure da un punto e virgola
• Gli oggetti vengono separati da una virgola, da uno spazio, da un punto e virgola o da una
tabulazione.
Comandi importanti
Ctrl + S Salva il lavoro
\n Andare a capo (se lo metti per esempio in qualcosa che ti deve far vedere
i risultati, te li mette tutti uno a capo all’altro)
\t Tabulazione (se lo metti per esempio in qualcosa che ti deve far vedere i
risultati, te li mette tutti uno distanti dall’altro di una tabulazione)
Gestione workspace
Il workspace é l’area in cui R memorizza gli oggetti che vengono salvati
1
fi
fi
fi
fi
fi
fi
fi
fi
ff
fi
fi
save(list = c(‘nomeoggetto1’, Salvare sul disco uno o più oggetti in un le
‘nomeoggetto2’), le = “nome le.RData”)
load(“nome le.RData”) Carica nella workspace tutti gli oggetti che sono
stati salvati nel le
Oggetti scalari
Gli oggetti che si possono creare in Rstudio sono: numeri, valori logici (true/false), stringhe (parole
o frasi racchiuse in virgolette semplici o doppie) o valori speciali (es: NA)
I modi (o tipi) in R sono il tipo di contenuto che i vari oggetti possono inglobare: numeri, stringhe,
logici, numeri complessi e valori mancanti (NA).
a+b Somma
a-b Sottrazione
a*b Moltiplicazione
a/b Divisione
a^b Elevato
exp(a) Esponenziale
2
fi
fi
fi
fi
fi
fi
nomefunzione <-function(capitale, interesse, Capitalizzazione composta
tempo) {capitale * (1+interesse)^tempo}
Vettori
I vettori sono degli insiemi di valori dello stesso tipo (numeri, testi, valori booleani (true/false), …),
dentro ai quali ci possono essere che dei valori non conosciuti di tipo NA.
I vettori numerici possono essere di vari tipi: composizione manuale, valore costante e sequenza
progressiva.
nomevettore <- c(numero1, numero2, …) Composizione manuale immettendo tutti i
valori che vogliamo
nomevettore <- array(data = n, dim = d) Valore costante: ripetono lo stesso valore “n”
un numero di volte pari a “d”
nomevettore <- rep(x = n, d)
nomevettore <- seq(from = a, to = b, by = c) Una sequenza crescente o decrescente che
parte da “a” e termina a “b” con un incremento
costante pari a “c”. Se la sequenza dev’essere
decrescente, il numero “c” avrà un valore
negativo.
Possono anche generare dei numeri casuali, che possono avere diverse proprietà.
Distribuzione normale
nomevettore <- rnorm(n = a, mean = b, sd = c) Crea un vettore che genera “a” numeri presi
più frequentemente vicino alla media “b” e
meno frequentemente vicino al grado di
dispersione “c”.
Minore é il parametro del grado di
dispersione e più frequentemente i valori
saranno presi vicini alla media.
Distribuzione uniforme
nomevettore <- runif(n = a, min = b, max = c) Crea un vettore che genera “a” numeri presi
entro gli estremi “b” e “c”
hist(nomevettore) Crea un gra co in cui si possono
visualizzare tutti i valori
3
fi
print(nomevettore[d:f]) Visualizza solo i valori compresi tra “d” e “f”.
Te li mette in ordine crescente o
decrescente a dipendenza di quale si mette
per primo.
Ricorda: d e f non sono due valori, sono il
numero di valori che si vuole visualizzare
(es: visualizza dal terzo al settimo valore).
nomevettore <- round(x = nomevettore, digits = n) Arrotonda i decimali all’ennesimo numero
dopo la virgola.
PORZIONI DI VETTORI
Poniamo di avere un vettore numerico a composizione manuale che presenta più valori
nomevettore[n] Fa visualizzare solo l’n termine
(Es: n = 3, si visualizza solo il terzo valore che
viene inserito dentro al vettore)
nomevettore[n:p] Fa visualizzare i termini compresi tra “n” e “p”.
Ricorda: n e p non sono due valori, sono il
numero di tali.
(Es: n = 3, p = 5, si visualizzano il terzo
termine, il quarto termine e il quinto termine)
nomevettore[c(n,p,q)] Fa visualizzare termini disgiunti.
(Es: n = 3, p = 5, q = 8, si visualizzano il terzo
termine, il quinto termine e l’ottavo termine)
nomevettore[-n] Fa visualizzare tutti i termini tranne l’ennesimo
LUNGHEZZA VETTORE
lenght(nomevettore) Visualizza quanti elementi ha (lunghezza
vettore)
nomevettore[lenght(nomevettore)] Visualizza l’ultimo elemento del vettore
CONCATENAZIONE DI VALORI
Poniamo di avere due vettori e di voler concatenare i loro elementi
nomevettorede nitivo <- c(nomevettore1, nomevettore2) Concatena i risultati dei due vettori
in modo che vengano visualizzati
Usare sia “c” che “cat” prima quelli del primo vettore e in
seguito quelli del secondo
4
fi
OPERAZIONI CON VETTORI
Per eseguirli non devono esserci valori mancanti, se no il risultato sarà sempre NA
mean(nomevettore) Media dei valori contenuti nel vettore
mean(nomevettore, na.rm = TRUE) Media dei valori contenuti nel vettore in modo
che vengano eliminati i valori mancanti
min(nomevettore, na.rm = TRUE) Indica il valore minimo contenuto nel vettore in
modo che vengano eliminati i valori mancanti
max(nomevettore, na.rm = TRUE) Indica il valore massimo contenuto nel vettore
in modo che vengano eliminati i valori
mancanti
log(nomevettore) Calcola il logaritmo naturale per ogni elemento
(Si può fare con ogni funzione scienti ca: exp,
sqrt, …)
Quando due vettori hanno la stessa lunghezza, si possono eseguire anche operazioni aritmetiche.
In caso questi non abbiano la stessa lunghezza, quello più corto viene esteso iniziando di nuovo
la sequenza partendo dal primo termine.
nomevettore1 + n Somma a tutti gli elementi del vettore il
numero “n”
nomevettore1 + nomevettore2 Somma i valori dei due vettori
(l’ennesimo termine di uno con
l’ennesimo termine dell’altro)
esempio: nomevettore1 - mean(nomevettore2) Si possono fare anche calcoli molto più
esempio: nomevettore2 /max (nomevettore1) complessi a piacimento
Un factor è un vettore i cui elementi assumono un numero ben distinto e nito di modalità, le
quali possono eventualmente mantenere fra essere una relazione ordinale. La loro intrinseca
natura li associa a dati nominali sconnessi contenuti nelle liste (x <- factor(c(nomelista)) e ordinati
(x <- ordered(c(nomelista)).
Matrici
Sono formate solo da numeri, ordinati su righe e colonne.
nomematrice <- matrix(data, nrow = … , ncol = Creazione di una matrice
…, byrow = TRUE/FALSE nrow = numero di righe
ncol = numero di colonne
byrow = ordine con cui viene riempita la
matrice (di default prima la prima colonna, poi
la seconda, …)
5
fi
fi
x [h:k,] seleziona le righe da h a k.
nomelista[[‘nomelemento’]]
nomelista$nomenuovoelemento <- elemento Aggiunge nuovo elemento alla lista
nomelista$sezione <- list(nomelementonuovo1 Aggiunge gli elementi nuovi alla lista in modo
= elementonuovo1, nomelementonuovo2 = che questi siano sotto una nuova sezione
elementonuovo2, …)
Sono visualizzabili sempre con il nome della
lista
nomelista$sezione$nomelemento <- NULL Elimina l’elemento dalla lista
Data frame: liste in cui gli elementi sono dei vettori della stessa lunghezza e i cui nomi
costituiscono i nomi delle colonne.
6
In un data frame ogni colonna deve avere avere valori dello stesso tipo e ciascuna colonna può
assumere tipi di dato di erenti dalle altre.
È possibile evitare di digitare la radice dell’oggetto tramite il comando attach(nomedataframe). In
modo diverso, opera il comando detach.
Ogni riga del data frame coincide spesso con una unità statistica e, in quanto tale, può essere
associata ad un nome: si usa il comando rownames. Il comando colnames permette di ride nire i
nomi delle colonne del data frame.
mean(nomelista, na.rm = TRUE) Media dei valori contenuti nella lista in modo
che vengano eliminati i valori mancanti
min(nomelista, na.rm = TRUE) Indica il valore minimo contenuto nella lista in
modo che vengano eliminati i valori mancanti
max(nomelista, na.rm = TRUE) Indica il valore massimo contenuto nella lista in
modo che vengano eliminati i valori mancanti
7
ff
fi
Strutture di controllo e operatori logici
OPERATORI DI CONFRONTO
1. a scalare e b scalare (scalare booleano)
2. a vettore e b vettore (vettore booleano)
3. a scalare e b vettore (vettore booleano)
4. a vettore e b scalare (vettore booleano)
a == b a é uguale a b
a != b a é diverso da b
a>b a é maggiore di b
a<b a é minore di b
OPERATORI LOGICI
Si basano sui valori booleani, che possono assumere le con gurazioni TRUE e FALSE.
AND: restituisce TRUE se tutti i termini sono TRUE
OR: restituisce TRUE se almeno uno dei termini é TRUE
NOT: converte TRUE in FALSE e viceversa
STRUTTURE DI CONTROLLO
Speci cano l’ordine e la ripetitività delle istruzioni, e sono necessarie se si vogliono creare
programmi complessi e articolati.
8
fi
fi
- Ciclo For
Ciclo con indice su vettore Fa in modo che la variabile i, che assume valori
nomevettore <- c(elemento1, elemento2, …) interi a partire da quello indicato (in questo
for(i in 1:lenght)){ caso l’1), una volta stampato il vettore indichi
cat(‘nomevettore[‘,i,’] = ‘, nomevettore[i], ‘\n’) un numero in relazione alla posizione
} dell’elemento dentro al vettore
Es:
## nomevettore[7] = elemento7
Ciclo su elementi di vettore In questo caso la variabile v assume a turno il
nomevettore <- c(elemento1, elemento2, …) valore di ciascun elemento dal primo all’ultimo,
for(v in nomevettore){ in modo che si possa calcolare più
cat(‘v = ‘, v, ‘\t’, v >= xo, ‘\n’) velocemente la relazione tra v e xo decisa
}
Ciclo su elementi di lista Questo comando concatena un comando
nomelista <- list(elemento1, elemento2, …) (come per esempio la media) agli elementi
For(elementox in nomelista){ selezionati della lista
cat(‘nomeazione’, elementox, ‘ operatore ’,
comando, ‘\n’)
}
- Esecuzione condizionata
Si usa per scegliere se eseguire o meno una porzione di codice a seguito di un risultato logico
TRUE/FALSE.
IF: SE CIÒ CHE LO SEGUE É VERO, LUI ESEGUE
Esempio:
Studente <- list(matr=123, voti=c(6.5, 7.5, 9)) In questo caso stampando ‘studente’ non
media <- mean(studente$voti) uscirà fuori il commento. Se però la sua media
if(media >= 9){ fosse veramente sopra o uguale al nove, allora
studente$commento <- ‘studente eccellente’ } uscirebbe anche il commento.
IF ELSE: SE CIÒ CHE SEGUE IF É VERO, LUI ESEGUIRÀ QUELLO, SE É FALSO ESEGUIRÀ QUELLO
DOPO ELSE
Esempio:
Studente <- list(matr=123, voti=c(6.5, 7.5, 9)) In questo caso stampando ‘studente’ non
media <- mean(studente$voti) uscirà il commento ‘studente eccellente’ in
if(media >= 9){ quanto la media non é del 9. Il comando
studente$commento <- ‘studente eccellente’ eseguirà quindi ciò che si trova dolo ‘else’,
} else { stampando ‘studente non eccellente’.
studente$commento <- ‘studente non eccellente’ }
ELSE IF
Se “if” viene veri cato, gli “else” ed “else if” successivi vengono
saltati.
Se “if” non viene veri cato, allora si passa a controllare se il
successivo “else if” possa essere veri cato.
Se “else if” é veri cato allora viene eseguito lui e i seguenti
passaggi vengono cancellati.
Se “else if” non é veri cato si passa al successivo blocco “else”.
IF → ELSE IF → ELSE
Nb: questi termini devono stare sempre sulla riga della parentesi
gra a che ha chiuso il comando precedente. Di anco a loro
vengono aperte le parentesi gra e che contengono i comandi
per i quali valgono le loro condizioni.
9
ff
fi
fi
fi
fi
ff
fi
fi
- Ciclo condizionato
È un ciclo iterativo che viene ripetuto nché un’a ermazione é falsa. Usa il comando “while”.
Esempio:
n <- 0; N <- 5 In questo caso il ciclo viene ripetuto no a
while(n <= N){ quando n é minore/uguale a 5. Quando termina
cat(’n = ‘, n, ‘\n’) il ciclo, Rstudio passa ad eseguire ciò che c’é
N <- n + 1 scritto nella riga successiva.
}
## ciclo terminato n = 6
Funzioni
Un oggetto di tipo funzione in R consente di riutilizzare il codice, richiamando la funzione ogni
volta che serve.
Quando si intende restituire più di un risultato da una funzione, si restituisce un oggetto di tipo
lista i cui elementi contengono i risultati.
• Hanno precedenza le variabili de nite nel corpo della funzione → insieme ai comandi
• Se R non trova una variabile la cerca negli argomenti della funzione
• In caso non ci siano, R la cercherà tra gli argomenti presenti nel workspace
• In caso di insuccesso comparirà ERROR
nomefunzione <- function(x, y){ De nizione della funzione
Istruzioni con x e y Nb: se al posto di x o y metto un numero, in
} caso non speci co la di erenza, il valore sarà
sempre quello dato.
nomefunzione <- function(x,y){
y <- operazioni
x <- operazioni
return(list(nomeoperazione1 = x,
nomeoperazione2 = y)
nomerisultato <- nomefunzione(xo,yo) Utilizzare la funzione: tre metodi (speci cando i
nomerisultato <- nomefunzione(x = xo ,y = yo) nomi e potendoli anche invertire oppure
nomerisultato <- nomefunzione(y = yo, x = xo) normalmente seguendo l’ordine)
10
fi
fi
fi
fi
ff
fi
fi
fi
fi
ff
Input vettore e lista, output lista che contiene vettori
nomefunzione <- function(nomevettore, Una funzione stampa in ne due vettori
nomelista){ contenenti i risultati provenienti dai comandi
comandi per la creazione di due vettori (es: inseriti, che combinano il vettore e la lista
vettore - lista)
}
LA PASSEGGIATA CASUALE
PasseggiataCasuale <- function(start, N, graf = FLASE, …){
v <- array(data = NA, dim = N)
v[1] <- start
for(i in 2:N{
v[i] <- v[i-1]+rnorm(mean = 0, sd = 1)
}
if(graf == TRUE){
plot.ts(v, …)
}
FIBONACCI
bonacci <- function(N){
if(N <= 2){
return(NULL)
F <- array(data = NA, dim = N)
F[1] <- 0, F[2] <- 1
for(i in 3:N)
F[i] <- F[i-1]+F[i-2]
}
return(F)
}
Grafici di base
col = colore scritto in inglese → colors() e vedi tutti quelli a disposizione
main= titolo del gra co
xlab = nome etichetta asse delle x
ylab = nome etichetta asse delle y
xlim = intervallo sulla scala delle x (es: xlim= c(0,5))
ylim = intervallo sulla scala delle y (es: ylim= c(0,5))
type = p (punti), l (linee), b (punti e linee)
grid(lwd = n) = aggiunge una griglia con spessore n
abline(h = …, v = …, a = …., b = …) → con h = altezza della linea orizzontale, v = posizione linea
verticale, a/b = altezza e pendenza linea obliqua
11
fi
fi
fi
• plot(x = nomevettore1, y = nomevettore2, …) → gra co a dispersione, coppie di ordinate su un
piano cartesiano
• plot(x, …) → gra co a dispersione in cui x = 1:length(y)
SERIE STORICA
Parte tutto dalla funzione cumsum, che fa la somma di un vettore
Serie singola
nome <- cumsum(rnorm(1000))
plot.ts(nome) → stampa il gra co
Serie multiple
plot.ts(cbind(nomevettore1, nomevettore2), plot.type = ‘single’) → genera dei gra ci, uno per ogni
vettore, a cui si deve a ancare una legenda:
legend(x = puntodinizio, y = max(cbind(nomevettore1, nomevettore2), legend = c(“x”, “y”), col =
c(“blue”, “red”), …)
Serie multiple con piani separati
plot.ts(cbind(nomevettore1, nomevettore2), plot.type = ‘multiple’) → genera dei gra ci, uno per
ogni vettore, in due piani cartesiani separati
FREQUENZE
Factor
nomevettore <- factor(elemento1, elemento2, …)
plot(x = nomevettore) → stampa un istogramma con tutti gli elementi ripetuti, mostrano quale
viene ripetuto di più nel vettore
Ordered
nomevettore <- ordered(elemento1, elemento2, …), levels = c(nomi degli elementi che si ripetono)
plot(x = nomevettore) → stampa un istogramma con tutti gli elementi ripetuti, mostrano quale
viene ripetuto di più nel vettore
Dati continui
Con dati quantitativi si creano delle frequenze delle varie classi e si conteggiano, impostando la
funzione hist con freq = TRUE
nomevettore <- vettore1
hist <- (x = nomevettore, freq = TRUE, …)
Dati continui istogramma
Se ogni frequenza viene divisa per l’ampiezza della classe si ottiene un istogramma, impostando
con freq = FALSE
GRAFICO FUNZIONE
curve(nomefunzione(argomenti)) → crea una curva che rappresenta la funzione
GRAFICI MULTIPLI
par(mfrow=c(1,2)) → le due cifre indicano il numero di righe e colonne di un certo pannello entro
cui alloggiare i gra ci
plot(funzione1)
hist(funzione2) → crea due gra ci, un istogramma e uno normale
12
fi
ffi
fi
fi
fi
fi
fi
fi
LA FUNZIONE HIST
Questa funzione genera un gra co delle frequenze osservate in un certo vettore.
• freq: se TRUE calcola le frequenze, se no calcola le densità di frequenza
• breaks: intervalli
• right: se TRUE genera intervalli chiusi a destra, se no a sinistra
• col: colore del gra co
• main: titolo del gra co
• ylab: etichetta asse verticale
• xlab: etichetta asse orizzontale
LA FUNZIONE PLOT
plot(vettore/lista/funzione) → stampa il gra co (funziona esattamente come hist)
DYGRAPHS
Serve per rappresentare le serie storiche con gra ci interattivi.
nomegra co <- xts(comandi da inserire)
PLOTLY
Crea gra ci interattivi
nomegra co <- plot_ly(comandi da inserire)
ggplotly(nomegra co creato con ggplot) → per renderlo interattivo
13
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
• apply <- data.frame e matrici
apply(X = nomedataframe, MARGIN = n, FUN = MARGIN= se 1 esegue la funzione lungo le righe, se
funzionechesivuole, na.rm = TRUE) 2 esegue la funzione lungo le colonne
• lapply <- liste (restituisce liste) → se si mette poi sapply da lista il risultato diventa vettore
lapply(X = nomelista, FUN = funzionechesivuole FUN= funzione che si vuole eseguire, es: mean/
length, oppure una più complessa creata sul
momento, oppure un’altra già esistente creata da
noi
Analisi numerica
DERIVATE
nomederivata <- (f, x, delta = le-04, …)
xp <- x + delta
yp <- x - delta
derivata1 <- (f(xp, …) - f(xm, …))/(2*delta)
derivata2 <- (f(xp, …) - 2 * f(x, …) + f(xm, …)) / (delta^2)
list(prima = derivata1, seconda = derivata2)
Con: f = f(x)
x = numero reale scalare in cui trovare la derivata
delta = intorno della funzione (di default 0.0001)
…: ulteriore argomenti da passare ad f(x)
Applicare poi per qualsiasi f e x → nomederivata(f, punto)
Punto di massimo/minimo
nomepunto <- optimize(f = nomefunzione, interval = c(n,m), maximum = TRUE)
(Per controllare poi applichiamo la derivata al punto e vediamo se la prima derivata é nulla e la
seconda é negativa).
In caso di minimo impostiamo maximum come FALSE e veri chiamo che la seconda derivata sia
positiva.
Gra co derivata
In questa esercitazione intendiamo creare una funzione volta a
1. Tracciare il gra co di una funzione f(x)
2. Calcolare in ogni suo punto la pendenza (funzione derivata prima)
3. Calcolare in ogni suo punto la concavità/convessità (funzione derivata seconda)
• f’(x)>0 pendenza positiva, f’(x)<0 pendenza negativa, f’(x)=0 funzione piatta
• f“(x)>0 funzione convessa (forma a U), f”(x) funzione concava (forma a U rovesciata), f"(x)=0
assenza di concavità/convessità (funzione localmente lineare)
14
fi
fi
fi
chart_Funzione_Derivate<-function(f, inf, sup, incr=0.01, results=FALSE, ...){
# Asse delle x
x <- seq(from = inf, to = sup, by = incr)
N <- length(x)
# Vettori vuoti della stessa lunghezza del vettore x
# abbreviazione per imposatre tre variabili su uno stesso valore
y <- yder1 <- yder2 <- array(NA, N)
NewtonRaphson <- function(f, start, ftol = 1e-05, maxiter = 100, print = FALSE, obj = 'opt', ...) {
# f: funzione obiettivo (f:R->R)
# start: valore iniziale in cui valutare la funzione f
# ftol: regola di convergenza
# maxiter: nr massimo di iterazioni
# print: stampa a schermo l'evoluzione della ricerca della soluzione
# obj: 'root' azzera la funzione. opt per funzioni da minimizzare/massimizzare
# ...: argomenti da passare alla funzione 'f'
xold <- start; fold <- f(xold, ...); i <- 1 # Valori iniziali
change <- ftol * 2; converge <- FALSE # Assicura non-convergenza all'inizio
if (print == TRUE) cat("Iter: ", 0, " x = ", xold, " f = ", fold, "\n")
# Iterazioni (criterio convergenza ftol)
15
fi
fi
fi
fi
ffi
while (change > ftol) {
der <- derivate(f, xold, ...) # Derivate prima e seconda (di erenze nite)
# Nuova x
if (obj == "root") {
xnew <- xold - fold/der$prima
change <- abs(fold)
} else {
xnew <- xold - der$prima/der$seconda
change <- abs(der$prima)
}
fnew <- f(xnew, ...) # Nuova f(x)
if (print == TRUE) {
cat("Iter: ", i, " x = ", xnew, " f = ", fnew, "\n")
}
xold <- xnew; fold <- fnew; i <- i + 1 # Prepara iterazione successiva
# Esce dal ciclo se non converge entro maxiter iterazioni
if(i >= maxiter){
break
}
}
if (change <= ftol) {
converge <- TRUE
}
list(x = xnew, f = fnew, conv = converge)
}
NB: questo si può ottimizzare con la funzione recall, che permette di avere un codice più
compatto e più chiaro.
Utilizzare la funzione
opt <- NewtonRaphson(FunzioneCosto, start = 10, ftol = 1e-05, maxiter = 100, print = TRUE,
obj = "opt", cf = 230, cu = 10)
Si trovi il punto in cui “funz” raggiunge il minimo utilizzando MinimizeRandom (con start=5,
move=0.1, iter=300).
RandOpt <- function(f, start, move, iter = 100, ...) {
xold <- start; fold <- f(xold, ...)
for (i in 1:iter) {
# Regola di spostamento casuale da xold a xnew
spost <- rnorm(1, mean = 0, sd = move)
xnew <- xold + spost
# Valuta la funzione 'f' nel nuovo punto
fnew <- f(xnew, ...)
# Accetta o ri uta il passo
if (fnew < fold) {
xold <- xnew
fold <- fnew
}
16
fi
ff
fi
Utilizzare la funzione ris <- RandOpt(funz, 5, move = 0.1, iter = 300)
funz <- function(x) { print(ris)
x^2 + 3 * x
}
INTEGRALI - METODO DUE PUNTI (INTEGRALI DEFINITI DA A A B)
INTEGRALEPUNTIMEDI <- function(f, interv, N, graf = FALSE, …){
a <- interv[1]; b <- interv[2]
I <- seq(a, b, length.out = (N + 1)) Con:
puntimedi <- (I[-N]+I[-1])/2 f = funzione f(x)
s <- 0 interv = estremi per l’integrazione
for (i in 1:N){ N = nr. Intervalli
s <- s + abs(f(puntimedi[i])) graf = stampa il gra co di f(x)
int = integrale de nito
nomeintegrale <- (b-a)/N*s
med = insieme di punto medi
if(graf = TRUE) amp = ampiezza media degli intervalli
curve(f(x,…), from = interv[1], to = interv[2], …)
grid(lwd=3)
ampMedia <- mean(I[-1]-I[-N])
list(int = nomeintegrale, med = puntimedi, amp = ampMedia
Il pacchetto compiler* permette di creare una versione ottimizzata di una funzione rendendone
l’esecuzione più facile. È installato di default, ma non caricato, e viene richiamato solo quando
viene scritto il suo nome (namespace).
La presenza del namespace serve ad evitare che vengano confuse due funzioni con lo stesso
nome appartenenti a due pacchetti diversi, e a rendere esplicito il pacchetto a cui fa riferimento
una funzione.
*non crea un codice binario, ma un bytecode
Salvataggio
Tutto ciò che viene fatto su Rstudio può essere salvato su un le di testo, in modo che quanto é
stato fatto possa venire replicato in qualsiasi istante.
Si può quindi eseguire anche l’operazione inversa, importando i dati presenti in un le su Rstudio
Ciò che viene fatto dai pacchetti si può fare anche suddividendo il codice in vari sorgenti.
18
ff
fi
fi
fi
fi
fi
IMPORTARE ED ESPORTARE DATI
data() Elenca tutti i dataset disponibili
nomelistaoggetti <- read.csv( le = ‘M:/ Salva un le presente nel disco M in cui vengono
nome le.csv’, header = TRUE, sep = ‘,’) elencati degli oggetti. Questi saranno visualizzati
tramite il comando print(nomelistaoggetti), separati da
una virgola e con la prima linea di intestazione visibile.
header = TRUE Visualizzi la prima linea di interazione
APPROFONDIMENTI E AIUTO
Per aiuto si possono scrivere nella console di sotto dei comandi che ti aiuteranno:
• ?read.table
• ?read.csv
• ?write.table
• ?write.csv
Oppure nella casetta nell’angolo in basso a destra (cercando i pacchetti o immettendo le parole
chiave in “search engine”)
19
fi
fi
fi
fi
fi
fi
fi
fi
Programmazione oggetti
In questo tipo di programmazione l’utente ha la facoltà di de nire un nuovo tipo di dato in
aggiunta alle tipologie già presenti in R.
In R vi sono tre principali possibilità di mettere in atto la programmazione orientata agli oggetti:
• S3 → il più facile da utilizzare
• S4 → consente il multiple dispatch
• R6 → Replica il linguaggio Java e C++
CREAZIONE OGGETTI
nomestirnga <- structure(“parola”, class = “stringa”) Creazione di una stringa
1
fi
ff
fi
Database relazionali
Il dato é l’elemento base in informatica, ed é suscettibile di elaborazione allo scopo di ottenere
delle informazioni. Quando la mole di dati presenti é elevata, questi devono essere strutturati e
organizzati.
Come funziona
L’informatico progetta e mantiene una base dati, l’economista (o altri statistici) la utilizza. Nello
stesso momento l’utente medio accede ad un social oppure ad un sito web, accedendo quindi al
server della base dati tramite l’immissione di nuovi dati (es: nome utente) o tramite l’interrogazione
(es: ricerca).
I data base elettronici inizialmente vengono sostituiti come semplici le di testo. Poi diventano:
• OLTP, aggiornati in tempo reale → DataBase gerarchici, DataBase reticolari, A oggetti,
DataBase relazionali che garantiscono meglio di tutti l’integrità dei dati
• OLAP, non aggiornati in tempo reale per via della grossa mole di dati che spostano →
DataBase senza una struttura rigida nell’organizzazione dati (NoSQL), utilizzato spesso per le
sintesi statistiche.
NB: ne seguirà un approfondimento
Relazioni: associazione tra due o più tabelle, derivanti da una relazione tra chiave primaria (unica)
e chiave esterna (o unica o con ripetizioni).
Chiave primaria: é una colonna, o un insieme di colonne, che identi cano univocamente una riga
nella tabella. Il suo valore non può essere mai vuoto (principio di integrità), non ci devono essere
né dati mancanti né dati duplicati.
1
fi
fi
fi
fi
fi
Chiave esterna: é una colonna, o un insieme di colonne, i cui valori sono gli stessi della chiave
primaria di un’altra tabella. Se non trova una controparte, la chiave esterna deve essere impostata
su NULL. In ogni colonna non possono esserci celle vuote e non possono essere cancellate le
righe (per evitare di perdere il riferimento alla chiave primaria).
Tabelle
Righe = records
Colonne = campi
• Ogni campo deve avere un nome univoco
• I dati contenuti in un campo non possono essere scomponibili
• Nello stesso campo vano valori dello stesso tipo
• Ogni record é univoca: non deve avere altri duplicati
Normalizzazione
La normalizzazione del database consiste nella suddivisione corretta delle informazioni tra le
tabelle. Questa permette di avere più chiarezza interpretativa della struttura dei dati, e riduce le
ridondante presenti nelle tabelle.
L’importante però é stare attenti a non normalizzare troppo, in quanto una frammentazione
eccessiva complicherebbe la fase di interrogazione.
Prima forma normale
In corrispondenza ad ogni tabella dev’essere presente un singolo valore, mai un elenco. Non é
quindi possibile mettere due elementi in una sola cella.
Seconda forma normale
Ogni colonna non-chiave dipende completamente dall’intera chiave primaria, anche quando essa
é costituita da più colonne. Elementi che non sono correlati con tutti gli altri non possono quindi
far parte di una determinata tabella.
Terza forma normale
Le colonne non-chiave devono essere indipendenti, in quanto possono essere modi cate senza
che vadano ad in uire sulle altre.
Comandi
CREATE TABLE nome_tabella ( Crea una tabella con:
Nome_campo1 dominio [vincolo]
Nome_campo2 dominio [vincolo] Vincolo: NOT NULL / UNIQUE / DEFAULT /
… PRIMARY KEY
PRIMARY KEY (Nome_campo1,
Nome_campo2, …) Dominio: TEXT / INTEGRER / REAL / NONE /
FOREIGN KEY (Nome_campo1, CURRENCY / GUIDE / …
Nome_campo2, …) REFERENCES (Dipendono da SQLite oppure da MS Access)
Tabella (Nome_campo1,
Nome_campo2, …)
UNIQUE (Nome_campo1, Nome_campo2, …)
Esempio con MS access Esempio con SQLite
2
fl
fi
CREATE TABLE materie ( Relazione “uno a uno”
ID_materia INTEGER PRIMARY KEY Quando la chiave esterna é unica, allora fra le
AUTOINCREMENT, tabelle si instaura una relazione “uno a uno”.
Denominazione TEXT, )
PRIORITÀ DI ESECUZIONE
1. Join
2. Where
3. Group by
4. Select
5. Having
3
fi
SELECT studenti.matricola, studenti.cognome, Query = Natural Join
studenti.nome, esami.voto Estraiamo dati provenienti da due tabelle:
FROM studenti FROM studenti e INNER JOIN esami.
INNER JOIN esami L’ON serve a legare le due tabelle tramite la
ON studenti.matricola = esami.matricola chiave esterna.
SELECT studenti.matricola, studenti.cognome, Query = Left Join
studenti.nome, esami.voto Tutti i record della tabella studenti, anche se non
FROM studenti trovano un corrispettivo nella tabella esami,
LEFT JOIN esami vengono presi.
ON studenti.matricola = esami.matricola
SELECT studenti.matricola, studenti.cognome, Query = Right Join
studenti.nome, esami.voto Tutti i record della tabella studenti, anche se non
FROM studenti trovano un corrispettivo nella tabella esami,
RIGHT JOIN esami vengono presi.
ON studenti.matricola = esami.matricola
SELECT studenti.matricola, studenti.cognome, Query = Multiple Join
… Si congiungono due tabelle
FORM Il risultato della join al punto precedente si
(Esami LEFT JOIN materie ON esami.ID_materia congiunge con un’altra tabella
= materie.ID_materia) Ecc…
RIGHT JOIN
Studenti ON studenti.matricola =
esami.matricola
OLAP
I database relazionali presi in considerazione sono orientati alla registrazione dei dati e
all’estrazione di parti di essi.
Attività di routine:
• Memorizzazione delle proprie giacenze
• Inserimento nuovi acquisti
• Esecuzione quotidiana di interrogazioni per rilevare la soglia di giacenza
• Interrogazione durante un acquisto online della disponibilità di qualcosa
Possono essere per esempio utilizzati per l’analisi dati e l’u cio statistiche, utilizzati quindi per
scopo conoscitivo oppure per scopo decisionale.
L’u cio statistiche fa parte della direzione alta di un’azienda, e basandosi su questi dati può per
esempio applicare delle iniziative pubblicitarie, delle iniziative mirate e di erenziate sui pro li dei
clienti oppure può direttamente operare sui mercati nanziari sulla base delle previsioni delle
vendite.
Ovviamente però non bisogna dimenticare che i database relazionali non sono orientati alle
analisi, in quanto non consentono di estrarre relazioni multidimensionali* presenti nei dati e
mancano di interattività**.
*Relazioni multidimensionali: relazioni di causa e di e etto tra le varianti rilevate e presenti nel
database
**Interattività: possibilità di vedere la variazione dei risultati al variare di alcuni parametri
Cubo OLAP: i dati per un certo problema vengono salvati addirittura in cubi tridimensionali.
Operazione sui cubi: SLICING (restrizione della vista del cubo lungo un sottoinsieme di una certa
dimensione), DICING (creazione di sotto-cubi), DRILL DOWN (visione delle relazioni dettagliate),
ROLL UP (ascesa di uno o più livelli di dettagli) e AGGREGATION (una o più dimensioni vengono
collassate).
5
ffi
fi
fi
fi
ff
ffi
ff
fi
Data Warehouse
OLAP si inserisce in un contesto più grande e ampio, il Data Warehouse, che costituisce l’insieme
di dati di un’organizzazione, a ancato da tecniche la cui nalità é l’identi cazione di relazioni
multidimensionali a ni decisionali.
I dati vengono perciò raccolti da fonti varie, e vengono resi disponibili solo per la lettura venendo
salvati su dei datamart, ai quali si può applicare la tecnica OLAP.
Le analisi del DW sono condotte navigando attraverso il cubo OLAP oppure applicando tecniche
di data mining e di business intelligence.
Soluzioni possibili:
• MOLAP: dati e aggregazioni salvati in un database OLAP → usato quando ö’aggiornamento dei
dati non é molto frequente
• ROLAP: dati e aggregazioni salvati in un database relazionale → usato quando le analisi
vengono svolte raramente. È la più frequente, e i dati vengono suddivisi in tabelle dei fatti (che
presentano chiavi esterne) e tabelle delle dimensioni (che presentano chiavi primarie).
• HOLAP: i dati sono salvati in un database relazionale e le aggregazioni in un database OLAP →
usato quando le analisi sono frequenti
Un linguaggio markup lavora con dei le di testo, avendo lo scopo di dare un senso a porzioni
del documento identi cando, con speciali elementi, i marcatori, ovvero alcune porzioni speci che
del testo.
Chi compone il le “marcato”? L’utente utilizzando un editor di testi oppure compiendo una serie
di azioni tramite software che traduce le azioni in un le di testo marcato.
HTML
HTML appartiene alla categoria dei linguaggi di tipo markup, quindi dei linguaggi descrittivi, ed é
costituito da un insieme prede nito di tag che aiutano a descrivere la rappresentazione gra ca del
contenuto del documento di testo, in modo che questa venga delegata successivamente al
browser web.
Si può vedere grazie a questo il codice sorgente di ogni sit web (view → source)
XML
XML é un markup meta language, descrive il contenuto ma non si preoccupa di indicare la
rappresentazione gra ca.
6
fi
fi
fi
fi
fi
ffi
fi
fi
fi
fi
ff
fi
fi
fi
Può essere inteso come una base dati di tipo gerarchico, in quanto é basato su tag e attributi
de niti dall’utente (sulla base del problema l’utente decide quali tag e attributi utilizzare). L’utente
può quindi decidere quali dati sono più importanti di altri.
Grazie a queste sue caratteristiche, XML permette di attribuire un signi cato semantico al testo,
funzione che tra l’altro permette di e ettuare le ricerche web mirate.
<nometag NomeAttributo1 = “valore” NomeAttributo2 = “valore” >
Contenuto dell’elemento
</nometag>
Utilizzi di XML:
- É un formato aperto, quindi qualsiasi applicazione può leggerlo.
- Attraverso azioni semplici é possibile rappresentare un le XML in vari formati.
- Viene utilizzato come database “light”, essendo veloce e occupando poco spazio.
- Nel web XML viene utilizzato per de nire nuovi linguaggi.
- Si a anca bene a OpenO ce e OpenDocument (per documenti, fogli di calcolo, …)
- In economia e in nanza viene utilizzati per trasferire notizie, descrivere prodotti nanziari,
e ettuare bilanci e comunicare in modo interbancario.
7
ff
fi
ffi
fi
fi
ffi
fi
fi
ff
fi
ff
fi
fi
Il linguaggio XML può essere interpretato sia da un browser web che contiene un parere XML sia
da altri programmi, scritti in un linguaggio in grado di accedere al DOM o che implementa librerie
SAX.
DOM: é un modello di oggetti che permette di e ettuare una serie di operazioni sui documenti
XML.
DTD: é un le di testo che de nisce la struttura e il tipo di contenuto presente in un le XML.
8
fi
fi
ff
fi
Excel
In excel possono essere inseriti nelle celle: testi, date, numeri e formule. Possono essere invece
incollati sul foglio di lavoro anche: gra ci, immagini, caselle di testo, caselle di equation editor, ...
È possibile cambiare esplicitamente il tipo di dato inserito in una casella selezionando la cella e
schiacciando “formato cella”.
Una cartella di lavoro é un le excel, in cui si sono più fogli di lavoro, ognuno dei quali può
essere modi cato tramite il tasto destro del mouse.
Celle
Ogni cella può essere contraddistinta da un numero e una lettera (A1)oppure da due lettere e due
numeri (R1C1). Di default é impostato sul metodo A1, ma lo si può cambiare nelle opzioni.
Un insieme di celle adiacenti si chiama “vettore”, e può essere sia formato da solo righe (es:
B2:D2) oppure da sole colonne (es: B2:B4). Tutta la colonna B si indica con B:B, tutta la riga 2 si
indica con 2:2.
Un range rettangolare é formato sia da righe che da colonne, e parte dalla prima in alto a sinistra
no all’ultima in basso a destra (es: B2:D5).
Si può fare riferimento a celle esterne al foglio di lavoro.
• Se la cella si trova in un altro foglio di lavoro: nomefoglio!nomecasella (es: Foglio1!A1). Questo si
può per esempio utilizzare per sommare due caselle, come con Foglio1!A1 + Foglio2!A1 che
inserisce nella casella A1 del foglio 3 la somma delle due.
• Se la cella si trova invece in un’altra cartella di lavoro, la formula diventa:
[nomecertelladilavoro.xlsx] nomefoglio!nomecasella.
Per sempli care il lavoro delle formule le celle possono essere rinominate in “formule” e poi in
“de ne names”. In quel caso le celle nelle formule verranno chiamate semplicemente con il loro
nome.
File → options →
1. formulas → workbook
calculation “automatic” e
working with formulas tutte
tranne “R1C1 referente
style”
2. Costumize Ribbon →
attivare “developer”
Developer
Una volta scaricato il developer si può schiacciare su “visual basic” per aprire l’editor di codice
VBA, in cui programmare Excel. Una cartella di lavoro che contiene un VBA dev’essere salvato
come “nome le.xlsm”.
Oltre a questo, si può anche schiacciare su “record macro”, che permette di registrare e
codi care in VBA una serie di azioni che vengono eseguite nell’ambito Excel.
1
fi
fi
fi
fi
fi
fi
fi
fi
Formule
Gli elementi delle formule possono essere digitati manualmente oppure essere contenuti in altre
celle (es: B2 + C1). Se una cella contiene una formula che dipende da altre celle, quando presente
il ricalcolo automatico, quando queste cambiano cambia anche lei di conseguenza.
Le formule possibili si trovano nello scompartimento “formule”, dal quale si possono prendere
direttamente e usare a discrezione nel proprio documento.
Funzioni
Esistono in excel le funzioni, che sono delle trasformazioni “da molti a uno”. Le possiamo trovare
nel tab “formule”:
• Finanziarie
• Data / ora
• Matematiche
• Statistiche
• Ricerca e riferimento
• Database
• Testo
• Logiche
• Informative
• Ingegneristiche
Una funzione accetta zero, uno o più argomenti, separati da una virgola oppure da un punto e
virgola, e restituisce o uno scalare oppure un vettore (che occupa più celle).
Risultato scalare: si seleziona la cella e si schiaccia “=” per poi premere il tasto di invio sulla
tastiera.
Risultato vettoriale: si seleziona l’insieme di celle e si schiaccia “=” per poi premere
“ctrl+maiuscolo+invio”.
Se si fa riferimento in una funzione a più celle, se sono adiacenti le si inserisce come vettori, se
non lo sono le si separa o con la virgola o con il punto e virgola. È possibile inoltre mischiare e
inserire due matrici o due vettori separati da una virgola o da un punto e virgola.
Replicare formule
Una formula può essere applicata a celle adiacenti, basta trascinare il mouse sul bordino della
cella e aspettare che esca una croce nera. Quando esce si trascina lungo tutta la regione entro cui
si replica la formula.
Se lo si vuole fare lontano, bisogna prima copiare con l’uguale la prima casella e poi iniziare.
Se una parte della formula deve rimanere invariata, si blocca una parte della formula inserendo il
simbolo “$”.
• $A1 blocca la riga (sempre ssa sulla riga A)
• A$1 blocca la colonna (sempre ssa sulla colonna 1)
• $A$1 tutta la cella rimane bloccata
FUNZIONI PRINCIPALI
Funzioni matematiche in inglese: + / - / * / ^ / SIN / COS / TAN / LN / LOG / LOG10 / EXP /
SQRT / FACT / ABS / SUM / PRODUCT / ROUND / INT / RAND (numero casuale estratti da
distribuzione uniforme) / RANDBETWEEN (numeri interi in un intervallo)
Funzioni matematiche in italiano: + / - / * / ^ / SIN / COS / TAN / LN / LOG / LOG10 / EXP /
RADQ / FATTORIALE / ASS / SOMMA / PRODOTTO / ARROTONDA / INT / CASUALE (numero
casuale estratti da distribuzione uniforme) / CASUALE.TRA (numeri interi in un intervallo)
2
fi
fi
Funzioni descrittive univariate in inglese: AVERGE / COUNT / MAX / MIN
Funzioni descrittive univariate in italiano: MEDIA / CONTA.NUMERI / MAX / MIN
Funzioni di data in inglese: TODAY / WEEKDAY / DAY / MONTH / HOUR / MINUTE / SECOND /
EDATE / sottrazione tra date / somma tra date
Funzioni di data in italiano: OGGI / GIORNO.SETTIMANA (1 = domenica, 7 = sabato) /
DATA.MESE (avanza e retrocede di tot mesi) / GIORNO / ANNO / ORA / MINUTO / SECONDO
Attenzione: le date all’interno di excel sono espresse come un numero decimale che conta dal 1
gennaio del 1990 quanto é passato.
Errori
In caso di errore delle funzioni potrebbe uscire:
• #DIV/0! → divisone per zero impossibile
• #NAME? → formula con testo sbagliato
• #VALUE! → tipo di argomento errato
• #REF! → riferimento a cella inesistente, per esempio se si é eliminata una colonna
Posizionatore campi
Se si seleziona il “posizionatore campi”, le opzioni ti permettono di decidere tra: dimensione
colonna-riga, dimensione colonna oppure misura.
3
fi
Operazioni su dimensioni
Lungo ogni dimensione di possono ordinare i valori in modo crescente o decrescente oppure
eliminare dalla vista alcuni valori. Per far ciò basta selezionare il corrispondente menu a discesa
indicato dalla freccia che guarda verso il basso e schiacciare su “altre opzioni di ordinamento”.
Gra co pivot
Oltre a ciò, si può anche formare un gra co pivot schiacciando su “strumenti tabella pivot” e
“opzioni”.
4
fi
fi