2017-05-23 10 views
-1

名前の文字列を含む数百のリストがあり、それらを3Dグラフ上にクラスタリングしたい。ここでは、3つのリストの例を示します。ほとんど同じ数の文字列コンテンツを持つリストは、グラフ上の他のものに近くなるはずです。Python:同じ文字列の絶対数に基づくリストの3Dクラスタリング

どうすればいいですか?あなたが必要と

person1 = ['mike', 'alex', 'arker','locke','dave','david','ross','rachel','anna','ann','darl','carl','karle'] 

person2 = ['mika', 'adlex', 'parker','ocke','ave','david','rosse','rachel','anna','ann','darla','carla','karle'] 

person3 = ['mika', 'alex', 'parker','ocke','ave','david','rosse','ross','anna','ann','darla','carla','karle', 'sasha', 'daria'] 
+0

...あなたはクラスタ化することができますが、私はこれが3Dにどのように関連するかが表示されません –

+0

本質的に、すべてのリストを1人と考える。そして、このリスト内の文字列は、彼/彼女の友人として。友人の数が最も多い人は、この3Dグラフ上で同じ友達と他の人/リストに近い点にする必要があります。 –

答えて

0

まず最初に2つのリストの間で等しい文字列の量を表すカウンタである。このコードの

person1 = ['mike', 'alex', 'arker','locke','dave','david','ross','rachel','anna','ann','darl','carl','karle'] 
person2 = ['mika', 'adlex', 'parker','ocke','ave','david','rosse','rachel','anna','ann','darla','carla','karle'] 
person3 = ['mika', 'alex', 'parker','ocke','ave','david','rosse','ross','anna','ann','darla','carla','karle', 'sasha', 'daria'] 
resourceLists = [person1, person2, person3] 
equalsList = [] 
for index, list in enumerate(resourceLists): 
hitList = [0] * len(resourceLists) 
if (index + 1 < len(resourceLists)): 
    nextList = resourceLists[index+1] 
    for iNext, x in enumerate(nextList): 
     if x in list: 
      hitList[index + 1] += 1 
equalsList.append(hitList) 
print equalsList 

出力が得られます:[[0、5、0]、[ 0、0、11]、[0、0、0]]を入力します。今度は、これらのリストをループして、各リスト間で等しい文字列がある場合にその量を見つけることができます。したがって、リスト1と2の間に、person1とperson2の間に5つの等しい文字列を意味する5(最初のリスト、2番目の位置)が最初のリストに表示されます。 equalsListの2番目のリストは、2番目のpersonListと次のリストを比較するので、3番目のリストで11個のヒットが表示されます。このスクリプトは後のリストに等しい文字列の量だけを表示するので、各組み合わせは一度のみチェックされます。person2を通過するとき、最初のリストを再度検索して等しい文字列を検索するのではありません。

+0

ありがとうございますが、コードには多くのインデントが失敗しています。 そしてグラフ上にポイントとして示されたリストを持つ3Dグラフが欲しかった。 グラフの外でソートする方法を知っています –

+1

インデントの失敗はおそらくコピー/ペーストエラーです。これを作業コードからそのままコピーしました。グラフを入れるために、私はhttps://plot.ly/python/3d-network-graph/があなたの求めるもののように見えるが、あなたが念頭に置いたものかどうかは分からないので、おそらくそこを見回して、どれがあなたに一番適しているかを見てください:彼らは私が信じるかなり明確なそれらを実装する方法に関するチュートリアルを持っています。 – RoelofJ

+0

リンクありがとう –

0

集合交点は、階層的クラスタリングの類似度メトリックとして使用できます。例えば、Jaccardおよびダイス係数を参照のこと。

その後またはで「同じ文字列の内容のほとんどの数のリストがグラフ*上の他に近づけるべきである*」

関連する問題