综合评价方法及应用(层次分析法)¶
In [1]:
Copied!
%run init.py
#%cd "F:\\python"
%run init.py
#%cd "F:\\python"
5.1 综合评价的基本概念¶
5.2 评价指标体系的构建¶
5.2.1 指标体系的构建原则¶
5.2.2 评价指标体系的选取¶
In [3]:
Copied!
import pandas as pd
pd.set_option('display.max_rows',31) #显示数据框最大行数
#如果不使用本地文件,可以使用以下代码从网络上直接读取数据:
d31=pd.read_excel('http://www.getwage.xyz/courses/multi_variance/cluster/mvsData.xlsx','d31',index_col=0)
#d31=pd.read_excel('mvsData.xlsx','d31',index_col=0); #读取居民消费支出数据
d51=d31[['衣着','食品','居住','交通','教育','医疗','设备','杂项']] #指标体系数据
print(d51)
import pandas as pd
pd.set_option('display.max_rows',31) #显示数据框最大行数
#如果不使用本地文件,可以使用以下代码从网络上直接读取数据:
d31=pd.read_excel('http://www.getwage.xyz/courses/multi_variance/cluster/mvsData.xlsx','d31',index_col=0)
#d31=pd.read_excel('mvsData.xlsx','d31',index_col=0); #读取居民消费支出数据
d51=d31[['衣着','食品','居住','交通','教育','医疗','设备','杂项']] #指标体系数据
print(d51)
衣着 食品 居住 交通 教育 医疗 设备 杂项 地区 北京 2229.5 8488.5 15751.4 4979.0 4310.9 3739.7 2387.3 1151.9 天津 1999.5 8983.7 6946.1 4236.4 3584.4 2991.9 1956.7 1154.9 河北 1304.8 4675.7 4301.6 2415.7 1984.1 1699.0 1170.4 435.8 山西 1289.9 3997.2 3331.6 1979.7 2136.2 1820.7 910.7 396.5 内蒙古 1765.4 5517.3 3943.7 3218.4 2407.7 2108.0 1185.8 597.1 辽宁 1586.1 5956.5 4417.0 2848.5 2929.3 2434.2 1275.3 756.0 吉林 1406.8 4675.4 3351.5 2518.1 2436.6 2174.0 948.3 564.7 黑龙江 1437.6 4781.1 3314.2 2317.4 2444.9 2457.1 884.8 514.4 上海 2071.8 10952.6 15046.4 5355.7 5495.1 3204.8 2122.8 1355.9 江苏 1573.4 6847.0 7247.3 3732.2 2946.4 2166.5 1496.4 688.1 浙江 1877.1 8928.9 8403.2 4552.8 3624.0 2122.6 1715.9 801.3 安徽 1300.6 6080.8 4281.3 2286.6 2132.8 1489.9 1154.3 411.2 福建 1319.6 8095.6 6974.9 3019.4 2509.0 1506.8 1269.7 619.3 江西 1077.6 5215.2 4398.8 2104.3 2094.2 1264.5 1128.6 367.3 山东 1443.1 5416.8 4370.1 2991.5 2409.7 1816.5 1538.9 440.8 河南 1226.5 4186.8 3723.1 1976.0 2016.8 1746.1 1101.5 354.9 湖北 1422.4 5946.8 4769.1 2822.2 2459.6 2230.9 1418.5 497.5 湖南 1262.2 5771.0 4306.1 2538.5 3017.4 1961.6 1226.2 395.8 广东 1192.2 9369.2 7329.1 3833.6 3244.4 1770.4 1560.2 695.5 广西 648.0 5031.2 3493.2 2384.7 2007.0 1616.0 944.1 294.2 海南 697.7 7122.3 4110.4 2578.2 2413.4 1294.0 932.7 406.2 重庆 1491.9 6666.7 3851.2 2632.8 2312.2 1925.4 1392.5 501.3 四川 1213.0 6466.8 3678.8 2576.4 1813.5 1934.9 1201.3 453.7 贵州 984.0 4110.2 2941.7 2405.6 1865.6 1274.8 873.8 324.3 云南 822.7 4558.4 3370.6 2439.0 1950.0 1401.4 926.6 311.2 西藏 1446.3 4792.5 2320.6 2015.2 690.3 519.2 847.7 397.4 陕西 1227.5 4671.9 3625.3 2154.8 2243.4 1977.4 1151.1 413.3 甘肃 1125.3 4574.0 3440.4 1972.7 1843.5 1619.3 945.3 358.6 青海 1359.8 5130.9 3304.0 2587.6 1731.8 1995.6 953.2 481.8 宁夏 1476.6 4605.2 3245.1 3018.1 2352.4 1929.3 1144.5 525.5 新疆 1472.1 5042.7 3270.9 2408.1 1876.1 1725.4 1159.5 441.7
5.3 数据无量纲化及权重确定¶
5.3.1 观测指标的无量纲方法¶
In [5]:
Copied!
#def bz(x): return (x-x.min())/(x.max()-x.min())*60+40 #定义规范化函数
def bz(x):
z=(x-x.min())/(x.max()-x.min())*60+40
return(z)
#def bz(x): return (x-x.min())/(x.max()-x.min())*60+40 #定义规范化函数
def bz(x):
z=(x-x.min())/(x.max()-x.min())*60+40
return(z)
In [7]:
Copied!
Z=d51.apply(bz,0);Z #数据无量纲化
pd.set_option('display.precision',2) #设置数据框输出精度,2位小数
print(Z)
Z=d51.apply(bz,0);Z #数据无量纲化
pd.set_option('display.precision',2) #设置数据框输出精度,2位小数
print(Z)
衣着 食品 居住 交通 教育 医疗 设备 杂项 地区 北京 100.00 78.74 100.00 93.32 85.21 100.00 100.00 88.47 天津 91.27 83.02 60.66 80.15 76.14 86.07 83.22 88.64 河北 64.92 45.85 48.85 47.86 56.16 61.98 52.58 48.00 山西 64.35 40.00 44.52 40.12 58.06 64.25 42.46 45.78 内蒙古 82.39 53.11 47.25 62.09 61.45 69.60 53.18 57.12 辽宁 75.59 56.90 49.37 55.53 67.96 75.68 56.66 66.10 吉林 68.79 45.85 44.61 49.67 61.81 70.83 43.92 55.29 黑龙江 69.96 46.76 44.44 46.11 61.91 76.10 41.45 52.44 上海 94.02 100.00 96.85 100.00 100.00 90.03 89.69 100.00 江苏 75.11 64.58 62.01 71.21 68.17 70.69 65.28 62.26 浙江 86.63 82.54 67.17 85.76 76.63 69.87 73.83 68.66 安徽 64.76 57.97 48.76 45.57 58.01 58.08 51.95 46.61 福建 65.48 75.35 60.79 58.56 62.71 58.40 56.45 58.37 江西 56.30 50.51 49.28 42.33 57.53 53.89 50.95 44.13 山东 70.17 52.25 49.16 58.07 61.47 64.17 66.94 48.28 河南 61.95 41.64 46.27 40.06 56.56 62.86 49.89 43.43 湖北 69.38 56.82 50.94 55.07 62.09 71.89 62.24 51.49 湖南 63.30 55.30 48.87 50.03 69.06 66.87 54.75 45.74 广东 60.65 86.34 62.37 73.00 71.89 63.31 67.77 62.68 广西 40.00 48.92 45.24 47.31 56.44 60.43 43.76 40.00 海南 41.89 66.96 48.00 50.74 61.52 54.44 43.31 46.33 重庆 72.02 63.03 46.84 51.71 60.25 66.20 61.23 51.70 四川 61.44 61.30 46.07 50.71 54.03 66.38 53.78 49.01 贵州 52.75 40.97 42.77 47.68 54.68 54.08 41.02 41.70 云南 46.63 44.84 44.69 48.27 55.73 56.44 43.07 40.96 西藏 70.29 46.86 40.00 40.75 40.00 40.00 40.00 45.83 陕西 61.99 45.82 45.83 43.23 59.39 67.17 51.82 46.73 甘肃 58.11 44.98 45.00 40.00 54.40 60.50 43.80 43.64 青海 67.00 49.78 44.39 50.91 53.01 67.51 44.11 50.60 宁夏 71.44 45.24 44.13 58.54 60.76 66.27 51.57 53.07 新疆 71.27 49.02 44.25 47.72 54.81 62.47 52.15 48.34
5.3.2 评价指标权重确定方法¶
In [9]:
Copied!
import numpy as np
np.set_printoptions(precision=4) #设置numpy输出精度
def AHP(A): #A为判断矩阵
print('判断矩阵:\n',A)
m=np.shape(A)[0];
D=np.linalg.eig(A); #特征值
E=np.real(D[0][0]); #特征向量
ai=np.real(D[1][:,0]); #最大特征值
W=ai/sum(ai) #权重归一化
if(m>2):
print('L_max=',E.round(4))
CI=(E-m)/(m-1) #计算一致性比例
RI=[0,0,0.52,0.89,1.12,1.25,1.35,1.42,1.46,1.49,1.52,1.54,1.56,1.58,1.59]
CR=CI/RI[m-1]
print('一致性指标 CI:',round(CI,4))
print('一致性比例 CR:',round(CR,4))
if CR<0.1: print('CR<=0.1,一致性可以接受!')
else: print('CR>0.1,一致性不可接受!')
print('权重向量:')
return(W)
import numpy as np
np.set_printoptions(precision=4) #设置numpy输出精度
def AHP(A): #A为判断矩阵
print('判断矩阵:\n',A)
m=np.shape(A)[0];
D=np.linalg.eig(A); #特征值
E=np.real(D[0][0]); #特征向量
ai=np.real(D[1][:,0]); #最大特征值
W=ai/sum(ai) #权重归一化
if(m>2):
print('L_max=',E.round(4))
CI=(E-m)/(m-1) #计算一致性比例
RI=[0,0,0.52,0.89,1.12,1.25,1.35,1.42,1.46,1.49,1.52,1.54,1.56,1.58,1.59]
CR=CI/RI[m-1]
print('一致性指标 CI:',round(CI,4))
print('一致性比例 CR:',round(CR,4))
if CR<0.1: print('CR<=0.1,一致性可以接受!')
else: print('CR>0.1,一致性不可接受!')
print('权重向量:')
return(W)
In [11]:
Copied!
A=np.array([[1,2],[1/2,1]])
A_W=AHP(A);
A_W
A=np.array([[1,2],[1/2,1]])
A_W=AHP(A);
A_W
判断矩阵: [[1. 2. ] [0.5 1. ]] 权重向量:
Out[11]:
array([0.6667, 0.3333])
In [13]:
Copied!
B1=np.array([[1,1/4,1/3,1/2],[4,1,2,3],[3,1/2,1,4],[2,1/3,1/4,1]])
B1_W=AHP(B1);B1_W
B1=np.array([[1,1/4,1/3,1/2],[4,1,2,3],[3,1/2,1,4],[2,1/3,1/4,1]])
B1_W=AHP(B1);B1_W
判断矩阵: [[1. 0.25 0.3333 0.5 ] [4. 1. 2. 3. ] [3. 0.5 1. 4. ] [2. 0.3333 0.25 1. ]] L_max= 4.1432 一致性指标 CI: 0.0477 一致性比例 CR: 0.0536 CR<=0.1,一致性可以接受! 权重向量:
Out[13]:
array([0.0914, 0.45 , 0.3267, 0.1319])
In [15]:
Copied!
B2=np.array([[1,2,3,3],[1/2,1,2,4],[1/3,1/2,1,2],[1/3,1/4,1/2,1]])
B2_W=AHP(B2);B2_W
B2=np.array([[1,2,3,3],[1/2,1,2,4],[1/3,1/2,1,2],[1/3,1/4,1/2,1]])
B2_W=AHP(B2);B2_W
判断矩阵: [[1. 2. 3. 3. ] [0.5 1. 2. 4. ] [0.3333 0.5 1. 2. ] [0.3333 0.25 0.5 1. ]] L_max= 4.0968 一致性指标 CI: 0.0323 一致性比例 CR: 0.0363 CR<=0.1,一致性可以接受! 权重向量:
Out[15]:
array([0.4428, 0.3004, 0.1592, 0.0976])
5.4 综合评价方法及其应用¶
5.4.1 综合评分法¶
In [18]:
Copied!
pd.set_option('display.max_rows',8)
S=Z.mean(axis=1);S #按列求均值
pd.set_option('display.max_rows',8)
S=Z.mean(axis=1);S #按列求均值
Out[18]:
地区
北京 93.22
天津 81.15
河北 53.27
山西 49.94
...
甘肃 48.80
青海 53.41
宁夏 56.38
新疆 53.75
Length: 31, dtype: float64
In [20]:
Copied!
len(S[S<60])
len(S[S<60])
Out[20]:
22
In [22]:
Copied!
Sr=S.rank(ascending=False).astype(int) #综合排名
print(Sr)
Sr=S.rank(ascending=False).astype(int) #综合排名
print(Sr)
地区
北京 2
天津 3
河北 21
山西 26
..
甘肃 27
青海 20
宁夏 14
新疆 19
Length: 31, dtype: int32
In [24]:
Copied!
pd.set_option('display.max_rows',31)
print(pd.DataFrame({'综合评分':S,'综合排名':Sr}))
#pd.concat([A1_Z,M1],axis=1).round(2)
pd.set_option('display.max_rows',31)
print(pd.DataFrame({'综合评分':S,'综合排名':Sr}))
#pd.concat([A1_Z,M1],axis=1).round(2)
综合评分 综合排名 地区 北京 93.22 2 天津 81.15 3 河北 53.27 21 山西 49.94 26 内蒙古 60.77 9 辽宁 62.97 7 吉林 55.10 16 黑龙江 54.90 17 上海 96.32 1 江苏 67.41 6 浙江 76.39 4 安徽 53.96 18 福建 62.01 8 江西 50.61 24 山东 58.81 12 河南 50.33 25 湖北 59.99 10 湖南 56.74 13 广东 68.50 5 广西 47.76 28 海南 51.65 23 重庆 59.12 11 四川 55.34 15 贵州 46.96 30 云南 47.58 29 西藏 45.47 31 陕西 52.75 22 甘肃 48.80 27 青海 53.41 20 宁夏 56.38 14 新疆 53.75 19
5.4.2 层次分析法¶
In [26]:
Copied!
S2=pd.DataFrame()
S2['A1得分']=Z[['衣着','食品','居住','交通']].dot(B1_W) #常规消费A1得分
S2['A1排名']=S2['A1得分'].rank(ascending=False).astype(int) #常规消费A2排序
print(S2)
S2=pd.DataFrame()
S2['A1得分']=Z[['衣着','食品','居住','交通']].dot(B1_W) #常规消费A1得分
S2['A1排名']=S2['A1得分'].rank(ascending=False).astype(int) #常规消费A2排序
print(S2)
A1得分 A1排名 地区 北京 89.55 2 天津 76.09 4 河北 48.84 21 山西 43.72 30 内蒙古 55.06 12 辽宁 55.97 10 吉林 48.04 22 黑龙江 48.04 23 上海 98.42 1 江苏 65.58 7 浙江 78.32 3 安徽 53.95 14 福建 67.48 6 江西 49.56 18 山东 53.64 15 河南 44.80 29 湖北 55.81 11 湖南 53.24 16 广东 74.40 5 广西 46.69 25 海南 56.33 9 重庆 57.07 8 四川 54.94 13 贵州 43.52 31 云南 45.41 28 西藏 45.96 26 陕西 46.96 24 甘肃 45.53 27 青海 49.74 17 宁夏 49.03 20 新疆 49.32 19
In [28]:
Copied!
S2['A2得分']=Z[['教育','医疗','设备','杂项']].dot(B2_W) #附加消费A2得分
S2['A2排名']=S2['A2得分'].rank(ascending=False).astype(int) #附加消费A2排序
print(S2)
S2['A2得分']=Z[['教育','医疗','设备','杂项']].dot(B2_W) #附加消费A2得分
S2['A2排名']=S2['A2得分'].rank(ascending=False).astype(int) #附加消费A2排序
print(S2)
A1得分 A1排名 A2得分 A2排名 地区 北京 89.55 2 92.33 2 天津 76.09 4 81.47 3 河北 48.84 21 56.54 19 山西 43.72 30 56.23 20 内蒙古 55.06 12 62.16 10 辽宁 55.97 10 68.30 5 吉林 48.04 22 61.03 14 黑龙江 48.04 23 61.99 11 上海 98.42 1 95.37 1 江苏 65.58 7 67.89 6 浙江 78.32 3 73.38 4 安徽 53.95 14 55.96 23 福建 67.48 6 59.99 16 江西 49.56 18 54.08 26 山东 53.64 15 61.86 12 河南 44.80 29 56.11 21 湖北 55.81 11 64.03 8 湖南 53.24 16 63.85 9 广东 74.40 5 67.76 7 广西 46.69 25 54.02 27 海南 56.33 9 55.01 25 重庆 57.07 8 61.36 13 四川 54.94 13 57.21 18 贵州 43.52 31 51.06 30 云南 45.41 28 52.49 29 西藏 45.96 26 40.57 31 陕西 46.96 24 59.29 17 甘肃 45.53 27 53.49 28 青海 49.74 17 55.71 24 宁夏 49.03 20 60.20 15 新疆 49.32 19 56.06 22
In [30]:
Copied!
S2['层次得分']=S2[['A1得分','A2得分']].dot(A_W) #A层次综合得分
S2['层次排名']=S2['层次得分'].rank(ascending=False).astype(int) #A层次综合排序
pd.set_option('display.max_rows',31)
print(S2)
S2['层次得分']=S2[['A1得分','A2得分']].dot(A_W) #A层次综合得分
S2['层次排名']=S2['层次得分'].rank(ascending=False).astype(int) #A层次综合排序
pd.set_option('display.max_rows',31)
print(S2)
A1得分 A1排名 A2得分 A2排名 层次得分 层次排名 地区 北京 89.55 2 92.33 2 90.48 2 天津 76.09 4 81.47 3 77.88 3 河北 48.84 21 56.54 19 51.41 22 山西 43.72 30 56.23 20 47.89 28 内蒙古 55.06 12 62.16 10 57.42 11 辽宁 55.97 10 68.30 5 60.08 8 吉林 48.04 22 61.03 14 52.37 19 黑龙江 48.04 23 61.99 11 52.69 18 上海 98.42 1 95.37 1 97.40 1 江苏 65.58 7 67.89 6 66.35 6 浙江 78.32 3 73.38 4 76.67 4 安徽 53.95 14 55.96 23 54.62 16 福建 67.48 6 59.99 16 64.99 7 江西 49.56 18 54.08 26 51.07 24 山东 53.64 15 61.86 12 56.38 13 河南 44.80 29 56.11 21 48.57 26 湖北 55.81 11 64.03 8 58.55 9 湖南 53.24 16 63.85 9 56.77 12 广东 74.40 5 67.76 7 72.19 5 广西 46.69 25 54.02 27 49.13 25 海南 56.33 9 55.01 25 55.89 14 重庆 57.07 8 61.36 13 58.50 10 四川 54.94 13 57.21 18 55.70 15 贵州 43.52 31 51.06 30 46.03 30 云南 45.41 28 52.49 29 47.77 29 西藏 45.96 26 40.57 31 44.16 31 陕西 46.96 24 59.29 17 51.07 23 甘肃 45.53 27 53.49 28 48.18 27 青海 49.74 17 55.71 24 51.73 20 宁夏 49.03 20 60.20 15 52.75 17 新疆 49.32 19 56.06 22 51.57 21
In [32]:
Copied!
print(pd.DataFrame({'综合评分':S,'综合排名':Sr,
'层次得分':S2.层次得分,'层次排名':S2.层次排名}))
print(pd.DataFrame({'综合评分':S,'综合排名':Sr,
'层次得分':S2.层次得分,'层次排名':S2.层次排名}))
综合评分 综合排名 层次得分 层次排名 地区 北京 93.22 2 90.48 2 天津 81.15 3 77.88 3 河北 53.27 21 51.41 22 山西 49.94 26 47.89 28 内蒙古 60.77 9 57.42 11 辽宁 62.97 7 60.08 8 吉林 55.10 16 52.37 19 黑龙江 54.90 17 52.69 18 上海 96.32 1 97.40 1 江苏 67.41 6 66.35 6 浙江 76.39 4 76.67 4 安徽 53.96 18 54.62 16 福建 62.01 8 64.99 7 江西 50.61 24 51.07 24 山东 58.81 12 56.38 13 河南 50.33 25 48.57 26 湖北 59.99 10 58.55 9 湖南 56.74 13 56.77 12 广东 68.50 5 72.19 5 广西 47.76 28 49.13 25 海南 51.65 23 55.89 14 重庆 59.12 11 58.50 10 四川 55.34 15 55.70 15 贵州 46.96 30 46.03 30 云南 47.58 29 47.77 29 西藏 45.47 31 44.16 31 陕西 52.75 22 51.07 23 甘肃 48.80 27 48.18 27 青海 53.41 20 51.73 20 宁夏 56.38 14 52.75 17 新疆 53.75 19 51.57 21
案例5:广东省知识产权发展水平综合评价¶
In [34]:
Copied!
A=np.array([[1,3,5],[1/3,1,3],[1/5,1/3,1]])
A_W=AHP(A);A_W #A的权重
A=np.array([[1,3,5],[1/3,1,3],[1/5,1/3,1]])
A_W=AHP(A);A_W #A的权重
判断矩阵: [[1. 3. 5. ] [0.3333 1. 3. ] [0.2 0.3333 1. ]] L_max= 3.0385 一致性指标 CI: 0.0193 一致性比例 CR: 0.037 CR<=0.1,一致性可以接受! 权重向量:
Out[34]:
array([0.637 , 0.2583, 0.1047])
In [36]:
Copied!
B1=np.array([[1,4,5,3,6,7],[1/4,1,2,1/2,3,4],[1/5,1/2,1,1/3,2,3],[1/3,2,3,1,4,5],[1/6,1/3,1/2,1/4,1,2],[1/7,1/4,1/3,1/5,1/2,1]] )
B1_W=AHP(B1);B1_W #B1的权重
B1=np.array([[1,4,5,3,6,7],[1/4,1,2,1/2,3,4],[1/5,1/2,1,1/3,2,3],[1/3,2,3,1,4,5],[1/6,1/3,1/2,1/4,1,2],[1/7,1/4,1/3,1/5,1/2,1]] )
B1_W=AHP(B1);B1_W #B1的权重
判断矩阵: [[1. 4. 5. 3. 6. 7. ] [0.25 1. 2. 0.5 3. 4. ] [0.2 0.5 1. 0.3333 2. 3. ] [0.3333 2. 3. 1. 4. 5. ] [0.1667 0.3333 0.5 0.25 1. 2. ] [0.1429 0.25 0.3333 0.2 0.5 1. ]] L_max= 6.1626 一致性指标 CI: 0.0325 一致性比例 CR: 0.026 CR<=0.1,一致性可以接受! 权重向量:
Out[36]:
array([0.4481, 0.1427, 0.0909, 0.2205, 0.0584, 0.0394])
In [38]:
Copied!
B2=np.array([[1,4,5,7,8,9],[1/4,1,2,4,5,6],[1/5,1/2,1,3,4,5],[1/7,1/4,1/3,1,2,3],[1/8,1/5,1/4,1/2,1,2],[1/9,1/6,1/5,1/3,1/2,1]])
B2_W=AHP(B2);B2_W #B2的权重
B2=np.array([[1,4,5,7,8,9],[1/4,1,2,4,5,6],[1/5,1/2,1,3,4,5],[1/7,1/4,1/3,1,2,3],[1/8,1/5,1/4,1/2,1,2],[1/9,1/6,1/5,1/3,1/2,1]])
B2_W=AHP(B2);B2_W #B2的权重
判断矩阵: [[1. 4. 5. 7. 8. 9. ] [0.25 1. 2. 4. 5. 6. ] [0.2 0.5 1. 3. 4. 5. ] [0.1429 0.25 0.3333 1. 2. 3. ] [0.125 0.2 0.25 0.5 1. 2. ] [0.1111 0.1667 0.2 0.3333 0.5 1. ]] L_max= 6.2536 一致性指标 CI: 0.0507 一致性比例 CR: 0.0406 CR<=0.1,一致性可以接受! 权重向量:
Out[38]:
array([0.5059, 0.2082, 0.1418, 0.0677, 0.0451, 0.0313])
In [40]:
Copied!
B3=np.array([[1,5,2,6,2,6,1],[1/5,1,1/4,2,1/4,2,1/5],
[1/2,5,1,5,1,5,1/2],[1/6,1/2,1/5,1,1/5,1,1/6],
[1/2,4,1,5,1,5,1/2],[1/6,1/2,1/5,1,1/5,1,1/6],
[1,5,2,6,2,6,1]])
B3_W=AHP(B3);B3_W #B3的权重
B3=np.array([[1,5,2,6,2,6,1],[1/5,1,1/4,2,1/4,2,1/5],
[1/2,5,1,5,1,5,1/2],[1/6,1/2,1/5,1,1/5,1,1/6],
[1/2,4,1,5,1,5,1/2],[1/6,1/2,1/5,1,1/5,1,1/6],
[1,5,2,6,2,6,1]])
B3_W=AHP(B3);B3_W #B3的权重
判断矩阵: [[1. 5. 2. 6. 2. 6. 1. ] [0.2 1. 0.25 2. 0.25 2. 0.2 ] [0.5 5. 1. 5. 1. 5. 0.5 ] [0.1667 0.5 0.2 1. 0.2 1. 0.1667] [0.5 4. 1. 5. 1. 5. 0.5 ] [0.1667 0.5 0.2 1. 0.2 1. 0.1667] [1. 5. 2. 6. 2. 6. 1. ]] L_max= 7.1471 一致性指标 CI: 0.0245 一致性比例 CR: 0.0182 CR<=0.1,一致性可以接受! 权重向量:
Out[40]:
array([0.2678, 0.0545, 0.173 , 0.0358, 0.1654, 0.0358, 0.2678])
In [42]:
Copied!
pd.set_option('display.max_rows',21)
#在网站上获取第五个案例数据,可以使用下面链接
Case5=pd.read_excel('http://www.getwage.xyz/courses/multi_variance/cluster/mvsCase.xlsx','Case5',index_col=0)
Case5
pd.set_option('display.max_rows',21)
#在网站上获取第五个案例数据,可以使用下面链接
Case5=pd.read_excel('http://www.getwage.xyz/courses/multi_variance/cluster/mvsCase.xlsx','Case5',index_col=0)
Case5
Out[42]:
| B11 | B12 | B13 | B14 | B15 | B16 | B21 | B22 | B23 | B24 | B25 | B26 | B31 | B32 | B33 | B34 | B35 | B36 | B37 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 广州 | 705 | 2539 | 3155 | 2706 | 3735 | 5855 | 0.17 | 0.28 | 3.80e-03 | 0.33 | 0.22 | -0.01 | 36 | 18 | 8 | 8 | 28 | 30 | 19 |
| 深圳 | 1263 | 4952 | 5279 | 14583 | 6766 | 8390 | 0.38 | 0.43 | 1.46e-01 | 0.75 | 0.19 | 0.21 | 56 | 62 | 0 | 0 | 4 | 2 | 29 |
| 珠海 | 63 | 596 | 592 | 401 | 929 | 788 | 0.50 | 0.65 | 1.21e-01 | 0.54 | 0.25 | -0.05 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 汕头 | 52 | 403 | 1569 | 160 | 689 | 2803 | 0.33 | 0.15 | -1.69e-01 | 0.55 | 0.42 | 0.32 | 16 | 12 | 0 | 0 | 4 | 4 | 7 |
| 韶关 | 14 | 170 | 41 | 85 | 272 | 104 | 1.33 | 1.18 | 3.67e-01 | 0.18 | 0.47 | 1.26 | 0 | 0 | 0 | 0 | 9 | 0 | 0 |
| 河源 | 1 | 25 | 15 | 10 | 42 | 84 | -0.50 | -0.24 | -7.12e-01 | -0.41 | 0.40 | 1.33 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 梅州 | 24 | 47 | 62 | 30 | 73 | 100 | 1.67 | 0.27 | -1.62e-01 | -0.06 | 0.33 | -0.03 | 2 | 3 | 0 | 0 | 1 | 1 | 0 |
| 惠州 | 21 | 301 | 319 | 75 | 377 | 425 | 0.24 | 0.17 | -1.52e-01 | -0.70 | 0.11 | -0.06 | 4 | 3 | 0 | 0 | 0 | 0 | 0 |
| 汕尾 | 5 | 20 | 94 | 28 | 43 | 170 | 0.00 | 0.67 | 1.46e-01 | 1.80 | 1.05 | 0.32 | 4 | 4 | 0 | 0 | 0 | 0 | 3 |
| 东莞 | 28 | 1729 | 3115 | 553 | 2603 | 6723 | 0.17 | 0.55 | 5.76e-01 | 1.26 | 0.32 | 0.50 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 中山 | 17 | 850 | 1568 | 192 | 1263 | 2794 | -0.41 | 0.52 | 3.16e-02 | 0.38 | 0.28 | 0.23 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 江门 | 41 | 583 | 1390 | 200 | 802 | 2279 | 0.08 | 0.33 | 2.89e-01 | 0.89 | 0.19 | 0.14 | 32 | 21 | 0 | 0 | 0 | 0 | 5 |
| 佛山 | 132 | 2712 | 6221 | 2016 | 5248 | 11790 | 0.59 | 0.49 | -8.53e-02 | 0.96 | 0.38 | -0.05 | 12 | 34 | 0 | 0 | 0 | 0 | 7 |
| 阳江 | 1 | 101 | 397 | 24 | 156 | 625 | -0.80 | 0.29 | -3.41e-02 | 0.00 | 0.24 | 0.14 | 12 | 6 | 0 | 0 | 0 | 0 | 0 |
| 湛江 | 22 | 118 | 194 | 112 | 153 | 318 | 0.29 | 0.30 | 3.19e-02 | 0.38 | 0.09 | 0.26 | 3 | 5 | 0 | 0 | 0 | 0 | 0 |
| 茂名 | 14 | 90 | 84 | 22 | 118 | 174 | 1.80 | 1.00 | 5.56e-01 | -0.24 | -0.21 | 0.28 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 肇庆 | 5 | 99 | 102 | 41 | 171 | 163 | -0.17 | 0.03 | 2.00e-01 | 0.37 | 0.26 | 0.19 | 3 | 0 | 0 | 0 | 0 | 0 | 0 |
| 清远 | 1 | 54 | 41 | 20 | 64 | 86 | -0.83 | 0.69 | -1.09e-01 | -0.17 | -0.21 | 0.39 | 1 | 1 | 2 | 0 | 0 | 0 | 0 |
| 潮州 | 8 | 118 | 787 | 28 | 187 | 1415 | -0.11 | 0.79 | 1.82e-01 | 0.04 | 0.29 | 0.44 | 9 | 5 | 0 | 0 | 1 | 0 | 0 |
| 揭阳 | 15 | 93 | 348 | 32 | 145 | 470 | 1.50 | 0.06 | 1.45e-01 | -0.06 | 0.51 | 0.20 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 云浮 | 8 | 38 | 54 | 29 | 47 | 91 | 0.60 | 0.73 | -2.60e-01 | 0.61 | -0.06 | 0.14 | 3 | 3 | 1 | 1 | 4 | 1 | 0 |
In [43]:
Copied!
def bz(x):return (x-x.min())/(x.max()-x.min())*60+40
Z=Case5.apply(bz,0)
S=pd.DataFrame()
S['A1得分']=Z.iloc[:,0:6].dot(B1_W) #A1得分
S['A1排名']=S.A1得分.rank(ascending=False).astype(int) #A1排名
S['A2得分']=Z.iloc[:,6:12].dot(B2_W) #A2得分
S['A2排名']=S.A2得分.rank(ascending=False).astype(int) #A2排名
S['A3得分']=Z.iloc[:,12:19].dot(B3_W) #A3得分
S['A3排名']=S.A3得分.rank(ascending=False).astype(int) #A3排名
S['综合得分']=S[['A1得分','A2得分','A3得分']].dot(A_W) #总得分
S['综合排名']=S.综合得分.rank(ascending=False).astype(int) #总排名
print(S)
def bz(x):return (x-x.min())/(x.max()-x.min())*60+40
Z=Case5.apply(bz,0)
S=pd.DataFrame()
S['A1得分']=Z.iloc[:,0:6].dot(B1_W) #A1得分
S['A1排名']=S.A1得分.rank(ascending=False).astype(int) #A1排名
S['A2得分']=Z.iloc[:,6:12].dot(B2_W) #A2得分
S['A2排名']=S.A2得分.rank(ascending=False).astype(int) #A2排名
S['A3得分']=Z.iloc[:,12:19].dot(B3_W) #A3得分
S['A3排名']=S.A3得分.rank(ascending=False).astype(int) #A3排名
S['综合得分']=S[['A1得分','A2得分','A3得分']].dot(A_W) #总得分
S['综合排名']=S.综合得分.rank(ascending=False).astype(int) #总排名
print(S)
A1得分 A1排名 A2得分 A2排名 A3得分 A3排名 综合得分 综合排名 广州 67.67 2 63.56 15 86.40 1 68.57 2 深圳 98.49 1 69.10 10 76.97 2 88.64 1 珠海 43.79 8 71.75 6 41.30 13 50.75 7 汕头 44.14 6 64.40 14 50.81 4 50.07 11 韶关 40.75 13 89.27 2 43.19 9 53.54 5 河源 40.01 21 47.50 21 40.00 19 41.94 21 梅州 40.62 15 79.19 3 41.16 14 50.63 9 惠州 41.48 9 60.31 16 41.31 12 46.33 17 汕尾 40.19 19 70.54 9 43.02 10 48.32 13 东莞 49.44 4 72.07 5 40.00 19 54.29 4 中山 44.50 5 59.65 17 40.00 19 47.94 15 江门 44.05 7 65.89 12 53.06 3 50.64 8 佛山 59.82 3 70.97 7 49.11 5 61.58 3 阳江 40.66 14 51.95 20 43.76 7 43.90 19 湛江 40.97 11 65.47 13 41.12 15 47.32 16 茂名 40.53 16 90.85 1 40.00 19 53.47 6 肇庆 40.41 17 59.19 18 40.86 16 45.31 18 清远 40.10 20 53.62 19 42.93 11 43.89 20 潮州 41.36 10 66.23 11 43.20 8 47.97 14 揭阳 40.87 12 78.12 4 40.29 17 50.43 10 云浮 40.24 18 70.74 8 44.07 6 48.52 12
In [46]:
Copied!
S
S
Out[46]:
| A1得分 | A1排名 | A2得分 | A2排名 | A3得分 | A3排名 | 综合得分 | 综合排名 | |
|---|---|---|---|---|---|---|---|---|
| 广州 | 67.67 | 2 | 63.56 | 15 | 86.40 | 1 | 68.57 | 2 |
| 深圳 | 98.49 | 1 | 69.10 | 10 | 76.97 | 2 | 88.64 | 1 |
| 珠海 | 43.79 | 8 | 71.75 | 6 | 41.30 | 13 | 50.75 | 7 |
| 汕头 | 44.14 | 6 | 64.40 | 14 | 50.81 | 4 | 50.07 | 11 |
| 韶关 | 40.75 | 13 | 89.27 | 2 | 43.19 | 9 | 53.54 | 5 |
| 河源 | 40.01 | 21 | 47.50 | 21 | 40.00 | 19 | 41.94 | 21 |
| 梅州 | 40.62 | 15 | 79.19 | 3 | 41.16 | 14 | 50.63 | 9 |
| 惠州 | 41.48 | 9 | 60.31 | 16 | 41.31 | 12 | 46.33 | 17 |
| 汕尾 | 40.19 | 19 | 70.54 | 9 | 43.02 | 10 | 48.32 | 13 |
| 东莞 | 49.44 | 4 | 72.07 | 5 | 40.00 | 19 | 54.29 | 4 |
| 中山 | 44.50 | 5 | 59.65 | 17 | 40.00 | 19 | 47.94 | 15 |
| 江门 | 44.05 | 7 | 65.89 | 12 | 53.06 | 3 | 50.64 | 8 |
| 佛山 | 59.82 | 3 | 70.97 | 7 | 49.11 | 5 | 61.58 | 3 |
| 阳江 | 40.66 | 14 | 51.95 | 20 | 43.76 | 7 | 43.90 | 19 |
| 湛江 | 40.97 | 11 | 65.47 | 13 | 41.12 | 15 | 47.32 | 16 |
| 茂名 | 40.53 | 16 | 90.85 | 1 | 40.00 | 19 | 53.47 | 6 |
| 肇庆 | 40.41 | 17 | 59.19 | 18 | 40.86 | 16 | 45.31 | 18 |
| 清远 | 40.10 | 20 | 53.62 | 19 | 42.93 | 11 | 43.89 | 20 |
| 潮州 | 41.36 | 10 | 66.23 | 11 | 43.20 | 8 | 47.97 | 14 |
| 揭阳 | 40.87 | 12 | 78.12 | 4 | 40.29 | 17 | 50.43 | 10 |
| 云浮 | 40.24 | 18 | 70.74 | 8 | 44.07 | 6 | 48.52 | 12 |
In [ ]:
Copied!