Commit 967b3513 authored by Eric Dagobert's avatar Eric Dagobert

sdljasdlkf

parent 8164ce07
...@@ -7,7 +7,11 @@ class ConfigReader: ...@@ -7,7 +7,11 @@ class ConfigReader:
self._config = configparser.ConfigParser() self._config = configparser.ConfigParser()
self._config.read(path) self._config.read(path)
def server(self):
return self._config['tcpip']['server']
def port(self):
return int(self._config['tcpip']['port'])
def scavroot(self): def scavroot(self):
return self._config['scav']['root'] return self._config['scav']['root']
...@@ -66,6 +70,16 @@ class ConfigReader: ...@@ -66,6 +70,16 @@ class ConfigReader:
def reg_threshold(self): def reg_threshold(self):
return int(self._config['regimes']['threshold']) return int(self._config['regimes']['threshold'])
def outcl(self):
return self._config['clusters']['output']
def outreg(self):
return self._config['regimes']['output']
def incl(self):
return self._config['regimes']['input']
def clmap(self):
return self._config['graphs']['cmap']
def dataref(self):
return self._config['graphs']['dataref']
if __name__ == "__main__": if __name__ == "__main__":
c = ConfigReader('regimes.ini') c = ConfigReader('regimes.ini')
......
...@@ -8,6 +8,8 @@ from sklearn import cluster, covariance, manifold ...@@ -8,6 +8,8 @@ from sklearn import cluster, covariance, manifold
from math import * from math import *
import dill import dill
import sys import sys
import asyncio
if not sys.warnoptions: if not sys.warnoptions:
import warnings import warnings
warnings.simplefilter("ignore") warnings.simplefilter("ignore")
...@@ -64,8 +66,10 @@ class Distributions: ...@@ -64,8 +66,10 @@ class Distributions:
self.eps=eps self.eps=eps
self._window=window self._window=window
self._overlap=overlap self._overlap=overlap
self._pr = None
self._interrupt = asyncio.Event()
def compute_gaussians(self,window,overlap): async def compute_gaussians(self,window,overlap):
i = 0 i = 0
r = None r = None
k = 0 k = 0
...@@ -74,13 +78,13 @@ class Distributions: ...@@ -74,13 +78,13 @@ class Distributions:
rw=[] rw=[]
avdi = np.full((self._N,),0.) avdi = np.full((self._N,),0.)
ilist=[] ilist=[]
pr = ProgressBar(self._logret.shape[0]/(window-overlap), prefix='Covariances Computed', suffix='Complete')
while i < self._logret.shape[0]: while i < self._logret.shape[0]:
iend = min(i+window,self._logret.shape[0]) iend = min(i+window,self._logret.shape[0])
chunk = self._logret[i:iend,:]#*100. chunk = self._logret[i:iend,:]#*100.
ilist.append((i,iend)) ilist.append((i,iend))
rw.append(chunk) rw.append(chunk)
pr.iterate() self._pr.iterate()
mu = chunk.mean(axis=0) mu = chunk.mean(axis=0)
model = GraphicalLassoCV(cv=3) model = GraphicalLassoCV(cv=3)
...@@ -102,16 +106,20 @@ class Distributions: ...@@ -102,16 +106,20 @@ class Distributions:
else: else:
break break
await asyncio.sleep(0)
if self._interrupt.is_set():
return None
dlist = DistList( np.arange(ret.shape[0]), rw,ret,ilist) dlist = DistList( np.arange(ret.shape[0]), rw,ret,ilist)
return dlist return dlist
def load(self,mfile,mfields): def load(self,mfile,mfields):
pd = pandas.read_csv(mfile,sep=',') pd = pandas.read_csv(mfile,sep=',')
self._index = pd['Date'].values self._index =pd['Date'].values
self._logret = pd[mfields].values self._logret = pd[mfields].values
self._N = self._logret.shape[1] self._N = self._logret.shape[1]
self._pr = ProgressBar(self._logret.shape[0]/(self._window-self._overlap), prefix='Covariances Computed', suffix='Complete')
def main(): def init():
creader = ConfigReader('regimes.ini') creader = ConfigReader('regimes.ini')
mfile = creader.distrmastersource() mfile = creader.distrmastersource()
mfields = creader.distrfields() mfields = creader.distrfields()
...@@ -119,15 +127,30 @@ def main(): ...@@ -119,15 +127,30 @@ def main():
D.load(mfile, mfields) D.load(mfile, mfields)
window = creader.distrws() window = creader.distrws()
overlap = creader.distroverlap() overlap = creader.distroverlap()
dlist = D.compute_gaussians(window, overlap) return creader,window,overlap, D
dlist._index=D._index
async def run(creader,window,overlap,D):
dlist = await D.compute_gaussians(window, overlap)
if dlist is None:
return None
dlist._index=D._index
mcovf = creader.mastercovlist() mcovf = creader.mastercovlist()
print()
print('list of covariances saved in..')
with open(mcovf, 'wb') as f: with open(mcovf, 'wb') as f:
dill.dump(dlist,f) dill.dump(dlist,f)
print (mcovf) return mcovf
async def display(D):
pr = D._pr
while pr._iteration < pr._total:
await asyncio.sleep(1)
print (pr._display())
if __name__ == "__main__": if __name__ == "__main__":
main() creader,window,overlap, D = init()
\ No newline at end of file loop = asyncio.get_event_loop()
main = asyncio.ensure_future (run(creader, window, overlap, D))
prg = asyncio.ensure_future (display(D))
loop.run_until_complete(asyncio.gather(main,prg))
\ No newline at end of file
...@@ -12,9 +12,9 @@ import matplotlib.pyplot as plt ...@@ -12,9 +12,9 @@ import matplotlib.pyplot as plt
from matplotlib.pyplot import cm from matplotlib.pyplot import cm
from sklearn import cluster, covariance, manifold from sklearn import cluster, covariance, manifold
from tabulate import tabulate from tabulate import tabulate
import asyncio
from objects import ObjectContainer
import pandas
class Clusters: class Clusters:
def __init__(self,conf): def __init__(self,conf):
...@@ -22,10 +22,18 @@ class Clusters: ...@@ -22,10 +22,18 @@ class Clusters:
self._NCLUSTERS = conf.clusterN() self._NCLUSTERS = conf.clusterN()
self._THRESHOLD = 1 self._THRESHOLD = 1
distfile = conf.mastercovlist() distfile = conf.mastercovlist()
with open(distfile,'rb') as f: with open(distfile,'rb') as f:
self._distlist = dill.load(f) self._distlist = dill.load(f)
index = self._distlist._index
index = np.array(pandas.to_datetime(index)).astype('datetime64[D]')
index.sort()
self._distlist._index = index
covs = self._distlist._covlist
self._pr = ProgressBar(covs.shape[0]*covs.shape[0], prefix='Hellinger Affinities', suffix='Completed')
def spectral_centroids(self, labels): def spectral_centroids(self, labels):
centroids=[] centroids=[]
for i in range(labels.max()+1): for i in range(labels.max()+1):
...@@ -56,7 +64,7 @@ class Clusters: ...@@ -56,7 +64,7 @@ class Clusters:
continue continue
lxy=centroids[i][0] lxy=centroids[i][0]
labelx,labely = lxy[0],lxy[1] labelx,labely = lxy[0],lxy[1]
textx = labelx + 0.004 textx = labelx + 0.001
texty = labely + 0.01 texty = labely + 0.01
plt.annotate(str(col),xy=(labelx,labely),xytext=(textx,texty), plt.annotate(str(col),xy=(labelx,labely),xytext=(textx,texty),
arrowprops=dict(arrowstyle="->",connectionstyle="arc3"),size=6) arrowprops=dict(arrowstyle="->",connectionstyle="arc3"),size=6)
...@@ -69,9 +77,6 @@ class Clusters: ...@@ -69,9 +77,6 @@ class Clusters:
plt.savefig('clusters') plt.savefig('clusters')
plt.close(fig) plt.close(fig)
def compute_clusters(self): def compute_clusters(self):
nn = self._conf.clspectral_neighbors() nn = self._conf.clspectral_neighbors()
node_position_model = manifold.SpectralEmbedding(n_components=2,n_neighbors=nn,random_state=42) node_position_model = manifold.SpectralEmbedding(n_components=2,n_neighbors=nn,random_state=42)
...@@ -85,39 +90,46 @@ class Clusters: ...@@ -85,39 +90,46 @@ class Clusters:
es = self._conf.cleigen_solver() es = self._conf.cleigen_solver()
self._agg = cluster.SpectralClustering(n_clusters=N,affinity=aff,eigen_solver=es,n_neighbors=nn,random_state=rs).fit(X) self._agg = cluster.SpectralClustering(n_clusters=N,affinity=aff,eigen_solver=es,n_neighbors=nn,random_state=rs).fit(X)
self._clabels=self._agg.labels_ self._clabels=self._agg.labels_
with open('clabels.plk','wb') as f:
dill.dump(self._clabels,f)
with open('clusterengine.plk','wb') as f:
dill.dump(self._agg,f)
self._centroids = self.spectral_centroids(self._clabels) self._centroids = self.spectral_centroids(self._clabels)
def cal_affinity_matrix(self):
if (os.path.isfile('hellinger.plk')):
self._hellingerd = dill.load(open('hellinger.plk','rb')) class AsyncClusters:
return def __init__(self, conf):
cind = self._distlist._covindex self._clusters = Clusters(conf)
covs = self._distlist._covlist self._interrupt = asyncio.Event()
self._pr = self._clusters._pr
def compute_clusters(self):
self._clusters.compute_clusters()
async def cal_affinity_matrix(self):
cind = self._clusters._distlist._covindex
covs = self._clusters ._distlist._covlist
hellingerd = np.full((covs.shape[0],covs.shape[0]),0.) hellingerd = np.full((covs.shape[0],covs.shape[0]),0.)
n = covs.shape[1] n = covs.shape[1]
br = ProgressBar(covs.shape[0]*covs.shape[0], prefix='Hellinger Affinities', suffix='Completed')
for u in cind: for u in cind:
await asyncio.sleep(0)
for v in cind: for v in cind:
br.iterate() if self._interrupt.is_set():
return None
self._pr.iterate()
if hellingerd[v,u] == 0: if hellingerd[v,u] == 0:
hellingerd[u,v] = self._distlist.hellinger(n,covs[u],covs[v],self._conf.smooth_hellinger()) hellingerd[u,v] = self._clusters._distlist.hellinger(n,covs[u],covs[v], self._clusters._conf.smooth_hellinger())
else: else:
hellingerd[u,v] = hellingerd[v,u] hellingerd[u,v] = hellingerd[v,u]
self._hellingerd = hellingerd self._clusters._hellingerd = hellingerd
with open('hellinger.plk','wb') as f:
dill.dump(hellingerd,f)
class Regimes: class Regimes:
def __init__(self, clusters): def __init__(self, clusters):
self._clusters = clusters self._clusters = clusters
self._reg_threshold = clusters._conf.reg_threshold() self._reg_threshold = clusters._conf.reg_threshold()
self._conf = clusters._conf
def printout_centroids(self,prefix): def printout_centroids(self,prefix):
#distances #distances
D = np.full((len(self._rcentroids),len(self._rcentroids)),0.) D = np.full((len(self._rcentroids),len(self._rcentroids)),0.)
...@@ -135,7 +147,7 @@ class Regimes: ...@@ -135,7 +147,7 @@ class Regimes:
rows.append(row) rows.append(row)
headers=[prefix + '#%d'%r for r in range(len(self._rcentroids))] headers=[prefix + '#%d'%r for r in range(len(self._rcentroids))]
table = tabulate(rows,headers= headers,tablefmt='orgtbl',floatfmt='.3f') table = tabulate(rows,headers= headers,tablefmt='orgtbl',floatfmt='.3f')
print (table) return table
def merge_regimes(self,s,t): def merge_regimes(self,s,t):
idx = np.where(self._regimes==s) idx = np.where(self._regimes==s)
...@@ -231,16 +243,54 @@ class Regimes: ...@@ -231,16 +243,54 @@ class Regimes:
#cl._dt2rg() #cl._dt2rg()
if __name__ == "__main__":
def init_clusters():
conf = ConfigReader('regimes.ini') conf = ConfigReader('regimes.ini')
cl = Clusters(conf) cl = AsyncClusters(conf)
cl.cal_affinity_matrix() return cl
async def run_clusters(cl):
await cl.cal_affinity_matrix()
cl.compute_clusters() cl.compute_clusters()
return
def save_clusters(cl):
ObjectContainer.getInstance().set('clusters',cl._clusters)
ObjectContainer.getInstance().set('hellinger',cl._clusters._hellingerd)
ObjectContainer.getInstance().save()
def init_regimes():
conf = ConfigReader('regimes.ini')
cl = ObjectContainer.getInstance().get('clusters')
r = Regimes(cl) r = Regimes(cl)
return r
async def run_regimes(r):
r.compute_inter() r.compute_inter()
r.label_regimes() r.label_regimes()
r.printout_centroids('regimes') r.printout_centroids('regimes')
r.filter_small() r.filter_small()
return r.printout_centroids('regimes')
async def display(cl):
pr = cl._pr
while pr._iteration < pr._total:
await asyncio.sleep(1)
print (pr._display())
if __name__ == "__main__":
c = init_clusters()
run_clusters(c)
r = Regimes(cl)
r.compute_inter()
r.label_regimes()
r.printout_centroids('clusters')
r.filter_small()
r.printout_centroids('regimes') r.printout_centroids('regimes')
r._clusters.graph_(r._rcentroids,r._regimes,'regimes')
with open(r._conf.outreg(),'wb') as f:
\ No newline at end of file dill.dump(r,f)
\ No newline at end of file
[tcpip]
server2=localhost
server=192.168.0.200
port=4444
[scav] [scav]
root=/home/eric/src/Data/axioma root=/home/eric/src/Data/axioma
datefrom=1982-01-01 datefrom=1982-01-01
...@@ -12,7 +16,7 @@ mastersource=RFreturns.csv ...@@ -12,7 +16,7 @@ mastersource=RFreturns.csv
fields=ComEnOil,ComMeGol,CurEUR,CurJPY,EqCHN,EqEME,EqGrVaUSA,EqJPN,EqLaSmUSA,EqSeFinUSA,EqSeITeUSA,EqUSA,EqWLD,FICrHAAAUSA,FICrHBAAUSA,FICreHyUSA,FIG10YUSA,FIG3MUSA fields=ComEnOil,ComMeGol,CurEUR,CurJPY,EqCHN,EqEME,EqGrVaUSA,EqJPN,EqLaSmUSA,EqSeFinUSA,EqSeITeUSA,EqUSA,EqWLD,FICrHAAAUSA,FICrHBAAUSA,FICreHyUSA,FIG10YUSA,FIG3MUSA
windowsize=60 windowsize=60
overlap=40 overlap=40
mastercovlist=mastercovlist.pkl mastercovlist=mastercovlist.plk
[clusters] [clusters]
N=8 N=8
...@@ -22,6 +26,13 @@ spectraln_neighbors=6 ...@@ -22,6 +26,13 @@ spectraln_neighbors=6
n_neighbors=10 n_neighbors=10
random_states=48 random_states=48
smooth hellinger=True smooth hellinger=True
output=clusters.plk
[regimes] [regimes]
threshold = 4 input=clusters.plk
\ No newline at end of file threshold = 10
output=regimes.plk
[graphs]
cmap = cm.gnuplot2
dataref = CloseFactors.csv
...@@ -14,18 +14,20 @@ class ProgressBar: ...@@ -14,18 +14,20 @@ class ProgressBar:
self._percent=0 self._percent=0
def _display(self): def _display(self):
self._percent = ("{0:." + str(self._decimals) + "f}").format(100 * (self._iteration / float(self._total))) self._percent = ("{0:." + str(self._decimals) + "f}").format(100 * (self._iteration / float(self._total)))
filledLength = int(self._length * self._iteration // self._total) filledLength = int(self._length * self._iteration // self._total)
bar = self._fill * filledLength + '-' * (self._length - filledLength) bar = self._fill * filledLength + '-' * (self._length - filledLength)
print('\r%s |%s| %s%% %s' % (self._prefix, bar, self._percent, self._suffix), end = '\r') txt = '\r%s |%s| %s%% %s' % (self._prefix, bar, self._percent, self._suffix) + '\r'
# Print New Line on Complete # Print New Line on Complete
if self._iteration == self._total: if self._iteration == self._total:
print() return txt + '\n'
else:
return txt
def iterate(self, inc=1): def iterate(self, inc=1):
sleep(0)
self._iteration += inc self._iteration += inc
self._display() #self._display()
if __name__ == "__main__": if __name__ == "__main__":
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment