下载原始数据

#rnaseq #linux

下载原始数据#

sra-tools#

sra-tools 包含了 fastq-dump 工具,可以用来从 SRA(Sequence Read Archive)数据库中下载测序数据并将其转换为 FASTQ 格式。使用 fastq-dump 工具,并指定以下参数:

fastq -dump --split 3 SRA2176358
  • -dump: 表示执行下载和转换操作。
  • --split 3: 表示将双端测序数据分割成两个文件,每个文件包含原始测序数据的一半。这个参数的值为 3,表示每个原始测序数据的一半被分割成一个独立的文件。
  • SRA2176358: 是你要下载和转换的 SRA 数据库中的样本标识号。

因此,这个命令的作用是下载 SRA 数据库中的样本 SRA2176358 的测序数据,并将其转换为两个 FASTQ 文件,每个文件包含一半的原始测序数据。

ascp#

下载aspera软件 conda可以下载 也可以去官网下载压缩包手动安装

然后找SRA号去这个网站生成下载脚本(https://sra-explorer.info/) 生成的脚本长这样

ascp  -vQT -l 500m -P33001 -k 1 -i \
~/.aspera/connect/etc/asperaweb_id_dsa.openssh \
era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR122/079/SRR12207279/SRR12207279_1.fastq.gz  ./

######### 主要使用参数
-v 详细模式
-Q 用于自适应流量控制,磁盘限制所需
-T 设置为无需加密传输
-l 最大下载速度,一般设为500m
-P TCP 端口,一般为33001
-k 断点续传,通常设为 1
-i 免密下载的密钥文件

1. 激活你的环境

PY#

1. 激活你的环境#

conda activate ov

2. 安装 ipykernel#

conda install ipykernel

3. 将环境添加到 Jupyter#

python -m ipykernel install –user –name=ov –display-name “Python (ov)” python -m ipykernel install –user –name ov

R#

将一个新的 R 环境添加为 Jupyter (Notebook 或 Lab) 的内核。

假设新 R 环境名称为 your_r_env_name

  1. 激活你的 Conda R 环境:

    打开终端或 Anaconda Prompt,运行:

    Bash

    conda activate your_r_env_name
  2. 在激活的环境中安装 r-irkernel 包:

    这个 R 包是让 Jupyter 能够识别和连接到 R 环境的关键。

    conda install -c conda-forge r-irkernel
    # 或者
    # mamba install -c conda-forge r-irkernel -y

    请确保是在已激活的 your_r_env_name 环境下执行此命令。

R-seurat

R-seurat#

1. Seurat对象的整体结构#

Seurat对象主要包含以下几大组件:

  • Assays:存储表达矩阵和相关的数据(如空间转录组数据,通常为"Spatial")。

  • Meta data:样本、细胞、或者空间spot级别的元数据。

  • Dimensional Reductions:PCA、UMAP、tSNE等降维分析的结果。

  • Images:空间转录组中特有的组件,存储组织图像信息和空间坐标。

2. 典型结构:10x Visium#

SeuratObject
├── assays
│   └── Spatial(默认)
│       ├── counts:原始计数矩阵
│       ├── data:标准化表达矩阵(log normalized)
│       └── scale.data:经过缩放的表达数据(比如scale之后)
├── meta.data
│   └── 空间spot相关信息(细胞类型、样本条件等)
├── reductions
│   ├── pca:主成分分析结果
│   └── umap/tSNE:降维可视化结果
└── images
    └── slice1(空间图像信息)
        ├── coordinates:空间坐标数据(x, y位置)
        ├── image:组织的原始切片图像
        ├── scale factors:图像与空间坐标之间的尺度因子
        └── spot radius:空间spots的半径

3. 访问Seurat对象内容的示例代码#

library(Seurat)

# 假设数据对象名为obj
# 查看Seurat对象结构
str(obj)

# 提取空间坐标
coords <- GetTissueCoordinates(obj)

# 提取表达矩阵
expr_matrix <- GetAssayData(obj, slot = "data", assay = "Spatial")

# 提取空间图片
image <- obj@images$slice1@image

Python环境(scanpy/Squidpy)#

1.AnnData对象的整体结构#

AnnData对象
├── X:主表达矩阵(通常为基因表达)
├── obs:观测单元元数据(细胞或spot的元信息)
├── var:基因层面的信息
├── uns:非结构化数据(通常存储如图像、空间坐标元数据)
├── obsm:观测单元的多维信息(如PCA、空间坐标)
├── layers:可选项,存储多个版本的表达数据(如raw counts、normalized数据)
└── obsp/varp:可选,存储pairwise关系数据(如空间邻域图)

2. 空间转录组的典型结构#

以10x Visium数据为例:

申请euo.rg

官网操作#

www.eu.org

登录注册,没什么难点,找虚拟信息填就好

域名申请的时候先找到需要托管的代理商:腾讯云/cloudflare。 在里面添加解析记录,这样会给两个主机地址,把这个主机地址返回到注册域名的地方,添加到server的前两个Name

然后就是枯燥的等待官方回信…….

R基础函数

R语言中判断向量是否相同的常用函数包括:#

  1. identical() - 严格比较,检查两个对象是否完全相同,包括类型、长度和值

    identical(vec1, vec2)
  2. all.equal() - 近似比较,允许数值有微小的差异,更适合浮点数比较

    all.equal(vec1, vec2)
  3. == 运算符配合 all() - 元素级比较,检查每个对应元素是否相等

    all(vec1 == vec2)
  4. setequal() - 检查两个向量是否包含相同的元素,不考虑顺序

    setequal(vec1, vec2)
  5. %in% 配合 all() - 检查一个向量的所有元素是否都在另一个向量中

    all(vec1 %in% vec2) && all(vec2 %in% vec1)

Match()函数#

original_data$Sample    # 假设是: c("A", "C", "B")
wang_all_subtypes$Sample # 假设是: c("B", "A", "C")

# match() 会返回: c(2, 3, 1)
# 因为:
# - "A" 在 wang_all_subtypes$Sample 中位置是 2
# - "C" 在 wang_all_subtypes$Sample 中位置是 3
# - "B" 在 wang_all_subtypes$Sample 中位置是 1

# 所以 wang_all_subtypes[c(2, 3, 1),] 会重排为:
# 行2 (对应 "A")
# 行3 (对应 "C")
# 行1 (对应 "B")

# 结果是 wang_all_subtypes$Sample 变成了: c("A", "C", "B")
# 这与 original_data$Sample 的顺序一致

Cellchat

得到cellchat对象后的可视化分析#

需要的包#

library(CellChat)
library(zellkonverter)
library(reticulate)
library(SingleCellExperiment)
library(patchwork)
library(presto)
library(Matrix)
library(future)
library(NMF)

读取和合并数据#

Hot_cell = readRDS("/share/home/sunLab/yanghc/project/TNBC_scRNA/GSE246613/cellchat/Hot_2.rds")
nonHot_cell = readRDS("/share/home/sunLab/yanghc/project/TNBC_scRNA/GSE246613/cellchat/nonHot_2.rds")

# 1. 合并两个 CellChat 对象  
object.list <- list(Hot = Hot_cell, nonHot = nonHot_cell)  
cellchat <- mergeCellChat(object.list, add.names = names(object.list))  # 合并后自动在 cellchat@net 等 slot 中保存两个数据集的信息 :contentReference[oaicite:0]{index=0}

分组间的dotplot可视化#

这里注意,netVisual_bubble()函数中有两个参数,第一个是comparison = c(1, 2)它会决定数据集的先后位置,例如在上一步的合并中 list(Hot = Hot_cell, nonHot = nonHot_cell)这样代表,Hot在1这个位置,nonHot在2这个位置。此时使用第二个参数max.dataset = 1,就会显示在Hot组中更强的信号,反之=2的话则显示在nonHot组中更强的信号也就是上调信息。

对于不同的对比画图需求,只需要改动第二个参数max.dataset = 1即可。如果同时改动则等于没有改动。总结如下:

  • 当你写 comparison = c(1, 2) 时,第 1 个子数据集是 Hot,第 2 个是 nonHot;此时 max.dataset = 2 就会高亮 nonHot 组中更强的信号。

  • 如果你改成 comparison = c(2, 1),那在这一对比较里第 1 个就变成 nonHot,第 2 个变成 Hot;这时候再用 max.dataset = 2,就会高亮 Hot 组中更强的信号。

空转数据的读取方式

1. 读取Visium数据#

方法1:直接读取10x Visium格式文件(.h5)#

sample1 = sc.read_visium('./GSM7996201_SXR_1')
sample2 = sc.read_visium('./GSM7996202_SXR_2')
sample3 = sc.read_visium('./GSM7996203_YZL_1')
sample4 = sc.read_visium('./GSM7996204_YZL_2')

samples = [sample1, sample2, sample3, sample4] 
# 添加批次信息 
for i, sample in enumerate(samples): sample.obs['batch'] = f'sample_{i+1}' 
# 合并数据 
combined = samples[0].concatenate(samples[1:]) 
# 批次效应校正 
sc.pp.combat(combined, key='batch')

如果是matrix.mtx、features.tsv、barcodes.tsv和spatial目录#

sc.settings.cachedir = "/home/sunlab/yanghc/workspace/project/TNBC_spatial/test/visium/cache" 
 adata = sc.read_10x_mtx(
        sample_path,  # 包含matrix.mtx.gz等文件的目录
        var_names='gene_symbols',
        cache=True
    )
# 2. 读取空间位置信息
    spatial_path = os.path.join(sample_path, 'spatial')
    positions_path = os.path.join(spatial_path, 'tissue_positions.csv')
    positions = pd.read_csv(positions_path)

# 3. 调整位置数据格式 (检查列名以确保正确)
    # 注意: 根据10x的版本,positions的列名可能有不同
    if 'barcode' not in positions.columns and positions.shape[1] == 6:
        positions.columns = ['barcode', 'in_tissue', 'array_row', 'array_col', 
                            'pxl_row_in_fullres', 'pxl_col_in_fullres']
    
    # 设置barcode为索引
    positions.index = positions['barcode']

# 4. 匹配表达矩阵和空间位置的细胞条形码
    common_barcodes = positions.index.intersection(adata.obs_names)
    if len(common_barcodes) < len(adata.obs_names):
        print(f"  警告: 只有{len(common_barcodes)}/{len(adata.obs_names)}的条形码在空间数据中找到")
    
    adata = adata[common_barcodes]
    positions = positions.loc[common_barcodes]
    
# 5. 将空间坐标添加到adata对象中
    adata.obs['in_tissue'] = positions['in_tissue'].values
    adata.obsm['spatial'] = positions[['pxl_row_in_fullres', 'pxl_col_in_fullres']].values
    
# 6. 读取比例因子
    scalefactors_path = os.path.join(spatial_path, 'scalefactors_json.json')
    with open(scalefactors_path, 'r') as f:
        scalefactors = json.load(f)
    
# 7. 正确设置空间可视化信息
    library_id = sample_id  # 使用样本ID作为库ID
    adata.uns['spatial'] = {}
    adata.uns['spatial'][library_id] = {}
    
# 8. 添加组织图像
    hires_path = os.path.join(spatial_path, 'tissue_hires_image.png')
    lowres_path = os.path.join(spatial_path, 'tissue_lowres_image.png')
    adata.uns['spatial'][library_id]['images'] = {}
    try:
        adata.uns['spatial'][library_id]['images']['hires'] = io.imread(hires_path)
        adata.uns['spatial'][library_id]['images']['lowres'] = io.imread(lowres_path)
    except Exception as e:
        print(f"  警告: 无法读取图像: {e}")
    
# 9. 添加比例因子
    adata.uns['spatial'][library_id]['scalefactors'] = scalefactors
    

各种插件的使用


1. Advanced Tables#

用途:增强 Markdown 表格编辑体验

  • Tab 键在单元格间跳转,自动对齐列宽
  • Enter 创建新行
  • 使用命令面板(Ctrl/Cmd + P)搜索 “Advanced Tables” 可排序、添加/删除行列
  • 输入 |列1|列2| 后按 Tab 自动生成表格结构

2. Auto Note Mover#

用途:根据规则自动移动笔记到指定文件夹

  • 设置 → Auto Note Mover → 添加规则
  • 可按标签、文件名前缀或正则表达式匹配
  • 示例:所有带 #日记 标签的笔记自动移入 Daily/ 文件夹

3. Commander#

用途:自定义界面按钮和命令

  • 可在标题栏、状态栏、侧边栏添加自定义按钮
  • 设置 → Commander → 选择位置 → 添加命令
  • 适合把常用操作做成一键按钮

4. Dataview#

用途:用类 SQL 语法查询和展示笔记数据

基本语法示例:

```dataview
TABLE file.ctime AS 创建时间
FROM "项目"
WHERE status = "进行中"
SORT file.ctime DESC
```

常用查询类型:

Git推送教程

推送本地项目到远程仓库(如 GitHub、GitLab 或 Gitee)通常分为四个主要步骤。

以下是完整的操作指南,包含针对密码验证失败(现在的常见问题)的解决方案。

git status

git remote -v

git add .

git commit -m "卡片样式修改"

git push origin main

第一步:初始化本地仓库#

如果你已经在项目里使用了 Git(即有 .git 文件夹),请跳过此步。 打开终端(Terminal 或 Git Bash),进入你的项目文件夹:

Bash

cd /path/to/your/project  # Windows用户可以直接在文件夹右键选择 "Open Git Bash here"
git init                  # 初始化 git
git add .                 # 添加所有文件到暂存区
git commit -m "Initial commit"  # 提交第一次修改

第二步:关联远程仓库#

你需要先在网页端(如 GitHub)创建一个空仓库(不要勾选“Initialize with README”以免产生冲突)。创建后,复制仓库的 URL(以 .git 结尾)。

回到终端执行:

Bash

# origin 是远程仓库的别名,你可以随便取,但习惯上用 origin
# 将下面的 URL 替换为你自己的仓库地址
git remote add origin https://github.com/YourUsername/YourProject.git

注意: 如果提示 error: remote origin already exists,说明你之前关联过。可以用 git remote remove origin 删除旧的关联,再重新添加。

终端的代理配置

## 临时修改
export HTTP_PROXY="http://127.0.0.1:7897" ### 这里的端口要看使用的VPN到底用的哪个端口
export HTTPS_PROXY="http://127.0.0.1:7897"

需要完全修改的话把上面命令加入 ~/.zshrc~/.bash_profile