Matlab——数据分析——旅游与金融系统评价指标及其权重

目录

权重和综合评价+聚类进行区块化整合

 金融指标权重计算(依据熵)

旅游指标权重(依据熵)

 熵运算

区块聚类

聚类


权重和综合评价+聚类进行区块化整合

 金融指标权重计算(依据熵)

%% 说明 
% 输入: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

猜你喜欢

转载自blog.csdn.net/weixin_41275726/article/details/85208230
今日推荐