APIFredTorVergata 0.1.0
Download e analisi dati tramite API Fred
Keywords: API,Fred,Database,Download

# ApiFred
## Introduzione
Il progetto propone la realizzazione di una libreria python che permette di scaricare, memorizzare in un database e analizzare tramite grafici delle informazioni ottenute dall'API Fred. La classe più importante della libreria è senza dubbio 'Fred'. Nel momento in cui viene creata un'istanza di questa classe viene istanziato anche un oggetto della classe 'Datamanager' che si occupa di gestire le interazioni con il database. Tale classe infatti ha come obiettivo quello di leggere e scrivere informazioni in opportune taballe Mysql. La struttura di queste tabelle è descritta nella documentazione della classe Fred. 
L'idea di base è che tutti i dati scaricati debbano essere memorizzati in un database in questo modo quando l'utente ha bisogno nuovamente di queste informazioni esse varranno prelevarle dal database, a meno che non venga chiesto esplicitamente un aggiornamento dei dati tramite API.

##Esempi di codice
Poter utilizzare un'istanza della classe Fred è necessario fornire due parametri che sono la connessione con il database e la chiave dell'API. Una volta creata l'istanza è possibile scaricare e graficare i dati.

### Scaricare categorie figlie di una categoria data
fred= Fred(connection,apy_key)
fred.dowloadSubCategoryByCategory(1)

### Scaricare serie da una categoria data
fred= Fred(connection,apy_key)
fred.dowloadSeriesByCategory(1)

### Scaricare Osservazioni di una serie data
fred= Fred(connection,apy_key)
fred.dowloadObservationBySeries('BABANAICS11NSAUS')

## Grafici
I grafici realizzati sono principalmente di 7 tipologie:

1. Andamento delle osservabili di una serie
2. Grafico della media mobile delle osservabili di una data serie
3. Grafico delle differenze prime delle osservabili di una data serie
4. Grafico delle differenze prime percentuali delle osservabili di una data serie
5. Matrice delle covarianze di un gruppo di serie
6. Matride delle correlazioni di un gruppo di serie
7. Regressione lineare di una data serie

Di seguito verranno mostrati alcuni esempi.

### Andamento delle osservabili di una serie
fred= Fred(connection,apy_key)
fred.plotOservationBySeries('BABANAICS11NSAUS').show()

### Grafico della media mobile delle osservabili di una data serie
fred= Fred(connection,apy_key)
fred.plotMovingAverage(11,'BABANAICS11NSAUS').show()

### Grafico delle differenze prime delle osservabili di una data serie
fred= Fred(connection,apy_key)
fred.plotPrimeDifferenceSeries('BABANAICS11NSAUS').show()

## Combinazioni grafici
La classe Fred mette a disposizione una serie di metodi che restituiscono dati grezzi utili per personalizzare e comporre i propri grafici. In partiolare questi metodi sono utili per creare dei 'collage' di grafici. E' possibile combinare più grafici in un'unica immagine in maniera molto agevole. Ad esempio nel codice che segue è possibile combinare i grafici di 3 serie differenti in uno. 

### Esempio

    x1,y1 = fred.giveDataPlotOservationBySeries('BABANAICS11NSAUS')
    x2,y2 = fred.giveDataPlotOservationBySeries('BABANAICS23SAUS')
    x3,y3 = fred.giveDataPlotOservationBySeries('BFBF8QNAICS71SAUS')
    
    fig, axs = plt.subplots(3,sharex=True)
    
    step = int(len(x1) / 8)
    
    axs[0].set_title('BABANAICS11NSAUS')
    axs[0].plot(x1, y1,'tab:red')
    
    axs[1].set_title('BABANAICS23SAUS')
    axs[1].plot(x2, y2,'tab:green')
    
    axs[2].set_title('BFBF8QNAICS71SAUS')
    axs[2].plot(x3, y3)
    
    plt.xticks(x1[::step], x1[::step],rotation=-45)
    plt.gcf().set_size_inches(16, 9)