Orange & PostgreSQL

Orange - Data Mining 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.

Introduzione

Orange - Data Mining 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 - Relational Database 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.

Installazione 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: Orange - Installazione DMG

All'avvio Orange presenta una intuitiva interfaccia grafica in cui creare un workflow di dati collegando tra loro i widget: Orange - GUI

PostgreSQL Add-on

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: Orange - Installazione psycopg2 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: Orange - Restart

Gia' fatto!
Ora possiamo accedere ad un database PostgreSQL da Orange.

Un esempio

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.

Orange - Custom SQL

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: Orange - Esempio workflow PG

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]: Orange - Visualizzazione dati

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:

country | cnt | amount ---------------------------------------+-------+----------- India | 25152 | 106052.48 China | 22816 | 92779.84 United States | 15488 | 65765.12 Japan | 13200 | 55532.00 Mexico | 12736 | 52912.64 Brazil | 12032 | 51351.68 ...

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!

Tips and Tricks

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, ...

Varie ed eventuali

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 & PostgreSQL
Livello: Avanzato (3/5)
Data: 1 Aprile 2025
Versione: 1.0.0 - 1 Aprile 2025
Autore: mail [AT] meo.bogliolo.name