반응형

ArgParse 모듈 사용하기




if Pkg.installed("ArgParse") == nothing

        println("Pakage 'ArgParse' will be installed...")

        Pkg.add("ArgParse")

end


using ArgParse


ArgParse 모듈은 스크립트의 옵션을 조절하게 해 준다.


프로그램을 만들 때 ArgParse를 사용하면 argument 관리하기가 훨씬 쉽다. 위의 내용을 스크립트 상단에 추가하면 ArgParse가 없으면 설치하고 불러온다.


공식 설명은 http://carlobaldassi.github.io/ArgParse.jl/stable/ 에 있다.


using ArgParse function parse_commandline() s = ArgParseSettings() @add_arg_table s begin "--opt1" help = "an option with an argument" "--opt2", "-o" help = "another option with an argument" arg_type = Int default = 0 "--flag1" help = "an option without argument, i.e. a flag" action = :store_true "arg1" help = "a positional argument" required = true end return parse_args(s) end function main() parsed_args = parse_commandline() println("Parsed args:") for (arg,val) in parsed_args println(" $arg => $val") end end main()



세 가지 조건의 argument를 만들 수 있는데


1. 옵션

2. flag

action = :store_true 

가 들어가며 true or false값으로만 저장된다.

3. 필수

required = true 

이며 반드시 값이 들어가야 한다.


arg1에 넣어준 값은 parsed_args["arg1"] 으로 불러올 수 있다.



반응형
반응형

StatsBase 모듈 사용하기




Julia에서 수치를 다 구한 뒤에 그에 대한 stats을 구할 때 사용할 수 있다.


Array에다가 값을 다 넣은 뒤에 summarystats 함수를 사용하면 편하다.


but Array type에 따라서 자꾸 에러가 나서 정리해 보고자 한다.


Summarystats 함수는 real-valued array를 받아서 mean, minimum, 25 percentile, median, 75 percentile and maximum을 구해준다.


help?> summarystats()

  summarystats(a)


  Compute summary statistics for a real-valued array a. Returns a SummaryStats object containing the mean,

  minimum, 25th percentile, median, 75th percentile, and maxmimum.



julia> summarystats(a)

Summary Stats:

Mean:           2.800000

Minimum:        1.000000

1st Quartile:   2.000000

Median:         3.000000

3rd Quartile:   4.000000

Maximum:        4.000000



먼저 summarystats()를 사용하기 위해서는 StatsBase 모듈을 불러와야한다.


using StatsBase


만약 StatsBase가 설치되어 있지 않다면


Pkg.add("StatsBase")


로 설치할 수 있다.


설치된 모듈은 $HOME/.julia/lib/version/ 안에 있다.



사용법은


summarystats는 real array를 받기 때문에 julia에서는 array선언할 때 아래와 같이 선언해 줘야 한다.


testarray = Array{Real}(0)


Array(Real,0) 으로 선언할 수도 있지만 이렇게 선언하고 코드를 돌리면 


WARNING: Array{T}(::Type{T}, m::Int) is deprecated, use Array{T}(m) instead.


위와 같은 선언은 deprecated되었다고 말한다.


Array를 선언한 후에 값을 넣을 때는 append!를 하면 된다.


append!(testarray,"value")


append!가 끝나면 아래와 같이 마무리 해주면 된다.


result = summarystats(testarray)



println(result)


Summary Stats:

Mean:           290.114559

Minimum:        2.000000

1st Quartile:   89.000000

Median:         128.000000

3rd Quartile:   180.500000

Maximum:        95925.000000


결과가 제대로 나오는 것을 확인할 수 있다!

반응형
반응형

Genome으로부터 sequence 가져오기.




gtf, gff, bed format 등으로부터 sequence를 가져와야 할 때가 자주 생긴다.


julia에서 주의해야할 점은 start index가 0이 아니라 1이라는 것이다.


Plus strand일 경우 그냥 가져오면 되지만


Minus strand 일 때는 reverse complimentary한 sequence를 가져와야 한다.


comp = ['G' => 'C', 'T' => 'A', 'A' => 'T', 'C' => 'G', 'g' => 'c', 't' => 'a', 'a' => 't', 'c' => 'g']


if strand == '+'

sequence = reference[chromosome][startpos:endpos]

elseif strand == '-'

sequence = reverse(map(x -> comp[x] , reference[chromosome][startpos:endpos])

end


comp라는 dictionary를 만들어서 각각 대응되는 염기를 넣는다.


strand가 + 일 경우 genome sequence를 넣어둔 reference라는 dictionary에서 chromosome을 넣고 start와 end coordinate를 넣어주는 것으로 sequence를 가져오면 되지만, - 일 경우 +와 동일한 방법으로 가져온 sequence를 complimantary하게 바꾼 뒤 reverse함수를 사용해서 뒤집는다.




반응형
반응형

Julia 설치 및 실행하기




Julia. 아직 배우는 중이라 어떤 부분에서 장점이 있는지 파악하는 중이다.


Python과 C의 장점만을 가져와서 만드려고 했고 계산과학쪽에서 다루기 위하여 만들어졌다.


적어도 Python 보다는 배우기가 어렵다. but, 파이썬이 지나치게 쉬운거지 Julia가 어려워서는 아니다.



설치를 위해 홈페이지 https://julialang.org/ 에서 최신버전 linux binary 파일을 다운로드 한다. 아직 개발 -ing 중이기 때문에 버전이 1 이상으로 올라가지 않았으며 약 6개월 주기로 버전이 업데이트 되는듯 하다.


wget https://julialang-s3.julialang.org/bin/linux/x64/0.6/julia-0.6.0-linux-x86_64.tar.gz


압축을 풀고 나면 bin 폴더 안에 julia 실행 파일이 있다.



julia는 module을 설치할 때 Pkg.add("MODULE") 으로 설치할 수 있으며 $HOME/.julia/ver/MODULE 로 설치된다.


Julia에서의 장점은 module을 각자 개별 설치가 가능하다는 것이다. python 같은 경우 내 local 안에 python을 설치한 것이 아니라면 내가 module을 설치할 수 없다. but, julia는 그냥 설치하면 된다. 


내가 만든 프로그램을 남이 설치할 때 편하다. module이 있는지 체크하고 없다면 그냥 Pkg.add(MODULE) 되도록 코드를 짜면 된다.



나중에 따로 정리하겠지만 plotting 하는 모듈들을 테스트 해보고 있다. Python을 쓸 때는 rpy를 써야 했고 개인적으로 안익숙해져서 R과 Python을 번갈아 사용하면서 plotting을 하는 귀찮음이 있었는데 julia는 쉽게 할 수 있을 것으로 보인다.

반응형
반응형

line을 읽을 때 아래와 같이 구분자가 \t으로 되어 있지 않고 space로 되어 있는데다가 그 길이가 그때그때마다 다를 경우 parsing하기가 쉽지 않다. 


regular expression을 써서 구분하면 된다.


julia> a

" t= 0.2652  S=    38.3  N=    99.7  dN/dS=  0.5082  dN = 0.0697  dS = 0.1371\n"


julia> matchall(r"\d+.\d+",a)
6-element Array{SubString{String},1}:
 "0.2652"
 "38.3"  
 "99.7"  
 "0.5082"
 "0.0697"
 "0.1371"

아래의 list를 받아서 원하는 index에서 숫자를 가져오면 된다. string으로 되어 있기 때문에 float으로 바꿔서 가져와야 사용할 수 있다.

반응형
반응형

Julia에서 폴더를 하나 선택 후 그 폴더에 있는 하위폴더만 고르거나 특정 확장자를 가지고 있는 파일만 리스트로 만드려면


먼저 해당 폴더를 input으로 받은 뒤 filter를 이용해서 조건에 맞는 파일들만 고르면 된다..


readdir() 은 디렉토리를 읽고 안에있는 모든 파일을 가져오는 것이며


isdir()은 해당 파일이 디렉토리인지 확인하는 함수이고


endswith()는 해당 파일이름의 마지막이 주어진 조건과 매치하는지 확인하는 것이다.



세 함수를 조합해서 아래처럼 사용하면 된다.



inputdir = ARGS[1]

dirlist = filter(x -> isdir(inputdir*x), readdir(inputdir))


zipfilelist = filter(x -> endswith(x,".zip"), readdir(inputdir))


스크립트를 실행하면서 넣어준 ARGS[1] 디렉토리에서


하위 폴더는 dirlist에 리스트 형식으로 저장 될 것이고

.zip으로 끝나는 파일들을 zipfilelist에 리스트 형식으로 저장 될 것이다.



반응형

'Computer Science > julia' 카테고리의 다른 글

ArgParse 모듈 사용하기  (0) 2017.08.31
StatsBase 모듈 사용하기  (0) 2017.08.24
Genome으로부터 sequence 가져오기.  (0) 2017.08.18
Julia 설치 및 실행하기  (0) 2017.08.16
string에 섞여있는 float 찾기  (0) 2017.03.16

+ Recent posts