Changeset 10216:fddb4bc28f85 in orange


Ignore:
Timestamp:
02/14/12 18:02:15 (2 years ago)
Author:
Yureh Zhbontar <jure.zbontar@…>
Branch:
default
Message:

Fixed doctests in hierarchical.py

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/clustering/hierarchical.py

    r10160 r10216  
    237237on it. 
    238238 
    239 .. literalinclude:: code/hierarchical-example.py 
    240     :lines: 1-16 
    241      
     239    >>> import Orange 
     240    >>> m = [[], 
     241    ...      [ 3], 
     242    ...      [ 2, 4], 
     243    ...      [17, 5, 4], 
     244    ...      [ 2, 8, 3, 8], 
     245    ...      [ 7, 5, 10, 11, 2], 
     246    ...      [ 8, 4, 1, 5, 11, 13], 
     247    ...      [ 4, 7, 12, 8, 10, 1, 5], 
     248    ...      [13, 9, 14, 15, 7, 8, 4, 6], 
     249    ...      [12, 10, 11, 15, 2, 5, 7, 3, 1]] 
     250    >>> matrix = Orange.misc.SymMatrix(m) 
     251    >>> root = Orange.clustering.hierarchical.HierarchicalClustering(matrix, 
     252    ...     linkage=Orange.clustering.hierarchical.AVERAGE) 
     253         
    242254``root`` is the root of the cluster hierarchy. We can print it with a 
    243255simple recursive function. 
    244256 
    245  
    246 .. literalinclude:: code/hierarchical-example.py 
    247     :lines: 18-22 
     257    >>> def print_clustering(cluster): 
     258    ...     if cluster.branches: 
     259    ...         return "(%s %s)" % (print_clustering(cluster.left), print_clustering(cluster.right)) 
     260    ...     else: 
     261    ...         return str(cluster[0]) 
    248262             
    249263The clustering looks like 
    250 :: 
    251  
    252     >>> print print_clustering(root) 
    253     (((0 4) ((5 7) (8 9))) ((1 (2 6)) 3)) 
     264 
     265    >>> print_clustering(root) 
     266    '(((0 4) ((5 7) (8 9))) ((1 (2 6)) 3))' 
    254267     
    255268The elements form two groups, the first with elements 0, 4, 5, 7, 8, 9, 
     
    263276 
    264277The following code prints the left subcluster of root. 
    265 :: 
    266278 
    267279    >>> for el in root.left: 
    268         ... print el, 
    269     0 4 5 7 8 9  
     280    ...    print el, 
     281    0 4 5 7 8 9 
    270282     
    271283Instead of printing out the first (and supposedly the only) element of 
     
    277289Object descriptions can be added with 
    278290 
    279 .. literalinclude:: code/hierarchical-example.py 
    280     :lines: 28-29 
    281      
    282 As before, let us print out the elements of the first left cluster:: 
     291    >>> root.mapping.objects = ["Ann", "Bob", "Curt", "Danny", "Eve",  
     292    ...    "Fred", "Greg", "Hue", "Ivy", "Jon"] 
     293     
     294As before, let us print out the elements of the first left cluster 
    283295 
    284296    >>> for el in root.left: 
    285         ... print el, 
     297    ...    print el, 
    286298    Ann Eve Fred Hue Ivy Jon 
    287299 
    288300Calling ``root.left.swap`` reverses the order of subclusters of 
    289 ``root.left``:: 
     301``root.left`` 
    290302 
    291303    >>> print_clustering(root) 
    292     (((Ann Eve) ((Fred Hue) (Ivy Jon))) ((Bob (Curt Greg)) Danny)) 
     304    '(((Ann Eve) ((Fred Hue) (Ivy Jon))) ((Bob (Curt Greg)) Danny))' 
    293305    >>> root.left.swap() 
    294306    >>> print_clustering(root) 
    295     ((((Fred Hue) (Ivy Jon)) (Ann Eve)) ((Bob (Curt Greg)) Danny)) 
     307    '((((Fred Hue) (Ivy Jon)) (Ann Eve)) ((Bob (Curt Greg)) Danny))' 
    296308     
    297309Let us write function for cluster pruning. 
    298310 
    299 .. literalinclude:: code/hierarchical-example.py 
    300     :lines: 42-48 
     311    >>> def prune(cluster, h): 
     312    ...     if cluster.branches: 
     313    ...         if cluster.height < h: 
     314    ...             cluster.branches = None 
     315    ...         else: 
     316    ...             for branch in cluster.branches: 
     317    ...                 prune(branch, h) 
    301318 
    302319Here we need a function that can plot leafs with multiple elements. 
    303320 
    304 .. literalinclude:: code/hierarchical-example.py 
    305     :lines: 50-54 
     321    >>> def print_clustering2(cluster): 
     322    ...     if cluster.branches: 
     323    ...         return "(%s %s)" % (print_clustering2(cluster.left), print_clustering2(cluster.right)) 
     324    ...     else: 
     325    ...         return str(tuple(cluster)) 
    306326 
    307327Four clusters remain. 
     
    309329    >>> prune(root, 5) 
    310330    >>> print print_clustering2(root) 
    311     (('Bob', 'Curt', 'Greg', 'Danny') ((('Fred', 'Hue') ('Ivy', 'Jon')) ('Ann', 'Eve'))) 
     331    (((('Fred', 'Hue') ('Ivy', 'Jon')) ('Ann', 'Eve')) ('Bob', 'Curt', 'Greg', 'Danny')) 
    312332     
    313333The following function returns a list of lists. 
    314334 
    315 .. literalinclude:: code/hierarchical-example.py 
    316     :lines: 59-69 
     335    >>> def list_of_clusters0(cluster, alist): 
     336    ...     if not cluster.branches: 
     337    ...         alist.append(list(cluster)) 
     338    ...     else: 
     339    ...         for branch in cluster.branches: 
     340    ...             list_of_clusters0(branch, alist) 
     341    ...  
     342    >>> def list_of_clusters(root): 
     343    ...     l = [] 
     344    ...     list_of_clusters0(root, l) 
     345    ...     return l 
    317346         
    318347The function returns a list of lists, in our case 
    319 :: 
    320348 
    321349    >>> list_of_clusters(root) 
    322     [['Bob', 'Curt', 'Greg'], ['Danny'], ['Fred', 'Hue', 'Ivy', 'Jon'], ['Ann', 'Eve']] 
     350    [['Fred', 'Hue'], ['Ivy', 'Jon'], ['Ann', 'Eve'], ['Bob', 'Curt', 'Greg', 'Danny']] 
    323351 
    324352If :obj:`~HierarchicalCluster.mapping.objects` were not defined the list 
    325353would contains indices instead of names. 
    326 :: 
    327354 
    328355    >>> root.mapping.objects = None 
    329356    >>> print list_of_clusters(root) 
    330     [[1, 2, 6], [3], [5, 7, 8, 9], [0, 4]] 
     357    [[5, 7], [8, 9], [0, 4], [1, 2, 6, 3]] 
    331358 
    332359Utility Functions 
Note: See TracChangeset for help on using the changeset viewer.