import tqdm
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
import warnings
"ignore", np.ComplexWarning)
warnings.simplefilter(from haversine import haversine
from IPython.display import HTML
[GODE]Final Graph code for GODE Paper
GODE
Import
from matplotlib import cm
from pygsp import graphs, filters, plotting, utils
import plotly.graph_objects as go
import rpy2
import rpy2.robjects as ro
from rpy2.robjects.vectors import FloatVector
from rpy2.robjects.packages import importr
import warnings
"ignore") warnings.filterwarnings(
Linear
6)
np.random.seed(= np.around(np.random.normal(size=1000),15)
epsilon = np.random.choice(np.concatenate((np.random.uniform(-7, -5, 25).round(15), np.random.uniform(5, 7, 25).round(15), np.repeat(0, 950))), 1000)
signal = signal + epsilon
eta = signal.copy()
outlier_true_linear= list(map(lambda x: 1 if x!=0 else 0,outlier_true_linear)) outlier_true_linear
= np.linspace(0,2,1000)
x_1 = 5 * x_1
y1_1 = y1_1 + eta # eta = signal + epsilon
y_1 =pd.DataFrame({'x':x_1, 'y':y_1}) _df
=np.zeros((1000,1000))
wfor i in range(1000):
for j in range(1000):
if i==j :
= 0
w[i,j] elif np.abs(i-j) <= 1 :
= 1 w[i,j]
= signal!=0 index_of_trueoutlier_bool
class Linear:
def __init__(self,df):
self.df = df
self.y = df.y.to_numpy()
self.x = df.x.to_numpy()
self.n = len(self.y)
self.W = w
def _eigen(self):
= self.W.sum(axis=1)
d= np.diag(d)
Dself.L = np.diag(1/np.sqrt(d)) @ (D-self.W) @ np.diag(1/np.sqrt(d))
self.lamb, self.Psi = np.linalg.eigh(self.L)
self.Lamb = np.diag(self.lamb)
def fit(self,sd=20): # fit with ebayesthresh
self._eigen()
self.ybar = self.Psi.T @ self.y # fbar := graph fourier transform of f
self.power = self.ybar**2
= importr('EbayesThresh').ebayesthresh
ebayesthresh self.power_threshed=np.array(ebayesthresh(FloatVector(self.power),sd=sd))
self.ybar_threshed = np.where(self.power_threshed>0,self.ybar,0)
self.yhat = self.Psi@self.ybar_threshed
self.df = self.df.assign(yHat = self.yhat)
self.df = self.df.assign(Residual = self.df.y- self.df.yHat)
def fig(self,ymin=-5,ymax=20,cuts=0,cutf=995):
= (self.df['Residual']**2).tolist()
outlier_GODE_linear_old = sorted(outlier_GODE_linear_old,reverse=True)
sorted_data = int(len(sorted_data) * 0.05)
index = sorted_data[index]
five_percent = list(map(lambda x: 1 if x > five_percent else 0,outlier_GODE_linear_old))
outlier_GODE_linear = [i for i, value in enumerate(outlier_GODE_linear_old) if value > five_percent]
outlier_GODE_linear_index
= plt.subplots(figsize=(10,10))
fig,ax self.x,self.y,color='gray',s=50)
ax.scatter(# ax.scatter(self.x[index_of_trueoutlier_bool],self.y[index_of_trueoutlier_bool],color='red',s=50)
self.x[index_of_trueoutlier_bool],self.y[index_of_trueoutlier_bool],color='red',s=100)
ax.scatter(self.x[cuts:cutf],self.yhat[cuts:cutf], '--k',lw=3)
ax.plot(self.df.x[outlier_GODE_linear_index],self.df.y[outlier_GODE_linear_index],color='red',s=550,facecolors='none', edgecolors='r')
ax.scatter(
fig.tight_layout()# fig.savefig('fig1_231103.eps',format='eps')
# fig.savefig('linear_231129_3.pdf',format='pdf')
= Linear(_df)
_Linear =20) _Linear.fit(sd
_Linear.fig()
Orbit
777)
np.random.seed(= np.around(np.random.normal(size=1000),15)
epsilon = np.random.choice(np.concatenate((np.random.uniform(-4, -1, 25).round(15), np.random.uniform(1, 4, 25).round(15), np.repeat(0, 950))), 1000)
signal = signal + epsilon
eta =np.pi
pi=1000
n=np.linspace(-pi,pi-2*pi/n,n)
ang=5+np.cos(np.linspace(0,12*pi,n))
r=r*np.cos(ang)
vx=r*np.sin(ang)
vy=10*np.sin(np.linspace(0,6*pi,n))
f1= f1 + eta
f = pd.DataFrame({'x' : vx, 'y' : vy, 'f' : f,'f1':f1})
_df = signal.copy()
outlier_true_orbit = list(map(lambda x: 1 if x!=0 else 0,outlier_true_orbit))
outlier_true_orbit = signal!=0 index_of_trueoutlier_bool
class Orbit:
def __init__(self,df):
self.df = df
self.f = df.f.to_numpy()
self.f1 = df.f1.to_numpy()
self.x = df.x.to_numpy()
self.y = df.y.to_numpy()
self.n = len(self.f)
self.theta= None
def get_distance(self):
self.D = np.zeros([self.n,self.n])
= np.stack([self.x, self.y],axis=1)
locations for i in tqdm.tqdm(range(self.n)):
for j in range(i,self.n):
self.D[i,j]=np.linalg.norm(locations[i]-locations[j])
self.D = self.D + self.D.T
def get_weightmatrix(self,theta=1,beta=0.5,kappa=4000):
self.theta = theta
= np.where(self.D < kappa,self.D,0)
dist self.W = np.exp(-(dist/self.theta)**2)
def _eigen(self):
= self.W.sum(axis=1)
d= np.diag(d)
Dself.L = np.diag(1/np.sqrt(d)) @ (D-self.W) @ np.diag(1/np.sqrt(d))
self.lamb, self.Psi = np.linalg.eigh(self.L)
self.Lamb = np.diag(self.lamb)
def fit(self,sd=5): # fit with ebayesthresh
self._eigen()
self.fbar = self.Psi.T @ self.f # fbar := graph fourier transform of f
self.power = self.fbar**2
= importr('EbayesThresh').ebayesthresh
ebayesthresh self.power_threshed=np.array(ebayesthresh(FloatVector(self.fbar**2),sd=sd))
self.fbar_threshed = np.where(self.power_threshed>0,self.fbar,0)
self.fhat = self.Psi@self.fbar_threshed
self.df = self.df.assign(fHat = self.fhat)
self.df = self.df.assign(Residual = self.df.f- self.df.fHat)
def fig(self):
= (_Orbit.df['Residual']**2).tolist()
outlier_GODE_one_old = sorted(outlier_GODE_one_old,reverse=True)
sorted_data = int(len(sorted_data) * 0.05)
index = sorted_data[index]
five_percent = list(map(lambda x: 1 if x > five_percent else 0,outlier_GODE_one_old))
outlier_GODE_one = [i for i, value in enumerate(outlier_GODE_one_old) if value > five_percent]
outlier_GODE_one_index
= plt.subplots(1,3,figsize=(30,15),subplot_kw={"projection":"3d"})
fig, (ax1,ax2,ax3) False)
ax1.grid(self.x[~index_of_trueoutlier_bool],self.y[~index_of_trueoutlier_bool],self.f[~index_of_trueoutlier_bool],zdir='z',color='gray',alpha=0.99,zorder=1)
ax1.scatter3D(self.x[index_of_trueoutlier_bool],self.y[index_of_trueoutlier_bool],self.f[index_of_trueoutlier_bool],zdir='z',s=75,color='red',alpha=0.99,zorder=2)
ax1.scatter3D(self.x[outlier_GODE_one_index],self.y[outlier_GODE_one_index],self.f[outlier_GODE_one_index],edgecolors='red',zdir='z',s=300,facecolors='none',alpha=0.99,zorder=3)
ax1.scatter3D(self.x,self.y,self.f1,'--k',lw=3,zorder=10)
ax1.plot3D(= False
ax1.xaxis.pane.fill = False
ax1.yaxis.pane.fill = False
ax1.zaxis.pane.fill =30., azim=60)
ax1.view_init(elev
False)
ax2.grid(self.x[~index_of_trueoutlier_bool],self.y[~index_of_trueoutlier_bool],self.f[~index_of_trueoutlier_bool],zdir='z',color='gray',alpha=0.99,zorder=1)
ax2.scatter3D(self.x[index_of_trueoutlier_bool],self.y[index_of_trueoutlier_bool],self.f[index_of_trueoutlier_bool],zdir='z',s=75,color='red',alpha=0.99,zorder=2)
ax2.scatter3D(self.x[outlier_GODE_one_index],self.y[outlier_GODE_one_index],self.f[outlier_GODE_one_index],edgecolors='red',zdir='z',s=300,facecolors='none',alpha=0.99,zorder=3)
ax2.scatter3D(self.x,self.y,self.f1,'--k',lw=3,zorder=10)
ax2.plot3D(= False
ax2.xaxis.pane.fill = False
ax2.yaxis.pane.fill = False
ax2.zaxis.pane.fill =30., azim=40)
ax2.view_init(elev
False)
ax3.grid(self.x[~index_of_trueoutlier_bool],self.y[~index_of_trueoutlier_bool],self.f[~index_of_trueoutlier_bool],zdir='z',color='gray',alpha=0.99,zorder=1)
ax3.scatter3D(self.x[index_of_trueoutlier_bool],self.y[index_of_trueoutlier_bool],self.f[index_of_trueoutlier_bool],zdir='z',s=75,color='red',alpha=0.99,zorder=2)
ax3.scatter3D(self.x[outlier_GODE_one_index],self.y[outlier_GODE_one_index],self.f[outlier_GODE_one_index],edgecolors='red',zdir='z',s=300,facecolors='none',alpha=0.99,zorder=3)
ax3.scatter3D(self.x,self.y,self.f1,'--k',lw=3,zorder=10)
ax3.plot3D(= False
ax3.xaxis.pane.fill = False
ax3.yaxis.pane.fill = False
ax3.zaxis.pane.fill =30., azim=10)
ax3.view_init(elev
# fig.savefig('fig2_231129.eps',format='eps')
# fig.savefig('orbit_231129_3.pdf',format='pdf')
= Orbit(_df) _Orbit
_Orbit.get_distance()
100%|██████████| 1000/1000 [00:01<00:00, 600.01it/s]
=(_Orbit.D[_Orbit.D>0].mean()),kappa=2500)
_Orbit.get_weightmatrix(theta=15) _Orbit.fit(sd
%%capture --no-display
_Orbit.fig()
Bunny
= graphs.Bunny()
G = G.N
n = filters.Heat(G, tau=75)
g =2503
n1212)
np.random.seed(= np.around(np.random.normal(size=n),15)
normal = np.concatenate([np.random.uniform(low=3,high=7,size=60), np.random.uniform(low=-7,high=-3,size=60),np.zeros(n-120)]); np.random.shuffle(unif)
unif = normal + unif
noise = np.zeros(n)
f 1000] = -3234
f[= g.filter(f, method='chebyshev') f
2023-11-29 10:54:19,156:[WARNING](pygsp.graphs.graph.lmax): The largest eigenvalue G.lmax is not available, we need to estimate it. Explicitly call G.estimate_lmax() or G.compute_fourier_basis() once beforehand to suppress the warning.
G.coords.shape= G.W.toarray()
_W = G.coords[:,0]
_x = G.coords[:,1]
_y = -G.coords[:,2]
_z # _df1 = {'W':_W,'x':_x,'y':_y,'z':_z, 'fnoise':f+noise,'f' : f, 'noise': noise,'unif':unif}
= pd.DataFrame({'x': _x,'y':_y,'z':_z,'fnoise':f+noise,'f':f,'noise':noise})
_df # unif = _df1['unif']
= unif.copy()
outlier_true_bunny = list(map(lambda x: 1 if x !=0 else 0,outlier_true_bunny))
outlier_true_bunny # X = np.array(_df)[:,:4]
= unif!=0 index_of_trueoutlier_bool_bunny
# _W = _df1['W']
class BUNNY:
def __init__(self,df):
self.df = df
self.f = df.f.to_numpy()
self.z = df.z.to_numpy()
self.x = df.x.to_numpy()
self.y = df.y.to_numpy()
self.noise = df.noise.to_numpy()
self.fnoise = self.f + self.noise
self.W = _W
self.n = len(self.f)
self.theta= None
def _eigen(self):
= self.W.sum(axis=1)
d= np.diag(d)
Dself.L = np.diag(1/np.sqrt(d)) @ (D-self.W) @ np.diag(1/np.sqrt(d))
self.lamb, self.Psi = np.linalg.eigh(self.L)
self.Lamb = np.diag(self.lamb)
def fit(self,sd=5): # fit with ebayesthresh
self._eigen()
self.fbar = self.Psi.T @ self.fnoise # fbar := graph fourier transform of f
self.power = self.fbar**2
= importr('EbayesThresh').ebayesthresh
ebayesthresh self.power_threshed=np.array(ebayesthresh(FloatVector(self.power),sd=sd))
self.fbar_threshed = np.where(self.power_threshed>0,self.fbar,0)
self.fhat = self.Psi@self.fbar_threshed
self.df = self.df.assign(fnoise = self.fnoise)
self.df = self.df.assign(fHat = self.fhat)
self.df = self.df.assign(Residual = self.df.f + self.df.noise - self.df.fHat)
def fig(self):
= (self.df['Residual']**2).tolist()
outlier_GODE_one_old = sorted(outlier_GODE_one_old,reverse=True)
sorted_data = int(len(sorted_data) * 0.05)
index = sorted_data[index]
five_percent = list(map(lambda x: 1 if x > five_percent else 0,outlier_GODE_one_old))
outlier_GODE_one = [i for i, value in enumerate(outlier_GODE_one_old) if value > five_percent]
outlier_GODE_one_index
= plt.figure(figsize=(30,12),dpi=400)
fig = fig.add_subplot(251, projection='3d')
ax1 False)
ax1.grid(self.x,self.y,self.z,c='gray',zdir='z',alpha=0.5,marker='.')
ax1.scatter3D(=60., azim=-90)
ax1.view_init(elev
= fig.add_subplot(252, projection='3d')
ax2False)
ax2.grid(self.x,self.y,self.z,c=self.f,cmap='hsv',zdir='z',marker='.',alpha=0.5,vmin=-12,vmax=10)
ax2.scatter3D(=60., azim=-90)
ax2.view_init(elev
= fig.add_subplot(253, projection='3d')
ax3False)
ax3.grid(self.x,self.y,self.z,c=self.fnoise,cmap='hsv',zdir='z',marker='.',alpha=0.5,vmin=-12,vmax=10)
ax3.scatter3D(=60., azim=-90)
ax3.view_init(elev
= fig.add_subplot(254, projection='3d')
ax4False)
ax4.grid(self.x,self.y,self.z,c=self.fnoise,cmap='hsv',zdir='z',marker='.',vmin=-12,vmax=10,s=1)
ax4.scatter3D(self.x[index_of_trueoutlier_bool_bunny],self.y[index_of_trueoutlier_bool_bunny],self.z[index_of_trueoutlier_bool_bunny],c=self.fnoise[index_of_trueoutlier_bool_bunny],cmap='hsv',zdir='z',marker='.',s=50)
ax4.scatter3D(=60., azim=-90)
ax4.view_init(elev
= fig.add_subplot(255, projection='3d')
ax5False)
ax5.grid(self.x,self.y,self.z,c=self.fnoise,cmap='hsv',zdir='z',marker='.',vmin=-12,vmax=10,s=1)
ax5.scatter3D(self.x[index_of_trueoutlier_bool_bunny],self.y[index_of_trueoutlier_bool_bunny],self.z[index_of_trueoutlier_bool_bunny],c=self.fnoise[index_of_trueoutlier_bool_bunny],cmap='hsv',zdir='z',marker='.',s=50)
ax5.scatter3D(self.df.x[outlier_GODE_one_index],self.df.y[outlier_GODE_one_index],self.df.z[outlier_GODE_one_index],zdir='z',s=550,marker='.',edgecolors='red',facecolors='none')
ax5.scatter3D(=60., azim=-90)
ax5.view_init(elev
= fig.add_subplot(256, projection='3d')
ax6 False)
ax6.grid(self.x,self.y,self.z,c='gray',zdir='z',alpha=0.5,marker='.')
ax6.scatter3D(=-60., azim=-90)
ax6.view_init(elev
= fig.add_subplot(257, projection='3d')
ax7False)
ax7.grid(self.x,self.y,self.z,c=self.f,cmap='hsv',zdir='z',marker='.',alpha=0.5,vmin=-12,vmax=10)
ax7.scatter3D(=-60., azim=-90)
ax7.view_init(elev
= fig.add_subplot(258, projection='3d')
ax8False)
ax8.grid(self.x,self.y,self.z,c=self.fnoise,cmap='hsv',zdir='z',marker='.',alpha=0.5,vmin=-12,vmax=10)
ax8.scatter3D(=-60., azim=-90)
ax8.view_init(elev
= fig.add_subplot(259, projection='3d')
ax9False)
ax9.grid(self.x,self.y,self.z,c=self.fnoise,cmap='hsv',zdir='z',marker='.',vmin=-12,vmax=10,s=1)
ax9.scatter3D(self.x[index_of_trueoutlier_bool_bunny],self.y[index_of_trueoutlier_bool_bunny],self.z[index_of_trueoutlier_bool_bunny],c=self.fnoise[index_of_trueoutlier_bool_bunny],cmap='hsv',zdir='z',marker='.',s=50)
ax9.scatter3D(=-60., azim=-90)
ax9.view_init(elev
= fig.add_subplot(2,5,10, projection='3d')
ax10False)
ax10.grid(self.x,self.y,self.z,c=self.fnoise,cmap='hsv',zdir='z',marker='.',vmin=-12,vmax=10,s=1)
ax10.scatter3D(self.x[index_of_trueoutlier_bool_bunny],self.y[index_of_trueoutlier_bool_bunny],self.z[index_of_trueoutlier_bool_bunny],c=self.fnoise[index_of_trueoutlier_bool_bunny],cmap='hsv',zdir='z',marker='.',s=50)
ax10.scatter3D(self.df.x[outlier_GODE_one_index],self.df.y[outlier_GODE_one_index],self.df.z[outlier_GODE_one_index],zdir='z',s=550,marker='.',edgecolors='red',facecolors='none')
ax10.scatter3D(=-60., azim=-90)
ax10.view_init(elev# fig.savefig('fig_bunny.eps',format='eps')
= BUNNY(_df)
_BUNNY =20) _BUNNY.fit(sd
_BUNNY.fig()
Earthquake
= pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/earthquakes-23k.csv') df
= pd.concat([pd.read_csv('00_05.csv'),pd.read_csv('05_10.csv'),pd.read_csv('10_15.csv'),pd.read_csv('15_20.csv')]).iloc[:,[0,1,2,4]].rename(columns={'latitude':'Latitude','longitude':'Longitude','mag':'Magnitude'}).reset_index().iloc[:,1:] df_global
= df_global.assign(Year=list(map(lambda x: x.split('-')[0], df_global.time))).iloc[:,1:] df_global
= df_global.Year.astype(np.float64) df_global.Year
class MooYaHo:
def __init__(self,df):
self.df = df
self.f = df.Magnitude.to_numpy()
self.year = df.Year.to_numpy()
self.lat = df.Latitude.to_numpy()
self.long = df.Longitude.to_numpy()
self.n = len(self.f)
self.theta= None
def get_distance(self):
self.D = np.zeros([self.n,self.n])
= np.stack([self.lat, self.long],axis=1)
locations for i in tqdm.tqdm(range(self.n)):
for j in range(i,self.n):
self.D[i,j]=haversine(locations[i],locations[j])
self.D = self.D+self.D.T
def get_weightmatrix(self,theta=1,beta=0.5,kappa=4000):
self.theta = theta
= np.where(self.D<kappa,self.D,0)
dist self.W = np.exp(-(dist/self.theta)**2)
def _eigen(self):
= self.W.sum(axis=1)
d= np.diag(d)
Dself.L = np.diag(1/np.sqrt(d)) @ (D-self.W) @ np.diag(1/np.sqrt(d))
self.lamb, self.Psi = np.linalg.eigh(self.L)
self.Lamb = np.diag(self.lamb)
def fit(self,m):
self._eigen()
self.fhat = self.Psi[:,0:m]@self.Psi[:,0:m].T@self.f
self.df = self.df.assign(MagnitudeHat = self.fhat)
self.df = self.df.assign(Residual = self.df.Magnitude- self.df.MagnitudeHat)
self.f,'.')
plt.plot(self.fhat,'x') plt.plot(
class MooYaHo2(MooYaHo): # ebayesthresh 기능추가
def fit2(self): # fit with ebayesthresh
self._eigen()
self.fbar = self.Psi.T @ self.f # fbar := graph fourier transform of f
self.power = self.fbar**2
= importr('EbayesThresh').ebayesthresh
ebayesthresh self.power_threshed=np.array(ebayesthresh(FloatVector(self.fbar**2)))
self.fbar_threshed = np.where(self.power_threshed>0,self.fbar,0)
self.fhat = self.Psi@self.fbar_threshed
self.df = self.df.assign(MagnitudeHat = self.fhat)
self.df = self.df.assign(Residual = self.df.Magnitude- self.df.MagnitudeHat)
self.con = np.where(self.df.Residual>0.7,1,0)
class eachlocation(MooYaHo2):
def haiti(self,MagThresh=7,ResThresh=1,adjzoom=5,adjmarkersize = 40):
= px.density_mapbox(self.df,
fig ='Latitude',
lat='Longitude',
lon='Magnitude',
z=15,
radius=dict(lat=18.4430, lon=-72.5710),
center= adjzoom,
zoom=900,
height= 0.8,
opacity ="stamen-terrain",
mapbox_style=[-3,3])
range_color={"r":0,"t":0,"l":0,"b":0})
fig.update_layout(margin= self.df.query('Magnitude > @MagThresh')['Latitude'],
fig.add_scattermapbox(lat = self.df.query('Magnitude > @MagThresh')['Longitude'],
lon = self.df.query('Magnitude > @MagThresh')['Magnitude'],
text = 5,
marker_size= 'blue',
marker_color= 0.1
opacity
)= self.df.query('Residual**2 > @ResThresh')['Latitude'],
fig.add_scattermapbox(lat = self.df.query('Residual**2 > @ResThresh')['Longitude'],
lon = self.df.query('Magnitude > @ResThresh')['Magnitude'],
text = adjmarkersize,
marker_size= 'red',
marker_color= 0.8
opacity
)
fig.add_trace(go.Scattermapbox(=self.df.query('Residual**2 > @ResThresh')['Latitude'],
lat=self.df.query('Residual**2 > @ResThresh')['Longitude'],
lon='markers',
mode=go.scattermapbox.Marker(
marker=20,
size='rgb(255, 255, 255)',
color=0.4
opacity
)
))return fig
def lquique(self,MagThresh=7,ResThresh=1,adjzoom=5, adjmarkersize= 40):
= px.density_mapbox(self.df,
fig ='Latitude',
lat='Longitude',
lon='Magnitude',
z=15,
radius=dict(lat=-32.6953, lon=-71.4416),
center=adjzoom,
zoom=900,
height= 0.8,
opacity ="stamen-terrain",
mapbox_style=[-7,7])
range_color={"r":0,"t":0,"l":0,"b":0})
fig.update_layout(margin= self.df.query('Magnitude > @MagThresh')['Latitude'],
fig.add_scattermapbox(lat = self.df.query('Magnitude > @MagThresh')['Longitude'],
lon = self.df.query('Magnitude > @MagThresh')['Magnitude'],
text = 5,
marker_size= 'blue',
marker_color= 0.1
opacity
)= self.df.query('Residual**2 > @ResThresh')['Latitude'],
fig.add_scattermapbox(lat = self.df.query('Residual**2 > @ResThresh')['Longitude'],
lon = self.df.query('Magnitude > @ResThresh')['Magnitude'],
text = adjmarkersize,
marker_size= 'red',
marker_color= 0.8
opacity
)
fig.add_trace(go.Scattermapbox(=self.df.query('Residual**2 > @ResThresh')['Latitude'],
lat=self.df.query('Residual**2 > @ResThresh')['Longitude'],
lon='markers',
mode=go.scattermapbox.Marker(
marker=20,
size='rgb(255, 255, 255)',
color=0.8
opacity
)
))return fig
def sichuan(self,MagThresh=7,ResThresh=1,adjzoom=5,adjmarkersize=40):
= px.density_mapbox(self.df,
fig ='Latitude',
lat='Longitude',
lon='Magnitude',
z=15,
radius=dict(lat=30.3080, lon=102.8880),
center=adjzoom,
zoom=900,
height= 0.6,
opacity ="stamen-terrain",
mapbox_style=[-7,7])
range_color={"r":0,"t":0,"l":0,"b":0})
fig.update_layout(margin= self.df.query('Magnitude > @MagThresh')['Latitude'],
fig.add_scattermapbox(lat = self.df.query('Magnitude > @MagThresh')['Longitude'],
lon = self.df.query('Magnitude > @MagThresh')['Magnitude'],
text = 5,
marker_size= 'blue',
marker_color= 0.1
opacity
)= self.df.query('Residual**2 > @ResThresh')['Latitude'],
fig.add_scattermapbox(lat = self.df.query('Residual**2 > @ResThresh')['Longitude'],
lon = self.df.query('Magnitude > @ResThresh')['Magnitude'],
text = adjmarkersize,
marker_size= 'red',
marker_color= 0.8
opacity
)
fig.add_trace(go.Scattermapbox(=self.df.query('Residual**2 > @ResThresh')['Latitude'],
lat=self.df.query('Residual**2 > @ResThresh')['Longitude'],
lon='markers',
mode=go.scattermapbox.Marker(
marker=20,
size='rgb(255, 255, 255)',
color=0.8
opacity
)
))return fig
=eachlocation(df_global.query("2010 <= Year < 2015")) each_location
-
get distance
each_location.get_distance()
100%|██████████| 12498/12498 [04:15<00:00, 48.93it/s]
>0].mean() each_location.D[each_location.D
8810.865423093777
>0]) plt.hist(each_location.D[each_location.D
(array([14176290., 16005894., 21186674., 22331128., 19394182., 17548252.,
16668048., 13316436., 12973260., 2582550.]),
array([8.97930163e-02, 2.00141141e+03, 4.00273303e+03, 6.00405465e+03,
8.00537626e+03, 1.00066979e+04, 1.20080195e+04, 1.40093411e+04,
1.60106627e+04, 1.80119844e+04, 2.00133060e+04]),
<BarContainer object of 10 artists>)
-
weight matrix
=(8810.865423093777),kappa=2500) each_location.get_weightmatrix(theta
-
fit
each_location.fit2()
# each_location.haiti(MagThresh=6.9,ResThresh=0.5,adjzoom=5,adjmarkersize=40)
# fig = each_location.haiti(MagThresh=6.9,ResThresh=0.5,adjzoom=5,adjmarkersize=40)
# fig.write_image('fig_haiti.png',scale=3)
# each_location.lquique(MagThresh=6.4,ResThresh=0.4,adjzoom=5,adjmarkersize=40)
# fig = each_location.lquique(MagThresh=6.4,ResThresh=0.4,adjzoom=5,adjmarkersize=20)
# fig.write_image('fig_lquique.svg',scale=3)
# each_location.sichuan(MagThresh=6.5,ResThresh=0.4,adjzoom=5,adjmarkersize=40)
# fig = each_location.sichuan(MagThresh=6.5,ResThresh=0.4,adjzoom=5,adjmarkersize=20)
# fig.write_image('fig_sichuan.svg',scale=3)