Main Content

Questa pagina si riferisce alla release precedente. La corrispondente pagina in inglese è stata rimossa nella release attuale.

Analisi dati

Introduzione

Ogni analisi dei dati presenta alcuni componenti standard:

  • Pre-elaborazione dei dati: valutazione di valori outlier e mancanti e lisciamento dei dati (smoothing) per identificare possibili modelli.

  • Riepilogo: calcolo delle statistiche di base per descrivere posizione, dimensioni e forma generiche dei dati.

  • Visualizzazione: plottaggio dei dati per identificare modelli e tendenze.

  • Modellazione: descrizioni più approfondite dei trend dei dati, adatte alla previsione di nuovi valori.

L'analisi dei dati include queste componenti, con due obiettivi principali:

  1. Descrivere i pattern nei dati con modelli semplici che generano previsioni accurate.

  2. Comprendere le relazioni tra variabili che portano alla generazione del modello.

Questa sezione spiega come effettuare un'analisi di base dei dati nell'ambiente di MATLAB®.

Pre-elaborazione dei dati

Questo esempio mostra come eseguire la pre-elaborazione dei dati per l'analisi.

Panoramica

Per iniziare ad analizzare i dati, caricarli nelle variabili del container appropriato di MATLAB® e separare i dati fruibili da quelli inadatti. Si tratta di un passaggio preliminare che permette di ottenere conclusioni significative nelle fasi successive dell'analisi.

Caricamento dei dati

Per iniziare, caricare i dati in count.dat:

load count.dat

L'array count 24x3 contiene i conteggi del traffico orario (le righe) presso tre intersezioni (le colonne) di una singola giornata.

Dati mancanti

Il valore NaN (Not a Number) di MATLAB solitamente viene utilizzato per rappresentare i dati mancanti. I valori di NaN consentono di conservare la struttura delle variabili con dati mancanti; in questo caso, vettori 24x1 con indicizzazione uniforme in tutti e tre le intersezioni.

Controllare i dati del terzo incrocio rispetto ai valori di NaN con la funzione isnan:

c3 = count(:,3); % Data at intersection 3
c3NaNCount = sum(isnan(c3))
c3NaNCount = 0

isnan restituisce un vettore logico delle stesse dimensioni di c3, con voci che indicano la presenza (1) o l'assenza (0) di valori NaN per ciascuno dei 24 elementi nei dati. In questo caso la somma dei valori logici è 0, quindi i dati non contengono valori NaN.

I valori NaN sono inseriti nei dati della sezione Outlier.

Outlier

Gli outlier sono valori di dati estremamente differenti dai pattern degli altri dati. Possono essere causati da errori di misurazione oppure possono rappresentare feature significative nei dati. Identificare gli outlier e decidere cosa farne dipende dalla compressione dei dati e dalle loro fonti.

Un metodo comunemente utilizzato per identificare gli outlier consiste nel cercare i valori con deviazioni standard σ superiori a un determinato numero rispetto alla media μ. Il codice seguente esegue il plottaggio di un istogramma dei dati alla terza intersezione insieme alle righe in μ e μ+ησ, per η=1,2:

h = histogram(c3,10); % Histogram
N = max(h.Values); % Maximum bin count
mu3 = mean(c3); % Data mean
sigma3 = std(c3); % Data standard deviation

hold on
plot([mu3 mu3],[0 N],'r','LineWidth',2) % Mean
X = repmat(mu3+(1:2)*sigma3,2,1);
Y = repmat([0;N],1,2);
plot(X,Y,'Color',[255 153 51]./255,'LineWidth',2) % Standard deviations
legend('Data','Mean','Stds')
hold off

Il plottaggio mostra che alcuni dati presentano deviazioni standard più che doppie rispetto alla media. Se si identificano questi dati come errori, non come feature, sostituirli con valori NaN come segue:

outliers = (c3 - mu3) > 2*sigma3;
c3m = c3; % Copy c3 to c3m
c3m(outliers) = NaN; % Add NaN values

Lisciaggio e filtraggio

Il plottaggio della serie temporale dei dati presso la terza intersezione, con gli outlier spostati in Outlier, genera il seguente risultato:

plot(c3m,'o-')
hold on

Il valore NaN alle ore 20 appare come uno spazio vuoto nel grafico. Questa gestione dei valori di NaN è tipica delle funzioni di plottaggio di MATLAB.

I dati rumorosi mostrano variazioni casuali superiori ai valori previsti. È possibile effettuare il lisciamento dei dati per rivelarne le feature principali prima di costruire un modello. Il lisciamento richiede due presupposti di base:

- La relazione tra il predittore (tempo) e la risposta (volume di traffico) è sottoposta a lisciamento.

- L'algoritmo di lisciamento genera valori che meglio corrispondono alle previsioni dei valori attesi perché il rumore è stato ridotto.

Applicare ai dati un semplice lisciamento basato sulla media mobile con la funzione convn di MATLAB:

span = 3; % Size of the averaging window
window = ones(span,1)/span; 
smoothed_c3m = convn(c3m,window,'same');

h = plot(smoothed_c3m,'ro-');
legend('Data','Smoothed Data')

La portata del lisciamento è controllata dalla variabile span. Il calcolo della media restituisce i valori NaN tutte le volte in cui la finestra di lisciamento include i valori NaN nei dati, aumentando così le dimensioni dello spazio vuoto nei dati lisciati.

Anche la funzione filter è utilizzata per il lisciamento dei dati:

smoothed2_c3m = filter(window,1,c3m);

delete(h)
plot(smoothed2_c3m,'ro-','DisplayName','Smoothed Data');

I dati lisciati sono trasferiti dal grafico precedente. convn con il parametro 'same' restituisce la parte centrale della convoluzione, con la stessa lunghezza dei dati. filter restituisce la parte iniziale della convoluzione, con la stessa lunghezza dei dati. Per il resto, gli algoritmi sono identici.

Il lisciamento valuta il centro della distribuzione dei valori della risposta per ciascun valore del predittore. Annulla il presupposto di base di numerosi algoritmi di lisciamento, in particolare che gli errori per ciascun valore del predittore sono indipendenti. È quindi possibile utilizzare dati lisciati per identificare un modello, ma è bene evitare di utilizzare dati lisciati per adattare un modello.

Riepilogo dei dati

Questo esempio mostra come riepilogare i dati.

Panoramica

Molte funzioni di MATLAB® consentono di riepilogare posizione, dimensioni e forma generiche di un campione di dati.

Uno dei vantaggi nell'utilizzo di MATLAB® è che le funzioni operano su interi array di dati, non su singoli valori scalari. Le funzioni vengono definite come vettorizzate. La vettorizzazione consente sia un'efficiente formulazione dei problemi, utilizzando dati basati sugli array, sia un'efficiente effettuazione dei calcoli, utilizzando funzioni statistiche vettorizzate.

Misure di localizzazione

Riepilogare la localizzazione di un campione di dati trovando un valore "tipico". Le misure comuni di localizzazione o "tendenza centrale" vengono calcolati dalle funzioni mean, median e mode:

load count.dat
x1 = mean(count)
x1 = 1×3

   32.0000   46.5417   65.5833

x2 = median(count)
x2 = 1×3

   23.5000   36.0000   39.0000

x3 = mode(count)
x3 = 1×3

    11     9     9

Come tutte le sue funzioni statistiche, le funzioni di MATLAB® sopra riportate riepilogano i dati attraverso osservazioni (righe), pur conservando le variabili (colonne). Le funzioni calcolano la localizzazione dei dati presso ciascuna delle tre intersezioni in una singola chiamata.

Misure di scala

Vi sono diversi metodi per misurare la scala o "dispersione" di un campione di dati. Le funzioni max, min, std e var di MATLAB® calcolano alcune misure comuni:

dx1 = max(count)-min(count)
dx1 = 1×3

   107   136   250

dx2 = std(count)
dx2 = 1×3

   25.3703   41.4057   68.0281

dx3 = var(count)
dx3 = 1×3
103 ×

    0.6437    1.7144    4.6278

Come tutte le sue funzioni statistiche, le funzioni di MATLAB® sopra riportate riepilogano i dati attraverso osservazioni (righe), pur conservando le variabili (colonne). Le funzioni calcolano la scala dei dati presso ciascuna delle tre intersezioni in una singola chiamata.

Forma di una distribuzione

La forma di una distribuzione è più difficilmente riepilogabile rispetto alla sua locazione o scala. La funzione hist di MATLAB® traccia un istogramma che fornisce un riepilogo visivo:

figure
hist(count)
legend('Intersection 1',...
       'Intersection 2',...
       'Intersection 3')

I modelli parametrici presentano riepiloghi analitici delle forme di distribuzione. Le distribuzioni esponenziali, con il parametro mu dato dalla media dei dati, rappresentano una buona scelta per i dati sul traffico:

c1 = count(:,1); % Data at intersection 1
[bin_counts,bin_locations] = hist(c1);
bin_width = bin_locations(2) - bin_locations(1);
hist_area = (bin_width)*(sum(bin_counts));

figure
hist(c1)
hold on

mu1 = mean(c1);
exp_pdf = @(t)(1/mu1)*exp(-t/mu1); % Integrates
                                   % to 1
t = 0:150;
y = exp_pdf(t);
plot(t,(hist_area)*y,'r','LineWidth',2)
legend('Distribution','Exponential Fit')

I metodi di adattamento dei modelli parametrici generali alle distribuzioni di dati non rientrano nell'ambito di questa sezione. Il software Statistics and Machine Learning Toolbox™ offre funzioni per il calcolo delle stime della massima verosimiglianza dei parametri di distribuzione.

Visualizzazione dei dati

Panoramica

È possibile utilizzare molti tipi di grafici di MATLAB per visualizzare pattern e tendenze dei dati. I plottaggi a dispersione, descritti in questa sezione, aiutano a visualizzare le relazioni tra i dati sul traffico presso le diverse intersezioni. I tool di esplorazione dei dati consentono di effettuare interrogazioni e di interagire con i singoli punti di dati sui grafici.

Nota

Questa sezione prosegue con l'analisi dei dati da Riepilogo dei dati.

Grafici bidimensionali a dispersione

Un grafico bidimensionale a dispersione, creato con la funzione scatter, mostra la relazione tra il volume di traffico alle prime due intersezioni:

load count.dat
c1 = count(:,1); % Data at intersection 1
c2 = count(:,2); % Data at intersection 2

figure
scatter(c1,c2,'filled')
xlabel('Intersection 1')
ylabel('Intersection 2')

La covarianza , calcolata dalla funzione cov, misura la forza della relazione lineare tra le due variabili (la vicinanza tra i dati lungo una linea di minori quadrati attraverso la dispersione):

C12 = cov([c1 c2])
C12 = 2×2
103 ×

    0.6437    0.9802
    0.9802    1.7144

I risultati sono visualizzati in una matrice quadrata simmetrica, con la covarianza delle variabili i-esima e j-esima nelle posizioni (i, j)-esime. Il i-esimo elemento diagonale è la varianza della i-esima variabile.

Le covarianze presentano lo svantaggio di dipendere dalle unità utilizzate per misurare le variabili individuali. È possibile dividere una covarianza per le deviazioni standard delle variabili per normalizzare i valori tra +1 e -1. La funzione corrcoef calcola i coefficienti di correlazione:

R12 = corrcoef([c1 c2])
R12 = 2×2

    1.0000    0.9331
    0.9331    1.0000

r12 = R12(1,2) % Correlation coefficient
r12 = 0.9331
r12sq = r12^2 % Coefficient of determination
r12sq = 0.8707

Essendo normalizzato, il valore del coefficiente di correlazione è velocemente confrontabile con i valori rispetto ad altre coppie di intersezioni. Il suo quadrato, il coefficiente di determinazione, è la varianza riferita alla linea di minori quadrati divisa per la varianza riferita alla media. In questo modo è la proporzione di variazione nella risposta (in questo caso, il volume del traffico all'intersezione 2) a essere eliminata o statisticamente spiegata da una linea di minori quadrati attraverso la dispersione.

Grafici tridimensionali a dispersione

Un grafico tridimensionale a dispersione, creato con la funzione scatter3, mostra la relazione tra il volume di traffico presso tutte e tre le intersezioni. Utilizzare le variabili c1, c2 e c3 create nel passaggio precedente:

figure
c3 = count(:,3); % Data at intersection 3
scatter3(c1,c2,c3,'filled')
xlabel('Intersection 1')
ylabel('Intersection 2')
zlabel('Intersection 3')

Misurare la forza della relazione lineare tra le variabili nella dispersione tridimensionale calcolando gli autovalori della matrice di covarianza con la funzione eig:

vars = eig(cov([c1 c2 c3]))
vars = 3×1
103 ×

    0.0442
    0.1118
    6.8300

explained = max(vars)/sum(vars)
explained = 0.9777

Gli autovalori sono le varianze lungo le componenti principali dei dati. La variabile explained misura la proporzione di variazione spiegata dal primo componente principale lungo l'asse dei dati. Diversamente dal coefficiente di determinazione per le dispersioni bidimensionali, questa misura distingue tra predittore e variabili della risposta.

Array di un grafico a dispersione

Utilizzare la funzione plotmatrix per mettere a confronto le relazioni tra coppie multiple di intersezioni:

figure
plotmatrix(count)

Il grafico nella posizione (i, j)-esima dell'array è una dispersione con la variabile i-esima sull'asse verticale e la variabile j-esima sull'asse orizzontale. Il grafico nella posizione diagonale i-esima è un istogramma della variabile i-esima.

Visualizzazione delle osservazioni dei dati nei grafici

Utilizzando il mouse è possibile ricavare osservazioni su praticamente qualsiasi grafico di MATLAB con due strumenti della toolbar delle figure:

  • Cursore dati

  • Evidenziazione dei dati

Ognuno di questi strumenti attiva le modalità di esplorazione, in cui è possibile selezionare punti di dati sul grafico per identificarne i valori e creare variabili del workspace per contenere osservazioni specifiche. Quando si utilizza l'evidenziazione dei dati è anche possibile copiare, eliminare o sostituire le osservazioni selezionate.

Ad esempio, creare un grafico a dispersione della prima e terza colonna di count:

load count.dat
scatter(count(:,1),count(:,3))
Selezionare lo strumento Cursore dati e fare clic sul punto di dati più a destra. In questo punto viene inserito un datatip che visualizza il valore di x e y del punto.

Per impostazione predefinita, i datatip visualizzano le coordinate x, y, e z (per i grafici tridimensionali). È possibile trascinare un datatip da un punto dati a un altro per visualizzare nuovi valori, oppure aggiungere datatip addizionali facendo clic con il tasto destro del mouse su un datatip e utilizzando il menu contestuale. È inoltre possibile personalizzare il testo visualizzato dai datatip con il codice di MATLAB.

L'evidenziazione dati è una feature correlata che consente di evidenziare una o più osservazioni su un grafico facendo clic o trascinando il mouse. Per attivare la modalità di evidenziazione fare clic sul lato sinistro dello strumento Evidenziazione dati nella barra degli strumenti delle figure. Facendo clic sulla freccia a destra dell'icona strumento apre una tavolozza dei colori che permette di selezionare il colore con cui evidenziare le osservazioni. Questa figura mostra lo stesso grafico a dispersione della figura precedente, ma con tutte le osservazioni che superano una deviazione standard della media (identificata utilizzando l'interfaccia GUI Tools > Data Statistics) evidenziate in rosso.

scatter(count(:,1),count(:,3))

Dopo aver evidenziato le osservazioni sui dati è possibile eseguire su di esse le seguenti operazioni:

  • Cancellarle.

  • Sostituirle con valori costanti.

  • Sostituirle con valori NaN.

  • Trascinarle o copiarle e incollarle nella Finestra di comando.

  • Salvarle come variabili del workspace.

Ad esempio, utilizzare il menu contestuale di evidenziazione dati oppure l'opzione Tools > Brushing > Create new variable per creare una nuova variabile denominata count13high.

Appare una nuova variabile nel workspace:

count13high

count13high =
    61   186
    75   180
   114   257

I grafici collegati, o collegamento dei dati, è una feature strettamente correlata all'evidenziazione dei dati. Un grafico è definito come collegato quando presenta una connessione attiva con i dati del workspace che rappresenta. Le copie delle variabili memorizzate in XData, YData (e, ove appropriato, ZData) di un oggetto, vengono aggiornate automaticamente tutte le volte che cambiano o vengono eliminate le variabili del workspace a cui sono collegate. Di conseguenza, i grafici su cui appaiono vengono aggiornati automaticamente.

Il collegamento di grafici alle variabili consente di tenere traccia di osservazioni specifiche tramite diverse presentazioni di queste ultime. Quando si evidenziano i punti di dati nei grafici collegati, evidenziando un grafico si evidenziano le stesse osservazioni anche in tutti gli altri grafici collegati alle stesse variabili.

Il collegamento dei dati crea una comunicazione bidirezionale immediata tra figure e variabili nel workspace, analogamente al modo in cui l'Editor variabili comunica con le variabili del workspace. Per creare i collegamenti attivare lo strumento di collegamento dati sulla barra degli strumenti di una figura. L'attivazione di questo strumento provoca la visualizzazione della barra delle informazioni sui grafici collegati, visualizzata nella figura seguente, nella parte superiore del grafico, a volte coprendone il titolo. È possibile chiudere la barra, riportata nella figura seguente, senza eliminare il collegamento verso il grafico; non viene stampata e non è salvata nella figura.

I due grafici seguenti descrivono la visualizzazione di due grafici a dispersione di dati collegati dopo l'evidenziazione di alcune osservazioni sul grafico di sinistra. La variabile comune count porta i segni dell'evidenziazione sulla figura di destra. Anche se il grafico di destra non è in modalità di evidenziazione dei dati, riporta comunque i segni dell'evidenziazione perché è collegato alle sue variabili.

figure
scatter(count(:,1),count(:,2))
xlabel ('count(:,1)')
ylabel ('count(:,2)')
figure
scatter(count(:,3),count(:,2))
xlabel ('count(:,3)')
ylabel ('count(:,2)')

Il grafico di destra mostra che le osservazioni evidenziate sono correlate più linearmente rispetto al grafico di sinistra.

Le osservazioni dei dati evidenziati appaiono nel colore prescelto quando vengono visualizzate nell'Editor variabili, come illustrato in questo punto:

openvar count

Nell'Editor variabili è possibile alterare qualsiasi valore dei dati del grafico collegato e i grafici rifletteranno queste modifiche. Per evidenziare le osservazioni sui dati dall'Editor variabili, fare clic sul corrispettivo pulsante Strumento di evidenziazione . Se la variabile evidenziata è correntemente riportata in un grafico collegato, le osservazioni evidenziate vengono evidenziate anche nel grafico, oltre che nell'Editor variabili. Quando si evidenzia una variabile che è una colonna in una matrice, vengono evidenziate anche le altre colonne nella riga. Ciò significa che è possibile evidenziare singole osservazioni in un vettore riga o colonna, ma tutte le colonne in una matrice vengono evidenziate in qualsiasi riga evidenziata, non solo le osservazioni su cui si fa clic.

Modellazione dei dati

Panoramica

I modelli parametrici traducono una comprensione delle relazioni tra i dati in strumenti analitici con potere previsionale. I modelli basati su polinomi e sinusoidi rappresentano scelte semplici per le tendenze verso l'alto e il basso nei dati del traffico.

Regressione polinomiale

Utilizzare la funzione polyfit per valutare i coefficienti dei modelli polinomiali, quindi utilizzare la funzione polyval per valutare il modello rispetto a valori arbitrari del predittore.

Il codice seguente adatta i dati sul traffico relativamente alla terza intersezione con un modello polinomiale di sesto grado:

load count.dat
c3 = count(:,3); % Data at intersection 3 
tdata = (1:24)'; 
p_coeffs = polyfit(tdata,c3,6);

figure 
plot(c3,'o-') 
hold on 
tfit = (1:0.01:24)'; 
yfit = polyval(p_coeffs,tfit); 
plot(tfit,yfit,'r-','LineWidth',2)
legend('Data','Polynomial Fit','Location','NW')

Il modello presenta il vantaggio della semplicità mentre segue la tendenza verso l'alto e il basso. L'accuratezza di questo potere previsionale è tuttavia incerta, in particolare alle estremità dei dati.

Regressione lineare generale

Presupponendo che i dati siano periodici, con un periodo di 12 ore e un picco attorno all'ora 7, è ragionevole adattare un modello sinusoidale della forma:

y=a+bcos((2π/12)(t7))

I coefficienti a e b appaiono linearmente. Utilizzare l'operatore mldivide (barra retroversa) di MATLAB® per l'adattamento ai modelli lineari generali:

load count.dat
c3 = count(:,3); % Data at intersection 3 
tdata = (1:24)'; 
X = [ones(size(tdata)) cos((2*pi/12)*(tdata-7))];
s_coeffs = X\c3;

figure
plot(c3,'o-')
hold on
tfit = (1:0.01:24)';
yfit = [ones(size(tfit)) cos((2*pi/12)*(tfit-7))]*s_coeffs; 
plot(tfit,yfit,'r-','LineWidth',2)
legend('Data','Sinusoidal Fit','Location','NW')

Utilizzare la funzione lscov per calcolare statistiche sull'adattamento, come gli errori standard previsti dei coefficienti e l'errore quadrato medio:

[s_coeffs,stdx,mse] = lscov(X,c3)
s_coeffs = 2×1

   65.5833
   73.2819

stdx = 2×1

    8.9185
   12.6127

mse = 1.9090e+03

Verificare il presupposto di un periodo di 12 ore nei dati con un periodogramma, calcolato utilizzando la funzione fft:

Fs = 1; % Sample frequency (per hour)
n = length(c3); % Window length
Y = fft(c3); % DFT of data
f = (0:n-1)*(Fs/n); % Frequency range
P = Y.*conj(Y)/n; % Power of the DFT

figure
plot(f,P)
xlabel('Frequency')
ylabel('Power')

predicted_f = 1/12
predicted_f = 0.0833

Il picco in prossimità di 0.0833 supporta questo presupposto, anche se si verifica con frequenza leggermente superiore. Il modello può essere adattato di conseguenza.

Vedi anche

| | | | | | | | | | | | | | | | | | | | |