Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #import packages
- import numpy as np
- from matplotlib import pyplot as plt
- import glob
- import re
- import pandas as pd
- import math
- import random
- from decimal import Decimal
- from pandas import DataFrame
- plt.close('all')
- filenames = []
- closeprice = np.array([])
- cp_list=[]
- date_list=[]
- sample_string = ('.*-') #string
- sample_string2 = ('.*-')
- R = re.compile('.*/.*/.*')
- d_2014 = re.compile('.*-.*-2014') #last 5 years
- #defining functions here
- def dchanger(array): #converts it to day-month-year format, calling it ON AN array OF numbers!
- mylist = []
- for i IN array:
- if R.match(i) is NOT None: #if IN format OF day/month/year
- a,b,c = i.split("/")
- i = a + "-" + b + "-" + c
- mylist.append(i)
- else:
- mylist.append(i)
- count = 0
- for i IN range(0,len(mylist)):
- if d_2014.match(mylist[i]) is NOT None:
- count = 1
- break
- if count == 0:
- mylist2 = []
- for k IN mylist:
- w,x,y = k.split("-")
- y = y.strip("0")
- x = x.strip("0")
- k = y + "-" + x + "-" + w
- mylist2.append(k)
- return np.array(mylist2)
- else:
- return np.array(mylist)
- def dcounter(array,year,month):
- a = ".*-" + str(month) + ".*-" + str(year)
- b = re.compile(a)
- date = []
- for j IN array:
- for i IN range(0,len(j)):
- if b.match(j[i]) is NOT None:
- date.append(i)
- break
- return date
- def quantisation(array):
- quant = []
- for i IN range(0,len(array)-1):
- if array[i] >= array[i+1]:
- quant.append(1)
- else:
- quant.append(-1)
- return quant
- def mutualinformation(year1,month1,year2,month2):
- date_index1 = dcounter(date_list,year1,month1)
- date_index2 = dcounter(date_list,year2,month2)
- quantised_matrix1 = []
- for i IN range(0,filename_length):
- quantised_matrix1.append(quantisation(cp_list[i][date_index1[i]:date_index2[i]]))
- matrix = []
- for i IN range(0,filename_length):
- matrix2 = []
- for j IN range(0,filename_length):
- matrix2.append(miformula(quantised_matrix1[i],quantised_matrix1[j]))
- matrix.append(matrix2)
- return pd.DataFrame(matrix,columns=filenames,index=filenames)
- def miformula(array1,array2): #mutual information between array1 AND array2
- a = len(array1)
- cpp = 0
- cpm = 0
- cmp = 0
- cmm = 0
- up1 = 0
- up2 = 0
- for i IN range(0,a):
- if array1[i] == array2[i]:
- if array1[i] == 1:
- cpp += 1
- up1 += 1
- up2 += 1
- else:
- cmm+=1
- elif array1[i] == 1 AND array2[i] == -1:
- cpm += 1
- up1 += 1
- else:
- cmp += 1
- up2 += 1
- cpp = cpp/a
- cmm = cmm/a
- cpm = cpm/a
- cmp = cmp/a
- up1 = up1/a
- up2 = up2/a
- info1 = cpp * math.log(Decimal(cpp/(up1*up2)),2) + cmm * math.log(Decimal(cmm/((1-up1)*(1-up2))),2)
- if cpm != 0:
- info1 += cpm * math.log(Decimal(cpm/(up1*(1-up2))),2) + cmp * math.log(Decimal(cmp/(up2*(1-up1))),2)
- return info1
- def eigenmonth(year1,year2):
- start = year1
- end = year2
- eigenvalues=[]
- eigenvectors=[]
- quarters = (year2 - year1) * 4
- month=1
- year = year1
- for i IN range(quarters):
- if month == 10:
- df = mutualinformation(year,10,year+1,1)
- df_array = df.to_numpy()
- u,v = np.linalg.eig(df_array)
- u1 = []
- v1 = []
- u_sort = u
- u_sort.sort()
- for abc IN u_sort:
- uabc = np.ndarray.tolist(u)
- index = uabc.index(abc)
- u1.append(u[index])
- v1.append(v[:,index])
- eigenvalues.append(u1)
- eigenvectors.append(v1)
- month = 1
- year +=1
- else:
- df = mutualinformation(year,month,year,month+3)
- df_array = df.to_numpy()
- u,v = np.linalg.eig(df_array)
- u1 = []
- v1 = []
- u_sort = u
- u_sort.sort()
- for abc IN u_sort:
- uabc = np.ndarray.tolist(u)
- index = uabc.index(abc)
- u1.append(u[index])
- v1.append(v[:,index])
- eigenvalues.append(u1)
- eigenvectors.append(v1)
- month += 3
- return eigenvalues,eigenvectors
- def eigenyear(year1,year2):
- eigenvalues = []
- eigenvectors = []
- years = year2 - year1
- year = year1
- for i IN range(years):
- df = mutualinformation(year,1,year+1,1)
- df_array = df.to_numpy()
- u,v = np.linalg.eig(df_array)
- u1 = []
- v1 = []
- u_sort = sorted(u, reverse=True)
- for abc IN u_sort:
- uabc = np.ndarray.tolist(u)
- index = uabc.index(abc)
- u1.append(u[index])
- v1.append(v[:,index])
- eigenvalues.append(u1)
- eigenvectors.append(v1)
- year+= 1
- return eigenvalues, eigenvectors
- def dotproduct(v1,v2):
- return SUM((a*b) for a,b IN zip(v1,v2))
- def length(v):
- return math.sqrt(dotproduct(v,v))
- def cosangle(v1,v2):
- return (dotproduct(v1,v2))/(length(v1)*length(v2))
- #def plotting(n): #plot largest n eigenvalues
- # for i IN range(len())
- #import files
- for filename IN glob.glob('*ClosePrice.npy'): #reading FILE names
- filenames.append(filename[:-14])
- i = np.load(filename)
- cp_list.append(i)
- j = np.load(filename[:-14] + "Date.npy")
- j = dchanger(j)
- date_list.append(j)
- filename_length = len(filenames)
- cp_list = np.asarray(cp_list) #converting the lists into AN array
- date_list = np.asarray(date_list) #converting the lists into AN array
- df1 = mutualinformation(2015,1,2016,1)
- df2 = mutualinformation(2014,1,2015,1)
- df3 = mutualinformation(2016,1,2017,1)
- df4 = mutualinformation(2017,1,2018,1)
- a,b = eigenyear(2000,2018)
- blk0 = []
- for i IN range(len(a)):
- blk0.append(b[i][0])
- angles0 = []
- for i IN range(len(blk0) - 1):
- angles0.append(abs(cosangle(blk0[0],blk0[i+1])))
- x = range(len(angles0))
- plt.plot(x,angles0)
- plt.legend()
- plt.show()
- #dates AND close prices now stored as arrays
- #a,b = eigen(2014,2017)
- #print(a)
- #print(b)
- """
- a, b = eigen(2014,2017)
- blk0 = []
- blk1 = []
- blk2 = []
- blk3 = []
- for i in range(len(a)):
- blk0.append(b[i][0])
- blk1.append(b[i][1])
- blk2.append(b[i][2])
- blk3.append(b[i][3])
- angles0 = []
- angles1 = []
- angles2 = []
- angles3 = []
- for i in range(len(blk0)-1):
- angles0.append(abs(cosangle(blk0[0],blk0[i+1])))
- for i in range(len(blk1) - 1):
- angles1.append(cosangle(blk1[i],blk1[i+1]))
- for i in range(len(blk2) - 1):
- angles2.append(cosangle(blk2[i],blk2[i+1]))
- for i in range(len(blk3) - 1):
- angles3.append(cosangle(blk3[i],blk3[i+1]))
- print(date_list)
- x = range(len(angles0))
- plt.plot(x,angles0)
- plt.legend()
- plt.show()
- """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement