본문 바로가기

파이썬3

파이썬 병렬화 (multiprocessing) 1. 개요 파이썬은 특별하게 뭔가 설정하지 않으면 core와 thred가 몇 개이든 single thred 1개만 사용한다. 이렇게 되면 대단히 비효율적이므로 병렬화를 시켜서 하는 방법이 있다. multiprocessing은 여러가지 병렬화 관련 작업을 도와주는데 여기서는 starmap이라는 메서드에대해 소개한다. map과 starmap의 차이는 argument를 몇 개 받을 수 있냐의 차이로 map은 1개 밖에 안되는 반면 starmap은 2개 이상이 가능하다. starmap과 starmap_async는 병렬처리 시 작업 결과물을 정렬할지에 관한 것으로 async 쪽이 아무래도 좀 더 빠르다. 2. 내용 import multiprocessing import os # 일부러 multiple argumen.. 더보기
[biopython] fasta파일 불러들이기 생명정보학에서 DNA/RNA/단백질 서열 분석은 자주 필요한 것이다. 이러한 것들은 fasta라고 하는 것으로 일반적으로 정리되어 있다. biopython에서는 이를 손쉽게 불러들여와서 전처리해주는 기능이 있다. from Bio import SeqIO # 아래는 fasta파일의 용량이 작을 때 사용하기 용이하다. record_dict = SeqIO.to_dict(SeqIO.parse("example.fasta", "fasta")) print(record_dict["gi:12345678"]) # use any record ID # 아래는 fasta파일의 용량이 클 때 사용한다. # 필요한 부분만 사용자가 찾을 때 값을 반환한다. from Bio import SeqIO record_dict = SeqIO.i.. 더보기
Tukey's median polish 1. 개요 Median polish는 John Tukey에 의해 제안된 간단하지만 강건한 (robust) 데이터 분석 기법으로 행과 열로 이루어진 테이블에서 행 영향 (row effect)와 열 영향 (column effect) 그리고 전체적인 중앙값 (overall median, 문헌에 따라서는 mean으로 표기)을 찾는 기법이다. 이것은 행렬에서 각 행과 열의 중앙값을 얻은 후 빼는 방식을 여러 번 반복해서 행 영향과 열 영향을 알아낸다. 중앙값을 이용하기 때문에 outlier에 평균값에 비해 덜 민감하다. R에서는 medpolish 기능이 기본 제공되는 stat 패키지에 있지만 python에는 찾기가 어렵다. 그래서, stat 패키지의 코드에서 직접 numpy를 이용해 만들었다. 읽으면 좋은 자료 .. 더보기
다양한 길이를 갖는 dictionary를 pd.dataframe으로 바꾸는 기능 1. 필요성 pandas에서는 dictionary를 dataframe으로 바꿔주는 기능이 이미 있지만 이것은 diconary의 개별 key값들이 갖는 item의 숫자가 동일해야하는 문제가 있다. 온라인에 공개된 method들은 key값이 column으로 가는 wide-form으로 된 것들이 많아 NaN이 생길수 밖에 없다. 이러한 문제를 해결하고자 long-form으로 만드는 간단한 python 기능을 만들었다. 2. 기능 설명 해당 기능은 먼저 wide-form으로 만든 후에 pands의 melt기능을 활용해서 long-form으로 만든 후 NaN들은 제거한다. 이 때 key값이나 index에는 NaN이 없어야 한다. def dict2df(x): ''' x : dictionary ''' x1=pd.Da.. 더보기
[python] tqdm 사용법 1. 설명 tqdm은 파이썬에서 진행상황을 알려주는 프로그레스바 (progress bar)를 생성할 때 쓰이는 라이브러리이다. 2. 사용법 tqdm은 리스트와 유사한 인스턴스를 감싼 후 for문과 함께 쓰인다. from tqdm import tqdm for i in tqdm(range(10)): i for i in [1,2,3]: i for i in set(['a','b','c']): i 3. 커스터마이징 tqdm의 장점으로는 각 과정 (tick) 때마다 프로그레스바에 사용자가 원하는 값을 출력할 수 있다는 것이다. 이것은 딥러닝을 할 때 loss값을 표기할 때 유용하다. from tqdm import tqdm import time progress_bar=tqdm(range(100)) for i in p.. 더보기
Cluster index permutation test 우리가 샘플들의 라벨을 알고 있을 때, clustering이 잘 됐다면 같은 그룹의 샘플들의 거리 (intra-subtype distance) 는 가깝고 다른 그룹의 샘플들의 거리 (inter-subtype distance)는 멀 것이다. 이러한 점을 이용해서 clustering이 잘됐는지 permutation test를 통해 p-value를 얻을 수 있다. 출처 : 10.1038/s41467-020-17139-y def calc_cluster_index(mm, class_list, distance_method='correlation'): ''' mm : feature matrix (sample x feature) class_list : dictionary {'subtypeA':['s1','s2'],'S.. 더보기
jupyter notebook의 연결 세션 알아내기 jupyter notebook을 실행하다보면 연결 세션 (커널, kernel)이 무엇인지 알고 싶을 때가 있다. jupyter notebook들은 터미널에서 보면 ~~~~~/.local/share/jupyter/runtime/kernel-~~~~.json으로 되어있다. 연결된 json을 알아내는 방법은 실행 중인 노트북 파일에서 아래의 명령어를 입력하면 된다. get_ipython().config 그러면 출력되는 것은 아래와 같이 나온다. {'IPKernelApp': {'connection_file': '/home/xxxx/.local/share/jupyter/runtime/kernel-18083d5f-3462-4020-bb52-8b397e2481e9.json'}, 'Completer': {'use_je.. 더보기
symbol to phred score 변환 파이썬 기능 https://support.illumina.com/help/BaseSpace_OLH_009008/Content/Source/Informatics/BS/QualityScoreEncoding_swBS.htm 시퀀싱 데이터의 fastq나 bam파일에는 각 염기서열 별로 얼만큼 확신하는지를 나타내는 phred score값이 있다. 이것의 문제는 값이 2자리 수를 넘어가게 되면 1-letter인 염기서열과 매칭이 되지 않으므로 각 숫자별로 상징 (symbol)을 매칭한다. 이를 통해 염기서열 길이와 phred score값의 길이는 일치하게 된다. 문제는 상징에서 점수로 변환하는 것은 외우고 다니기 어렵다. 이를 해결하고자 일루미나 홈페이지에서 있는 표를 참고하여 파이썬 기능을 만들었다. score_mapping.. 더보기