Source code for sequana.viz.isomap

# -*- coding: utf-8 -*-
#
#  This file is part of Sequana software
#
#  Copyright (c) 2016-2020 - Sequana Development Team
#
#  File author(s):
#      Thomas Cokelaer <thomas.cokelaer@pasteur.fr>
#
#  Distributed under the terms of the 3-clause BSD license.
#  The full license is in the LICENSE file, distributed with this software.
#
#  website: https://github.com/sequana/sequana
#  documentation: http://sequana.readthedocs.io
#
##############################################################################

import colorlog

from sequana.lazy import pylab

logger = colorlog.getLogger(__name__)

from sequana.viz import clusterisation

__all__ = ["Isomap"]


[docs] class Isomap(clusterisation.Cluster): """Isomap (non-linear dimensionality reduction) wrapper. .. plot:: :include-source: from sequana.viz.isomap import Isomap from sequana import sequana_data import pandas as pd data = sequana_data("test_pca.csv") df = pd.read_csv(data) df = df.set_index("Id") p = Isomap(df, colors={ "A1": 'r', "A2": 'r', 'A3': 'r', "B1": 'b', "B2": 'b', 'B3': 'b'}) p.plot(n_components=2) """ def __init__(self, data, colors={}): super(Isomap, self).__init__(data, colors)
[docs] def plot( self, n_components=2, n_neighbors=5, transform="log", switch_x=False, switch_y=False, switch_z=False, colors=None, max_features=500, show_plot=True, ): """ :param n_components: at number starting at 2 or a value below 1 e.g. 0.95 means select automatically the number of components to capture 95% of the variance :param transform: can be 'log' or 'anscombe', log is just log10. count with zeros, are set to 1 """ import numpy as np from sklearn.manifold import Isomap pylab.clf() data = self.scale_data(transform_method=transform) # keep only top variable features tokeep = data.std(axis=1).sort_values(ascending=False).index[0:max_features] data = data.loc[tokeep] iso = Isomap(n_neighbors=n_neighbors, n_components=n_components) iso.fit(data.T) Xr = iso.transform(data.T) self.Xr = Xr if switch_x: Xr[:, 0] *= -1 if switch_y: Xr[:, 1] *= -1 if switch_z: Xr[:, 2] *= -1 # PC1 vs PC2 if show_plot: pylab.figure(1) self._plot(Xr, pca=None, pc1=0, pc2=1, colors=colors) if n_components >= 3: if show_plot: pylab.figure(2) self._plot(Xr, pca=None, pc1=0, pc2=2, colors=colors) pylab.figure(3) self._plot(Xr, pca=None, pc1=1, pc2=2, colors=colors) return iso