Guida all'utilizzo dell'API get_data di Italy-Trend

Il servizio get_data di Italy-Trend è un’API gratuita che permette di accedere in modo semplice e immediato ai dati ufficiali del database ISTAT. Grazie a questa API, non è necessario installare pacchetti o librerie specifiche per consultare i dati: basta effettuare una chiamata HTTP e l’API restituirà le informazioni richieste.

L’API get_data facilita anche la gestione di grandi volumi di dati. Poiché molte tabelle ISTAT contengono migliaia di righe, scaricare un’intera tabella in un’unica chiamata può causare timeout o eccessivo trasferimento di dati. Per questo motivo, get_data offre la possibilità di filtrare il contenuto delle tabelle, consentendo di recuperare solo le porzioni di dati realmente necessarie.

Italy-Trend mette a disposizione una pagina chiamata API Builder, un’interfaccia interattiva grazie alla quale è possibile visualizzare l’elenco completo delle tabelle presenti nel database ISTAT, creare le chiavi key per filtrare con precisione i dati desiderati e generare automaticamente snippet di codice Python pronti all’uso per scaricare i dati attraverso il servizio get_data.

Il Database ISTAT

Il database ISTAT, accessibile tramite Italy-Trend, comprende oltre 500 tabelle con un’enorme varietà di informazioni su economia, società e finanza in Italia. Si tratta di un dataset ufficiale, costantemente aggiornato, che copre numerosi ambiti di interesse (dati demografici, produttivi, occupazionali, ecc.). Ogni tabella nel database ha un suo ID univoco che la identifica. Ad esempio:

  • L’ID "101_1030" si riferisce alla tabella riguardante i Prodotti agroalimentari di qualità DOP/IGP e STG,
  • L’ID "115_333" si riferisce alla tabella Indice della produzione industriale

Per consultare l’elenco completo delle tabelle e degli ID disponibili, è possibile visitare l'API Builder di Italy Trend.

Struttura tabelle ISTAT

Le tabelle ISTAT seguono una struttura standardizzata che consente di rappresentare i dati in modo chiaro e coerente. Ogni tabella contiene le seguenti colonne principali:

  • OBS_VALUE: Una colonna numerica che contiene il valore di riferimento del dato della riga della tabella.
  • TIME_PERIOD: Una colonna che specifica il periodo temporale a cui si riferisce il valore presente in OBS_VALUE.
  • Uno o più campi aggiuntivi di specificazione o dettaglio del dato, come ad esempio territorio o classe di eta.

La proprietà fondamentale delle tabelle ISTAT è che la chiave primaria della tabella è composta da tutti i campi di specificazione più il campo TIME_PERIOD. Questo schema garantisce l'univocità di ogni riga e consente di filtrare i dati in modo preciso.

Esempio tabella ISTAT


+-------------+---------------+-------------+-----------+
| territorio  | classe di eta | TIME_PERIOD | OBS_VALUE |
+-------------+---------------+-------------+-----------+
| Lombardia   | 18-25         | 2020        | 12345.67  |
| Lombardia   | 18-25         | 2021        | 12500.89  |
| Lazio       | 18-25         | 2020        | 9876.54   |
| Lazio       | 18-25         | 2021        | 10023.11  |
+-------------+---------------+-------------+-----------+

Nell'esempio sopra, le colonne territorio, TIME_PERIOD e classe di eta costituiscono la chiave primaria della tabella. La colonna OBS_VALUE contiene i valori osservabili (ad esempio, popolazione o reddito medio) per ciascun periodo temporale e combinazione di campi di specificazione.

Questo formato consente agli utenti di filtrare i dati utilizzando i campi di specificazione e di analizzare facilmente le informazioni su periodi temporali o categorie specifiche.

Descrizione della funzione get_data

get_data è la funzione di Italy-Trend che consente l'accesso ai dati del database ISTAT. La funzione accetta un JSON di parametri per personalizzare la richiesta e restituisce un set di dati o un messaggio di errore.

L'API è accessibile al seguente endpoint:

https://www.italy-trend.com/api/v1/get_data

Parametri accettati come json

  • id_data (stringa, obbligatorio): Specifica l'ID del dataset che si desidera recuperare.
  • key (stringa, opzionale): Una chiave opzionale per filtrare i dati contenuti nel dataset.
  • lang (stringa, opzionale): La lingua dei dati restituiti. I valori possibili sono "it" (predefinito) e "en".
  • timeout (intero, opzionale): Specifica il tempo massimo, in secondi, per completare la richiesta. Il valore predefinito è 30.

Headers

Le richieste devono essere inviate con headers come segue

headers = {
        "Content-Type": "application/json",
        "Accept": "application/json"
    }

Risposta

La risposta delle chiamate API è un json che rappresenta la tabella richiesta:

  • Ogni elemento della lista response rappresenta una riga della tabella.
  • Le chiavi dell'oggetto riga (come territorio, classe di eta, TIME_PERIOD, OBS_VALUE) corrispondono ai nomi delle colonne della tabella.
  • I valori delle chiavi rappresentano i dati effettivi della tabella per quella riga.

Ecco un esempio di risposta restituita dall'API per una tabella con le colonne territorio, classe di eta, TIME_PERIOD e OBS_VALUE:

response = [
    {
        "territorio": "Lombardia",
        "classe di eta": "18-25",
        "TIME_PERIOD": "2020",
        "OBS_VALUE": 12345.67
    },
    {
        "territorio": "Lombardia",
        "classe di eta": "18-25",
        "TIME_PERIOD": "2021",
        "OBS_VALUE": 12500.89
    },
    {
        "territorio": "Lazio",
        "classe di eta": "18-25",
        "TIME_PERIOD": "2020",
        "OBS_VALUE": 9876.54
    },
    {
        "territorio": "Lazio",
        "classe di eta": "18-25",
        "TIME_PERIOD": "2021",
        "OBS_VALUE": 10023.11
    }
]

Esempi

Ecco alcuni esempi di utilizzo dell'API per accedere ai dati:

Scaricare un'intera tabella (sconsigliato)

import requests
import pandas as pd

id_data = "143_497"  # Prezzi delle abitazioni (Ipab)
url = r"https://www.italy-trend.com/api/v1/get_data"

headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

param = {
    "id_data": id_data
}

response = requests.get(url, json=param, headers=headers)
if response.status_code == 200:
    data = response.json()
    df = pd.DataFrame(data)
    print(df)
else:
    print(f"Errore: {response.status_code} - {response.text}")

Nota: Le tabelle possono essere molto grandi, e la richiesta potrebbe andare in timeout a causa della quantità di dati. Si consiglia di utilizzare un key per filtrare i dati.

Scaricare una tabella con l'applicazione di un filtro

Il parametro key consente di applicare un filtro di uguaglianza a una o più colonne della tabella. La chiave può essere costruita seguendo le indicazioni nell'API Builder

Esempio di codice:

import requests
import pandas as pd

id_data = "143_497"  # Prezzi delle abitazioni (Ipab)
key = "A.IT.18.."
url = r"https://www.italy-trend.com/api/v1/get_data"

headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

param = {
    "id_data": id_data,
    "key": key
}

response = requests.get(url, json=param, headers=headers)
if response.status_code == 200:
    data = response.json()
    df = pd.DataFrame(data)
    print(df)
else:
    print(f"Errore: {response.status_code} - {response.text}")

Specifica il parametro key per limitare l'ambito dei dati recuperati, riducendo il rischio di timeout e migliorando le prestazioni.

Risorse aggiuntive

Per un elenco completo delle chiavi valide, dataset e dimensioni, consulta l'API Builder.

Per assistenza o richieste, contatta lo sviluppatore del servizio API all'indirizzo lorenzo.mori@hotmail.it