Conditions | 16 |
Total Lines | 89 |
Lines | 0 |
Ratio | 0 % |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
Complex classes like pyclustering.utils.examples.display_two_dimensional_cluster_distances() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
1 | """! |
||
76 | def display_two_dimensional_cluster_distances(path_sample, amount_clusters): |
||
77 | distances = ['euclidian', 'manhattan', 'avr-inter', 'avr-intra', 'variance']; |
||
78 | |||
79 | ajacency = [ [0] * amount_clusters for i in range(amount_clusters) ]; |
||
80 | |||
81 | sample = utils.read_sample(path_sample); |
||
82 | |||
83 | agglomerative_instance = agglomerative(sample, amount_clusters); |
||
84 | agglomerative_instance.process(); |
||
85 | |||
86 | obtained_clusters = agglomerative_instance.get_clusters(); |
||
87 | stage = utils.draw_clusters(sample, obtained_clusters, display_result = False); |
||
88 | |||
89 | for index_cluster in range(len(ajacency)): |
||
90 | for index_neighbor_cluster in range(index_cluster + 1, len(ajacency)): |
||
91 | if ( (index_cluster == index_neighbor_cluster) or (ajacency[index_cluster][index_neighbor_cluster] is True) ): |
||
92 | continue; |
||
93 | |||
94 | ajacency[index_cluster][index_neighbor_cluster] = True; |
||
95 | ajacency[index_neighbor_cluster][index_cluster] = True; |
||
96 | |||
97 | cluster1 = obtained_clusters[index_cluster]; |
||
98 | cluster2 = obtained_clusters[index_neighbor_cluster]; |
||
99 | |||
100 | center_cluster1 = utils.centroid(sample, cluster1); |
||
101 | center_cluster2 = utils.centroid(sample, cluster2); |
||
102 | |||
103 | x_maximum, x_minimum, y_maximum, y_minimum = None, None, None, None; |
||
104 | x_index_maximum, y_index_maximum = 1, 1; |
||
105 | |||
106 | if (center_cluster2[0] > center_cluster1[0]): |
||
107 | x_maximum = center_cluster2[0]; |
||
108 | x_minimum = center_cluster1[0]; |
||
109 | x_index_maximum = 1; |
||
110 | else: |
||
111 | x_maximum = center_cluster1[0]; |
||
112 | x_minimum = center_cluster2[0]; |
||
113 | x_index_maximum = -1; |
||
114 | |||
115 | if (center_cluster2[1] > center_cluster1[1]): |
||
116 | y_maximum = center_cluster2[1]; |
||
117 | y_minimum = center_cluster1[1]; |
||
118 | y_index_maximum = 1; |
||
119 | else: |
||
120 | y_maximum = center_cluster1[1]; |
||
121 | y_minimum = center_cluster2[1]; |
||
122 | y_index_maximum = -1; |
||
123 | |||
124 | print("Cluster 1:", cluster1, ", center:", center_cluster1); |
||
125 | print("Cluster 2:", cluster2, ", center:", center_cluster2); |
||
126 | |||
127 | stage.annotate(s = '', xy = (center_cluster1[0], center_cluster1[1]), xytext = (center_cluster2[0], center_cluster2[1]), arrowprops = dict(arrowstyle = '<->')); |
||
128 | |||
129 | for index_distance_type in range(len(distances)): |
||
130 | distance = None; |
||
131 | distance_type = distances[index_distance_type]; |
||
132 | |||
133 | if (distance_type == 'euclidian'): |
||
134 | distance = utils.euclidean_distance(center_cluster1, center_cluster2); |
||
135 | |||
136 | elif (distance_type == 'manhattan'): |
||
137 | distance = utils.manhattan_distance(center_cluster1, center_cluster2); |
||
138 | |||
139 | elif (distance_type == 'avr-inter'): |
||
140 | distance = utils.average_inter_cluster_distance(cluster1, cluster2, sample); |
||
141 | |||
142 | elif (distance_type == 'avr-intra'): |
||
143 | distance = utils.average_intra_cluster_distance(cluster1, cluster2, sample); |
||
144 | |||
145 | elif (distance_type == 'variance'): |
||
146 | distance = utils.variance_increase_distance(cluster1, cluster2, sample); |
||
147 | |||
148 | print("\tCluster distance -", distance_type, ":", distance); |
||
149 | |||
150 | x_multiplier = index_distance_type + 3; |
||
151 | if (x_index_maximum < 0): |
||
152 | x_multiplier = len(distances) - index_distance_type + 3; |
||
153 | |||
154 | y_multiplier = index_distance_type + 3; |
||
155 | if (y_index_maximum < 0): |
||
156 | y_multiplier = len(distances) - index_distance_type + 3; |
||
157 | |||
158 | x_text = x_multiplier * (x_maximum - x_minimum) / (len(distances) + 6) + x_minimum; |
||
159 | y_text = y_multiplier * (y_maximum - y_minimum) / (len(distances) + 6) + y_minimum; |
||
160 | |||
161 | #print(x_text, y_text, "\n"); |
||
162 | stage.text(x_text, y_text, distance_type + " {:.3f}".format(distance), fontsize = 9, color='blue'); |
||
163 | |||
164 | plt.show(); |
||
165 | |||
191 |