5. Arxius separats per comes. CSV
1. Arxius CSV
Un fitxer de valors separats per comes (CSV) és un fitxer de text estàndard que utilitza una coma (,) per separar els valors. Cada línia del fitxer consisteix en un o més camps separats per comes. Cada camp pot o no estar tancat entre cometes dobles. A més, diversos formats utilitzen diferents caràcters com a separador, com el punt i coma (;) o el símbol de numeral (#).
El RFC 4180 defineix el format o les definicions d'un fitxer CSV o fitxer de text/csv.
El format CSV és útil per coses com:
- Senzill d'implementar i de llegir, a més de compatibilitat entre plataformes. Això és degut a que son fitxer de text pla.
- Compatibilitat: programes com Excel i Google Sheets permeten la manipulació d'aquest fitxer. Ademés la majoria de llenguatges moderns incorporen llibreries de manipulació d'aquest format
- Ocupa menys espai que els seus respectius JSON o CSV, degut a que les etiquetes sols apareixen un cop, en la linia de capçalera. S'ha convertit en l'estàndar de facte (no imposat per ningú, sinò per la pròpia comunitat) per a representar conjunts de dades per a IA i Big Data
El CSV és molt útil si les dades son simples i no son estructurades.
| Text Only | |
|---|---|
El CSV no és adequat en dades estructurades
2. Separador
En cas que el símbol utilitzat com a separador aparegui dins dels valors, és una bona idea tancar el contingut entre cometes. Es pot veure un exemple de fitxer CSV aquí:
3. Processament
La manera de processar un fitxer CSV en Java és:
- Obrir el fitxer com a fitxer de text per a la lectura. Hem de llegir línia per línia, ja que cada línia és un registre. Llegir una línia en una variable de tipus
String. - Processar els registres individuals:
- Podem separar cada camp. Una bona opció és utilitzar el mètode
split(char)de la classe String. Obtinguem un array de cadenes amb els valors dels camps individuals. - Processar cada valor de camp segons les necessitats.
- Podem separar cada camp. Una bona opció és utilitzar el mètode
Atenció
És una bona idea començar a utilitzar les classes abstractes Files i Paths. Aquestes classes milloren l'ús de la classe File i les seves classes derivades, oferint mètodes útils que ens permeten realitzar operacions ràpides amb menys línies de codi. Per exemple, la següent línia, a partir del filename, l'obre i després llegeix tot el fitxer, retornant una llista amb les línies separades en cada element de la col·lecció.
| Java | |
|---|---|
Més informació a:
| Text Only | |
|---|---|
1 2 | |
4. Exercici proposat
A partir de la classe mòdul vista anteriorment:
- Afig un constructor que a partir de una línia del CSV cree el objecte mòdul
- Afig un mètode a la clàsseque convertisca el objecte en un línia CSV
- Crea un funcío que guarda tot el array de curs a un arxiu CSV
- Compara el tamany del fitxer respecte al JSON o XML
- Crea una funció que llig el CSV i genere els objectes a l'array
Ampliació
A aules tens un dataset d'entrenament de models de IA. Es trata de wine_reviews, opinions i caarcteríístiques sobre molts vins del món (el dataset pesa >= 50MB). Les característiques que tenim son (primera línea del csv):
| Text Only | |
|---|---|
Eixa primer coma al principi és que hi ha una primera columna que és el id de cara review, per tant podria ser perfectament
id,country,description,designation,points,price, province,region_1,region_2,taster_name, taster_twitter_handle,title,variety,winery
Es demana:
- Carrergar-lo en memòria. Quina estructura trobes que és la òptima?
- Quantes reviews hi han en total
- Localitza i genera un llistat de:
- Aquelles reviews que els falta alguna columna
- Aquelles columnes que els falta alguna data en alguna fila