FScanpy-package/README_zh.md

224 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FScanpy
## 基于机器学习的程序性核糖体移码预测框架
[![English](https://img.shields.io/badge/Language-English-blue.svg)](README.md)
[![Python](https://img.shields.io/badge/Python-3.9%2B-blue.svg)](https://www.python.org/)
[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
FScanpy 是一个专为预测核苷酸序列中[程序性核糖体移码 (PRF)](https://en.wikipedia.org/wiki/Ribosomal_frameshift) 位点而设计的综合性 Python 包。通过将先进的机器学习方法HistGradientBoosting 和 BiLSTM-CNN与已建立的 [FScanR](https://github.com/seanchen607/FScanR.git) 框架相结合FScanpy 提供了稳健且准确的 PRF 位点预测。
![FScanpy 架构](/tutorial/image/structure.jpg)
## 🔧 安装
### 前置条件
- Python ≥ 3.9
- 所有依赖项将自动安装
### 通过 pip 安装(推荐)
```bash
pip install FScanpy
```
### 从源码安装
```bash
git clone https://github.com/your-org/FScanpy-package.git
cd FScanpy-package
pip install -e .
```
## 🚀 快速开始
### 基本用法
```python
from FScanpy import predict_prf
# 简单序列预测
sequence = "ATGCGTACGTTAGC..." # 您的 DNA 序列
results = predict_prf(sequence=sequence)
# 查看前十个预测结果
print(results[['Position', 'Ensemble_Probability', 'Short_Probability', 'Long_Probability']].head(10))
```
### 可视化
```python
from FScanpy import plot_prf_prediction
# 生成预测图表
results, fig = plot_prf_prediction(
sequence=sequence,
short_threshold=0.65, # HistGB 阈值
long_threshold=0.8, # BiLSTM-CNN 阈值
ensemble_weight=0.4, # 40% 短模型60% 长模型
title="PRF 预测结果"
)
```
### 高级用法
```python
from FScanpy import PRFPredictor
import pandas as pd
# 创建预测器实例
predictor = PRFPredictor()
# 对预提取区域进行批量预测
data = pd.DataFrame({
'Long_Sequence': ['ATGCGT...' * 60, 'GCTATAG...' * 57] # 399bp 序列
})
results = predictor.predict_regions(data, ensemble_weight=0.4)
# 使用自定义参数进行序列级预测
results = predictor.predict_sequence(
sequence=sequence,
window_size=1, # 滑动窗口步长
ensemble_weight=0.3, # 模型权重
short_threshold=0.5 # 过滤阈值
)
```
## 🎛️ 集成权重配置
`ensemble_weight` 参数控制 HistGB 和 BiLSTM-CNN 模型的权重比例:
| ensemble_weight | HistGB 模型 | BiLSTM-CNN 模型 | 特性 | 最适用于 |
|----------------|------------|----------------|------|----------|
| **0.2-0.3** | 20-30% | 70-80% | **高特异性**,减少假阳性 | 精确验证、临床应用 |
| **0.4** | 40% | 60% | **最优平衡**,最高 AUC | 标准分析(推荐) |
| **0.6-0.8** | 60-80% | 20-40% | **高敏感性**,捕获更多位点 | 高通量筛选、探索研究 |
### 模型特性说明
- **HistGB 模型**:擅长识别真阴性样本,预测保守,假阳性率低
- **BiLSTM-CNN 模型**:擅长识别真阳性样本,预测敏感,能捕获更多潜在位点
### 权重选择示例
```python
# 高特异性配置(偏向 HistGB
precise_results = predict_prf(sequence, ensemble_weight=0.25)
# 最优平衡配置4:6 比例)
balanced_results = predict_prf(sequence, ensemble_weight=0.4)
# 高敏感性配置(偏向 BiLSTM-CNN
sensitive_results = predict_prf(sequence, ensemble_weight=0.7)
```
## 📊 核心函数
### 主要预测接口
```python
predict_prf(
sequence=None, # 单/多序列或 None
data=None, # 包含 399bp 序列的 DataFrame 或 None
window_size=3, # 滑动窗口步长
short_threshold=0.1, # 短模型过滤阈值
ensemble_weight=0.4, # 短模型权重 (0.0-1.0)
model_dir=None # 自定义模型目录
)
```
### 可视化函数
```python
plot_prf_prediction(
sequence, # 输入 DNA 序列
window_size=3, # 扫描步长
short_threshold=0.65, # 短模型绘图阈值
long_threshold=0.8, # 长模型绘图阈值
ensemble_weight=0.4, # 模型权重
title=None, # 图表标题
save_path=None, # 保存文件路径
figsize=(12,8), # 图形大小
dpi=300 # 保存图表的分辨率
)
```
### PRFPredictor 类方法
```python
predictor = PRFPredictor()
# 序列预测(滑动窗口)
predictor.predict_sequence(sequence, ensemble_weight=0.4)
# 区域预测(批处理)
predictor.predict_regions(dataframe, ensemble_weight=0.4)
# 特征提取
predictor.extract_features(sequences)
# 模型信息
predictor.get_model_info()
```
## 📈 输出字段
### 预测结果
- **`Position`**:在原始序列中的位置
- **`Ensemble_Probability`**:最终集成预测(主要结果)
- **`Short_Probability`**HistGradientBoosting 预测 (0-1)
- **`Long_Probability`**BiLSTM-CNN 预测 (0-1)
- **`Ensemble_Weights`**:使用的模型权重配置
### 序列信息
- **`Short_Sequence`**:短模型使用的 33bp 序列
- **`Long_Sequence`**:长模型使用的 399bp 序列
- **`Codon`**:预测位置的 3bp 密码子
- **`Sequence_ID`**:多序列输入的标识符
## 🔬 与 FScanR 集成
FScanpy 与 FScanR 流程无缝协作,提供全面的 PRF 分析:
```python
from FScanpy import fscanr, extract_prf_regions, predict_prf
# 步骤 1使用 FScanR 进行 BLASTX 分析
blastx_results = fscanr(
blastx_data,
mismatch_cutoff=10,
evalue_cutoff=1e-5,
frameDist_cutoff=10
)
# 步骤 2提取 PRF 候选区域
prf_regions = extract_prf_regions(original_sequence, blastx_results)
# 步骤 3使用 FScanpy 进行预测
final_predictions = predict_prf(data=prf_regions, ensemble_weight=0.4)
```
## 📚 文档
- **[完整教程](tutorial/tutorial_zh.md)**:包含示例的综合使用指南
- **[演示笔记本](FScanpy_Demo.ipynb)**:库中每个函数的实际用法以及分析流程结果演示
- **[预测结果解释](tutorial/predict_sample.ipynb)**FScanpy 绘图结果的详细解释和信号分析
## 📝 引用
如果您在研究中使用 FScanpy请引用
```bibtex
@software{fscanpy2024,
title={FScanpy: A Machine Learning Framework for Programmed Ribosomal Frameshifting Prediction},
author={[作者姓名]},
year={2024},
url={https://github.com/your-org/FScanpy}
}
```
## 🏗️ 依赖项
FScanpy 会自动安装所有必需的依赖项:
- `numpy>=1.24.3`
- `pandas>=2.2.3`
- `tensorflow>=2.10.1`
- `scikit-learn>=1.6.0`
- `matplotlib>=3.9.4`
- `joblib>=1.4.2`
- `biopython>=1.85`
- `wrapt>=1.17.0`
---
**FScanpy** - 通过机器学习推进程序性核糖体移码研究 🧬