%%  Анализ данных
% Лекция
%
%% Нахождение пропущенных данных
% Для поиска отсутствующих данных (NaN) используется функция isnan, а для поиска бесконечных величин (Inf) используется функция isfinite:
%
% Пример:

V1 = randi([-15,15],1,7);
V1([2 4])=NaN;      
V1(end) = V1(end)/0;   % результат деления на ноль - бесконечность
V1
[   isnan(V1);
 isfinite(V1)]

% Иногда требуется проверка на отсутствие данных в векторе вообще, или проверка на наличие хотя бы одного отсутствующего элемента. Для первого случая используется команда all, а для второго - any:

V2 = NaN(1,5)     % Вектор-столбец из отсутствующих данных
[any(isnan(V1)), all(isnan(V1));
 any(isnan(V2)), all(isnan(V2))]

% Результатом выполнения команд isnan и isfinite по отношению к матрицам выдаст, соответственно, логические матрицы. С помощью команд any и all можно определить наличие отсутствующих данных и отсутствие данных вообще, анализируя по строкам или столбцам:
%

B = randi([-15,15],4,5);
B([3 1],1) = NaN; 
B(:,3) = NaN
isnan(B)

% По умолчанию анализ ведётся по столбцам (Dimention = 1). Для анализа по строкам, функция all (или any) должна быть вызвана с параметром (Dimention = 2):
%
% Пример:

any(isnan(B),1)     % Параметр Dimention = 1, анализ по столбцам
any(isnan(B),2)     % Параметр Dimention = 2, анализ по строкам

% Для поиска отсутствующих элементов таблиц используется функция ismissing, а именно:
%     ●  ищет NaN для числовых переменных
%     ●  ищет NaT для временных переменных
%     ●  ищет пустые текстовые переменные
%      и т д.
%
%% Работа с пропущенными данными
% Существует 3 основных подхода к работе с пропущенными данными: игнорировать, удалять или присваивать им значения:
%
% Удалять пропущенные данные можно с помощью команды rmmissing:
%

V3 = randi([1 8], 1,8);
V3([2 3 6]) = NaN
rmmissing(V3)

% В случае применения функции rmissing к матрицам удаляются все столбцы и строки, содержащие отсутствующие данные:
%

C = randi([-15,15],4,5);
C(2,2) = NaN; 
C(2,3) = NaN; 
C(4,3) = NaN'
rmmissing(C)

% Данные можно заменить с помощью функции fillmissing, указав ей метод, с помощью которого будет производиться замена. Методы представлены в таблице:
%

V3
 fillmissing(V3,'next') 
 fillmissing(V3,'linear')

%
%% Работа с данными
% В MATLAB считает корреляцию между двумя векторами по формулам:
%
% где \sigma_A и \sigma_B - стандартные отклонения для векторов A и B. Матрица корреляции для двух векторов имеет вид:
%
% Для нахождения матрицы корреляций между векторами используется функция corrcoeff. Пример нахождения матрицы корреляций для 3-х векторов:

D1 = randn(100,1);
D2 = randi([-20,20],100,1);
D3 = 1 + rand(100,1);
corrcoef([D1,D2,D3])   

% В MATLAB также возможно выполнять сглаживание методом скользящего среднего с помощью функции movnean:
%
% Если элементов не хватает для вычисления, то среднее берётся по оставшимся элементам:
%

E = randi([-4 10], 1, 10)
movmean(E,3)
movmean(E,8)