我们看一下每个样本有多少行:
发现都是55455行,这样的话就可以按行合并:
最后生成如下矩阵:
这时候发现gene_id是一样的,我们可以提取我们想要的列,比如要第1,2,4,6,8列:
最后就拿到我们想要的合并的表达矩阵。
当然你也可以一步到位:
可能我很快回答不了你的问题。还需要细细回味一下。但是我觉得你的问题是一个比较明显的短文本聚类问题,这个问题应该在国际上都是比较难的吧。
如果还涉及到中文,中文的相关处理又不能照抄英文短文本聚类的方法,相关资料更加少了。
我倒是建议你 多看一些短文本聚类相关的文章。
问题一:技术上python矩阵表示的话:你可以使用python包,如下:
from numpy import matrix
A = matrix( [[1,2,3],[11,12,13],[21,22,23]])
这样你需要额外规定化:行i表示文档编号i的文档,列j表示词j出现次数,A[i][j]表示在文档i中词j的出现频率
或者
如同那篇文章所说的采用dict表示法:A = [{'额外':1},{'每天':1,'回帖':1},......]表示整个文档集合。
问题二:如同这样的问题本质一样,短文本聚类是否还适合传统的分词,去除副词...等处理步骤,
如何选择合适的模型来表示这类问题,我觉得你还是参考一些这方面的文章,最好中文的。
比如现在很火的微博,也会有好多的人尝试对其中成干上万评论进行聚类。很多进行二类或者三类聚类/分类:支持-中立-反对。
论坛的评论应该很早以前就有研究聚类/分类.我觉得去那里参考会更好.如果不是特别面向指定目的的聚类,我觉得采用一些使用宽泛的方法就行了。感觉结果不会很好。
问题三:EM算法感觉像纯数学的东西,学术功底不够深,我也不好发表看法。
感觉这个问题的本质已经超出我的知识范畴。最简单文档聚类无非:分词-文本预处理[同义词之类]-文档与词计频矩阵表示-(TF-IDF预处理)-kmeans跑起来-输出结果.
【问题】
将lst = [ [1, 2, 3], [2, 1, 3], [8, 4, 3] ],变为[1, 2, 3, 2, 1, 3, 8, 4, 3]
【方法】
1. myList = [x for j in lst for x in j]
2.
mylist = []
for i in L:
mylist += i
print(mylist)
3. 使用标准库中的itertools(循环器)
from itertools import chain
mylist = list(chain(*lst))
print(mylist)