%% Demo ke druhemu cviceni predmetu SAD

% vycisti workspace
clear all

% nacti data set Iris
load fisheriris
iris=dataset({meas(:,1),'SL'},{meas(:,2),'SW'},{meas(:,3),'PL'},{meas(:,4),'PW'},{species,'Class'})

%upravena data
%iris=dataset('File','iris.data.csv','Delimiter',',');

%dopln do instance tridy dataset dodatecne informace
desc = 'Fisher''s iris data (1936)';
units = [repmat({'cm'},1,4) {''}];
info = 'http://en.wikipedia.org/wiki/R.A._Fisher';

iris = set(iris,'Description',desc,...
                'Units',units,...
                'UserData',info);

%pojmenuj radky datasetu            
NumObs = size(iris,1);
NameObs = strcat({'Obs'},num2str((1:NumObs)','%-d'));
iris = set(iris,'ObsNames',NameObs);

iris

%% 1 Visualizace zastoupeni kategorickeho atributu v data setu 

class=cellstr(iris.Class(:));
len=[];

for i=unique(class)'
    len(end+1)=length(find(ismember(class, i)==1));
end

bar(len);
set(gca,'XTickLabel',unique(class)');

%% 2 Histogram

figure
hist(iris.PL);

% histogram s krivkou normalniho rozdeleni
figure 
h = histfit(iris.PL);
xlabel('PL');
ylabel('Počet');
set(h(1),'FaceColor',[.8 .8 1]);

% 2D histogram
figure
hist3([iris.PL iris.PW]);
xlabel('PL');
ylabel('PW');

%% 3 Boxplot

figure
attrib_names=get(iris,'VarNames');
boxplot(double(iris(:,1:4)),attrib_names(1:end-1),'notch','on');

%pozn: 
% Cara cervena cara je median
% Zarezy indikuji 95% interval spolehlivosti pro median
% Krabice (box) sama o sobe odpovida mezikvartilovemu rozpeti
% Maximalni delka fousu je 1.5 delky mezikvartiloveho rozpeti
% Pokud nejvzdalenejsi bod neni v  1.5 nasobku delky mezikvartiloveho
% rozpeti, muze byt fous zkracen. Data lezici za fousy jsou povazovany za
% odlehle body a jsou oznaceny krizkem
% ([http://en.wikipedia.org/wiki/File:Boxplot_vs_PDF.png]).

%% 4.1 Bodovy graf - PW proti PL

% bodovy graf (scatter plot)
figure
scatter(iris.PW,iris.PL);
xlabel('PW');
ylabel('PL');

% bodovy graf s hitogramy
figure 
scatterhist(iris.PW,iris.PL);
xlabel('PW');
ylabel('PL');

% jitter+kategorizovany bodovy graf
figure
gscatter(iris.PW+0.1*randn(size(iris,1),1),iris.PL+0.1*randn(size(iris,1),1),class,'','ooo');
xlabel('PW');
ylabel('PL');

%pozn: jitter - zavedeni maleho sumu - se pouziva pro potlaceni jevu, kdy
%se v bodovem grafu pod jednim bodem skryva vice bodu. Vyrazne  se tento
%problem projevuje u diskretnich dat.

%% 4.2 Bodovy graf - vsechny atributy proti vsem

idata=double(iris(:,1:4));
names=get(iris,'VarNames');

figure
gplotmatrix(idata,idata,class,[],[],[],[],[],names(1:4),names(1:4));


%% 5 Vizualizace mnohorozmernych dat - parallelcoords plot
figure
parallelcoords(idata,'group',class,'labels',names(1:4));

%% 6 Vizualizace mnohorozmernych dat - glyph plot

figure
glyphplot(idata,'obslabels',get(iris,'ObsNames'));


%% 7 Manipulace s chybejicimi daty

c = [1 2 5 7 NaN NaN];
isnan(c) % 1 ano; 0 ne
c(~isnan(c)) % vyber cisla ktera nejsou NaN

%% 8 Odlehle hodnoty


%priklad z matlab helpu pro vizualizaci a nahrazeni odlehlych hodnot
%symbolem NA

c3=double(iris(:,1))
bin_counts = hist(double(iris(:,2))); % Histogram bin counts
N = max(bin_counts); % Maximum bin count
mu3 = mean(c3); % Data mean
sigma3 = std(c3); % Data standard deviation

figure
hist(c3) % Plot histogram
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,'g','LineWidth',2) % Standard deviations
legend('Data','Mean','Stds')
hold off

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