Dai, finalmente ci occupiamo della preparazione delle tabelle per il caricamento massivo dei dati dai file CSV. Se pensi: "Ma perché dovrei preparare la tabella? Cosa c'è di difficile?", allora ti manca ancora un bel po' di esperienza col mondo reale. Nessun file è mai "perfetto". C'è sempre qualche rogna — duplicati, spazi inutili, errori nei tipi di dati o semplicemente una struttura che non combacia.
Vediamo come preparare bene il database, così il file CSV si carica senza drammi.
Prima di caricare un file CSV, decidi come i dati verranno salvati nel database. Questo significa che prima devi creare una tabella con la struttura giusta.
Esempio: caricamento dei dati degli studenti
Supponiamo di avere un file CSV students.csv con le info sugli studenti. Il suo contenuto è così:
id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics
Sulla base di questo creiamo una tabella:
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- Identificatore unico dello studente
name VARCHAR(100) NOT NULL, -- Nome dello studente (stringa fino a 100 caratteri)
age INT CHECK (age > 0), -- Età dello studente (deve essere maggiore di 0)
email VARCHAR(100) UNIQUE, -- Email unica
major VARCHAR(100) -- Specializzazione principale
);
id SERIAL PRIMARY KEY: Abbiamo aggiunto una chiave primaria per identificare in modo unico le righe. Se il tuo file CSV ha già identificatori unici, usa la colonnaiddal file.name VARCHAR(100) NOT NULL: Il nome dello studente deve essere presente e la lunghezza è limitata a 100 caratteri.age INT CHECK (age > 0): L'età deve essere un numero e aggiungiamo un controllo per essere sicuri che sia sempre maggiore di 0.email VARCHAR(100) UNIQUE: L'email deve essere unica, così evitiamo doppioni.major VARCHAR(100): Indica la specializzazione principale dello studente. Qui non ci sono limiti particolari.
Le tue tabelle devono essere strutturate con criterio, così da adattarsi ai dati e allo stesso tempo proteggere da dati sbagliati. Questo riduce gli errori durante il caricamento.
Controllo dei dati prima del caricamento
I file CSV spesso riservano sorprese. Prima di caricare i dati, assicurati che rispettino la struttura della tabella.
Come controllare i dati?
Corrispondenza delle colonne
Assicurati che il numero di colonne nel CSV sia uguale a quello della tabella. Per esempio, se la tabella ha 5 colonne e il CSV ne ha 6, il caricamento fallirà.Tipi di dati
Controlla che i dati in ogni colonna siano del tipo giusto. Ad esempio, nella colonnaageci devono essere solo numeri interi.
Strumenti per la validazione
Excel o Google Sheets. Apri il file in un editor di fogli di calcolo e assicurati che non ci siano righe vuote o celle con dati sbagliati.
Python. Usa la libreria pandas per controllare i tipi di dati:
import pandas as pd
# Leggiamo il CSV
df = pd.read_csv('students.csv')
# Controlliamo i dati
print(df.dtypes) # Mostra i tipi di dati per ogni colonna
print(df.isnull().sum()) # Controlla i valori vuoti
Pulizia dei dati prima del caricamento
Quasi sempre i dati da fonti esterne hanno bisogno di una pulizia. Altrimenti rischi di trovarti errori durante il caricamento.
Problemi tipici con i file CSV
Righe o colonne vuote
Se manca un valore in una colonna obbligatoria (NOT NULL), avrai un errore.
Esempio di dati non validi:
id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics
Soluzione: Sostituisci i valori vuoti con qualcosa di valido. Ad esempio, sostituisci age vuoto con NULL.
Spazi inutili
Gli spazi all'inizio o alla fine delle stringhe possono creare problemi. Per esempio, "Alex" e "Alex " vengono visti come valori diversi.
Soluzione in Python: togli gli spazi inutili.
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
Caratteri strani o codifica
Se il file contiene caratteri speciali non compatibili col database, il caricamento può fallire.
Esempio: Usa l'app iconv per cambiare la codifica:
iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv
Pulizia dei dati: esempio con Python
import pandas as pd
# Leggiamo il file
df = pd.read_csv('students.csv')
# Puliamo i dati
df['name'] = df['name'].str.strip() # Togliamo gli spazi
df['email'] = df['email'].str.lower() # Mettiamo l'email in minuscolo
df['age'] = df['age'].fillna(0) # Riempiamo i valori vuoti per l'età
df['age'] = df['age'].astype(int) # Convertiamo l'età in intero
# Salviamo le modifiche in un nuovo file
df.to_csv('cleaned_students.csv', index=False)
Controlla sempre i dati prima di caricarli. Ricorda: un bravo programmatore si risparmia tempo risolvendo i problemi in anticipo!
Checklist utile per preparare tabelle e dati
Prima di iniziare a lavorare con i CSV controlla:
- La struttura della tabella corrisponde ai dati (colonne, tipi di dati, vincoli).
- Il file CSV non contiene righe vuote, spazi inutili o caratteri strani.
- La codifica del file è compatibile con PostgreSQL (meglio usare UTF-8).
- Stai usando strumenti per analizzare e pulire i dati (tipo Python, Excel).
Ora sei pronto per caricare i dati dal CSV! Ma prima di farlo, assicurati che la tua tabella sia strutturata bene e i dati siano puliti. Nella prossima lezione continueremo a vedere come caricare i dati in PostgreSQL, inclusa la gestione degli errori e dei conflitti.
GO TO FULL VERSION