2017-10-21 109 views
2

我想要繪製一些數據(國家集團通過它們的距離),用簡單的文本聚類分析,將在我的終端這樣的顯示:如何在終端中顯示簡單的文本樹狀圖?

   ---- Monaco 
     ----| 
       ---- Croatia 
      ----| 
       ---- Montenegro 
    ----| 
      ---- Serbia 
     ----| 
      ---- Slovenia 
----| 
      ---- Austria 
     ----| 
       ---- Switzerland 
      ----| 
       ---- Germany 
    ----| 
        ---- Belgium 
       ----| 
         ---- Netherlands 
        ----| 
         ---- France 
      ----| 
        ---- Sweden 
       ----| 
         ---- Denmark 
        ----| 
         ---- Norway 

我存儲在對集羣中的一個矩陣數據它們的距離,稱爲draw_clusters,它看起來是這樣的:

['Monaco', [[[[['Croatia ', 'Montenegro ', 1.9148542155126762], ['Serbia ', 'Slovenia ', 2.469532658074352], 2.6659130840453282], ['Austria ', ['Switzerland ', 'Germany', 1.8487591643481294], 2.843561940573178], 3.3080033351363003],['...', '...']...[...]] 

到目前爲止,我寫了這個代碼,但我不知道如何遞歸調用函數,以便它繪製文本聚類到終端:

def draw_dendrogram(draw_clusters): 
    for cluster in range(len(draw_clusters)): 
     dendrogram(draw_clusters[cluster], 0, 0, 0) 

def dendrogram(cluster, x, y, distance): 
    node = "|" 
    vertical_line = "---" 

    print(cluster) 

任何人都可以幫助我的任何提示,因爲我是新來的Python,我不確定遞歸應該如何工作?

+0

這是一個總是二叉樹?是每個列表中以某種方式使用的第三個數字值?你能給出一個較短但未被截斷的矩陣例子嗎? –

回答

1

我對你矩陣的結構有點困惑。所以我需要做一些假設,比如每個列表代表一個二進制節點,前兩個值可能會導致更新的節點,並且第三個數值不會在您的樹狀圖中使用。

如果下面的是一個有效的矩陣:

mat = [ 
     [ ['Croatia ', 'Montenegro ', 1.9148542155126762], 
      ['Serbia ', 'Slovenia ', 2.469532658074352], 
      2.6659130840453282], 
     ['Austria ', 
      ['Switzerland ', 'Germany', 1.8487591643481294], 
      2.843561940573178], 
     4.5656] 

您可以輕鬆地打印出來的樹狀圖有:

def print_node(data,spaces = ""): 
    if type(data)==type([]): 
     print_node(data[0],spaces+" "*5) #here is first recursive call 
     print(spaces,"----|") 
     print_node(data[1],spaces+" "*5) #second recursive call 
    else: 
     print(spaces,"----",data) 

將產生這樣的輸出:

   ---- Croatia 
      ----| 
       ---- Montenegro 
     ----| 
       ---- Serbia 
      ----| 
       ---- Slovenia 
----| 
      ---- Austria 
     ----| 
       ---- Switzerland 
      ----| 
       ---- Germany 
相關問題