In [ ]:
# Importing libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# In Numpy we have a module linalg which can be used to find eigenvalues and vectors
from numpy import linalg
In [1]:
# Connect to google
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive
In [ ]:
# Making the data for graph 1, which has only 6 nodes
data1={'1':[2,-1,-1,0,0,0],'2':[-1,2,-1,0,0,0],'3':[-1,-1,3,-1,0,0],'4':[0,0,-1,3,-1,-1],'5':[0,0,0,-1,2,-1],'6':[0,0,0,-1,-1,2]}
In [ ]:
# Changing the data to a dataframe
df1=pd.DataFrame(data1,index=[1,2,3,4,5,6])
In [ ]:
df1
Out[ ]:
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
1 | 2 | -1 | -1 | 0 | 0 | 0 |
2 | -1 | 2 | -1 | 0 | 0 | 0 |
3 | -1 | -1 | 3 | -1 | 0 | 0 |
4 | 0 | 0 | -1 | 3 | -1 | -1 |
5 | 0 | 0 | 0 | -1 | 2 | -1 |
6 | 0 | 0 | 0 | -1 | -1 | 2 |
In [ ]:
# Printing the eigenvalues
# linalg.eigvals() is used to find the eigenvalues of a matrix
print(linalg.eigvals(df1))
[ 4.56155281e+00 -1.99901553e-16 4.38447187e-01 3.00000000e+00 3.00000000e+00 3.00000000e+00]
In [ ]:
# Printing eigenvalues
# linalg.eig() is used to find the eigenvalues and vectors of a matrix
linalg.eig(df1)
Out[ ]:
EigResult(eigenvalues=array([ 4.56155281e+00, -1.99901553e-16, 4.38447187e-01, 3.00000000e+00, 3.00000000e+00, 3.00000000e+00]), eigenvectors=array([[ 0.18452409, -0.40824829, 0.46470513, 0.3776621 , -0.75589352, 0.04012623], [ 0.18452409, -0.40824829, 0.46470513, -0.73429428, 0.46340301, 0.23834658], [-0.6571923 , -0.40824829, 0.26095647, 0.35663218, 0.29249051, -0.27847281], [ 0.6571923 , -0.40824829, -0.26095647, 0.35663218, 0.29249051, -0.27847281], [-0.18452409, -0.40824829, -0.46470513, -0.18873173, -0.14796098, -0.47220166], [-0.18452409, -0.40824829, -0.46470513, -0.16790045, -0.14452953, 0.75067448]]))
For the Second network¶
In [ ]:
# Making a list for each code, representing to whom it is connected.
l1=[3,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
l2=[-1,3,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
l3=[-1,-1,4,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0]
l4=[-1,-1,-1,4,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
l5=[0,0,0,-1,2,0,-1,0,0,0,0,0,0,0,0,0,0,0,0]
l6=[0,0,0,0,0,3,-1,-1,-1,0,0,0,0,0,0,0,0,0,0]
l7=[0,0,0,0,-1,-1,4,-1,-1,0,0,0,0,0,0,0,0,0,0]
l8=[0,0,0,0,0,-1,-1,4,-1,0,-1,0,0,0,0,0,0,0,0]
l9=[0,0,0,0,0,-1,-1,-1,3,0,0,0,0,0,0,0,0,0,0]
l10=[0,0,-1,0,0,0,0,0,0,2,0,0,-1,0,0,0,0,0,0]
l11=[0,0,0,0,0,0,0,-1,0,0,2,0,0,0,0,0,-1,0,0]
l12=[0,0,0,0,0,0,0,0,0,0,0,3,-1,-1,-1,0,0,0,0]
l13=[0,0,0,0,0,0,0,0,0,-1,0,-1,4,-1,-1,0,0,0,0]
l14=[0,0,0,0,0,0,0,0,0,0,0,-1,-1,3,-1,0,0,0,0]
l15=[0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,4,-1,0,0,0]
l16=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,4,-1,-1,-1]
l17=[0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,-1,4,-1,-1]
l18=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,3,-1]
l19=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,3]
In [ ]:
# Making the data
data2={'1':l1,'2':l2,'3':l3,'4':l4,'5':l5,'6':l6,'7':l7,'8':l8,'9':l9,'10':l10,'11':l11,'12':l12,'13':l13,'14':l14,'15':l15,'16':l16,'17':l17,'18':l18,'19':l19}
In [ ]:
# Changing the data to a dataframe
df2=pd.DataFrame(data2,index=np.arange(1,20))
In [ ]:
df2
Out[ ]:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 3 | -1 | -1 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | -1 | 3 | -1 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | -1 | -1 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | -1 | -1 | -1 | 4 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
5 | 0 | 0 | 0 | -1 | 2 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
6 | 0 | 0 | 0 | 0 | 0 | 3 | -1 | -1 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 0 | 0 | 0 | 0 | -1 | -1 | 4 | -1 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
8 | 0 | 0 | 0 | 0 | 0 | -1 | -1 | 4 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
9 | 0 | 0 | 0 | 0 | 0 | -1 | -1 | -1 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
10 | 0 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 |
11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | -1 | 0 | 0 |
12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | -1 | -1 | -1 | 0 | 0 | 0 | 0 |
13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | 0 | -1 | 4 | -1 | -1 | 0 | 0 | 0 | 0 |
14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | -1 | 3 | -1 | 0 | 0 | 0 | 0 |
15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | -1 | -1 | 4 | -1 | 0 | 0 | 0 |
16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | 4 | -1 | -1 | -1 |
17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | 0 | 0 | 0 | 0 | -1 | 4 | -1 | -1 |
18 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | -1 | 3 | -1 |
19 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 | -1 | -1 | 3 |
In [ ]:
# Printing the eigenvalues
# linalg.eigvals() is used to find the eigenvalues of a matrix
eigen_values=list(linalg.eigvals(df2))
eigen_values.sort() # .sort() is used to sort the eigenvalues, this is a function of the list data structure
print(eigen_values)
[-1.1102230246251565e-16, 0.19442236312567002, 0.22521976704218905, 0.5328898275356261, 1.524818682593799, 1.7790998659011588, 1.921959733764303, 3.999999999999999, 3.9999999999999996, 4.0, 4.000000000000001, 4.0000000000000036, 4.5898400611561705, 4.716703111193849, 4.829006199829191, 5.135568038830307, 5.2671949064644945, 5.506528070492063, 5.77674937207117]
In [ ]:
# Printing the eigenvalues
# linalg.eig() is used to find the eigenvalues and vectors of a matrix
linalg.eig(df2)
Out[ ]:
EigResult(eigenvalues=array([-1.11022302e-16, 1.94422363e-01, 2.25219767e-01, 5.32889828e-01, 1.52481868e+00, 1.77909987e+00, 1.92195973e+00, 5.77674937e+00, 5.50652807e+00, 5.26719491e+00, 5.13556804e+00, 4.58984006e+00, 4.82900620e+00, 4.71670311e+00, 4.00000000e+00, 4.00000000e+00, 4.00000000e+00, 4.00000000e+00, 4.00000000e+00]), eigenvectors=array([[-2.29415734e-01, -2.35981397e-01, 2.95836214e-01, 2.21534761e-01, 4.31262930e-02, 1.58819955e-01, 2.56047842e-01, -1.71706537e-02, -1.99957685e-02, -6.18785115e-02, -1.52572396e-01, -2.78244429e-01, 8.14601886e-02, -2.24905891e-01, -7.07106781e-01, 3.44709713e-02, -4.55127275e-03, -4.27866507e-02, -4.59797662e-02], [-2.29415734e-01, -2.35981397e-01, 2.95836214e-01, 2.21534761e-01, 4.31262930e-02, 1.58819955e-01, 2.56047842e-01, -1.71706537e-02, -1.99957685e-02, -6.18785115e-02, -1.52572396e-01, -2.78244429e-01, 8.14601886e-02, -2.24905891e-01, 7.07106781e-01, -3.44709713e-02, 4.55127275e-03, 4.27866507e-02, 4.59797662e-02], [-2.29415734e-01, -1.83229816e-01, 2.91166131e-01, 1.53073551e-01, 1.65974359e-01, -7.44274222e-02, 4.35777623e-02, 1.04125693e-01, -4.01778925e-01, 4.95633339e-01, 1.33457893e-01, 3.20472682e-01, 1.64481077e-01, 4.52892297e-01, -1.03405604e-15, 2.14660072e-16, -3.10412675e-16, -2.28847919e-16, 2.83576222e-16], [-2.29415734e-01, -2.42852916e-01, 2.33878135e-01, 1.71942350e-01, -1.45481550e-01, 1.09510771e-01, -2.35957205e-02, -3.92764376e-02, 4.71894649e-01, -2.93464182e-01, 3.44943236e-01, 4.00135887e-01, -3.94932456e-01, 1.58110238e-01, 9.37530040e-16, -1.06343862e-16, 4.05967343e-16, 4.87863331e-16, -4.82178108e-16], [-2.29415734e-01, -2.69003018e-01, 2.44252869e-15, -2.37108701e-16, -6.12320159e-01, -5.77933697e-15, -6.04706304e-01, -2.12100819e-16, -2.69152073e-01, -9.57069417e-15, -2.20019615e-01, 3.03913772e-16, -1.11931471e-15, -1.16398614e-01, -4.94258864e-16, 1.24446185e-16, -1.45274708e-16, 3.01998998e-16, -3.39474159e-16], [-2.29415734e-01, -2.35981397e-01, -2.95836214e-01, -2.21534761e-01, 4.31262930e-02, -1.58819955e-01, 2.56047842e-01, 1.71706537e-02, -1.99957685e-02, 6.18785115e-02, -1.52572396e-01, 2.78244429e-01, -8.14601886e-02, -2.24905891e-01, 6.70151102e-16, -2.81973455e-01, -1.97116611e-01, -5.68768516e-01, 5.53686589e-01], [-2.29415734e-01, -2.42852916e-01, -2.33878135e-01, -1.71942350e-01, -1.45481550e-01, -1.09510771e-01, -2.35957205e-02, 3.92764376e-02, 4.71894649e-01, 2.93464182e-01, 3.44943236e-01, -4.00135887e-01, 3.94932456e-01, 1.58110238e-01, -5.56588753e-16, -3.61088347e-16, -3.16110798e-16, -8.09656313e-16, 8.44307693e-16], [-2.29415734e-01, -1.83229816e-01, -2.91166131e-01, -1.53073551e-01, 1.65974359e-01, 7.44274222e-02, 4.35777623e-02, -1.04125693e-01, -4.01778925e-01, -4.95633339e-01, 1.33457893e-01, -3.20472682e-01, -1.64481077e-01, 4.52892297e-01, -9.14823360e-16, 9.39385851e-17, -2.63938518e-16, -7.91314049e-16, 6.73496914e-16], [-2.29415734e-01, -2.35981397e-01, -2.95836214e-01, -2.21534761e-01, 4.31262930e-02, -1.58819955e-01, 2.56047842e-01, 1.71706537e-02, -1.99957685e-02, 6.18785115e-02, -1.52572396e-01, 2.78244429e-01, -8.14601886e-02, -2.24905891e-01, 7.83004215e-16, 2.81973455e-01, 1.97116611e-01, 5.68768516e-01, -5.53686589e-01], [-2.29415734e-01, 1.75204182e-02, 2.73537592e-01, -8.42890072e-02, 4.70045596e-01, -5.92446553e-01, -3.97943619e-01, -1.11387515e-01, 1.73388117e-01, -2.10842838e-01, -1.91348961e-01, -3.26746555e-02, 9.56562458e-02, -3.28877734e-02, -1.23096516e-17, -1.18606173e-16, 1.65427988e-16, -2.95808117e-16, 2.77562118e-16], [-2.29415734e-01, 1.75204182e-02, -2.73537592e-01, 8.42890072e-02, 4.70045596e-01, 5.92446553e-01, -3.97943619e-01, 1.11387515e-01, 1.73388117e-01, 2.10842838e-01, -1.91348961e-01, 3.26746555e-02, -9.56562458e-02, -3.28877734e-02, -3.11895847e-16, 2.33392913e-16, 1.42096690e-17, 2.87136567e-16, -3.40647605e-16], [-2.29415734e-01, 2.66720775e-01, 1.73312457e-01, -3.32240922e-01, -1.09337813e-01, 1.84900588e-01, 8.09508111e-02, 7.56988942e-02, 4.57583690e-02, -1.25641617e-01, -1.12809121e-01, 1.08608750e-01, 2.05130533e-01, 9.78141029e-02, 7.80287009e-18, 1.76747011e-01, 6.91068857e-01, -2.30615576e-01, 3.00076883e-01], [-2.29415734e-01, 2.14864292e-01, 1.94302980e-01, -2.76734810e-01, 5.73825267e-02, -5.64441007e-02, -7.46333883e-02, 3.16557035e-01, -2.06211375e-01, 1.93231308e-01, 4.66529795e-01, -2.35850550e-01, -4.35093189e-01, -3.63545981e-01, -8.11651737e-17, 2.65044748e-16, 1.32621289e-16, 3.18517339e-16, -5.53831404e-16], [-2.29415734e-01, 2.66720775e-01, 1.73312457e-01, -3.32240922e-01, -1.09337813e-01, 1.84900588e-01, 8.09508111e-02, 7.56988942e-02, 4.57583690e-02, -1.25641617e-01, -1.12809121e-01, 1.08608750e-01, 2.05130533e-01, 9.78141029e-02, -7.21515278e-17, 3.36638512e-01, -6.64559049e-01, 9.52146099e-02, -3.97902030e-02], [-2.29415734e-01, 2.66720775e-01, 1.13288543e-01, -2.10699226e-01, -1.09337813e-01, 9.72886655e-02, 8.09508111e-02, -6.02452786e-01, 4.57583690e-02, 2.17264343e-01, -1.12809121e-01, -4.54287419e-02, -1.45222360e-01, 9.78141029e-02, 1.08373888e-16, -5.13385523e-01, -2.65098084e-02, 1.35400966e-01, -2.60286680e-01], [-2.29415734e-01, 2.66720775e-01, -1.13288543e-01, 2.10699226e-01, -1.09337813e-01, -9.72886655e-02, 8.09508111e-02, 6.02452786e-01, 4.57583690e-02, -2.17264343e-01, -1.12809121e-01, 4.54287419e-02, 1.45222360e-01, 9.78141029e-02, -6.03579359e-17, -5.13385523e-01, -2.65098084e-02, 1.35400966e-01, -2.60286680e-01], [-2.29415734e-01, 2.14864292e-01, -1.94302980e-01, 2.76734810e-01, 5.73825267e-02, 5.64441007e-02, -7.46333883e-02, -3.16557035e-01, -2.06211375e-01, -1.93231308e-01, 4.66529795e-01, 2.35850550e-01, 4.35093189e-01, -3.63545981e-01, 7.33516049e-16, -5.09713654e-16, 3.61731067e-16, 2.01414237e-16, -2.52977850e-16], [-2.29415734e-01, 2.66720775e-01, -1.73312457e-01, 3.32240922e-01, -1.09337813e-01, -1.84900588e-01, 8.09508111e-02, -7.56988942e-02, 4.57583690e-02, 1.25641617e-01, -1.12809121e-01, -1.08608750e-01, -2.05130533e-01, 9.78141029e-02, -5.50771358e-17, 3.89223349e-01, 3.85218348e-02, -4.15019095e-01, -1.16465417e-01], [-2.29415734e-01, 2.66720775e-01, -1.73312457e-01, 3.32240922e-01, -1.09337813e-01, -1.84900588e-01, 8.09508111e-02, -7.56988942e-02, 4.57583690e-02, 1.25641617e-01, -1.12809121e-01, -1.08608750e-01, -2.05130533e-01, 9.78141029e-02, 7.86342587e-17, 1.24162175e-01, -1.20120264e-02, 2.79618129e-01, 3.76752097e-01]]))
In [ ]:
e2 = []
for i in linalg.eig(df2)[1]:
e2.append(i[1])
e3 = []
for i in linalg.eig(df2)[1]:
e3.append(i[2])
plt.figure(figsize=(6,5))
sns.scatterplot(x=e2, y=e3)
plt.show()
In [ ]:
e7=[]
for i in linalg.eig(df2)[1]:
e7.append(i[6])
e8=[]
for i in linalg.eig(df2)[1]:
e8.append(i[7])
plt.figure(figsize=(6,5))
sns.scatterplot(x=e7,y=e8)
plt.show()
In [ ]:
# Convert notebook to html
!jupyter nbconvert --to html "/content/drive/MyDrive/MIT - Data Sciences/Colab Notebooks/Week Three - Making Sense of Unstructured Data/Optional Materials/The+Magic+of+Eigenvectors+-+Eigenvectors+and+Visualization+Notebook.ipynb"