基因组层次聚类实战小案例

  • 预处理数据集
  • 层次聚类
  • 聚类结果分析

预处理数据集

提供的数据集是字符串形式,且不符合聚类的要求,需要进行转置,因此对数据进行预处理。

1、读入103个基因组的名称

原数据格式如下:

处理代码:

with open(r'C:\\Users\\langgoubao\\Desktop\\genName.csv', 'r') as f0:reader0 = csv.reader(f0)for row in reader0:for i in row:geneName.append(i)

2、读取家族次数到嵌套列表中
这里基因家族次数是隐藏在字符串中,且以‘|’进行分隔,需要进行处理,形式如下:

“3|1|2|2|6|8|5|5|0|2|0|2|8|3|1|4|2|3|2|0|19|0|1|2|14|10|1|0|4|0|0|2|0|0|0|1|1|6|0|1|1|2|0|2|0|2|0|0|1|0|0|1|0|2|6|4|1”

这里直接调用文本的split()方法,将‘|’设置为分隔符就可以,再将分隔好的每一行添加到列表中即可。

with open(r'C:\\Users\\langgoubao\\Desktop\\data1.csv', 'r') as f:reader = csv.reader(f)for row in reader:\nfor i in row:\nx = i.split(\"|\")#转化为int数据类型y=list(map(int,x))l.append(y)\n",
f.close()\n",

3、对处理好的基因数据列表进行转置
这里为了方便转置,先将列表转化为矩阵,然后直接调用矩阵转置的方法进行转置即可。

#存储入矩阵中
x=np.array(l)
#转置
geneData = np.transpose(x)

4、处理后的数据信息如下:
基因信息矩阵大小:103*40772,每一行表示一个基因组,每一列表示该基因家族在基因组中出现的次数。

层次聚类

1、首先引入相关的库

import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import AgglomerativeClustering
from sklearn import datasets
from sklearn import decomposition as skldec #用于主成分分析降维的包

2、聚类
调用自底而上的层次聚类方法 AgglomerativeClustering(),构造层次 聚类器,linkage 是“ward”表示是单连接聚类,即采用两个类群中彼此间距 离最近的两个对象的距离来当作聚类类群的距离,并规定聚类的簇数规定为 3;将处理后的基因组矩阵传入构造器就可以完成聚类,最后获取每个基因组的 聚类标签,就可以得知每个基因组属于哪个簇。

clustering = AgglomerativeClustering(linkage='ward', n_clusters=3)# 构造聚类器
clustering.fit(geneData)# 聚类
label_pred = clustering.labels_  # 获取聚类标签

算法具体描述如下:

3、聚类可视化
为了可以在二维平面上可视化聚类点,首先用 PCA 进行了降维,其中 result 的两个维度就是两个主成分的得分,将维数降为了 2,绘制 103 个基因 组两成分的散点图,不同的散点颜色表示不同的簇,以此实现了在二维平面上 将聚类可视化。

#根据两个最大的主成分进行绘图
df=pd.DataFrame(geneData)
#根据两个最大的主成分进行绘图
pca = skldec.PCA(n_components = 0.95) #选择方差95%的占比
pca.fit(df)   #主城分析时每一行是一个输入数据
result = pca.transform(df)  #计算结果
#绘图
plt.figure()
d0 = result[clustering.labels_ == 0]
plt.plot(d0[:, 0], d0[:, 1], 'r.',label='Cluster1')
d1 = result[clustering.labels_ == 1]
plt.plot(d1[:, 0], d1[:, 1], 'go',label='Cluster2')
d2 = result[clustering.labels_ == 2]
plt.plot(d2[:, 0], d2[:, 1], 'b*',label='Cluster3')
x_label = 'PC1'  #x轴标签字符串
y_label = 'PC2'  #y轴标签字符串
plt.legend()
plt.xlabel(x_label)#绘制x轴标签
plt.ylabel(y_label) #绘制y轴标签
plt.title(\"AGNES Clustering\")
plt.show()

聚类可视化图片如下,横纵坐标为主成分分析法得到的两个主成分因子。

聚类结果分析

经过层次聚类,103个基因组分为了3簇,数量分别是48、14、41,属于同一簇的基因组更为相似,具体输出信息如下:
第 1 簇包含的基因组(48 个基因组): [‘pund’, ‘piss’, ‘sm99’, ‘ptet’, ‘ppry’, ‘pmag’, ‘plip’, ‘pphe’, ‘pulv’, ‘ptun’, ‘pspo’, ‘T6c’, ‘ATCC_14393’, ‘KCTC_12958’, ‘SCSIO_04301’, ‘ATCC_29581’, ‘KCTC_12086’, ‘CP76’, ‘520P1_No_412’, ‘520P1_No_423’, ‘23_GOM_1509m’, ‘6BO_GOM_1096m’, ‘A2’, ‘H105’, ‘ND6B’, ‘OCN003’, ‘P1_16_1b’, ‘P1_26’, ‘P1_8’, ‘P1_9’, ‘PAMC_22718’, ‘PLSV’, ‘SCSIO_11900’, ‘SM9913’,
‘SW0106_04’, ‘UCD_33C’, ‘XI10’, ‘UCD_SED8’, ‘D2’, ‘asag’, ‘amac’, ‘cpsy’, ‘gpsy’, ‘iloi’, ‘smr1’, ‘pao1’, ‘vcho’, ‘ecoli’]

第 2 簇包含的基因组(14 个基因组): [‘paur’, ‘pcit’, ‘plut’, ‘prub’, ‘ppep’, ‘pfla’, ‘ppis’, ‘ATCC_700519’, ‘JG1’, ‘2ta16’, ‘S4054’, ‘ATCC_15057’, ‘NJ631’, ‘R3’]

第 3 簇包含的基因组(41 个基因组): [‘paga’, ‘pesp’, ‘pcar’, ‘pman’, ‘pali’, ‘parc’, ‘ppar’, ‘ptra’, ‘t125’, ‘pnig’, ‘S816’, ‘ATCC_700518’, ‘NCIMB_2033’, ‘AC163’, ‘ANT505’, ‘TAB23’, ‘TAE56’, ‘TAE79’, ‘TAE80’, ‘TB13’, ‘TB25’, ‘TB64’, ‘TAC125’, ‘10_33’, ‘13_15’, ‘Bsw20308’, ‘ECSMB14103’, ‘H100’, ‘H103’, ‘H71’, ‘NW_4327’, ‘P1_11’, ‘P1_13_1a’, ‘P1_25’, ‘P1_30’, ‘P1_7a’, ‘S2292’, ‘S3431’, ‘S8_38’, ‘S8_8’, ‘TB51’]

注:由于数据集是老师提供给练习使用的,数据集就不公开了。

基因组层次聚类实战小案例相关推荐

  1. 前端实战小案例--canvas实战之FlappyBird小游戏

    前端实战小案例--canvas实战之FlappyBird小游戏 想练习更多前端案例,请进个人主页,点击前端实战案例->传送门 觉得不错的记得点个赞?支持一下我0.0!谢谢了! 不积跬步无以至千里 ...

  2. 前端实战小案例--3D动态分层图片

    3D动态分层图片 想练习更多前端案例,请进个人主页,点击前端实战案例->传送门 觉得不错的记得点个赞?支持一下我0.0!谢谢了! 效果图:(图不是重点,重点在代码里面(*^__^*) 嘻嘻) 代 ...

  3. 微信小程序 - 实战小案例 - 简易记事本

    多项技能,好像也不错.学习一下微信小程序. 教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ 简介:一套用来开发在手机微信上运行的app框架,不用安装 组成: ...

  4. R语言实战小案例-画相关矩阵图案例

    前言 本期使用R语言内置数据集进行练习:查看R包含哪些内置数据,请使用"data()"函数: 我们使用这里面的"mtcars"数据,包含"mpg&qu ...

  5. 层次聚类python实现_Python机器学习——Agglomerative层次聚类

    层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法. 其原理是:最初将每个 ...

  6. KMEANS均值聚类和层次聚类:亚洲国家地区生活幸福质量异同可视化分析和选择最佳聚类数...

    阅读全文:http://tecdat.cn/?p=24198 <世界幸福报告>是可持续发展解决方案网络的年度报告,该报告使用盖洛普世界民意调查的调查结果研究了150多个国家/地区的生活质量 ...

  7. 【视频】KMEANS均值聚类和层次聚类:R语言分析生活幸福指数可视化|数据分享...

    原文链接:http://tecdat.cn/?p=24198 聚类是将总体或数据点划分为多个组的任务,以使同一组中的数据点与同一组中的其他数据点更相似,而与其他组中的数据点不相似.它基本上是基于它们之 ...

  8. php写接口curd,8.2 php接口类 实现数据库CURD小案例

    php接口类 实现数据库CURD小案例 因为PHP只支持单继承,也就是说每个类只能继承一个父类.当声明的心累继承抽象类实现模板以后,它就不能再有其他的父类啦~ 为了解决这个问题,php引入了接口(注意 ...

  9. 机器学习实战——层次聚类算法

    机器学习实战--层次聚类算法 1 层次聚类概述 2 sklearn中的实现 1 层次聚类概述 层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构. 数据集的划分可采用"自底向上& ...

最新文章

  1. 解决: is not accessible from java.lang.Class android.app.AppComponentFactory
  2. explode 无分隔符_使用PHP explode()函数时出现“空分隔符”警告
  3. java 图片分段上传_java文件分片上传,断点续传
  4. php跳转隐藏url参数,.htaccess从URL中删除index.php并隐藏参数键
  5. 揭开数字货币交易所“日入千万”的神秘面纱
  6. oracle最大空闲时间,使用Oracle PROFILE控制会话空闲时间
  7. 人月神话读感/摘抄 四
  8. 对最大熵模型为什么要最大化熵的一点理解
  9. 导航属性没有被赋值_excel编程系列基础:操作对象RANDE的属性介绍
  10. 二维数组鞍点问题(C++)
  11. 20191202_Python支持向量机的实现
  12. 蓝桥杯Python题目(二)
  13. C语言实现关机的小代码,不怎么完善,新人勿喷!
  14. 杜甫水平最高的10首五律
  15. 金融大数据信用评分模型解析
  16. 初学者C语言练习题-入门
  17. 加内存条流程(以Dell灵越5580为例)
  18. 【公平锁和非公平锁有什么区别?】
  19. 机器学习实战:第一章
  20. 初学STM32,使用HAL库点灯全过程

热门文章

  1. 转载 gro转lammps
  2. BugKu-图穷匕见
  3. typedef 的用法
  4. 苹果应用分身_你喜欢用苹果手机拍照!不学会这4个功能,怪不得拍不出好照片...
  5. VSS2005+vs2012配置
  6. javascript实现页面刷新
  7. Typora导出word文档自动生成目录
  8. Win11 22H2怎么退回之前版本?Win11回滚Win10系统教程(三种方法)
  9. 什么是PACS系统? 其特点是什么? PACS系统应该具有哪些功能?
  10. dom4j解析dom示例