Panda vs. SQL - Parte 4: Panda è più conveniente
tl; dr: In questo post, confrontiamo Pandas vs. SQL sul terzo di tre assi: convenienza. Descriviamo sei modi in cui il modello di dati dataframe Pandas è più conveniente per i casi d'uso di data science e machine learning.
In questa quarta offerta della nostra epica battaglia tra Pandas e SQL, illustriamo come Pandas sia più conveniente di SQL per la scienza dei dati e l'apprendimento automatico. Pandas è stato progettato da data scientist per data scientist e ha beneficiato di migliaia di miglioramenti forniti con entusiasmo dalla comunità di data science open source, il tutto con un occhio rivolto a una maggiore utilità e facilità d'uso. Quindi non sorprende che sia una buona misura!
Prima di iniziare, se ti sei perso le nostre precedenti offerte Pandas vs. SQL, puoi ancora recuperare qui: Parte 1: The Food Court e il ristorante in stile Michelin , Parte 2: Pandas è più conciso e Parte 3: Pandas è più Flessibile . I nostri post precedenti si sono concentrati sui confronti tra il modello di dati del dataframe e l' algebra del dataframe : in questo post, ci concentriamo sull'ergonomia del dataframe: in particolare, come vengono utilizzati i dataframe.
Per una facile ricerca, ecco un pratico elenco dei molteplici modi in cui i dataframe Pandas sono più convenienti delle loro controparti relazionali/SQL:
- In Pandas, puoi costruire query in modo incrementale man mano che procedi; in SQL, non puoi.
- In Pandas, operare e nominare i risultati intermedi è facile; in SQL è più difficile.
- In Pandas, è facile avere un rapido senso dei dati; in SQL è molto più difficile.
- Pandas ha il supporto nativo per la visualizzazione; SQL no.
- Pandas semplifica l'apprendimento automatico; SQL no.
- Pandas preserva l'ordine per aiutare gli utenti a verificare la correttezza dei passaggi intermedi e consente agli utenti di operare su ordine; SQL no.
1. In Pandas, puoi costruire query in modo incrementale man mano che procedi; in SQL, non puoi.
Un'importante distinzione tra Panda e SQL è che Panda consente agli utenti di sovrapporre in modo incrementale le operazioni ad altre per costruire query più complicate. Allo stesso tempo, gli utenti possono ispezionare i risultati intermedi di questi frammenti di query, nel tentativo di verificarne la correttezza man mano che procedono. Il debug è un gioco da ragazzi con Pandas!
Quindi, nel nostro set di dati, diciamo che vogliamo concentrarci sui permessi corrispondenti a Geary Street. Possiamo estrarre quel sottoinsieme del set di dati come segue:
Una cosa che potremmo aver notato è che Geary si estende su molti quartieri, codificati qui come 'Neighborhoods - Analysis Boundaries'
. Supponiamo di voler solo esaminare questa colonna 'Neighborhoods - Analysis Boundaries'
(e eliminare le restanti 42 colonne), possiamo semplicemente aggiungere la clausola [['Neighborhoods - Analysis Boundaries']]
alla fine dell'espressione precedente.
Questo è un sacco di righe: 1966. Poi, come ultimi due passaggi, supponiamo di voler identificare i quartieri di Geary con il maggior numero di permessi. Un modo per farlo è aggiungere un 'sort_values'
seguito da un 'value_counts'
.
Interessante, quindi il quartiere migliore è Tenderloin, seguito da Outer Richmond. Si noti che sebbene questa sequenza di operazioni possa certamente essere espressa in SQL, sarebbe stata molto più dolorosa. Non possiamo semplicemente aggiungere operatori alla fine della query SQL: ci sono posizioni specifiche all'interno della query in cui avremmo bisogno di apportare modifiche. Ad esempio, per modificare le colonne visualizzate, dovremmo modificare la SELECT
parte della query all'inizio. Pandas invece ti consente di pensare in modo operativo (o imperativo) e costruire il tuo risultato finale passo dopo passo, esaminando nel contempo i risultati intermedi.
2. In Pandas, operare e nominare i risultati intermedi è facile; in SQL è più difficile.
Pandas, poiché è incorporato in un vero linguaggio di programmazione, Python, prende in prestito molti degli idiomi programmatici familiari per operare sui dataframe. In particolare, possiamo assegnare un'espressione dataframe a una variabile; queste variabili possono quindi essere utilizzate e/o assegnate ad altre variabili.
Faremo un semplice esempio per illustrare. Poiché questo set di dati proviene da una sfida di pulizia dei dati, supponiamo che sospettiamo che potrebbero esserci molti valori nulli. Possiamo controllare quanti ce ne sono per colonna, usando quanto segue:
Sono molti valori nulli! Supponiamo di voler creare una versione pulita del mio set di dati, eliminando le colonne con troppi valori null, con la soglia impostata su 190000 valori non null. (Il set di dati complessivo ha circa 199000 righe.)
Wow, il numero di colonne scende da 43 a solo 13. Come abbiamo visto qui, siamo stati in grado di definire facilmente una nuova variabile 'sf_permits_cleaned'
(proprio come abbiamo creato la variabile precedente 'missing_values_count'
), utilizzando l'assegnazione di variabili programmatiche standard e successivamente operare su di essa. Questo approccio è naturale per i programmatori. In SQL, è possibile ottenere un effetto simile tramite le viste, ma definire le viste e operare su di esse è meno intuitivo e più complicato.
3. In Pandas, è facile avere un rapido senso dei dati; in SQL è molto più difficile.
Pandas offre modi rapidi per comprendere i dati e i metadati di un dataframe. Abbiamo già visto esempi di questo quando stampiamo un dataframe semplicemente usando il suo nome di variabile, o se usiamo le funzioni 'head/tail()'
. Per comodità, per adattarsi a uno schermo, alcune righe e colonne sono nascoste '...'
per aiutare gli utenti a ottenere comunque un'immagine di alto livello dei dati.
Se vogliamo ispezionare un riepilogo delle colonne e dei loro tipi, una comoda funzione offerta da Pandas è 'info()'
, che elenca le colonne del set di dati, i loro tipi e il numero di valori nulli. Possiamo usare questa funzione per ispezionare il dataframe che abbiamo appena creato.
Quindi sembra che l'unica colonna che contiene ancora valori nulli sia la colonna della descrizione; tutte le altre colonne sono completamente compilate.
Un'altra utile funzione Pandas, mirata alle colonne numeriche, è 'describe()'
, che fornisce un comodo riepilogo di queste colonne, con conteggi, medie, deviazioni standard e quantili.
Hmm, quindi sembra che ci sia un numero civico 0. Curioso!
Sfortunatamente, SQL non offre comodità simili per comprendere la forma e le caratteristiche del proprio set di dati: dovresti scrivere query personalizzate per questo scopo. Per l'esempio precedente, la lunghezza di questa query sarebbe proporzionale al numero di colonne numeriche.
4. Pandas ha il supporto nativo per la visualizzazione; SQL no.
L'analisi delle tabelle dei numeri ti porterà solo finora. Spesso ciò di cui hai bisogno sono modi visivi per dare un senso alle informazioni nei dataframe. A differenza di SQL, che richiede di caricare i dati in una visualizzazione separata o in uno strumento BI (Business Intelligence), Pandas offre supporto di visualizzazione integrato direttamente all'interno della libreria. Ad esempio, posso semplicemente chiamare 'plot()'
per vedere un grafico a barre 'Current Status'
dei vari permessi.
Sembra che la stragrande maggioranza dei permessi rientri nelle categorie completate, rilasciate e archiviate, con un piccolo numero in altre categorie.
La potenza di questa funzionalità è ovvia: a differenza dei database SQL, non è necessario uscire dalla libreria se si desidera generare visualizzazioni: è possibile farlo direttamente da lì! Se desideri "potenziare" la tua esperienza di visualizzazione, esistono numerose librerie di visualizzazione che si integrano strettamente con i panda, tra cui Matplotlib , seaborn e altair . E se sei pigro, come me, e non desideri scrivere alcun codice per generare visualizzazioni, puoi utilizzare Lux , la nostra libreria di consigli per la visualizzazione nativa di Pandas, per generare automaticamente visualizzazioni per te, tutte sintonizzate sul tuo set di dati . Leggi di più su Lux qui .
5. Pandas semplifica l'apprendimento automatico; SQL no.
L'apprendimento automatico è un componente chiave della scienza dei dati, poiché consente agli utenti non solo di dare un senso a dati non strutturati come immagini, video e testo, ma anche di fare previsioni sul futuro. Poiché Pandas è strettamente integrato nell'ecosistema della scienza dei dati, non sorprende che funzioni bene con le librerie di machine learning, comprese quelle comuni come scikit-learn , pytorch , numpy , tra le altre. Qui useremo la libreria spaCy , una libreria di elaborazione del linguaggio naturale relativamente nuova, per dare un senso a una colonna di testo nel nostro set di dati. SpaCy offre vari modelli preaddestrati di parole per eseguire l'incorporamento di parole, il riconoscimento di entità denominate, l'etichettatura di parte del discorso, la classificazione, tra gli altri. Per installare spaCy, eseguiamo i seguenti comandi:
Ora che l'abbiamo installato, supponiamo di voler capire il tipo di attività (ad es. demolizione, rimozione, sostituzione, ecc.) coinvolte in ogni richiesta di permesso (cioè fila) nel nostro dataset. Questo è difficile da capire in anticipo, ma è sepolto all'interno del campo di testo, 'Description'
. Usiamo il pacchetto per estrarre un elenco di verbi menzionati in questo campo. Come parte di questo, prima carichiamo il 'en_core_web_md'
modello di spaCy, e poi lo seguiamo estraendo ogni verbo nella tokenizzazione della descrizione usando il modello, memorizzandolo in un array, come segue.
Quindi, come possiamo vedere sopra, il modello fa un lavoro ragionevole nell'estrarre i verbi, anche se ne mancano alcuni (es. install). Con la crescente disponibilità di grandi modelli preaddestrati (ad esempio, modelli di trasformatore), mi aspetto un'integrazione ancora maggiore di tali modelli nell'elaborazione quotidiana dei dati all'interno dei panda.
L'integrazione dell'apprendimento automatico nei database SQL è straordinariamente difficile. Sebbene alcuni database offrano costrutti specifici per l'apprendimento automatico (ad es. BigQuery ML), gli utenti sono limitati in ciò che possono realizzare e non dispongono di un controllo granulare. Un altro approccio goffo consiste nell'utilizzare UDF per eseguire l'apprendimento automatico. Spesso ciò che accade è che gli utenti esportano i propri dati al di fuori del contesto del database per eseguire l'apprendimento automatico.
6. Pandas preserva l'ordine per aiutare gli utenti a verificare la correttezza dei passaggi intermedi e consente agli utenti di operare su ordine; SQL no.
I panda preservano l'ordine. Questo è importante per il debug e la convalida quando si costruiscono espressioni di query più complicate. Continuando con il mio esempio fresco dopo l'estrazione spaCy dei verbi, supponiamo di voler utilizzare la 'explode'
funzione per espandere i singoli verbi nel dataframe precedente in più righe, una per verbo; Posso farlo semplicemente come segue.
Si noti che ora ho tre righe corrispondenti alla riga originale 1, una con ciascuno dei verbi estratti. Questa conservazione dell'ordine rende facile verificare la correttezza di questo passaggio. Utilizzando un database SQL, questo sarebbe molto più difficile perché l'ordine non è garantito, quindi sarebbe necessario esaminare l'intero output per vedere dove è finita una determinata riga (o invece aggiungere una clausola per imporre uno specifico ordine di output).ORDER BY
Conclusione
In questo post, abbiamo trattato vari modi in cui Pandas è più conveniente di SQL dal punto di vista dell'utente finale. Ciò include la facilità di costruzione corretta delle query Pandas, tramite la conservazione dell'ordine, la composizione incrementale, la denominazione e la manipolazione e l'ispezione lungo il percorso. Ciò include anche l'integrazione con altre esigenze di data science e analisi dei dati, tra cui la visualizzazione e l'apprendimento automatico: Pandas consente agli utenti di visualizzare ed eseguire la modellazione predittiva interamente all'interno di Pandas, ma fornisce anche gli agganci per collegare gli output ad altre popolari librerie di visualizzazione e apprendimento automatico e pacchetti, in particolare all'interno dell'ecosistema PyData. In definitiva, Pandas si trova all'interno di un linguaggio di programmazione a tutti gli effetti, Python, ed eredita tutto il suo potere costitutivo.
Se riesci a pensare ad altri esempi in cui Pandas è più conveniente di SQL, o viceversa, ci piacerebbe sentirlo! Sentiti libero di rispondere al nostro tweet e seguici su Twitter o LinkedIn per altri contenuti su Pandas/Python/data science!