연구 중에 간단한 회귀 분석정도를 하려고 패키지나 프로그램을 찾던 중 R이란 프로그래밍 언어를 발견했다.
R은 오픈소스 통계 프로그래밍 언어이다. 국내에도 사용자 모임이 있으나 홈페이지내에서는 활동이 그렇게 활발하지 않은 것 같다.
하지만 해외에서는 페이스북, 트위터, 구글 등이 고객 요구사항을 분석하는데 R를 사용해 유명세를 탔다.
또 최근 많은 글로벌 기업들이 적용하고 있으며 세계적으로 R 관련 프로그래머만 100만명이 넘고 통계 관련 논문도 나오고 있는 추세다(인용: 오픈소스 `R`, 국내선 왜 찬밥?).
프로그램 설치를 하고  간단한 연습을 수행해봤는데 회귀식 구하는 용도로는 오버스펙인 점도 있지만 문법이 생각보다는 쉬웠다.
R은 사실 프로그래밍 언어이므로 파일입출력 및 여러가지 기능이 있을 것으로 생각되나 그런 것을 배우기에는 시간이 너무 많이 걸릴 것이라고 예상했다.
그래서 좀 더 친숙한 파이썬에서 응용할 수 있는 법을 찾아보았는데 RPY란 모듈을 찾을 수 있었다.
R이 설치된 상태에서 이 모듈을 설치하면 파이썬안에서 R의 문법으로 명령을 수행할 수 있다.
즉 파이썬의 문법으로 데이터 입력 및 출력, 플로팅들을 하고 회귀분석이 필요한 부분만 rpy모듈의 명령어를 사용하는 것이다.



관련 홈페이지
R 홈페이지
RPY2 홈페이지
RPY2 예제
RED-R visual programming for R




by inceptionkid 2013. 2. 18. 22:14
최소 자승법(제곱법) 을 이용하여 데이터를 근사하는 방법에 대해 알아보려고 한다.
여기서는 각각의 데이터들이 일차함수 y=ax+b의 형태로 나타낼 수 있음을
알고 있다고 가정했을 때이다.

최소제곱법을 이용한 함수의 근사 (1) 
위의 페이지에 최소자승법에 대한 설명이 자세히 나와있어 
더 이상의 설명은 하지 않는다.
위의 페이지에는 파이썬으로 구현된 코드도 있는데 a와b를 구하는 방법이 생략되었다.
그래서 그 부분을 추가시켰다.

~\Downloads\LSM.py.html
 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from scipy import linalg
 4 
 5 x=[0.0,0.1,0.2,0.3,0.4]
 6 y=[2.50,5.68,9.00,12.2,15.0]
 7 
 8 xp=np.arange(-0.1,0.5,0.05)
 9 
10 a11=sum([xx**2 for xx in x])
11 a12=sum([xx for xx in x])
12 a21=sum([xx for xx in x])
13 a22=sum([1 for xx in x])
14 b2=sum([yy for yy in y])
15 b1=0.0
16 for ii in range(len(x)):
17     b1=b1+x[ii]*y[ii]
18 
19 A=np.array(((a11,a12),(a21,a22)))
20 b=np.reshape(np.array((b1,b2)),(2,1))
21 
22 X=np.linalg.solve(A,b)
23 
24 print X[0], X[1]
25 
26 #a=31.54
27 #b=2.57
28 
29 yp=[X[0]*xx+X[1] for xx in xp]
30 fig=plt.figure(0)
31 ax=fig.add_subplot(111)
32 plt.plot(x,y,'o',xp,yp)
33 ax.axis([-0.1,0.45,-0.5,15.5])
34 plt.show()
by inceptionkid 2012. 11. 26. 20:54
visvis는 2D와 3D 시각화(visualization)를 해주는 파이썬 모듈이다.
지금 텍스트 기반의 프로그램을 GUI형태로 변경하는 업무를 하고 있는데
이 때 텍스트로 들어오는 입력데이터를 시각화해줄 필요가 있다.
입력데이터는 간단한 3D 형상 정보인데 시각화를 하지 않을 경우에는  
입력의 오류를 확인하기 어렵다. 
내가 원했던 것은 너무 무겁거나 어렵지 않으면서 GUI프로그램과
연동되는 모듈이었는데 알맞은 모듈을 찾았다.
visvis 모듈

이 
모듈은 특히 파이썬 GUI모듈인 wxPython과 연동이 쉽게 된다.
(wxPython뿐만 아니라 PyQT4,GTK와도 연동이 된다고 한다.)

3D 도형으로는 cone, cylinder, box, ring, sphere, pyramid등을  지원한다.

<출처 : http://code.google.com/p/visvis/wiki/example_meshes>

 

 

 


by inceptionkid 2012. 11. 26. 08:40

포트란으로 되어있는 프로그램의 메뉴얼을 만드려고 한다. 

소스코드를 메뉴얼에 실으려고 하는데 일반 텍스트 형태로 내보내면 가독성이 떨어진다.

 그래서 syntax highlight 기능을 사용해야 하는데 vim에디터에서는 다행히도 여러 옵션을 제공해주고 있다.

  

 Syntax Highlight가 안된 코드(위) 적용된 코드(아래)


 
:ha

이 명령어는 syntax highlight된 상태로 프린터 출력(PDF)이 가능하다.

:TOhtml

이 명령어는 다른 창에 소스코드의 syntax highlight된 html소스 파일이 뜨게 된다.

처음 생각한 방법은 PDF또는 html뷰어에서 코드를 복사해서 워드프로세서에 붙여넣기하는 방법이다.

하지만 소스 코드가 100개 이상되는 프로그램이라면...

복사와 붙여넣기만 하다가 짜증나서 못한다. 


그래서 레이텍(Latex)과 파이썬(python)으로 구현하는 방법을 생각했다.

Latex사용법이 미숙해 추가적으로 lyx 에디터를 사용했다. 

Latex에는 소스 코드에 대해 syntax highlight시켜주는 기능이 있다.

Listing이란 기능인데 이 기능을 이용하면 Latex에 프로그래밍 언어를 삽입할 수 있고

옵션을 조절하면 syntax highlight기능도 가능하다.

사실 listing의 기능에 대해 충분히 숙지를 못했는데 메뉴얼을 보고 다음과 같은 옵션으로 사용했다.


begin{lstlisting[basicstyle=commentstyle={\color{red}},keywordstyle={\color{blue}},language={[77]Fortran}]}

~~~~~(코드 내용)

\end{lstlisting}
 

자, 이제 수많은 소스코드를 이렇게 하려면?

latex자체가 소스코드 형태로 되어있으므로 편집하기가 용이하다. 

파일의 입출력 자동화를 위해 파이썬을 이용했다. 


 1 import glob
 2 
 3 file_list=glob.glob('.//Source\*.f')
 4 writefilename="Manual_Temp.tex"
 5 g=open(writefilename,'a')
 6 for readfilename in file_list:
 7         f=open(readfilename, 'r')
 8         data=f.read()
 9         g.write('\\begin{lstlisting[basicstyle=commentstyle={\color{red}},keywordstyle={\color{blue}},language={[77]Fortran}]}\n')
10         g.write(data)
11         g.write('\end{lstlisting}\n')
12         g.write("\n")
13         f.close()
14 g.close()

코드를 간단한게 설명하면 3번째줄에서 Source폴더중 확장자가 f인 파일의 리스트를 긁어온다. 
6~13의 루프에는 latex의 lisintg 태그를 삽입하고 코드를 삽입하는 내용이다.
 


by inceptionkid 2012. 11. 24. 11:21
| 1 |