%% БнЬлхуз Кенфсйкьфзфбт кбй ДйбурпсЬт Чщсйкпэ Узмейбкпэ Рспфэрпх
% *ЦбЯдщн КхсйбкЯдзт* 
%
% ФмЮмб ГещгсбцЯбт РбнерйуфзмЯпх БйгбЯпх

%% ЕйубгщгЮ фщн дедпмЭнщн Lansing tree
load lansingTrees.mat
who

%% РлзспцпсЯет гйб фп фЯ ресйЭчей фп бсчеЯп Lansing trees
lansInfo

%% ЕмцЬнйуз уфпйчеЯщн фпх рЯнбкб lansTrees
disp( lansTrees(1:5,:) )
disp( lansTrees(200:205,:) )

%% ЕмцЬнйуз уфпйчеЯщн фпх кхшелщфпэ рЯнбкб lansLabels
disp( lansLabels )
lansLabels(1)
lansLabels{1}

%% БнЬиеуз уе мефбвлзфЭт ме мйксьфесб пньмбфб
x = lansTrees(:,1);
y = lansTrees(:,2);
c = lansTrees(:,3);  % 3з уфЮлз -> кщдйкпЯ (1,2,...,6) ме фэрп дЭнфспх

%% Брейкьнйуз дйбурпспгсЬммбфпт иЭуещн ме фзн енфплЮ plot
plot(x,y,'*');
axis equal  % Ядйп вЮмб уфп ч кбй уфп ш
axis square % фефсЬгщнп гсЬцзмб

%% Брейкьнйуз дйбурпспгсЬммбфпт ме фзн енфплЮ scatter
scatter(x,y)
%scatter(x,y,'r*')
%scatter(x,y,50,'ro')
%scatter(x,y,c)
%scatter(x,y,10,c)
%scatter(x,y,10,c,'filled')
%colorbar
axis equal square

%% Дйбурпсьгсбммб ме ресйиюсйб йуфпгсЬммбфб
nBins = [50 40];
scatterhist(x,y,nBins);

%% Еэсеуз кенфсйкпэ узмеЯпх (брь фб Юдз хрЬсчпнфб)
% Уфьчпт мбт едю еЯнбй нб вспэме фп "кенфсйкьфесп" узмеЯп фпх рспфэрпх,
% дзлбдЮ екеЯнп фп узмеЯп (брь фб Н дйбиЭуймб), фпх прпЯпх з ухнплйкЮ
% (ЕхклеЯдйб) брьуфбуз брь фб хрьлпйрб узмеЯб еЯнбй з елЬчйуфз
%
% Рсюфб рсЭрей нб хрплпгЯупхме фпн рЯнбкб брпуфЬуещн мефбоэ ьлщн 
% фщн жехгюн узмеЯщн. З ЕхклеЯдйб брьуфбуз мефбоэ узмеЯщн хрплпгЯжефбй
% ме фз ухнЬсфзуз/енфплЮ pdist. Чсейбжьмбуфе фп еобгюменп фзт енфплЮт
% бхфЮт уфз мпсцЮ фефсбгщнйкпэ рЯнбкб, фп прпЯп кбй ерйфхгчЬнефбй ме фзн
% енфплЮ squareform:
D = squareform(pdist([x y])); % рЯнбкбт брпуфЬуещн мефбоэ узмеЯщн
N = numel(x) % бсйимьт уфпйчеЯщн дйбнэумбфпт x -> бсйимьт узмеЯщн Н
size(D)  % дйбуфЬуейт рЯнбкб брпуфЬуещн D
imagesc(D); colorbar
%%
% П рЯнбкбт бхфьт еЯнбй ухммефсйкьт ме фб уфпйчеЯб уфз дйбгюнйп Яуб ме 0:
[D(1,2) D(2,1) D(4,5) D(5,4)]
[D(1,1) D(2,2) D(30,30)]
%%
% З гсбммЮ (Ю уфЮлз) 10, гйб рбсЬдейгмб, фпх рЯнбкб D, ресйЭчей фйт 
% брпуфЬуейт мефбоэ фпх узмеЯпх ме ухнфефбгмЭнет (x(10),y(10)), кбй ьлщн
% фщн хрплпЯрщн
%%
% ШЬчнпхме екеЯнп фп узмеЯп, дзлбдЮ екеЯнз фз гсбммЮ (Ю уфЮлз), 
% фп Ьиспйумб фщн уфпйчеЯщн фзт прпЯбт (фб уфпйчеЯб еЯнбй брпуфЬуейт) 
% еЯнбй елЬчйуфп. Фп ерьменп вЮмб лпйрьн еЯнбй п хрплпгйумьт 
% фщн ухнплйкюн брпуфЬуещн гйб кЬие узмеЯп, дзлбдЮ гйб кЬие гсбммЮ:
sumDrow = sum(D,2); % Ьиспйумб уфпйчеЯщн (брпуфЬуещн) кЬие гсбммЮт
size(sumDrow) % дйбуфЬуейт дйбнэумбфпт
hist(sumDrow,30); % йуфьгсбммб ухнплйкюн брпуфЬуещн ме 30 сЬвдпхт
%%
% ФЭлпт, бнбжзфпэме фп уфпйчеЯп (Ю кблэфесб фпн бэопнфб бсйимь фпх), рпх
% бнфйуфпйчеЯ уфз елЬчйуфз ухнплйкЮ брьуфбуз:
[minSumDrow,ii] = min(sumDrow)
%%
% ьрпх minSumDrow еЯнбй фп мйксьфесп уфпйчеЯп (брьуфбуз) фпх sumDrow, 
% кбй ii еЯнбй п бэощн бсйимьт екеЯнпх фпх уфпйчеЯпх фпх sumDrow 
% рпх бнфйуфпйчеЯ уфп мйксьфесп уфпйчеЯп/брьуфбуз. ДзлбдЮ, ii еЯнбй 
% п бэощн бсйимьт фпх кенфсйкпэ узмеЯпх рпх бнбжзфпэме.
xCentr = x(ii); yCentr = y(ii);
plot(x,y,'b*',xCentr,yCentr,'ro');

%% Хрплпгйумьт ресйгсбцйкюн уфбфйуфйкюн узмейбкпэ рспфэрпх
w = []; % ВЬсз ден хрЬсчпхн, Ьсб рбЯснпхме фп кень дйЬнхумб
Out = centerspread([x y],w) % [x y] -> рЯнбкбт ме ухнфефбгмЭнет

%% ЕрблЮиехуз хрплпгйумпэ чщсйкпэ мЭупх
[mean(x) mean(y)]
Out.mean

%% ЕрблЮиехуз хрплпгйумпэ фхр. брьклйузт
[std(x) std(y)]
Out.std
[std(x,1) std(y,1)]

%% Чщсйкьт мЭупт кбй чщсйкьт дйЬмеупт
plot(x,y,'*');
hold on
centerspread([x y],w,{'mean','none'}); % чщсйкьт мЭупт
% 'none' -> мз жщгсбцЯжейт фЯрпфб учефйкь ме дйбурпсЬ
%centerspread([x y],w,{'median','none'}); % чщсйкьт дйЬмеупт
axis equal square
hold off
disp( Out )

%% Кэклпт фхрйкЮт брьуфбузт кбй рбсбллзльгсбммп фефбсфзмпсЯщн
plot(x,y,'*');
hold on
% кэклпт ме кЭнфсп фп чщсйкь мЭуп кбй бкфЯнб фзн фхрйкЮ брьуфбуз ФБ
centerspread([x y],w,{'mean','circle'});
% Рбсбллзльгсбммп ме кЭнфсп фп чщсйкь дйЬмеуп кбй рлехсЭт рпх
% псЯжпнфбй брь фб кбфюфесб кбй бнюфесб фефбсфзмьсйб фщн ч кбй ш
centerspread([x y],w,{'median','rectangle'});
axis equal square
hold off
disp( Out )

%% ёллейшз фхрйкЮт брьклйузт
plot(x,y,'*');
hold on
centerspread([x y],w,{'mean','ellipse'});
axis equal square
hold off
Out.ellipse
% Бжймпэийп кэсйпх Ьопнб Эллейшзт, кэсйпт змй-Ьопнбт, елЬуущнбт змй-Ьопнбт

%% ПмбдпрпйзмЭнп дйбурпсьгсбммб
h = gscatter(x,y,c);
set(h,'MarkerSize',5);
%legend('A','Hickory','Maple','D','E','F');
%legend(lansLabels);

%% ДзмйпхсгЯб оечщсйуфюн мефбвлзфюн
xH = x(c==2);  % x-coords of hickory trees
xM = x(c==3);  % x-coords of maple trees
yH = y(c==2);  % y-coords of hickory trees
yM = y(c==3);  % y-coords of maple trees

%% РесйгсбцйкЬ уфбфйуфйкЬ фщн Hickory
OutH = centerspread([xH yH],w)

%% РесйгсбцйкЬ уфбфйуфйкЬ фщн Maple
OutM = centerspread([xM yM],w)

%% РесйгсбцйкЬ уфбфйуфйкЬ (мЭупй ьспй) ьлщн фщн фэрщн дЭнфсщн
grpstats([x y],c)

%% ЕрйлегмЭнб ресйгсбцйкЬ уфбфйуфйкЬ ьлщн фщн фэрщн дЭнфсщн
[gMean,gStd,gVar] = grpstats([x y],c,{'mean','std','var'})

%% Дйбурпсьгсбммб иЭуещн Maple кбй Hickory
plot(xH,yH,'r*',xM,yM,'b+');
axis equal square
legend('Hickory','Maple');
title('Locations of Hickory (*) and Maple (+) trees');

%% Дйбурпсьгсбммб ме ресйиюсйб йуфпгсЬммбфб Hickory
nBins = [50 40];
scatterhist(xH,yH,nBins);

%% Дйбурпсьгсбммб ме ресйиюсйб йуфпгсЬммбфб Maple
nBins = [50 40];
scatterhist(xM,yM,nBins);

%% ЧщсйкпЯ мЭупй
plot(xH,yH,'r*',xM,yM,'b+');
hold on
centerspread([xH yH],w,{'mean','none'},{'r*',12});
centerspread([xM yM],w,{'mean','none'},{'b+',12});
axis equal square
hold off

%% ЧщсйкпЯ мЭупй кбй еллеЯшейт
plot(xH,yH,'r*',xM,yM,'b+');
hold on
centerspread([xH yH],w,{'mean','ellipse'},{'r*',12},{'r-',2});
centerspread([xM yM],w,{'mean','ellipse'},{'b+',12},{'b-',2});
axis equal square
hold off