File size: 2,331 Bytes
22738ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @File  : run_mcda.py
# @Author: nixin
# @Date  : 2021/11/26

import pandas as pd

import pandas as pd
import seaborn as sns
from sklearn.preprocessing import minmax_scale
# %matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
from skcriteria import Data, MAX, MIN
from skcriteria.madm import simple, closeness
# import plotly.graph_objects as go
import numpy as np

solutions = pd.read_csv('/Users/nixin/PycharmProjects/PatentSolver_demonstrator/MCDA/data/results (18).csv')
print(len(solutions))
print('==========')
# clean null soltuions
solutions = solutions[solutions['latent_inventive_solutions']!= '[]']
print(len(solutions))

count = pd.read_csv('/Users/nixin/PycharmProjects/PatentSolver_demonstrator/MCDA/data/cleaned_count_patents.csv')

print(solutions.columns)
print(count.columns)

count = count[['patent_number', 'count_inventor_name', 'count_forward_cite_no_family',
                           'count_forward_cite_yes_family', 'count_backward_cite_no_family',
                           'count_backward_cite_yes_family']]

count = pd.merge(count,solutions[['patent_number', 'similarity_value']], on='patent_number')
count.to_csv('/Users/nixin/PycharmProjects/PatentSolver_demonstrator/MCDA/data/mcda.csv', index = False)

print('=======')
print(count.columns)

## project the goodness for each column
criteria_data = Data(count.iloc[:, 1:7], [MAX, MAX, MAX, MAX,MAX,MAX],
                     anames= count['patent_number'],
                     cnames= count.columns[1:7],
                     weights= [0.1, 0.3, 0.1, 0.1, 0.1, 0.3]) ##assign weights to attributes
print(criteria_data)
print('++++++++')


print('==========')
dm = closeness.TOPSIS(mnorm="sum") # change the normalization criteria of the alternative matric to sum (divide every value by the sum opf their criteria)
dec = dm.decide(criteria_data)
print(dec)
print("Ideal:", dec.e_.ideal)
print("Anti-Ideal:", dec.e_.anti_ideal)
print("Closeness:", dec.e_.closeness) ##print each rank's value

count['rank_topsis'] = dec.e_.closeness
count = count.sort_values(by='rank_topsis', ascending=False)
print(count.columns)
print(count)
print(len(count))

rank = []
for i in range(len(count)):
    i = i+1
    rank.append(i)
print(rank)

count['rank'] = rank
print(count)
print(count.columns)