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

월요일, 8월 24, 2026

복잡한 싱글셀 데이터, 파이썬으로 가볍게 요리하는 방법

요즘 생물학 연구들을 보면 우리 몸을 이루는 세포들을 뭉텅이로 보는 걸 넘어서, 세포 하나하나를 돋보기로 들여다보듯 분석하는 '싱글셀(단일 세포)' 연구가 꽤나 대세입니다. 그런데 이렇게 세포 단위로 쪼개서 보다 보니 데이터 양이 장난 아니게 많아지고 불필요한 노이즈도 섞여 있어서, 이거 정리하다가 밤새는 일이 부지기수라고 하네요. 생물학 연구하기도 바쁜데 복잡한 코딩이나 수학적 확률 모델까지 다뤄야 하니... "아놔, 데이터는 쏟아지는데 분석은 너무 빡센 거 아님?" 하는 소리가 절로 나올 법합니다.

그래서 오늘은 이런 고충을 시원하게 해결해 주는 똑똑한 파이썬 도구에 대한 논문을 하나 가져와봤습니다. 제목은 **A Python library for probabilistic analysis of single-cell omics data** 되겠습니다.

복잡한 딥러닝이나 확률 모델의 원리를 속속들이 몰라도, 연구자들이 직관적으로 쉽게 가져다 쓸 수 있게 조립식 블록처럼 만들어놓은 'scvi-tools'라는 라이브러리를 소개하는 내용입니다. 골치 아픈 데이터 전처리와 분석은 이 도구한테 알아서 하라고 맡겨두고, 우리는 진짜 찾아내고 싶은 생물학적 현상에만 집중하면 되는 아주 기특한 녀석 되겠습니다. :)

DOI: 10.1038/s41587-021-01206-w


clova-x

scvi-tools는 Python 라이브러리로, 싱글셀 오믹스 데이터의 확률론적 분석을 위한 다양한 기능을 제공합니다. 이 라이브러리는 사용자와 개발자 모두에게 편리한 인터페이스를 통해 싱글셀 데이터 분석의 복잡성을 줄여줍니다.

1. **scvi-tools의 기능**

   - scvi-tools는 싱글셀 RNA 시퀀싱, 세포 유형 주석, 다중 모드 데이터 분석 등 다양한 싱글셀 데이터 분석 작업을 지원합니다.

   - 이 라이브러리에는 확률론적 모델을 구현하여 생물학적 시스템의 불확실성을 포착할 수 있습니다.

2. **사용자 관점에서의 장점**

   - scvi-tools는 표준화된 사용자 인터페이스를 제공하여 사용자가 복잡한 모델을 쉽게 실행할 수 있도록 돕습니다.

   - 이 라이브러리는 인기 있는 싱글셀 데이터 분석 도구와의 호환성을 갖추고 있어 사용자가 여러 환경에서 작업할 수 있습니다.

3. **개발자 관점에서의 장점**

   - scvi-tools는 개발자가 새로운 모델을 쉽게 구현하고 기존 모델을 수정할 수 있도록 다양한 빌딩 블록을 제공합니다.

   - 이 라이브러지는 PyTorch와 같은 인기 있는 머신러닝 라이브러리와 통합되어 있어 개발자가 데이터 관리와 모델 훈련에 드는 시간을 줄일 수 있습니다.

4. **새로운 기능 및 개선 사항**

   - scvi-tools는 불필요한 변동성을 제거하고 새로운 샘플을 기존 모델에 점진적으로 통합할 수 있는 기능을 추가하여 사용자 경험을 향상시켰습니다.

   - 이 라이브러리는 지속적인 개발을 통해 새로운 모델, 워크플로우, 기능을 추가하여 싱글셀 커뮤니티를 지원할 예정입니다.


gemini

## 🔬 복잡한 생명의 설계도, ‘싱글셀 데이터’를 요약하는 마법의 도구: scvi-tools

우리 몸은 수조 개의 세포로 이루어져 있습니다. 최근 과학계에서는 세포 하나하나의 유전 정보를 분석하는 **'싱글셀(Single-cell) 분석'** 기술이 눈부시게 발전하고 있습니다. 하지만 이 데이터는 워낙 방대하고 노이즈(오류)가 많아 분석하기가 매우 까다롭습니다. 오늘은 이 복잡한 데이터를 쉽고 정확하게 분석할 수 있도록 돕는 파이썬 라이브러리, **scvi-tools**를 소개합니다.

### 1. 연구 배경: 데이터는 많은데, 분석하기가 너무 힘들어요

싱글셀 데이터는 세포의 종류나 상태를 정밀하게 보여주지만, 실험 과정에서 발생하는 기술적인 오차나 불확실성이 큽니다. 이를 해결하기 위해 수학적 확률을 기반으로 한 **'확률적 모델(Probabilistic models)'**이 제안되었습니다.

하지만 두 가지 큰 장벽이 있었습니다:

* 

**사용자 입장:** 확률 모델은 사용법이 너무 복잡해서, 기존의 일반적인 분석 도구(Scanpy, Seurat 등)를 쓰던 연구자들이 접근하기 어려웠습니다.

* 

**개발자 입장:** 새로운 분석 모델을 만들 때마다 데이터를 관리하고 학습시키는 복잡한 코드를 매번 처음부터 다시 짜야 하는 번거로움이 있었습니다.

### 2. 연구 목적: 모두를 위한 ‘표준 분석 도구’ 만들기

연구팀은 이러한 장벽을 허물기 위해 **scvi-tools**라는 오픈 소스 소프트웨어를 개발했습니다. 이 도구의 목적은 일반 사용자에게는 **쉬운 분석 환경**을 제공하고, 개발자에게는 **효율적인 모델 구축 환경**을 제공하여 싱글셀 연구의 생태계를 통합하는 것입니다.

### 3. 연구 방법: 딥러닝과 확률 모델의 결합

scvi-tools는 최신 인공지능 기술인 **딥러닝(PyTorch)**과 통계적 **확률 모델**을 결합했습니다.

* 

**통합 플랫폼:** RNA 데이터(scRNA-seq), 단백질 데이터(CITE-seq), 공간 정보(Spatial) 등 다양한 종류의 싱글셀 데이터를 하나의 라이브러리 안에서 모두 다룰 수 있게 설계되었습니다.

* 

**모듈화:** 복잡한 계산 과정을 '모듈(Module)' 단위로 미리 만들어 두어, 개발자가 핵심적인 아이디어만 입력하면 나머지는 시스템이 알아서 처리하도록 했습니다.

### 4. 연구 결과: 분석은 강력하게, 코드는 간결하게!

scvi-tools를 통해 얻은 주요 성과는 다음과 같습니다.

* 

**일관된 사용 경험:** 서로 다른 14가지 이상의 최신 분석 모델들을 똑같은 방식의 코드로 실행할 수 있습니다.

* 

**불필요한 변수 제거:** 실험 환경(배치)에 따른 데이터 왜곡을 효과적으로 제거하여 순수한 생물학적 정보만 남길 수 있습니다.

* 

**효율적인 데이터 추가:** 'scArches'라는 기능을 통해, 기존 데이터에 새로운 데이터를 추가할 때 전체를 다시 분석할 필요 없이 빠르게 업데이트할 수 있습니다.

* 

**압도적인 개발 효율:** 기존 분석 모델(Stereoscope)을 scvi-tools로 다시 만들었을 때, 코드의 복잡도는 낮아지고 코드 양은 획기적으로 줄어들었습니다.

### 5. 고찰 및 의의: 싱글셀 연구의 새로운 표준

이 연구는 딥러닝 기반의 확률 모델이 단순히 '좋은 성능'을 내는 데 그치지 않고, 실제로 연구 현장에서 '누구나 쓸 수 있는 도구'가 될 수 있음을 증명했습니다 . scvi-tools는 기존의 대중적인 분석 도구들과도 완벽하게 연동되어, 연구자들이 자신의 연구 흐름을 끊지 않고도 최첨단 인공지능 모델을 활용할 수 있게 해줍니다.

---

### 💡 이 연구가 왜 중요한가요?

과거에는 고성능 인공지능 모델을 사용하려면 데이터 과학 전문가가 필요했습니다. 하지만 **scvi-tools**의 등장으로 이제 일반 생물학자들도 복잡한 계산 걱정 없이 **암 세포의 미세한 변화나 면역 세포의 반응을 훨씬 정밀하게 분석**할 수 있게 되었습니다.

결국 이 도구는 질병의 원인을 더 빨리 찾아내고, 개인 맞춤형 치료제를 개발하는 속도를 앞당기는 데 기여하는 **'과학계의 엑셀'** 혹은 **'포토샵'** 같은 필수적인 기반 시설이 될 것이기 때문에 매우 중요합니다.

---

**더 궁금하신 점이 있나요? scvi-tools의 특정 모델(예: scVI, totalVI)에 대한 상세 설명이나 설치 방법이 필요하시면 말씀해 주세요!**


chatGPT

업로드하신 논문은 단일 세포 오믹스 데이터를 분석하기 위한 파이썬 라이브러리인 scvi-tools에 관한 내용입니다. 이 라이브러리는 단일 세포 데이터의 차원 축소, 세포 클러스터링, 세포 상태 주석, 차별 발현 분석, 다중 오믹스 데이터 통합 등을 위한 확률적 모델을 제공합니다. 이 모델들은 생물학적 시스템의 불확실성을 포착하고, 오믹스 데이터에서 다양한 변이를 분해하는 데 유용합니다. scvi-tools는 사용자에게 직관적인 인터페이스와 다양한 오믹스 데이터 분석 기능을 제공하며, 개발자에게는 모델 개발의 용이성을 보장합니다.

### 연구 배경 및 목적

단일 세포 오믹스 데이터는 생물학적 연구에서 중요한 역할을 하고 있습니다. 그러나 이러한 데이터를 분석하는 과정에서 발생하는 여러 기술적 문제를 해결하기 위해, scvi-tools는 새로운 확률적 분석 방법을 제시하고자 했습니다. 기존의 분석 도구는 세포 데이터 분석에서 요구되는 복잡한 모델 구현을 수월하게 하기 어렵다는 단점이 있었습니다. 이 연구는 이러한 문제를 해결하기 위해 scvi-tools를 개발한 배경과 목적을 다룹니다.

### 연구 방법

scvi-tools는 PyTorch와 같은 인기 있는 머신 러닝 라이브러리를 기반으로 하여, 데이터 로딩, 모델 훈련 및 사용자 인터페이스 등 여러 기능을 제공합니다. 이 라이브러리는 특히 단일 세포 RNA 시퀀싱(scRNA-seq), 공간 전사체학(spatial transcriptomics) 및 다중 오믹스 데이터를 처리할 수 있는 기능을 갖추고 있습니다. 또한, scvi-tools는 여러 모델을 지원하며, 이들은 Scater, Seurat, Scanpy와 같은 다른 분석 도구들과 호환됩니다.

### 연구 결과

scvi-tools는 데이터 전처리, 차원 축소, 차별 발현 분석, 데이터 통합 등 다양한 기능을 제공하며, 사용자는 이를 통해 단일 세포 데이터 분석을 보다 효율적으로 수행할 수 있습니다. 예를 들어, scVI 모델을 사용하여 RNA-seq 데이터의 차별 발현을 분석하고, scArches를 이용해 새로운 데이터를 기존 모델에 통합할 수 있습니다.

### 고찰 및 의의

scvi-tools는 단일 세포 데이터 분석에서 발생할 수 있는 복잡한 문제를 해결하는 데 중요한 기여를 했습니다. 특히, 데이터의 불필요한 변이를 제거하고, 다중 오믹스 데이터 통합을 효율적으로 수행하는 데 유용한 도구로 자리잡았습니다. 또한, scvi-tools는 확률적 모델을 사용하여 생물학적 불확실성을 처리할 수 있는 새로운 방법을 제시했습니다.

### 시사점

scvi-tools는 연구자들이 보다 정교한 단일 세포 데이터를 분석할 수 있도록 지원하는 중요한 도구입니다. 이를 통해, 다양한 생물학적 연구에 활용될 수 있으며, 특히 질병 연구나 약물 개발 분야에서 중요한 역할을 할 수 있습니다.

### 연구의 중요성

이 연구는 단일 세포 분석을 위한 새로운 소프트웨어 도구를 제공함으로써, 생물학적 연구와 임상 연구에서의 데이터 분석 정확도를 높이는 데 기여할 수 있습니다. 또한, 데이터의 불확실성과 다양한 변이를 보다 정교하게 처리할 수 있어, 향후 많은 분야에서 활용될 가능성이 큽니다.


grok

### scvi-tools: 단일 세포 데이터 분석을 위한 파이썬 라이브러리 요약

#### 연구 배경

단일 세포 오믹스 데이터(예: RNA 시퀀싱, 단백질 프로필)는 세포 수준의 생물학적 변이를 분석하는 데 필수적입니다. 기존 분석 방법들은 차원 축소, 세포 클러스터링, 차별 발현 분석 등 핵심 작업을 수행하지만, 확률적 모델(데이터의 불확실성을 고려한 모델)이 더 정확한 분석을 제공할 수 있습니다. 그러나 이러한 모델은 파이썬 머신러닝 라이브러리를 사용해 구현되기 때문에, 일반 사용자에게는 인터페이스가 복잡하고, 개발자에게는 데이터 처리나 최적화 루틴 구현이 번거롭다는 문제가 있었습니다. 이 논문은 이러한 장벽을 해결하기 위해 출발합니다.

#### 연구 목적

이 연구는 scvi-tools라는 파이썬 라이브러리를 소개합니다. 목적은 단일 세포 오믹스 데이터의 확률적 분석을 쉽게 접근할 수 있게 하는 것입니다. 사용자에게는 표준화된 모델 액세스를, 개발자에게는 새로운 모델을 최소 코드로 구현할 수 있는 빌딩 블록을 제공합니다. 궁극적으로 단일 세포 분석 커뮤니티와 현대 머신러닝 프레임워크를 연결해 과학적 발견을 촉진하는 데 있습니다.

#### 연구 방법

scvi-tools는 Scanpy나 Seurat 같은 인기 도구와 연동되며, AnnData 형식으로 데이터를 처리합니다. 사용자 관점에서 14개 모델(예: scVI - 데이터 통합, scANVI - 세포 주석, totalVI - 다중 오믹스 분석, Stereoscope - 공간 전사체학 해독)을 구현했습니다. 간단한 인터페이스로 모델 학습과 분석(차원 축소, 차별 발현)을 수행할 수 있습니다. 개발자 관점에서는 PyTorch, Pyro 등의 라이브러리를 기반으로 모듈(확률 사양), 데이터 로더, 학습 계획 등을 제공합니다. 예시로 Stereoscope(공간 데이터에서 세포 유형 비율 추정)를 재구현해 코드 복잡도를 줄였습니다. 새로운 기능으로는 여러 원치 않는 변이(세포 주기, 성별 등) 동시 제거와 쿼리 데이터 통합(scArches)이 있습니다. Drosophila 날개 발달 데이터와 COVID-19 환자 데이터를 사례 연구로 적용했습니다.

#### 연구 결과

scvi-tools는 scRNA-seq 통합, 세포 더블릿 검출, CITE-seq 분석 등 다양한 작업을 지원합니다. Stereoscope 재구현에서 원본 코드 대비 복잡도가 평균 10배 줄었고, 코드 줄 수는 1/3로 감소했습니다. Drosophila 데이터에서 세포 주기·성별·반복 변이를 제거해 더 정확한 분석을 보여주었고, COVID-19 데이터는 면역 세포 아틀라스에 투영해 새로운 통찰을 얻었습니다. 라이브러리는 R 인터페이스와 Google Colab 튜토리얼을 제공하며, GitHub 템플릿으로 외부 모델 배포를 돕습니다.

#### 고찰

scvi-tools는 지속 개발 중으로, 새로운 모델과 워크플로우를 추가할 계획입니다. 사용자 피드백을 반영해 문서화와 튜토리얼을 강화했습니다. 그러나 대규모 데이터 처리 시 GPU 의존도가 높아 접근성 문제를 논의합니다. Stereoscope 재구현처럼, 기존 모델을 효율적으로 재설계할 수 있음을 강조합니다.

#### 의의와 시사점

이 라이브러리는 단일 세포 분석의 장벽을 낮춰, 비전문가도 고급 확률 모델을 사용할 수 있게 합니다. 개발자들은 데이터 관리 대신 모델 설계에 집중할 수 있어 혁신을 촉진합니다. 예를 들어, 공간 전사체학이나 다중 오믹스 분석에서 새로운 응용이 가능합니다. 시사점으로는 생물학·의학 연구에서 AI 도구의 표준화가 중요하다는 점입니다.

이 연구가 중요한 이유는 단일 세포 기술의 폭발적 성장 속에서, 복잡한 데이터를 쉽게 분석할 도구가 부족했기 때문입니다. scvi-tools는 이를 해결해 질병 이해(예: COVID-19)와 신약 개발을 가속화하며, 오픈소스 커뮤니티를 강화합니다.


NotebookLM

## 단일 세포 데이터 분석의 혁명: 인공지능으로 생명의 신비를 풀다, 'scvi-tools'

우리 몸은 수조 개의 세포로 이루어져 있으며, 최근 과학자들은 세포 하나하나의 유전 정보를 정밀하게 들여다보는 '단일 세포 옴익스(Single-cell omics)' 기술을 통해 질병의 원인을 찾고 있습니다. 하지만 이 방대한 데이터를 분석하여 유의미한 생물학적 결론을 내리는 과정은 매우 복잡하고 정교한 수학적 모델을 필요로 합니다. 오늘 소개해 드릴 논문은 이러한 복잡한 분석을 누구나 쉽고 정확하게 수행할 수 있도록 돕는 혁신적인 소프트웨어 도구, **scvi-tools**에 관한 연구입니다.

---

### 1. 연구 배경: 강력하지만 다루기 힘든 '확률적 모델'

단일 세포 데이터는 생물학적 변동성과 측정 과정에서의 불확실성이 큽니다. 이를 해결하기 위해 '확률적 모델(Probabilistic models)'이 사용되는데, 이 모델은 데이터의 불확실성을 원칙적으로 포착하고 다양한 변동 요인을 분해하는 데 매우 유리합니다.

문제는 이러한 모델을 실제로 구현하기가 너무 어렵다는 점이었습니다. 최신 인공지능 기술(딥러닝)을 활용해야 하므로 고도의 프로그래밍 실력이 필요했고, 생물학자들이 주로 사용하는 기존 분석 도구들과는 호환성이 떨어져 연구 현장에서 널리 쓰이는 데 장벽이 컸습니다.

### 2. 연구 목적: 인공지능과 생물학의 가교 역할

본 연구의 목적은 최신 머신러닝 프레임워크와 단일 세포 소프트웨어 생태계 사이의 간극을 메우는 것입니다. 이를 위해 **딥러닝 기반의 확률적 분석을 표준화된 방식으로 제공하는 파이썬 라이브러리인 scvi-tools를 개발**하여, 일반 연구자들은 쉽게 분석을 수행하고 개발자들은 새로운 분석 모델을 신속하게 만들 수 있는 환경을 조성하고자 했습니다.

### 3. 연구 방법: 조립식 블록처럼 쉬운 모델 설계

scvi-tools는 PyTorch 및 PyTorch Lightning과 같은 강력한 머신러닝 라이브러리를 기반으로 구축되었습니다. 

*   **사용자 중심 설계:** 복잡한 수식이나 하부 코드를 몰라도 '모델(Model)'이라는 고수준 객체를 통해 차원 축소, 세포 분류, 차이 분석 등을 수행할 수 있습니다.

*   **개발자용 구성 요소:** 새로운 모델을 만들려는 개발자를 위해 데이터 관리, GPU 가속, 학습 루틴 등 반복적인 작업을 미리 구현된 '블록' 형태로 제공합니다. 이를 통해 개발자는 핵심적인 확률 모델 설계에만 집중할 수 있습니다.

*   **상호운용성:** Scanpy나 Seurat와 같은 기존의 대중적인 분석 도구들과 데이터를 쉽게 주고받을 수 있도록 설계되었습니다.

### 4. 주요 연구 결과: 14가지 이상의 분석을 하나로

scvi-tools는 현재 단일 세포 연구에 필수적인 **14가지 이상의 확률적 모델**을 통합하여 제공하고 있습니다.

*   **다양한 분석 지원:** 유전자 발현 데이터 통합(scVI), 세포 유형 자동 주석 달기(CellAssign), 공간 전사체 데이터 분석(Stereoscope) 등 여러 유형의 데이터를 한 곳에서 분석할 수 있습니다.

*   **분석 효율성 극대화:** 연구팀이 기존의 유명한 분석 도구인 Stereoscope를 scvi-tools로 다시 구현해본 결과, **코드의 복잡성이 획기적으로 줄어들고 소스 코드의 양도 대폭 감소**하는 효과를 확인했습니다.

*   **불필요한 잡음 제거:** 세포 주기, 성별, 실험적 오차(배치 효과) 등 생물학적 해석을 방해하는 **불필요한 변동 요인들을 동시에 제거**하는 강력한 기능을 갖추고 있습니다.

*   **빠른 데이터 통합:** 새로운 데이터를 분석할 때 전체 데이터를 다시 처음부터 처리할 필요 없이, 기존에 학습된 모델에 새로운 샘플만 빠르게 추가하는 '참조 모델 통합(Reference mapping)' 기능도 지원합니다.

### 5. 고찰 및 의의: 분석의 대중화와 정밀화

scvi-tools의 등장은 단일 세포 분석의 진입 장벽을 낮추는 동시에 분석의 질을 한 단계 끌어올렸습니다. 연구자들은 이제 복잡한 딥러닝 기술을 직접 배우지 않고도 최첨단 확률 모델을 자신의 연구에 적용할 수 있게 되었습니다. 또한, 무료 컴퓨팅 환경인 Google Colab 등을 통해 대규모 데이터 분석을 지원함으로써 연구의 접근성을 극대화했습니다.

---

### 💡 이 연구가 왜 중요한가요?

이 연구가 중요한 이유는 **파편화되어 있던 단일 세포 분석 기술에 '표준'을 제시**했기 때문입니다. 

지금까지는 새로운 분석 기법이 나와도 이를 실제 연구에 적용하기까지는 수개월 이상의 시간이 걸렸습니다. 하지만 scvi-tools라는 표준 플랫폼이 마련됨에 따라, 전 세계 과학자들이 개발한 최신 인공지능 모델이 즉시 공유되고 현장에서 사용될 수 있는 길이 열렸습니다. 

**결국, 더 정확하고 빠른 데이터 분석은 암이나 희귀 질환의 원인 유전자를 찾아내고, 환자 맞춤형 정밀 의료를 실현하는 과학적 발견의 속도를 획기적으로 앞당기는 강력한 엔진이 될 것입니다.**


Perplexity.ai

이 논문은 단일세포 유전체 데이터를 다루는 연구자들이 더 쉽게, 더 강력한 분석을 할 수 있도록 도와주는 **파이썬 라이브러리**(scvi-tools)를 소개하는 글입니다.[1]

***

## 연구 배경: 왜 이런 도구가 필요할까?

단일세포 RNA-seq, ATAC-seq, 공간 전사체(spatial transcriptomics), CITE-seq 같은 기술 덕분에 하나하나의 세포가 어떤 특징을 갖는지 매우 정밀하게 관찰할 수 있게 되었습니다. 하지만 이 데이터는 너무 방대하고, 노이즈가 많고, 여러 실험·기기·배치(batch)가 섞여 있어서 분석이 매우 복잡합니다.[1]

연구자들은 보통 다음과 같은 일을 반복해서 해야 합니다.[1]

- 차원 축소(시각화·요약)  

- 세포 군집화(비슷한 세포끼리 묶기)  

- 세포 상태·세포 타입 주석 달기  

- 실험 배치·세포주기 등 “원하지 않는 변동” 제거  

- 유전자 발현 차이 분석(집단 간 비교)  

- 공간 데이터에서 패턴 찾기  

- 서로 다른 종류의 데이터(RNA, 단백질, ATAC 등) 통합 분석

이런 작업에 “확률론적 모델”과 “딥러닝”을 쓰면 이론적으로는 매우 강력하지만, 실제 사용은 어렵습니다.[1]

- 사용자 입장: PyTorch 같은 머신러닝 라이브러리를 직접 다뤄야 해서, Bioconductor, Seurat, Scanpy처럼 익숙한 분석 환경보다 훨씬 “저수준”입니다.[1]

- 개발자 입장: 데이터 입·출력, GPU 설정, 최적화, 샘플링, 수치 계산, 사용자 인터페이스까지 전부 직접 구현해야 해서 새 모델을 만들기가 번거롭습니다.[1]

***

## 연구 목적: scvi-tools가 해결하려는 것

이 논문의 목표는 다음 두 가지를 동시에 해결하는 **공통 플랫폼**을 만드는 것입니다.[1]

- 단일세포 데이터를 분석하는 **사용자**가 다양한 최신 확률 모델을 “간편한 인터페이스”로 쓸 수 있게 만들기  

- 새로운 방법을 만드는 **개발자**가 코드를 적게 쓰고, 빠르게 모델을 구현·배포할 수 있도록 “빌딩 블록”을 제공하기

이를 위해 저자들은 `scvi-tools`라는 파이썬 라이브러리를 제안합니다.[1]

- 여러 단일세포 분석 작업을 하나의 통일된 프레임워크에서 수행  

- Scanpy(파이썬)·Seurat/Bioconductor(R)와 자연스럽게 연결  

- GPU를 활용한 딥러닝 기반 확률 모델을 손쉽게 구현·사용

---

## 연구 방법: 라이브러리와 API는 어떻게 구성됐나?

### 1) 사용자 입장에서의 분석 흐름

일반 사용자는 다음과 같은 흐름으로 scvi-tools를 사용합니다.[1]

- 기존 도구(Scanpy, Seurat, Scater 등)로 기본 QC와 전처리를 수행  

- 전처리된 데이터를 `AnnData` 형식으로 정리  

- scvi-tools에서 제공하는 여러 모델(예: scVI, totalVI, scANVI 등)을 선택해 학습시키고,  

  - 차원 축소 결과  

  - 세포 군집·주석  

  - 배치 보정된 표현  

  - 차등 발현 분석 결과  

  - 공간 디콘볼루션 결과  

  등을 얻음  

- 결과는 다시 Scanpy·Seurat·VISION·cellxgene 등으로 시각화·해석할 수 있음

논문에서는 몇 줄짜리 파이썬 코드로 모델 학습, 잠재공간(latent representation) 추출, 차등 발현 분석을 수행하는 예시를 보여주며 “일관적이고 간단한 사용자 인터페이스”를 강조합니다.[1]

### 2) 개발자 입장에서의 구조

개발자를 위해 scvi-tools는 “모델을 쉽게 조립할 수 있는 뼈대”를 제공합니다.[1]

- 핵심 개념은 `Module`과 `Model` 두 레벨입니다.[1]

  - Module: 확률 모델 자체(생성 모델, 추론 모델, 손실함수)를 정의하는 곳  

  - Model: 데이터를 읽고, Module을 학습시키고, 다운스트림 분석(차등 발현, 임베딩 등)을 제공하는 상위 객체  

- 개발자는 다음 3단계만 구현하면 됩니다.[1]

  1. 어떤 확률 모델을 쓸지 수학적으로 정의  

  2. PyTorch 또는 scvi-tools가 제공하는 네트워크·분포를 선택·구현  

  3. `BaseModuleClass`를 상속받아 `generative`, `inference`, `loss` 메서드를 구현

데이터 로딩(AnnDataLoader), 훈련 루프(TrainingPlan), 분석용 믹스인(Mixins) 등은 이미 구현되어 있어, 동일한 구조를 재사용할 수 있습니다. 이 덕분에 복잡한 모델도 코드량과 복잡도가 줄어들고, 유지보수도 쉬워집니다.[1]

***

## 주요 기능과 실제 적용 예

### 1) 다양한 단일세포 분석 작업 지원

scvi-tools에는 이미 14개 이상의 모델이 구현되어 있으며, 각각이 특정 분석 과제를 담당합니다. 예를 들어:[1]

- **데이터 통합 및 배치 보정**: scVI, scArches 등은 서로 다른 실험에서 나온 scRNA-seq 데이터를 하나의 공간으로 통합하고, 배치 효과를 제거합니다.[1]

- **세포 타입 주석**: CellAssign, scANVI는 알려진 세포 타입 정보를 이용해 자동으로 세포에 라벨을 붙입니다.[1]

- **공간 전사체 디콘볼루션**: Stereoscope, DestVI는 “한 점(spot)에 여러 세포가 섞여 있는” 공간 전사체 데이터를 단일세포 RNA-seq 데이터와 결합해, 각 위치에 어떤 세포 타입이 얼마나 있는지 추정합니다.[1]

- **다중 모달 분석(CITE-seq 등)**: totalVI는 RNA와 단백질(항체 태깅 데이터)을 동시에 모델링해서, 서로 다른 모달리티를 통합된 잠재공간에서 해석할 수 있게 합니다.[1]

- **더블릿 검출**: Solo는 두 개의 세포가 한 번에 잡힌 “더블릿” 세포를 자동으로 찾아냅니다.[1]

사용자는 각 모델을 거의 비슷한 방식으로 불러 쓰기 때문에, 서로 다른 과제를 수행하더라도 인터페이스를 새로 배울 필요가 줄어듭니다.[1]

### 2) 여러 종류의 잡음·혼선 요인 동시 제거

논문에서 강조하는 새 기능 중 하나는 “여러 종류의 불필요한 변동(nuisance factors)을 동시에 제거”하는 능력입니다.[1]

- 예: 실험 배치(카테고리형), 세포주기, 미토콘드리아 비율(연속형) 등  

- 실제 예로, 초파리 날개 발달 관련 scRNA-seq 데이터에서 세포주기·성별·반복 실험에 따른 잡음을 동시에 고려해 더 해석하기 좋은 데이터 표현을 얻었습니다.[1]

이는 단순히 배치 하나만 보정하는 수준을 넘어서, 생물학적 의미와 무관한 다양한 요인을 한 번에 제거할 수 있다는 점에서 실용성이 큽니다.[1]

### 3) 이미 학습된 ‘참조 모델’에 새 데이터 추가(scArches)

또 다른 중요한 기능은 이미 만들어 둔 “참조(reference) 모델”에 새로 생성된 “쿼리(query) 데이터”를 점진적으로 통합하는 것입니다.[1]

- scArches라는 신경망 구조를 이용해, 기존 모델을 완전히 다시 학습하지 않고 새 시료를 기존 공간에 투영합니다.[1]

- 논문에서는 totalVI와 scArches를 이용해, 면역세포 아틀라스에 COVID-19 환자 데이터를 투영하는 사례를 소개합니다.[1]

  - 이렇게 하면, 새로운 환자 샘플이 기존 건강·질병 데이터와 비교해 어떤 위치에 놓이는지 직관적으로 볼 수 있습니다.[1]

이는 대규모 공개 아틀라스(예: 면역세포, 장기별 세포 아틀라스 등)에 자신의 데이터를 쉽게 “연결”할 수 있게 해 주어, 점점 쌓이는 데이터를 순차적으로 활용하기 좋습니다.[1]

### 4) 기존 방법의 재구현으로 본 개발 효율성

저자들은 실제로 Stereoscope라는 기존 공간 디콘볼루션 방법을 scvi-tools 위에서 다시 구현해 보았습니다.[1]

- 그 결과,  

  - 코드 줄 수  

  - 사이클로매틱 복잡도(코드 복잡도 지표)  

  모두가 기존 구현보다 눈에 띄게 줄어들었습니다.[1]

- 이는 scvi-tools의 빌딩 블록을 사용하면 복잡한 방법도 더 간결하게 구현할 수 있고, 오류 가능성을 줄이며, 다른 모델과도 일관된 방식으로 유지·사용할 수 있음을 보여줍니다.[1]

***

## 의의와 시사점: 단일세포 연구에 주는 변화

이 연구가 제시하는 scvi-tools는 단순한 “또 하나의 패키지”라기보다, 단일세포 데이터 분석을 위한 **표준화된 확률 모델 플랫폼**을 지향합니다.[1]

- 사용자는 복잡한 딥러닝 코드를 몰라도, 고급 확률 모델을 통해  

  - 다양한 오믹스 데이터를 통합하고  

  - 잡음을 제거하며  

  - 새로운 데이터셋을 기존 아틀라스에 연결하는 작업을 수행할 수 있습니다.[1]

- 개발자는 데이터 입·출력, 학습 루프, GPU 설정, 사용자 인터페이스를 일일이 만들 필요 없이, 모델 설계에 집중할 수 있습니다.[1]

또한,  

- R 사용자도 Seurat·Bioconductor 파이프라인 안에서 scvi-tools 모델을 활용할 수 있어, 언어·환경의 장벽을 낮추었습니다.[1]

- 문서화, 튜토리얼, Google Colab 활용 예제, GitHub 템플릿까지 제공해, 새로운 방법을 만든 뒤 독립 패키지 형태로 배포하기 쉽게 설계했습니다.[1]

***

## 이 연구가 왜 중요한가?

단일세포 기술은 이미 “세포 수준의 의학·생물학”을 여는 핵심 도구가 되었지만, 분석 방법이 너무 빠르게, 너무 다양하게 등장하면서 실제 생물학자·의사들이 따라가기 어려운 상황이었습니다. 이 논문에서 제시한 scvi-tools는 그 간극을 메우기 위한 **인프라**를 제공한다는 점에서 중요합니다.[1]

- 새로운 확률 모델이 나오면, scvi-tools 위에서 구현되는 순간 바로 단일세포 커뮤니티가 손쉽게 쓸 수 있습니다.[1]

- 대형 세포 아틀라스, 병원 코호트 데이터, 신규 실험 데이터를 하나의 공통 프레임워크에서 통합·비교할 수 있어, 질병 메커니즘 규명, 바이오마커 발굴, 신약 타깃 탐색 같은 후속 연구를 더 빠르게 진행할 수 있습니다.[1]

- 장기적으로는 “복잡한 통계·머신러닝 모델은 플랫폼에 숨기고, 연구자는 과학적 질문에 집중한다”는 방향으로 단일세포 데이터 분석 문화를 바꾸는 계기가 될 수 있습니다.[1]

따라서 이 논문은 단일세포 연구의 기술적 격차를 줄이고, 고급 분석을 “일상적인 도구”로 만드는 중요한 전환점으로 볼 수 있습니다.[1]


Kimi

1. 연구 배경  

싱글셀(single-cell) 유전체 분석은 ‘하나의 세포’ 단위로 유전자 발현량을 측정해 세포마다 다른 성질을 파악하는 기술입니다. 그런데 데이터가 너무 크고 잡음이 많아 “이 세포는 어떤 종류인가?”, “배치 간 차이는 어떻게 제거할 것인가?”, “두 그룹의 유전자 발현 차이는 통계적으로 유의한가?” 같은 질문에 답하려면 복잡한 확률모델이 필요합니다. 그러나 기존 확률모델은 ① 구현이 어렵고, ② 생물학자가 쓰기에 인터페이스가 낮은 편이며, ③ GPU·대용량 데이터 처리 등 기술적 세부사항을 직접 해결해야 했습니다.

2. 연구 목적  

“확률모델을 쉽게 쓰고, 쉽게 만들고, 쉽게 배포하자”는 것이 이 논문의 목표입니다. 저자들은 ‘scvi-tools’라는 파이썬 라이브러리를 발표하며,  

- 끝사용자(생물학자)는 몇 줄의 코드로 최신 확률모델을 돌릴 수 있게 하고,  

- 개발자(연구자·엔지니어)는 새로운 모델을 ‘레고 블록 조립’하듯 빠르게 만들 수 있도록 지원합니다.

3. 주요 기능(무엇을 할 수 있나?)  

scvi-tools는 현재 14개의 확률모델을 탑재하고 있으며, 다음 핵심 작업을 한 번에 해결합니다.  

- 다중 배치·실험 조건 데이터 통합(예: scVI, scArches)  

- 세포 타입 자동 annotation(예: scANVI, CellAssign)  

- 공간 전사체 데이터의 세포 비율 추정(예: Stereoscope, DestVI)  

- 이중배열(doublet) 탐지(예: Solo)  

- 다중 omics(CITE-seq: RNA+단백질) 통합(예: totalVI, MultiVI)  

- 필요 없는 변이(배치, 세포 주기, 미토콘드리아 비율 등) 동시 제거  

- ‘참조(reference)’ 모델에 새로운 ‘질의(query)’ 샘플을 재학습 없이 투영

4. 사용법(끝사용자 관점)  

1) Scanpy·Seurat로 전처리한 데이터(AnnData 형식) 불러오기  

2) 모델 선택 → 데이터 등록 → train() → 원하는 결과 뽑기  

예를 들어, 6줄만으로 차원 축소·클러스터링·차이 유전자까지 완료됩니다. R 사용자도 동일한 API로 Seurat에서 바로 호출 가능합니다.

5. 개발자 관점  

scvi-tools는 ‘모듈-모델-트레이닝플랜’ 3단 구조를 제공합니다.  

- 모듈: “어떤 확률분포·신경망을 쓸 것인가?” 수학적 명세  

- 모델: 유저가 부르는 고수준 객체(예: SCVI)  

- 트레이닝플랜: GPU·Early-stopping·Optimizer 등 번거로운 부분 자동화  

새 모델을 만들 때는 모듈 클래스만 작성하면, 데이터 로딩·학습·저장·배포까지 이미 구현된 부품을 그대로 재사용합니다.  

실제로 기존 Stereoscope 코드를 scvi-tools로 재작성하자 소스 라인 수는 1,500→500줄, 복잡도(사이클로매틱 지수)는 3.0→1.5로 절반 이상 줄었습니다.

6. 실제 사례  

- 초파리 날개 scRNA-seq: 세포 주기·성별·복제 간 차이를 동시에 제거하고도 생물학적 신호는 그대로 유지  

- COVID-19 환자 CITE-seq: 기존 면역 아틀라스(참조)에 새 환자 데이터만 추가 학습 없이 투영 → 면역 세포 변화 즉각 확인  

- Google Colab 무료 GPU로 1만~수십만 개 세포 분석 가능

7. 고찰 & 시사점  

- “확률모델=전문가 전용”이라는 고정관념을 깼습니다.  

- 딥러닝 프레임워크(PyTorch, Pyro)와 단일세포 생태계(Scanpy, Seurat, Bioconductor) 사이의 장벽을 허물어 두 진영의 최신 기술을 한 번에 활용할 수 있습니다.  

- 개발자는 논문만 발표하고 끝나는 게 아니라, 곧바로 pip install로 전 세계 연구자가 쓸 수 있는 툴을 내놓을 수 있습니다.  

- 반대로 끝사용자는 최신 논문 기법을 ‘뉴스보다 빠르게’ 내 실험에 적용할 수 있습니다.

8. 왜 이 연구가 중요한가?  

싱글셀 기술은 점점 고해상도·고용량화되고 있지만, 데이터만 크고 해석이 뒤처지면 의미가 없습니다. scvi-tools는  

- 해석 정확도↑ (불확실성을 수학적으로 처리)  

- 분석 시간↓ (GPU·자동 미분·병렬 처리)  

- 재현성↑ (표준 API·오픈소스)  

- 협업 폭↑ (파이썬·R·웹노트북 모두 지원)  

이를 통해 ‘데이터를 얻고→해석까지’ 걸리는 시간과 문턱을 대폭 낮춤으로써, 생물학적 발견의 속도를 높이고 새로운 치료·진단 전략 개발에 기여할 것입니다. 즉, 이 논문은 ‘확률모델의 대중화’라는 작지만 큰 전환점을 제시합니다.









출처: @ye._.vely618


목요일, 8월 13, 2026

pdf parser 체험기

pdf파일을 텍스트로 변환하는 작업을 진행하다가 이런것도 있다는 것을 이제야 알았네요

python만 사용하다보니 pdfplumber를 사용해서 이리저리 헤매고 있었는데 opendataloader-pdf라는 무시무시한 녀석을 만나버렸네요


pdf파일을 다양한 포맷으로 저장해줘서 이리저리 사용해보고 있습니다.


perplexity에게 이거 어떻게 사용하는지 한번 물어보고 파이썬 코드도 작성해달라고 했는데, 역시 기대를 저버리지 않네요 :)

※ 물론 집에서 사용하는 PC 설치된 java 버전이 낮아서 java를 버전 업 해서 설치했다는 것 제외하고는 아무런 문제없이 작동하고 있습니다. 


---

기존의 `pdfplumber`, `PyMuPDF(fitz)`, `pdfminer.six`처럼 텍스트만 추출하는 것이 아니라, **PDF → AI(RAG)가 바로 사용할 수 있는 Markdown / JSON / HTML / Tagged PDF로 변환하는 것을 목표로 만든 프로젝트**입니다. 특히 논문, 보고서, 특허처럼 레이아웃이 복잡한 PDF를 LLM이 이해하기 좋은 형태로 변환하는 데 초점이 맞춰져 있습니다. ([GitHub][1])

---

전체 구조(동작 원리)

OpenDataLoader는 크게 두 가지 모드가 있습니다.

```
                                 PDF
                                  │
        ┌─────────┴─────────┐
        │                                                 │
        │         Local(Java)                     │
        │                                                 │
        └──────┬────────────┘
                          │
                   Layout Analysis
                          │
                   Reading Order(XY-Cut++)
                          │
                   Semantic Detection
                          │
               Heading/Table/Image/List
                          │
                 Markdown / JSON / HTML
```

또는

```

                         PDF
                          │
                Local Java Parser
                          │
              복잡한 페이지인가?
          │                                 │
         NO                                YES
          │                                 │
          │                          AI Backend
          │                                  │
          └──────┬──────┘
                            │
                 최종 결과 생성
```

이것을 **Hybrid Mode**라고 합니다. ([GitHub][2])


기본모드은 Local Mode는 AI를 사용하지 않고 Java엔진이 알아서 처리합니다. 두번째 언급한 Hybrid Mode에서는 java가 처리할 수 있는 페이지는 기본모드처럼 java가 처리하기 어려운 복잡한 페이지는 AI가 처리한다고 하네요 ㅎㅎ (아직 Hybrid는 사용하지 못해봐서... API key를 요청하는지는 모르겠네요. 설치할때 에러났어요 Orz)

---


설치 방법

## 기본 설치

필수 조건

```

Python >=3.10

Java >=11

```

먼저 Java 확인

```bash

java -version

```

설치

```bash

pip install -U opendataloader-pdf

```

CLI 설치도 같이 됩니다. ([OpenDataLoader][3])

---

## Hybrid 설치

```bash

pip install "opendataloader-pdf[hybrid]"

```

AI Backend 포함 설치입니다. ([GitHub][2])


Java는 설치할 때 확인하지 않습니다. java11이 설치되지 않았다면 opendataloader-pdf 라이브러리를 사용해서 pdf 파일을 파싱할때 에러가 납니다. 그 후에 java 11 버전 설치해도 괜찮습니다. 


---


Python 사용법

```python

import opendataloader_pdf


opendataloader_pdf.convert(

    input_path="paper.pdf",

    output_dir="output",

    format="markdown"

)

```

---


다른 PDF라이브러리와의 차이점

| 라이브러리                          | 텍스트 추출 | 레이아웃 유지 | 표 추출 | Bounding Box | OCR       | RAG 적합성 |
| ----------------------------------- | -------------- | ------------------ | --------- | ------------------- | ----------- | ---------------- |
| pdfminer                             | ✔               | ✖                    | ✖        | ✖                     | ✖            | 낮음             |
| PyMuPDF                           | ✔               | 일부                | 일부    | ✔                     | ✖            | 보통             |
| pdfplumber                         | ✔               | 일부                | ✔        | ✔                     | ✖            | 보통             |
| Docling                               | ✔               | ✔                    | ✔        | ✔                     | ✔            | 높음             |
| **OpenDataLoader PDF**  | ✔               | ✔                    | ✔        | ✔                     | ✔§          | 매우 높음     |

§Hybrid

OpenDataLoader의 가장 큰 장점은 **Markdown(LLM 입력용), JSON(정밀 제어용), Bounding Box(출처 추적용), OCR 및 AI 기반 복잡한 표/수식 처리(Hybrid 모드)**를 하나의 도구에서 제공한다는 점입니다. 그래서 특히 **논문, 특허, 매뉴얼, 기술 문서**를 RAG 파이프라인에 넣기 위한 전처리 도구로 설계되어 있습니다. ([GitHub][1])


금요일, 6월 12, 2026

GISAID에서 서열 다운로드 받아보자

지난번에 기존 github에 공개되어 있었던 gisaid 크롤링 스크립트들을 테스트 했었습니다. >여기<

지난번 글에서 밝혔었다싶이 현재 github에 올라와 있었던 코드들은 gisaid에 로그인해서 COVID19 서열을 다운로드 할 수가 없었습니다.


그래서 gisaid에서 다운로드 받을 수 있는 코드를 만들어 봤습니다. 

>여기<

음.. 생각은 한달전부터 했는데, 그간 안하고 있다가 만들기 시작하니 3시간걸렸네요 ㄷㄷ

(당연히 KiMi, chatGPT, gemini으로, 무료 버전으로 작성했습니다.ㅋ)

사용방법은 그렇게 어렵지 않고, 당연히 편리하지도 않습니다.

간단히 core 기능만 구현했고 fasta파일과 metadata를 다운로드가 정상적으로 작동하는 것을 확인했습니다. :)

로그인에 필요한 ID와 PASSWD만 잘 입력해주시면 됩니다. 

사용방법은 파이썬 코드 내 ID와 PASSWD 입력하고 저장 후 파이썬 파일을 실행시켜주시면됩니다. 다만 FASTA 파일과 Metadata 파일은 동시에 다운로드 받을 수 없고 각각 실행시켜서 다운로드 받아야합니다. 

FASTA를 다운로드 받으려면

download_current_page(download_type="fasta")

Metadata를 다운로드 받으려면

download_current_page(download_type="seqtech")

을 실행시켜주시면 됩니다.


그리고 COVID서열 검색 화면에보면 수집날짜나 등록날짜 이외에도 몇가지 필터가 있습니다.

체크박스로 Complete, High Coverage 와 같은 필터 옵션이 있는데 set_search_filters 함수에서 True, False로 설정해주시면됩니다. :)



※아.. "High Coverage"와 "Low coverage excluded"는 체크박스에서 함께 On(True)하시면 스크립트는 작동하겠지만... 실제로 사이트에서 정상적으로 작동될지 모르겠습니다. 실제 사이트에서는 "High Coverage"와 "Low coverage excluded"가 함께 체크 되지 않습니다. 참고하시기 바랍니다.






출처:  @ye._.vely618

수요일, 12월 03, 2025

LLM을 이용한 환율, 지수, 주가 비교 사이트 제작기 (5)

한달여 정도 chatGPT와 gemini에 물어보면서 개발 기획서를 정리한 내용으로 각각의 LLM들이 작성한 코드들을 한번 돌려보는 시간을 가져본 내용을 공유하려고 합니다. :)

지금까지의 요청 내용은 줄글, 풀어쓴 내용들이어서 LLM이 이해하기 쉽게 작성하라고 하니 아래처럼 작성한다고 하길래 가급적 한번 구성을 맞춰보았습니다.


# 금융 데이터 시각화/관리 웹 플랫폼 개발 기획서

## 1\. 개요

  * **목표:** MongoDB에 저장된 한국/미국 주식, 지수, 환율 데이터를 로컬 웹 환경에서 시각화하여 조회하고, 관련 메타데이터(티커명 등)를 관리할 수 있는 대시보드 구축
  * **핵심 가치:** 다양한 금융 데이터의 직관적인 차트 시각화(캔들스틱, 이동평균선) 및 상호 비교 분석 기능 제공

## 2\. 기술 스택 및 환경

  * **Language:** Python 3.12
  * **Web Framework:** Flask 3.0.3
  * **Database:** MongoDB (PyMongo 4.15.3)
  * **Data Processing:** Pandas 2.2.2, NumPy 1.26.4
  * **Frontend (권장):** Jinja2 템플릿 + 차트 라이브러리 (Plotly.js 또는 ApexCharts, Highcharts 등 금융 차트 지원 라이브러리 활용 예정)

## 3\. 데이터 모델링 (Database Schema)

finance.json 참고

## 4\. 기능 상세 명세

### 4.1. 공통 기능 (User Interface)

  * **검색 기능:**
      * 모든 뷰어 상단에 검색바 제공
      * **검색 기준:** Ticker(코드) 또는 Name(종목명)
      * **자동 완성(Autocomplete):** 키워드 입력 시 매칭되는 종목 리스트 드롭다운 제공
      * **신규 생성하는 ticker_metadata의 ticker나 name을 참조 할것

  * **차트 공통 요건 (캔들스틱):**
      * **X축(시간):** 휴장일(데이터가 없는 날)은 차트에서 제외하여 캔들이 연속적으로 보이도록 처리 (Gap 제거).
      * **기간 설정:** 기본 1개월 뷰. 마우스 휠 또는 슬라이더로 기간 축소/확대(Zoom In/Out) 가능.
      * **축소/확대:** 축소 확대 시 기본적으로 보여주는 1개월 외에 이전 정보들을 보여줘야함
      * **뷰 기간:** 차트 상단에 일주일, 1개월, 3개월, 6개월, 금년, 1년, 3년 5년 10년, 최대 등 버튼으로 초기 설정된 기간의 차트를 확인 할 수 있어야함.
      * **차트 타입:** OHLC(시가, 고가, 저가, 종가) 캔들스틱 차트.

### 4.2. 페이지별 상세 요건

#### A. 한국 주식 뷰어 (`korean_stocks`)

  * **검색:** Ticker(숫자 6자리) 및 종목명(예: 삼성전자)
  * **보조 지표 (이동평균선):** 5일, 20일, 60일, 120일 선 표시

#### B. 미국 주식 뷰어 (`us_stocks`)

  * **검색:** Ticker(영문) 및 종목명(예: Microsoft)
  * **보조 지표 (이동평균선):** 5일, 10일, 20일, 50일, 200일 선 표시

#### C. 지수 정보 뷰어 (`indices`)

  * **검색:** Ticker 및 관리자가 지정한 지수명
  * **보조 지표 (옵션 선택 가능):**
      * 옵션 1: 5, 20, 60, 120일 이평선
      * 옵션 2: 5, 10, 20, 50, 200일 이평선

#### D. 환율 정보 뷰어 (`currencies`)

  * **검색:** Ticker 및 관리자가 지정한 환율명
  * **차트:** 기본 캔들스틱 차트 (이동평균선 필수 요건 없음, 필요시 추가)

#### E. 통합 비교 뷰어 (Comparison)

  * **기능:**
      * 한국주식, 미국주식, 지수, 환율 중 2개 이상의 대상을 검색하여 추가/삭제 가능.
      * 서로 다른 스케일(가격 단위) 문제 해결 로직 적용.
  * **비교 로직 (해결 방안):**
    1.  **2개 종목 비교 시:** **Dual Y-Axis (이중 축)** 적용. 왼쪽 축은 A종목 가격, 오른쪽 축은 B종목 가격 표시.
    2.  **3개 이상 또는 스케일 차이가 극심할 때:** **정규화(Normalization)** 차트 옵션 제공.
          * 시작 시점을 0% 또는 100으로 기준 잡고 **등락률(%)** 그래프로 변환하여 비교.


### 4.3. 관리자(Admin) 페이지

  * **데이터 업데이트 관리:**
      * 각 카테고리별(한국주식, 미국주식, 지수, 환율) 데이터 수집/업데이트 실행 버튼 제공 (백엔드 크롤러/API 트리거).
      * 한국주식: update_kr.py
      * 미국주식: update_us.py
      * 지수: update_index.py
      * 환율: update_currency.py
      * 각 업데이트 버튼시 각각의 스크립트가 백그라운드에서 작동되도록 구현
      * 업데이트 시 `finance_db`내 각각의 종목 중 마지막 날짜 이후 정보만 업데이트 하도록 구성
  * **관리 리스트 편집:**
      * 데이터를 수집/관리할 대상 종목 리스트(Ticker 목록) 추가/삭제 기능.
      * 참고할 collection은 `ticker_metadata` 임.
      * 관리 리스트 편집 페이지는 한국주식, 미국주식,지수,환율운 각각 tab이나 별도의 페이지에서 리스트를 확인 할 수 있을 것
      * 한 페이지에 많은 데이터를 보여줄 수 없기에 pagination 기능이 필요
  * **메타데이터 관리 (Ticker Map):**
      * `ticker_metadata` 컬렉션에 대한 CRUD 제공.
      * Ticker에 매핑되는 `name`(사용자 표시 이름) 수정 기능.
      * 동일한 페이지에서 update할 수 있는 기능이 필요 개별 item별로 name과 marker type을 수정해서 적용하거사 해당 페이지에서 수정된 item들을 적용하도록 기능을 구현할 것.

-----

## 5\. UI/UX 제안 사항 (추가 제안)

  * **반응형 레이아웃:** 뷰어 영역을 최대한 확보하기 위해 사이드바 메뉴(Collapsible Sidebar) 형태 권장.
  * **차트 라이브러리:** `Plotly` 또는 `Lightweight Charts (TradingView)` 사용 권장. (휴장일 스킵 기능 및 줌/팬 성능이 우수함).

-----

## 6. 실행
1.  **데이터 업데이트 로직:**
      * 관리자 페이지의 '업데이트 버튼'을 눌렀을 때 실제로 데이터를 가져오는 python script는 02.mongodb_update_fix.py 파일을 참고하면 됩니다. 이 파일을 참고해서 각각의 항목에 맞도록 스크립트를 분리/작성해줘.

2. **바로 사용 가능하도록 코드 작성**
     * 지금 바로 수행가능한 app.py파일과, html, js, css 모든 파일을 flask가 작동가능한 디렉토리 구조에 맞게 작성해줘
     * 가능하면 zip으로 압축해서 한번에 다운로드 받을 수 있게 해줘


결과적으로 gemini 제외하고 zip파일을 다운로드 받을 수 있게 링크는 제공해 주었으나 그 링크를 통해서 zip파일을 다운로드 받을 수 있는 것은 없었습니다. 다만 gemini는 링크 대신에 위의 기능을 구현한 파일을 zip파일로 압축하는 python 스크립트를 제공해주었습니다. 한... 30kb짜리 파이썬 스크립트를 내놓더라구요 ㅎㅎ 

위 내용을 바탕으로 chatGPT, gemini, grok, kimi, perplexity에 코드를 작성해달라고 25년 12월 1일 월요일에 요청하였고, 모두 무료 버전의 LLM으로 한번 물어보고 테스트를 진행하였습니다.

아, pseudo zip파일 링크만 준 녀석들은 다시 코드 내놔해서 한땀 한땀 코드를 복붙 했습니다. ㅎㅎ 


gemini : flask 구동시 필요한 파일이 모두 작성되었던 유일한 모델

chatGTP: 압축파일은 못 만들었지만 GTP도 필요한 파일은 모두 제시해 줬음

grok: flask의 app.파일에는 작성되어져 있었지만 template 폴더 내 일부 html 파일이 없어서 다시 요청했었음. 필요했던 파일이 5개 였다면 2개 정도가 비어 있음

kimi: 압축파일은 못만들었지만 GTP도 필요한 파일은 모두 제시해 줬음

perplexity: grok처럼 flask의 app.py파일에는 작성되어져 있었지만 template 폴대내 대부분의 생성되어 있어야할 html 파일들이 대부분 누락(10개가 필요하다면 8개가 없음). perplexite는 별 기대 안하고 요청해본 모델이어서 별 기대 없었습니다. :)

그리고 각 flask를 한번씩 돌려본 것을 남겨보자면...

요청서가 자세하지 않아서 모델들이 제대로 이해를 못한 결과 제대로된 결과물이 나오지 않은 것으로 각각의 화면을 한땀 한땀 설명하는 프롬프트를 작성해야할듯으로 보이네요

모든 모델에서 이상하게 mongodb에서 주가정보를 load하지 못했다는 공통점이 있어서 요청서에 문제가 있어보이긴 합니다. 그래도 grok와 kimi 모델에서는 메타데이터 관리를 위한 기능은 작동되는 것이 신기하긴 했습니다. :)

결론: 요청서나 설명하는 문장을 좀 더 다듬어 보는 걸로 



출처: @ye._.vely618

월요일, 10월 27, 2025

LLM을 이용한 환율, 지수, 주가 비교 사이트 제작기 (1)

오늘은 머리속으로만 생각해오던 Vibe coding 작업을 한번 해본 것 한번 끄적끄적 적어 올립니다.

이번 작업은 아마 좀 그럴듯해지는 결과물이 나올때 까지 시리즈로 올릴 계획입니다.

첫번째로 올리는게 LLM을 활용하고 AI를 도입한 무슨 무슨 유전체 분석 파이프라인이면 좋았을 수 도 있겠지만 자본주의 시장에서 Cash is King이니 환율, 주식, 지수를 한눈에 볼 수 있도록 하는 그럴듯한 차트를 만들어보는 것을 첫번째 주제로 잡아보았습니다.

당연히 제가 수정할 수 있도록 python, flask를 사용해서 작업해달라고 하고 있습니다.

지금은 chatGPT와 gemini에게 만들어달라고 해보고 있는데 grok와 perplexity를 이용할 예정입니다.

작성된 코드는 업데이트하여 계속 아래 제 github에 commit하도록 하겠습니다. :)

github: dashboard_poc


chatGPT에게 요청

나는 환율가격정보와 여러국가의 증권시장 지수 정보, 한국에 상장되어 있는 상장사들의 주가정보, 미국에 상장되어 있는 상장사들의 주가정보를 일자별로 개시가, 종가, 고가, 저가, 거래량 정보를 가지고 있습니다. 나는 이 정보들을 실시간으로 특정 기간 동안 또는 확인 할 수 있는 전체 기간 동안 비교 하고 싶어. 예를 들어 달라/원 환율정보, 한국의 삼성전자 주가, 미국의 나스닥 지수를 한국의 코스피 지수를 한 화면에 비교하면서 보고 싶어 환율가격정보와 여러국가의 증권시장 지수 정보, 한국에 상장되어 있는 상장사들의 주가정보, 미국에 상장되어 있는 상장사들의 주가정보들은 각각 sqlite3 데이터베이스 파일로 저장되어 있어.
환율가격정보는 finance_currency.db 파일에 currency라는 테이블에
symbol TEXT,
date DATE, open REAL,
high REAL,
low REAL,
close REAL,
volume INTEGER,
dividends REAL,
stock_splits TEXT 구조로 되어 있어. 
여러국가의 증권시장 지수 정보는 finance_index.db 파일에 stocks라는 테이블에, 한국에 상장되어 있는 상장사들의 주가정보는 finance_stock_kr.db파일에 stocks라는 테이블에, 미국에 상장되어 있는 상장사들의 주가정보는 finance_stock.db 파일에 stocks라는 테이블에 stocks라는 테이블에 저장되어 있습니다. 
stocks 테이블은 
symbol TEXT,
date DATE, open REAL,
high REAL,
low REAL,
close REAL,
volume INTEGER,
dividends REAL,
stock_splits TEXT 구조로 되어 있어. 
나는 Python 3.12 기준으로 FLASK를 사용해서 데이터베이스에 있는 환율가격정보와 여러국가의 증권시장 지수 정보, 한국에 상장되어 있는 상장사들의 주가정보, 미국에 상장되어 있는 상장사들의 주가정보들을 실시간으로 확인할 수 있는 웹페이지를 개발해줘.




gemini에게 요청
1. 환율, 인덱스지수, 한국주식종목, 미국주식종목은 각 데이터베이스에서 로딩하여 항목들을 보여주면 좋겠습니다. flask를 시작할 때 환율, 인덱스지수, 한국주식종목, 미국주식종목 의 데이터베이스에서 symbol 항목들을 먼저 불어와서 선택시 지연이 생기지 않으면 합니다.

2. 화면에서 환율, 인덱스지수, 한국주식종목, 미국주식종목 을 선택하는 하는 방법은 드랍다운 메뉴를 통해서 환율, 인덱스지수, 한국주식종목, 미국주식종목 을 선택 할 수 있으면 좋겠습니다. 동일한 화면에서 여러개의 항목을 보여주어야합니다. 추가할 때는 "추가"버튼 또는 "+" 아이콘을 클릭하면 추가 할 수 있으면 좋겠습니다. 그리고 추가한 항목을 삭제할 떄는 "-" 버튼을 클릭하여 항목을 언제나 추가, 삭제할 수 있어 사용자가 편리하게 환율, 인덱스지수, 한국주식종목, 미국주식종목의 항목을 조회할 수 있으면 좋겠습니다.

3. 환율, 인덱스지수, 한국주식종목, 미국주식종목 등 한 chart화면에 다양한 단위의 정보를 부여줘야합니다. Y축의 척도를 환율, 인덱스지수, 한국주식종목, 미국주식종목등 선택한 항목에 따라 동적(dynamic)으로 단위를 자동으로 확인하여 표시해주면 좋겠습니다.

환율은 교환하는 통화의 단위에 따라 표시가 어렵기에 인덱스지수 처럼 단위가 없이 표시해주면 됩니다.

한국주식종목은 원화 기준이기에 달라 기준인 미국주식종목과 단위가 없는 환율, 인덱스지수와 함께 표시할 때 상대적으로 큰 숫자로 표시되어 다른 항목들의 값이 정상적으로 표현되지 않을 수 있습니다.

사용자가 각 항목을 확인 할 때 불편하지 않도록 항목에 따라 Y축의 척도, 단위를 자동으로 구성해주면 좋겠습니다.

4. 환율, 인덱스지수, 한국주식종목, 미국주식종목 등 여러가지 그래프를 하나의 chart화면에서 보여 줄 때 모든 정보들이 보이지 않고 마지막으로 추가한 항목의 그래프만 보이는 오류가 발생할 수 있습니다. 이런 오류가 발생하지 않도록 코드를 오류 없이 작성해주세요.

5. 업로드한 파일은 초기에 작성한 python FLASK로 작성한 파일입니다. 참고하여 위의 요청사항들을 반영하여 사용자가 사용하기 편리하고 오류없는 python기반의 FLASK 사이트를 작성해줘.


첫번째는 chatGPT에게 대략적인 내용을 설명하고 코드를 작성해달라고 하였고, 이후 gemini에게 chatGPT가 작성한 코드를 바탕으로 추가 요청사항을 알려주었습니다.


그래서 아래와 같이 결과물이 나왔는데... 

물론 아직 멀었습니다. 일단 이쁘지가 않습니다. 그리고 Y축의 척도가 선택한 항목에 따라 동적으로 scale이 조정되면 좋을 것 같은데... 그렇지 않다보니 숫자가 작은 항목을 선택하면... 바닥에 기어가는 그래프들만 볼때가 있네요..


그래도 머리에 있는 내용을 타이핑해서 상대방에게 알려주는 것이 얼마나 어려운것인지 다시한번 느끼고 있으며 그럼에도 불구하고 이 내용을 A부터 Z까지 python이라지만 내가 코드를 작성할 수 있었을까? 라는 생각을 가지고 감탄하고 있습니다. :)


아이디어와 설명, 표현을 LLM에게 잘 한다면 사실 못할게 없을것 같네요. :)

그리고 위에서 얘기한것과 같이 다른 LLM들도 사용할 예정인데 품질 향상을 위해서가 아니라 무료 버전을 사용하고 있어서 하나의 모델에게 많은 일을 시키지 못해서 그렇습니다. :) 

음... 좀 번거롭긴 하지만 생각보다 약간씩 모델에 차이가 있다보니 여러 LLM을 돌려사용하면 품질이 조금 더 향상되지 않을까 합니다. ㅎㅎ
더 업데이트해서 지금보다 나은 결과물을 가지고 두번째 글을 쓰도록 하겠습니다. :)




출처: @ye._.vely618

수요일, 9월 20, 2023

cnvkit 설치 방법

간만에 프로그램 설치 기록 하나 남겨 봅니다.

설치할 tool은 Copy Number Variant 탐지에 대명사 중 하나인 CNVKit입니다.

참조할 사이트는 당연히 공식 cnvkit github고요 


첫번째 방법은 conda를 이용한 방법!

$ conda config --add channels defaults 
(conda를 설치해서 사용하시는 분들은 굳이 defaults는 안하셔도 됩니다.)

$ conda config --add channels conda-forge
$ conda config --add channels bioconda
$ conda install psutil
$ conda create -n cnvkit cnvkit
라고 명령어를 입력하면 엄청 많은 패키지들을 설치하겠다고 나옵니다.

$ source activate cnvkit

(cnvkit)$ python cnvkit.py -h
numpy가 없다고 나와서 다음과 같이 가상 환경 안에서 numpy 설치
(cnvkit)$ conda install numpy

그러나 conda를 이용한 방법은 제대로 작동을 안해서...

$ source deactivate


이유는 꼭 알아야 할까요? 다른 방법으로 설치하면되지요!

그래서 걍 github에서 소스 파일 다운 받아서 pip를 사용하여 설치!!

$ git clone https://github.com/etal/cnvkit
$ cd cnvkit/
$ pip install -e .
$ ~/Python-2.7.12/bin/python cnvkit.py -h

기본 pip를 사용했기 때문에 python-2.7.12에 설치가 되었고, 만약 pip3를 사용하여 설치하였다면... python3을 이용하면 되었을 것으로 예상됩니다.

그래서 오늘은 conda와 pip를 이용한 설치 방법에 대해서 알아보았습니다.

다음에 또 유익한 정보를 가지고 찾아오도록 하겠습니다.



출처: @candyz_hyojung



목요일, 8월 10, 2023

NCBI기반의 분류데이터를 손쉽게 다루는 방법

NCBI의 taxonomy 데이터는 드려다 보신 분들은 아시겠지만 환장의 도가니라고 할 수 있죠

그래서 보다 못한 호주의 어느 용자께서 NCBI의 taxonomy 데이터를 처리할 수 있는 스크립트를 개발하셔서 github에 올려주셨습니다. 물론 논문도 투고하셨고요


이름하여 ncbi-taxonomist, NCBI 분류학자라니.. Orz

Collecting and managing taxonomic data with NCBI-taxonomist

doi: https://doi.org/10.1093%2Fbioinformatics%2Fbtaa1027


여튼 재미있는 기능 중 하나가 NCBI의 nucleotide이든 protein이든 accession을 입력하면 이 accession의 taxonomy 정보를 알려준다는 것입니다.

물론 NCBI 분류학자답게 NCBI의 taxonomy ID과 종 이름(약간의 오타가 있어도, 그 오타가 NCBI에 등록되어 있다면)로도 검색할 수 있습죠.

accession 정보를 이용하여 taxonomy 정보를 파악하는게 생각보다 번거로운 작업인데 ncbi-taxonomist에서 명령어 한번 때려주면 호로록 검색해서 결과를 알려줍니다.

여튼 오늘은 간단한 기능을 보여주는 tool을 소개하였는데
밤새 태풍에 무탈하시기 바랍니다. :)



출처: @ye._.vely618


월요일, 3월 20, 2023

AAPL 1년치 주식 자료를 쉽게 다운로드 받을 수 없을까?

왜 없겠습니까?

그래서 chatGPT와 Bing에게 물어보았습니다.


chatGTP

----

Q: https://finance.yahoo.com/ 에서 API를 이용해서 AAPL 주식 1년 자료 다운로드 받는 코드 짜줘.

A: 안녕하세요! Yahoo Finance API는 2017년 이후에 deprecated되어 더 이상 지원되지 않기 때문에, 이를 이용한 데이터 수집이 불가능합니다. 대신 Yahoo Finance에서는 다양한 주식 데이터를 제공하고 있으므로 다른 방법으로 데이터를 수집해야 합니다.

먼저, Python에서는 yfinance 라이브러리를 이용해서 Yahoo Finance에서 주식 데이터를 다운로드할 수 있습니다. yfinance를 사용하면 간편하게 주식 데이터를 다운로드할 수 있습니다. 아래는 yfinance 라이브러리를 이용해 AAPL의 1년치 주식 데이터를 다운로드하는 코드입니다.

import yfinance as yf

import datetime


start_date = datetime.datetime.now() - datetime.timedelta(days=365)

end_date = datetime.datetime.now()


# AAPL의 주식 데이터를 다운로드합니다.

aapl = yf.download("AAPL", start=start_date, end=end_date)


# CSV 파일로 저장합니다.

aapl.to_csv("AAPL.csv")


이 코드는 현재 날짜를 기준으로 1년 전부터 현재까지의 AAPL 주식 데이터를 다운로드하고, CSV 파일로 저장합니다. 위 코드에서 start_date와 end_date 변수를 변경함으로써 원하는 기간의 데이터를 다운로드할 수 있습니다.

----


BING

----

# yfinance 라이브러리 설치

pip install yfinance

# yfinance 라이브러리 임포트

import yfinance as yf

# AAPL 티커 객체 생성

aapl = yf.Ticker("AAPL")

# 1년 동안의 주가 데이터 가져오기

hist = aapl.history(period="1y")

# 데이터를 csv 파일로 저장하기

hist.to_csv("aapl_1y.csv")

----


chatGTP와 bing에게 코드를 작성해 달라고 하였을 때 현재 단순한 코드에서는 chatGPT의 손을 들어주고 싶습니다.

그 이유는 date와 period의 차이라고 해두죠. 나중에 특정 년 월 일을 사용할 것을 생각한다면 bing보다는 chatGPT가 (아직은) 한 수 위 인듯 합니다. :)




출처: @ye._.vely618


수요일, 12월 18, 2019

genpept 파일을 parsing하고 싶을때


genpept는 무슨 파일인고?

자세한 설명은 >여기<

간단히 얘기하자면 예전에 사용하셨던 genbank 파일 포맷입니다.
이름만 바꾼건지 모 그렇습니다. ㅎㅎ
biopython에서도 genpept가 아니라 genbank를 사용해서 접근하면 잘 parsing됩니다.


import os,sys
from Bio import SeqIO
try:
    inFile = sys.argv[1]
except:
    print ''
    exit(1) 
for seq_record in SeqIO.parse(inFile, "genbank"):
    print (seq_record.id)
    print (seq_record.name)
    seq_anno = seq_record.annotations
    print (seq_anno['accessions'])
    print (seq_record.seq)


이렇게 코드 짜서 사용하시면 됩니다. annotations안의 정보는 dict형식이라서 dict사용하는방식으로 확인 할 수 있습니다.

간만에 gp파일 다운받아서 정리하는 김에 biopython의 genbank 사용법 정리해보았습니다.  :)

크.. WSL이 있으니 참 편하긴 합니다.



출처: @sana_twice.09


수요일, 7월 18, 2018

Biopython Entrez 사용하기

최근에 rosalind를 다시 해보면서
가능하면 파이썬 기본 라이브러리로 해결해보려고 했는데
Bioinformatics Armory 부분의 일부 문제는 Biopython을 사용하지않으면
꽤나 곤란한 상황이 발생할것 같아서
일부 문제에서는 걍 추천하는대로 biopython을 사용하는걸로..

그리고 Biopython과 함께 E-utilities를 사용해야 하는데
역시 간만에 보니 생각이 안나는게 인지상정

관련 NCBI 페이지


E-utility에서 사용하는 DB 이름..
Entrez DatabaseUID common nameE-utility Database Name
BioProjectBioProject IDbioproject
BioSampleBioSample IDbiosample
BiosystemsBSIDbiosystems
BooksBook IDbooks
Conserved DomainsPSSM-IDcdd
dbGaPdbGaP IDgap
dbVardbVar IDdbvar
EpigenomicsEpigenomics IDepigenomics
ESTGI numbernucest
GeneGene IDgene
GenomeGenome IDgenome
GEO DatasetsGDS IDgds
GEO ProfilesGEO IDgeoprofiles
GSSGI numbernucgss
HomoloGeneHomoloGene IDhomologene
MeSHMeSH IDmesh
NCBI C++ ToolkitToolkit IDtoolkit
NCBI Web SiteWeb Site IDncbisearch
NLM CatalogNLM Catalog IDnlmcatalog
NucleotideGI numbernuccore
OMIAOMIA IDomia
PopSetPopSet IDpopset
ProbeProbe IDprobe
ProteinGI numberprotein
Protein ClustersProtein Cluster IDproteinclusters
PubChem BioAssayAIDpcassay
PubChem CompoundCIDpccompound
PubChem SubstanceSIDpcsubstance
PubMedPMIDpubmed
PubMed CentralPMCIDpmc
SNPrs numbersnp
SRASRA IDsra
StructureMMDB-IDstructure
TaxonomyTaxIDtaxonomy
UniGeneUniGene Cluster IDunigene
UniSTSSTS IDunists
모 그렇다고 합니다.

월요일, 8월 07, 2017

sensors 로그 기록용 스크립트

서버 온도가 아무 작업을 안해도
60도를 상회하는 관계로 sensors로 온도 변화를 기록하고자
급하게 작성한 한 스크립트.
물론 쓸모는 없었다는게 함정 ㅋ


import time
from datetime import datetime
from subprocess import check_output

while 1:
        print datetime.today().strftime("%Y/%m/%d/ %H:%M:%S")
        contents = check_output(['sensors'])
        print contents
        time.sleep(60)

DELL 서버들은 iDRAC에서 로그를 뽑아내서
엔지니어한테 전달해줘야봐준다능... Orz

금요일, 9월 14, 2012

파일의 포맷을 변환하는데 필요한 것들

내가 아니란 말이닷!!! ㅋㅋ

python에서 Biopython을 이용하여
간단하게 convert하는 샘플 코드를 제공하고 있으니
여러분들도 쉽게 만들수 있어요~ :)
Biopython에서 제공하는 Tutorial 


오늘 문의가 들어온 파일은 sff파일
Roche의 454 GS FLX? sequencing 결과파일로....
ABI와 함께 illumina한테 밀려서 뒷방으로 들어앉은 파일 포맷입니다.
그러나 아직도 쓰는 이유는 read 길이가 길기때문 :)

그렇습니다. PacBio도 Nanopore다 디립다 길게 sequencing해준다는
애들이 있습니다. 그런데 왜 옛날꺼 쓰냐?? PacBio는 base quality가 안습이고,
Nanopore는.... 언제 출시일지 전 잘 모르겠습니다. 업자가 아닌관계로 ㅎㅎ

그래서 위의 길게 sequencing 해준다는 시퀀서를 제외하고는 Roche의 454가 read 길이가 가장 길다고 할 수 있겠습니다. NGS중에선 말이죠

그런데 sff파일을 보려고 하면 문제가 생깁니다.
권모씨께서 문의를 한것이 그것때문인지는 모르겠지만 걍 일반인이
sff파일을 걍 직접 볼수가 없습니다. 왜냐 binary파일이니깐요(sff파일이 binary라고
알고 있는데  직접 다뤄본적이 없어서... ㅎㅎ )

그래서 사람이 볼수 있게 파일을 변환시켜줘야 한다는 겁니다.

convertSff.py
#!/usr/bin/python

import os, sys
from Bio import SeqIO

try:
inputSFF = sys.argv[1]
outputPREFIX = sys.argv[2]

except:
print "Usage: python convertSFF <input.sff> <output_name>"
print ""
exit(1)


SeqIO.convert(inputSFF,"sff","%s.fasta"%(outputPREFIX), "fasta")
SeqIO.convert(inputSFF,"sff","%s.quality"%(outputPREFIX), "qual")
SeqIO.convert(inputSFF,"sff","%s.fastq"%(outputPREFIX), "fastq")


권모씨의 요청으로 급조한 날림 convert python 코드 ㅋㅋ
이 스크립트를 수행하면 세개의 파일이 나오게 될것으로 예상됩니다. ㅎㅎ
안나오면 어쩔수없고... ㅎㅎ


아.. 그리고 사족으로 LT사의 SOLiD의 경우 우리가 알고 있는 서열과 달리
첫 염기 서열만 서열이고 그 다음부터는 A/G/T/C 알파벳이 아닌 숫자로 되어있는데..
이걸 굳이 변환해서 reference geneome에 mapped 작업하지 말라고 합니다.
Re-sequencing하는 경우라면 변환해서 mapping하지 말고 원래 원본 파일 그대로를
input으로 하는 align 프로그램을 사용해서 mapped한 다음에 그 다음 작업을
일반적으로 사용하는 samtools나 GATK같은 프로그램을 사용하라고 합니다.
(다들 알고있는거 한번더 상기 시켜드렸습니다. 혹시 아나요 SOLiD 포맷을 분석하게 될지.. ㅎㅎ)

분석시 raw 파일을 사용해야 하는 이유는 SOLiD만의 월등한 quality 효과를 볼수 있어서
그러지 않겠나하는....  믿거나 말거나 저 혼자만의 생각입니다.. ㅎㅎ
다만, 타사 제품과 다르게 복잡하게 숫자로 표현한건 아니겠죠...
나름의 숨은 뜻이.... 쿨럭.. (설마... 간지용;;;;; )

Re-sequencing이 아닌 denovo일 경우 모 어쩔수 없이 fastq파일로 변환을 해야 하지 않을까 합니다. assembly 프로그램을 작동시키려면 아무래도 SOLiD format보다는 fastq 포맷이
수월하니깐요.. :)

그럼....





화요일, 5월 01, 2012

Python에서 통계 작업하기

통계작업할 때 지금까지는 대부분 엑셀,
조금 데이터양이 많아지거나 고급 통계기법이 필요하면 R을 사용하였다.

근데 아쉽게도 R에서의 문자열 핸들링관련해서 지식이 민망하여
통계처리 중간에 문자열 조작이 필요한 경우 중간에 값을 텍스트로 빼서
파이썬에서 작업하고 다시 R로 가져가는 상당히 귀찮은 작업을 거쳤다.

그래서..
결국 미루다 미루다..

통계작업 중간에 문자열작업이나 다른 수정이 필요업는 단계까지
파이썬에서 작업을 마치는 방법을 터득하기로 했다.

근데.. 이게 파이썬에서 통계작업을 한번도 안해본지라
몇날 몇일 헤매고 있었는데

Scipy(파이썬 설치할때 기본적으로 설치하는 모듈인데... 쓰지는 않고 있었다)에서
통계 함수들을 제공한다니.. ;;;

Scipy Statistical Function

여하튼...
이것때문에.. 어느정도 고민 해결~ ㅎㅎ

금요일, 3월 23, 2012

Fasta 형식의 파일에서 빈서열 제거


가끔씩 Blast를 수행하고자 formatdb를 수행 할 때,
다음과 같은 에러를 접한 적이 있으리라 본다.


[formatdb] WARNING: Cannot add sequence number XXXXX XX.XXX.XXX.
 because it has zero-length.
[formatdb] FATAL ERROR: Fatal error when adding sequence to BLAST database.


formatdb를 수행하려는 fasta 서열에
빈 서열을 가지고 있기 때문에 나오는 에러로
빈 서열을 제거하면 OK!

vi check.py


import glob,sys
from Bio import SeqIO


file = sys.argv[1]


ow = open(file.split('.')[0]+'.check','w')
seqs = SeqIO.parse(open(file), format='fasta')
 for rec in seqs:
        name = rec.description
        seq = rec.seq.tostring()


        if len(seq.strip()) != 0:
                ow.write('>'+name+'\n')
                ow.write(seq+'\n')


ow.close()



[test]$python check.py test.fasta

수요일, 3월 21, 2012

Win32com Python


파이썬에서 좀더 다양한 윈도우 프로그래밍이 가능하게 하는 모듈?
여하튼.... 좋은거~ ㅋ

Win32com

다양한 윈도우 프로그램과 연동되어
프로그래밍을 더 시키게 만든 녀석.. ㅡ.-a

여하튼.... python 2.3이후부터는 없는줄 알았는데..
역시 sourceForge에는 있었다는...;;;

대용량 파일을 위한 shelve


출처: 파이썬마을


파이썬에 이런 모듈이..
참.. 대단한듯...
-파이썬에 감탄하면 지는거다..
난 자바를 공부하고 있어야돼... ㅠ.ㅠ

쉽게말해 대용량 사전
-사전이라는 자료형 은근히 편했는데..


실제 사용 예로 EMBL CDS fasta파일을 읽어서 E. coli에서 나온 것만 골라서
뽑아주는 소스는 이렇게 만들 수 있습니다.


from Bio import SeqIO
import shelve

seqs = SeqIO.parse(open('/data/embl/cds_nr.fasta'), format='fasta')
db = shelve.open('ecoli.db')


for rec in seqs:
    if ('Escherichia coli' in rec.description and
        'hypothetical' not in rec.description):
            name = rec.description.split()[0].split(':')[1]
            seq = rec.seq.tostring()
            db[name] = seq


나중에 EMBL ID로 검색할 때는 다음과 같이 open만 하면 검색할 수 있습니다.


import shelve

db = shelve.open('ecoli.db')
genes = ['100746833', '1008171518']
for gene in genes:
    print db[gene]


32G가 30여분 소요 됐다니.. 난 4.1G(nr, 한국시간 2009.3.5에 다운로드) 밖에 안돼네.. ㅋㅋ

5분이면 끝나야 하는거 아니야..;;
왜 안끝나..;;

Python 64Bit Library

예전에는 라이브러리를 사용하는데 있어서
요구되는 라이브러리들의 버전만 체크하면 되는데
요즘 64bit OS들이 널리 퍼지면서(본인 또한 64bit OS만 쓴다는.. 쿨럭...)
버전 체크 뿐만 아니라 bit확인도 해주어야 한다.

그런데 python을 사용하다 보면 32bit 버전 라이브러리는 홈페이지에서
다운받기 쉬운데 64bit 버전 라이브러리는 좀처럼 찾기 쉽지 않은 것들이 있다.

google 검색하다보니 다음과 같이 64bit용 python 라이브러리를
모아둔곳이 까먹기 전에 게시~ :)

http://www.lfd.uci.edu/~gohlke/pythonlibs/

Python에서 집합 연산


파이썬에서 집한연산을 하는 경우가 생기게된다.
이럴때 쓰라고 있는 set 
집합형으로 바꾸는 방법은 걍 set()을 묶어주면 Ok.

list > set
리스트의 원소 중 중복되는 원소는 제거하고 집합형으로 변환
string > set
문자열도 한단어씩 split후 중복되는 단어 제거하고 집합형으로 변환


교집합
setA.intersection(setB)

set.intersection(setA,setB,setC)


합집합
setA.union(setB)
set.union(setA,setB,setC)

차집합
setA.difference(setB)
set.difference(setA,setB,setC)
해석: setA.difference(setB.union(setC))

대칭차집합 (두 set에 대해서만 계산 가능)
setA.symmetric_difference(setB)
set.symmetric_difference(setA,setB)
setA = set([1,2,3,4,5,6])
setB = set([1,2,3])

부분집합(subset)
옳은예: setB.issubset(setA) ( = set.issubset(setB,setA)
틀린예: setA.issubset(setB) ( = set.issubset(setA,setB)
앞쪽 집합이 뒤쪽에 나오는 집합의 부분집합이냐고 확인

초집합(superset)
부분집합과 반대로 생각하면됨
옳은예: setA.issubset(setB) ( = set.issubset(setA,setB)
틀린예: setB.issubset(setA) ( = set.issubset(setB,setA)