脚本更新---Cellular Neighbourhoods
2025-04-29 本文已影响0人
单细胞空间交响乐
作者,Evil Genius
马上5月了,离准备培训的日子越来越近了,在这之前需要把所有的内容脚本都优化、准备好,不然到时候闹笑话可就对不起学员了。
今天我们更新脚本针对的不是内容,而是针对python。
我们都知道python是一种面向对象的语言。
在Python中,面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它使用“对象”来设计软件。在OOP中,软件被组织成一系列的交互对象。每个对象都可以拥有数据(属性)和方法(函数)。
面向对象编程的三个基本概念:
- 类(Class):定义了对象的蓝图或模板。它是一种数据类型,可以包含数据(属性)和方法(函数)。
- 实例(Instance):类的具体化,或者说是一个具体的对象。它是类的一个实例。
- 方法(Method):定义在类中的函数,用于执行对象的操作。
定义一个类
在Python中,你可以使用class关键字来定义一个类。以下是一个简单的类定义示例:
class Person:
def __init__(self, name, age):
self.name = name # 实例变量
self.age = age # 实例变量
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
创建类的实例
创建类的实例非常简单,只需要使用类名并传入必要的参数(如果有init方法定义了初始化参数的话):
person1 = Person("Alice", 30)
访问属性与方法
你可以通过点号(.)操作符来访问对象的属性或方法:
print(person1.name) # 输出: Alice
person1.greet() # 输出: Hello, my name is Alice and I am 30 years old.
继承
面向对象编程还支持继承,允许我们基于一个已存在的类来创建新的类。新类可以继承父类的属性和方法,并可以添加新的属性或覆盖父类的方法。
class Employee(Person): # Employee类继承自Person类
def __init__(self, name, age, employee_id):
super().__init__(name, age) # 调用父类的构造方法
self.employee_id = employee_id # 新增的实例变量
def work(self):
print(f"{self.name} is working.")
多态性
在Python中,由于动态类型语言的特点,多态性通常是通过方法重写实现的。子类可以重写父类的方法以提供不同的实现。
class Manager(Employee):
def work(self):
print(f"{self.name} is managing.")
通过这样的方式,你可以看到面向对象编程的强大和灵活性。你可以根据需要扩展和修改代码,同时保持清晰的模块化和可维护性。
上面的介绍是标准答案,来到我们的生信范畴,也要运用这一类的用法了,之前很少用,以后也要多接触接触了。
借助这种方法,我们升级一下,面向对象 + 脚本封装。
主要实现的内容
Cellular Neighbourhoods Analysis Pipeline
跟之前的用法还是一样的,leiden聚类示例
python Cellular_Neighbourhoods_analysis.py -i input_data.h5ad -o output_dir -s sample_prefix --leiden --resolution 0.5
kmeans聚类示例
python Cellular_Neighbourhoods_analysis.py -i input_data.h5ad -o output_dir -s sample_prefix --kmeans --k 10
其中需要的参数
必需参数:
-i/--input
输入文件路径(支持 .h5ad 或 .csv 格式)
示例:-i data.h5ad
注:文件需包含细胞特征矩阵(如基因表达或蛋白标记数据)。-o/--output
输出目录路径,用于保存分析结果(如聚类文件、可视化图片)。
示例:-o results/
注:如果目录不存在,脚本会自动创建。-s/--sample
样本名称前缀,用于筛选数据中的特定样本。
示例:-s Patient1_ 会保留所有以 Patient1_ 开头的细胞数据。
聚类方法(二选一):--leiden
使用 Leiden 算法(基于图的社区发现算法,适合复杂空间结构)。
需配合参数:--resolution(见下文)。--kmeans
使用 K-means 算法(基于距离的划分聚类,适合球形分布数据)。
需配合参数:--k(必须指定簇数量)。可选参数:
--resolution
Leiden 算法的分辨率参数(默认值:0.4)。
值越大,聚类结果越细(cluster越多);值越小,cluster越少。
示例:--resolution 0.6--k
K-means 的簇数量(仅在 --kmeans 时生效)。
示例:--k 10 表示将细胞分为 10 个cluster。--seed
随机种子(默认值:42),用于保证结果可重复性。
示例:--seed 123注意事项:
如果使用 --kmeans 但未指定 --k,脚本会报错。
使用 --leiden 时,--k 参数会被忽略(无需指定)。
输出结果包括:聚类结果、可视化图表(UMAP、空间分布等)。