Il formato dati CSV, il rasoio di Occam dei database

Il più semplice e diffuso strumento per archiviare e trasferire dati

Articolo pubblicato il 11/02/2020 da Donata Petrelli e rilasciato con licenza CC BY-NC-ND 3.0 IT (Creative Common – Attribuzione – Non commerciale – Non opere derivate 3.0 Italia)

Quanto tempo perdiamo nel cercare oggetti che non ricordiamo dove li abbiamo riposti l’ultima volta … dalle décolleté nere per la serata o la maglietta rossa per la palestra fino alla maionese in frigo per il panino veloce!

Quando cerchiamo un oggetto e non lo troviamo è dovuto al fatto che questo oggetto non è disposto in un database.

Estendendo il concetto, l’archiviazione e la manipolazione dei dati è da sempre il cuore di ogni settore. Da quello scientifico a quello umanistico non possiamo formulare teorie e arrivare a conclusioni importanti per la nostra vita se non partiamo dai dati e dalla loro analisi.Ecco perché la loro gestione è fondamentale.

L’informatica ha un ruolo chiave in tutto questo. Archiviare grandi quantità di dati (BigData), leggerli, filtrarli, ordinarli, interrogarli è tra i suoi principali compiti ed è la base per lo sviluppo tecnologico. Per questo esistono sofisticati software in grado di adempiere a questo compito e, al contempo, numerosi tipi di file addetti a fare da ‘contenitore’ dei dati.

Il problema nasce quando questi dati devono poter essere estrapolati e gestiti all’interno di altri programmi. Spesso ciò non risulta possibile proprio per la natura stessa dei file di origine, file proprietari e di difficile lettura se non tramite il loro programma nativo.

Il questo articolo parleremo del più semplice file che funge proprio da contenitore di dati e che per questa sua caratteristica è adatto a fare da ‘tramite’ per l’esportazione e l’importazione dei dati tra programmi diversi, il formato di file CSV.

I Database

Dalle piccole alle grandi realtà c’è il bisogno continuo di organizzare i dati al fine di permettere la regolamentazione della struttura stessa. Pensiamo ad esempio ad una biblioteca o ad una farmacia se non avessero previsto un sistema per l’organizzazione dei loro prodotti … sicuramente avrebbero chiuso la loro attività dopo pochi giorni.

Per soddisfare questo bisogno sono nati gli archivi definiti come «l’insieme di documenti di ogni tipo, prodotti e ricevuti da una persona fisica o morale, da un organismo nell’ambito della sua attività, e conservati» dallo stesso Consiglio internazionale degli archivi (Multilingual Archival Terminology – archives – http://www.ciscra.org/mat/mat/term/64).

Gli archivi dunque permettono la raccolta organizzata di oggetti omogenei, sia che si tratti di prodotti fisici che digitali. Riprendendo gli esempi precedenti, esempi di archivi sono gli schedari (prima cartacei ora digitali) delle biblioteche o le cassettiere delle farmacie. Gli oggetti archiviati sono i dati con cui lavora. Infine, un dato non è altro che la rappresentazione di un fenomeno o una parte elementare di esso quando la realtà è più complessa.

In ambito informatico, ciò che fa da contenitore per l’archiviazione organizzata di dati omogenei si chiama appunto Database, in italiano “Base di dati” o “Banca dati”. All’interno di un Database i dati vengono organizzati in tabelle (Tables) il cui numero è uguale ad uno (nei casi più semplici) o in numero maggiore di uno nei casi più complessi, ovvero quando esistono più entità a descrivere l’evento reale. In quest’ultimo caso queste tabelle possono essere autonome oppure avere un legame logico tra loro. In questo caso si parla di Database relazionali, mentre nel caso di tabelle non relazionate si parla invece di Database piatto (flat).

Dunque, un Database non è altro che un contenitore di tabelle; nel caso in cui vi sia una sola tabella sarà essa stessa il Database. I dati veri e propri sono contenuti nelle tabelle, che a loro volta hanno una ben determinata struttura. Una tabella infatti è organizzata in righe (rows) e colonne (columns) a formare una sorta di matrice. In una tabella deve essere presente almeno una riga e ogni riga prende il nome di record.

All’interno di un record troviamo le informazioni suddivise in singoli dati o in gruppi omogenei di dati. Ogni singolo dato (o gruppo omogeneo di dati) prende, a sua volta, il nome di campo (field) del record. Le colonne identificano i campi e le righe identificano i record. A loro volta, i dati contenuti nei campi possono essere di natura diversa: testi, numeri, immagini statiche o dinamiche, suoni ecc. A seconda della loro natura si avrà il corrispondente formato di un dato.

Dalla teoria alla pratica il passo è breve. Infatti, una semplice tabella in un foglio di Excel è già un Database!

Facciamo un esempio. Supponiamo di dover descrivere la situazione metereologica di una città in un determinato periodo. Per far ciò abbiamo bisogno di conoscere il valore di alcuni dati elementari fondamentali come tempo, temperatura, venti, precipitazioni, umidità, visibilità… e poterli archiviare tutti distintamente, ad esempio ora per ora, nel periodo di osservazione. Possiamo utilizzare una tabella di Excel come nella figura seguente in cui nella prima riga sono riportati i nomi dei campi (le intestazioni di colonna) e i record (l’insieme dei dati orari di rilevazione) sono riportati nelle righe successive.

Figura 1 – Tabella dati

Anche un semplice Database come questo si rivela preziosissimo nel momento in cui poi i dati devono essere elaborati. L’importanza del Database sta proprio nella possibilità che offre di poter fare analisi e calcoli sui dati. Oltre che archiviare i dati, un Database ci permette infatti di poterli ordinare, filtrare, interrogare, analizzare ed effettuare molte altre operazioni necessarie ad estrapolare da essi informazioni preziose.

Quale Database?

Proprio per la loro importanza strategica, attorno ai Database si è sviluppato, nel tempo, un intero ecosistema che comprende non solo una vasta scelta di soluzioni hardware e software per la loro realizzazione ma anche una ampia classificazione di figure professionali.

Infatti, a seconda dell’ambito dei Database ci sono esperti preposti. A livello fisico di struttura ad esempio esiste il ruolo di Database Manager, gestore attivo di un database che si occupa della ‘salute’ del database e del suo miglioramento continuo in termini di hardware, sicurezza, utilizzo e fonte dati; iI Data Architect, colui che progetta i sistemi informativi, i flussi e i repositori dei dati in base alle necessità. A livello software invece esistono figure esperte di dati come il Data Engineer che lavora con i dati occupandosi della loro disponibilità, qualità e fruibilità a chi li utilizza; il Data Analyst invece analizza e interpreta i dati forniti per trasformarli in informazioni utili; infine il Data Scientist, un data analyst avanzato che gestisce i dati dal punto di vista strategico per il loro utilizzo nel business durante il processo decisionale.

Per lavorare con i Database sono richieste competenze ed hard skill specifiche e sfaccettate. Agli addetti dello strato fisico dei Database sono richieste conoscenze di diversi software di database come MySQL e Oracle e competenze avanzate, in particolare in linguaggi come SQL e XML. Per coloro che si occupano dell’architettura dei database linguaggi di codifica come Java, Python, Kafka, Hive o Storm. Infine agli analisti dei dati, la conoscenza di programmi informatici che vanno da Microsoft Excel, Microsoft Access, SharePoint e database SQL fino a linguaggi di programmazione come R o Python necessari ad implementare modelli matematici ed algoritmi di Intelligenza Artificiale.

Da qui possiamo già capire la complessità e la vastità del mondo dei Database. Basti pensare che grazie ad essi sono nati veri e propri imperi in ambito informatico. La Oracle Corporation con sede nella Silicon Valley, oggi una multinazionale del settore informatico, è diventata molto famosa nel panorama mondiale proprio con il suo prodotto di punta, il database Oracle!

Il problema nasce quando noi stessi dobbiamo poter archiviare dei dati in autonomia. A prescindere infatti dalla professione o ruolo aziendale abbiamo spesso e per diversi motivi la necessità di archiviare dei dati per poter così trovare più velocemente risposte utili … anche solo per ritrovare agevolmente la maglietta nei cassetti o il barattolo di maionese nel frigo!

Come dice Confucio «Non usare cannoni per uccidere zanzare» … così, in questi casi, dobbiamo trovare una soluzione semplice e, soprattutto,che non richieda sofisticate architetture software o il supporto di professionisti dei Database.

Sì … ma quale?

I file CSV

Uno strumento semplice di archiviazione alla portata di tutti, anche dei non-programmatori, è il file CSV.

Un file CSV non è altro che un semplice file di testo TXT ma con all’interno particolari simboli che ne determinano la struttura e che lo rendono adatto per la rappresentazione dei dati in forma tabellare … a tutti gli effetti è quindi un Database flat contenente dati strutturati.

CSV è l’acronimo di Comma-Separated Values (valori separati da virgole) ad indicare la particolarità di questo file di testo in cui ogni dato è separato da una virgola o un altro carattere. Essendo questi dati memorizzati in un formato di testo, i file .csv possono essere aperti con qualsiasi programma di gestione di file di testo semplice come, per esempio, il programma Microsoft Notepad presente in qualsiasi distribuzione di Microsoft Windows.

Una volta aperto un file CSV noteremo la particolarità di questo file di testo che appare come un elenco di dati con dei caratteri convenzionali che indicano come questi dati devono essere gestiti o interpretati. Per avere una idea precisa di cosa sono, riprendiamo l’esempio dei dati metereologici e convertiamo la tabella in Excel in formato CSV. Otteniamo:

Ora;Tempo;T (°C);Vento;Umidità;Precipitazioni;Quota 0°C;Visibilità;U.R.
16;coperto;6.1°;debole;86%;0.0;1170;>10km buona;86%
17;coperto;5.1°;debole;89%;0.0;1015;>10km buona;86%
18;coperto;5°;debole;89%;0.0;1170;>10km buona;90%
19;coperto;4.9°;debole;89%;0.0;1014;>10km buona;94%
20;pioggia debole;4.7°;modeste;0%;0.0;1012;>10km buona;94%
21;pioggia debole;4.6°;modeste;0%; 0.1;1012;>10km buona;95%
22;pioggia debole;4.4°;debole;96%; 0.1;1010;>10km buona;96%
23;pioggia debole;4.3°;debole;97%; 0.3;980;>10km buona;97%
24;pioggia debole;4.1°;debole;98%; 0.2;960;>10km buona;98%
1;pioggia debole;4°;debole;97%; 0.3;880;<10Km discreta;97%
2;pioggia;3.3°;debole;98%; 0.7;840;<10Km discreta;98%

In questo esempio il carattere che separa un dato dall’altro all’interno di ogni riga è il punto e virgola (;), i singoli dati sono i valori dei campi della tabella, la prima riga è quella che identifica i nomi dei campi, le righe successive i record dei dati archiviati. Salvando questa particolare tabella in formato .CSV abbiamo ottenuto un Database flat … semplice no?

Dallo stesso esempio appena riportato si evince la seconda potente caratteristica dei file CSV, ovvero quella di essere il più diffuso dei formati utilizzati per l’importazione ed esportazione di una tabella di dati in fogli elettronici o database.

Abbiamo infatti esportato il file .xls della tabella dati meteo in formato .csv. Altrettanto agevolmente possiamo importare il file csv in Excel dal menu “Dati/Carica dati esterni/Da testo” attraverso la procedura guidata che viene così richiamata.

Figura 2 – Procedura guidata importazione in Excel di un file csv

Il formato CSV non specifica una codifica di caratteri, né la convenzione per indicare il fine linea, né il carattere da usare come separatore tra campi, nel mondo anglosassone normalmente è una virgola mentre in Italia è il punto e virgola a causa dell’uso della virgola nei numeri decimali, e nemmeno convenzioni per rappresentare date o numeri in quanto tutti i valori sono considerati come semplici stringhe di testo.

Questi dettagli possono dover essere specificati dall’utente tutte le volte che si importano o esportano dati in formato CSV in un programma come ad esempio durante la procedura guidata in un foglio elettronico vista sopra.

La conversione del formato

Dobbiamo dunque prestare attenzione al contenuto dei file testuali prima di procedere con le varie procedure di importazione dei dati. Tutte le volte che abbiamo a che fare con un formato Americano ad esempio, i numeri decimali riportati nel testo utilizzeranno come separatore dei decimali il punto (.) anziché la virgola (,) e questo causerà non pochi problemi durante la conversione.

Per ovviare a questo inconveniente, basterà aprire il file con Notepad (o qualsiasi altro programma analogo) ed effettuare la sostituzione automatica del carattere punto (.) con la virgola (,). Tuttavia, dato che in molti file CSV i dati sono anch’essi separati dalla virgola (,), dobbiamo ricordarci di sostituire prima le virgole (,) con un punto e virgola (;). Prima sostituiamo le virgole (,) con punto e virgola (;) poi sostituiamo i punti (.) con le virgole (,) tassativamente in quest’ordine. Queste operazioni possono essere effettuate facilmente tramite il menu “Modifica” o “Edit” e selezionando l‘opzione “Sostituisci” o “Replace”. Fatta questa operazione procediamo con il salvataggio dei dati sovrascrivendoli e mantenendo lo stesso nome del file CSV.

A questo punto il file di testo è pronto per l’importazione in un nuovo software di elaborazione dei dati.

Importare dati tramite codice VBA

Nella realtà, automatizzare la lettura e l’importazione dei dati è fondamentale per risparmiare un notevole quantitativo di tempo e, soprattutto, eliminare i potenziali problemi ed errori che si possono verificare durante l’importazione.

Quando abbiamo a che fare con dati in formato diverso dalle nostre impostazioni internazionali non sempre è semplice procedere con le operazioni preliminari viste prima sul file di testo ma è necessario gestire i dati direttamente da codice VBA all’interno dell’applicazione (Excel).

Il codice VBA per leggere un file CSV come questo:

Figura 3 – File csv utilizzato per gli esempi

è il seguente:

Sub OpenFileCSV(ByVal FP As String)
   On Error GoTo GestioneErrore
   
   Dim R As Integer
   Dim L As String
   Dim FN As Integer
   Dim LI() As String

   FN = FreeFile
   Open FP For Input As #FN
   R = 0
   Do While Not EOF(FN)
      Line Input #FN, L
      LI = Split(L, ";")
      ActiveCell.Offset(R, 0).Value = LI(0) ‘Ora
      ActiveCell.Offset(R, 1).Value = LI(1) ‘Tempo
      ActiveCell.Offset(R, 2).Value = LI(2) 'T (° C)
      ActiveCell.Offset(R, 3).Value = LI(3) ‘Vento
      ActiveCell.Offset(R, 4).Value = LI(4) 'Umidità
      ActiveCell.Offset(R, 5).Value = LI(5) 'Precipitazioni
      ActiveCell.Offset(R, 6).Value = LI(6) 'Quota 0°C
      ActiveCell.Offset(R, 7).Value = LI(7) 'Visibilità
      ActiveCell.Offset(R, 8).Value = LI(8) 'U.R.

      R = R + 1
   Loop
   Close #FN
   Exit Sub
GestioneErrore:
   MsgBox "Errore caricamento file CSV"
End Sub 

All’interno del ciclo è presente la riga LI = Split(L, “;”) che provvede a separare la riga di testo L utilizzando il simbolo “;” come separatore. Otterremo così singole porzioni di testo che corrispondono proprio ai vari campi e ognuno di essi verrà aggiunto come elemento del vettore LI.

I successivi comandi si occuperanno di andare a riempire le celle con le varie parti del vettore. Per esempio l’ora, che è il primo campo, è contenuta dentro il primo elemento del vettore ovvero LI(0), dato che i vettori cominciano sempre dal numero 0. Il secondo campo è il tempo e il suo valore è contenuto dentro il secondo elemento del vettore che è LI(1), e così via per gli altri. Al termine della procedura saranno inseriti correttamente i vari campi nelle diverse celle. Questo codice contiene all’interno la decodifica manuale dei campi e dobbiamo quindi conoscerne la struttura.

Non sempre però siamo in grado di decifrare, in modo semplice e corretto, la natura dei dati da importare, o vorremmo procedere in modo più veloce per effettuare l’operazione. Inoltre, non bisogna dimenticare che, automatizzare troppo talvolta può significare creare potenziali errori, oltre che complicare anche di molto il codice senza trarne vantaggi proporzionati.

Una valida alternativa che risolve tutte insieme le precedenti problematiche sarebbe quella di utilizzare direttamente un software di web data extraction in grado di trasformare i dati non strutturati presenti nel web, di solito in formato HTML, in metadati che possono essere memorizzati e analizzati in locale in un database … ma questo apre scenari e riflessioni a parte … certamente materia per un nuovo articolo 😉

Oltre il CSV, l’XML

A questo punto potrebbe nascere tra qualche lettore il lecito dubbio sull’uso del file CSV nei casi più complessi di dati strutturati in quanto potrebbero sembrare troppo semplice e poco potente per questo tipo di operazioni di archiviazione e importazione che, invece, potrebbero essere affidate al file XML.

Il file XLM in realtà nasce per scopi ben diversi da quello trattato nel nostro articolo. E’ infatti un meta-linguaggio di markup, cioè un linguaggio che permette di definire nuovi linguaggi adatti a descrivere documenti strutturati. La parola “documenti” può far venire alla mente subito sia pagine web che altri prodotti dell’elaborazione di testi. In realtà il termine va considerato nel senso più esteso, come tutto ciò che contiene informazioni. Per questo l’XML è oggi molto utilizzato anche come archivio dati e mezzo per l’esportazione di dati tra sistemi diversi di gestione di basi di dati (DBMS).

L’XML è in pratica un file testuale che contiene una serie di tag, attributi e testo secondo regole sintattiche ben definite. E’ caratterizzato da una struttura gerarchica, affidata a componenti denominati elementi. Ciascun elemento rappresenta dunque un componente logico del documento e può contenere altri elementi (sotto elementi) o del testo.

Riferendoci sempre al caso dei dati meteo, un esempio di documento XML è il seguente:

Figura 4 – Esempio di documento XML

La definizione di un documento viene fatta attraverso l’uso di tag. A loro volta questi ultimi non sono definiti ed in numero limitato come per il formato HTML. Con l’XML è possibile definire sempre nuovi tag, a seconda delle esigenze. Questo rende l’XML uno degli strumenti più potenti e flessibili per la creazione, memorizzazione e distribuzione di documenti digitali.

Tuttavia la sua sintassi rigorosa non lo rende un linguaggio di semplice lettura e scrittura. Tutti i file XML infatti devono sottostare ad un principio fondamentale: devono essere ben formati (well formed). Questo comporta di sottostare ad una serie di regole rigide, a cui prestare molta attenzione pena la non validità del documento risultante.

Potremmo paragonare questo principio a quello della correttezza ortografica e grammaticale a cui deve sottostare una lingua quando si decide di utilizzarla per scrivere informazioni o per comunicare con altri. Tanto più la lingua è complessa, sia in termini logici che grammaticali, tanto meno saremo propensi ad utilizzarla per i nostri scopi divulgativi. Scegliere una lingua più semplice ed immediato si rivela spesso una scelta più azzeccata per comunicare con più persone possibili.

Allo stesso modo questo ci fa riflettere sull’utilizzo dell’XML come linguaggio di scambio di dati tra una sorgente ed un’altra. E’ davvero la scelta più idonea se lo stesso tipo di operazione può essere fatta in modo più semplice e veloce da CSV?

CSV, dati e Big Data

Oltre che la complessità della struttura di un documento, ciò che dobbiamo tener in considerazione quando parliamo di database è la loro grandezza, la mole di dati con cui abbiamo a che fare.

Certamente in questo articolo non stiamo prendendo in considerazione grandi quantità di dati come oggi giorno siamo abituati a sentire, i Big Data. Per archiviare questi dati infatti i file CSV non è il formato migliore. Come non lo è neanche l’XML. In queste situazioni infatti occorrerà lavorare con veri e propri software di archiviazione e gestione di database. Qui stiamo trattando file di dimensioni contenute e gestibili.

Dopo aver capito che il CSV è lo strumento più adatto al trasferimento di dati, la domanda che dobbiamo porci ora è: qual è il suo limite? Quante righe (record) posso gestire con i CSV?

In questo senso non esistono regole o risposte già stabilite. Pertanto sta a noi trovare una logica in base alla quale possiamo stabilire fino a quanto conviene usare i CSV per l’archiviazione e l’esportazione dei dati.

Lo strumento più diffuso al mondo, sia in ambito privato che professionale, per la raccolta e l’elaborazione di dati è per antonomasia l’Excel. Dunque, come metro di paragone, possiamo considerare la “capienza” di un normale file Excel e, di conseguenza, il limite potrebbe essere quello che riesce ad aprire Excel. La domanda precedente allora diventa: qual è il limite di gestione di un file Excel? Quante righe riesce a gestire?

Fino alla versione 2007 Excel gestisce 65.535 righe e 256 colonne. Dal 2010 in poi, gestisce fino oltre 1.000.000 di righe … che non è poco! Proviamo allora ad importare 65.535 righe da un file CSV, contenente dati differenti di prova, in Excel. Otteniamo:

Figura 5 – Importazione di 65535 righe

Quindi ci spingiamo oltre importando 1.048.575 righe, il massimo contenuto da Excel.

Figura 6 – Importazione di 1.048.575 righe

Ne segue che grazie ad un file CSV siamo in grado di gestire 1.048.575 record … in pratica potremmo archiviarci l’intera popolazione di Colonia! Un risultato sorprendente che si avvicina molto al concetto di Big Data e che legittima ancora una volta l’uso dei CSV nelle operazioni di interscambio dati.

Il problema si rimanda a quando si supera il numero delle righe che Excel riesce ad aprire. Ma si tratta comunque di casi lontani dalle ordinarie problematiche aziendali o personali quotidiane.

Conclusioni

In un mondo “dato-centrico” come quello in cui viviamo e lavoriamo è fondamentale per il nostro stesso benessere saper lavorare con i dati. Sono questi infatti la nuova moneta nella moderna economia. Saper prelevare i dati, trattarli, elaborarli ed infine prevederli permette un vantaggio competitivo enorme. Ecco perché saper disporre degli strumenti adeguati e conoscere le metodologie per il loro trattamento sta diventando oggi indispensabile.

In mancanza di strumenti ad hoc e/o professionisti in ambito Data Base, i CSV rispondono in modo appropriato alle più comuni esigenze di trattamento dei dati. La loro semplicità e, al contempo, la loro potenza li rende ad oggi il mezzo più diffuso per la gestione e la diffusione dei dati.

Come suggerisce anche il “rasoio di Occam” … la semplicità vince sempre!

Cosa abbiamo visto

  • Database
  • Formati
  • CSV
  • XML
  • Importazione ed esportazione dati
  • Conversione dati
  • Codice VBA

Se desiderate approfondire i temi trattati nell’articolo, li potete trovare nel libro al seguente link:

in cui l’intero capitolo 2 è dedicato ai dati, alla loro reperibilità e gestione.

Se ti è piaciuto questo articolo sarò felice se vorrai condividerlo con chi pensi possa interessargli 🙂

Torna su