Advertisement
Guest User

Untitled

a guest
Mar 6th, 2019
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #import packages
  2.  
  3. import numpy as np
  4. from matplotlib import pyplot as plt
  5. import glob
  6. import re
  7. import pandas as pd
  8. import math
  9. import random
  10. from decimal import Decimal
  11. from pandas import DataFrame
  12.  
  13. plt.close('all')
  14. filenames = []
  15. closeprice = np.array([])
  16. cp_list=[]
  17. date_list=[]
  18. sample_string = ('.*-') #string
  19. sample_string2 = ('.*-')
  20. R = re.compile('.*/.*/.*')
  21. d_2014 = re.compile('.*-.*-2014') #last 5 years
  22.  
  23. #defining functions here
  24. def dchanger(array): #converts it to day-month-year format, calling it ON AN array OF numbers!
  25.     mylist = []
  26.     for i IN array:
  27.         if R.match(i) is NOT None: #if IN format OF day/month/year
  28.             a,b,c = i.split("/")
  29.             i = a + "-" + b + "-" + c
  30.             mylist.append(i)
  31.         else:
  32.             mylist.append(i)
  33.     count = 0
  34.     for i IN range(0,len(mylist)):
  35.         if d_2014.match(mylist[i]) is NOT None:
  36.             count = 1
  37.             break
  38.     if count == 0:
  39.         mylist2 = []
  40.         for k IN mylist:
  41.             w,x,y = k.split("-")
  42.             y = y.strip("0")
  43.             x = x.strip("0")
  44.             k = y + "-" + x + "-" + w
  45.             mylist2.append(k)
  46.         return np.array(mylist2)
  47.     else:
  48.         return np.array(mylist)
  49.  
  50. def dcounter(array,year,month):
  51.     a = ".*-" + str(month) + ".*-" + str(year)
  52.     b = re.compile(a)
  53.     date = []
  54.     for j IN array:
  55.         for i IN range(0,len(j)):
  56.             if b.match(j[i]) is NOT None:
  57.                 date.append(i)
  58.                 break
  59.     return date
  60.  
  61. def quantisation(array):
  62.     quant = []
  63.     for i IN range(0,len(array)-1):
  64.         if array[i] >= array[i+1]:
  65.             quant.append(1)
  66.         else:
  67.             quant.append(-1)
  68.     return quant
  69.  
  70. def mutualinformation(year1,month1,year2,month2):
  71.     date_index1 = dcounter(date_list,year1,month1)
  72.     date_index2 = dcounter(date_list,year2,month2)
  73.     quantised_matrix1 = []
  74.     for i IN range(0,filename_length):
  75.         quantised_matrix1.append(quantisation(cp_list[i][date_index1[i]:date_index2[i]]))
  76.     matrix = []
  77.     for i IN range(0,filename_length):
  78.         matrix2 = []
  79.         for j IN range(0,filename_length):
  80.             matrix2.append(miformula(quantised_matrix1[i],quantised_matrix1[j]))
  81.         matrix.append(matrix2)
  82.     return pd.DataFrame(matrix,columns=filenames,index=filenames)
  83.  
  84. def miformula(array1,array2): #mutual information between array1 AND array2
  85.     a = len(array1)
  86.     cpp = 0
  87.     cpm = 0
  88.     cmp = 0
  89.     cmm = 0
  90.     up1 = 0
  91.     up2 = 0
  92.     for i IN range(0,a):
  93.         if array1[i] == array2[i]:
  94.             if array1[i] == 1:
  95.                 cpp += 1
  96.                 up1 += 1
  97.                 up2 += 1
  98.             else:
  99.                 cmm+=1
  100.         elif array1[i] == 1 AND array2[i] == -1:
  101.             cpm += 1
  102.             up1 += 1
  103.         else:
  104.             cmp += 1
  105.             up2 += 1
  106.     cpp = cpp/a
  107.     cmm = cmm/a
  108.     cpm = cpm/a
  109.     cmp = cmp/a
  110.     up1 = up1/a
  111.     up2 = up2/a
  112.     info1 = cpp * math.log(Decimal(cpp/(up1*up2)),2) + cmm * math.log(Decimal(cmm/((1-up1)*(1-up2))),2)
  113.     if cpm != 0:
  114.         info1 += cpm * math.log(Decimal(cpm/(up1*(1-up2))),2) + cmp * math.log(Decimal(cmp/(up2*(1-up1))),2)
  115.     return info1
  116.  
  117. def eigenmonth(year1,year2):
  118.     start = year1
  119.     end = year2
  120.     eigenvalues=[]
  121.     eigenvectors=[]
  122.     quarters = (year2 - year1) * 4
  123.     month=1
  124.     year = year1
  125.     for i IN range(quarters):
  126.         if month == 10:
  127.             df = mutualinformation(year,10,year+1,1)
  128.             df_array = df.to_numpy()
  129.             u,v = np.linalg.eig(df_array)
  130.             u1 = []
  131.             v1 = []
  132.             u_sort = u
  133.             u_sort.sort()
  134.             for abc IN u_sort:
  135.                 uabc = np.ndarray.tolist(u)
  136.                 index = uabc.index(abc)
  137.                 u1.append(u[index])
  138.                 v1.append(v[:,index])
  139.             eigenvalues.append(u1)
  140.             eigenvectors.append(v1)
  141.             month = 1
  142.             year +=1
  143.         else:
  144.             df = mutualinformation(year,month,year,month+3)
  145.             df_array = df.to_numpy()
  146.             u,v = np.linalg.eig(df_array)
  147.             u1 = []
  148.             v1 = []
  149.             u_sort = u
  150.             u_sort.sort()
  151.             for abc IN u_sort:
  152.                 uabc = np.ndarray.tolist(u)
  153.                 index = uabc.index(abc)
  154.                 u1.append(u[index])
  155.                 v1.append(v[:,index])
  156.             eigenvalues.append(u1)
  157.             eigenvectors.append(v1)
  158.             month += 3
  159.     return eigenvalues,eigenvectors
  160.  
  161. def eigenyear(year1,year2):
  162.     eigenvalues = []
  163.     eigenvectors = []
  164.     years = year2 - year1
  165.     year = year1
  166.     for i IN range(years):
  167.         df = mutualinformation(year,1,year+1,1)
  168.         df_array = df.to_numpy()
  169.         u,v = np.linalg.eig(df_array)
  170.         u1 = []
  171.         v1 = []
  172.         u_sort = sorted(u, reverse=True)
  173.         for abc IN u_sort:
  174.             uabc = np.ndarray.tolist(u)
  175.             index = uabc.index(abc)
  176.             u1.append(u[index])
  177.             v1.append(v[:,index])
  178.         eigenvalues.append(u1)
  179.         eigenvectors.append(v1)
  180.         year+= 1
  181.     return eigenvalues, eigenvectors
  182.  
  183. def dotproduct(v1,v2):
  184.     return SUM((a*b) for a,b IN zip(v1,v2))
  185.  
  186. def length(v):
  187.     return math.sqrt(dotproduct(v,v))
  188.  
  189. def cosangle(v1,v2):
  190.     return (dotproduct(v1,v2))/(length(v1)*length(v2))
  191.  
  192.    
  193.    
  194.    
  195.  
  196. #def plotting(n): #plot largest n eigenvalues
  197. #    for i IN range(len())
  198.  
  199. #import files
  200. for filename IN glob.glob('*ClosePrice.npy'): #reading FILE names
  201.     filenames.append(filename[:-14])
  202.     i = np.load(filename)
  203.     cp_list.append(i)
  204.     j = np.load(filename[:-14] + "Date.npy")
  205.     j = dchanger(j)
  206.     date_list.append(j)
  207.  
  208. filename_length = len(filenames)
  209.  
  210. cp_list = np.asarray(cp_list) #converting the lists into AN array
  211. date_list = np.asarray(date_list) #converting the lists into AN array
  212.  
  213. df1 = mutualinformation(2015,1,2016,1)
  214. df2 = mutualinformation(2014,1,2015,1)
  215. df3 = mutualinformation(2016,1,2017,1)
  216. df4 = mutualinformation(2017,1,2018,1)
  217.  
  218. a,b = eigenyear(2000,2018)
  219. blk0 = []
  220.  
  221. for i IN range(len(a)):
  222.     blk0.append(b[i][0])
  223.  
  224. angles0 = []
  225.  
  226. for i IN range(len(blk0) - 1):
  227.     angles0.append(abs(cosangle(blk0[0],blk0[i+1])))
  228.  
  229. x = range(len(angles0))
  230. plt.plot(x,angles0)
  231. plt.legend()
  232. plt.show()
  233.  
  234.  
  235. #dates AND close prices now stored as arrays
  236. #a,b = eigen(2014,2017)
  237. #print(a)
  238. #print(b)
  239.  
  240.  
  241. """
  242. a, b = eigen(2014,2017)
  243.  
  244. blk0 = []
  245. blk1 = []
  246. blk2 = []
  247. blk3 = []
  248.  
  249. for i in range(len(a)):
  250.    blk0.append(b[i][0])
  251.    blk1.append(b[i][1])
  252.    blk2.append(b[i][2])
  253.    blk3.append(b[i][3])
  254.  
  255.  
  256. angles0 = []
  257. angles1 = []
  258. angles2 = []
  259. angles3 = []
  260.  
  261. for i in range(len(blk0)-1):
  262.    angles0.append(abs(cosangle(blk0[0],blk0[i+1])))
  263.  
  264. for i in range(len(blk1) - 1):
  265.    angles1.append(cosangle(blk1[i],blk1[i+1]))
  266.  
  267. for i in range(len(blk2) - 1):
  268.    angles2.append(cosangle(blk2[i],blk2[i+1]))
  269.  
  270. for i in range(len(blk3) - 1):
  271.    angles3.append(cosangle(blk3[i],blk3[i+1]))
  272.  
  273.  
  274. print(date_list)
  275. x = range(len(angles0))
  276. plt.plot(x,angles0)
  277. plt.legend()
  278. plt.show()
  279. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement