% Skript slouží k:
% 1. Načtení souboru Data_neuro.xlsx
% 2. Výběru několika proměnných z W až AB a kategoriální Group_3kat (sloupeček C) nebo Gender_rek (sloupeček H)
% 3. Vizualizaci dat:
% a) 3D sloupkové grafy
% b) tečkový graf dle kategoriální proměnné
% c) maticový graf
% d) ikonové grafy
% Vytvořeno 20.7.2015; MG

clear all
close all

%% Načtení souboru Data_neuro.xlsx

filename='Data_neuro.xlsx';

% nastavení cesty do složky obsahující data - např.:
path='c:\Users\janousova\Documents\Vyuka\DSAN02\2016 jaro\DSAN02_predn01_Uvod\';


file_path=fullfile(path,filename);
if exist(file_path)
   [num,txt] = xlsread(file_path);
else
    [filename, path, ~] = uigetfile('Data_neuro*');
    file_path=fullfile(path,filename);
    try
    [num,txt] = xlsread(file_path);
    catch
        error('Vybrán špatný soubor')
    end
end


%% Výběr proměnných
id=0;
vyber1=[];

for i=23:28 % Sloupce, které mají být na výběr v dialogu
    id=id+1;
    vyber1=[vyber1,num2str(id),' - ',txt{1,i},' \n'];

end

vyber=['Napište čísla proměnných pro vizualizaci: \n  \nnapř.: 2:4,6 \n \n',vyber1];

str = sprintf(vyber);

defaultanswer={num2str(1:6)};

x = inputdlg(str,'Vstup',1,defaultanswer);

rows = str2num(x{:}); 
rows_orig=22+rows;
nrows=numel(rows_orig);

disp(['Proměnné pro vizualizaci:'])
fprintf([txt{1,rows_orig},'\n \n'])

var_desc=txt(1,rows_orig);% Popis dat - legenda
for i=1:numel(var_desc)
    var_desc{i}(var_desc{i}=='_')=' ';
end

data=num(:,rows_orig);
nsub=size(data,1);


%% Výběr kategoriální proměnné
choice = questdlg('Vyberte kategoriální proměnnou', ...
	'Kategoriální proměnná', ...
	'Group_3kat','Gender_rek','Gender_rek');
% Handle response
switch choice
    case 'Group_3kat'
        disp(['Kategoriální proměnná: Group_3kat'])
        category_row = 3;
        cat=num(:,category_row);
        ncat=3;% Počet kategorií
        cat_desc={'CN','MCI','AD'};
    case 'Gender_rek'
        disp(['Kategoriální proměnná: Gender_rek'])
        category_row = 8;
        tmp_cat=txt(:,category_row);
        cat=zeros(length(tmp_cat)-1,1);
        for kk=2:length(tmp_cat)
            switch tmp_cat{kk}
                case 'M'
                    cat(kk-1,1)=1;
                case 'F'
                    cat(kk-1,1)=2;
            end
        end
        ncat=2;
        cat_desc={'M','F'};
end
lut=colormap(hsv(ncat));
close all
% fprintf('\n')


%% Vizualizace
choice = questdlg('Grafy do jednoho okna?', ...
    'Typ vykreslení', ...
    'Ano','Ne','Ano');
% Handle response
spolu=1;
switch choice
    case 'Ne'
        spolu=0;
end

%% 3D sloupkový graf
for ii=1:nrows
    for jj=1:ii
        if ii~=jj
            
            plot_id=(ii-2)*(nrows-1)+jj;
            tmp_x=data(:,ii);
            tmp_y=data(:,jj);
            tmp_data=[tmp_x,tmp_y];
            if spolu==1
                f1=figure(1);
                set(f1,'name','3D sloupkový graf','units','normalized','outerposition',[0 0 1 1])
                subplot(nrows-1,nrows-1,plot_id)
            else
                f1=figure;
                set(f1,'name','3D sloupkový graf','units','normalized','outerposition',[0 0 1 1])
            end 
                hold on
                hist3(tmp_data,[10 10])
                xlabel(var_desc{ii})
                ylabel(var_desc{jj})
                grid on
                view(3)
        end
    end
end
%% Tečkový graf dle kategorie
% f2=figure;
% set(f2,'name','Tečkový graf dle kategorie','units','normalized','outerposition',[0 0 1 1])
for ii=1:nrows
    for jj=1:ii
        if ii~=jj
            plot_id=(ii-2)*(nrows-1)+jj;
            
            if spolu==1
                f2=figure(2);
                set(f2,'name','Tečkový graf dle kategorie','units','normalized','outerposition',[0 0 1 1])
                subplot(nrows-1,nrows-1,plot_id)
            else
                f2=figure;
                set(f2,'name','Tečkový graf dle kategorie','units','normalized','outerposition',[0 0 1 1])
            end
            for cat_id=1:ncat
                tmp_x=data(cat==cat_id,ii);
                tmp_y=data(cat==cat_id,jj);
                tmp_data=[tmp_x,tmp_y];
                hold on
                plot(tmp_x,tmp_y,'x','Color',lut(cat_id,:),'linewidth',1)
                xlabel(var_desc{ii})
                ylabel(var_desc{jj})
                grid on
            end
            legend(cat_desc)
        end
    end
end



%% Maticový graf
f3=figure;
set(f3,'name','Maticový graf','units','normalized','outerposition',[0 0 1 1])
for ii=1:nrows
    for jj=1:nrows
        plot_id=(ii-1)*(nrows)+jj;
        subplot(nrows,nrows,plot_id)
        if ii~=jj
            tmp_x=data(:,ii);
            tmp_y=data(:,jj);
            %             tmp_data=[tmp_x,tmp_y];
            hold on
            plot(tmp_x,tmp_y,'x','Color','b','linewidth',1)
            xlabel(var_desc{ii})
            ylabel(var_desc{jj})
            grid on
        else
            hold on
            hist(data(:,ii))
            xlabel(var_desc{ii})
            grid on
        end
    end
end
%% Ikonový graf
% http://www.mathworks.com/help/stats/examples/visualizing-multivariate-data.html


vyber=['Napište čísla subjektů pro vizualizaci ikonovým grafem: \n  \nnapř.: 2:4,6 \n \n','Vyberte mezi subjekty 1 až ',num2str(nsub)];

str = sprintf(vyber);

defaultanswer={num2str(10:20)};

x = inputdlg(str,'Ikonový graf',1,defaultanswer);
subdesc = str2num(x{:}); 
for ii=1:numel(subdesc)
    sub_labels{ii}=num2str(subdesc(ii));
end

f4=figure;
set(f4,'name','Ikonový graf')
glyphplot(data(subdesc,:), 'glyph','face', 'varLabels',var_desc,'obslabels',sub_labels);
title('Ikonový graf vybraných subjektů');
