赞
踩
近期需要针对某省份十大关心的产业进行一个产业协同分析,从而分析出不同产业之间的关联程度,以及单独产业的上中下游情况,最后可以通过全产业分析得出警示名单~在中美竞争的大格局下,全产业链的分析显得尤为重要!
本文主要阐述第一层:不同产业之间的关联程度,用到的统计分析方法是灰色关联分析(Grey Relation Analysis,GRA)。
何为灰色关联分析?
通过查询,官方定义为:灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度。 在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高;反之,则较低。
为什么叫【灰色】?
灰色系统这个概念的提出是相对于白色系统和黑色系统而言的。
这个概念最初是由控制科学与工程的教授邓聚龙提出的。
按照控制论的惯例,颜色一般代表的是对于一个系统我们已知的信息的多少,比如一个力学系统:
白色就代表信息充足,元素之间的关系都是能够确定的,这就是一个白色系统
而黑色系统代表我们对于其中的结构并不清楚的系统,通常叫做黑箱或黑盒的就是这类系统。
灰色介于两者之间,表示我们只对该系统有部分了解
根据不同序列曲线几何形状的相似程度来判断其联系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小。
灰色关联分析主要有两个作用:
系统分析,判断影响系统发展的因素的重要性
综合评价,给出研究对象或者方案的优劣排名
本文介绍主要是上述第二个作用,即综合评价不同因素之间互相影响的大小,给出排名~
计算得到的关联度(协同度)系数后,多大才算优质协同?多少又是非常不协同(严重失调)?下表可以作为一个参考:
结合上表的数据,第一行【旅游总收入】代表了旅游发展的程度,剩余的因素均是我们分析的范围,最终通过【灰色关联分析】可以得到如下结果表:
下表为某一地区国内生产总值的统计数据(单位:百万元),问该地区从2000年到2005年之间哪一种产业对GDP总量影响最大?
最终通过灰色关联分析,得到关联度的结果为:
不同产业之间在同一范围内的同一指标数据(销售额或用电量),分析不同产业之间的协同度(关联度),即得到哪些产业之间关联性(协同性)比较强
本部分案例将会在接下来的Python实现部分进行演示。
gra_data = df1.iloc[:5,:5]
gra_data['年份'] = range(2000,2005)
gra_data = gra_data[['年份', '数字安防', '集成电路', '网络通信', '智能计算', '生物医药']]
gra_data
年份 | 数字安防 | 集成电路 | 网络通信 | 智能计算 | 生物医药 | |
---|---|---|---|---|---|---|
0 | 2000 | 0.094003 | 0.065841 | 0.107861 | 0.051384 | 0.042548 |
1 | 2001 | 0.106776 | 0.072375 | 0.124079 | 0.060716 | 0.045762 |
2 | 2002 | 0.133319 | 0.096361 | 0.150813 | 0.075517 | 0.055757 |
3 | 2003 | 0.059536 | 0.052358 | 0.068300 | 0.044976 | 0.045501 |
4 | 2004 | 0.049794 | 0.043851 | 0.047127 | 0.022645 | 0.034666 |
上面数据中,
目的是看这些产业哪一个和【数字安防】产业链协同最高?
import copy
df = copy.deepcopy(gra_data.iloc[:,1:])
df
数字安防 | 集成电路 | 网络通信 | 智能计算 | 生物医药 | |
---|---|---|---|---|---|
0 | 0.094003 | 0.065841 | 0.107861 | 0.051384 | 0.042548 |
1 | 0.106776 | 0.072375 | 0.124079 | 0.060716 | 0.045762 |
2 | 0.133319 | 0.096361 | 0.150813 | 0.075517 | 0.055757 |
3 | 0.059536 | 0.052358 | 0.068300 | 0.044976 | 0.045501 |
4 | 0.049794 | 0.043851 | 0.047127 | 0.022645 | 0.034666 |
i = 0
#区分参考序列和比较序列
ref=df.iloc[:,i]#为参考序列
print(ref)
com=df.drop(list(df)[i],axis=1)#为比较序列
print(com)
0 0.094003
1 0.106776
2 0.133319
3 0.059536
4 0.049794
Name: 数字安防, dtype: float64
集成电路 网络通信 智能计算 生物医药
0 0.065841 0.107861 0.051384 0.042548
1 0.072375 0.124079 0.060716 0.045762
2 0.096361 0.150813 0.075517 0.055757
3 0.052358 0.068300 0.044976 0.045501
4 0.043851 0.047127 0.022645 0.034666
#计算比较序列矩阵的行列
m=com.shape[0]
n=com.shape[1]
print(m,n)
5 4
上表中数据已经做过了归一化处理,所以跳过
import numpy as np
#与参考序列比较,相减
a=np.zeros([m,n])
for i in range(m):
for j in range(n):
a[i,j]=abs(com.iloc[i,j]-ref[i])
a
array([[0.02816244, 0.01385809, 0.04261892, 0.05145495],
[0.03440162, 0.017303 , 0.04606022, 0.06101445],
[0.03695806, 0.0174945 , 0.05780182, 0.07756191],
[0.00717776, 0.00876366, 0.01456014, 0.01403498],
[0.00594268, 0.00266634, 0.02714887, 0.01512727]])
#取出数组中最大值与最小值
a_max=np.max(a)
a_min=np.min(a)
print(a_max, a_min)
0.0775619109705818 0.0026663364003993995
#计算灰色关联系数
key=np.zeros([m,n])
for i in range(m):
for j in range(n):
key[i,j]=(a_min+0.5*a_max)/(a[i,j]+0.5*a_max)
key
array([[0.61913933, 0.78738691, 0.50918124, 0.45932151],
[0.56635468, 0.73902225, 0.48852802, 0.41532263],
[0.54723829, 0.7365075 , 0.42913751, 0.35625125],
[0.90183748, 0.87175572, 0.77702369, 0.78474976],
[0.92674251, 1. , 0.62865768, 0.76884916]])
# 计算灰色关联度
result=np.zeros(n)
for i in range(n):
result[i]=np.mean(key[:,i])
result=result.tolist()
result
[0.712262459001454, 0.8269344752760619, 0.5665056298663332, 0.5568988632058057]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。