analisi dei dati finanziari con Pandas

Introduzione all’Analisi dei Dati Finanziari con Pandas

Sommario

In questo articolo introduciamo le tecniche di analisi dei dati finanziari con Pandas di Python. Solitamente l’analisi finanziaria inizia ponendosi delle domande. In altre parole l’analisi deve essere focalizzata su un preciso obiettivo. L’analisi  dei dati finanziari è solo uno strumento, piuttosto che un  obiettivo.

Analisi dei dati finanziari

Quindi, per cominciare, proviamo a dare una risposta alle seguenti semplici domande relative ad alcuni titoli azionari:

  1. Qual è stata la variazione del prezzo nel tempo, insieme al volume scambiato per uno specifico titolo?
  2. Qual è stato il rendimento medio giornaliero del titolo?
  3. Qual è la correlazione tra questo titolo e gli altri titoli in esame?

Per effettuare questa analisi usiamo un modulo di python chiamato Pandas. Pandas è un modulo Python assolutamente fantastico; così potente e facile da usare. Il nome deriva dal termine “Panel Data”, un termine econometrico per gli insiemi di dati strutturati multidimensionali.

Pandas si basa su un oggetto chiamato “DataFrame”, che in teoria è simile a una tabella di dati presente in Excel. Credo che l’ampio uso di Excel nel mondo finanziario è quello che ha motivato Wes McKinney (il creatore di Pandas) a sviluppare la prima versione di Pandas.

La prima cosa che dobbiamo fare è installare il modulo pandas (se non lo avete già), insieme ad alcuni altri pacchetti.

Se hai già installato Python, insieme a “pip”, è sufficiente accedere alla riga di comando e digitare:

analisi dei dati finanziari con Pandas di Python

Possiamo installare con “pip” anche i moduli matplotlib, numpy, seaborn e yfinance (che potrebbero essere già preinstallati con la tua distribuzione python).
Nota: per maggiori dettagli è possibile leggere l’articollo relativo all’installazione di un ambiente di sviluppo per il trading algoritmico con Ubuntu/Linux e Python.

Le funzionalità di Pandas

Dopo avere installato Pandas e gli altri moduli, iniziamo importando questi moduli:

				
					
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
import yfinance as yf
				
			

L’istruzione  sns.set_style('whitegrid') è usata solamente per impostare una specifica trama del grafico, fornita dalla libreria Seaborn. Spero che renderà i nostri grafici un po’ più eleganti. Con import yfinance as yf importiamo una libreria che permette di scaricare i dati direttamente da Yahoo Finance. Non possiamo chiedere di meglio.

Scegliamo quindi alcuni titoli da analizzare. Se vogliamo considerare il settore tecnologico possiamo ad esempio scegliere Apple, Google, Microsoft e Amazon. Possiamo scaricare da Yahoo i dati di ciascuno di questi titoli in un DataFrame come segue:

				
					
start_date = '2010-01-01'
end_date = '2020-01-01'
AAPL = yf.download('AAPL', start_date, end_date)
GOOG = yf.download('GOOG', start_date, end_date)
MSFT = yf.download('MSFT', start_date, end_date)
AMZN = yf.download('AMZN', start_date, end_date)
				
			
Se stampiamo uno di quei DataFrame tramite la funzione .head() integrata in Pandas (che stampa i primi 5 elementi del DataFrame) otteniamo quanto segue:
				
					
print(AAPL.head())
				
			
analisi dei dati finanziari con Pandas di Python
Dopo aver memorizzato i dati nei DataFrames, creare un grafico è semplice come usare il metodo plot integrato tramite la seguente istruzione:
				
					
AAPL['Adj Close'].plot()
				
			

Che produce il seguente grafico:

Analisi-Dati-AAPL-grafico

Possiamo anche visualizzare il grafico del volume scambiato usando il seguente comando:

				
					
AAPL['Volume'].plot()
				
			
Analisi-Dati-AAPL-Volume-grafico
Il calcolo del rendimento medio giornaliero del titolo è molto semplice e prevede 2 passaggi. Innanzitutto, dobbiamo convertire la serie dei prezzi in una serie di rendimenti percentuali giornalieri. Possiamo farlo usando la funzione pct_change() e la funzione mean():
				
					
AAPL['Daily Return'] = AAPL['Adj Close'].pct_change()
AAPL_mean = AAPL['Daily Return'].mean()
				
			
Otteniamo il seguente risultato:
				
					0.001087024140393126
				
			
Dimostrando che il rendimento giornaliero medio nel periodo 01/01/2010 – 01/01/2020 è stato dello 0,1087%. Fantastico! Vediamo ora alcuni calcoli di correlazione. In primo luogo, dobbiamo creare un DataFrame che contenga solo i prezzi di Adj Close per ciascuno dei 4 titoli tecnologici. Possiamo farlo con il seguente comando:
				
					
tech_list = ['AAPL', 'MSFT', 'GOOG', 'AMZN']
closing_df = yf.download(tech_list, start_date, end_date)['Adj Close']
				
			
Quindi eseguiamo la funzione pct_change() e memorizziamo il risultato in un nuovo DataFrame chiamato rets, come segue:
				
					rets = closing_df.pct_change()
				
			
Dopo aver calcolato i rendimenti giornalieri, possiamo usare la funzione jointplot di Seaborn per ottenere una rappresentazione visiva della correlazione tra due titoli, insieme al valore “pearson r”, ad esempio utilizzando Google e Microsoft otteniamo quanto segue:
				
					
sns.jointplot(x='GOOG', y='MSFT', data=rets, kind='scatter')
				
			
Analisi-Dati-GOOG-MSFT-Correlazione-grafico

Spero che questa brave introduzione sia stata utile per mostrare le potenzialità di Pandas (insieme a numpy, matplotlib e seaborn) che è una delle librerie fondamentali nell’analisi dei dati finanziari.

Codice completo

In questo articolo abbiamo introdotto analisi dei dati finanziari con Pandas di Python. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/AnalisiDatiFinanziari

Benvenuto su DataTrading!

Sono Gianluca, ingegnere software e data scientist. Sono appassionato di coding, finanza e trading. Leggi la mia storia.

Ho creato DataTrading per aiutare le altre persone ad utilizzare nuovi approcci e nuovi strumenti, ed applicarli correttamente al mondo del trading.

DataTrading vuole essere un punto di ritrovo per scambiare esperienze, opinioni ed idee.

SCRIVIMI SU TELEGRAM

Per informazioni, suggerimenti, collaborazioni...

Scroll to Top