目录
权重和综合评价+聚类进行区块化整合
金融指标权重计算(依据熵)
%% 说明
% 输入:Financial.xlsx 文件
% 格式:
% 金融发展 省 年份 (X11) (X12) (X13) (X14) (X15) (X16) (X17) (X18)
% 北京 2003 20476 12058 75 271.8 1940 7.8 635.6 1.698125726
% 2004 23781.35 13577.68 82 279.3 1894.16 6.52 713.8 1.751503202
% 2005 28969.91 15335.46 85 498.2 3287.7 7.3 840.2 1.889079949
% 2006 33793.33 18131.6 92 411.53 2638.87 5.3 982.4 1.863780913
% 2007 37700.25 19861.46 105 498.1 3099.25 5.5 1302.8 1.898161062
% 2008 43980.7 23010.7 111 586 3521.3 5.6 1519.2 1.911315171
% 2009 56960.1 31052.9 127 697.6 4044 5.9 1603.6 1.834292449
% 2010 66584.6 36479.6 163 966.5 5407 7 1863.6 1.825255759
% 2011 75001.9 39660.5 194 820.9 4124.7 5.1 2215.4 1.891098196
% 2012 84837.3 43189.5 214 923.1 4516.2 5.2 2536.91 1.964303824
% 2013 91660.5 47880.9 219 994.4 4753.5 5.1 2943.13 1.914343715
% 2014 100095.5 53650.6 235 1207.2 5659.3 5.7 3357.71 1.865692089
% 2015 128573 58559.4 263 1403.89 6496.33 6.11 3926.28 2.195599682
% 天津 2003 4062.6 3791.22 23 75.31 850.97 2.65 107.02 1.07158118
% 2004 5139.72 4146.49 23 81 791 2.76 136.97 1.239535125
% 2005 6090.5 4722.38 23 90.64 905.59 2.47 159.24 1.28970985
% 2006 6839.2 5415.72 24 105.18 978.42 2.42 186.87 1.262842244
% 2007 8242.07 6543.83 29 150.91 1353.45 3.01 288.17 1.259517744
% 2008 9954.16 7689.12 28 175.62 1493.4 2.8 360.55 1.294577273
% 2009 13887.11 11152.19 30 151.29 1561.5 2 461.2 1.245236137
% 2010 16499.25 13774.11 36 214.01 1738.1 2.4 572.99 1.197845088
% 2011 17586.91 15924.71 37 211.7 1663.6 1.9 756.5 1.104378667
% 2012 20293.79 18396.81 38 238.16 1725.8 1.9 1001.59 1.103114616
% 2013 23116.56 20857.8 38 276.8 1880.2 1.9 1235.91 1.1082933
% 2014 24777.75 23223.42 42 317.75 2094.9 2 1422.28 1.066929419
% 2015 28149.37 25994.68 42 398.34 2575 2.4 1603.23 1.082889653
% ......
% ......
% ......
% 输出:权重 W_Financial.csv 和综合评价 S_Financial.csv 文件
%%
clear all
clc
datacols = 8; % 输入指标个数
[numericData, textData, rawData] = xlsread('Financial.xlsx');
% 自动统计当前省的个数——S_num
S_num = 0;
[endl, ~] = size(textData);
for i = 2 : endl
if(~isempty(textData{i,2}))
S_num = S_num+1 ;%统计省份个数
end
end
% 自动数据及其规范化——数据总行数 Data_num、属性个数 datacols、每个省的年份总数 S_data——【Data_num/S_num = S_data】
[Data_num,~ ] = size(numericData);
S_data = Data_num / S_num;
for i = 1 : S_num
x = numericData((1+S_data*(i-1)):(13+S_data*(i-1)), 2:(datacols+1)); % 每个省的数据
[s,w] = entropy(x);
[~, t_s] = size(s);
for j = 1 : t_s
S(i,j) = s(1,j);
end
[~, t_w] = size(w);
for j = 1 : t_w
W(i,j) = w(1,j);
end
end
S_cell = num2cell(S);
cell2csv('S_Financial.csv',S_cell);
W_cell = num2cell(W);
cell2csv('W_Financial.csv',W_cell);
旅游指标权重(依据熵)
%% 说明
% 输入:Tourism.xlsx 文件
% 格式:
% 金融发展 省 年份 (X21) (X22) (X23) (X24) (X25) (X26) (X27) (X28)
% 北京 2003 20476 12058 75 271.8 1940 7.8 635.6 1.698125726
% 2004 23781.35 13577.68 82 279.3 1894.16 6.52 713.8 1.751503202
% 2005 28969.91 15335.46 85 498.2 3287.7 7.3 840.2 1.889079949
% 2006 33793.33 18131.6 92 411.53 2638.87 5.3 982.4 1.863780913
% 2007 37700.25 19861.46 105 498.1 3099.25 5.5 1302.8 1.898161062
% 2008 43980.7 23010.7 111 586 3521.3 5.6 1519.2 1.911315171
% 2009 56960.1 31052.9 127 697.6 4044 5.9 1603.6 1.834292449
% 2010 66584.6 36479.6 163 966.5 5407 7 1863.6 1.825255759
% 2011 75001.9 39660.5 194 820.9 4124.7 5.1 2215.4 1.891098196
% 2012 84837.3 43189.5 214 923.1 4516.2 5.2 2536.91 1.964303824
% 2013 91660.5 47880.9 219 994.4 4753.5 5.1 2943.13 1.914343715
% 2014 100095.5 53650.6 235 1207.2 5659.3 5.7 3357.71 1.865692089
% 2015 128573 58559.4 263 1403.89 6496.33 6.11 3926.28 2.195599682
% 天津 2003 4062.6 3791.22 23 75.31 850.97 2.65 107.02 1.07158118
% 2004 5139.72 4146.49 23 81 791 2.76 136.97 1.239535125
% 2005 6090.5 4722.38 23 90.64 905.59 2.47 159.24 1.28970985
% 2006 6839.2 5415.72 24 105.18 978.42 2.42 186.87 1.262842244
% 2007 8242.07 6543.83 29 150.91 1353.45 3.01 288.17 1.259517744
% 2008 9954.16 7689.12 28 175.62 1493.4 2.8 360.55 1.294577273
% 2009 13887.11 11152.19 30 151.29 1561.5 2 461.2 1.245236137
% 2010 16499.25 13774.11 36 214.01 1738.1 2.4 572.99 1.197845088
% 2011 17586.91 15924.71 37 211.7 1663.6 1.9 756.5 1.104378667
% 2012 20293.79 18396.81 38 238.16 1725.8 1.9 1001.59 1.103114616
% 2013 23116.56 20857.8 38 276.8 1880.2 1.9 1235.91 1.1082933
% 2014 24777.75 23223.42 42 317.75 2094.9 2 1422.28 1.066929419
% 2015 28149.37 25994.68 42 398.34 2575 2.4 1603.23 1.082889653
% ......
% ......
% ......
% 输出:权重 W_Tourism.csv 和综合评价 S_Tourism.csv 文件
%%
clear all
clc
datacols = 8; % 输入指标个数
[numericData, textData, rawData] = xlsread('Tourism.xlsx');
% 自动统计当前省的个数——S_num
S_num = 0;
[endl, ~] = size(textData);
for i = 2 : endl
if(~isempty(textData{i,2}))
S_num = S_num+1 ;%统计省份个数
end
end
[Data_num,~ ] = size(numericData);
S_data = Data_num / S_num;
for i = 1 : S_num
x = numericData((1+S_data*(i-1)):(13+S_data*(i-1)), 2:(datacols+1)); % 每个省的数据
[s,w] = entropy(x);
[~, t_s] = size(s);
for j = 1 : t_s
S(i,j) = s(1,j);
end
[~, t_w] = size(w);
for j = 1 : t_w
W(i,j) = w(1,j);
end
end
S_cell = num2cell(S);
cell2csv('S_Tourism.csv',S_cell);
W_cell = num2cell(W);
cell2csv('W_Tourism.csv',W_cell);
熵运算
function [s,w] = entropy(x)
% 函数shang.m, 实现用熵值法求各指标(列)的权重及各数据行的得分
% x为原始数据矩阵, 一行代表一个国家, 每列对应一个指标
% s返回各行得分, w返回各列权重
[n,m]=size(x); % n=行(样本数), m=列(属性)
%% 数据的归一化处理
% Matlab2010b,2011a,b版本都有bug,需如下处理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可
[X,ps]=mapminmax(x');
ps.ymin=0.002; % 归一化后的最小值
ps.ymax=0.996; % 归一化后的最大值
ps.yrange=ps.ymax-ps.ymin; % 归一化后的极差,若不调整该值, 则逆运算会出错
X=mapminmax(x',ps);
% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据
X=X'; % X为归一化后的数据, 23行(国家), 5列(指标)
%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)
for i=1:n
for j=1:m
p(i,j)=X(i,j)/sum(X(:,j));
end
end
%% 计算第j个指标的熵值e(j)
k=1/log(n);
for j=1:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e; % 计算信息熵冗余度
w=d./sum(d); % 求权值w
s=w*p'; % 求综合得分[\code]
end
区块聚类
%clear all; close all; clc
%x=[randn(3,2)*.4; randn(4,2)*.5+ones(4,1)*[4 4]];
x = [1; 3; 2; 2; 3; 4; 2]; % 每列为一个样本、可以自己调整
[L, C] = kmeans(x',3);
L
C
聚类
function [L,C] = kmeans(X,k)
%KMEANS Cluster multivariate data using the k-means++ algorithm.
% [L,C] = kmeans_pp(X,k) produces a 1-by-size(X,2) vector L with one class
% label per column in X and a size(X,1)-by-k matrix C containing the
% centers corresponding to each class.
% Version: 2013-02-08
% Authors: Laurent Sorber ([email protected])
% 聚类:
% 输入X为列格式:每行一个样本(空格换行或者加入分号;)
% [
% 1
% 2
% 3
% ]
% 返回L:类别1、2、3.。。。根据输入k来调整
% 返回C:每类的中心点
L = [];
L1 = 0;
while length(unique(L)) ~= k
% The k-means++ initialization.
% C就是从X中随机挑一个随机点
C = X(:,1+round(rand*(size(X,2)-1))); %size(X,2)是数据集合X的数据点的数目,C是中心点的集合
L = ones(1,size(X,2));
for i = 2:k
D = X-C(:,L); %-1,此时的C扩大了,D相当于每个X-C的集合
D = cumsum(sqrt(dot(D,D,1))); %将每个数据点与中心点的距离,依次累加,欧氏距离
if D(end) == 0, C(:,i:k) = X(:,ones(1,k-i+1));
return;
end
C(:,i) = X(:,find(rand < D/D(end),1)); %find的第二个参数表示返回的索引的数目,D/D(end)距离越远概率越大
[~,L] = max(bsxfun(@minus,2*real(C'*X),dot(C,C,1).')); %碉堡了,这句,将每个数据点进行分类。
end
% The k-means algorithm.
% any函数:检测矩阵中是否有非零元素,如果有,则返回1,否则,返回0。
while any(L ~= L1)
L1 = L;
for i = 1:k, l = L==i; C(:,i) = sum(X(:,l),2)/sum(l); end %l是各族索引
[~,L] = max(bsxfun(@minus,2*real(C'*X),dot(C,C,1).'),[],1);
end
end