[완료]csv 포맷 cell끼리 계산하는 방법
글쓴이: joa / 작성시간: 월, 2010/01/25 - 3:35오후
실험 데이터가 csv 포맷(tab delimiter)으로 나옵니다.
이 파일들은 모두 행과 열이 모두 같습니다.
예를 들어, A.csv는
1 2 3 4 5 6
B.csv는
2 3 4 5 6 7
같은 위치의 셀끼리 간단히 사칙연산을 할 필요가 있는데요. 간단히 할 수 있는 방법 없을까요?
엑셀에서 하면 매우 간단하나 행렬수가 많다보니 읽고 쓰는데 시간이 오래걸리고 일일이 수작업으로 반복 작업을 하다보니 좀 짜증이 나네요.
엑셀 매크로를 사용할 수도 있으나 제가 지금 맥을 쓰는 관계로 베이직 매크로가 지원이 안됩니다. --;
아무래도 리눅스(맥, 유닉스)에서 쉽고 빠르게 할 수 있는 방법이 있을 것 같아서 질문 드립니다.
이렇게 이렇게 하면 된다고 하지 마시고 간단한 예제도 같이 적어주시면 정말 큰 도움이 되겠습니다.
그럼 고맙다는 말씀 미리 드립니다.
Forums:
오픈 오피스에서 csv
오픈 오피스에서 csv 형식의 파일 안에 수식을 넣어 사칙연산을 사용했었습니다.
csv 파일의 데이터 자리에 =sum(...) 뭐 이런 식으로 넣어주니깐 파일을 오픈오피스에서 읽었을 때 잘 동작했습니다.
파일 이름: data 1 2 3 4
파일 이름: data
루비 소스 파일 이름: test.rb
결과
근데 이건 행렬의 각
근데 이건 행렬의 각 셀이 아니라
파일의 각 라인을 더하는 거네요.
제가 문제를 잘못
제가 문제를 잘못 이해하여 만들었습니다.
그래서 아래에 신버전 출시했습니다.
음...
이런걸 원하시는건지..?
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
공부할 겸
공부할 겸 만들어봤습니다. 신버전입니다.
결과
Perl one liner로
Perl verbose 버젼은 다른분이 해주시리라 믿음~ :)
만약에 같은 형식의
만약에 같은 형식의 파일이 3개 또는 4개가 된다면 어느 부분을 고쳐야 할까요??
제가 해야 하는 것 중에는 실제 엑셀에서 하듯이 수식을 써서 계산하는 것들도 있거든요.
예를 들어,
A.csv / (A.csv/2 + B.csv/4 + C.csv/8)
같은 수식 계산이요.
그래도 이것만해도 정말 큰 도움이 되었습니다. 감사합니다.
-------------------------------------
귤이 좋아요..
귤 짝퉁 오렌지는 싫어요..
귤을 주세요..
귤이 좋아요..
귤 짝퉁 오렌지는 싫어요..
귤을 주세요..
복잡한 연산을 하시려면 Octave 같은 걸 사용해보세요.
다단계의 복잡한 행렬연산을하시려면 아래 처럼 직접 프로그래밍 하셔야 합니다.
하지만 프로그래밍이 힘드시면 Octave( http://www.gnu.org/software/octave/ ) 같은
프로그램을 사용하시면 편합니다.
위에서 주의하셔야 할 것은 행렬의 나눗셈 연산은 정의되지 않으며 대신 역행렬을 곱하는 식으로 이루어지기 때문에
단순하게 같은 차원을 가진 행렬의 cell끼리 나누려면 ./ 연산자를 써야함을 유의
정말 고맙습니다.
약 1주일간을 고민하던 것이었는데 정말 고맙습니다.
위에서 소개해주신 패키지를 사용하니 정말 빨리 끝나는군요. 몇 초 걸리지 않았습니다.
점점 데이터 다룰 일이 많아지는데 이런 프로그램 하나 정도는 제대로 다루어야 할 것 같네요.
------
귤이 좋아요..
귤 짝퉁 오렌지는 싫어요..
귤을 주세요..
귤이 좋아요..
귤 짝퉁 오렌지는 싫어요..
귤을 주세요..
하.. 이게 제가 아래
하.. 이게 제가 아래 짠 코드보다 빠르네요. 물론 제 것은 함수 호출이 많긴하지만..
역시 내부처리를 이용하는 것이 빠를까요? ^^
paste 명령어가 느린 편이니 perl로 대체하면 조금 더 빠르겠네요.
논외로 파이프 처리를 쉘에게 맡기면 조금 더 빠른 듯??
LOL :-D
--
perl -e's@@JEON Myoung-jin@;sub man{s| _|her e|}
sub see{s;^;Just;;u;s;e ;Perl ;;to;print$_,$/}$uperMan=M;
s=^....=U are not=;s~$uperMan~~;&admitIt;s=U are = A=;s|young|_|;&man;
sub admitIt{say;ye;s!-\w+! Hacker!};see U'
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
Perl verbose 버젼
이렇게 사용함다.
Perl verbose 버젼 - 2
입맛데로 eval 부분을 다른 것으로 치환하면 속도는 더욱 향상.
이렇게 사용함다.
Perl6 버젼
을 해보았습니다.
rakudo에 현재 구현된 부분만 사용했기 땜에 작동합니다.
저도 심심해서..
1.8 입니다.
사용법
Matrix 패키지로 날로 먹으려 했는데, * / 연산이 행열 연산이라 조건을 만족 못하네요. 그런면에서 perl 패키지 Matrix 연산이 좀 특이한데요.
*는 저렇게 넘겨야 계산되네요.
상동.. 그냥 csv 뺐습니다. 이게 좋네요.
이 스레드 만든 분
이 스레드 만든 분 대박 터졌네요.ㅋㅋ
음...
perl 와 ruby 의 접전(?) 이로군요..ㅎ~
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
혜성처럼 등장한 awk :)
혜성처럼 등장한 awk :)
--
I think to myself...what a emerging world.
오~~~~~~~~~~~~~~~~~!
이틀만에 들어와보고 정말 놀랐습니다.
댓글 달아주신 분들께 정말 감사드립니다. 윗분 말씀처럼 대박 터졌네요. ^^;
아, 역시 KLDP!
------
귤이 좋아요..
귤 짝퉁 오렌지는 싫어요..
귤을 주세요..
귤이 좋아요..
귤 짝퉁 오렌지는 싫어요..
귤을 주세요..
초보자라 공부할 겸
초보자라 공부할 겸 만들어봤습니다.
Ruby 지저분한
Ruby 지저분한 버젼...
--
I think to myself...what a emerging world.
python이 없네요...
-----------
열심히 살자
열심히 살자
another python version
----------
열심히 살자
열심히 살자
그면....joa 님은 어느
그면....joa 님은 어느 언어의 어느버젼을 썼을까? 심히 궁금해지는.....
전 또 하나의
전 또 하나의 조리퐁이 탄생하기를 조금 기대했는데 안타깝네요. [완료]라니 :)
--
I think to myself...what a emerging world.
음..
이미 octave 에 평정되었거든요... =)
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
another perl verbose version
aero*님의 코드에 힌트를 얻어 작성한 것입니다.
eval을 한 번만 수행하게 한 게 포인트 _-_
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
댓글 달기