Come importare dati in Scilab: i files csv

Laptop con Excel

Una delle possibilità offerte da Scilab è quella di leggere (importare) files di dati formattati, come i fogli di lavoro di Excel o i files di testo strutturati csv (comma separated values).
In questo post vedremo come con poche e semplici istruzioni sia possibile acquisire i dati dai files esterni e quindi operare su di essi come con le altre variabili generate in Scilab.

Importare dati

Iniziamo col ricordare cosa sono i files csv: files di testo in cui i dati sono memorizzati in colonne divise da un elemento separatore, tipicamente una virgola (in inglese “comma”). In pratica si tratta di tabelle che possono essere sfruttate da altri programmi come data-base o fogli di calcolo.  In questo articolo vedremo come utilizzarli in Scilab.

I dati contenuti nel file sono considerati, per l’importazione, come un’unica matrice numerica. Di conseguenza gli altri tipi di dato (ovvero testo) saranno considerati NaN (Not a Number).

A partire dalla matrice importata si estrarranno i valori di interesse per le successive trattazioni.

Vediamo con un esempio ed importiamo il seguente file ‘dati.csv’ (deve essere presente nella cartella di lavoro, altrimenti va riportato tutto il path):

nome,  età,  altezza, peso
franco, 30, 172,  85
pippo,  41,  189, 78
antonio,33, 169, 65
lucio, 25 175, 81
M=csvRead('dati.csv')
M  =
Nan    Nan    Nan     Nan
Nan    30.    172.    85.
Nan    41.    189.    78.
Nan    33.    169.    65.
Nan    25.    175.    81.

A questo punto potremmo estrarre separatamente i vettori:

età=M(2:$,2);
altezza=M(2:$,3);
peso=M(2:$,4);

oppure creare una matrice (ammesso che abbia senso per quello che uno deve fare) con i soli dati numerici:

D=M(2:$,2:$) // creazione di una nuova matrice

o, ancora, eliminare i soli dati non numerici nella matrice di partenza:

M(1,1:$)=[]; // elimino la prima colonna
M(1:$,1)=[]; // elimino la prima riga

Come detto i dati sono separati da un elemento (carattere) che è unico per tutto il file e consente ai programmi di acquisire le informazioni in modo corretto: ad esempio se volessi usare la virgola per rappresentare i decimali dovrei scegliere un altro tipo di separatore (attenzione: questo vale per il file di testo, ma Scilab non potrebbe acquisire un tale dato in quanto usa la convenzione del punto decimale) altrimenti sarebbe impossibile distinguere fra loro i differenti numeri presenti. Forse è opportuno precisare che gli spazi fra i dati non sono presi in considerazione!

Proviamo a modificare il file ‘dati.csv’ sostituendo il primo ed il terzo separatore con il carattere ‘;’ e proviamo ad acquisire in Scilab come prima, otteniamo

csvRead('dati.csv')
ans  =

Nan    Nan
Nan    Nan
Nan    Nan
Nan    Nan
Nan    Nan

in quanto l’unica virgola separa due stringhe che Scilab non sa riconoscere e convertire in formato numerico.
Come fare? Bisogna esplicitare il separatore nel comando

csvRead('dati.csv',';')
ans  =

Nan    Nan    Nan
Nan    Nan    85.
Nan    Nan    8.
Nan    Nan    65.
Nan    Nan    81

In questo caso la struttura è corretta ma gli unici numeri sono in terza colonna in quanto, come detto, Scilab non riconosce la virgola per i decimali ma solo il punto.
In pratica possiamo dire che occorre attenzione nel creare il file di partenza ed eventualmente ripassarlo con un editor di testo per renderlo “leggibile” da Scilab.

Esportare dati

Se abbiamo dei dati che vogliamo salvare e rendere disponibili per altre applicazioni possiamo scegliere il formato csv, invece del formato proprietario di Scilab. L’unica limitazione è che possiamo memorizzare una matrice per ogni file.

Il comando è il seguente:

csvWrite(Matrice, nomefile, separatore)

Dove “Matrice” è la matrice, appunto, da esportare; “nomefile” è una stringa con il nome del file (completo di estensione) ed eventualmente il path se vogliamo salvare in una diversa cartella ed infine il carattere separatore. Se quest’ultimo è omesso si usa la virgola, come valore di default.

Ad esempio, creiamo la matrice M:

M=[ 1.3 5 6.9; 5  9 10.4; 852 125 5]

M  =

1.3     5.      6.9
5.      9.      10.4
852.    125.    5.

se eseguiamo csvWrite(M,'salva.csv') otteniamo un file contente:

1.3,5,6.9000000000000004
5,9,10.4
852,125,5

perché abbiamo scelto il separatore di default.

Per utilizzare un altro separatore, lo inseriamo nel comando:

csvWrite(M,'salva.csv', '!')

ed il risultato è il seguente:

1.3!5!6.9000000000000004
5!9!10.4
852!125!5

CONCLUSIONI

Abbiamo visto come importare dati da un file csv e come crearne uno con i dati a disposizione.

Se hai dubbi o vuoi approfondire qualche aspetto avanzato, chiedi nei commenti.

Se l’articolo ti è piaciuto condividilo nei social che preferisci

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Pin It on Pinterest