카테고리
Submission Archivesubmission
코드와 해설을 함께 읽는 학습 문서
Code Detail
Statistics + Control & Dynamics 중심의 Octave 학습 예제
ex-recv/02/02_mjy_new/main_02_mjy_new.m
코드를 복사해 Octave에서 바로 실행할 수 있습니다.
88 lines
% 주제: 하나의 데이터 세트를 읽어서 대표값과 특징을 계산하고 그리는 연습을 합니다.
% 프로그램 설명 : 구글의 2024년도 주가 데이터에 대해 통계 항목을 계산하고,
% 30일 기간을 기준으로 통계치를 계산하여 차트를 그리는 프로그램입니다.
% 작성자 : 문제영
% 작성 날짜 : 20250326
clc;clear
pkg load io
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1. 구글의 2024년도 주가 데이터를 준비하라.
% 데이터 읽기
[data_date, data_close] = read_data('google_data_2024.csv');
##data_date_cell = data(4:end,1); % 날짜 데이터 cell 형식
##data_close_cell = data(4:end,2); % 종가 데이터 cell 형식
##data_date = cellfun(@(x) datenum(x, "yyyy-mm-dd"), data_date_cell);
##data_close = cell2mat(data_close_cell);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2. 1년치 데이터의 종가에 대해 통계 항목을 계산하라.
% 직접 만든 함수로 연산 실행
d_mean = data_m(data_close);
d_var = data_var(data_close);
d_dev = data_dev(data_close);
d_rms = data_rms(data_close);
% 옥타브 제공 함수로 연산 실행
d_O_mean = mean(data_close);
d_O_var = var(data_close,1);
d_O_dev = std(data_close,1);
d_O_rms = sqrt(mean(data_close.^2));
% 두 계산 결과 비교
fprintf("직접 평균: %f, Octave 평균: %f\n", d_mean, d_O_mean);
fprintf("직접 분산: %f, Octave 분산: %f\n", d_var, d_O_var);
fprintf("직접 표준편차: %f, Octave 표준편차: %f\n", d_dev, d_O_dev);
fprintf("직접 RMS: %f, Octave RMS: %f\n", d_rms, d_O_rms);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3. 같은 데이터에서 30일째 이후부터 직전 30일에 대해서 통계 항목을 계산하고 차트를 그려라.
n_data = length(data_close);
after_days = 30;
data_date_after = data_date(after_days+1:end);
data_close_m = zeros(n_data-after_days,1);
data_close_v = zeros(n_data-after_days,1);
data_close_d = zeros(n_data-after_days,1);
data_close_rms = zeros(n_data-after_days,1);
for i = after_days+1 : n_data
data_after_days = data_close(i-after_days:i-1);
data_close_m(i-after_days) = data_m(data_after_days); % 직전 30일 평균
data_close_v(i-after_days) = data_var(data_after_days); % 직전 30일 분산
data_close_d(i-after_days) = data_dev(data_after_days); % 직전 30일 표준편차
data_close_rms(i-after_days) = data_rms(data_after_days); % 직전 30일 rms
end
% 차트 그리기
width = 1300; height = 800;
# set(figure(1),'Position',[200 100 width height])
set(figure(1))
subplot(2,2,1)
plot_d(data_date_after, data_close_m, 'r', "종가 평균", "Mean");
xlabel('Date'); legend('평균');
subplot(2,2,2)
plot_d(data_date_after, data_close_v, 'b', "종가 분산", "Variance");
xlabel('Date'); legend('분산');
subplot(2,2,3)
plot_d(data_date_after, data_close_d, 'g', "종가 표준편차", "Standard Deviation");
xlabel('Date'); legend('표준편차');
subplot(2,2,4)
plot_d(data_date_after, data_close_rms, 'm', "종가 RMS", "RMS");
xlabel('Date'); legend('RMS');
figure(342)
plot(rand(1,10),rand(1,10)); hold on
plot(rand(1,10),rand(1,10)); hold on
plot(rand(1,10),rand(1,10),"DisplayName","test"); hold on
plot(rand(1,10),rand(1,10)); hold on
hold off
legend({'test1','test2'},'Location','SouthEast'); ex-recv/01/01-CJW-20250321/수치미분.m
ex-recv/01/01-CJW-20250321/main_cjw.m
ex-recv/01/01-JKH-20250319/main-my_diff.m
ex-recv/01/01-KSG-20250318/hw_1_kim-gpt.m
ex-recv/01/01-KSG-20250318/hw_1_kim.m
ex-recv/01/01-LSH-20250319/[Octave] HW#1.m
ex-recv/01/01-MJY-20250319/Octave_Moon_250319.m
ex-recv/01/01-PJM-20250319/Octave01_Park,jm_250319.m