- Utilizza SQLite e Python in locale per ricreare un ambiente di pratica SQL realistico senza bisogno di un data warehouse completo o di un cluster Spark.
- Per prima cosa, padroneggia le competenze SQL di base: filtraggio con WHERE, unione di più tabelle e aggregazione dei dati con GROUP BY e HAVING.
- Normalizza gli schemi in più tabelle con chiavi primarie e chiavi esterne, quindi utilizza le JOIN per ricostruire le relazioni nelle tue analisi.
- Unisci la pratica locale alle piattaforme SQL interattive per esercitarti con le domande in stile colloquio e riacquistare sicurezza nell'utilizzo dei moderni strumenti di analisi dei dati.
Se dopo qualche anno di pausa stai cercando di riprendere a usare SQL e Python, è assolutamente normale sentirsi spaesati. Soprattutto se nel tuo ultimo lavoro utilizzavi strumenti proprietari e comodi notebook Databricks che ora non possiedi più. Le offerte di lavoro moderne che richiedono Python, SQL e persino PySpark possono sembrare scoraggianti quando ogni guida inizia con qualcosa del tipo "carica il tuo dataset di sinistri nel tuo data warehouse" e pensi: "È proprio quello che non ho".
La buona notizia è che puoi ricreare gran parte di quell'esperienza di apprendimento sul tuo laptop. Utilizzando strumenti gratuiti, piccoli set di dati di esempio e una serie strutturata di problemi pratici, in questa guida illustreremo, in un linguaggio semplice, come costruire un ambiente locale realistico, come funziona SQL (dalle query di base alle JOIN e all'aggregazione) e come racchiudere queste query SQL in Python, in modo da poter esercitarsi esattamente con il tipo di attività che si affrontano nei moderni lavori nel settore dei dati.
Creazione di un semplice ambiente di pratica locale con SQLite e Python.
Non serve un data warehouse completo o un cluster Spark per esercitarsi con SQL e Python.Per l'apprendimento e la preparazione ai colloqui, un database embedded leggero come SQLite è più che sufficiente. SQLite memorizza tutti i dati in un singolo file su disco, il che lo rende perfetto per progetti di prova, prototipi ed esercizi didattici.
Concettualmente, un database SQLite assomiglia molto a un foglio di calcolo con più fogli.: ogni foglio è un tavolo, ogni riga è una recorde ogni colonna è una campoNel gergo dei database relazionali, le tabelle vengono talvolta chiamate "relazioni", le righe "tuple" e le colonne "attributi", ma nella pratica si possono tranquillamente utilizzare i termini di uso comune tabella, riga e colonna.
Python include un driver SQLite integrato chiamato sqlite3., il che significa che non è necessario installare un server di database separato. Il tuo script Python aprirà una connessione a un .sqlite file (creandolo se non esiste), ottenere un cursore oggetto (molto simile a un handle di file) e quindi inviare comandi SQL attraverso quel cursore utilizzando execute(). Vedi la nostra SELECT e WHERE in SQLite Guida con esempi pratici di lettura e filtraggio dei dati.
Sebbene questo articolo si concentri sull'utilizzo di SQLite tramite Python, esiste anche un pratico strumento con interfaccia grafica chiamato "Database Browser for SQLite". (a volte distribuito come DB Browser per SQLite). Con esso è possibile ispezionare visivamente le tabelle, inserire o modificare manualmente alcune righe ed eseguire semplici istruzioni SQL. È come un editor di testo per i file di database: le modifiche manuali rapide sono più facili nell'interfaccia grafica, ma qualsiasi operazione ripetitiva o complessa è meglio gestirla tramite script in Python.
I database relazionali sono più rigidi delle liste o dei dizionari Python: impongono uno schema definito.Quando crei una tabella devi dichiarare i nomi delle colonne e i tipi di dati previsti (testo, intero, data/ora, ecc.). SQLite memorizzerà e indicizzerà quindi i dati in modo da mantenere efficienti le ricerche, anche quando il set di dati cresce oltre la capacità di memoria disponibile. Per percorsi di apprendimento pratici ed esempi pratici, consulta análisis de datos con SQL.
Creazione di tabelle e inserimento di dati con SQL e Python
Per iniziare a fare pratica, la prima cosa che ti serve è una tabella: pensala come la progettazione della forma dei tuoi dati.. Supponiamo di voler creare una piccola tabella di libreria musicale. Utilizzando Python sqlite3 Questo modulo permette di connettersi a un file di database, eliminare qualsiasi versione precedente della tabella, se presente, e quindi creare una nuova tabella con colonne chiaramente tipizzate.
Ecco come appare concettualmente questo flusso in Python: tu chiami sqlite3.connect('music.sqlite') per aprire o creare il file del database, quindi chiamare conn.cursor() per ottenere un cursore. Tramite quel cursore è possibile eseguire comandi SQL come DROP TABLE IF EXISTS Songs per cancellare qualsiasi schema precedente, seguito da CREATE TABLE Songs (title TEXT, plays INTEGER) per definire una nuova tabella con due colonne.
Una volta che la tabella esiste, si passa da DDL (Data Definition Language) a DML (Data Manipulation Language) con INSERT dichiarazioniIn Python dovresti sempre usare query parametrizzate: scrivi INSERT INTO Songs (title, plays) VALUES (?, ?) e passare una tupla come ('Thunderstruck', 20) come secondo argomento a execute()I punti interrogativi sono segnaposto che Python sostituirà in modo sicuro, aiutandoti a evitare problemi di SQL injection e bug di virgolettatura.
Dopo aver eseguito inserimenti o aggiornamenti, è necessario chiamare conn.commit() per salvare le modifiche su discoFino al momento del commit, le operazioni risiedono solo in un buffer di transazione. Questo è diverso dalla semplice scrittura di file ed è una delle abitudini fondamentali da acquisire fin da subito: interrogare, modificare e poi confermare.
Per leggere i tuoi dati, usi un SELECT istruzione e iterare sul cursore. Per esempio, SELECT title, plays FROM Songs trasmetterà in streaming ogni riga come una tupla Python, come ad esempio ('Thunderstruck', 20)Il cursore non carica tutti i risultati contemporaneamente; al contrario, recupera le righe in modo differito, il che risulta utile quando si ha a che fare con set di dati più grandi.
Elementi principali delle query SQL e filtraggio con WHERE
Ogni query SQL è costruita su un piccolo insieme di clausole che appaiono in un ordine standard: SELECT, FROM, WHERE, GROUP BY, HAVINGe ORDER BY. Come minimo devi specificare quali colonne desideri (SELECT) e da quale tabella (FROMLe clausole opzionali consentono quindi di affinare, aggregare, filtrare i risultati aggregati e ordinare l'output.
Migliori WHERE La clausola filtra le righe prima che avvenga qualsiasi raggruppamento o aggregazione.. Per le colonne numeriche è possibile utilizzare operatori di confronto come =, != (o <>), >, <, >=, <=Le colonne di testo supportano queste funzionalità, oltre alla corrispondenza dei modelli tramite LIKE e verifiche di appartenenza tramite IN. I valori di data/ora supportano gli stessi confronti relazionali e spesso si vedono intervalli espressi con BETWEEN.
La gestione dei valori null in SQL è talmente particolare da meritare un'attenzione specifica.. Confronti regolari come = e != non comportarsi come ci si potrebbe aspettare con NULL, quindi SQL fornisce IS NULL e IS NOT NULL per verificare la presenza di valori mancanti. Le colonne booleane di solito funzionano con = e !=, ma hai ancora bisogno IS NULL quando il valore booleano stesso può mancare.
Quando combini più condizioni, ricorda che AND e OR seguire le regole di precedenzaSe scrivi age < 5 OR age > 10 AND breed = 'Ragdoll', SQL valuterà il AND Innanzitutto, per esprimere “gatti Ragdoll di età inferiore a 5 anni o superiore a 10 anni”, è necessario utilizzare le parentesi: (age < 5 OR age > 10) AND breed = 'Ragdoll'Acquisire familiarità con queste combinazioni logiche è fondamentale per il lavoro di analisi nel mondo reale.
Abbinamento di modelli con LIKE consente di cercare stringhe che iniziano, terminano o contengono determinati frammentiIl segno di percentuale % è un carattere jolly per qualsiasi sequenza di caratteri, quindi breed LIKE 'R%' trova razze che iniziano con “R”, fav_toy LIKE 'ball%' trova giocattoli i cui nomi iniziano con “palla”, e coloration LIKE '%m' trova schemi di colore che terminano con “m”. Abbinato a AND/OR, questo diventa un potente strumento per il filtraggio del testo.
Esercitazione su query a tabella singola con un set di dati di esempio.
Un metodo utile per sviluppare la memoria muscolare è quello di fissare un piccolo schema nella propria mente e risolvere molte query relative ad esso.. Immagina un cat tabella con colonne come id, name, breed, coloration, age, sexe fav_toyQuesto ti offre una varietà sufficiente – testo, numeri, semplici categorie – per esercitarti con la maggior parte dei modelli di query di base.
Per i controlli di tipo booleano, spesso si filtra in base a una colonna e poi si aggiungono ulteriori condizioni.Per elencare i gatti maschi “noiosi” che non hanno un giocattolo preferito registrato, dovresti selezionare name where sex = 'M' e fav_toy IS NULLQuesto esempio illustra come i controlli di nullità, combinati con confronti semplici, per isolare un sottoinsieme specifico di righe.
Per individuare razze specifiche o escluderle, si combina l'uguaglianza con la negazione logica.. Selezionare solo gatti Ragdoll di una certa età utilizza breed = 'Ragdoll'; escludendo i persiani e i siamesi potrebbe sembrare breed NOT LIKE 'Persian' AND breed NOT LIKE 'Siamese'. Mentre alcuni database supportano NOT IN ('Persian', 'Siamese'), la pratica del modello esplicito aiuta a consolidare la tua comprensione di NOT e LIKE.
Esercizi come "gatte femmine che amano i giocattoli interattivi e non sono persiane o siamesi" ti costringono a combinare filtri di testo, uguaglianza e operatori logici.. Dovresti selezionare id, name, breed, coloration e vincola le righe utilizzando sex = 'F', fav_toy = 'teaser'e una condizione composta che esclude le razze indesiderate. Prestare attenzione alle parentesi garantisce che tutte le sottocondizioni vengano applicate nella combinazione prevista.
Una volta che avrai familiarità con questi semplici esempi in SQL puro, reimplementali tramite Python utilizzando query parametrizzate.. Scrivi brevi script che chiedono razza, età minima o tipo di giocattolo da input(), collegali a WHERE clausole e stampare i risultati. Questo è esattamente il ponte tra la scrittura di query e il codice applicativo reale che molti ruoli junior nel settore dei dati si aspettano.
Comprensione e pratica delle JOIN SQL
Non appena supererai i problemi legati ai giocattoli, ti unirai costantemente a più tavoliLe JOIN sono il modo in cui si collegano set di dati correlati: clienti a ordini, artisti a opere d'arte, giochi a aziende e così via. In SQL, si specifica quali colonne devono corrispondere tra le tabelle e il motore del database unisce le righe in un set di risultati combinato.
Nei colloqui e nei progetti reali incontrerai quattro tipologie principali di join.: INNER JOIN (spesso scritto semplicemente JOIN), LEFT JOIN, RIGHT JOINe FULL OUTER JOIN. Un inner join restituisce solo le righe in cui entrambe le tabelle hanno chiavi corrispondenti; un left join mantiene tutte le righe della tabella sinistra, riempiendo NULLquando la tabella di destra non ha corrispondenza; un right join fa la cosa simmetrica; e un full outer join restituisce ogni riga da entrambi i lati, corrispondendo dove possibile e usando NULL dove no.
Considerare LEFT JOIN e RIGHT JOIN come operazioni “fidati di più di questa parte”Con un left join, la tabella di sinistra è la fonte primaria di verità: ogni riga di essa appare almeno una volta nell'output, anche quando la tabella di destra non contribuisce in alcun modo. Con un full join, nessuna delle due tabelle ha la precedenza: si uniscono semplicemente tutte le chiavi di entrambe le tabelle e le si allineano dove si sovrappongono.
Per mantenere leggibili le query multi-tabella, assegna sempre un alias alle tue tabelle.Invece di scrivere SELECT artist.name ripetutamente, scrivere FROM artist AS a e quindi fare riferimento alle colonne come a.name. Allo stesso modo, piece_of_art può diventare poae museum può essere mQuando la query si compone di tre o più join, l'utilizzo di alias appropriati fa la differenza tra chiarezza e caos.
Una configurazione di allenamento classica prevede l'utilizzo di tre tavoli: artist, museume piece_of_art. artist la tabella potrebbe contenere id, name, birth_year, death_year e un campo primario come l'acquerello o la scultura. museum negozi di tavoli id, name e country. piece_of_art tavolo contiene id, name, artist_id e museum_idLe ultime due colonne sono chiavi esterne che collegano ciascuna opera d'arte al suo creatore e alla sua ubicazione.
Con questo schema, puoi esercitarti con inner join, left join e filtri condizionali.. Ad esempio, per elencare gli artisti nati dopo il 1800 che hanno vissuto più di 50 anni, insieme ai titoli delle loro opere, dovresti unire artist e piece_of_art on artist.id = piece_of_art.artist_id e poi filtra con death_year - birth_year > 50 e birth_year > 1800. Assegnare un alias alle colonne selezionate come artist_name e piece_name per chiarezza.
Per visualizzare tutte le opere d'arte insieme ai nomi dei musei e ai paesi, comprese le opere "perdute" senza museo – useresti un LEFT JOIN da piece_of_art a museum on museum_id. In questo modo, le opere d'arte senza un museo associato appaiono comunque nel risultato, con NULL nelle colonne del museo. Filtraggio delle righe in cui artist_id IS NULL ti permette di scoprire opere di artisti sconosciuti pur rimanendo aderente ai musei che le ospitano.
Gli esercizi più avanzati prevedono di unire tre tabelle contemporaneamente.Per elencare ogni opera d'arte con sia l'artista che il nome del museo, dovresti unirti museum a piece_of_art on museum.id = piece_of_art.museum_id, quindi unisciti artist on artist.id = piece_of_art.artist_idUtilizzando il semplice JOIN (inner join) elimina intenzionalmente le opere d'arte che non hanno un artista o un museo, dandoti un'idea di come il tipo di join influisce sul conteggio delle righe.
Aggregazione, GROUP BY e HAVING in pratica
Una volta che si è in grado di recuperare e unire i dati, la prossima grande abilità consiste nel riassumerli.. Funzioni di aggregazione come SUM(), AVG(), COUNT(), MAX()e MIN() Calcola le metriche su insiemi di righe. GROUP BY suddivide il tuo set di dati in gruppi e applica tali funzioni all'interno di ciascun gruppo, ad esempio un gruppo per anno, per azienda o per artista. Se preferisci corsi strutturati per mettere in pratica questi concetti, consulta un Corso completo di SQL.
Immagina un semplice sales_table con colonne year, monthe salesUna pianura SELECT SUM(sales) AS total_sales FROM sales_table ti dà il totale complessivo su tutte le righe. Aggiungendo GROUP BY year La domanda cambia: ora si chiede il totale delle vendite annue anziché un singolo dato complessivo.
La regola chiave è che ogni colonna non aggregata nel tuo SELECT deve apparire in GROUP BY. Se si seleziona year e SUM(sales), tu raggruppi per year. Se si seleziona year e month insieme agli aggregati, quindi si raggruppa per entrambi year e monthConcettualmente, le combinazioni distinte delle colonne raggruppate definiscono i gruppi.
WHERE e HAVING Sono entrambi filtri, ma agiscono in fasi diverse. WHERE Filtra le righe grezze prima di qualsiasi raggruppamento o aggregazione. HAVING filtra i risultati raggruppati utilizzando espressioni aggregate. Ad esempio, potresti WHERE production_year BETWEEN 2000 AND 2009 e poi HAVING SUM(revenue) > 4000000 mantenere solo le aziende i cui "giochi di successo" hanno generato più di quattro milioni di dollari di fatturato.
Uno schema di pratica più realistico è un games tavolo con colonne come id, title, company, type, production_year, system, production_cost, revenuee ratingCon questa singola tabella è possibile eseguire calcoli di media, conteggio, somma, raggruppamento e classificazione: le operazioni fondamentali dell'analisi SQL.
Ad esempio, per calcolare il costo medio di produzione dei giochi pubblicati dal 2010 al 2015 con una valutazione superiore a 7, selezioneresti AVG(production_cost) e vincolare le righe con WHERE production_year BETWEEN 2010 AND 2015 AND rating > 7Questa è una classica domanda da colloquio di lavoro, e puoi facilmente inserirla in Python e stampare il singolo numero risultante.
È inoltre possibile produrre statistiche a livello annuale direttamente dallo stesso games tavoloRaggruppa per production_year, quindi calcola COUNT(*) AS count, AVG(production_cost) AS avg_coste AVG(revenue) AS avg_revenueQuesto tipo di query fornisce una visualizzazione compatta delle serie temporali, estremamente comune nei dashboard e negli strumenti di reporting di Business Intelligence.
Per classificare le aziende in base all'utile lordo su tutti gli anni, è possibile aggregare su company. Un modello pratico è SELECT company, SUM(revenue - production_cost) AS gross_profit_sum FROM games GROUP BY 1 ORDER BY 2 DESC. Qui GROUP BY 1 e ORDER BY 2 utilizzare le posizioni delle colonne nel SELECT elenco, che può mantenere le cose concise ma deve essere usato con attenzione per evitare di compromettere le query riordinando le colonne in seguito.
I prompt più complessi collegano filtri, raggruppamenti e filtri di post-aggregazione.Supponiamo di definire "buoni giochi" quelli prodotti tra il 2000 e il 2009, con una valutazione superiore a 6 e un ricavo maggiore del costo di produzione. Per ogni azienda, si desidera il numero di tali giochi più il loro ricavo totale, ma solo per le aziende il cui ricavo derivante da buoni giochi supera 4,000,000. Si filtrerebbero le righe con WHERE on production_year, ratinge redditività, raggruppati per company, calcolare COUNT(company) e SUM(revenue), quindi applica HAVING SUM(revenue) > 4000000Questa singola query racchiude la maggior parte dei passaggi mentali concreti che incontrerai nelle attività di analisi dati.
Modellazione dei dati con più tabelle e chiavi
I modelli a tabella singola sono piuttosto efficaci, ma i database relazionali danno il meglio di sé quando si normalizzano i dati su più tabelle.La normalizzazione è il processo di eliminazione dei dati ridondanti e di rappresentazione delle relazioni tramite chiavi. Questo permette di mantenere il database più piccolo, più veloce e meno soggetto a errori.
Un esempio semplice ma istruttivo proviene dall'analisi di grafici sociali simili a Twitter.Supponiamo di voler tenere traccia degli account utente e delle relazioni di "follower" tra di essi. Un approccio ingenuo potrebbe essere quello di utilizzare una singola tabella in cui ogni riga duplica sia il nome del follower che quello del followed come testo. Questo porta rapidamente a molte ripetizioni e a errori di ortografia.
Invece, dividi le cose in un People tabella e a Follows tavolo. People potrebbe avere un numero intero id come chiave primaria, univoco name (il nome utente o handle) e un retrieved Indicatore che segnala se hai già eseguito la scansione dell'elenco amici di quell'account. Follows contiene coppie di numeri interi from_id e to_id, che rappresentano connessioni dirette da un utente all'altro.
Questo modello è strutturato da tre concetti chiave: chiavi logiche, chiavi primarie e chiavi esterne.. Una chiave logica è ciò che il mondo esterno usa per riferirsi a un record – qui, l'handle di Twitter in name. Una chiave primaria è solitamente un numero intero generato dal database (id) che identifica in modo univoco ogni riga ed è economico da indicizzare e confrontare. Una chiave esterna è un numero intero che punta a una chiave primaria in un'altra tabella – from_id e to_id nella Follows la tabella sono chiavi esterne di riferimento People.id.
Per garantire la qualità dei dati, è necessario dichiarare dei vincoli nelle definizioni delle tabelle.. Per esempio, name TEXT UNIQUE in People garantisce che non sia possibile inserire accidentalmente due righe con lo stesso handle. A UNIQUE(from_id, to_id) successo in Follows impedisce di memorizzare lo stesso arco di inseguimento più di una volta. Questi vincoli fungono anche da rete di sicurezza quando si inizia a scrivere la logica di upsert in Python.
In Python sqlite3 modulo, uno schema comune è quello di utilizzare INSERT OR IGNORE rispettare con grazia tali vincoli. Se si tenta di inserire un name che esiste già, SQLite salterà silenziosamente l'operazione invece di generare un errore. Puoi quindi controllare cursor.rowcount per verificare se una riga è stata effettivamente aggiunta e fare affidamento su cursor.lastrowid per scoprire l'assegnato id per gli utenti appena inseriti.
Quando il tuo codice riceve un nuovo nome utente, dovrebbe prima provare a cercare il corrispondente id. Se una SELECT id FROM People WHERE name = ? restituisce una riga, riutilizzi quell'intero. Altrimenti, inserisci il nome con retrieved = 0, conferma e poi leggi lastrowidQuesto schema di "ricerca o inserimento" è alla base di molti script di acquisizione dati.
Una volta noti gli ID sia del follower che del followee, registrando la relazione in Follows è solo un altro INSERT OR IGNORE. Il tuo UNIQUE(from_id, to_id) Il vincolo risolve i duplicati e ti consente di concentrarti sulla logica di livello superiore relativa alla scelta dei profili da analizzare successivamente, anziché sulla gestione dettagliata della deduplicazione delle righe.
Utilizzo di JOIN per ricostruire le relazioni da tabelle normalizzate
Gli schemi normalizzati sacrificano la ridondanza a favore dell'indirezione: si memorizzano numeri interi anziché stringhe ripetute, ma ora è necessario unire le tabelle per ricostruire il quadro completo.Questo è esattamente ciò che SQL JOIN è stato progettato per questo, e una volta che ci si abitua, le query con molte JOIN risultano del tutto naturali.
Nell'esempio del social-graph, se vuoi vedere chi è l'utente con id = 2 sta seguendo, ti uniresti Follows a People sul lato bersaglio. Concettualmente, si corre SELECT * FROM Follows JOIN People ON Follows.to_id = People.id WHERE Follows.from_id = 2Questo genera righe combinate che contengono sia il collegamento numerico che il nome leggibile dall'uomo per ogni seguito.
Ogni riga in quel risultato è una “meta-riga” che unisce le colonne di entrambe le tabelle. Le prime due colonne potrebbero essere (from_id, to_id) da Follows, mentre le colonne successive appartengono a People - piace (id, name, retrieved). Poiché l' JOIN la condizione impone Follows.to_id = People.idCome si può notare, questa relazione è esplicita: la seconda colonna e la terza colonna di ogni riga corrispondono.
Questo stesso schema si estende naturalmente ad altre tabelle.. L'hai già visto con artist, piece_of_arte museume il crawler di Twitter lo illustra con People e FollowsIn pipeline analitiche più complesse, è possibile unire tabelle dei fatti (eventi, ordini) a più tabelle dimensionali (utenti, prodotti, campagne) per rispondere a domande sfaccettate.
Quando si esegue il debug del codice o si impara come funziona lo schema, un flusso di lavoro del tipo "esegui Python, quindi ispeziona con DB Browser per SQLite" è estremamente efficace. Esegui lo script per popolare il database, chiudi qualsiasi istanza GUI che mantiene il file bloccato, quindi apri il .sqlite file nel browser. Da lì è possibile esaminare il contenuto di ogni tabella ed eseguire analisi ad hoc SELECT interroga per verificare le tue ipotesi.
Un avvertimento: SQLite impone il blocco dei file, quindi se il DB Browser ha il database aperto in modalità di modifica, il tuo script Python potrebbe non riuscire a connettersi o a eseguire il commit.La soluzione consiste nel chiudere il database nell'interfaccia grafica (o chiudere completamente il browser) prima di eseguire nuovamente il codice Python. Prendere l'abitudine di chiudere gli strumenti che bloccano il file del database vi eviterà misteriosi errori del tipo "database bloccato".
Mettendo insieme queste tecniche – progettazione dello schema, vincoli, query parametrizzate in Python, JOIN, GROUP BY e HAVING – si ottiene un potente laboratorio locale Per esercitarsi esattamente sul tipo di lavoro che si svolgerà con SQL e Python. Con nient'altro che SQLite e alcune tabelle di esempio ben strutturate, è possibile esercitarsi con domande in stile colloquio, prototipare logiche analitiche e ritrovare la sicurezza con i moderni strumenti di analisi dei dati.
Dove si inseriscono piattaforme come DataLemur e corsi interattivi
Oltre alla pratica locale, le piattaforme interattive possono offrire un'esperienza più guidata con feedback immediato.Gli strumenti nati da esperienze concrete nel settore, come ad esempio le piattaforme create da ex ingegneri dei dati di Facebook e Google che trascorrevano le loro giornate a scrivere codice SQL e Python e a condurre test A/B, spesso incentrano i loro contenuti su domande di colloquio e scenari di analisi reali.
I libri che trattano di statistica, apprendimento automatico e intuizione aziendale per i colloqui sui dati sono ottimi per la teoriama non sempre forniscono l'ambiente di test SQL pratico che molti studenti desiderano. È proprio questo il divario che alcuni strumenti moderni mirano a colmare: ripropongono centinaia di domande in stile colloquio in un ambiente SQL e di analisi nel browser, in modo da poter eseguire, modificare e rieseguire le query senza preoccuparsi della configurazione locale. Puoi anche provare esempi applicati come valutazione del rischio di abbandono dei clienti Combinare SQL con flussi di lavoro di base di apprendimento automatico.
Troverete anche corsi SQL interattivi che rispecchiano gli argomenti che abbiamo trattato qui.: query a tabella singola con SELECT e WHERETra le operazioni proposte figurano join tra due o tre tabelle, aggregazioni e raggruppamenti, subquery e altro ancora. Molti di questi corsi si basano su set di dati realistici – si pensi a giochi, musei o vendite transazionali – in modo che le domande sembrino veri e propri problemi aziendali piuttosto che enigmi artificiosi.
Se ti senti sopraffatto dalla documentazione di strumenti come PySpark, DuckDB o dbt, è perfettamente ragionevole rimandarne lo studio fino a quando non avrai acquisito solide basi di SQL.Concentrarsi inizialmente su SQLite e Python permette di interiorizzare i modelli di query fondamentali senza dover affrontare configurazioni di cluster o permessi cloud. Una volta acquisite le basi, imparare PySpark diventa più incentrato sull'esecuzione distribuita che su nuovi concetti di query.
In definitiva, la combinazione di una semplice configurazione locale, problemi di pratica strutturati e l'uso occasionale di piattaforme interattive Ti offre il meglio di entrambi i mondi: pieno controllo sul tuo ambiente, solide basi concettuali ed esposizione al tipo di domande che i migliori datori di lavoro apprezzano. Con una pratica costante, il mix, un tempo scoraggiante, di SQL, Python e strumenti di ingegneria dei dati diventa un insieme di strumenti familiari, persino piacevoli, che potrai utilizzare con sicurezza in nuovi ruoli.
Riassumendo, il percorso da seguire è chiaro: crea un database SQLite con Python, progetta alcune tabelle realistiche, esercitati con i pattern SQL di base e intermedi (filtri, join, aggregazione, raggruppamento, HAVING), racchiudi queste query in script Python e, facoltativamente, integra il tuo apprendimento con piattaforme SQL interattive create da professionisti che hanno già affrontato la tua stessa situazione.In questo modo, rinnoverai il tuo istinto tecnico, ridurrai l'ansia legata alle moderne architetture dati e sarai pronto ad affrontare le esigenze di SQL e Python richieste dai ruoli odierni nel settore dei dati.