#!/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("matrix2009.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 mcc mcp2 = mcp 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) print(total_sum) mcc = [] for i in range(0,len(mcp)): country_row = [] for j in range(0,len(mcp)): temp_sum = 0 for k in range(0,len(mcp[0])): try: value = (mcp[i][k] * mcp2[j][k]/(country_sum[i]*product_sum[k])) if np.isinf(value) or np.isnan(value): temp_sum += 0 else: temp_sum += value except: pass country_row.append(temp_sum) mcc.append(country_row) matrix = open("mcc.csv",'w',newline='') writer = csv.writer(matrix) for i in range(0,len(mcc)): writer.writerow(mcc[i]) matrix.close() #compute and write ECI mcc = np.array(mcc) e_vals, e_vecs = LA.eig(mcc) 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]) eci = [] if vector[0] < 0: for item in vector: eci.append((item-np.mean(vector))/np.std(vector)) else: for item in vector: eci.append((-item+np.mean(vector))/np.std(vector)) matrix = open("eci_original.csv",'w',newline='') writer = csv.writer(matrix) for i in range(0,len(eci)): writer.writerow([country_list[i],eci[i]]) matrix.close() if __name__ == "__main__": main()