scanpy category类型注意

这篇博客介绍了如何利用scanpy库进行单细胞数据分析,包括louvain聚类和kmeans聚类。作者展示了如何读取数据、预处理、PCA降维、邻居图构建以及UMAP可视化。同时,提到了在创建新的观测变量(obs)时应注意的数据类型转换。文章还展示了两种聚类方法得到的不同结果,并提供了创建新的观测值'BATCHNew'的示例代码。
摘要由CSDN通过智能技术生成

louvain聚类

import scanpy as sc 
import matplotlib
import numpy as np
import pandas as pd 
import seaborn as sns
%matplotlib inline
import matplotlib.pyplot as plt
# from scDML import scDMLModel
# from scDML.utils import print_dataset_information
from plotly.offline import init_notebook_mode
init_notebook_mode(connected = True)

# read data
adata=sc.read("./bct_raw.h5ad")
print(adata)
#print(adata.X[0:10,0:10].toarray())
#print_dataset_information(adata)

# View raw data,check the batch effect of this batch effect 
adata_copy=adata.copy()
sc.pp.normalize_total(adata_copy,target_sum=1e4)
sc.pp.log1p(adata_copy)
sc.pp.scale(adata_copy)
sc.tl.pca(adata_copy)
sc.pp.neighbors(adata_copy)
sc.tl.louvain(adata_copy)
sc.tl.umap(adata_copy)
sc.pl.umap(adata_copy,color=["BATCH","celltype"])

结果如下
在这里插入图片描述

kmeans聚类

# adata_copy.obs["louvain"]

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=20, random_state=0).fit(adata_copy.obsm["X_pca"]) 
adata_copy.obs['init_cluster'] = kmeans.labels_.astype(str)

在这里插入图片描述
在这里插入图片描述
可以看到这两种方法的结果其实是有区别的

看下面的例子

在这里插入图片描述
在这里插入图片描述
不仅如此,还有一个问题,就是新创建一个obs,很容易出以下问题
在这里插入图片描述例如一个adata,我现在新创建一个obs,可以直接赋值,但是这个结果里面的类型就不好改变了,正确的做法如下

import scanpy as sc
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 
from QUEST import QUEST
import os
os.system("clear")

adata_full = sc.read("/Users/xiaokangyu/Desktop/dataset/single_cell/FullPancreas/human_pancreas_norm_complexBatch.h5ad") 
adata_full.obs["BATCH"]=adata_full.obs["tech"].copy()   
adata_full.X=adata_full.layers["counts"].copy()
#######################################################################################
#######################################################################################
#################### create new BATCH #################################################
pre_idx=adata_full.obs["BATCH"].isin(["inDrop1","inDrop2","inDrop3","inDrop4"]).values
new_batch_values=np.array(adata_full.obs["BATCH"].values) # shou
new_batch_values[pre_idx]="predict_BATCH"
new_batch_values[~pre_idx]="train_BATCH"
adata_full.obs["BATCHNew"]=new_batch_values
adata_full.obs["BATCHNew"]=adata_full.obs["BATCHNew"].astype("category")
#######################################################################################
#######################################################################################

可以参考这个adata_full.obs["BATCHNew"]是怎么创建的,可能更有更简单的实现方式,后面再更新结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值