5SOO_O 의 개발 공부 일지
[Python] [ROSALIND] Computing GC Content 본문

데이터를 읽고,
각 염기 서열에서 G와 C가 몇 개 있는지 찾아
가장 많이 가지고 있는 유전자를 찾는 문제이다.
1. 파일을 읽어 오는 코드
with open("./rosalind_gc.txt") as f:
sequence = f.readlines()
readlines()로 파일을 읽어보면

한 줄씩 \n이 들어있다.
\n을 빼기 위해 strip()을 활용해서 다시 작성했다.
def readfile(filepath):
with open(filepath, 'r') as file:
return [i.strip() for i in file.readlines()]
2. 읽어온 파일을 변수에 담고, 딕셔너리를 활용해 '라벨' : '값' 형태로 바꾸기
file = readfile("./rosalind_gc.txt") # 위에서 작성한 함수 이용해 파일 읽고, 읽은 내용 변수에 담기
dict = {} # 키 : 값 담을 딕셔너리 생성
label = "" # 라벨 담을 변수 만들기
for line in file: # 파일에서 for문 돌리면서 하나씩 꺼내기
if '>' in line: # 하나씩 꺼냈는데 '>' 가 포함되어 있다면
label = line # 그 단어는 라벨로 쓰기
dict[label] = "" # 그 라벨에 해당하는 value 값 비워두고
else:
# for문 돌면서 그 다음 인덱스로 옴-> 라벨아닌 염기서열 데이터. 위에서 비워둔 value 자리에 염기 서열 담기
dict[label] += line

데이터가 많아서 사진을 잘랐지만 키 : 값 형태로 잘 담기고 있다!
3. GC 세는 함수 만들고, 결과가 담길 딕셔너리에 담기
def gc_content(seq): # 시퀀스 입력 받아
# 그 시퀀스에서 C와 G를 세어 길이로 나누고 100 곱하기. 소수점 7번째 자리에서 반올림하기
return round((seq.count('C') + seq.count('G')) / len(seq) * 100, 6)
# 딕셔너리 값들을 꺼내고 for문을 돌려 키 : 값 형태로 넣기.
# 이 때 딕셔너리 값을 위에서 작성한 gc 세는 함수에 넣어 가공하고,
# 반환된 값을 결과 딕셔너리에 넣는다
result = {key:gc_content(value) for (key, value) in dict.items()}
4. max() 함수 활용해 value 값 중 가장 큰 값의 키 구하기
new = {'a':'1', 'b':'2', 'c':'3'}
print(new.get('c'))
이렇게 쓰면
딕셔너리 new의 키 c의 값 '3'을 얻을 수 있다.
max 함수는 key와 default라는 매개 변수를 갖고 있다.
key에 함수를 값으로 넣는다. lambda를 이용할 수 있다.
key= function을 기준으로 최대, 최솟값을 찾는다.
max_key = max(result, key=result.get)
print(f'{max_key}\n{result[max_key]}')
.get 메소드를 활용했다.
result 딕셔너리 내 value값이 가장 큰 키를 구한다.
프린트를 찍어 보면
print(max_key)

키 값이 잘 나온다!
키와 그 키에 해당하는 값도 프린트 해보자
print(f'{max_key}\n{result[max_key]}')

구하고자 하는 값이 잘 나왔다!
728x90
'자료구조 및 바이오 인포매틱스' 카테고리의 다른 글
| [Python] join() 함수 "expected str instance, int found" 에러 (0) | 2022.04.08 |
|---|---|
| [Python] [ROSALIND] Translating RNA into Protein (0) | 2022.04.07 |
| [Python] [ROSALIND] Rabbits and Recurrence Relations (0) | 2022.04.07 |
| [Python] [ROSALIND] Complementing a Strand of DNA (0) | 2022.04.07 |
| [Python] [백준] [10872] 팩토리얼 (0) | 2022.04.06 |