将绘图树状图应用于文本数据

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)))),
)