%% Importazione dati da file Excel
% Importazione dei dati dentro MATLAB (tramite la funzione readtable) 'Sheet','dati' specifica che occorre leggere dal foglio denominato dati 'range','B1:E26' specifica che occorre leggere la zona B1:E26 'ReadVariableNames',true, specifica che la prima riga della zona B1:E26 contiene i nomi delle variabili (l'opzione predefinita è true di conseguenza questa istruzione non era nencessaria) 'ReadRowNames',true, specifica che la prima colonna contiene i nomi delle righe

X = readtable('HTss.xlsx', 'Sheet','dati','range','B1:E26',...
    'ReadVariableNames',true,'ReadRowNames',true);
% Per maggiori dettagli su readtable consultare l'help della funzione
% nell'help locale oppure all'indirizzo
% https://www.mathworks.com/help/matlab/ref/readtable.html

%
%% Implementazione veloce
% Xsttable contiene una copia di X

Xsttable=X;
% L'istruzione che segue afferma: il contenuto di Xstable è uguale all
% matrice degli scostamenti standardizzati della table X
Xsttable{:,:}=zscore(X{:,:});
% Visualizzo a schermo la table che contiene gli scostamenti standardizzati
disp('table contenente gli scostamenti standardizzati')
disp(Xsttable)
% Rappresento graficamente gli scostamenti standardizzati
nomirighe=X.Properties.RowNames;
bar(categorical(nomirighe),Xsttable{:,:})
title('Rappresentazione grafica della matrice degli scostamenti standardizzati')

%
%% Implementazione lenta (facoltativa)
% Passi di questa implementazione Trasformo la table nxp in array nxp Standardizzo l'array trasformo l'array standardizzato in table

% Standardizzaione dei dati
% Definisco la matrice Xd come il contenuto della table X in formato double
% (ossia contentente solo i numeri dentro X e senza i nomi di riga e
% colonne)
Xd=X{:,:};
% alternativamente si poteva utilizzare l'istruzione
% Xd= table2array(X);

% Standardizzazione tramite media e sigma utilizzando la funzione zscore
% La funzione per standardizzare i dati si chiama zscore
Xdst=zscore(Xd);
disp('Matrice degli scostamentis standardizzati')
disp(Xdst)

% La media di ogni colonna della matrice Xdst è zero
% La varianza di ogni colonna della matrice Xdst è 1
% I numeri all'interno della matrice Xdst sono puri numeri (e di
% conseguenza sono direttamente confontabili)

% Verifico che le colonne della matrice Xdst abbiano media zero.
% Ovviamente la media non sarà esattamente 0 ma un numero piccolissimo
% dell'ordine di grandezza di 10^-15 (ossia 1.0e-15 utilizzando la
% notazione ingegneristica)
disp('Le colonne della matrice degli scostamenti standardizzati hanno media zero')
disp(mean(Xdst))

% Verifico che le colonne della matrice Xdst abbiano varianza 1
disp('Le colonne della matrice degli scostamenti standardizzati hanno varianza uno')
disp(var(Xdst))

%
%% Rappresentazione grafica degli scostamenti standardizzati
% L'istruziona che segue crea una nuova finestra grafica in modo da non rimpiazzare il grafico precedente

figure

% Si utilizza la funzione bar
bar(categorical(X.Properties.RowNames),Xdst,'DisplayName','Xdst')
% Aggiunta del titolo
title('Rappresentazione grafica Z (modo 2)')
% In questa rappresentazione grafica aggiungo anche la legenda
legend("Z"+X.Properties.VariableNames,'Location','best')

% ruoto i nomi delle righe nel grafico (istruzione puramente facoltativa)
set(gca,'xticklabel',X.Properties.RowNames,'XTickLabelRotation',60)


% L'ultima operazione consiste nel trasformare in table la matrice Xdst.
% aggiungendo i nomi delle righe e delle colonne
Xsttable=array2table(Xdst,'RowNames',X.Properties.RowNames,'VariableNames',X.Properties.VariableNames);
disp('table contenente gli scostamenti standardizzati (implementazione lenta)')
disp(Xsttable)

% Osservazione: i numeri contenuti dentro Xsttable sono direttamente
% confrontabili (in quanto sono puri nuemeri)
% Dall'esame della riga
disp('Scostamenti standardizzati per Orion HTS2965')
Xsttable('Orion HTS2965',:)
% emerge che il modello di home theatre  denominato Orion HTS2965 presenta valori di
% prezzo, potenza e numero di casse inferiori alla media. Il modello  Orion
% HTS2965 si discosta maggiormente dalla media in termini di prezzo.

% Dall'esame di riga
disp('Scostamento standardizzati del numero di casse di Jbl DSC1000')
Xsttable('Jbl DSC1000','CASSE')
disp('Scostamento standardizzati del prezzo di Waitec HTXE')
Xsttable('Waitec HTXE','PREZZO')

% emerge che si discosta più dalla media  il numero di casse dell'home
% theatre Jbl DSC100 rispetto al prezzo dell'home theatre Waitec HTXE in
% quanto |-1.0955| <|1.1533|