иерархическая кластеризация с матрицей генной экспрессии в питоне - PullRequest
3 голосов
/ 05 июня 2010

как я могу выполнить иерархическую кластеризацию (в данном случае для данных по экспрессии генов) в Python таким образом, чтобы показать матрицу значений экспрессии генов вместе с дендрограммой? Я имею в виду, как пример здесь:

http://www.mathworks.cn/access/helpdesk/help/toolbox/bioinfo/ug/a1060813239b1.html

показано после маркера 6 (рисунок 1), где дендрограмма нанесена слева от матрицы экспрессии гена, где строки были переупорядочены для отражения кластеризации.

Как я могу сделать это в Python, используя numpy / scipy или другие инструменты? Кроме того, является ли вычислительно практичным делать это с матрицей из примерно 11 000 генов, используя евклидово расстояние в качестве метрики?

РЕДАКТИРОВАТЬ: Многие предлагали кластеризовать пакеты, но я все еще не уверен, как изобразить изображение, с которым я связался выше, в Python. Как я могу наложить дендрограмму рядом с матрицей тепловой карты, например, используя Matplotlib?

спасибо.

Ответы [ 3 ]

4 голосов
/ 07 июня 2010

Многие методы кластеризации, включая scipy.cluster, начинаются с сортировки всех парных расстояний, ~ 60 миллионов в вашем случае, не слишком большое.
Сколько времени займет у вас следующее?

import scipy.cluster.hierarchy as hier
import pylab as pl

def fcluster( pts, ncluster, method="average", criterion="maxclust" ):
    """ -> (pts, Y pdist, Z linkage, T fcluster, clusterlists)   
        ncluster = n1 + n2 + ... (including n1 singletons)
        av cluster size = len(pts) / ncluster
    """
    pts = np.asarray(pts)
    Y = scipy.spatial.distance.pdist( pts )  # ~ N^2 / 2
    Z = hier.linkage( Y, method )  # N-1                         
    T = hier.fcluster( Z, ncluster, criterion=criterion )
        # clusters = clusterlists(T)
    return (pts, Y, Z, T)

hier.dendrogram( Z )

Как переставить матрицу и сюжет красиво спросили здесь Так в марте с частичным ответом.

2 голосов
/ 26 июня 2012

Несколько человек добились определенных успехов в создании прототипа модуля для иерархической кластеризации и визуализации тепловой карты с использованием scipy и matplotlib:

Как получить плоскую кластеризацию, соответствующую цветным кластерам в дендрограмме, созданной scipy

Я адаптировал этот код для создания полноценного модуля иерархической кластеризации, который я могу интегрировать в один из моих пакетов анализа транскриптома. Я очень доволен конечным продуктом, который будет создавать тепловую карту с использованием различных метрик и методов кластеризации и градиентов окраски. Код и пример вывода показаны здесь:

http://altanalyze.blogspot.com/2012/06/hierarchical-clustering-heatmaps-in.html

2 голосов
/ 05 июня 2010

Вы можете сделать это с помощью модуля cluster.hierarchy от scipy. Команды на самом деле даже очень похожи. Однако вам придется использовать correlation вместо corr в качестве параметра для pdist, а не cluster имя кластерного модуля функции scipy: fcluster. Кроме того, для дендрограммы функция scipy имеет значение dendrogram, а в Matlab - clustergram.

Вы определенно можете использовать евклидову метрику (думаю, что это значение по умолчанию для pdist). Я думаю, что было бы целесообразно сделать это с 11 000 генов, потому что это будет 11000 * (11000-1) / 2 = 60494500 (11000 выбирают 2) расстояния для вычисления Это большое число, но я думаю, что это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...