Orange e' tool di data mining che si distingue per la sua semplicita',
PostgreSQL e' il piu' completo database relazionale Open Source.
In questa paginetta introduttiva vediamo come utilizzare Orange con PostgreSQL.
Questo documento e' organizzato in sezioni per presentare l'utilizzo di PostgreSQL da Orange: Introduzione, Installazione Orange, PostgreSQL Add-on, Un esempio, Varie ed eventuali, ...
Per l'installazione verranno utilizzati l'ultima versione di Orange (3.38), l'ultima versione di PostgreSQL (17.4) sull'ultima versione di MacOS (15.5) con processori Apple ma la maggior parte delle indicazioni valgono anche per le versioni precedenti e, molto probabilmente, anche per le versioni future.
Orange
e' un programma Open Source per la visualizzazione dei dati, l'apprendimento automatico e il data mining.
Le origini di Orange sono lontane nel tempo:
dal 1996 l'Universita' di Lubiana ha iniziato lo sviluppo in C++ di un framework di apprendimento automatico.
Le evoluzioni sono state molte fino ad arrivare all'attuale versione 3 di Orange realizzata in Python
e contenente centinaia di widget.
L'utilizzo di Orange non richiede competenze di programmazione e
viene svolto graficamente collegando i widget in un workflow.
I widget sono suddivisi in categorie:
Inoltre e' possibile arricchire Orange con una serie Add-ons che introducono nuovi dataset e strumenti di analisi (eg. Geo, Text, Image Analytics, Bioinformatics). Lo sviluppo di Orange e' continuo ed i widget piu' recenti consentono di sperimentare le principali tecnologie dell'AI (Artificial Intelligence).
PostgreSQL e' un potente database object-relational con oltre 35 anni di sviluppo
e presenza sul mercato che ha guadagnato una forte reputazione per l'affidabilita', la robustezza e le per performance.
PostgreSQL utilizza una licenza molto libera che permesso lo sviluppo di un ecosistema molto ampio
ed e' utilizzato sia on-premises che su cloud.
Il linguaggio utilizzato con PostgreSQL e' l'SQL che e' il piu' diffuso linguaggio
per interrogare i database. Il dialetto di PostgreSQL e' tra i piu' completi e piu'
vicini agli standard, a questo si aggiunge il linguaggio procedurale PL/pgSQL
con cui sviluppare funzioni e procedure.
La gestione efficiente delle transazioni con le propieta' ACID
(Atomicity, Consistency, Isolation e Durability)
e le funzionalita' Object-Relational completano le funzionalita' di base di PostsgreSQL.
Le funzionalita' di PostgreSQL possono essere arricchite con le extension
rendendolo un database relazionale molto completo ed adattabile.
L'utilizzo di sorgenti dati esterne con Orange e' possibile utilizzando il widget SQL Table ma in realta' la sua configurazione non e' sempre facilissima... in questa paginetta vedremo come utilizzare una sorgente dati PostgreSQL con Orange.
L'installazione di Orange e' molto semplice: e' sufficiente scaricare il software dal sito ufficiale relativo all'ambiente desiderato e lanciare la procedura di installazione.
Nel nostro caso la scelta corretta e' Orange for Apple silicon poiche' stiamo utilizzando un MacOS con processore Apple M3. Il file da scaricare e': Orange3-3.38.1-Python3.11.8-arm64.dmg. Il nome del file e' importante poiche' riporta non solo la versione di Orange ma anche l'indicazione della versione di Python utilizzata che ci servira' successivamente.
Con il MacOS il file di installazione e' un .dmg,
con un doppio click si apre la finestra di installazione ed effettuando
un Drag&Drop dell'icona di Orange sulla directory delle applicazioni
si esegue l'installazione:
All'avvio Orange presenta una intuitiva interfaccia grafica in cui
creare un workflow di dati collegando tra loro i widget:
Il solo utilizzo del Data widget SQL Table non e' sufficiente per accedere a PostgreSQL da Orange
perche' nell'installazione non e' presente il driver per l'accesso al database.
Psycopg e' l'adapter PostgreSQL piu' diffuso per Python ed e' quello utilizzabile con Orange.
Psycopg e' un'implementazione completa, efficiente e thread-safe delle DB API 2.0.
Seguendo alcune avvertenze la sua configurazione su Orange e' semplice anche per MacOS.
Il primo passo e' quello di scaricare dal
sito ufficiale
la versione corretta del driver.
Su MacOS sono disponibili diverse versioni di Python e possono essere
installate ed aggiornate in modi diversi.
Ma l'installazione di Orange in realta' utilizza una versione specifica
che e' abbastanza facilmente individuabile.
Ricordate che abbiamo scaricato il file
Orange3-3.38.1-Python3.11.8-arm64.dmg ?
Ebbene la versione di adapter da scaricare sara' quella per la versione 3.11 di Pyhon
e del corretto sistema operativo.
Il file wheel da scaricare
in questo caso e' psycopg2_binary-2.9.10-cp311-cp311-macosx_14_0_arm64.whl
[NdA 2.9.10 e' l'ultima versione disponibile di psycopg2,
cp311 indica la versione di Python che deve corrispondere a quella installata da Orange,
14_0 indica la versione minima di MacOS quindi anche se utilizziamo la versione 15 Sequoia va bene lo stesso].
Ora basta eseguire il Drag&Drop del file wheel nella finestra degli Add-ons di Orange e confermare
con il bottone OK l'installazione:
Insomma e' tutto facile se scegliamo il file corretto, altrimenti ci verra' restituito un
errore:
ERROR: psycopg2_binary-2.9.10-cp313-cp313-macosx_14_0_arm64.whl is not a supported wheel on this platform.
Per risolvere il problema... basta scaricare il file wheel corretto e riprovare!
Come per l'aggiunta di ogni altro Add-on in Orange e' necessario un riavvio per poterlo utilizzare:
Gia' fatto!
Ora possiamo accedere ad un database PostgreSQL da Orange.
Per accedere a PostgreSQL bisogna utilizzare il widget SQL Data in un workflow.
Con un doppio click sul widget si apre l'interfaccia che consente di
collegarsi a PostgreSQL.
E' possibile scegliere una qualsiasi tabella o vista
oppure utilizzare una query Custom SQL.
Come esempio utilizzeremo
Sakila
che e' un buon esempio di
disegno di database relazionale normalizzato
e contiene dati di un ipotetico negozio che affitta DVD.
E' possibile utilizzare una query SQL comunque complessa. Con la query seguente otteniamo la nazionalita' dei clienti, i film che hanno affittato ed totale dell'importo pagato:
select co.country, count(*) as cnt, sum(p.amount) as amount from film f, inventory i, rental r, payment p, customer cu, address a, city ci, country co, film_category fc, category ca where fc.film_id = f.film_id and i.film_id = f.film_id and i.inventory_id = r.inventory_id and r.rental_id = p.rental_id and r.customer_id = cu.customer_id and a.address_id = cu.address_id and a.city_id = ci.city_id and ci.country_id = co.country_id group by co.country;
Per visualizzare i dati costruiamo un semplice workflow:
Non e' scopo di questa paginetta descrivere come creare un workflow in Orange...
ma e' davvero molto semplice: basta inserire i widget il Drag&Drop,
collegarli con gli Hop e configurarli o visualizzarli con un doppio click.
Per controllare i dati presenti nel flusso si utilizza il widget Data Table
che puo' anche essere utilizzato per selezionare i dati.
[NdA il segnale d'attenzione sul widget SQL Table e' relativo all'assenza
dell'extension quantile PostgreSQL e puo' essere ignorato]
Il semplice worflow impostato ci consente di presentare i dati con diversi wigdet grafici tra cui
il Choropleth Map [NdA disponibile nell'Add-on GEO]:
Ora con Orange e' possibile navigare sui dati, selezionare gli elementi di interesse in un widget e vedere immediatamente il risultato nei widget successivi... Se non utilizziamo filtri la maggioranza dei nostri clienti sono indiani, seguono i cinesi e quindi gli Stati Uniti.
Sono corretti i dati? Controlliamo con il psql che i dati corrispondano alla legenda visualizzata sulla mappa:
I dati sono corretti ma sicuramente la presentazione delle informazioni con il widget di Orange e' molto piu' efficace ed ha richiesto solo pochi passi!
Quando il gioco si fa duro... i duri iniziano a giocare!
Orange e' un ottimo strumento per analizzare i dati,
per studiare gli algoritmi, per presentare le informazioni.
Ma la sua forza e' la semplicita' di utilizzo e la presentazione grafica dei dati.
La base dati scelta non va bene...
e non perche' ora i film si guardano in streming e non si affittano piu' i DVD!
Questo e' solo un esempio, la critica riguarda il disegno della base dati
che e' fortemente normalizzato come e' corretto per un database relazionale
usato in ambiente OLTP.
Ma per un Dataware House i modelli sono differenti:
tipicamente si ha un numero notevolmente inferiore di tabelle
e si utilizzano fact table che non richiedono join.
PostgreSQL e' in grado di gestire basi dati di grandi dimensioni
anche se esistono fork e database specifici i Big Data.
Cio' premesso la coppia Orange+PostgreSQL e' ottima per
un POC o presentare una complessa soluzione di analisi dei dati,
anche se presenta alcuni limiti quando deve essere applicata su un modello
che superi certe dimensioni o che richieda un elevato livello di performance.
E' sempre importante utilizzare gli strumenti piu' adatti caso per caso.
Orange utilizza tre tipi (Type) di variabili: String, Discrete, Continuos.
L'associazione con le colonne PostgreSQL
e' importante anche per definire il genere (Kind) che in Orange puo'
essere Features, Metadata, Target.
[NdA in realta' vi sono molte piu' distinzioni ma
per i dettagli e' meglio fare riferimenti al
sito ufficiale].
In generale le colonne con datatype PostgreSQL numerici vengono interpretata come Continuos
mentre i datatype testuali vengono interpretati come una lista (Discrete) se sono presenti
meno di 20 valori distinti altrimenti sono String e trattate come Meta Dati.
E' pero' possibile utilizzare in Orange widget specifici per scegliere le variabili,
modificare il dominio, ...
Il widget SQL Data di Orange consente il collegamento a PostgreSQL,
utilizzando il modulo psycopg2 come abbiamo visto in questa paginetta,
opppure a Microsoft SQL Server utilizzando il modulo pymssql.
La documentazione ufficiale
riporta tutti i dettagli.
Sono veramente ben fatti i
video di introduzione
ad Orange che presentano i complessi aspetti del data mining e del
machine learning in modo semplice e pratico.
Basta seguire i link per conoscere il dettaglio delle versioni di
PostgreSQL e di
Orange.
Titolo: Orange & PostgreSQLVarie ed eventuali
Livello: Avanzato
Data:
1 Aprile 2025
Versione: 1.0.0 - 1 Aprile 2025
Autore: mail [AT] meo.bogliolo.name