LEZIONE 1
Che cos’è l’informatica? Ne un computer ne una scienza.
L’informatica è lo studio dell’organizzazione dei dati e come svolgere operazioni su dei
dati in maniera esatta e veloce.
Dato un problema come posso risolverlo? Una soluzione è provare tutte le possibilità che
ho a disposizione.
- P problemi risolvibili facilmente
- NP problemi irrisolvibili velocemente o irrisolvibili
Le password che utilizziamo viene chiamata “chiave” nei sistemi di cifratura. La
robustezza di una chiave si basa su sistemi che per poter scoprire una determinata chiave
dovrei essere in grado prendendo un numero enorme di riuscire a trovare quali sono i
fattori primi di scomposizione che moltiplicati tra di loro mi danno il numero enorme di
partenza. Questa operazione rientra nella classe NP, molto di cile da risolvere.
Questi problemi si risolvono perché altrimenti passeremmo ore davanti ad una domanda
alla quale non potremmo rispondere. Se trovo una soluzione ho la possibilità di
scomporre un numero grande in fattori primi e viceversa, quindi due cose che appaiono
scollegate in realtà si rivelano equivalenti.
L’informatica da un lato è la scienza che studia l’informazione, la memorizzazione e
l’elaborazione dei dati, dall’altro lato studia la risolubilitá dei problemi e la complessità del
trovare soluzioni di erenziando problemi trattabili e problemi intrattabili.
Posso elaborare i dati e le informazioni in modo e ciente grazie ad algoritmi speci ci.
Algoritmo è una sequenza nita di passi per la risoluzione di un problema, applichiamo
algoritmi nella vita quotidiana anche senza calcolatori.
I computer e i cellulari hanno il compito di svolgere velocemente degli algoritmi. Dando la
sequenza di passi da seguire questi vengono eseguiti in maniera istantanea.
Il concetto di algoritmo è slegato dal calcolatore.
Esempio di algoritmo: calcolo del cammino minimo tra due punti, utilizzando i tragitti
consentiti.
L’informatica studia algoritmi e caci e cerca quelli più e cienti usando meno risorse, nel
nostro caso calcolano la strada più veloce per raggiungere la nostra destinazione. Per
risolvere un problema esistono moltissimi algoritmi.
RISOLUTORE ED ESECUTORE
Il risolutore sono io che ideo l’algoritmo e l’esecutore (computer) lo compie,
consentendomi di scrivere passo per passo il linguaggio di programmazione che mi
permette di comunicare con l’esecutore.
Il linguaggio di programmazione è come una vera e propria lingua, ci sono regole
sintattiche per la de nizione di istruzione che codi cano algoritmi da eseguire.
Il linguaggio di programmazione è procedurale, è un insieme di istruzioni che vengono
eseguite sequenzialmente per arrivare alla soluzione.
Linguaggio di programmazione interpretato o procedurale, come R, in cui i programmi
vengono eseguiti tramite un programma speci co intermediario detto interprete. I
linguaggi di programmazione precompilati non hanno bisogno di un interprete perché già
lo sono.
AMBIENTE R
R è un software gratuito disponibile al repository CRAN, oltre al linguaggio di
programmazione e all’interprete R, fornisce documentazione, pacchetti R aggiornati e una
GUI user-friendly.
ff fi fi ffi ffi fi fi ffi ffi fi
R dispone di un enorme quantità di dati, dispense e programmi disponibili, molti pacchetti
per la gestione dei dati. Permette una visualizzazione gra ca dei dati mediante pacchetti
speci ci.
In R i le che contengono istruzioni da eseguire possono essere chiamati anche script.
Una volta lanciato l’ambiente R, è importante capire qual è la directory corrente e che sia
impostata nel modo corretto. La directory corrente mi dice in quale punto del mio sistema
operativo l’interprete sta guardando.
Per visualizzarla se sono nell’interfaccia do il comando “getwd ()”, la coppia di parentesi
tonde è necessaria per speci care che sto parlando di un comando e qui ci inserisco
l’argomento se c’è, se premo invio mi risponde l’indicazione dove troverò il percorso
assoluto dove si trova la R in quel determinato momento.
Per cambiare la directory corrente vado sul desktop, creo una cartella, torno
sull’interfaccia, su le trovo la voce cambia dir e posso scegliere la mia cartella di lavoro,
così che R guardi solo questa determinata cartella.
Questo procedimento può essere svolto anche con il comando “setwd (“”) che mi
imposta la directory corrente.
Per essere sicuro che R stia guardando dove voglio c’è un comando che mi dice il
contenuto della directory in cui R sta guardando, è il comando “dir()” character(0) mi dice
che in R non c’è nulla.
Per leggere i dati della nostra cartella digitiamo il comando scan(“nome del le.estensione
del le”) così che ci legga i nostri elementi che devono essere digitati in colonna.
Per salvare queste informazioni devo digitare “dati<-scan(“”).
Il comando “ls()” mi permette di leggere la mia area di lavoro, guarda nella porzione di
memoria RAM dove troviamo tutte le applicazioni.
Il comando “dir()” guarda i dati nel disco della cartella dove l’abbiamo selezionato.
Uso “scan()” quando i dati sono in un’unica riga o in un’unica colonna.
Il commando “rm(list=ls())” lo utilizzo per cancellare tutto ciò che c’è nel mio workspace
per controllare che sia stato eliminato digito “ls()” e dovrebbe darmi “character(0)”.
Per caricare il workspace caricato utilizzo il comando “load(“”)” per controllare che sia
caricato digito “ls()”.
Se abbiamo bisogno di aiuto abbiamo a disposizione dei comandi “help”. Scrivendo ? e il
nome del comando ci escono le istruzioni per questo determinato comando.
Per uscire dal programma R digito il comando “q()”, salvo il workspace e il programma si
chiude. Posso usare anche la modalità “ le->exit”.
Es 1 minuto 40
I comandi e gli identi cativi in R sono una sequenza di caratteri che indicano i comandi o i
nomi delle variabili. Sono case-sensitive, cioè scrivere un comando con la lettera
maiuscola o minuscola fa la di erenza, esistono solo i comandi con le lettere minuscole.
I nomi di variabili non possono iniziare con _ o . o un numero.
Possiamo dare un valore alle variabili utilizzando l’operatore di assegnamento “<-“.
Le variabili sono elementi del linguaggio caratterizzate da un identi cativo: il nome dato
alla variabile con cui richiamare la variabile nel programma; un tipo: che individua se la
variabile è di tipo numerico o di tipo carattere o di tipo logico; un valore é ciò che
contiene.
Se uso l’operatore di assegnamento due volte di la con la variabile a sinistra il contenuto
che ho inserito la prima volta viene sovrascritto, cambiato o cancellato.
Se voglio sapere il tipo di variabile digito il comando “mode(nome della variabile)”.
LEZIONE 2
fi fi fi fi fi ff
fi fi fi fi fi fi
Il vettore è l’elemento base di R, tutto viene visto come un vettore. Una variabile con un
contenuto più corposo, infatti un vettore è una “collezione” di variabili semplici. Le matrici
sono estensioni dei vettori, “collezioni” di vettori. Vettori e matrici sono due strutture dati,
noi in totale ne vedremo quattro.
Possiamo parlare di vettori quando i dati sono omogenei, cioè dello stesso tipo. Non
posso avere una stringa di lettere e numeri altrimenti non è omogenea.
Se ho migliaia di dati omogenei posso creare una variabile con l’operatore di
assegnamento per ogni dato ma diventerebbe complesso, utilizzando i vettori posso
sempli care il procedimento.
Un vettore è una struttura dati, un modo per organizzare i dati, contente dati omogenei
che ne de nisce il modo di rappresentarli e di accedervi così da gestire un unica variabile
che le contiene tutte.
Ciascun elemento in R ha una sua posizione, i vettori possono essere visualizzati in una
sequenza posizionale di celle concatenate in orizzontale, una cella per ogni elemento. (Il
primo elemento a sinistra è in “posizione/indice 1”, il secondo 2 e così via).
Per accedere agli indici devo scrivere il nome del vettore[numero indice]. Le parentesi
quadre le uso per accedere ad una struttura dati. Le parentesi tonde servono invece per
qualsiasi comando.
Per creare un vettore il linguaggio R fornisce diversi modi, un modo è utilizzare la funzione
c() che lega i suoi argomenti in un vettore. Se voglio passare più elementi ad un comando
li devo separare con la , ad esempio: tre elementi c(1, 2, 3).
Se io passo elementi che non sono omogenei ad esempio il vettore “c(12,5, 10, 1,5)”
premo invio e lui mi risponde 10,0, lo converte perché i vettori contengono dati omogenei.
R tendenzialmente se può converte. Se scrivo “dati <- c(12,5, 10, 1,5)” e premo invio non
mi da niente, se invece scrivo solo dati mi risponde (12,5, 10,0, 1,5) sempre convertito.
Le parentesi quadre sono l’operatore di accesso ai membri, tra […] occorre indicare la
posizione che si vuole leggere, è possibile un accesso multiplo scrivendo “eta[c(…)].
Viene creato un vettore di nome “età” che contiene gli elementi indicati dal comando c(). Il
numerino che compare a sinistra è l’indice che indica la posizione nel vettore del primo
elemento di quella riga.
Andare a capo in informatica corrisponde ad un carattere, ha un peso nonostante sia
invisibile, per R questo carattere è “\n”.
Il comando scan() ci restituisce un vettore in cui inserisce tutto ciò che ha letto.
L’estensione del le ci dice anche qual è il separatore: se ho txt gli elementi potrebbero
essere separati o a capo o da spazi; tsv vuol dire che le mie informazioni su una sola riga
non sono separate da spazi ma da dei tab, uno spazio più grande per capire se c’è un tab
mi sposto tra due info e se il salto è unico signi ca che ho un tab; csv quando le
informazioni sono separate da solo , senza spazi.
In programmazione per double si intende un numero in virgola mobile che consente di
presentare numeri più grandi.
What, sep sono i nomi degli argomenti.
fi fi fi fi
Scan è una funzione.
Con il comando “length()” posso sapere quanti sono i comandi in un vettore.
NA é un valore speciale, sta per “not available”, R lo usa quando non sa cosa risponderci.
ALTRI MODI PER GENERARE UN VETTORE
Operatore “:” è un operatore binario, prende un valore a destra e uno a sinistra, quindi
sono due valori. Mi restituisce un numero di interi che va dal valore a sinistra al valore a
destra. Questo comando è comodo per prendere sotto vettori continui.
“seq()” è simile ai “:” ma prende almeno due argomenti, il primo il punto di partenza , il
punto di arrivo, può anche essere intervallato usando il comando “by