간단한 데이터를 다루는 프로그램에 어울릴만한 언어 뭐가 있을까요?

직업 특성상 데이터를 다루는 작업을 많이 합니다. 그래서 프로그래밍을 조금 하는데 우분투에서 간단하게 데이터를 다룰 수 있는 프로그램을 만들만한 쉬운 언어 뭐가 있을까요? 기존엔 포트란을 사용했었는데요… 우분투에서는 그게 조금 어려울 것 같아서요…

전공이 컴퓨터 쪽이 아니어서 프로그래밍 쪽에 약한 편입니다…

뭐가 있을까요???

회사 건너편에서는 서울모터쇼한다고 사람들 버글버글대고… 기존에 짰던 프로그램이 안 돌아가서 주말 내내 밤새게 생겼네요… :oops:

파이썬(python)을 추천드립니다.
스크립트 언어이기 때문에 어렵지 않게 적응하실 수 있구요. 라이브러리가 많아서 확장성도 뛰어납니다.
속도가 조금 느린것이 단점인데요… 속도에 그렇게 민감한 작업이 아니라면 파이썬이 좋을 것 같네요.

텍스트파일 파싱이나 분석하는데는 펄(perl)도 많이 사용합니다.

전 우분투에서도 포트란으로 작업중입니다.
포트란하면 가장 구하기 쉬운게 GNU에서 만든 g77, g95가 가능하구요.
각각 포트란 77문법 & 90/95문법에 기반한 프로그램들입니다.
오래되서 기억이 잘 안나지만, g95 project 이런 키워드로 구글 찾으면 관련 사이트 나옵니다.

하지만, 전 현재 우분투에서 intel fortran을 사용중입니다. 아무래도 ms windows에서 개발된 프로그램을 돌리는 것을 생각한다면, ms windows에 있는 intel fortran과 호환이 되는 소스프로그램이면 좋을 것 같아서죠 ^^ (인텔 포트란의 병렬처리기능이 linux용에서 먼저 구현되어 그것에 혹해서 우분투씀 ㅠㅠ)

물론 전 돈이 없으니 인텔 포트란을 살 능력도 없지만, 인텔 포트란 사이트에가면 평가판 같은 공짜로 인텔 포트란을 쓸수있도록 해주는 것이 있더군요.
우분투에서 인텔 포트란 관련해서 정보를 얻었던 사이트는 다음과 같습니다.

http://ubuntuforums.org/showthread.php?t=89571

포트란 90/95문법을 사용하는 경우 프로그램이 복잡해지면 make파일 만드는게 복잡해지는데(특히, module이 들어가면 종속관계가 복잡해지죠 ㅠㅠ)… mkmf란 펄 스크립트로 make파일 만들어 주는 프로그램도 있습니다.

http://www.gfdl.noaa.gov/~vb/mkmf.html

파이썬이나 펄… 한 번 찾아봐야겠군요… 쉽게 배울 수 있을지 모르겠네요… 이거 알면 여러모로 응용할 수 있는 것도 많을 것 같은데요? 좋은 의견 감사합니다!

전 포트란77을 쓰는데(이제 갓 서른 넘겼는데 교수님과 같은 버전을 사용합니다… ㅎㅎ;;:wink: g77 검색해봐야겠군요. 이게 같은 포트란77이라도 컴파일러에 따라서 실행이 되기도 하고 안 되기도 하더군요. 이해가 잘;;; 암튼 포트란이라면 기존 소스들을 그대로 사용할 수 있을 것 같네요. 이것도 찾아볼게요. 좋은 의견 감사합니다!!!

다음은 인텔포트란 10.0.023을 설치할때 제가 설치하면서 인터넷에서 갈무리했던 내용입니다.
인텔포트란은 인텔사이트에서 non-commercial 버전을 공짜로 받으면됩니다. 우분투 버전에 따라 구버전은 라이브러리가 안맞아서 새버전을 받아야할 수도 있습니다. 10.0.023버전은 우분투 8.04와 8.10에서 잘 돌아갑니다.

Some other packages are need to complete the installation of the compiler:

sudo apt-get install alien g++-multilib libstdc++5 build-essential

For some strange reason Ubuntu uses dash and not bash as the shell /bin/sh. This creates problems since dash does not have the same functions as bash which is needed by the Intel programs (and programs others too). So I remove the link from sh to dash and replace it with a link to bash instead.

sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh

After this I unpacked the tar "l_fc_p_10.1.012_intel64.tar.gz" I downloaded earlier and created a .deb file from the .rpm files included in the tar ball and install the .deb file.

cd data
sudo alien -cv intel-iforte101012-10.1.012-1.em64t.rpm
sudo dpkg -i intel-iforte101012_10.1.012-2_amd64.deb

sudo alien -cv intel-iidbe101012-10.1.012-1.em64t.rpm
sudo dpkg -i intel-iidbe101012_10.1.012-2_amd64.deb

Even though the program is now installed all the files refer to <INSTALLDIR> and not /opt/intel/fce/10.1.012 as it should. So I use sed to replace all occurences of <INSTALLDIR> with /opt/intel/fce/10.1.012 . This has to be done at least with ifort and ifortvars.sh. I ran the following command as root

sudo gedit /opt/intel/fce/10.1.012/bin/ifort
sudo gedit /opt/intel/fce/10.1.012/bin/ifortvars.sh
sudo gedit /opt/intel/idbe/10.1.012/bin/idbvars.sh

Next I copied the license file (.lic) to the license folder created by the Intel compiler installer:

sudo cp *.lic /opt/intel/fce/10.1.012/licenses/

The final step was to add a line in the file ~/.bashrc to make the shell inherit some intel variables:

source /opt/intel/fce/10.1.012/bin/ifortvars.sh
source /opt/intel/idbe/10.1.012/bin/idbvars.sh

The final exercise is to test whether or not the compiler works. So I made a simple program and saved it as helloworld.f90

PROGRAM HelloWorld
   PRINT *, &quot;Hello World&quot;
END PROGRAM HelloWorld

Then I tried to compile the code to see if it worked

ifort -o hello helloworld.f90
./hello

ps. 이 게시판에 이렇게 열심히 쓸것이 생기는 날도 있네요. 질문 말고는 첨쓰는듯… ^^;;

그리고… 데이터 많이 다루시는 거면 프로그램 컴파일러가 아니라… ms windows에서의 matlab 비슷한 octave 쓰시는것이 더 나을 것 같다는 생각도 드네요.
왠만한 데이터 처리에 해당하는건 그냥 간단한 명령으로 될거 같은데…
octave는 시냅틱관리자에서 찾으면 바로 보입니다.

파이썬 추천합니다.

저 또한 컴퓨터와 전혀 관련 없는 전공분야를 공부해왔고 지금도 하고 있습니다.

학부와 석사과정중에 조금씩 컴터에 관심을 갖게 되어 펄을 처음 접했습니다. 좋았습니다.

지금은 파이썬을 하고 있습니다. 둘 다 조금씩 봤던 경험으로는 파이썬이 더 배우기 쉽습니다.

간단한 프로그램을 작성하는데 펄 만큼 빠르게 만들 수 있을 것입니다.

솔직히 펄의 생산성이 높다는 데는 이견이 없습니다만… 그 생산성을 맞추기 위해 길러야 할 내공의 깊이가 상당히 큽니다.

저도 가끔 전공과 관련된 데이터를 뽑아내고 하는데 제가 직접 간단하게 짜보는데 파이썬이 좋습니다.

GUI, 웹에서 자동으로 문서 긁어오기, 정규표현식 사용하기 등의 경우 제가 비록 내공이 적지만 책을 참고하며 쉽게 만들어서 사용하고 있습니다.

결론은 파이썬 추천…

[quote="cky":64h86wwi]그리고… 데이터 많이 다루시는 거면 프로그램 컴파일러가 아니라… ms windows에서의 matlab 비슷한 octave 쓰시는것이 더 나을 것 같다는 생각도 드네요.
왠만한 데이터 처리에 해당하는건 그냥 간단한 명령으로 될거 같은데…
octave는 시냅틱관리자에서 찾으면 바로 보입니다.[/quote:64h86wwi]

‘과학기술계산용’ 언어, fortran 쓰시던 일이라면 저도 matlab이나 octave에 한 표…
은근슬쩍 java도 한 표… perl도 좋다고들 하데요.
matlab이나 octave에는 학술적인 수준의 알고리즘들이 제공되는 게 많아서 좋고요. java도 은근히 제공하는 것들 많고요. 근데, 포트란으로 수식 만들어서 하시던 거면… perl이나 python으로 충분히 쉽게 포팅되고요.

전 C/C++이 뭘 하던 제일 좋다고 주장은 하나… 사람들이 별로 안 좋아하더라고요…

남들은 사장된 언어라고 부르기도하나, 저 같은 경우는 행렬 & 텐서를 많이 다루다보니 fortran을 버릴 수가 없더라고요.
somebody님이 바로 위에 글쓰셨으니… 궁금증이 있는 것이 이클립스에서도 fortran 컴파일러도 사용가능하나요? kdevelop(?)는 예전에 삐그덕 거리자만, 포트란 컴파일러도 되긴되었던거 같은데…

질문 올리고 찾아보니 되는가보네요. 심심할때 한번 이클립스도 깔아봐야할듯 ^^

http://www.eclipse.org/proposals/eclipse-photran/

새벽 3시 반입니다만… 이제서야 집에 출근했네요… 일이 좀 꼬여서;;;

암튼… 허접한 질문으로 별 반응 없을 줄 알았는데 너무 성심성의껏 답변을 달아주셔서 몸둘 바를 모르겠습니다. 열심히 살겠습니다!(응?)

우선은 인텔포트란쪽을 써 봐야겠네요. 당장 급해서…;;; 그리고 나서 파이썬이랑 octave를 공부해볼까 합니다. 함께 일하는 박사님께서 매틀랩을 쓰시는데… 일단 보기엔 굉장히 쉽더군요!!! 제가 프로그램을 쓰는 스타일과는 조금 다르지만… 프로그래밍 자체가 목적이 아니기 때문에 쉽고 강력한(하긴 이건 누구나 바라는 거겠지만;;:wink: 걸 원하게 되네요…

답변 달아주신 여러분 정말 감사합니다!!!

(근데 이렇게 사심 가득한… 개인적인 걸 물어봐도 되는지 모르겠네요;;:wink:

[quote="litmisty":1l7h5i8s]파이썬(python)을 추천드립니다.
스크립트 언어이기 때문에 어렵지 않게 적응하실 수 있구요. 라이브러리가 많아서 확장성도 뛰어납니다.
속도가 조금 느린것이 단점인데요… 속도에 그렇게 민감한 작업이 아니라면 파이썬이 좋을 것 같네요.
[/quote:1l7h5i8s]

python이란 언어를 이름만 알고 있다가… ltmisty, classian, somebody님이 추천하는것 보고 잠깐 공부해봤는데, python 강력하네요. 덕분에 제가 좋은 언어 배우게된듯합니다.

컴퓨팅 시간이 많이걸리는 일은 C, C++, Fortran으로 작업한다고 하더라도…
python을 추가적으로 알고 있으면, 정말 편할듯하네요.

springer에서 출판된 python scripting for computational science, 3rdedition 책 잠시보면서,
데이터를 gnuplot으로 그리고 ps파일로 저장하는 예제 잠시 따라하다보니, 몇일만 더 일찍 이 언어를 접했으면, 몇일 동안 그래프를 마우스 클릭으로 그리던 작업을 안했어도 되었다라는 생각이 듭니다. ㅠㅠ
이제 저도 심심하면 python공부나 해야할듯하네요 ^^;
(위에 적혀있는 책으로 공부하다보니, 리눅스관련된 모르던 사실도 조금씩 알게되네요)

[quote="coreanlibero":57cawvry]새벽 3시 반입니다만… 이제서야 집에 출근했네요… 일이 좀 꼬여서;;;

암튼… 허접한 질문으로 별 반응 없을 줄 알았는데 너무 성심성의껏 답변을 달아주셔서 몸둘 바를 모르겠습니다. 열심히 살겠습니다!(응?)

우선은 인텔포트란쪽을 써 봐야겠네요. 당장 급해서…;;; 그리고 나서 파이썬이랑 octave를 공부해볼까 합니다. 함께 일하는 박사님께서 매틀랩을 쓰시는데… 일단 보기엔 굉장히 쉽더군요!!! 제가 프로그램을 쓰는 스타일과는 조금 다르지만… 프로그래밍 자체가 목적이 아니기 때문에 쉽고 강력한(하긴 이건 누구나 바라는 거겠지만;;:wink: 걸 원하게 되네요…

답변 달아주신 여러분 정말 감사합니다!!!

(근데 이렇게 사심 가득한… 개인적인 걸 물어봐도 되는지 모르겠네요;;;)[/quote:57cawvry]

octave도 좋긴 하지만 아무래도 아직은 매틀랩 성능을 못따라갑니다.
저도 연구실에서 초반에 써봤는데 그래픽 처리 하는 방식이나 계산 속도가 매틀랩이랑 차이가 나서
포기해버렸습니다. 파일처리 하는 방식도 미세하게 다르고요.
그래서 지금은 그냥 매틀랩 사용 중입니다.

구글해서 찾아보면 리눅스용 매틀랩 많이 있습니다. (구입하셔도 되고 rapidshare같은데서 구하셔도 되고 -_-a)
깔아서 그냥 gui버젼으로 사용하셔도 되고 아님
터미널에서 matlab --nojvm써서 그냥 텍스트 버젼으로 사용하셔도 됩니다. (전 텍스트 버젼이 속도가 더 빨라 선호하고 있습니다.)

간단하게 말하자면 octave를 사용할바엔 차라리 그냥 시간 아껴서 matlab쓰시는게 편합니다.

파이썬 조금씩 해보는데… 재밌네요… 배열 부분이 포트란과는 좀 다른 것 같아서 해메는 중이지만…

그런데… 외부 프로그램에서 커맨드로 *.py 파일을 실행하면 그냥 실행되는거겠죠??? ;;;

암튼 파이썬 공부 중입니다!

[quote="nike984":2y5eoue7]octave도 좋긴 하지만 아무래도 아직은 매틀랩 성능을 못따라갑니다.
저도 연구실에서 초반에 써봤는데 그래픽 처리 하는 방식이나 계산 속도가 매틀랩이랑 차이가 나서
포기해버렸습니다. 파일처리 하는 방식도 미세하게 다르고요.
그래서 지금은 그냥 매틀랩 사용 중입니다.

구글해서 찾아보면 리눅스용 매틀랩 많이 있습니다. (구입하셔도 되고 rapidshare같은데서 구하셔도 되고 -_-a)
깔아서 그냥 gui버젼으로 사용하셔도 되고 아님
터미널에서 matlab --nojvm써서 그냥 텍스트 버젼으로 사용하셔도 됩니다. (전 텍스트 버젼이 속도가 더 빨라 선호하고 있습니다.)

간단하게 말하자면 octave를 사용할바엔 차라리 그냥 시간 아껴서 matlab쓰시는게 편합니다.[/quote:2y5eoue7]

성능 좋은 툴에 익숙함까지 더해지면, 사실 툴을 변경하기가 무척 힘들지요.

하지만 coreanlibero님의 첫 질문에서 나왔듯이, 회사 업무에 관련된 일이면 이야기가 조금 달라집니다.
특히 매트랩과 같은 고가의 소프트웨어는 쉽게 구매할 수 있는 대상이 아니지요.
(정부에서 주관하는 대형 과제들을 진행한다던지 하면, 은글슬쩍 구매리스트에 올려보기도 하지만 말이죠. ㅎㅎ;)

라이센스 문제와 더불어 공동작업을 위한 호환성도 무시할 수 없습니다.
개인적으로 사용하기 위해 간단한 툴을 만들어 사용하는 것은 크게 문제될 것이 없어보이지만,
회사 입장에서는 또 그렇지 않더군요. 다른 사람과 함께 일을 한다던지, 후임이 들어와서 업무 인수를 해줘야 한다던지…
여러가지 경우가 발생할 수 있기 때문에 최대한 개발툴을 통일하려 합니다.
(이 경우, 개개인에게 모두 매트랩을 사준다면 그 비용은 어마어마해질 것입니다.)

이런저런 이유로 저는 C/C++을 개발도구로 사용중입니다.
(사실 오리진을 정말(x3) 사용하고 싶었지만 말입니다.)

[quote="coreanlibero":2sm9r99e]그런데… 외부 프로그램에서 커맨드로 *.py 파일을 실행하면 그냥 실행되는거겠죠??? ;;;[/quote:2sm9r99e]

여러가지 실행방법이 있던데요. 파일명이 반드시 .py로 끝날 필요는 없다고 하지만…

  1. python 파일명.py
  2. 파일명.py의 첫줄에 #!/usr/bin/env python 써 넣으면 ./파일명.py로도 실행가능(이경우 chmod u+x 파일명.py는 필수)
  3. ipython에서 run명령어로 실행

이외에도 있겠지만, 공부한지 몇일안되서 ^^;;