수요일, 5월 16, 2012

Python 설치 순서

1여년만에 업그레이드 기념 OS 재설치 후 필요한 프로그램 재설치 중에 있습니다.
오늘은 제가 주력으로 사용하는 스크립트 언어인 Python 설치 순서에 대해서 정리하는 포스팅을 하겠습니다.
(이 순서는 지극히 개인적인 생각으로 하는 것이오니 순서바뀐다고
 경찰차 출동안합니다. 쇠고랑 안찹니다. :) )

지금 사용하는 OS가 64비트이기 때문에 기존에 호환되는 라이브러리들이 잘 작동하지 않습니다.
특히나 Rpython의 경우 64bit 윈도우에서는 정상적으로 작동 잘 안되는 것같습니다.
-Rpython이 지원하는 R과 pythpn버전이 정확히 일치해야 작동하는 듯 보입니다.

제가 주로사용하는 라이브러리들은 모 정해져 있으니.. :)

- Python 2.6.6 (Python 2.6버전에서 msi파일은 2.6.6이 마지막입니다.)

- Base-x.x.x (Base-12.5.7)

- mxBase-x.x.x (egenix-mx-base-3.2.4)

- numpy-x.x.x (numpy-MKL-1.6.2rc1)

- scipy-x.x.x (scipy-0.10.1)

- Biopython-x.x.x (biopython-1.59)

- distribute-x.x.x (distribute-0.6.26)

- PIL-x.x.x (PIL-1.1.7)

- reportlab-x.x.x (reportlab-2.5)

모.. 요정도??




화요일, 5월 08, 2012

MEGA5 Usage


오늘은 간단히 MEGA (Molecular Evolutionary Genetics Analysis) 사용법 중
Multi Fasta Sequence가지고 Alignment하고 Phylogenetic tree를 그리는 것에 대해서 
간단히 알아보도록 하자. :)

MEGA 사이트에서 알아서 개인정보를 팔아서 다운로드를 받던지 주위에 이미 받아논
지인에게 달라고 해서 얻기를 바란다. 
일단 설치 후 실행 시키면 다음과 같은 화면을 접할 수 있다.




Alignment하고 싶은 파일을 Open하도록 하자.


위의 [Open A File/Session ...]을 클릭하게 되면 다음과 창이 뜨게되며 알맞은 파일을 선택하면 된다.



알맞은 파일을 선택 한 후 [열기]를 선택하면 다음과 같은 창이 뜨게 되는데 당황하지 말고 걍 [Align] 버튼을 클릭하면된다. :)


[Align]버튼을 클릭하면 다음과 같이 보여지게 된다.


이제 Align을 해보도록 하자. Alignment 프로그램 중에 Clustalw를 사용하도록 하자.
다음과 같은 [Alignment] -> [Align by ClustalW]를 클릭하면 된다.


만약 서열들을 선택해주지 않았다면 다음과 같은 경고창이 보이게 된다. 이때에는 [OK] 버튼을 클릭하면 된다.


이제 ClustalW를 실행시키기 위한 Parameter를 설정하게 되는데 사실 건드릴 일이 그렇게 있을까? 필요하면 기호에 맞게 수정해서 사용하시길...
Protein Weight Matrix만 잘 사용하면 크게 문제가 없을 것으로 보인다.


Parameter설정 후 [OK] 버튼을 클릭하면 다음과 같이 Alignment를 수행하게 된다.
단, 서열이 많을 수록 소요 시간은 기하급수적으로 늘어난다는 점만 주의하시길..


Alignment가 완료되면 다음과 같이 Align된 결과가 보여지게 된다.


MEGA에서는 MEGA만의 저장 format를 지원하는데 Alignment된 결과를 포함하여 저장하기 때문에 naming rule을 잘 정의해서 사용하면 동일한작업을 두번 할 필요가 없게 된다.
아래 그림은 Alignment 결과를 저장하는 MEGA Aln 포맷은 mas로 저장하는 그림이다.



Alignment를 하였다면 대게 Phylogenetic tree까지 그리고자 할 것이다.
그리기 위해서는 mas파일이 아닌 MEGA Format 파일이 필요하다. 이것은 Alignment를 수행 한 창에서 [Data] -> [Export Alignment] -> [MEGA Format]를 클릭하면  MEGA 포맷으로 저장할 수 있다.




드디어 Phylogenetic tree그리는 시간이다. :)
MEGA Main 화면에서 [Analysis] -> [Phylogeny] 선택 후 기호에 맞는, 상황에 맞는 방법을 선택하여 Tree를 생성하면된다. :)


위의 순서대로 Method를 선택 한 후 MEGA format의 파일을 열면 다음과 같은 Parameter 설정 창이 보이게 되된다. 여기서도 본인 분석에 맞게 설정하여 작업하면 트리가 나오게 된다.

그럼,
Good Luck. :)

화요일, 5월 01, 2012

Python에서 통계 작업하기

통계작업할 때 지금까지는 대부분 엑셀,
조금 데이터양이 많아지거나 고급 통계기법이 필요하면 R을 사용하였다.

근데 아쉽게도 R에서의 문자열 핸들링관련해서 지식이 민망하여
통계처리 중간에 문자열 조작이 필요한 경우 중간에 값을 텍스트로 빼서
파이썬에서 작업하고 다시 R로 가져가는 상당히 귀찮은 작업을 거쳤다.

그래서..
결국 미루다 미루다..

통계작업 중간에 문자열작업이나 다른 수정이 필요업는 단계까지
파이썬에서 작업을 마치는 방법을 터득하기로 했다.

근데.. 이게 파이썬에서 통계작업을 한번도 안해본지라
몇날 몇일 헤매고 있었는데

Scipy(파이썬 설치할때 기본적으로 설치하는 모듈인데... 쓰지는 않고 있었다)에서
통계 함수들을 제공한다니.. ;;;

Scipy Statistical Function

여하튼...
이것때문에.. 어느정도 고민 해결~ ㅎㅎ

월요일, 4월 23, 2012

Velvet과 Oases 설치

Velvet 다운로드

$tar zxf velvet_1.2.03.tgz
$cd velvet_1.2.03
$make

default 설정으로 설치하는 경우 그냥 make하면 되지만..
K-mer값을 큰 값으로 사용하고자 하는 경우나 multi-thread를 사용하고자 하는 경우
옵션값을 조절해줘야 한다.
아니면 make할 때 옵션을 설정해 주어도 가능하다. :)


$vi Makefile
...
MAXKMERLENGTH=99
CATEGORIES=16
...
OPENMP=1
LONGSEQUENCES=1
...


$make 





Oases 다운로드

$tar zxf oases_0.2.06.tgz
$cd oases_0.2.06
$make


Oases 또한 Velvet과 마찬가지로 default 설정으로 설치하고자 하는 경우에는 make를 해주면 되지만, velvet경로도 내부 서버 상황에 맞게 설정 해야 하는 경우 가 있으므로, 다음과 같이 Makefile을 수정 후 make를 하면된다. :)


$vi Makefile
...
MAXKMERLENGTH=99
CATEGORIES=16
...
OPENMP=1
LONGSEQUENCES=1
VELVET_DIR=../velvet_1.2.03
...


$make 







금요일, 4월 06, 2012

tabix vs intersectBed

tab으로 구분되어 있는 txt 파일 처리하는 tabix에서 대해서
혜식 형님께 조언을 구하는데 대량으로 처리하려면
tabix보단 intersectBed가 더 좋다는 정보 획득!! ㅎㅎ

intersectBed 홈페이지

COUNTIF 함수

아... 어제 작업하면서 이런 기능 엑셀에 이런기능이 설마 없을까?
했는데... 역시 있었다. 착한 놈들 ㅎㅎㅎㅎ

이름도 기특하다 ! COUNTIF !
cell을 세는데 특정 조건에 맞는 셀 개수를 세는 함수

모 사용방법은 그렇듯이 항상 간단하다

=COUNTIF(범위, 조건)
범위는 우리가 자주 쓰는 A2:A30
조건은 개수를 세려는 셀의 조건이나 문자열 등등등..
내 경우 0.01보다 작은것이 몇개나 있는지 확인하기 위해서 이녀석을 찾았다.

그러므로 내가 사용한것은 =COUNTIF(A1:A10000, "<0.01")

수요일, 3월 28, 2012

awk 사용법


Blast를 수행 시 -m 8을 하면 자료 뽑아내기가 쉬운 것을 알고 있다.
근데 리눅스에서는 awk라는 명령어를 사용하여 별도의 코딩을 하지 않고
일정 값 이상/이하의 결과들만 골라서 볼 수 있다.
-biodb의 wiki에 정리해둔 것이 있었는데...;;;

구글 뒤져보니 본인이 원하는 기능의 awk 기능을 잘 설명해 놓은 것이 있어서
그대로 옮겨보도록 한다. ㅋ

출처: :+:하늘을 닮은 호수:+:

-m 옵셥에서 8값을 선택한 결과 파일 (blastout.file) 에서 score가 100 이상의 결과들만 뽑길 원하는 경우
> awk '$12 > 100 { print $2 }' blastout.file

본 문장을 응용하면 결과값에 특정 문자열만 들어가 있는 것을 포함/제외 하고
출력하기, 결과값이 중복된 것이 있으면 sort를 이용하여 제거 할 수도 있으니
참 간편하지요? ;;;

그걸 몰랐던 학부 시절 때 하나하나 python으로 삽질하던 기억을 하면;; 아놔;;;
그러나 요즘도 걍 python으로 작업한다는 훈훈한 이야기가 전해내려 온다능..;;

CPAN이용해서 Perl 모듈 설치하기


Circos를 설치하기 위해서 perl 모듈 설치에 좀더
편하게 하는 방법이 있어서.... ㅎㅎ

CPAN (Comprehensive Perl Archive Network)는 각종 perl 모듈이
모아져 있는 사이트인데 perl 5.8이후부터 cpan이라는 명령어를 지원하여
보다 편리하게 perl 모듈들을 설치할 수 있게 되었다.
(윈도우의 cgwin은 역시 잘 안된다능;;;; )

5.8 이전의 경우
$perl -MCPAN -eshell
또는
5.8 이후
$cpan

이라고 명령어를 실행시키면 처음에 실행시키면 이것저거 무엇을 한다고 하고
 [yes]를 입력하면 알아서 작업을 한후 cpan이라는 프롬프트를 보여줍니다.
cpan>install 모듈명
으로 쉽게 설치 우후훗...

HTTP Status 상태 코드별로 페이지 작성하기



출처:http://linux.tini4u.net/stories.php

일반적으로 웹호스팅을 받아보면 HTTP Status code page가
윈도우의 기본적인 그것이 아니라 깔끔하게 제작된 페이지를 본적이 있을 것입니다.
그것은 아파치에서(혹은 사용자가 [Override enabled]) 서버에러에 대한
응답을 지정해주어서 그렇습니다.

아파치 문서에 보면 ErrorDocument 부분이 정의되어 있으니
한번쯤 읽어보시면 이해하시기가 쉬우실 겁니다.
대략적으로 정리하면 총 3가지 방법으로 응답을 지정할 수가 있는데,
그것은 아래와 같습니다.


1. 보통의 텍스트
ErrorDocument 500 "The server made a boo boo."


문자열인 경우엔 " " 안에 문자열을 넣으면 됩니다.
추가=> [" "] 표시는 텍스트임을 알려주는 것으로서 그 자체는 출력되지 않습니다.


2. 내부 전환
ErrorDocument 404 /missing.html


서버 내부의 파일로 전환하는 방법인데 주의할 점으로는
절대 경로로 지정했을 경우엔 틀린 방법이라는 것입니다.
문법의 최상위 경로(/)는 DocumentRoot를 의미하기 때문입니다.
즉, 내 도메인이 /home/foobar/www/로 DocumentRoot가 설정되어 있고
전환할 페이지가 /home/foobar/www/missing.html 에 있다면
ErrorDocument 404 /missing.html


위와같이 설정을 해주셔야 작동을 합니다.

다만 이것이 사용자단이 아닌 아파치단에서(httpd.conf) 설정되었을 경우
모든 도메인에 대해서 404 코드는 /missing.html 파일을 찾게 됩니다.
이런 경우 사용자 입장에서는 /missing.html 파일을 사용하지 못합니다.

만약 서버 관리자로써 모든 Status Code 페이지를 전환하려면
Alias /Error "/usr/local/apache/htdocs/Error/"
ErrorDocument 404 /Error/missing.html


이런식으로 Alias를 만들어 주면 해결이 됩니다.
왜냐하면 모든 도메인은 /Error/missing.html를 찾을 것이고
/Error은 /usr/local/apache/htdocs/Error/ 으로 보내지기 때문입니다.
/Error/missing.html를 풀이해보면
/usr/local/apache/htdocs/Error/missing.html 이 되겠죠.

추가=> 스크립트나 SSI로도 내부 전환이 가능합니다.


3. 외부 전환
ErrorDocument 402 http://www.example.com/subscription_info.html


서버 외부의 파일로 전환하는 방법인데 김정균님 경험상으로
외부 전환시 CGI와 htaccess 인증시에 505 Status Code가 발생했다고 합니다.
원래 요청과 관련있는 환경 변수의 상당수가 스크립트에 전달되지 못한다는 점을 알고 있어야 합니다.


※ 설정하면서 주의해야 할 사항
위의 설정대로 설정했고 아무런 문제도 없는데
IE 자체의 에러페이지가 보이는 경우가 있습니다.
이런 경우는 대략 몇가지 문제가 있는데 대표적인것은 아래와 같습니다.

1. 완전한 HTML 페이지가 아닐 경우
<BODY>로 시작해서 </BODY>로 확실하게 끝나지 않았거나
혹은 <HTML>로 시작해서 </HTML>로 확실하게 끝나지 않았을 경우 입니다.
또는 PHP의 exit 명령으로 종료할때 </BODY></HTML>가 출력되지 않는
경우에도 IE 기본 페이지가 나옵니다.

2. Custom error page의 사이즈가 기준치보다 작은 경우
Custom error page 라는게 크기가 정해져 있기 때문에
이 크기가 넘지 않는 경우에도 IE 기본 페이지가 나옵니다.
Custom error page 의 각 크기 기준치는 아래와 같습니다.
Code Description File Size


400 Bad Request > 512 bytes
403 Forbidden > 256 bytes
404 Not Found > 512 bytes
405 Method Not Allowed > 256 bytes
406 Not Acceptable > 512 bytes
408 Request Time-out > 512 bytes
409 Conflict > 512 bytes
410 Gone > 256 bytes
500 Internal Server Error > 512 bytes
501 Not Implemented > 512 bytes
505 HTTP Version Not Supported > 512 bytes

금요일, 3월 23, 2012

Fasta 형식의 파일에서 빈서열 제거


가끔씩 Blast를 수행하고자 formatdb를 수행 할 때,
다음과 같은 에러를 접한 적이 있으리라 본다.


[formatdb] WARNING: Cannot add sequence number XXXXX XX.XXX.XXX.
 because it has zero-length.
[formatdb] FATAL ERROR: Fatal error when adding sequence to BLAST database.


formatdb를 수행하려는 fasta 서열에
빈 서열을 가지고 있기 때문에 나오는 에러로
빈 서열을 제거하면 OK!

vi check.py


import glob,sys
from Bio import SeqIO


file = sys.argv[1]


ow = open(file.split('.')[0]+'.check','w')
seqs = SeqIO.parse(open(file), format='fasta')
 for rec in seqs:
        name = rec.description
        seq = rec.seq.tostring()


        if len(seq.strip()) != 0:
                ow.write('>'+name+'\n')
                ow.write(seq+'\n')


ow.close()



[test]$python check.py test.fasta