将绘图树状图应用于文本数据
Applying a plotly dendrogram to text data
我正在尝试使用文本数据而不是数字数据创建树状图 here。
这个简单的例子有效:
from plotly import figure_factory as ff
ff.create_dendrogram(
X=np.array([ [1], [2], [3] ]),
)
同样,我尝试使用具有定义距离函数的文本数据:
from difflib import ndiff
ff.create_dendrogram(
X=np.array([ ['foo'], ['bar'], ['baz'] ]),
distfun=lambda x, y: len(list(ndiff(x, y))), # e.g. len(list(ndiff('bar', 'baz'))) --> 4
)
但它引发了以下错误:
TypeError: <lambda>() missing 1 required positional argument: 'y'
我发现了问题。
create_dendrogram
期望距离函数 (distfun
) 具有类似 pdist
.
的签名
所以这修复了它:
from functools import partial
from scipy.spatial.distance import pdist
ff.create_dendrogram(
X=np.array([ ['foo'], ['bar'], ['baz'] ]),
distfun=partial(pdist, metric=lambda x, y: len(list(ndiff(x, y)))),
)
我正在尝试使用文本数据而不是数字数据创建树状图 here。
这个简单的例子有效:
from plotly import figure_factory as ff
ff.create_dendrogram(
X=np.array([ [1], [2], [3] ]),
)
同样,我尝试使用具有定义距离函数的文本数据:
from difflib import ndiff
ff.create_dendrogram(
X=np.array([ ['foo'], ['bar'], ['baz'] ]),
distfun=lambda x, y: len(list(ndiff(x, y))), # e.g. len(list(ndiff('bar', 'baz'))) --> 4
)
但它引发了以下错误:
TypeError: <lambda>() missing 1 required positional argument: 'y'
我发现了问题。
create_dendrogram
期望距离函数 (distfun
) 具有类似 pdist
.
所以这修复了它:
from functools import partial
from scipy.spatial.distance import pdist
ff.create_dendrogram(
X=np.array([ ['foo'], ['bar'], ['baz'] ]),
distfun=partial(pdist, metric=lambda x, y: len(list(ndiff(x, y)))),
)