Analisi Testuale con Python delle quotazioni dei titoli azionari alla pubblicazione di news

lente

Sono una studentessa di dottorato in Banca e Finanza e trai miei argomenti di ricerca mi interesso anche di reazione delle quotazioni dei titoli azionari alla pubblicazione di news. Ho raccolto, attraverso una banca dati privata, numerosissimi articoli di giornale pubblicati nel periodo 1998-2013.

E’ mia intenzione collegare le informazioni contenute negli articoli (content analysis) alle quotazioni dei titoli in borsa. La mole di dati da analizzare è tale per cui programmi quali Microsoft Word o Microsoft Excel non sono appropriati per assicurare rigore metodologico.

Mi sono, dunque, interessata al linguaggio di programmazione Python, a me completamente sconosciuto fino a poco fa (e non facilissimo da considerata la mia totale ignoranza circa i linguaggi di programmazione in generale). Vista la complessità dello script che mi interessava realizzare, mi sono messa in contatto con Marco Bruni per una serie di consulenze, che ad oggi mi hanno permesso di migliorare notevolmente il mio script di partenza ed approdare ad un codice in grado di assicurarmi la precisione e la rigorosità che si richiedono in ambito di ricerca.

In particolare Marco mi ha aiutato nei punti che elenco di seguito.

Il primo problema che mi interessava risolvere era l’estrazione della data di pubblicazione dell’articolo di giornale. La mancanza di una sezione indicata chiaramente e di standardizzazione dei file, non permetteva l’utilizzo di “regular expression”. Con Marco si è pensato di creare una funzione TrovaData.

L’ostacolo consiste nel fatto che la data non è identificabile tra elementi che la precedono o la succedono standard. L’unica cosa costante nei documenti è che essa si trova all’inizio dell’articolo. Per di più, a volte è in inglese e a volte in italiano. Quando è in inglese il formato è Month Day, Year.

Il formato della data italiana è invece Day Month Year. Lingue diverse, formati diversi, una con la virgola l’altra senza. Una funzione non basta, ne servono due.
Con la prima funzione TrovaDataInglese si individua la posizione del mese con una funzione “if il mese è nella stringa”… dove il mese varia da January a December, poi si individua la posizione della prima virgola del documento. A questo punto si estrae il testo compreso tra il mese e la posizione della virgola +5 (l’anno ha 4 cifre, più spazio).

La seconda funzione TrovaDataItaliana ha la difficoltà di non potersi ancorare alla virgola (che manca), per cui si individua sempre una funzione per individuare la posizione del mese (come prima) e ci si ancora allo spazio dopo il mese estratto (posizione dello spazio +5). Il problema a questo punto è estrarre il giorno, considerato che non è compreso tra mese ed anno come nel caso della data in inglese.

Marco allora mi suggerisce di creare una funzione in cui partendo dalla stringa estratta con la funzione mese, si ripercorre tale stringa al contrario, fermandosi ai caratteri non numerici (che precedono il giorno), e quindi si estrae il giorno dell’anno come testo compreso tra l’ultimo carattere non numerico ed il mese.

L’analisi del testo si basa su quegli articoli che contengono i nomi delle società italiane quotate. Nel giornalismo però si possono usare più nomi per far riferimento alla stessa società. Usare soltanto il nome ufficiale della società avrebbe comportato la perdita di notizie preziose che sarebbero quindi state escluse perché magari la società era nominata attraverso una sigla.

Nel codice allora si è creata una funzione per cui se la lunghezza dei nomi della società era maggiore di uno (ad esempio: monte paschi; mps – 2elementi-), gli articoli da estrarre sono quelli che contengono o uno o l’altro nome (insieme unione e non intersezione).

Marco è una persona che oltre a distinguersi per la sua disponibilità e la gentilezza, si caratterizza per la sua preparazione e la capacità di trovare una soluzione efficace, efficiente ed in brevissimo tempo ai problemi che si incontrano durante questa tipologia di lavori.

Con stima e riconoscenza,
Lucrezia Fattobene

lucreziafattobene@gmail.com
https://it.linkedin.com/pub/lucrezia-fattobene/b1/892/3b0