In [6]:
import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
from IPython.display import display, HTML
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from operator import attrgetter
from matplotlib.patches import Ellipse
from math import atan2,degrees
import numpy.random as rnd
In [7]:
points = pd.read_csv('Clustering.csv',sep=',')
In [8]:
plt.plot(points.X, points.Y, 'ro')
plt.axis([min(points.X)-1, max(points.X)+1, min(points.Y)-1, max(points.Y)+1])
for i, txt in enumerate(points.index):
plt.annotate(txt+1, (points.X[i],points.Y[i]))
plt.show()
In [9]:
class Dist:
def __init__(self,p1indx,p2indx,dist):
self.p1 = p1indx
self.p2 = p2indx
self.dist=dist
distances={}
distancelst = []
for i in range(len(points.index)):
for j in range(len(points.index)):
if i==j:
continue
if (i,j) not in distances.keys():
dist = np.linalg.norm(np.array([points.X[i],points.Y[i]])-np.array([points.X[j],points.Y[j]]))
distances[(i,j)]=dist
distances[(j,i)]=dist
distancelst.append(Dist(i,j,dist))
In [12]:
distancelst.sort(key=lambda x: x.dist, reverse=False)
In [13]:
for i in distancelst:
print i.dist,i.p1+1,i.p2+1
In [14]:
def EclispeInfo(p1indx,p2indx,increment=0.2,anglecoef=1):
delta_x = points.X[p1indx]-points.X[p2indx]
delta_y = points.Y[p1indx]-points.Y[p2indx]
theta_radians = atan2(delta_y, delta_x)
e = Ellipse(((points.X[p1indx]+points.X[p2indx])/2,(points.Y[p1indx]+points.Y[p2indx])/2),
abs(delta_y)+increment,abs(delta_x)+increment,-2*anglecoef*degrees(theta_radians))
e.set_clip_box(ax.bbox)
e.set_alpha(0.4)
e.set_facecolor(rnd.rand(3))
return e
In [15]:
fig = plt.figure(0)
ax = fig.add_subplot(111, aspect='equal')
ax.plot(points.X, points.Y, 'ro')
ax.axis([min(points.X)-1, max(points.X)+1, min(points.Y)-1, max(points.Y)+1])
for i, txt in enumerate(points.index):
ax.annotate(txt+1, (points.X[i],points.Y[i]))
ax.add_artist(EclispeInfo(17,8))
ax.add_artist(EclispeInfo(5,10))
ax.add_artist(EclispeInfo(2,11))
ax.add_artist(EclispeInfo(6,14))
ax.add_artist(EclispeInfo(17,19,1))
ax.add_artist(EclispeInfo(5,9,1))
ax.add_artist(EclispeInfo(2,12,1))
ax.add_artist(EclispeInfo(6,16,1))
ax.add_artist(EclispeInfo(8,9,3.5,0.5))
ax.add_artist(EclispeInfo(8,9,3.9))
ax.add_artist(EclispeInfo(12,18,0.8,2.6))
#And So On I stopped due unclearity of the plot after a while.
plt.show()
In [40]:
distances[(15,8)]
Out[40]:
In [ ]: