У меня есть набор данных, содержащий около 400 образцов и около 20 регионов. В этом наборе данных «1» указывает на разбитую область (разрыв в ДНК в этой области), а «0» - на неповрежденную область. Я хочу кластеризовать эти данные с seaborn.clustermap. Поскольку поврежденные регионы более информативны, чем нетронутые регионы, я изначально выбрал бы расстояние по Джакарду Но у меня есть несколько пустых строк (без разрывов вообще). Это приводит к аварии морского побережья (0/0 -> nan). Чтобы решить эту проблему, я попытался установить свою собственную матрицу связей, но документация довольно скудная, и я не могу понять это. У кого-нибудь есть идеи?
import pandas as pd
import seaborn as sns; sns.set(color_codes=True)
import matplotlib.pyplot as plt
import numpy as np
import scipy.cluster.hierarchy
# my dataset is called 'df'
print(df.shape)
## = (464, 23) ##
Y = scipy.spatial.distance.pdist(df, metric='jaccard')
Y = np.nan_to_num(Y) # distance matrix
linkage = scipy.cluster.hierarchy.linkage(Y, method='average') #
linkage matrix
print(len(Y))
## 107416 . ##
print(len(linkage))
## 463 ##
cmap = sns.cubehelix_palette(as_cmap=True, rot=-.3, light=1)
sns.clustermap(df, cmap=cmap, row_linkage=linkage, col_linkage=linkage)
plt.show()
Это приводит к следующему сообщению об ошибке:
Traceback (most recent call last):
File "/Users/nienke/Documents/stage/scripts/structuralvariants/realcluster.py", line 32, in <module>
sns.clustermap(df, cmap=cmap, row_linkage=linkage, col_linkage=linkage)
File "/Users/nienke/anaconda3/lib/python3.6/site-packages/seaborn/matrix.py", line 1301, in clustermap
**kwargs)
File "/Users/nienke/anaconda3/lib/python3.6/site-packages/seaborn/matrix.py", line 1142, in plot
self.plot_matrix(colorbar_kws, xind, yind, **kws)
File "/Users/nienke/anaconda3/lib/python3.6/site-packages/seaborn/matrix.py", line 1100, in plot_matrix
self.data2d = self.data2d.iloc[yind, xind]
File "/Users/nienke/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 1367, in __getitem__
return self._getitem_tuple(key)
File "/Users/nienke/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 1737, in _getitem_tuple
self._has_valid_tuple(tup)
File "/Users/nienke/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 204, in _has_valid_tuple
if not self._has_valid_type(k, i):
File "/Users/nienke/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 1674, in _has_valid_type
return self._is_valid_list_like(key, axis)
File "/Users/nienke/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 1731, in _is_valid_list_like
raise IndexError("positional indexers are out-of-bounds")
IndexError: positional indexers are out-of-bounds
Большое спасибо