지난 주말에 전주에 다녀온 것이 약간 무리였었던 것 같다. 감기몸살 증세가 나타나기 시작하여 서 나는 그저께 오후부터 맥을 못추고 있고, 아내도 슬슬 몸이 안좋다고 한다.
전주에 가면 외지에서 온 관광객들이 붐비는 한옥마을만 거니는 것이 아니라 종종 젊음이 넘쳐나는 객사길로 향한다. 대전으로 치자면 으능정이 문화의 거리에 해당한다고 보면 된다. 객사('풍패지관')와 영화의 거리 사이의 골목은 한옥마을과 다른 느낌이 있다.
한옥마을에서 팔달로를 따라 북쪽으로 걸어가는 길에 전라북도예술회관(전주시 완산구 팔달로 161)이 자리잡고 있다. 가끔 이곳을 들러 전시뢰를 구경하고는 한다. 지난 주말에는 수채화가 정유진님의 일곱번째 개인전 '여운을 남기다(링크)'가 진행 중이었다. 수채화이지만 유화 못지않은 강렬함을 주는 그림들이었다. 관람을 마치고 나서려는데 작가께서 차를 따라 내면서 전주 시장님이 오신 줄 알았다고 한다.
구글을 찾아보니 김승수 전주시장은 나와 비슷한 느낌의 외모인 것을 인정하지 않을 수 없다. 나이도 비슷하고... 유쾌한 오해를 받았다 생각하고 자리를 떴다. 기사를 찾아보니 이제 마무리되는 임기 동안 토건업자나 대기업들이 싫어할 일만 골라서 했다고 한다(링크). 6월 지방 선거를 앞두고 재선이 유력하다고도 한다. 고층건물·쇼핑센터·자동차 도로 중심의 개발에 익숙한 사람들에게는 신선한 도전이 아닐 수 없다.
글 제목은 '애드센스 광고 게재 시작'인데 엉뚱하게도 일상 이야기만 하고 말았다. 블로그를 접속하면 오른쪽 사이드바의 글목록(블로그 보관함) 아래에 광고가 보이기 시작한다. 신청은 꽤 오래전에 해 두었는데 셋업하는 방법을 잘 몰라서 방치한 상태였다. 이것이 나에게 대단한 수익을 주거나, 그렇다고 해서 내 블로그를 방문하는 사람들에게 큰 불편함을 줄 것으로는 생각하지 않는다.
2018년 3월 29일 목요일
2018년 3월 27일 화요일
Barrnap 결과물(GFF3)에서 16S rRNA 서열만 뽑아내기
Barrnap(BAsic Rapid Ribosomal RNA Predictor, 링크)를 사용하여 박테리아의 유전체 서열로부터 ribosomal RNA를 예측하였다. 결과물은 GFF3 파일이다. 여기에서 16S rRNA sequence를 뽑아내려면 어떻게 하면 좋을까? 막상 Perl을 이용하여 GFF와 FASTA file을 파싱하려니 여간 성가신 일이 아니다. 혹시 인터넷을 뒤지면 방법이 나오지 않을까?
역시... 친절한 shell script가 하나 나타났다. bedtools와 samtools를 기반으로 돌아가는 스크립트인 16S_extraction_Barrnap.sh라는 것이 존재하는 것이다.
https://github.com/raymondkiu/16S_extraction_Barrnap
핵심은 다음과 같이 달랑 네 줄이 전부이다. 중요한 명령어는 굵은 글씨로 강조하였다.
grep '16S' $gfffile > 16S-gff.gff;첫단계에서는 Barrnap 결과물인 GFF 파일에서 16S ribosomal RNA feature만 추출한다. 유전체에는 여러개의 16S rRNA가 존재하므로 두번째 줄에서 bedtools getfasta를 이용하여 서열을 추출하면 multiple fasta file(16S-fasta.fna)이 생긴다. 세번째 줄에서는 가장 먼저 출현하는 16S rRNA의 ID 줄(예: >CP013254.1:1163436-1164962)을 뽑아내어 '>'를 제거한 뒤 16S-id.txt에 저장한다. 마지막 명령어(samtools faidx)에서는 16S-id.txt에 저장된 서열 ID에 해당하는 것을 16S-fasta.fna에서 뽑아내는 것이다.
bedtools getfasta -fi $fastafile -bed 16S-gff.gff -fo 16S-fasta.fna;
grep -m 1 ">" 16S-fasta.fna|sed 's/>//g' > 16S-id.txt;
xargs samtools faidx 16S-fasta.fna < 16S-id.txt > $fastafile-16S.fna
16S-id.txt 파일에는 서열 ID가 하나만 들어있으므로 사실은 마지막 행에서 xargs를 쓸 필요는 없었다.
bedtools와 samtools를 이런 용도로 사용해 본 적은 없었다. 기껏해야 feature와 관련된 수치를 뽑거나, read mapping을 하는 파이프라인 실습 자료가 지시하는 대로 기계적으로 활용했을 뿐이었다. 특히 samtools faidx는 FASTA sequence file의 인덱스 생성에만 쓰는 것으로 생각하였었다. 매뉴얼을 찾아보니 samtools faidx는 'index/extract FASTA'라고 설명이 되어있다.
Multiple fasta file로부터 특정 ID의 서열을 추출하는 용도로는 BioPerl을 사용하여 적당히 코딩한 것을 사용해 왔었는데, 이렇게 samtools를 쓸 수도 있다는 것을 오늘 처음 알았다. 단, 뽑아낼 서열이 별도의 텍스트 파일에 존재하는데 그 수가 여럿이라면(id1, id2, id3...idN) 다음과 같이 쓰거나,
samtools faidx 16S-fasta.fna id1 id2 id3 ... idN혹은 위에서 보인 것처럼 xargs를 써야 한다. 내가 만든 스크립트는 서열 ID를 수록한 파일이 여러 라인으로 되어 있을 것을 감안한 것이었다.
2018년 3월 26일 월요일
Conda, Anaconda, Bioconda 기초
서버의 운영체제를 CenOS 6.9에서 7.4로 업그레이드하면서 여러 응용프로램을 효율적으로 관리할 방안을 고민하게 되었고, 이에 따라서 자연스럽게 conda를 공부하게 되었다. 앞으로는 Linuxbrew에서 조금씩 멀어지게 될 것만 같다. 전혀 관리자 역할을 할 수 없는 서버를 접속하여 사용한다면 Linuxbrew도 좋은 대안이다.
Conda: Package, dependency and environment management for any language—Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN
Anaconda: open source distribution of the Python and R programming languages
Bioconda: a channel for the conda package manager specializing in bioinformatics software
Conda는 나머지 두 개의 기반이 되는 관리 시스템이기도 하다. 일단 관리자 권한으로 /opt/anaconda3에 설치를 하였다. 일반 사용자 모드에서 설치 스크립트(Anaconda3-5.1.0-Linux-x86_64.sh)를 실행한다면 ~/anaconda3가 기본 설치 위치가 된다.
Conda에서 환경(environment; Managing environments)의 개념을 잡는 것이 조금 어렵다. Python의 virtualenv와 유사한 것이라고 생각하면 된다. 즉 사용자가 지정한 python version과 패키지가 적용되는 환경을 생성하여 activate 명령으로 이에 진입하여 사용하면 되는 것이다. 현재 설치된 환경은 무엇이 있는가?
$ conda info --envs
# conda environments:
#
root * /opt/anaconda3
'root' 하나만 존재한다. 설치 매뉴얼에 있는 그대로 따라서 Bioconda 설치까지 마쳤더니 python package는 176개, /opt/anaconda3/bin에는 무려 873개의 바이너리가 깔렸다. 설치된 모든 패키지의 목록을 보고 싶으면 conda list --explicit라고 하면 된다. Bioconda를 통해서 깔린 패키지도 전부 보임은 당연하다.
아직까지는 나만의 conda environment를 따로 생성할 필요를 느끼지 못한다. root의 것을 그대로 쓰면 된다. Python 2.7.5가 필요하다면 /opt/anaconda3/bin이 $PATH에 속하지 않게만 만들면 되는 것이다. 만약 conda 환경 안에서 python 2.7을 사용하려면 다음과 같이 실행하여 py27이라는 이름의 새로운 환경을 하나 만든 뒤 activate를 하면 된다(Managing python)
$ conda create -n py27 python=2.7 anaconda
설치된 환경을 점검해 보자. 친절하게도 홈 디렉토리 아래에 python 2.7과 관련한 것들을 설치할 공간을 마련하였다. 개별 패키지를 설치하려면 나의 설정 상태에서는 관리자 권한일 필요하지만, 'environment'를 새로 만들 때에는 홈 디렉토리를 이용하므로 일반 사용자 권한으로도 가능하다.
$ conda info --envs
# conda environments:
#
py27 /home/hyjeong/.conda/envs/py27
root * /opt/anaconda3
채널이란 무엇인가? Conda가 패키지를 찾기 위해 살펴보는 path라고 한다. 이 글의 시작 부분에서 소개했듯이 Bioconda는 일종의 채널이다. Bioconda를 통해서 생명정보용 응용프로그램을 설치할 때를 제외하면 채널을 매만질 일이 없으니 당장은 더 알아볼 필요는 없다.
이렇게 능률적으로 프로그램 관리를 할 새로운 방안을 익히게 되어 다행스럽게 생각한다.
2018년 3월 25일 일요일
TDA7265 앰플리파이어 속판 작업
![]() |
| 트랜스는 자리를 잘 잡았는데 앰프 기판은 똑바로 놓이질 못하였다. 왜 구멍도 제대로 뚫지 못하는가! |
오늘 작업한 것은 사진으로는 그다지 눈에 뜨이지 않는다. 케이스 속판(알루미늄)을 구입하여 전원트랜스포머와 기판을 그 위에 고정하였다. 이전에는 플라스틱 케이스에 구멍을 뚫고 직접 고정하였더니 무거운 부품 때문에 케이스 바닥이 아래로 처지는 느낌이 있었다.
케이스와 속판은 전부 케이스포유 제품이다. 이 케이스(ACE2520L)은 품절되었지만 전후면 속판은 현재 생산되는 것과 호환이 된다.
이번에는 좀 제대로 가공을 해 보고자 노력했으나 역시 많은 아쉬움이 남는다. 바닥판에 가공한 이전 구멍의 위치를 기준으로 뚫었더니 아뿔싸, 패널에 대해서 평행을 유지하지 못하는 것이 아닌가. 게다가 볼트를 너무 조여서 구멍 하나가 뭉개지고 말았다.
스트레스를 받으면서까지 취미활동을 할 필요는 없다. 여유를 갖자. 여유!
독서 기록 - [이 세계의 식탁을 차리는 이는 누구인가] 외 2권
총 네 권의 사진을 찍었지만 '부자의 시간(최윤식 지음)'은 끝까지 읽는데 실패하였다. 다음에 꼭 다시 도전할 생각이다. 저자가 밝히기로는 이 책을 쓴 목적은 부의 흐름을 통찰할 수 있는 지식과 방법을 소개하는 것이라고 했다. 그러려면 경제 인텔리전스를 갖는 것이 중요하다. 기대수명이 길어진 현실에서 육체적으로 노동을 하여 돈을 벌 수 있는 상대적인 시간은 더욱 짧아졌다. 인생의 나머지 기간은 어떻게 하여 살아나갈 것인가? 이를 위해서는 '돈을 갖고서 돈을 버는' 것이 필요하다. 책의 앞부분에서 서양 자본주의의 형성 과정 - 그것이 항상 좋은 의도에서 비롯된 것은 아니지만 - 을 설명한 것은 매우 유익하였다.
얼마전 <성장 없는 번영>이라는 책을 읽었었다(링크). 경제적 세계화의 문제점, 그리고 기본 소득의 개념(뤼트허르 브레흐만의 저작) 등을 조금 접하게 된 나는 팽창을 기본 전제로 하는 금융상품 투자에 대해서 어떤 가치관을 가져야 하는지 아직 고민을 하는 중이다.
나머지 책은 제목과 저자를 소개하는 것으로 이번 독서기록을 마치려 한다. 앉아서 쓰기 시작하면... 힘도 들거니와 자꾸 길어질 것만 같다. 그냥 게으름 탓이라고 해 두자.
이 세계의 식탁을 차리는 이는 누구인가
- 부제: 인간과 자연을 살리는 푸드 민주주의의 비전
- 반다나 시바 지음, 우석영 옮김
늙어감의 기술
- 부제: 과학이 알려주는 나이 드는 것의 비밀
- 마크 E. 윌리엄스 지음|김성훈 옮김
권력은 왜 역사를 지배하려 하는가
- 부제: 정치의 도구가 된 세계사, 그 비틀린 기록
- 윤상욱 지음
2018년 3월 23일 금요일
[CentOS 7] root가 설치한 perl module은 어디로 갔는가?
사용하던 서버 중 하나를 CenOS 7.4.1708로 업그레이드한 다음 필요한 프로그램을 설치하면서 CentOS 6과는 얼마나 달라졌는지를 체험해 나가고 있다. Python, R, 생명정보분석용 프로그램의 관리에는 Conda를 시험삼아 쓰기 시작하였다. 아직은 Anaconda와 Conda 중 어떻게 부르는 것이 정확한지도 잘 알지 못한다. /opt/anaconda3에 패키지가 하나씩 설치되는 중인데 그 분량이 상당히 많다.
관리자 권한으로 Perl module을 몇 개 설치한 다음 BioPerl을 깔았다. 일반 사용자로 되돌아와서 BioPerl을 사용하는 간단한 스크립트를 하나 시험삼아 구동하였더니 모듈이 없다면서 에러가 난다. 오잉? 도대체 어디다 설치를 한거지? 다시 root로 들어가서 @INC를 확인해 보았다. 왜 이렇게 요소가 많은가! 빨강색으로 표시한 경로는 CentOS 6의 관리자 모드에서는 보이지 않던 것이다. 모듈을 몽땅 여기에 깔아버렸으니 일반 사용자가 접근이 불가능했던 것이다.
# perl -e "print join \"\n\", @INC"
/root/perl5/lib/perl5/5.16.3/x86_64-linux-thread-multi
/root/perl5/lib/perl5/5.16.3
/root/perl5/lib/perl5/x86_64-linux-thread-multi
/root/perl5/lib/perl5
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
.
CentOS 6.x에서는 특별히 손을 대기 전까지는 PERL5LIB 변수가 정의되어있지 않은 상태였다. 그런데 CentOS 7.4에서는 그렇질 않다.
# echo $PERL5LIB
/root/perl5/lib/perl5:
흠.. startup script에서 미리 손을 써 둔 것이 분명하다. 범인은 .bashrc였다. 다음과 같은 라인이 떡하니 들어있는 것이 아닌가. 이런 요망한 것들이 있나...
전부 주석처리를 한 뒤 다시 로그인을 하여 Perl module을 재설치하였다. 비로소 일반 사용자 모드에서 모듈을 사용하는 것이 가능해졌다. 펄을 꽤 오랫동안 사용해 왔는데도 아직도 이렇게 사람을 혼동스럽게 만드는 일이 생긴다.
2018년 3월 21일 수요일
Bio-Linux 8.0.7(Ubuntu 14.04.5 LTS 기반)에 pyenv 설치하기
지금껏 CentOS 6.9를 사용해 오다가 7.3-1611로 업데이트를 위한 준비를 진행하고 있다. GCC와 python 등의 버전 문제로 꼭 필요한 응용프로그램을 실행하는데 많은 불편함이 있었다. Linuxbrew와 pyenv 등이 뒤죽박죽된 아주 골치아픈 상황이었다.
이와는 별도로 현장연구를 수강하는 학생을 위해서 Bio-Linux 8의 .ova 파일을 VirtualBox에 '가져오기'를 하여 이것저것을 시연하고 있는데, python 3.5를 설치하기 위한 사전 작업으로 pyenv를 설치하려는 과정에서 난관에 부딪혔다. 대충 설치는 한 것 같은데 python 설치가 안된다.
생각해보니 CentOS에서 pyenv를 설치한 적은 있는데 우분투 기반에서는 아직 해 보지 않았다. 뭐가 문제일까? 답이 잘 찾아지지 않아서 conda를 통해서 python 3.x를 설치한 다음 pip를 사용하여 다른 python 응용프로그램을 깔아보았다. 이렇게 하니 문제는 없다. 어느 python interpreter를 사용하도록 $PATH를 설정하느냐에 따라서 다른 프로그램의 설치도 알아서 된다. 하지만 내가 원하는 것은 이게 아니었다.
다시 pyenv의 GitHub 사이트를 방문하여 설치 방법을 주의깊게 읽어보았다. 아! git clone 명령을 내릴 때 목표 directory를 잘못 설정한 것이었다. 다른 프로그램을 클로닝하듯이 다음과 같이 명령을 내린 것이 나의 실수였다.
정리하자면 다음과 같이 하면 된다.
이와는 별도로 현장연구를 수강하는 학생을 위해서 Bio-Linux 8의 .ova 파일을 VirtualBox에 '가져오기'를 하여 이것저것을 시연하고 있는데, python 3.5를 설치하기 위한 사전 작업으로 pyenv를 설치하려는 과정에서 난관에 부딪혔다. 대충 설치는 한 것 같은데 python 설치가 안된다.
생각해보니 CentOS에서 pyenv를 설치한 적은 있는데 우분투 기반에서는 아직 해 보지 않았다. 뭐가 문제일까? 답이 잘 찾아지지 않아서 conda를 통해서 python 3.x를 설치한 다음 pip를 사용하여 다른 python 응용프로그램을 깔아보았다. 이렇게 하니 문제는 없다. 어느 python interpreter를 사용하도록 $PATH를 설정하느냐에 따라서 다른 프로그램의 설치도 알아서 된다. 하지만 내가 원하는 것은 이게 아니었다.
다시 pyenv의 GitHub 사이트를 방문하여 설치 방법을 주의깊게 읽어보았다. 아! git clone 명령을 내릴 때 목표 directory를 잘못 설정한 것이었다. 다른 프로그램을 클로닝하듯이 다음과 같이 명령을 내린 것이 나의 실수였다.
$ git clone https://github.com/pyenv/pyenv.git이렇게 하면 현 디렉토리에 git라는 이름의 클론이 생긴다. 하지만 pyenv는 일반적인 응용프로그램과는 다르다. 그 하위에 많은 리소스를 계층적으로 갖고 있어서 함부로 이름을 바꾸거나 지워서는 안된다. 따라서 숨김 디렉토리에 존재해야 한다. GitHub 사이트의 설명된 설치 방법에는 다음과 같이 클론을 만들라고 분명히 나와있다.
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv이것이 전부가 아니다. startup script에 몇 줄을 써 넣어야 한다. .bashrc인가, 혹은 .bash_profile인가? 설치 설명서에는 bash는 .bash_profile, zsh은 .zshenv, 우분투와 페도라는 .bashrc라고 하였다. Bio-Linux가 zshell을 쓴다고 하여 .zshenv에 써 넣는 것이 아니다. 우분투에 대해서는 .bashrc라고 하지 않았다.
정리하자면 다음과 같이 하면 된다.
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrcSyntaxhighlighter를 써야 하는데 아직도 익숙하지 않다. 이제 exec $SHELL이라 명령하여 shell을 재기동한다. 그러고나서 pyenv install 3.5.1이라 하면 무사히 설치가 된다.
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
문제점 발견
'pyenv install 3.5.1'을 하면 에러가 발생한다. 위의 사례에서 설치에 성공했던 것은 이것 저것을 건드리다가 Oh My Zsh(링크)가 설치된 상태에서 실행했기 때문이 것으로 보인다. 깨끗한 우분투 14.x 또는 16.x에서는 잘 안된다. 그러나 'pyenv install'로 anaconda 혹은 miniconda를 설치하면 잘 된다.
피드 구독하기:
글 (Atom)


