octave, maxima 등을 이용한 실험 데이터의 조작 방법?

tombraid의 이미지

학교에서 실험한 데이터를 정리하려고 합니다.

실험 결과가 텍스트로 나와서 grep, paste, cut, sed 등으로 대충 정리는 했습니다.

간단히 gnuplot으로 그래프도 확인했구요.

그런데, 텍스트 파일로 떨어진 결과들에 대한 처리 작업을 하려고 하는데요.

찾아봤더니 octave나 maxima 등을 이용할 수 있다고 하던데, 어떻게 접근해야 할지 잘 모르겠네요.

간단히 구간평균정도를 구하는 샘플등을 구할 수 있을까요?

구간평균정도 구하는 샘플이면 수정해서 원하는 전처리가 가능할 것 같아서요.

redneval의 이미지

octave로 처리하려면,

우선 텍스트 파일의 포맷을 octave상의 배열로 바꿔야 하는데요.

(일단 배열로 바꾸고 나면 그 다음은 간단합니다.)

그 텍스트 파일의 (데이터) 형태를 알아야 도움을 드릴 수 있습니다.

(예를들면, 한 줄에 숫자가 하나씩 있다던지, 아니면 데이터 사이에는 공백문자가 있다던지.)

tombraid의 이미지

데이터는
X1(탭)Y1
X2(탭)Y2
X3(탭)Y3
...

형태로 되어 있습니다.
참고로, X, Y 값은 소수점 둘째자리까지 값이 있습니다.

redneval의 이미지

파일형식이 간단하니까 쉽게 될 것 같네요.

제 컴에 Octave가 안 깔려서 확인은 못했지만,

우선 Octave의 Path를 알아보죠.

>>> path()

path 중에 하나를 작업디렉터리로 정하세요.

파일이름을 data.txt로 만들고 작업디렉터리로 옮기세요.

그리고는,

>>> load data.txt
>> size(data)

출력 결과가 0이 아닌 결과가 나오면 성공입니다.

그 다음에,

>>> data(1,1)
>> data(1,2)

를 입력해서 X1, Y1값이 나오는지 확인하세요.

일단 여기까지 해보세요.

tombraid의 이미지

load시 경로를 전체경로로 주니까 되네요.

변수명은 파일명에서 확장자를 뺀것으로 잡히는것 같네요.

redneval의 이미지

% 먼저 구간의 크기를 정합니다.
% 구간의 크기를 10으로 하겠습니다.
d = 10; %구간크기

x = data(:,1);
n = length(x); % 데이터 갯수
m = floor(n/d) %구간의 갯수
temp_x = reshape(x(1:d*m),d,m); %2차원 배열로 바꿉니다.
average_x = sum(temp_x,1) / d; %평균구하기

y = data(:,2); %마찬가지로 y에 대해서도 할 수 있습니다.
temp_y = reshape(y(1:d*m),d,m);
average_y = sum(temp_y,1) / d;

tombraid의 이미지

이제 좀 대충 감이 잡히네요.

어떤 용어(매트릭스 랄까, 배열이랄까, 테이블이랄까??)를 쓰는지는 모르겠지만

하여튼 이런 형식의 데이터를 다루기 쉽게 되어있는것 같네요.

기왕 가르쳐 주시는거 마지막으로 한가지만 더 여쭐께요. ^^

처리된 데이터 average_x, average_y 를 이용해서 그래프를 그리려면 어떤 방법을 사용하나요?

p_data(:, 1) = average_x 이런식으로 원래 있던 데이터형태대로 만들어봤거든요.

save p_data 했더니 p_data를 저장하는게 아니라 p_data 라는 파일명에 전체 변수들의 값을 저장해 주더군요.

vi에서 약간만 처리하면 gnuplot의 데이터로 사용할 수 있을것 같기도 하지만 더 간단한 방법이 존재할 것 같아서요.

redneval의 이미지

그래프 그리기

plot(1:m,average_x)
plot(1:m,average_y)

혹시 x,y가 각각 x,y 좌표를 나타내는 거라면,

plot(average_x,average_y)

한 가지 설명을 더 추가하면
위에서 한 방법은 Matlab(또는 Octave)답게 만든 거구요.

프로그래밍을 했던 사람이라면
for, if문 등을 이용해서 할 수도 있습니다.
다만, Matlab은 C와는 다르게 배열의 index가 1부터 시작합니다.

x = data(:,1);
n = length(x);
m = floor(n/d); %여기까지는 같습니다.

sum_x = zeros(1,m); % 영벡터를 할당합니다.
for i = 1:m*d
sum_x(1,floor((i-1)/d)+1) = sum_x(1,floor((i-1)/d)+1) + x(i,1)
end
average_x = sum_x / d;

방식은 다르지만 결과는 위와 똑같게 나옵니다.
아마도 이 방식이 더 쉽게 느껴지실 겁니다.

tombraid의 이미지

감사합니다. 이제 어느정도 사용할 수 있을것 같네요.

한스텝한스텝 가르쳐 주셔서 과외 받는 기분이었습니다.

다시 한번 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.