#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Dec 30 20:02:22 2017 @author: Kamessi """ import csv import numpy as np from scipy import linalg as LA def read_country(filename): f = open(filename,'r', encoding='utf-8') reader = csv.reader(f) raw_matrix = [] for row in reader: temp = [] for i in range(0,len(row)): try: temp.append(float(row[i])) except ValueError: temp.append(row[i]) raw_matrix.append(temp) f.close() return raw_matrix def main(): #Read the raw matrix raw_matrix = read_country("2009.csv") #compute mcp product_list = raw_matrix[0][1::] country_list = [] for i in range(1,len(raw_matrix)): country_list.append(raw_matrix[i][0]) country_sum = [] for i in range(1,len(raw_matrix)): country_sum.append(np.sum(raw_matrix[i][1::])) product_sum = [] for i in range(1,len(raw_matrix[0])): product = 0 for j in range(1,len(raw_matrix)): product += raw_matrix[j][i] product_sum.append(product) total_sum = np.sum(product_sum) mcp = [] for i in range (1,len(raw_matrix)): country_row = [] for j in range(1,len(raw_matrix[i])): percentage = raw_matrix[i][j]/country_sum[i-1] total_percentage = product_sum[j-1]/total_sum if percentage > total_percentage: country_row.append(1) else: country_row.append(0) mcp.append(country_row) #compute mpp country_sum = [] for i in range(0,len(mcp)): country_sum.append(np.sum(mcp[i])) product_sum = [] for i in range(0,len(mcp[0])): product = 0 for j in range(0,len(mcp)): product += mcp[j][i] product_sum.append(product) total_sum = np.sum(product_sum) mpp = [] for i in range(0,len(mcp[0])): product_row = [] for j in range(0,len(mcp[0])): temp_sum = 0 for k in range(0,len(mcp)): try: temp_sum += (mcp[k][i] * mcp[k][j]/(country_sum[k]*product_sum[i])) except: pass product_row.append(temp_sum) mpp.append(product_row) #compute PCI mpp = np.array(mpp) e_vals, e_vecs = LA.eig(mpp) eigenvectors = e_vecs.tolist() eigen = [] for eigenvector in eigenvectors: temp = [] for col in eigenvector: temp.append(col.real) eigen.append(temp) vector = [] for i in range(0,len(eigen)): vector.append(eigen[i][1]) pci = [] if vector[len(vector)-2] > 0: for item in vector: pci.append((item-np.mean(vector))/np.std(vector)) else: for item in vector: pci.append((-item+np.mean(vector))/np.std(vector)) #compute proximity proximity = [] for i in range(0,len(mcp[0])): product_row = [] for j in range(0,len(mcp[0])): temp_sum = 0 for k in range(0,len(mcp)): try: temp_sum += mcp[k][i] * mcp[k][j] except: pass p0 = product_sum[i] p1 = product_sum[j] if p0 < p1: large = p1 else: large = p0 product_row.append(temp_sum/large) proximity.append(product_row) #compute actual distance distance1 = [] for i in range(0,len(mcp)): product_row = [] for j in range(0,len(mcp[0])): sum1 = 0 for k in range(0,len(mcp[0])): if k != j: try: sum1 += mcp[i][k]*proximity[j][k] except: pass sum2 = 0 for k in range(0,len(mcp[0])): if k != j: try: sum2 += proximity[j][k] except: pass product_row.append(1-sum1/sum2) distance1.append(product_row) distance1 = np.array(distance1) d1 = np.transpose(distance1) matrix = open("actual distance 1.csv",'w',newline='') writer = csv.writer(matrix) country_list = ["Product"] + country_list writer.writerow(country_list) for i in range(0,len(d1)): temp = [product_list[i]] temp.extend(d1[i]) writer.writerow(temp) matrix.close() #Read the raw matrix raw_matrix = read_country("2014.csv") #compute mcp product_list2 = raw_matrix[0][1::] country_list2 = [] for i in range(1,len(raw_matrix)): country_list2.append(raw_matrix[i][0]) country_sum = [] for i in range(1,len(raw_matrix)): country_sum.append(np.sum(raw_matrix[i][1::])) product_sum = [] for i in range(1,len(raw_matrix[0])): product = 0 for j in range(1,len(raw_matrix)): product += raw_matrix[j][i] product_sum.append(product) total_sum = np.sum(product_sum) mcp = [] for i in range (1,len(raw_matrix)): country_row = [] for j in range(1,len(raw_matrix[i])): percentage = raw_matrix[i][j]/country_sum[i-1] total_percentage = product_sum[j-1]/total_sum if percentage > total_percentage: country_row.append(1) else: country_row.append(0) mcp.append(country_row) #compute mpp country_sum = [] for i in range(0,len(mcp)): country_sum.append(np.sum(mcp[i])) product_sum = [] for i in range(0,len(mcp[0])): product = 0 for j in range(0,len(mcp)): product += mcp[j][i] product_sum.append(product) total_sum = np.sum(product_sum) mpp = [] for i in range(0,len(mcp[0])): product_row = [] for j in range(0,len(mcp[0])): temp_sum = 0 for k in range(0,len(mcp)): try: temp_sum += (mcp[k][i] * mcp[k][j]/(country_sum[k]*product_sum[i])) except: pass product_row.append(temp_sum) mpp.append(product_row) #compute PCI mpp = np.array(mpp) e_vals, e_vecs = LA.eig(mpp) eigenvectors = e_vecs.tolist() eigen = [] for eigenvector in eigenvectors: temp = [] for col in eigenvector: temp.append(col.real) eigen.append(temp) vector = [] for i in range(0,len(eigen)): vector.append(eigen[i][1]) pci = [] if vector[len(vector)-2] > 0: for item in vector: pci.append((item-np.mean(vector))/np.std(vector)) else: for item in vector: pci.append((-item+np.mean(vector))/np.std(vector)) #compute proximity proximity = [] for i in range(0,len(mcp[0])): product_row = [] for j in range(0,len(mcp[0])): temp_sum = 0 for k in range(0,len(mcp)): try: temp_sum += mcp[k][i] * mcp[k][j] except: pass p0 = product_sum[i] p1 = product_sum[j] if p0 < p1: large = p1 else: large = p0 product_row.append(temp_sum/large) proximity.append(product_row) #compute actual distance distance2 = [] for i in range(0,len(mcp)): product_row = [] for j in range(0,len(mcp[0])): sum1 = 0 for k in range(0,len(mcp[0])): if k != j: try: sum1 += mcp[i][k]*proximity[j][k] except: pass sum2 = 0 for k in range(0,len(mcp[0])): if k != j: try: sum2 += proximity[j][k] except: pass product_row.append(1-sum1/sum2) distance2.append(product_row) distance2 = np.array(distance2) d2 = np.transpose(distance2) matrix = open("actual distance 2.csv",'w',newline='') writer = csv.writer(matrix) country_list2 = ["Product"] + country_list2 writer.writerow(country_list2) for i in range(0,len(d2)): temp = [product_list2[i]] temp.extend(d2[i]) writer.writerow(temp) matrix.close() #calculate ADI adi = [] if len(distance1[0]) == len(distance2[0]): print("categorization verified") common = [] for i in range(1,len(country_list)): if country_list[i] in country_list2: for j in range(1,len(country_list2)): if country_list[i] == country_list2[j]: common.append(country_list[i]) temp = [] for k in range(0,len(distance1[0])): temp.append(distance2[j-1][k]-distance1[i-1][k]) adi.append(temp) adi = np.array(adi) adi = np.transpose(adi) matrix = open("ADI.csv",'w',newline='') writer = csv.writer(matrix) common = ["Product"] + common writer.writerow(common) for i in range(0,len(adi)): temp = [product_list2[i]] temp.extend(adi[i]) writer.writerow(temp) matrix.close() if __name__ == "__main__": main()