레이블이 GISAID인 게시물을 표시합니다. 모든 게시물 표시
레이블이 GISAID인 게시물을 표시합니다. 모든 게시물 표시

목요일, 5월 28, 2026

GISAID 크롤링 테스트

지난번 잠깐 검색해봤던 gisaid 사이트에서 covid19의 DNA서열을 다운로드하는 github의 코드들이 진짜 잘 작동하고 있는지를 확인해서 기존에 잘 작동하고 있는 스크립트가 있는데 굳이 다시 covid서열 다운로드 받는 스크립트 만든다고 돈(aka 토큰)을 낭비하는 것은 아닌지 한번 확인해 보았습니다.

아.. 근데 왜 gisaid에서 covid 19 서열을 2026년도에도 다운로드 받고 있어야돼? 라고 의아해하는 분들을 위해서 이유를 간단히 말씀드리자면..

1. 그냥 매일, 매달 아직도 새롭게 COVID19 서열이 올라오는거 수집해보고 싶은 분들이 있을 수 있지 않겠습니까?

2. COVID19 진단키트 업체들은 1년에 한번인가 두번씩 현재 생산, 판매하고 있는 진단키트가 현재 유행하고 있는 변종도 잘 탐지가 되는지 증거자료를 제출해야하는데 이때 실 검체를 사용하지 못할 수 도 있습니다. 적어도 in-silico로 검증을 해야하는데 이럴 때 gisaid 홈페이지에서 서열을 다운로드 해서 분석을 해야합니다. 이럴 때 미리미리 잘 정리된 분석할 서열들이 내 손에 있으면 편하겠죠? 그래서 하는겁니다.


그래서 다시 본론을 돌아와서

github에 공개되어 있는 스크립트들을 다음과 같이 4개를 확인해 보았습니다.

https://github.com/poeli/EpiCoV_downloader

https://github.com/enviro-lab/gisaid-download

https://github.com/dubc461/GID

https://github.com/bioinf-mcb/gisaid-scrapper


그리고 결론을 먼저 말씀드리자면 (이미 다들 알고 있다 싶이)"새로 만들어야합니다." 되겠습니다. ㅋ 

일단 COVID19가 휩쓸던 때에 만든거라서 파이썬 버전들도 예전버전이고, gisaid 홈페이지가 이전보다 많이 교묘해졌습니다. 그래서 기존의 코드들은 작동을 잘 안하더라구요(물론 그때 당시에는 잘 작동했을 지 모르겠지만... 조금 지나서 작동 안했을 것 같습니다.)

물론 gisaid말고 NCBI에서도 COVID19 DNA서열은 다운로드 받을 수 있습니다. 약 920만개 서열로 gisaid에 적재되어 있는 17백만개 보다는 적은데 다운로드가 조금 수월합니다. 다만 최신 변종 서열들은 NCBI에는 빠르게 업데이트가 되지 않아서 위에 언급한 두번째 이유를 위해서는 gisaid를 활용해야합니다.

그럼 기존 공개되어 있는 다운로드 스크립트에 수행 결과에 대해서 얘기해보죠 :)


1. EpiCoV_downloader

github: https://github.com/poeli/EpiCoV_downloader

설치

$ git clone https://github.com/poeli/EpiCoV_downloader.git

$ cd EpiCoV_downloader/

$ conda env create -f environment.yml

$ conda activate gisaid

(gisaid) gwlee@gwlee:~/EpiCoV_downloader$


명령어
./gisaid_EpiCoV_downloader.py -u <user_id> -p <user_pw> -cs 2019-12-26 -ce 2019-12-30 -hc -le -cg

에러
1) 173줄에서 오류 발생
# 기존 코드
driver = webdriver.Firefox(
    firefox_profile=profile, options=options, firefox_binary=ffbin
)
------------------------------------------------------------------------------------------
# 수정된 코드 (Selenium 4+ 문법)
options.profile = profile  # 프로필을 options에 설정
if ffbin:
    options.binary_location = ffbin  # 바이너리 경로를 options에 설정

# webdriver.Firefox에는 오직 options만 전달합니다.
driver = webdriver.Firefox(options=options)

2) conda에 설치된 geckodriver이 오래전 버전으로 업데이트 필요
$ conda update -c conda-forge geckodriver

3) firefox headless 
# 기존 코드 어딘가에 정의되어 있을 options 객체에 아래 라인을 추가합니다.
options.add_argument('--headless')  # 화면 없이 실행하는 옵션
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# 그 후 기존 코드대로 실행
driver = webdriver.Firefox(options=options)

4) 파이어폭스 오류
#파이어폭스 관련된 라이브러리 설치 필요
sudo apt-get update
sudo apt-get install -y firefox

5) 그래픽 라이브러리 설치 
# 헤드리스 모드라 하더라도 가상의 그래픽 라이브러리가 필요합니다.
sudo apt-get install -y libgtk-3-0
# 1. Xvfb 및 관련 라이브러리 설치 (우분투 기준)
sudo apt-get update
sudo apt-get install -y xvfb xauth xfonts-base
# 2. 가상 디스플레이 백그라운드 실행 (디스플레이 번호 :99)
Xvfb :99 -ac -screen 0 1280x1024x24 &
# 3. 환경 변수에 디스플레이 등록
export DISPLAY=:99
# 4. 이제 파이썬 스크립트 다시 실행
python gisaid_EpiCoV_downloader.py -u <user_id> -p <user_pw> -cs 2019-12-26 -ce 2019-12-30 -hc -le -cg

6) timeout으로 프록시를 사용하지 않도록 코드 수정
# 기존 options 설정 부근에 추가
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# 로컬 통신은 프록시를 거치지 않도록 설정
options.set_preference("network.proxy.type", 0)  # 0은 프록시 없음(Direct)을 의미
options.add_argument('--disable-gpu')            # 리눅스 서버에서 불필요한 GPU 가속 끄기
driver = webdriver.Firefox(options=options)

7) 라이브러리 호환 문제로 python 3.8에서 3.12로 업그레드필요
# 1. environment.yml을 기반으로 gisaid_stable 이름의 환경 생성
conda env create -f environment.yml -n gisaid_stable
# 2. 생성된 환경 활성화
conda activate gisaid_stable
# 3. 이 환경의 파이썬 버전을 3.12로 다운그레이드 및 필수 드라이버 설치
$ conda install python=3.12 -y
$ conda install -c conda-forge geckodriver -y
$ conda install -c conda-forge geckodriver selenium urllib3 requests pandas -y
$ ./gisaid_EpiCoV_downloader.py  -u <user_id> -p <user_pw> -cs 2019-12-26 -ce 2019-12-30 -hc -le -cg

결과: Error Orz



2. gisaid-download

github: https://github.com/enviro-lab/gisaid-download

설치

$ conda create -n gisaid python=3.10

$ conda activate gisaid

$ pip install gisaid-download

$ python -m pip install "setuptools<81"

명령어

$ gisaid_download --example -o gisaid/directory


결과: 작동도 안하고 미국주에서 발생한 서열만 수집?? 코드안에 미국 주만 리스트업 되어 있음



3. GID

github: https://github.com/dubc461/GID

설치

$ git clone https://github.com/dubc461/GID.git

$ cd GID

$ conda env create -f environment.yml

$ conda activate gid


결과: selenium 버전 문제가 있는 듯 작동안함



4. gisaid-scrapper

github: https://github.com/bioinf-mcb/gisaid-scrapper.git

설치

$ git clone https://github.com/bioinf-mcb/gisaid-scrapper.git

$ conda create -n scrapper python=3

$ conda activate scrapper

$ pip install -r requirements.txt

명령어

python3 scrap.py -u <user_id> -p <user_pw> -w

에러

1) urllib3 버전 오류

$ pip uninstall urllib3

$ pip install "urllib3<2"


2) credentials.txt 파일 생성

credentials.txt 파일 내에 userid와 passwd 정보를 넣어서 생성

python3 scrap.py -w -q -d whole_genome -f credentials.txt

 

결과: 한시간정도 작동하다가 timeout으로 실행 중단


GISAIDR과 같은 경우는 R기반의 스크립트라서 파이썬 기반의 스크립트만 테스트하느라고 일단 배제하였습니다. 결과적으로는 기존의 스크립트들은 파이썬 버전이 낮아 에러가 발생하는 경우가 많았고, 버전 문제가 없는 경우 gisaid 사이트가 무작위적인 크롤링이나 스크랩핑을 막고자 사이트를 변경한 내용이 반영되지 못해서 제대로 작동되지 않는 문제가 있는 것 같았습니다.

고로 현재 gisaid 사이트에 맞는 크롤링 스크립트가 필요할것 같습니다. :)

※ 그럼 다음 글은 개선된 스크립트를 직접 개발해보겠다 정도이지 않을까하네요. :)



출처: @ye._.vely618

토요일, 2월 29, 2020

현재 SARS-CoV-2 Tree를 그리면 어떻게 나올까

2월 28일 기준 2월의 마지막 주말을 맞아 gisaid에 몇개나 업로드 됐는지 확인하러 들어 갔는데 200개가 넘었네??
(2020년 2월 29일 현재 234개임)

그래서 tree 그려보면 어떻게 나올까 궁금해서 한번 그려봤습니다.
근데 200여개 중에 full length로 보이는 거는 대략 164개 정도

그래서 164개 골라내고 SARS 4개 서열과 MERS 2개 서열을 함께 align하고 tree를 그냥 후딱 그려보았다.
(집에서 그냥 작업용으로 사용하는 PC가 i3에 그냥 서류작업에 샘플 테스트는 돌릴 수 있는 정도지 무엇인가 작업하기에는 어렵지 않겠습니까? 그래서 다음과 같이...
최소한의 부하가 걸리지 않는 옵션으로...)

Align: mafft in.fa > out.fa (정확도를 높이는 작업은 진행안했다. 집 컴퓨터로 하려니 안끝나서)
Phylogentic Tree: MEGA X (Maximum Likelihood, General Time Reversible model 사용 했고, 당연히 Bootstrap 100이도 해보려고 했는데 안끝나서 결국 컴터를 껐다는 Orz)

근데 서열중에 Pangolin이라는 단어에 2017이라는 숫자가 있어서 뭐지? 했는데
이게 바로 그 천산갑  ㄷㄷㄷ
천산갑을 벌써 시퀀싱해서 올렸나? 근데 샘플링날짜가 2017? 모지.. 여튼


여튼 그냥 집에서 대충 취미삼아 그려본거...
우리나라에서 올라온 서열들은 7개가 있는데 SNU01, KCDC12, KCDC03/05/06/07/24 3그룹으로 나눠지는 듯한.....

이거 가지고 알 수 있는것은 7명에서 얻은 샘플이 gisaid에 올라와 있고 다른 서열들과 비교해보니 이렇다더라 정도...

그냥 가볍게 보시면 될것 같습니다. :)


GISAID 164ea + Other
GISAID 164ea
ps. 음... 위의 이미지를 저도 한번 봐봤는데 잘 안보이네요..
그렇게 꼭 보고 싶으시면 메일 보내주시면 대단한것도 아니니 164개와 SARS/ MERS 서열 파일 보내드리겠습니다.



출처: @sana_twice.09

토요일, 2월 08, 2020

2019-nCoV Tree 그려보기 -End-

지난번 2번째 글에서는 NCBI에서 genbank파일을 다운로드 받아서 python script로 어쩌구 저쩌구하면 2019-nCoV 서열을 모을 수 있다고 했는데요...

2019-nCoV관련 더 많은 정보들을 확인하시려면 gisaid라는곳에서 서열 을 받으시면 되겠습니다.

gisaid.org


현재(2020년 2월 8일) 76개 서열이 업로드되어 있고 그중 complete genome이 아닌 몇개가 있어서 대략 70개의 서열이 업로드되어 있다고 보시면 되겠습니다.
(아.. 아래 화면은 당연히 회원가입 해야 확인 할 수 있습니다.)


여기서 몇몇 1번 서열들을 다운로드해서 테스트 해보도록 하겠습니다. (최근에 KCDC에서 발표한 서열도 포함하였습니다.

그럼 MEGA-X를 수행하기 전에 서열 정렬 프로그램으로 mafft를 사용하도록 하겠습니다.
(muscle도 좋은데 mafft가 더 빨라서... 빠르다고 좋은건 아니지만 어차피 dna서열 MSA방법이 손꼽는 특정 프로그램이 없는 관계로.. clustalw, clustalo, muscle, tcoffe, mafft 정확히는 protein 서열 정렬이 주특기이고 protein 서열 정렬이 더 의미가 많...)

여하튼.. 그래서

>mafft.bat --auto 2019-nCoV_10ea.fasta > 2019-nCoV_10ea.mafft.fasta

한 결과를 MEGA-X에서 열어보면 이렇게!!




몬가 잘 서열이 잘 정렬 된것처럼 보이죠


Phylogenetic Analsis를 클릭하고, Confirmation창이 하나 뜨는데 저는 No 선택합니다. 이 서열은 전체 genome이지 coding하는 서열이 아니라서.. (물론 coding되는 서열들입니다. ㅎㅎ)

그리고 난 후



MEGA-X 실행 화면에서 PHYLOGENY 선택하고,




5가지방법중 맘에 드시는거 선택해서 작업하시면
진행바가 죽죽 진행되면서

짠하고 다음과 같이 Tree가...


이렇게 그려집니다.

다음번에 기회되면 Tree 그릴때 사용되는 방법에 대해서 공부해서 작성해보는 기회가 있기를 바래보며... 
2020년 새해 벽두 (설날기준)부터 전세계를 공포로 몰아넣고 있는 2019-nCoV Tree그리기를 마무리 하도록 하겠습니다. :)





출처: @sana_twice.09