FScanpy-package/README_zh.md

224 lines
6.5 KiB
Markdown
Raw Permalink Normal View History

# 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 位点预测。
2025-10-23 20:35:13 +08:00
![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** - 通过机器学习推进程序性核糖体移码研究 🧬