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"